diff --git a/manifest.json b/manifest.json index a5516a7..5ef241d 100644 --- a/manifest.json +++ b/manifest.json @@ -27,6 +27,7 @@ "src/background/gvl/gvl-catalog-normalizer.js", "src/background/db/db-retention.js", "src/background/db/db-record-locks.js", + "src/core/stable-serialize.js", "src/background/utils.js", "src/core/settings-storage.js", "src/background/settings.js", diff --git a/src/background/utils.js b/src/background/utils.js index 91f6497..16291f7 100644 --- a/src/background/utils.js +++ b/src/background/utils.js @@ -7,24 +7,3 @@ async function sha256Hex(input) { .map((byte) => byte.toString(16).padStart(2, "0")) .join(""); } - -function stableStringify(value) { - return JSON.stringify(sortObjectKeys(value)); -} - -function sortObjectKeys(value) { - if (Array.isArray(value)) { - return value.map(sortObjectKeys); - } - - if (value && typeof value === "object") { - return Object.keys(value) - .sort() - .reduce((result, key) => { - result[key] = sortObjectKeys(value[key]); - return result; - }, {}); - } - - return value; -} diff --git a/src/core/stable-serialize.js b/src/core/stable-serialize.js new file mode 100644 index 0000000..c258192 --- /dev/null +++ b/src/core/stable-serialize.js @@ -0,0 +1,20 @@ +function stableStringify(value) { + return JSON.stringify(sortObjectKeys(value)); +} + +function sortObjectKeys(value) { + if (Array.isArray(value)) { + return value.map(sortObjectKeys); + } + + if (value && typeof value === "object") { + return Object.keys(value) + .sort() + .reduce((result, key) => { + result[key] = sortObjectKeys(value[key]); + return result; + }, {}); + } + + return value; +}