From 362ad71a58527cd8d21fad0aaa2b29842802ebeb Mon Sep 17 00:00:00 2001 From: 4eb0da <4eb0da@yandex-team.com> Date: Tue, 5 May 2026 14:32:11 +0300 Subject: [PATCH] dict sort commit_hash:4cd6c531b4c11371be1731d2a1635aebe095d457 --- client/web/divkit/src/expressions/utils.ts | 15 ++++++++++++++- .../expression_test_data/functions_to_string.json | 3 ++- .../expression_test_data/variables_values.json | 3 ++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/client/web/divkit/src/expressions/utils.ts b/client/web/divkit/src/expressions/utils.ts index eea5d28f1..6fc5c2214 100644 --- a/client/web/divkit/src/expressions/utils.ts +++ b/client/web/divkit/src/expressions/utils.ts @@ -36,6 +36,19 @@ export function dateToString(date: Date): string { ].join(':'); } +function stringifySortReplacer(key: string, value: unknown): unknown { + if (value && value instanceof Object && !Array.isArray(value)) { + return Object.keys(value) + .sort() + .reduce>((sorted, key) => { + sorted[key] = value[key as keyof typeof value]; + return sorted; + }, {}); + } + + return value; +} + export function valToString(val: EvalValue, stringifyComplex: boolean): string { if (val.type === 'string') { return val.value; @@ -64,7 +77,7 @@ export function valToString(val: EvalValue, stringifyComplex: boolean): string { } else if (val.type === 'url') { return val.value; } else if ((val.type === 'dict' || val.type === 'array') && stringifyComplex) { - return JSON.stringify(val.value); + return JSON.stringify(val.value, stringifySortReplacer); } else if (val.type === 'dict') { return ''; } else if (val.type === 'array') { diff --git a/test_data/expression_test_data/functions_to_string.json b/test_data/expression_test_data/functions_to_string.json index f4d5f483d..fdc37484e 100644 --- a/test_data/expression_test_data/functions_to_string.json +++ b/test_data/expression_test_data/functions_to_string.json @@ -289,7 +289,8 @@ } ], "platforms": [ - "ios" + "ios", + "web" ] }, { diff --git a/test_data/expression_test_data/variables_values.json b/test_data/expression_test_data/variables_values.json index e85c27cb0..a10498902 100644 --- a/test_data/expression_test_data/variables_values.json +++ b/test_data/expression_test_data/variables_values.json @@ -183,7 +183,8 @@ } ], "platforms": [ - "ios" + "ios", + "web" ] }, {