幂等键指纹的键排序改成具名比较函数
- 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:
@@ -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)]),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user