UNPKG

@paroicms/cli

Version:
55 lines 2.15 kB
import { readFile, rename, writeFile } from "node:fs/promises"; import { join } from "node:path"; import { pathExists } from "@paroicms/internal-server-lib"; export async function migrateFrom31To40(directory, siteSchema) { const { version, languages, plugins, leafTypes, ...rest } = siteSchema; let nodeTypes = searchAndReplaceValue({ key: "storedOn", oldValue: "leaf", newValue: "node", object: leafTypes, }); nodeTypes = searchAndReplaceValue({ key: "storedOn", oldValue: "section", newValue: "nodel", object: nodeTypes, }); const newSchema = { version: "4.0", languages, plugins, nodeTypes, ...rest, }; await rename(join(directory, "site-schema.json"), join(directory, "site-schema-v3.1.json")); await writeFile(join(directory, "site-schema.json"), JSON.stringify(newSchema, undefined, 2)); for (const language of siteSchema.languages) { const l10nFile = join(directory, `site-schema.l10n.${language}.json`); if (!(await pathExists(l10nFile))) continue; const { leafTypes, ...rest } = JSON.parse(await readFile(l10nFile, "utf-8")); const newContent = { nodeTypes: leafTypes, ...rest, }; await rename(l10nFile, join(directory, `site-schema-v3.1.l10n.${language}.json`)); await writeFile(join(directory, `site-schema.l10n.${language}.json`), JSON.stringify(newContent, undefined, 2)); } return newSchema; } function searchAndReplaceValue({ key, oldValue, newValue, object, }) { if (typeof object !== "object") { return object; } if (Array.isArray(object)) { return object.map((value) => searchAndReplaceValue({ key, oldValue, newValue, object: value })); } return Object.fromEntries(Object.entries(object).map(([k, v]) => { if (k === key && v === oldValue) { return [k, newValue]; } return [k, searchAndReplaceValue({ key, oldValue, newValue, object: v })]; })); } //# sourceMappingURL=site-schema-migration-3.1-to-4.0.js.map