use metadata id as preference
This commit is contained in:
parent
f55323d161
commit
0191a69987
|
|
@ -21,6 +21,7 @@ export type AiScriptPluginMeta = {
|
||||||
description?: string;
|
description?: string;
|
||||||
permissions?: string[];
|
permissions?: string[];
|
||||||
config?: Record<string, any>;
|
config?: Record<string, any>;
|
||||||
|
id?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const parser = new Parser();
|
const parser = new Parser();
|
||||||
|
|
@ -42,19 +43,19 @@ export function savePlugin({ id, meta, src, token }: {
|
||||||
} as Plugin));
|
} as Plugin));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function savePluginToAccount(pluginOnlyOverride: boolean, { hash, meta, src, token }: {
|
async function savePluginToAccount(pluginOnlyOverride: boolean, { id, meta, src, token }: {
|
||||||
hash: string;
|
id: string;
|
||||||
meta: AiScriptPluginMeta;
|
meta: AiScriptPluginMeta;
|
||||||
src: string;
|
src: string;
|
||||||
token: string;
|
token: string;
|
||||||
}) {
|
}) {
|
||||||
const plugins = await getPluginList();
|
const plugins = await getPluginList();
|
||||||
// pluginOnlyOverrideがtrueになっているということはすでに重複していることが確定している
|
// pluginOnlyOverrideがtrueになっているということはすでに重複していることが確定している
|
||||||
const configData = pluginOnlyOverride ? plugins[hash].configData : {};
|
const configData = pluginOnlyOverride ? plugins[id].configData : {};
|
||||||
const pluginToken = pluginOnlyOverride ? plugins[hash].token : token;
|
const pluginToken = pluginOnlyOverride ? plugins[id].token : token;
|
||||||
plugins[hash] = {
|
plugins[id] = {
|
||||||
...meta,
|
...meta,
|
||||||
id: hash,
|
id,
|
||||||
active: true,
|
active: true,
|
||||||
configData,
|
configData,
|
||||||
token: pluginToken,
|
token: pluginToken,
|
||||||
|
|
@ -63,7 +64,7 @@ async function savePluginToAccount(pluginOnlyOverride: boolean, { hash, meta, sr
|
||||||
} as Plugin;
|
} as Plugin;
|
||||||
|
|
||||||
if (!pluginOnlyOverride) {
|
if (!pluginOnlyOverride) {
|
||||||
await os.api('i/registry/remove-all-keys-in-scope', { scope: ['client', 'aiscript', 'plugins', hash] });
|
await os.api('i/registry/remove-all-keys-in-scope', { scope: ['client', 'aiscript', 'plugins', id] });
|
||||||
}
|
}
|
||||||
|
|
||||||
await os.api('i/registry/set', { scope: ['client'], key: 'plugins', value: plugins });
|
await os.api('i/registry/set', { scope: ['client'], key: 'plugins', value: plugins });
|
||||||
|
|
@ -106,11 +107,15 @@ export async function parsePluginMeta(code: string): Promise<AiScriptPluginMeta>
|
||||||
throw new Error('Metadata not found');
|
throw new Error('Metadata not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
const { name, version, author, description, permissions, config } = metadata;
|
const { name, version, author, description, permissions, config, id } = metadata;
|
||||||
if (name == null || version == null || author == null) {
|
if (name == null || version == null || author == null) {
|
||||||
throw new Error('Required property not found');
|
throw new Error('Required property not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (id != null && !/^[a-zA-Z0-9_]+$/.test(id)) {
|
||||||
|
throw new Error('Invalid id format.');
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name,
|
name,
|
||||||
version,
|
version,
|
||||||
|
|
@ -118,6 +123,7 @@ export async function parsePluginMeta(code: string): Promise<AiScriptPluginMeta>
|
||||||
description,
|
description,
|
||||||
permissions,
|
permissions,
|
||||||
config,
|
config,
|
||||||
|
id,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -134,15 +140,16 @@ export async function installPlugin(code: string, meta?: AiScriptPluginMeta) {
|
||||||
const plugins = Object.keys(await getPluginList());
|
const plugins = Object.keys(await getPluginList());
|
||||||
const pluginHash = await toHash(realMeta.name, realMeta.author);
|
const pluginHash = await toHash(realMeta.name, realMeta.author);
|
||||||
|
|
||||||
const { isLocal, pluginOnlyOverride } = (await new Promise((res, rej) => {
|
const { isLocal, pluginOnlyOverride } = await new Promise((res, rej) => {
|
||||||
|
const pluginCheckId = realMeta.id ?? pluginHash;
|
||||||
os.popup(defineAsyncComponent(() => import('@/components/MkPluginSelectSaveWindow.vue')), {
|
os.popup(defineAsyncComponent(() => import('@/components/MkPluginSelectSaveWindow.vue')), {
|
||||||
isExistsFromAccount: plugins.some(v => v === pluginHash)
|
isExistsFromAccount: plugins.some(v => v === pluginCheckId)
|
||||||
}, {
|
}, {
|
||||||
done: result => {
|
done: result => {
|
||||||
res(result);
|
res(result);
|
||||||
},
|
},
|
||||||
}, 'closed');
|
}, 'closed');
|
||||||
}));
|
});
|
||||||
|
|
||||||
const token = realMeta.permissions == null || realMeta.permissions.length === 0 || pluginOnlyOverride ? null : await new Promise((res, rej) => {
|
const token = realMeta.permissions == null || realMeta.permissions.length === 0 || pluginOnlyOverride ? null : await new Promise((res, rej) => {
|
||||||
os.popup(defineAsyncComponent(() => import('@/components/MkTokenGenerateWindow.vue')), {
|
os.popup(defineAsyncComponent(() => import('@/components/MkTokenGenerateWindow.vue')), {
|
||||||
|
|
@ -165,14 +172,14 @@ export async function installPlugin(code: string, meta?: AiScriptPluginMeta) {
|
||||||
|
|
||||||
if (isLocal) {
|
if (isLocal) {
|
||||||
savePlugin({
|
savePlugin({
|
||||||
id: uuid(),
|
id: realMeta.id ?? uuid(),
|
||||||
meta: realMeta,
|
meta: realMeta,
|
||||||
token,
|
token,
|
||||||
src: code,
|
src: code,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await savePluginToAccount(pluginOnlyOverride, {
|
await savePluginToAccount(pluginOnlyOverride, {
|
||||||
hash: pluginHash,
|
id: realMeta.id ?? pluginHash,
|
||||||
meta: realMeta,
|
meta: realMeta,
|
||||||
token,
|
token,
|
||||||
src: code,
|
src: code,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue