diff --git a/src/app/service/content/gm_api/gm_info.ts b/src/app/service/content/gm_api/gm_info.ts index 3f7848efd..44ca42d25 100644 --- a/src/app/service/content/gm_api/gm_info.ts +++ b/src/app/service/content/gm_api/gm_info.ts @@ -34,7 +34,7 @@ export function evaluateGMInfo(envInfo: GMInfoEnv, script: TScriptInfo) { // TODO: 更多完整的信息(为了兼容Tampermonkey,后续待定) name: script.name, namespace: script.namespace, - version: script.metadata.version?.[0], + version: script.metadata.version?.[0] || "0.0", author: script.author, lastModified: script.updatetime, downloadURL: script.downloadUrl || null, diff --git a/src/app/service/service_worker/script.ts b/src/app/service/service_worker/script.ts index 59873e093..79e949dfa 100644 --- a/src/app/service/service_worker/script.ts +++ b/src/app/service/service_worker/script.ts @@ -385,7 +385,7 @@ export class ScriptService { const logger = this.logger.with({ name: script.name, uuid: script.uuid, - version: script.metadata.version![0], + version: script.metadata.version?.[0] || "0.0", upsertBy, }); let update = false; @@ -797,15 +797,8 @@ export class ScriptService { logger.error("parse metadata failed"); return false; } - const newVersion = metadata.version && metadata.version[0]; - if (!newVersion) { - logger.error("parse version failed", { version: metadata.version }); - return false; - } - let oldVersion = script.metadata.version && script.metadata.version[0]; - if (!oldVersion) { - oldVersion = "0.0.0"; - } + const newVersion = metadata.version?.[0] || "0.0"; + const oldVersion = script.metadata.version?.[0] || "0.0"; // 对比版本大小 if (ltever(newVersion, oldVersion)) { return false; @@ -896,7 +889,8 @@ export class ScriptService { } shouldIgnoreUpdate(script: Script, newMeta: Partial> | null) { - return script.ignoreVersion === newMeta?.version?.[0]; + const newVersion = newMeta?.version?.[0]; + return typeof newVersion === "string" && script.ignoreVersion === newMeta?.version?.[0]; } // 用于定时自动检查脚本更新 @@ -1187,11 +1181,15 @@ export class ScriptService { } isInstalled({ name, namespace }: { name: string; namespace: string }): Promise { + // 用於 window.external + console.error(1237, name, namespace); return this.scriptDAO.findByNameAndNamespace(name, namespace).then((script) => { + console.log(1238, name, namespace, script); + console.error(1239, name, namespace, script); if (script) { return { installed: true, - version: script.metadata.version && script.metadata.version[0], + version: script.metadata.version?.[0] || "0.0", } as App.IsInstalledResponse; } return { installed: false } as App.IsInstalledResponse; diff --git a/src/app/service/service_worker/script_update_check.ts b/src/app/service/service_worker/script_update_check.ts index ae68fb0c4..f3aa02f33 100644 --- a/src/app/service/service_worker/script_update_check.ts +++ b/src/app/service/service_worker/script_update_check.ts @@ -32,7 +32,8 @@ class ScriptUpdateCheck { if (!list) return [] as string[]; const s = new Set(); for (const entry of list) { - if (entry.script?.ignoreVersion === entry.newMeta?.version?.[0]) continue; + const newVersion = entry.newMeta?.version?.[0]; + if (typeof newVersion === "string" && entry.script?.ignoreVersion === newVersion) continue; if (entry.script?.status !== 1) continue; if (!entry.script?.checkUpdate) continue; if (!entry.sites) continue; diff --git a/src/app/service/service_worker/subscribe.ts b/src/app/service/service_worker/subscribe.ts index 479e9b0c1..7062c5565 100644 --- a/src/app/service/service_worker/subscribe.ts +++ b/src/app/service/service_worker/subscribe.ts @@ -190,15 +190,8 @@ export class SubscribeService { logger.error("parse metadata failed"); return false; } - const newVersion = metadata.version && metadata.version[0]; - if (!newVersion) { - logger.error("parse version failed", { version: metadata.version }); - return false; - } - let oldVersion = subscribe.metadata.version && subscribe.metadata.version[0]; - if (!oldVersion) { - oldVersion = "0.0.0"; - } + const newVersion = metadata.version?.[0] || "0.0"; + const oldVersion = subscribe.metadata.version?.[0] || "0.0"; // 对比版本大小 if (ltever(newVersion, oldVersion)) { return false; diff --git a/src/app/types.d.ts b/src/app/types.d.ts index 52e9a3c8f..4588e6046 100644 --- a/src/app/types.d.ts +++ b/src/app/types.d.ts @@ -34,7 +34,7 @@ declare namespace App { export type IsInstalledResponse = | { installed: true; - version: string | undefined; + version: string; } | { installed: false; diff --git a/src/pages/batchupdate/App.tsx b/src/pages/batchupdate/App.tsx index 163261fcf..1a7721d69 100644 --- a/src/pages/batchupdate/App.tsx +++ b/src/pages/batchupdate/App.tsx @@ -92,7 +92,8 @@ function App() { site.push(entry); continue; } - const isIgnored = entry.script.ignoreVersion === entry.newMeta?.version?.[0]; + const newVersion = entry.newMeta?.version?.[0]; + const isIgnored = typeof newVersion === "string" && entry.script.ignoreVersion === newVersion; const mEntry = { ...entry, }; @@ -269,12 +270,13 @@ function App() { onUpdateClick(item.uuid)}> {t("updatepage.update")} - {item.script.ignoreVersion !== item.newMeta?.version?.[0] ? ( + {typeof item.newMeta?.version?.[0] === "string" && + item.script.ignoreVersion !== item.newMeta.version[0] ? ( <> onIgnoreClick(item.uuid, item.newMeta?.version?.[0])} + onClick={() => onIgnoreClick(item.uuid, item.newMeta.version[0])} > {t("updatepage.ignore")} diff --git a/src/pages/install/App.tsx b/src/pages/install/App.tsx index b01cd9ed0..d27481a9c 100644 --- a/src/pages/install/App.tsx +++ b/src/pages/install/App.tsx @@ -200,7 +200,9 @@ function App() { await scriptClient.install({ script: newScript, code }); const metadata = newScript.metadata; setScriptInfo((prev) => (prev ? { ...prev, code, metadata } : prev)); - setOldScriptVersion(metadata!.version![0]); + const scriptVersion = metadata.version?.[0]; + const oldScriptVersion = typeof scriptVersion === "string" ? scriptVersion : "N/A"; + setOldScriptVersion(oldScriptVersion); setUpsertScript(newScript); setDiffCode(code); }; @@ -289,7 +291,8 @@ function App() { prepare = await prepareSubscribeByCode(code, url); action = prepare.subscribe; if (prepare.oldSubscribe) { - oldVersion = prepare.oldSubscribe!.metadata!.version![0] || ""; + const oldSubscribeVersion = prepare.oldSubscribe.metadata.version?.[0]; + oldVersion = typeof oldSubscribeVersion === "string" ? oldSubscribeVersion : "N/A"; } diffCode = prepare.oldSubscribe?.code; } else { @@ -297,7 +300,8 @@ function App() { prepare = await prepareScriptByCode(code, url, knownUUID, false, undefined, paramOptions); action = prepare.script; if (prepare.oldScript) { - oldVersion = prepare.oldScript!.metadata!.version![0] || ""; + const oldScriptVersion = prepare.oldScript.metadata.version?.[0]; + oldVersion = typeof oldScriptVersion === "string" ? oldScriptVersion : "N/A"; } diffCode = prepare.oldScriptCode; } @@ -793,7 +797,7 @@ function App() { {oldScriptVersion} )} - {metadataLive.version && metadataLive.version[0] !== oldScriptVersion && ( + {typeof metadataLive.version?.[0] === "string" && metadataLive.version[0] !== oldScriptVersion && ( {metadataLive.version[0]} diff --git a/src/pages/options/routes/ScriptList/ScriptCard.tsx b/src/pages/options/routes/ScriptList/ScriptCard.tsx index 65d7a54f6..34242166e 100644 --- a/src/pages/options/routes/ScriptList/ScriptCard.tsx +++ b/src/pages/options/routes/ScriptList/ScriptCard.tsx @@ -181,7 +181,7 @@ export const ScriptCardItem = React.memo( {/* 版本和更新时间 */}
- {item.metadata.version && ( + {item.metadata.version?.[0] && (
{t("version")} diff --git a/src/pages/options/routes/ScriptList/ScriptTable.tsx b/src/pages/options/routes/ScriptList/ScriptTable.tsx index efe0d684c..2fc6b724e 100644 --- a/src/pages/options/routes/ScriptList/ScriptTable.tsx +++ b/src/pages/options/routes/ScriptList/ScriptTable.tsx @@ -403,7 +403,7 @@ const NameCell = React.memo(({ col, item }: { col: string; item: ListType }) => NameCell.displayName = "NameCell"; const VersionCell = React.memo(({ item }: { item: ListType }) => { - return item.metadata.version && item.metadata.version[0]; + return item.metadata.version?.[0] || "0.0"; }); VersionCell.displayName = "VersionCell"; diff --git a/src/pages/options/routes/SubscribeList.tsx b/src/pages/options/routes/SubscribeList.tsx index 30d6ee0e5..d3674a3e6 100644 --- a/src/pages/options/routes/SubscribeList.tsx +++ b/src/pages/options/routes/SubscribeList.tsx @@ -158,7 +158,7 @@ function SubscribeList() { align: "center", key: "version", render(col, item: Subscribe) { - return item.metadata.version && item.metadata.version[0]; + return item.metadata.version?.[0] || "0.0"; }, }, { diff --git a/src/pkg/utils/script.ts b/src/pkg/utils/script.ts index ea9619593..686b2d1c3 100644 --- a/src/pkg/utils/script.ts +++ b/src/pkg/utils/script.ts @@ -83,14 +83,11 @@ export async function prepareScriptByCode( if (!metadata.name?.[0]) { throw new Error(i18n_t("error_script_name_required")); } - // 不接受空白version - if (!metadata.version?.[0]) { - throw new Error(i18n_t("error_script_version_required")); - } // 可接受空白namespace if (metadata.namespace === undefined) { throw new Error(i18n_t("error_script_namespace_required")); } + // 可接受空白version let type = SCRIPT_TYPE_NORMAL; if (metadata.crontab !== undefined) { type = SCRIPT_TYPE_CRONTAB;