mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 23:06:00 +00:00
89 lines
2.6 KiB
JavaScript
89 lines
2.6 KiB
JavaScript
const fs = require('fs-extra');
|
|
const fetch = require('node-fetch');
|
|
const path = require('path');
|
|
const pacote = require('pacote');
|
|
const { pluginstmpdir, pluginsdir } = require('../utility/directories');
|
|
const socket = require('../utility/socket');
|
|
|
|
async function loadPackageInfo(dir) {
|
|
const readmeFile = path.join(dir, 'README.md');
|
|
const packageFile = path.join(dir, 'package.json');
|
|
|
|
if (!(await fs.exists(packageFile))) {
|
|
return null;
|
|
}
|
|
|
|
let readme = null;
|
|
let manifest = null;
|
|
if (await fs.exists(readmeFile)) readme = await fs.readFile(readmeFile, { encoding: 'utf-8' });
|
|
if (await fs.exists(packageFile)) manifest = JSON.parse(await fs.readFile(packageFile, { encoding: 'utf-8' }));
|
|
return {
|
|
readme,
|
|
manifest,
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
script_meta: 'get',
|
|
async script({ packageName }) {
|
|
const file = path.join(pluginsdir(), packageName, 'lib', 'frontend.js');
|
|
const data = await fs.readFile(file, {
|
|
encoding: 'utf-8',
|
|
});
|
|
return data;
|
|
},
|
|
|
|
search_meta: 'get',
|
|
async search({ filter }) {
|
|
// const response = await fetch(`https://api.npms.io/v2/search?q=keywords:dbgate ${encodeURIComponent(filter)}`);
|
|
// const json = await response.json();
|
|
// const { results } = json || {};
|
|
// return (results || []).map((x) => x.package);
|
|
|
|
const response = await fetch(
|
|
`https://www.npmjs.com/search/suggestions?q=dbgate-plugin ${encodeURIComponent(filter)}`
|
|
);
|
|
const json = await response.json();
|
|
return json || [];
|
|
},
|
|
|
|
info_meta: 'get',
|
|
async info({ packageName }) {
|
|
const dir = path.join(pluginstmpdir(), packageName);
|
|
if (!(await fs.exists(dir))) {
|
|
await pacote.extract(packageName, dir);
|
|
}
|
|
return await loadPackageInfo(dir);
|
|
// return await {
|
|
// ...loadPackageInfo(dir),
|
|
// installed: loadPackageInfo(path.join(pluginsdir(), packageName)),
|
|
// };
|
|
},
|
|
|
|
installed_meta: 'get',
|
|
async installed() {
|
|
const files = await fs.readdir(pluginsdir());
|
|
return await Promise.all(
|
|
files.map((packageName) =>
|
|
fs.readFile(path.join(pluginsdir(), packageName, 'package.json')).then((x) => JSON.parse(x))
|
|
)
|
|
);
|
|
},
|
|
|
|
install_meta: 'post',
|
|
async install({ packageName }) {
|
|
const dir = path.join(pluginsdir(), packageName);
|
|
if (!(await fs.exists(dir))) {
|
|
await pacote.extract(packageName, dir);
|
|
}
|
|
socket.emitChanged(`installed-plugins-changed`);
|
|
},
|
|
|
|
uninstall_meta: 'post',
|
|
async uninstall({ packageName }) {
|
|
const dir = path.join(pluginsdir(), packageName);
|
|
await fs.rmdir(dir, { recursive: true });
|
|
socket.emitChanged(`installed-plugins-changed`);
|
|
},
|
|
};
|