From 66f9dd51dd9637e55ee9589e3112799e92f5e308 Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Thu, 30 Mar 2023 21:46:59 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20migration=20for=20multiple=20?= =?UTF-8?q?widgets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tools/config/getConfig.ts | 28 ++++++++++++++++++++++++++-- src/tools/config/writeConfig.ts | 10 ++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/tools/config/writeConfig.ts diff --git a/src/tools/config/getConfig.ts b/src/tools/config/getConfig.ts index c17ee3881..3d6139a9f 100644 --- a/src/tools/config/getConfig.ts +++ b/src/tools/config/getConfig.ts @@ -1,9 +1,13 @@ import Consola from 'consola'; +import { v4 as uuidv4 } from 'uuid'; import { BackendConfigType, ConfigType } from '../../types/config'; import { backendMigrateConfig } from './backendMigrateConfig'; import { configExists } from './configExists'; import { getFallbackConfig } from './getFallbackConfig'; import { readConfig } from './readConfig'; +import { writeConfig } from './writeConfig'; + +const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/; export const getConfig = (name: string): BackendConfigType => { if (!configExists(name)) return getFallbackConfig() as unknown as ConfigType; @@ -12,9 +16,29 @@ export const getConfig = (name: string): BackendConfigType => { // to the new format. const config = readConfig(name); if (config.schemaVersion === undefined) { - Consola.log('Migrating config file...', config); + Consola.log('Migrating config file...', config.name); return backendMigrateConfig(config, name); } - return config; + let backendConfig = config as BackendConfigType; + + if (backendConfig.widgets.some((widget) => !uuidRegex.test(widget.id))) { + backendConfig = { + ...backendConfig, + widgets: backendConfig.widgets.map((widget) => ({ + ...widget, + id: uuidv4(), + type: widget.id, + })), + }; + + Consola.log( + 'Migrating config file to multiple widgets...', + backendConfig.configProperties.name + ); + + writeConfig(backendConfig); + } + + return backendConfig; }; diff --git a/src/tools/config/writeConfig.ts b/src/tools/config/writeConfig.ts new file mode 100644 index 000000000..5d57d9d03 --- /dev/null +++ b/src/tools/config/writeConfig.ts @@ -0,0 +1,10 @@ +import fs from 'fs'; +import { BackendConfigType } from '../../types/config'; +import { generateConfigPath } from './generateConfigPath'; + +export function writeConfig(config: BackendConfigType) { + const path = generateConfigPath(config.configProperties.name); + return fs.writeFileSync(path, JSON.stringify(config, null, 4), { + encoding: 'utf8', + }); +}