UNPKG

@podlite/schema

Version:

AST tools for Podlite markup language

89 lines 2.98 kB
import { getTextContentFromNode, makeTransformer } from '..'; import { nanoid } from 'nanoid'; import slugify from 'slugify'; /** * 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, {}); }; // TODO: refactor linking for blocks export const slugifyText = (text) => { return slugify(text.trim(), {}); }; /** * Add set id to 'id' to each blocks */ export const frozenIds = (src = { skipChain: 0, podMode: 1 }) => tree => { const transformerBlocks = makeTransformer({ '*': (node, ctx, visiter) => { if ('content' in node) { node.content = visiter(node.content, ctx); } if ('id' in node) { const { id, ...rest } = node; return { ...rest, id: 'id' }; } return node; }, }); return transformerBlocks(tree, {}); }; export const setAllLinksToAnchor = (src = { skipChain: 0, podMode: 1 }) => tree => { const transformerBlocks = makeTransformer({ 'L<>': (node, ctx, visiter) => { if ('meta' in node) { if ('content' in node) { node.content = visiter(node.content, ctx); } const { id, ...rest } = node; return { ...rest, meta: '#' }; } 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: slugifyText(getTextContentFromNode(node)) }; } 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