"use strict"; // markdown-it plugin for: // 1. adding target="_blank" to external links // 2. normalize internal links to end with `.html` Object.defineProperty(exports, "__esModule", { value: true }); exports.linkPlugin = void 0; const url_1 = require("url"); const indexRE = /(^|.*\/)index.md(#?.*)$/i; exports.linkPlugin = (md, externalAttrs) => { md.renderer.rules.link_open = (tokens, idx, options, env, self) => { const token = tokens[idx]; const hrefIndex = token.attrIndex('href'); if (hrefIndex >= 0) { const hrefAttr = token.attrs[hrefIndex]; const url = hrefAttr[1]; const isExternal = /^https?:/.test(url); if (isExternal) { Object.entries(externalAttrs).forEach(([key, val]) => { token.attrSet(key, val); }); } else if (!url.startsWith('#')) { normalizeHref(hrefAttr); } } return self.renderToken(tokens, idx, options); }; function normalizeHref(hrefAttr) { let url = hrefAttr[1]; const indexMatch = url.match(indexRE); if (indexMatch) { const [, path, hash] = indexMatch; url = path + hash; } else { let cleanUrl = url.replace(/\#.*$/, '').replace(/\?.*$/, ''); // .md -> .html if (cleanUrl.endsWith('.md')) { cleanUrl = cleanUrl.replace(/\.md$/, '.html'); } // ./foo -> ./foo.html if (!cleanUrl.endsWith('.html') && !cleanUrl.endsWith('/')) { cleanUrl += '.html'; } const parsed = new url_1.URL(url, 'http://a.com'); url = cleanUrl + parsed.search + parsed.hash; } // ensure leading . for relative paths if (!url.startsWith('/') && !/^\.\//.test(url)) { url = './' + url; } // export it for existence check const data = md.__data; const links = data.links || (data.links = []); links.push(url.replace(/\.html$/, '')); // markdown-it encodes the uri hrefAttr[1] = decodeURI(url); } }; //# sourceMappingURL=link.js.map