UNPKG

sb-mig

Version:

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

338 lines (337 loc) 13.1 kB
import { managementApi } from "../../api/managementApi.js"; import { backupStories } from "../../api/stories/backup.js"; import storyblokConfig from "../../config/config.js"; import { createAndSaveToFile, getPackageJson } from "../../utils/files.js"; import Logger from "../../utils/logger.js"; import { extractFields } from "../../utils/object-utils.js"; import { apiConfig } from "../api-config.js"; import { isItFactory, unpackOne } from "../utils/cli-utils.js"; const BACKUP_COMMANDS = { components: "components", stories: "stories", componentGroups: "component-groups", datasources: "datasources", presets: "presets", componentPresets: "component-presets", roles: "roles", plugins: "plugins", }; export const backup = async (props) => { const { input, flags } = props; const command = input[1]; const rules = { all: ["all"], empty: [], }; const isIt = isItFactory(flags, rules, [ "filename", "syncDirection", "from", "to", "presets", "packageName", "yes", ]); switch (command) { case BACKUP_COMMANDS.components: Logger.warning(`back up components... with command: ${command}`); if (flags["all"]) { managementApi.components .getAllComponents(apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", prefix: "all-components", datestamp: true, res, folder: "components", }, apiConfig); }) .catch((err) => { console.log(err); console.error("error happened... :("); }); } if (isIt("empty")) { const componentToBackup = unpackOne(input); managementApi.components .getComponent(componentToBackup, apiConfig) .then(async (res) => { if (res) { await createAndSaveToFile({ ext: "json", prefix: "component-", filename: componentToBackup, datestamp: true, res, folder: "components", }, apiConfig); } }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } break; case BACKUP_COMMANDS.stories: Logger.warning(`back up stories... with command: ${command}`); if (flags["all"]) { await backupStories({ filename: "all-stories-backup", suffix: ".stories", spaceId: storyblokConfig.spaceId, }, apiConfig); } break; case BACKUP_COMMANDS.componentGroups: if (flags["all"]) { managementApi.components .getAllComponentsGroups(apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", prefix: "all-component_groups", datestamp: true, res, folder: "component-groups", }, apiConfig); }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } if (isIt("empty")) { const componentGroupToBackup = unpackOne(input); managementApi.components .getComponentsGroup(componentGroupToBackup, apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", prefix: "component_group-", datestamp: true, filename: componentGroupToBackup, res, folder: "component-groups", }, apiConfig); }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } break; case BACKUP_COMMANDS.datasources: if (flags["all"]) { managementApi.datasources .getAllDatasources(apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", prefix: "all-datasources", datestamp: true, res, folder: "datasources", }, apiConfig); }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } if (isIt("empty")) { const datasourceToBackup = unpackOne(input); managementApi.datasources .getDatasource({ datasourceName: datasourceToBackup }, apiConfig) .then(async (res) => { if (res) { await createAndSaveToFile({ ext: "json", prefix: "datasources-", filename: datasourceToBackup, datestamp: true, res, folder: "datasources", }, apiConfig); } }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } break; case BACKUP_COMMANDS.roles: if (flags["all"]) { managementApi.roles .getAllRoles(apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", prefix: "all-roles", datestamp: true, res, folder: "roles", }, apiConfig); }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } if (isIt("empty")) { const roleToBackup = unpackOne(input); managementApi.roles .getRole(roleToBackup, apiConfig) .then(async (res) => { if (res) { await createAndSaveToFile({ ext: "json", prefix: "role-", filename: roleToBackup, datestamp: true, res, folder: "roles", }, apiConfig); } }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } break; case BACKUP_COMMANDS.presets: if (flags["all"]) { managementApi.presets .getAllPresets(apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", prefix: "all-presets-", datestamp: true, res, folder: "presets", }, apiConfig); }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } if (isIt("empty")) { const presetToBackup = unpackOne(input); managementApi.presets .getPreset({ presetId: presetToBackup }, apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", prefix: "preset-", filename: presetToBackup, datestamp: true, res, folder: "presets", }, apiConfig); }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } break; case BACKUP_COMMANDS.componentPresets: if (isIt("empty")) { const componentPresetToBackup = unpackOne(input); managementApi.presets .getComponentPresets(componentPresetToBackup, apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", filename: `${componentPresetToBackup}.presets.sb.json`, res, folder: storyblokConfig.presetsBackupDirectory, }, apiConfig); }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); } else if (flags["all"]) { const allRemoteComponents = await managementApi.components.getAllComponents(apiConfig); let metadata = {}; if (flags["metadata"]) { const pkgJson = getPackageJson(); metadata = { metadata: extractFields(pkgJson, storyblokConfig.metadataSelection), }; } for (const component of allRemoteComponents) { try { const res = await managementApi.presets.getComponentPresets(component.name, apiConfig); if (res) { await createAndSaveToFile({ ext: "json", filename: `${component.name}.presets.sb`, res: { allPresets: res, ...metadata }, folder: storyblokConfig.presetsBackupDirectory, }, { ...apiConfig, sbmigWorkingDirectory: ".", }); } } catch (err) { console.log(err); Logger.error("error happened... :("); } } } break; case BACKUP_COMMANDS.plugins: if (isIt("empty")) { const pluginToBackup = unpackOne(input); managementApi.plugins .getPlugin(pluginToBackup, apiConfig) .then(async (res) => { if (res) { await createAndSaveToFile({ ext: "json", prefix: "plugin-", filename: pluginToBackup, datestamp: true, res, folder: "plugins", }, apiConfig); } }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); Logger.log("Backing up provided plugins..."); } if (flags["all"]) { managementApi.plugins .getAllPlugins(apiConfig) .then(async (res) => { await createAndSaveToFile({ ext: "json", prefix: "all-plugins-", datestamp: true, res, folder: "plugins", }, apiConfig); }) .catch((err) => { console.log(err); Logger.error("error happened... :("); }); return; } break; default: console.log(`no command like that: ${command}`); } };