podlite
Version:
Podlite - a lightweight block-based markup language
74 lines • 2.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.frozenIds = exports.cleanIds = void 0;
const schema_1 = require("@podlite/schema");
const nanoid_1 = require("nanoid");
/**
* Clean ids from tree
* @returns
*/
const cleanIds = (src = { skipChain: 0, podMode: 1 }) => tree => {
const transformerBlocks = (0, schema_1.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, {});
};
exports.cleanIds = cleanIds;
/**
* Add set id to 'id' to each blocks
*/
const frozenIds = (src = { skipChain: 0, podMode: 1 }) => tree => {
const transformerBlocks = (0, schema_1.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, {});
};
exports.frozenIds = frozenIds;
const middleware = () => tree => {
const transformerBlocks = (0, schema_1.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: (0, schema_1.getTextContentFromNode)(node).trim() };
}
else {
return { ...node, id: (0, nanoid_1.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, {});
};
exports.default = middleware;
//# sourceMappingURL=ids.js.map