@mintlify/scraping
Version:
Scrape documentation frameworks to Mintlify docs
77 lines • 3.28 kB
JavaScript
import { visit, EXIT, CONTINUE } from 'unist-util-visit';
import { framework } from '../utils/detectFramework.js';
import { findTitle, getTitleFromLink } from '../utils/title.js';
export function retrieveTabLinks(rootNode) {
if (framework.vendor !== 'readme' && framework.vendor !== 'docusaurus')
return undefined;
let element = undefined;
visit(rootNode, 'element', function (node) {
if (framework.vendor === 'readme') {
if (node.tagName === 'header' &&
node.properties.className &&
Array.isArray(node.properties.className) &&
node.properties.className.includes('rm-Header')) {
element = node;
return EXIT;
}
}
if (framework.vendor === 'docusaurus') {
if (node.tagName === 'nav' &&
node.properties.className &&
Array.isArray(node.properties.className) &&
node.properties.className.includes('navbar')) {
element = node;
return EXIT;
}
}
});
if (!element)
return undefined;
const links = [];
visit(element, 'element', function (node) {
if (framework.vendor === 'readme') {
if (node.tagName !== 'nav' &&
!(node.tagName === 'div' &&
node.properties.className &&
Array.isArray(node.properties.className) &&
node.properties.className.includes('rm-Header-right')))
return CONTINUE;
visit(node, 'element', function (subNode) {
if (subNode.tagName !== 'a' ||
!subNode.properties.href ||
typeof subNode.properties.href !== 'string' ||
subNode.properties.href.startsWith('http'))
return CONTINUE;
const title = findTitle(subNode);
links.push({
name: title || getTitleFromLink(subNode.properties.href),
url: subNode.properties.href,
});
});
}
if (framework.vendor === 'docusaurus') {
if (node.tagName !== 'nav')
return CONTINUE;
visit(node, 'element', function (subNode, _, parent) {
if (subNode.tagName !== 'a' ||
!subNode.properties.href ||
typeof subNode.properties.href !== 'string' ||
subNode.properties.href.startsWith('http') ||
!parent ||
parent.type !== 'element' ||
!Array.isArray(parent.properties.className) ||
parent.properties.className.length !== 1 ||
parent.properties.className[0] !== 'navbar__items' ||
parent.properties.className.includes('navbar__items--right'))
return CONTINUE;
const title = findTitle(subNode);
links.push({
name: title || getTitleFromLink(subNode.properties.href),
url: subNode.properties.href,
});
});
}
});
return links;
}
//# sourceMappingURL=retrieve.js.map