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)]), ); }