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
}
}