From 25fe98836fbf293924fed614f78ff09600caafd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 13:26:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=82=E7=AD=89=E9=94=AE=E6=8C=87=E7=BA=B9?= =?UTF-8?q?=E7=9A=84=E9=94=AE=E6=8E=92=E5=BA=8F=E6=94=B9=E6=88=90=E5=85=B7?= =?UTF-8?q?=E5=90=8D=E6=AF=94=E8=BE=83=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts:canonicalizeModel3dRequestValue 里的嵌套三元比较器提成模块级 compareModel3dRequestEntryKeys,排序结果不变,只是不再嵌三元且不必每次递归重建比较器 验证:npx vitest run src/components/image-editor/model3d-generation(39 用例全绿) --- .../Model3dGenerationSubmission.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts b/src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts index 77a27b26b..85d218eb1 100644 --- a/src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts +++ b/src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts @@ -164,6 +164,17 @@ export function resolveModel3dRequestKey({ return `${nonce}-${fingerprintModel3dRequest(endpoint, body)}`; } +/** 键排序只求稳定,不承载任何业务语义:同一份内容必须算出同一个键。 */ +function compareModel3dRequestEntryKeys( + [left]: [string, unknown], + [right]: [string, unknown], +) { + if (left < right) { + return -1; + } + return left > right ? 1 : 0; +} + function canonicalizeModel3dRequestValue(value: unknown): unknown { if (Array.isArray(value)) { return value.map(canonicalizeModel3dRequestValue); @@ -172,7 +183,7 @@ function canonicalizeModel3dRequestValue(value: unknown): unknown { return Object.fromEntries( Object.entries(value as Record) .filter(([, entry]) => entry !== undefined) - .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0)) + .sort(compareModel3dRequestEntryKeys) .map(([key, entry]) => [key, canonicalizeModel3dRequestValue(entry)]), ); }