diff --git a/web/src/routes/admin/system-settings/+page.svelte b/web/src/routes/admin/system-settings/+page.svelte index f724e2d145951..9eb7351060048 100644 --- a/web/src/routes/admin/system-settings/+page.svelte +++ b/web/src/routes/admin/system-settings/+page.svelte @@ -64,8 +64,20 @@ type SettingsComponent = ComponentType>; + // https://stackoverflow.com/questions/16167581/sort-object-properties-and-json-stringify/43636793#43636793 + const jsonReplacer = (key: string, value: unknown) => + value instanceof Object && !Array.isArray(value) + ? Object.keys(value) + .sort() + // eslint-disable-next-line unicorn/no-array-reduce + .reduce((sorted: { [key: string]: unknown }, key) => { + sorted[key] = (value as { [key: string]: unknown })[key]; + return sorted; + }, {}) + : value; + const downloadConfig = () => { - const blob = new Blob([JSON.stringify(config, null, 2)], { type: 'application/json' }); + const blob = new Blob([JSON.stringify(config, jsonReplacer, 2)], { type: 'application/json' }); const downloadKey = 'immich-config.json'; downloadManager.add(downloadKey, blob.size); downloadManager.update(downloadKey, blob.size); @@ -240,7 +252,7 @@ - copyToClipboard(JSON.stringify(config, null, 2))}> + copyToClipboard(JSON.stringify(config, jsonReplacer, 2))}>
{$t('copy_to_clipboard')}