幂等键指纹的键排序改成具名比较函数

- src/components/image-editor/model3d-generation/Model3dGenerationSubmission.ts:canonicalizeModel3dRequestValue 里的嵌套三元比较器提成模块级 compareModel3dRequestEntryKeys,排序结果不变,只是不再嵌三元且不必每次递归重建比较器

验证:npx vitest run src/components/image-editor/model3d-generation(39 用例全绿)
This commit is contained in:
2026-09-22 13:26:02 +08:00
parent b48c34d6b4
commit 25fe98836f
@@ -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<string, unknown>)
.filter(([, entry]) => entry !== undefined)
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
.sort(compareModel3dRequestEntryKeys)
.map(([key, entry]) => [key, canonicalizeModel3dRequestValue(entry)]),
);
}