UNPKG

podlite

Version:

Podlite - a lightweight block-based markup language

69 lines 2.32 kB
import { getTextContentFromNode, makeTransformer } from '@podlite/schema'; import { nanoid } from 'nanoid'; /** * Clean ids from tree * @returns */ export const cleanIds = (src = { skipChain: 0, podMode: 1 }) => tree => { const transformerBlocks = makeTransformer({ '*': (node, ctx, visiter) => { if ('id' in node) { if ('content' in node) { node.content = visiter(node.content, ctx); } const { id, ...rest } = node; return { ...rest }; } return node; }, }); return transformerBlocks(tree, {}); }; /** * Add set id to 'id' to each blocks */ export const frozenIds = (src = { skipChain: 0, podMode: 1 }) => tree => { const transformerBlocks = makeTransformer({ '*': (node, ctx, visiter) => { if ('id' in node) { if ('content' in node) { node.content = visiter(node.content, ctx); } const { id, ...rest } = node; return { ...rest, id: 'id' }; } return node; }, }); return transformerBlocks(tree, {}); }; const middleware = () => tree => { const transformerBlocks = makeTransformer({ '*': (node, ctx, visiter) => { const addIdField = (node) => { if (typeof node === 'object' && 'type' in node && node.type == 'block') { if (node.name == 'caption') { return node; } else if (node.name == 'head') { return { ...node, id: getTextContentFromNode(node).trim() }; } else { return { ...node, id: nanoid() }; } } return node; }; const processContent = (node) => { if (typeof node === 'object' && 'content' in node) { return { ...node, content: visiter(node.content, ctx) }; } return node; }; return processContent(addIdField(node)); }, }); return transformerBlocks(tree, {}); }; export default middleware; //# sourceMappingURL=ids.js.map