@diplodoc/transform
Version:
A simple transformer of text in YFM (Yandex Flavored Markdown) to HTML
54 lines • 2.12 kB
JavaScript
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
;