diff --git a/packages/market/package.json b/packages/market/package.json index 0d49710077..f1f2282506 100644 --- a/packages/market/package.json +++ b/packages/market/package.json @@ -1,7 +1,7 @@ { "name": "@koishijs/market", "description": "Scan Package Manager for Koishi Plugins", - "version": "2.0.0", + "version": "2.0.1", "main": "lib/index.js", "typings": "lib/index.d.ts", "files": [ diff --git a/packages/market/src/index.ts b/packages/market/src/index.ts index 94ddbee914..14d3b905c6 100644 --- a/packages/market/src/index.ts +++ b/packages/market/src/index.ts @@ -117,23 +117,23 @@ export interface ScanConfig { onFailure?(name: string, reason: any): void } -function conclude(remote: RemotePackage) { - const manifest = { +export function conclude(meta: PackageJson) { + const manifest: Manifest = { description: { - en: remote.description, + en: meta.description, }, locales: [], recommends: [], - ...remote.koishi, + ...meta.koishi, service: { required: [], optional: [], implements: [], - ...remote.koishi?.service, + ...meta.koishi?.service, }, } - for (const keyword of remote.keywords ?? []) { + for (const keyword of meta.keywords ?? []) { if (keyword === 'market:hidden') { manifest.hidden = true } else if (keyword.startsWith('required:')) { diff --git a/plugins/frontend/manager/client/market/index.vue b/plugins/frontend/manager/client/market/index.vue index aef7eb93e2..7289be08fa 100644 --- a/plugins/frontend/manager/client/market/index.vue +++ b/plugins/frontend/manager/client/market/index.vue @@ -31,21 +31,21 @@ diff --git a/plugins/frontend/manager/client/settings/utils.ts b/plugins/frontend/manager/client/settings/utils.ts index ec8f38f257..4511118ef1 100644 --- a/plugins/frontend/manager/client/settings/utils.ts +++ b/plugins/frontend/manager/client/settings/utils.ts @@ -1,6 +1,5 @@ import { Dict } from 'koishi' import { computed } from 'vue' -import { PackageJson } from '@koishijs/market' import { MarketProvider } from '@koishijs/plugin-manager' import { router, store } from '@koishijs/client' import { getMixedMeta } from '../utils' @@ -28,18 +27,11 @@ export interface EnvInfo { console?: boolean } -function getKeywords(prefix: string, meta: Partial) { - prefix += ':' - return (meta.keywords || []) - .filter(name => name.startsWith(prefix)) - .map(name => name.slice(prefix.length)) -} - function isAvailable(name: string, remote: MarketProvider.Data) { - return getKeywords('impl', { + return { ...remote.versions[0], ...store.packages[remote.name], - }).includes(name) + }.manifest?.service.implements.includes(name) } function getEnvInfo(name: string) { @@ -59,32 +51,32 @@ function getEnvInfo(name: string) { } } - const data = getMixedMeta(name) + const local = store.packages[name] const result: EnvInfo = { impl: [], using: {}, deps: {} } // check implementations - for (const name of getKeywords('impl', data)) { + for (const name of local.manifest.service.implements) { if (name === 'adapter') continue result.impl.push(name) } // check services - for (const name of getKeywords('required', data)) { + for (const name of local.manifest.service.required) { setService(name, true) } - for (const name of getKeywords('optional', data)) { + for (const name of local.manifest.service.optional) { setService(name, false) } // check dependencies - for (const name in data.peerDependencies) { - if (!name.startsWith('koishi-plugin-') || !name.startsWith('@koishijs/plugin-')) continue + for (const name in local.peerDependencies) { + if (!name.includes('koishi-plugin-') || !name.startsWith('@koishijs/plugin-')) continue if (name === '@koishijs/plugin-console') continue const available = name in store.packages const fulfilled = !!store.packages[name]?.id if (!fulfilled) result.invalid = true result.deps[name] = { name, required: true, fulfilled, local: available } - for (const impl of getKeywords('impl', getMixedMeta(name))) { + for (const impl of getMixedMeta(name).manifest.service.implements) { delete result.using[impl] } } @@ -93,7 +85,10 @@ function getEnvInfo(name: string) { } export const envMap = computed(() => { - return Object.fromEntries(Object.keys(store.packages).map(name => [name, getEnvInfo(name)])) + return Object.fromEntries(Object + .keys(store.packages) + .filter(x => x) + .map(name => [name, getEnvInfo(name)])) }) export interface Tree { diff --git a/plugins/frontend/manager/package.json b/plugins/frontend/manager/package.json index 3a76fe7ad2..6156e329f3 100644 --- a/plugins/frontend/manager/package.json +++ b/plugins/frontend/manager/package.json @@ -51,7 +51,7 @@ "@types/which-pm-runs": "^1.0.0" }, "dependencies": { - "@koishijs/market": "^2.0.0", + "@koishijs/market": "^2.0.1", "cross-spawn": "^7.0.3", "ns-require": "^1.1.2", "semver": "^7.3.7", diff --git a/plugins/frontend/manager/src/packages.ts b/plugins/frontend/manager/src/packages.ts index 2c527c98ba..7ed0b31023 100644 --- a/plugins/frontend/manager/src/packages.ts +++ b/plugins/frontend/manager/src/packages.ts @@ -1,6 +1,6 @@ import { Adapter, App, Context, Dict, Logger, pick, Plugin, remove, Schema } from 'koishi' import { DataService } from '@koishijs/plugin-console' -import { PackageJson } from '@koishijs/market' +import { conclude, Manifest, PackageJson } from '@koishijs/market' import { promises as fsp } from 'fs' import { dirname } from 'path' import ns from 'ns-require' @@ -122,12 +122,13 @@ class PackageProvider extends DataService> { 'name', 'version', 'description', - 'peerDependencies', ]) as PackageProvider.Data // workspace packages are followed by symlinks result.workspace = data.$workspace result.shortname = data.name.replace(/(koishi-|^@koishijs\/)plugin-/, '') + result.manifest = conclude(data) + result.peerDependencies = { ...data.peerDependencies } // check adapter const oldLength = Object.keys(Adapter.library).length @@ -157,6 +158,7 @@ namespace PackageProvider { shortname?: string schema?: Schema workspace?: boolean + manifest?: Manifest } }