@mintlify/scraping
Version:
Scrape documentation frameworks to Mintlify docs
69 lines • 2.61 kB
JavaScript
import { EXIT, visit } from 'unist-util-visit';
import { OVERVIEW_PAGE_SLUG } from '../constants.js';
import { dedupedAppend } from '../utils/append.js';
import { framework } from '../utils/detectFramework.js';
import { findFirstChild } from '../utils/firstChild.js';
import { removeTrailingSlash } from '../utils/strings.js';
import { getText } from '../utils/text.js';
import { retrieveNavItems } from './retrieve.js';
export function processListItem(node, opts = {
sectionTagName: 'div',
childListTagName: 'ul',
title: undefined,
}) {
const link = findFirstChild(node, 'a');
if (!link)
return undefined;
let linkHref = undefined;
linkHref = link.properties.href;
if (linkHref === undefined || (framework.vendor !== 'docusaurus' && linkHref === '#')) {
return undefined;
}
let isApiReferenceLink = false;
visit(link, 'element', function (subNode) {
if (subNode.tagName === 'span' &&
Array.isArray(subNode.properties.className) &&
subNode.properties.className.includes('rm-APIMethod')) {
isApiReferenceLink = true;
return EXIT;
}
});
if (isApiReferenceLink)
return undefined;
if (linkHref.startsWith('/'))
linkHref = linkHref.substring(1);
const sectionHeader = findFirstChild(node, opts.sectionTagName);
const childList = findFirstChild(node, opts.childListTagName);
if (!childList && framework.vendor === 'docusaurus' && linkHref === '#') {
return undefined;
}
else if (!childList) {
return linkHref;
}
let title = opts.title;
if (!title) {
if (framework.vendor === 'readme') {
title = getText(sectionHeader) || getText(link) || '';
}
else {
title = getText(link) || getText(sectionHeader) || '';
}
}
let childEntries = retrieveNavItems(childList);
const newLink = linkHref !== '#' &&
childEntries.find((child) => typeof child === 'string' && child.startsWith(linkHref))
? removeTrailingSlash(linkHref) + OVERVIEW_PAGE_SLUG
: linkHref;
if (linkHref !== '#' && childEntries.includes(linkHref)) {
childEntries.forEach((child, index) => {
if (child === linkHref)
childEntries[index] = newLink;
});
childEntries = dedupedAppend(newLink, childEntries, true);
}
else if (linkHref !== '#') {
childEntries = dedupedAppend(newLink, childEntries, true);
}
return { group: title, pages: childEntries };
}
//# sourceMappingURL=listItems.js.map