UNPKG

takedown

Version:
90 lines (69 loc) 2.48 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var defaults = require('./config/defaults.js'); var restrict = require('./config/restrict.js'); var structure = require('./config/structure.js'); var index = require('./parser/core/index.js'); var parseFm = require('./parse-fm.js'); let takedown = options => { let get = config => { let { parse, parseFm: parseFm$1 } = get; if (config) { config = makeIns(td.config, config).config; parse = index.default(config); parseFm$1 = parseFm.default(config.fm); } else if (get.changed ?? true) { get.parse = index.default(td.config); get.parseFm = parseFm.default(td.config.fm); get.changed = false; ({ parse, parseFm: parseFm$1 } = get); } return { parse, parseFm: parseFm$1 }; }; /* Takedown Instance ---------------------------------------- */ let td = makeIns(defaults.default, options, () => get.changed = true); td.clone = options => makeIns(td.config, options); td.parse = (source, config) => { // create a new local configuration if necessary if (config) config = makeIns(td.config, config).config; let parseFm$1 = parseFm.default((config || td.config).fm), matter; // update source and get front matter (if available) [ source, matter ] = parseFm$1.parse(source); let docConfig = parseFm$1.getConfig(matter); // update local config with front matter if necessary if (docConfig) config = makeIns(config || td.config, docConfig).config; // only if `config` exists do we need to customize `parse` let doParse = config ? index.default(config) : get().parse; return { ...doParse(source), matter }; }; td.parseMeta = (source, fm) => { let config = fm ? { fm } : fm; let [ matter ] = get(config).parseFm.parse(source).slice(1); return matter; }; td.partition = (source, fm) => { let config = fm ? { fm } : fm; let [ adjusted, result ] = get(config).parseFm.extract(source); return [ adjusted, result?.[0] ]; }; return td; }; let makeIns = (one, two, notify) => { let td = restrict.default(structure.default, notify); td.config = one || {}; td.config = two || {}; return td; }; exports.default = takedown;