UNPKG

@diplodoc/transform

Version:

A simple transformer of text in YFM (Yandex Flavored Markdown) to HTML

54 lines 2.12 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; const chalk_1 = require("chalk"); const md_1 = __importDefault(require("../../md")); const imsize_1 = __importDefault(require("../imsize")); const index_1 = __importDefault(require("./index")); const BLOCK_START = '{% changelog %}'; const BLOCK_END = '{% endchangelog %}'; function parseChangelogs(str, path) { const { parse, compile, env } = (0, md_1.default)({ plugins: [index_1.default, imsize_1.default], extractChangelogs: true, path, }); compile(parse(str)); return env.changelogs || []; } const collect = (input, { path: filepath, log, changelogs, extractChangelogs }) => { let result = input; let lastPos = 0; const rawChangelogs = []; // eslint-disable-next-line no-constant-condition while (true) { const startPos = result.indexOf(BLOCK_START, lastPos); lastPos = startPos; if (startPos === -1) { break; } const endBlockPos = result.indexOf(BLOCK_END, startPos + BLOCK_START.length); if (endBlockPos === -1) { log.error(`Changelog block must be closed${filepath ? ` in ${(0, chalk_1.bold)(filepath)}` : ''}`); break; } let endPos = endBlockPos + BLOCK_END.length; if (result[endPos + 1] === '\n') { endPos += 1; } const changelog = result.slice(startPos, endPos); rawChangelogs.push(changelog); result = result.slice(0, startPos) + result.slice(endPos); } if (rawChangelogs.length && changelogs && extractChangelogs) { const parsedChangelogs = parseChangelogs(rawChangelogs.join('\n\n'), filepath); if (parsedChangelogs.length !== rawChangelogs.length) { log.error(`Parsed changelogs less than expected${filepath ? ` in ${(0, chalk_1.bold)(filepath)}` : ''}`); } changelogs.push(...parsedChangelogs); } return result; }; module.exports = collect; //# sourceMappingURL=collect.js.map