UNPKG

sb-mig

Version:

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

53 lines (52 loc) 1.89 kB
import Logger from "../../utils/logger.js"; import { createStory, updateStory } from "./stories.js"; export const createTree = (stories, storiesToUpdate = []) => { return buildTree(stories, null, storiesToUpdate); }; const buildTree = (nodes, parentId = null, storiesToUpdate = []) => { const tree = []; nodes.forEach((node) => { if (node.parent_id === parentId) { const children = buildTree(nodes, node.id, storiesToUpdate); tree.push({ action: storiesToUpdate.includes(node?.full_slug) ? "update" : "create", id: node.id, parent_id: node.parent_id, story: node, children, }); } }); return tree; }; export const traverseAndCreate = (input, config) => { const { tree, realParentId, spaceId } = input; tree.forEach(async (node) => { try { const { action, story } = node; const { parent, ...content } = story; let storyId = story.id; if (action === "create") { const result = await createStory({ ...content, parent_id: realParentId }, { ...config, spaceId }); storyId = result.story.id; } else if (action === "update") { const result = await updateStory({ ...content, parent_id: realParentId }, `${storyId}`, { force_update: true }, { ...config, spaceId }); storyId = result.story.id; } if (node.children) { traverseAndCreate({ tree: node.children, realParentId: storyId, spaceId, }, config); } } catch (e) { Logger.error("Error happened"); Logger.error(e); } }); };