@paroicms/cli
Version:
CLI of ParoiCMS
55 lines • 2.15 kB
JavaScript
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