66 lines
1.8 KiB
JavaScript
Raw Normal View History

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
const primitives_js_1 = require("../primitives.cjs");
const util_js_1 = require("../util.cjs");
const block_parser_js_1 = require("./block-parser.cjs");
const source_parser_js_1 = require("./source-parser.cjs");
const spec_parser_js_1 = require("./spec-parser.cjs");
const tag_js_1 = require("./tokenizers/tag.cjs");
const type_js_1 = require("./tokenizers/type.cjs");
const name_js_1 = require("./tokenizers/name.cjs");
const description_js_1 = require("./tokenizers/description.cjs");
function getParser({
startLine = 0,
fence = '```',
spacing = 'compact',
markers = primitives_js_1.Markers,
tokenizers = [(0, tag_js_1.default)(), (0, type_js_1.default)(spacing), (0, name_js_1.default)(), (0, description_js_1.default)(spacing)]
} = {}) {
if (startLine < 0 || startLine % 1 > 0) throw new Error('Invalid startLine');
const parseSource = (0, source_parser_js_1.default)({
startLine,
markers
});
const parseBlock = (0, block_parser_js_1.default)({
fence
});
const parseSpec = (0, spec_parser_js_1.default)({
tokenizers
});
const joinDescription = (0, description_js_1.getJoiner)(spacing);
return function (source) {
const blocks = [];
for (const line of (0, util_js_1.splitLines)(source)) {
const lines = parseSource(line);
if (lines === null) continue;
const sections = parseBlock(lines);
const specs = sections.slice(1).map(parseSpec);
blocks.push({
description: joinDescription(sections[0], markers),
tags: specs,
source: lines,
problems: specs.reduce((acc, spec) => acc.concat(spec.problems), [])
});
}
return blocks;
};
}
exports.default = getParser;
//# sourceMappingURL=index.cjs.map