UNPKG

@mintlify/scraping

Version:

Scrape documentation frameworks to Mintlify docs

107 lines (100 loc) 3.45 kB
import type { Root as HastRoot, Element } from 'hast'; import { visit, SKIP, CONTINUE } from 'unist-util-visit'; import { gitBookScrapeAccordion, readmeScrapeAccordion, docusaurusScrapeAccordion, } from '../components/Accordion.js'; import { gitBookScrapeAccordionGroup, readmeScrapeAccordionGroup, docusaurusScrapeAccordionGroup, } from '../components/AccordionGroup.js'; import { gitBookScrapeCallout, readmeScrapeCallout, docusaurusScrapeCallout, } from '../components/Callout.js'; import { gitBookScrapeCard, readmeScrapeCard, docusaurusScrapeCard } from '../components/Card.js'; import { gitBookScrapeCardGroup, readmeScrapeCardGroup, docusaurusScrapeCardGroup, } from '../components/CardGroup.js'; import { gitBookScrapeCodeGroup, readmeScrapeCodeGroup, docusaurusScrapeCodeGroup, } from '../components/CodeGroup.js'; import { gitBookScrapeFrame, readmeScrapeFrame, docusaurusScrapeFrame, } from '../components/Frame.js'; import { gitBookScrapeTabs, readmeScrapeTabs, docusaurusScrapeTabs } from '../components/Tabs.js'; import type { ScrapeFuncType } from '../types/scrapeFunc.js'; import { framework } from '../utils/detectFramework.js'; import { log } from '../utils/log.js'; function createComponent( gitBookScrapeFunc: ScrapeFuncType, readmeScrapeFunc: ScrapeFuncType, docusaurusScrapeFunc: ScrapeFuncType ) { return function (tree: HastRoot) { return visit(tree, 'element', function (node, index, parent) { if (node.tagName === 'code' || node.tagName === 'pre') return SKIP; let result: Element | undefined = undefined; switch (framework.vendor) { case 'gitbook': result = gitBookScrapeFunc(node, index, parent); break; case 'readme': result = readmeScrapeFunc(node, index, parent); break; case 'docusaurus': result = docusaurusScrapeFunc(node, index, parent); break; default: log('Invalid documentation vendor requested: ' + framework.vendor); return SKIP; } if (!result) return CONTINUE; if (parent && typeof index === 'number') { parent.children[index] = result; return SKIP; } return CONTINUE; }); }; } export function createLinks() { return createComponent(gitBookScrapeCard, readmeScrapeCard, docusaurusScrapeCard); } export function createCard() { return createComponent(gitBookScrapeCard, readmeScrapeCard, docusaurusScrapeCard); } export function createAccordion() { return createComponent(gitBookScrapeAccordion, readmeScrapeAccordion, docusaurusScrapeAccordion); } export function createAccordionGroup() { return createComponent( gitBookScrapeAccordionGroup, readmeScrapeAccordionGroup, docusaurusScrapeAccordionGroup ); } export function createFrame() { return createComponent(gitBookScrapeFrame, readmeScrapeFrame, docusaurusScrapeFrame); } export function createCodeGroup() { return createComponent(gitBookScrapeCodeGroup, readmeScrapeCodeGroup, docusaurusScrapeCodeGroup); } export function createTabs() { return createComponent(gitBookScrapeTabs, readmeScrapeTabs, docusaurusScrapeTabs); } export function createCallout() { return createComponent(gitBookScrapeCallout, readmeScrapeCallout, docusaurusScrapeCallout); } export function createCardGroup() { return createComponent(gitBookScrapeCardGroup, readmeScrapeCardGroup, docusaurusScrapeCardGroup); }