UNPKG

@braindb/mdast-util-wiki-link

Version:
66 lines (65 loc) 1.87 kB
function defaultLinkTemplate({ slug, permalink, alias, }) { return { hName: "a", hProperties: { href: permalink == null ? slug : permalink }, hChildren: [{ type: "text", value: alias == null ? slug : alias }], }; } export function fromMarkdown(opts = {}) { const linkTemplate = opts.linkTemplate || defaultLinkTemplate; let node; function enterWikiLink(token) { node = { type: "wikiLink", value: null, data: { // alias: null, // permalink: null }, }; // @ts-expect-error this.enter(node, token); } function top(stack) { return stack[stack.length - 1]; } function exitWikiLinkAlias(token) { const alias = this.sliceSerialize(token); const current = top(this.stack); // @ts-expect-error current.data.alias = alias; } function exitWikiLinkTarget(token) { const target = this.sliceSerialize(token); const current = top(this.stack); // @ts-expect-error current.value = target; } function exitWikiLink(token) { this.exit(token); const wikiLink = node; const data = { slug: wikiLink.value, alias: wikiLink.data.alias, permalink: opts.linkResolver ? opts.linkResolver(wikiLink.value) : undefined, }; wikiLink.data = { // ...wikiLink.data, alias: data.alias, permalink: data.permalink, ...linkTemplate(data), }; } return { enter: { wikiLink: enterWikiLink, }, exit: { wikiLinkTarget: exitWikiLinkTarget, wikiLinkAlias: exitWikiLinkAlias, wikiLink: exitWikiLink, }, }; }