@microflash/fenceparser
Version:
A metadata parser for code fences in markdown
43 lines (37 loc) • 1.09 kB
JavaScript
/**
* @typedef {Object} FenceParserOptions
* @property {string} [rangeKey] - range key to group ranges without annotations (default: '*').
*/
import lex from "./lexer.js";
/**
* Default configuration for FenceParser.
* Contains default rangeKey.
* @namespace defaults
* @property {string} rangeKey - range key to group ranges without annotations.
*/
const defaults = {
rangeKey: '*'
}
/**
* Parser that converts code fence metadata string into an object.
* @function parse
* @param {string} input - code fence metadata string.
* @param {FenceParserOptions} [options] - User-defined options that override defaults.
* @returns {Object} Metadata object.
*/
export default function parse(input, options = defaults) {
const result = {};
if (input && input !== '{}') {
lex(input, options?.rangeKey || defaults.rangeKey)?.forEach(token => {
if (token.type === 'pair') {
result[token.key] = token.value;
} else {
if (!result[token.key]) {
result[token.key] = [];
}
token.value?.forEach(v => result[token.key].push(v));
}
});
}
return result;
}