takedown
Version:
Customizable markdown parser
90 lines (69 loc) • 2.48 kB
JavaScript
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;
;