UNPKG

sb-mig

Version:

CLI to rule the world. (and handle stuff related to Storyblok CMS)

78 lines (77 loc) 2.51 kB
import semver from "semver"; import { createJsonFile, readFile } from "./files.js"; export const preselectMigrations = (currentVersion, installedVersion, versionMapping, alreadyApplied = { story: [], preset: [], }) => { const final = { story: [], preset: [], }; const versionThatApplies = Object.keys(versionMapping).filter((version) => { if (semver.lte(version, installedVersion) && semver.gt(version, currentVersion)) { return version; } else { return false; } }); versionThatApplies.map((version) => { // @ts-ignore final.story.push(versionMapping[version]); // @ts-ignore final.preset.push(versionMapping[version]); }); if (Array.isArray(alreadyApplied)) { alreadyApplied = { story: alreadyApplied, preset: [], }; } const storyFlatted = final.story .flatMap((item) => item) .filter((migration) => !alreadyApplied.story.includes(migration)); const presetFlatted = final.preset .flatMap((item) => item) .filter((migration) => !alreadyApplied.preset.includes(migration)); return { story: storyFlatted, preset: presetFlatted, }; }; export const modifyOrCreateAppliedMigrationsFile = async (migrationApplied, itemType) => { const fileName = "applied-backpack-migrations.json"; let alreadyAppliedFileContent; let alreadyApplied; try { alreadyAppliedFileContent = (await readFile(fileName)); alreadyApplied = JSON.parse(alreadyAppliedFileContent).migrations; } catch (e) { console.log(`No file named: ${fileName}`); console.log("Will create one now."); alreadyApplied = { story: [], preset: [], }; } if (Array.isArray(alreadyApplied)) { alreadyApplied = { story: alreadyApplied, preset: [], }; } const migrations = { story: itemType === "story" ? [...new Set([...alreadyApplied.story, migrationApplied])] : alreadyApplied.story, preset: itemType === "preset" ? [...new Set([...alreadyApplied.preset, migrationApplied])] : alreadyApplied.preset, }; const appliedMigrationsFileContent = JSON.stringify({ migrations, }); await createJsonFile(appliedMigrationsFileContent, "applied-backpack-migrations.json"); };