UNPKG

@mintlify/scraping

Version:

Scrape documentation frameworks to Mintlify docs

64 lines (56 loc) 1.58 kB
import type { Root as HastRoot, Element } from 'hast'; import { visit, EXIT } from 'unist-util-visit'; import { framework } from '../utils/detectFramework.js'; import { intersection } from '../utils/intersection.js'; export function retrieveRootNavElement(rootNode: HastRoot): Element | undefined { let rootTagName = 'aside'; switch (framework.vendor) { case 'docusaurus': rootTagName = 'nav'; break; case 'gitbook': rootTagName = 'aside'; break; case 'readme': rootTagName = 'nav'; break; } let rootSelectorSet = new Set(['page-no-toc:hidden']); switch (framework.vendor) { case 'docusaurus': rootSelectorSet = new Set(['menu']); break; case 'gitbook': rootSelectorSet = new Set([ 'lg:page-no-toc:hidden', 'page-no-toc:hidden', 'page-no-toc:lg:hidden', ]); break; case 'readme': rootSelectorSet = new Set(['rm-Sidebar']); break; } let element: Element | undefined = undefined; visit(rootNode, 'element', function (node) { const { className } = node.properties; if ( framework.vendor === 'gitbook' && node.tagName === 'aside' && (node.properties.id === 'table-of-contents' || node.properties.dataTestid === 'table-of-contents') ) { element = node; return EXIT; } if ( node.tagName === rootTagName && Array.isArray(className) && !!intersection(className, rootSelectorSet).size ) { element = node; return EXIT; } }); return element; }