mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-25 00:36:00 +00:00
plugin fixes
This commit is contained in:
@@ -6,23 +6,23 @@ const socket = require('../utility/socket');
|
|||||||
const requirePlugin = require('../shell/requirePlugin');
|
const requirePlugin = require('../shell/requirePlugin');
|
||||||
const downloadPackage = require('../utility/downloadPackage');
|
const downloadPackage = require('../utility/downloadPackage');
|
||||||
|
|
||||||
async function loadPackageInfo(dir) {
|
// async function loadPackageInfo(dir) {
|
||||||
const readmeFile = path.join(dir, 'README.md');
|
// const readmeFile = path.join(dir, 'README.md');
|
||||||
const packageFile = path.join(dir, 'package.json');
|
// const packageFile = path.join(dir, 'package.json');
|
||||||
|
|
||||||
if (!(await fs.exists(packageFile))) {
|
// if (!(await fs.exists(packageFile))) {
|
||||||
return null;
|
// return null;
|
||||||
}
|
// }
|
||||||
|
|
||||||
let readme = null;
|
// let readme = null;
|
||||||
let manifest = null;
|
// let manifest = null;
|
||||||
if (await fs.exists(readmeFile)) readme = await fs.readFile(readmeFile, { encoding: 'utf-8' });
|
// 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' }));
|
// if (await fs.exists(packageFile)) manifest = JSON.parse(await fs.readFile(packageFile, { encoding: 'utf-8' }));
|
||||||
return {
|
// return {
|
||||||
readme,
|
// readme,
|
||||||
manifest,
|
// manifest,
|
||||||
};
|
// };
|
||||||
}
|
// }
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
script_meta: 'get',
|
script_meta: 'get',
|
||||||
@@ -46,11 +46,28 @@ module.exports = {
|
|||||||
|
|
||||||
info_meta: 'get',
|
info_meta: 'get',
|
||||||
async info({ packageName }) {
|
async info({ packageName }) {
|
||||||
const dir = path.join(pluginstmpdir(), packageName);
|
try {
|
||||||
if (!(await fs.exists(dir))) {
|
const infoResp = await axios.default.get(`https://registry.npmjs.org/${packageName}`);
|
||||||
await downloadPackage(packageName, dir);
|
const { latest } = infoResp.data['dist-tags'];
|
||||||
|
const manifest = infoResp.data.versions[latest];
|
||||||
|
const { readme } = infoResp.data;
|
||||||
|
|
||||||
|
return {
|
||||||
|
readme,
|
||||||
|
manifest,
|
||||||
|
};
|
||||||
|
} catch (err) {
|
||||||
|
return {
|
||||||
|
state: 'error',
|
||||||
|
error: err.message,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
return await loadPackageInfo(dir);
|
|
||||||
|
// const dir = path.join(pluginstmpdir(), packageName);
|
||||||
|
// if (!(await fs.exists(dir))) {
|
||||||
|
// await downloadPackage(packageName, dir);
|
||||||
|
// }
|
||||||
|
// return await loadPackageInfo(dir);
|
||||||
// return await {
|
// return await {
|
||||||
// ...loadPackageInfo(dir),
|
// ...loadPackageInfo(dir),
|
||||||
// installed: loadPackageInfo(path.join(pluginsdir(), packageName)),
|
// installed: loadPackageInfo(path.join(pluginsdir(), packageName)),
|
||||||
@@ -60,11 +77,23 @@ module.exports = {
|
|||||||
installed_meta: 'get',
|
installed_meta: 'get',
|
||||||
async installed() {
|
async installed() {
|
||||||
const files = await fs.readdir(pluginsdir());
|
const files = await fs.readdir(pluginsdir());
|
||||||
return await Promise.all(
|
const res = [];
|
||||||
files.map((packageName) =>
|
for (const packageName of files) {
|
||||||
fs.readFile(path.join(pluginsdir(), packageName, 'package.json')).then((x) => JSON.parse(x))
|
const manifest = await fs
|
||||||
)
|
.readFile(path.join(pluginsdir(), packageName, 'package.json'))
|
||||||
);
|
.then((x) => JSON.parse(x));
|
||||||
|
const readmeFile = path.join(pluginsdir(), packageName, 'README.md');
|
||||||
|
if (await fs.exists(readmeFile)) {
|
||||||
|
manifest.readme = await fs.readFile(readmeFile, { encoding: 'utf-8' });
|
||||||
|
}
|
||||||
|
res.push(manifest);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
// const res = await Promise.all(
|
||||||
|
// files.map((packageName) =>
|
||||||
|
// fs.readFile(path.join(pluginsdir(), packageName, 'package.json')).then((x) => JSON.parse(x))
|
||||||
|
// )
|
||||||
|
// );
|
||||||
},
|
},
|
||||||
|
|
||||||
install_meta: 'post',
|
install_meta: 'post',
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ import _ from 'lodash';
|
|||||||
|
|
||||||
export function extractPluginIcon(packageManifest) {
|
export function extractPluginIcon(packageManifest) {
|
||||||
const { links } = packageManifest || {};
|
const { links } = packageManifest || {};
|
||||||
const { repository, homepage } = links || {};
|
const { repository } = links || {};
|
||||||
|
const homepage = (links && links.homepage) || packageManifest.homepage;
|
||||||
const tested = repository || homepage || packageManifest.homepage;
|
const tested = repository || homepage || packageManifest.homepage;
|
||||||
|
|
||||||
if (tested) {
|
if (tested) {
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ function Delimiter() {
|
|||||||
return <span> | </span>;
|
return <span> | </span>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function PluginTab({ packageName }) {
|
function PluginTabCore({ packageName }) {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const installed = useInstalledPlugins();
|
const installed = useInstalledPlugins();
|
||||||
const info = useFetch({
|
const info = useFetch({
|
||||||
@@ -63,7 +63,7 @@ export default function PluginTab({ packageName }) {
|
|||||||
url: 'plugins/info',
|
url: 'plugins/info',
|
||||||
defaultValue: null,
|
defaultValue: null,
|
||||||
});
|
});
|
||||||
const { readme, manifest } = info || {};
|
let { readme, manifest } = info || {};
|
||||||
const handleInstall = async () => {
|
const handleInstall = async () => {
|
||||||
axios.post('plugins/install', { packageName });
|
axios.post('plugins/install', { packageName });
|
||||||
};
|
};
|
||||||
@@ -71,11 +71,22 @@ export default function PluginTab({ packageName }) {
|
|||||||
axios.post('plugins/uninstall', { packageName });
|
axios.post('plugins/uninstall', { packageName });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (info == null) {
|
||||||
|
return <LoadingInfo message="Loading extension detail" />;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (manifest == null) {
|
||||||
|
const installedFound = installed.find((x) => x.name == packageName);
|
||||||
|
if (installedFound) {
|
||||||
|
manifest = installedFound;
|
||||||
|
readme = installedFound.readme;
|
||||||
|
}
|
||||||
|
if (manifest == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<WhitePage theme={theme}>
|
|
||||||
{info == null || manifest == null ? (
|
|
||||||
<LoadingInfo message="Loading extension detail" />
|
|
||||||
) : (
|
|
||||||
<>
|
<>
|
||||||
<Header theme={theme}>
|
<Header theme={theme}>
|
||||||
<Icon src={extractPluginIcon(manifest)} />
|
<Icon src={extractPluginIcon(manifest)} />
|
||||||
@@ -98,7 +109,14 @@ export default function PluginTab({ packageName }) {
|
|||||||
</Header>
|
</Header>
|
||||||
<ReactMarkdown>{readme}</ReactMarkdown>
|
<ReactMarkdown>{readme}</ReactMarkdown>
|
||||||
</>
|
</>
|
||||||
)}
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function PluginTab({ packageName }) {
|
||||||
|
const theme = useTheme();
|
||||||
|
return (
|
||||||
|
<WhitePage theme={theme}>
|
||||||
|
<PluginTabCore packageName={packageName} />
|
||||||
</WhitePage>
|
</WhitePage>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user