Commit f768824e authored by nanahira's avatar nanahira

better plugin check

parent 286c21d3
...@@ -41,13 +41,17 @@ async function getPackageJsonPackages() { ...@@ -41,13 +41,17 @@ async function getPackageJsonPackages() {
return dependencies; return dependencies;
} }
async function checkPluginExists(name: string) { async function checkPluginExists(
name: string,
allowCommunity: boolean,
allowOfficial: boolean,
) {
const deps = await getPackageJsonPackages(); const deps = await getPackageJsonPackages();
const entry = Object.entries(deps).find( const entry = Object.entries(deps).find(
([packageName, version]) => ([packageName, version]) =>
packageName === name || packageName === name ||
packageName === `@koishijs/plugin-${name}` || (allowOfficial && packageName === `@koishijs/plugin-${name}`) ||
packageName.endsWith(`koishi-plugin-${name}`), (allowCommunity && packageName.endsWith(`koishi-plugin-${name}`)),
); );
if (!entry) { if (!entry) {
return; return;
...@@ -90,7 +94,17 @@ async function installPlugin(name: string, info: any) { ...@@ -90,7 +94,17 @@ async function installPlugin(name: string, info: any) {
return; return;
} }
logger.info(`Installing plugin ${name}@${version || 'unknown'}.`); logger.info(`Installing plugin ${name}@${version || 'unknown'}.`);
const existingPluginVersion = await checkPluginExists(name); const allowCommunity = !info.$official;
const allowOfficial = !info.$community;
if (!allowCommunity && !allowOfficial) {
logger.warn(`Plugin ${name} is neither official nor community, skipping.`);
return;
}
const existingPluginVersion = await checkPluginExists(
name,
allowCommunity,
allowOfficial,
);
if ( if (
existingPluginVersion && existingPluginVersion &&
(existingPluginVersion === version || !version) (existingPluginVersion === version || !version)
...@@ -105,10 +119,10 @@ async function installPlugin(name: string, info: any) { ...@@ -105,10 +119,10 @@ async function installPlugin(name: string, info: any) {
if (name.includes(communityPrefix) || name.startsWith(officialPrefix)) { if (name.includes(communityPrefix) || name.startsWith(officialPrefix)) {
installList.push(`${name}@${installVersion}`); installList.push(`${name}@${installVersion}`);
} else { } else {
if (!info.$community) { if (allowOfficial) {
installList.push(`${officialPrefix}${name}@${installVersion}`); installList.push(`${officialPrefix}${name}@${installVersion}`);
} }
if (!info.$official) { if (allowCommunity) {
installList.push(`${communityPrefix}${name}@${installVersion}`); installList.push(`${communityPrefix}${name}@${installVersion}`);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment