UNPKG

@microflash/fenceparser

Version:

A metadata parser for code fences in markdown

43 lines (37 loc) 1.09 kB
/** * @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; }