Files
2026-07-13 13:23:39 +08:00

41 lines
1.1 KiB
JavaScript

const { parse } = require('url');
const visit = import('unist-util-visit').then((m) => m.visit);
const internalUrls = ['crawlee.dev'];
/**
* @param {import('url').UrlWithStringQuery} href
*/
function isInternal(href) {
return internalUrls.some(
(internalUrl) => href.host === internalUrl
|| (!href.protocol && !href.host && (href.pathname || href.hash)),
);
}
/**
* @type {import('unified').Plugin}
*/
exports.externalLinkProcessor = () => {
return async (tree) => {
(await visit)(tree, 'element', (node) => {
if (
node.tagName === 'a'
&& node.properties
&& typeof node.properties.href === 'string'
) {
const href = parse(node.properties.href);
if (!isInternal(href)) {
node.properties.target = '_blank';
node.properties.rel = 'noopener';
} else {
node.properties.target = null;
node.properties.rel = null;
}
}
});
};
};