mintlify 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +2 -3
- package/bin/index.js.map +1 -1
- package/bin/local-preview/helper-commands/clearCommand.js +4 -4
- package/bin/local-preview/helper-commands/clearCommand.js.map +1 -1
- package/bin/local-preview/index.js +43 -4
- package/bin/local-preview/index.js.map +1 -1
- package/bin/local-preview/injectNav.js +94 -0
- package/bin/local-preview/injectNav.js.map +1 -0
- package/bin/local-preview/utils/listener.js +1 -1
- package/bin/local-preview/utils/listener.js.map +1 -1
- package/bin/mint/client/.babel-plugin-macrosrc.json +5 -0
- package/bin/mint/client/.babelrc +4 -0
- package/bin/mint/client/.editorconfig +12 -0
- package/bin/mint/client/.eslintrc.json +7 -0
- package/bin/mint/client/.prettierignore +4 -0
- package/bin/mint/client/.prettierrc +14 -0
- package/bin/mint/client/.vscode/launch.json +28 -0
- package/bin/mint/client/README.md +44 -0
- package/bin/mint/client/jest.config.ts +195 -0
- package/bin/mint/client/next-env.d.ts +4 -0
- package/bin/mint/client/next.config.js +152 -0
- package/bin/mint/client/package.json +139 -0
- package/bin/mint/client/postcss.config.cjs +9 -0
- package/bin/mint/client/prebuild/faviconConfig.js +35 -0
- package/bin/mint/client/prebuild/getOpenApiContext.js +53 -0
- package/bin/mint/client/prebuild/index.js +117 -0
- package/bin/mint/client/prebuild/injectNav.js +115 -0
- package/bin/mint/client/prebuild/slugToTitle.js +7 -0
- package/bin/mint/client/rehype/withApiComponents.js +60 -0
- package/bin/mint/client/rehype/withCodeBlocks.js +54 -0
- package/bin/mint/client/rehype/withLayouts.js +113 -0
- package/bin/mint/client/rehype/withLinkRoles.js +13 -0
- package/bin/mint/client/rehype/withRawComponents.js +13 -0
- package/bin/mint/client/rehype/withStaticProps.js +25 -0
- package/bin/mint/client/rehype/withSyntaxHighlighting.js +60 -0
- package/bin/mint/client/remark/utils.js +369 -0
- package/bin/mint/client/remark/withFrames.js +55 -0
- package/bin/mint/client/remark/withImportsInjected.js +36 -0
- package/bin/mint/client/remark/withNextLinks.js +37 -0
- package/bin/mint/client/remark/withTableOfContents.js +71 -0
- package/bin/mint/client/scripts/local.js +177 -0
- package/bin/mint/client/sentry.client.config.js +15 -0
- package/bin/mint/client/sentry.properties +4 -0
- package/bin/mint/client/sentry.server.config.js +15 -0
- package/bin/mint/client/src/analytics/AbstractAnalyticsImplementation.ts +50 -0
- package/bin/mint/client/src/analytics/AnalyticsContext.ts +5 -0
- package/bin/mint/client/src/analytics/AnalyticsMediator.ts +101 -0
- package/bin/mint/client/src/analytics/FakeAnalyticsMediator.ts +9 -0
- package/bin/mint/client/src/analytics/GA4Script.tsx +33 -0
- package/bin/mint/client/src/analytics/implementations/amplitude.ts +26 -0
- package/bin/mint/client/src/analytics/implementations/fathom.ts +38 -0
- package/bin/mint/client/src/analytics/implementations/ga4.ts +33 -0
- package/bin/mint/client/src/analytics/implementations/hotjar.ts +53 -0
- package/bin/mint/client/src/analytics/implementations/mixpanel-browser.d.ts +1 -0
- package/bin/mint/client/src/analytics/implementations/mixpanel.ts +52 -0
- package/bin/mint/client/src/analytics/implementations/posthog.ts +37 -0
- package/bin/mint/client/src/components/Accordion/Accordion.tsx +43 -0
- package/bin/mint/client/src/components/Accordion/index.ts +4 -0
- package/bin/mint/client/src/components/ApiExample.tsx +9 -0
- package/bin/mint/client/src/components/Card.tsx +51 -0
- package/bin/mint/client/src/components/CodeGroup.tsx +132 -0
- package/bin/mint/client/src/components/Editor.tsx +12 -0
- package/bin/mint/client/src/components/Expandable.tsx +40 -0
- package/bin/mint/client/src/components/Heading.tsx +84 -0
- package/bin/mint/client/src/components/Param.tsx +56 -0
- package/bin/mint/client/src/components/Request.tsx +19 -0
- package/bin/mint/client/src/components/ResponseField.tsx +33 -0
- package/bin/mint/client/src/components/TabBar.tsx +61 -0
- package/bin/mint/client/src/config.ts +115 -0
- package/bin/mint/client/src/css/bar-of-progress.css +10 -0
- package/bin/mint/client/src/css/base.css +29 -0
- package/bin/mint/client/src/css/font-awesome.css +7 -0
- package/bin/mint/client/src/css/fonts.css +44 -0
- package/bin/mint/client/src/css/main.css +11 -0
- package/bin/mint/client/src/css/prism.css +270 -0
- package/bin/mint/client/src/css/utilities.css +43 -0
- package/bin/mint/client/src/enums/components.ts +8 -0
- package/bin/mint/client/src/fonts/FiraCode-VF.woff +0 -0
- package/bin/mint/client/src/fonts/FiraCode-VF.woff2 +0 -0
- package/bin/mint/client/src/fonts/IBMPlexMono-Regular.ttf +0 -0
- package/bin/mint/client/src/fonts/IBMPlexMono-SemiBold.ttf +0 -0
- package/bin/mint/client/src/fonts/Inter-italic-latin.var.woff2 +0 -0
- package/bin/mint/client/src/fonts/Inter-roman-latin.var.woff2 +0 -0
- package/bin/mint/client/src/fonts/Pally-Variable.ttf +0 -0
- package/bin/mint/client/src/fonts/SourceSansPro-Regular.otf +0 -0
- package/bin/mint/client/src/fonts/SourceSerifPro-Regular.ttf +0 -0
- package/bin/mint/client/src/fonts/Synonym-Variable.ttf +0 -0
- package/bin/mint/client/src/fonts/Ubuntu-Mono-bold.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-Regular-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-Regular-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-Regular.module.css +11 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-SemiBold-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-SemiBold-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-SemiBold.module.css +11 -0
- package/bin/mint/client/src/fonts/generated/Pally-Variable-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/Pally-Variable-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/Pally-Variable.module.css +11 -0
- package/bin/mint/client/src/fonts/generated/SourceSerifPro-Regular-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/SourceSerifPro-Regular-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/SourceSerifPro-Regular.module.css +11 -0
- package/bin/mint/client/src/fonts/generated/Synonym-Variable-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/Synonym-Variable-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/Synonym-Variable.module.css +11 -0
- package/bin/mint/client/src/fonts/generated/TenorSans-Regular-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/TenorSans-Regular-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/TenorSans-Regular.module.css +11 -0
- package/bin/mint/client/src/hooks/useActionKey.ts +20 -0
- package/bin/mint/client/src/hooks/useIsomorphicLayoutEffect.ts +3 -0
- package/bin/mint/client/src/hooks/useMedia.ts +27 -0
- package/bin/mint/client/src/hooks/usePrevNext.ts +34 -0
- package/bin/mint/client/src/hooks/useTop.ts +15 -0
- package/bin/mint/client/src/icons/CopyToClipboard.tsx +33 -0
- package/bin/mint/client/src/index.d.ts +1 -0
- package/bin/mint/client/src/layouts/ApiSupplemental.tsx +173 -0
- package/bin/mint/client/src/layouts/ContentsLayout.tsx +256 -0
- package/bin/mint/client/src/layouts/DocumentationLayout.tsx +44 -0
- package/bin/mint/client/src/layouts/OpenApiContent.tsx +301 -0
- package/bin/mint/client/src/layouts/SidebarLayout.tsx +412 -0
- package/bin/mint/client/src/layouts/UserFeedback.tsx +73 -0
- package/bin/mint/client/src/layouts/getGroupsInDivision.ts +25 -0
- package/bin/mint/client/src/layouts/isPathInGroupPages.ts +10 -0
- package/bin/mint/client/src/metadata.ts +58 -0
- package/bin/mint/client/src/nav.json +219 -0
- package/bin/mint/client/src/openapi.ts +3 -0
- package/bin/mint/client/src/pages/404.tsx +73 -0
- package/bin/mint/client/src/pages/_app.tsx +138 -0
- package/bin/mint/client/src/pages/_document.tsx +57 -0
- package/bin/mint/client/src/pages/api/issue.ts +10 -0
- package/bin/mint/client/src/pages/api/name.ts +8 -0
- package/bin/mint/client/src/pages/api/request.ts +31 -0
- package/bin/mint/client/src/pages/api/suggest.ts +10 -0
- package/bin/mint/client/src/pages/api/syntax-highlighted-json.ts +13 -0
- package/bin/mint/client/src/pages/api/utils.ts +6 -0
- package/bin/mint/client/src/pages/index.tsx +31 -0
- package/bin/mint/client/src/ui/Api.tsx +359 -0
- package/bin/mint/client/src/ui/Footer.tsx +124 -0
- package/bin/mint/client/src/ui/Header.tsx +370 -0
- package/bin/mint/client/src/ui/Logo.tsx +55 -0
- package/bin/mint/client/src/ui/PageHeader.tsx +51 -0
- package/bin/mint/client/src/ui/Search.tsx +386 -0
- package/bin/mint/client/src/ui/ThemeToggle.tsx +285 -0
- package/bin/mint/client/src/ui/Title.tsx +22 -0
- package/bin/mint/client/src/ui/TopLevelLink.tsx +122 -0
- package/bin/mint/client/src/utils/api.ts +252 -0
- package/bin/mint/client/src/utils/brands.ts +217 -0
- package/bin/mint/client/src/utils/castArray.ts +3 -0
- package/bin/mint/client/src/utils/childrenArray.ts +3 -0
- package/bin/mint/client/src/utils/fit.ts +27 -0
- package/bin/mint/client/src/utils/fontAwesome.ts +577 -0
- package/bin/mint/client/src/utils/getAnalyticsConfig.ts +14 -0
- package/bin/mint/client/src/utils/getLogoHref.ts +9 -0
- package/bin/mint/client/src/utils/getOpenApiContext.ts +26 -0
- package/bin/mint/client/src/utils/importAll.ts +6 -0
- package/bin/mint/client/src/utils/isObject.ts +3 -0
- package/bin/mint/client/src/utils/kebabToTitleCase.ts +3 -0
- package/bin/mint/client/src/utils/loadImage.ts +8 -0
- package/bin/mint/client/src/utils/slugToTitle.ts +7 -0
- package/bin/mint/client/src/utils/wait.ts +5 -0
- package/bin/mint/client/tailwind.config.cjs +323 -0
- package/bin/mint/client/test/test.test.ts +5 -0
- package/bin/mint/client/tsconfig.json +36 -0
- package/bin/mint/client/yarn.lock +9702 -0
- package/bin/scraping/downloadAllImages.js +4 -0
- package/bin/scraping/downloadAllImages.js.map +1 -1
- package/bin/scraping/scrapeSectionCommands.js +18 -46
- package/bin/scraping/scrapeSectionCommands.js.map +1 -1
- package/bin/scraping/site-scrapers/alternateGroupTitle.js +9 -0
- package/bin/scraping/site-scrapers/alternateGroupTitle.js.map +1 -0
- package/bin/scraping/site-scrapers/getLinksRecursively.js +7 -2
- package/bin/scraping/site-scrapers/getLinksRecursively.js.map +1 -1
- package/bin/scraping/site-scrapers/openNestedDocusaurusMenus.js +30 -0
- package/bin/scraping/site-scrapers/openNestedDocusaurusMenus.js.map +1 -0
- package/bin/scraping/site-scrapers/openNestedGitbookMenus.js +37 -0
- package/bin/scraping/site-scrapers/openNestedGitbookMenus.js.map +1 -0
- package/bin/scraping/site-scrapers/scrapeDocusaurusSection.js +20 -21
- package/bin/scraping/site-scrapers/scrapeDocusaurusSection.js.map +1 -1
- package/bin/scraping/site-scrapers/scrapeGitBookSection.js +2 -9
- package/bin/scraping/site-scrapers/scrapeGitBookSection.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -2
- package/src/local-preview/helper-commands/clearCommand.ts +6 -4
- package/src/local-preview/index.ts +48 -3
- package/src/local-preview/utils/listener.ts +1 -1
- package/src/scraping/downloadAllImages.ts +5 -0
- package/src/scraping/scrapeSectionCommands.ts +34 -60
- package/src/scraping/site-scrapers/alternateGroupTitle.ts +8 -0
- package/src/scraping/site-scrapers/getLinksRecursively.ts +7 -2
- package/src/scraping/site-scrapers/openNestedDocusaurusMenus.ts +42 -0
- package/src/scraping/site-scrapers/openNestedGitbookMenus.ts +49 -0
- package/src/scraping/site-scrapers/scrapeDocusaurusSection.ts +23 -21
- package/src/scraping/site-scrapers/scrapeGitBookSection.ts +2 -10
- package/bin/local-preview/helper-commands/cleanCommand.js +0 -8
- package/bin/local-preview/helper-commands/cleanCommand.js.map +0 -1
|
@@ -16,6 +16,10 @@ export default async function downloadAllImages($, content, origin, baseDir, mod
|
|
|
16
16
|
];
|
|
17
17
|
// Wait to all images to download before continuing
|
|
18
18
|
const origToNewArray = await Promise.all(imageSrcs.map(async (origImageSrc) => {
|
|
19
|
+
// We do not support downloading base64 in-line images.
|
|
20
|
+
if (origImageSrc.startsWith("data:")) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
19
23
|
// Add origin if the image tags are using relative sources
|
|
20
24
|
const imageHref = origImageSrc.startsWith("http")
|
|
21
25
|
? origImageSrc
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloadAllImages.js","sourceRoot":"","sources":["../../src/scraping/downloadAllImages.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,4EAA4E;AAC5E,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,iBAAiB,CAC7C,CAAM,EACN,OAAY,EACZ,MAAc,EACd,OAAe,EACf,cAAoB;IAEpB,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO;KACR;IAED,kEAAkE;IAClE,4CAA4C;IAC5C,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI,GAAG,CACR,OAAO;aACJ,IAAI,CAAC,UAAU,CAAC;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC,OAAO,EAAE,CACb;KACF,CAAC;IAEF,mDAAmD;IACnD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,YAAoB,EAAE,EAAE;QAC3C,0DAA0D;QAC1D,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC;QAEvC,IAAI,QAAQ,GAAG,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,IAAI,cAAc,EAAE;YAClB,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;YACjD,OAAO;SACR;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE/C,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;aACtC,IAAI,CAAC,GAAG,EAAE;YACT,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;aACvD;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;QAEL,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IACvC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,cAAc,CAAC,MAAM,CAC1B,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnD,EAAE,CACH,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAW;IAC9C,2BAA2B;IAC3B,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnC,eAAe,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;QACxC,iFAAiF;QACjF,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"downloadAllImages.js","sourceRoot":"","sources":["../../src/scraping/downloadAllImages.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,4EAA4E;AAC5E,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,iBAAiB,CAC7C,CAAM,EACN,OAAY,EACZ,MAAc,EACd,OAAe,EACf,cAAoB;IAEpB,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO;KACR;IAED,kEAAkE;IAClE,4CAA4C;IAC5C,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI,GAAG,CACR,OAAO;aACJ,IAAI,CAAC,UAAU,CAAC;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC,OAAO,EAAE,CACb;KACF,CAAC;IAEF,mDAAmD;IACnD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,YAAoB,EAAE,EAAE;QAC3C,uDAAuD;QACvD,IAAI,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YACpC,OAAO,SAAS,CAAC;SAClB;QAED,0DAA0D;QAC1D,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC;QAEvC,IAAI,QAAQ,GAAG,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,IAAI,cAAc,EAAE;YAClB,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;YACjD,OAAO;SACR;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE/C,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;aACtC,IAAI,CAAC,GAAG,EAAE;YACT,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;aACvD;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;QAEL,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IACvC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,cAAc,CAAC,MAAM,CAC1B,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnD,EAAE,CACH,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,GAAW;IAC9C,2BAA2B;IAC3B,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnC,eAAe,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;QACxC,iFAAiF;QACjF,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -3,18 +3,11 @@ import { detectFramework, Frameworks } from "./detectFramework.js";
|
|
|
3
3
|
import { getHrefFromArgs, getOrigin } from "../util.js";
|
|
4
4
|
import { scrapeSection } from "./scrapeSection.js";
|
|
5
5
|
import { scrapeDocusaurusSection } from "./site-scrapers/scrapeDocusaurusSection.js";
|
|
6
|
+
import openNestedDocusaurusMenus from "./site-scrapers/openNestedDocusaurusMenus.js";
|
|
6
7
|
import { scrapeGitBookSection } from "./site-scrapers/scrapeGitBookSection.js";
|
|
8
|
+
import openNestedGitbookMenus from "./site-scrapers/openNestedGitbookMenus.js";
|
|
7
9
|
import { scrapeReadMeSection } from "./site-scrapers/scrapeReadMeSection.js";
|
|
8
10
|
import { startBrowser } from "../browser.js";
|
|
9
|
-
function validateFramework(framework) {
|
|
10
|
-
if (!framework) {
|
|
11
|
-
console.log("Could not detect the framework automatically. Please use one of:");
|
|
12
|
-
console.log("scrape-page-docusaurus");
|
|
13
|
-
console.log("scrape-page-gitbook");
|
|
14
|
-
console.log("scrape-page-readme");
|
|
15
|
-
return process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
11
|
export async function scrapeSectionAxiosWrapper(argv, scrapeFunc) {
|
|
19
12
|
const href = getHrefFromArgs(argv);
|
|
20
13
|
const res = await axios.default.get(href);
|
|
@@ -22,50 +15,20 @@ export async function scrapeSectionAxiosWrapper(argv, scrapeFunc) {
|
|
|
22
15
|
await scrapeSection(scrapeFunc, html, getOrigin(href), argv.overwrite);
|
|
23
16
|
process.exit(0);
|
|
24
17
|
}
|
|
18
|
+
export async function scrapeDocusaurusSectionCommand(argv) {
|
|
19
|
+
await scrapeSectionOpeningAllNested(argv, openNestedDocusaurusMenus, scrapeDocusaurusSection);
|
|
20
|
+
}
|
|
25
21
|
export async function scrapeGitbookSectionCommand(argv) {
|
|
26
|
-
await
|
|
22
|
+
await scrapeSectionOpeningAllNested(argv, openNestedGitbookMenus, scrapeGitBookSection);
|
|
27
23
|
}
|
|
28
|
-
async function
|
|
24
|
+
async function scrapeSectionOpeningAllNested(argv, openLinks, scrapeFunc) {
|
|
29
25
|
const href = getHrefFromArgs(argv);
|
|
30
26
|
const browser = await startBrowser();
|
|
31
27
|
const page = await browser.newPage();
|
|
32
28
|
await page.goto(href, {
|
|
33
29
|
waitUntil: "networkidle2",
|
|
34
30
|
});
|
|
35
|
-
|
|
36
|
-
let encounteredHref = ["fake"];
|
|
37
|
-
// Loop until we've encountered every link
|
|
38
|
-
while (!encounteredHref.every((href) => prevEncountered.includes(href))) {
|
|
39
|
-
prevEncountered = encounteredHref;
|
|
40
|
-
encounteredHref = await page.evaluate((encounteredHref) => {
|
|
41
|
-
const icons = Array.from(document.querySelectorAll('path[d="M9 18l6-6-6-6"]'));
|
|
42
|
-
const linksFound = [];
|
|
43
|
-
icons.forEach(async (icon) => {
|
|
44
|
-
var _a, _b;
|
|
45
|
-
const toClick = (_a = icon === null || icon === void 0 ? void 0 : icon.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement;
|
|
46
|
-
const link = (_b = toClick === null || toClick === void 0 ? void 0 : toClick.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement;
|
|
47
|
-
// Skip icons not in the side navigation
|
|
48
|
-
if (!(link === null || link === void 0 ? void 0 : link.hasAttribute("href"))) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const href = link.getAttribute("href");
|
|
52
|
-
// Should never occur but we keep it as a fail-safe
|
|
53
|
-
if ((href === null || href === void 0 ? void 0 : href.startsWith("https://")) || (href === null || href === void 0 ? void 0 : href.startsWith("http://"))) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
// Click any links we haven't seen before
|
|
57
|
-
if (href && !encounteredHref.includes(href)) {
|
|
58
|
-
toClick === null || toClick === void 0 ? void 0 : toClick.click();
|
|
59
|
-
}
|
|
60
|
-
if (href) {
|
|
61
|
-
linksFound.push(href);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
return linksFound;
|
|
65
|
-
}, encounteredHref // Need to pass array into the browser
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
const html = await page.content();
|
|
31
|
+
const html = await openLinks(page);
|
|
69
32
|
browser.close();
|
|
70
33
|
await scrapeSection(scrapeFunc, html, getOrigin(href), argv.overwrite);
|
|
71
34
|
process.exit(0);
|
|
@@ -78,7 +41,7 @@ export async function scrapeSectionAutomatically(argv) {
|
|
|
78
41
|
validateFramework(framework);
|
|
79
42
|
console.log("Detected framework: " + framework);
|
|
80
43
|
if (framework === Frameworks.DOCUSAURUS) {
|
|
81
|
-
await
|
|
44
|
+
await scrapeDocusaurusSectionCommand(argv);
|
|
82
45
|
}
|
|
83
46
|
else if (framework === Frameworks.GITBOOK) {
|
|
84
47
|
await scrapeGitbookSectionCommand(argv);
|
|
@@ -87,4 +50,13 @@ export async function scrapeSectionAutomatically(argv) {
|
|
|
87
50
|
await scrapeSectionAxiosWrapper(argv, scrapeReadMeSection);
|
|
88
51
|
}
|
|
89
52
|
}
|
|
53
|
+
function validateFramework(framework) {
|
|
54
|
+
if (!framework) {
|
|
55
|
+
console.log("Could not detect the framework automatically. Please use one of:");
|
|
56
|
+
console.log("scrape-page-docusaurus");
|
|
57
|
+
console.log("scrape-page-gitbook");
|
|
58
|
+
console.log("scrape-page-readme");
|
|
59
|
+
return process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
90
62
|
//# sourceMappingURL=scrapeSectionCommands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrapeSectionCommands.js","sourceRoot":"","sources":["../../src/scraping/scrapeSectionCommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,
|
|
1
|
+
{"version":3,"file":"scrapeSectionCommands.js","sourceRoot":"","sources":["../../src/scraping/scrapeSectionCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default function alternateGroupTitle(firstLink, pages) {
|
|
2
|
+
// Only assign titles to nested navigation menus outside a section.
|
|
3
|
+
// Others should not have a title so we can merge them into one section.
|
|
4
|
+
if (pages.length > 0) {
|
|
5
|
+
return firstLink === null || firstLink === void 0 ? void 0 : firstLink.text();
|
|
6
|
+
}
|
|
7
|
+
return "";
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=alternateGroupTitle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alternateGroupTitle.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/alternateGroupTitle.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,SAAS,EAAE,KAAK;IAC1D,mEAAmE;IACnE,wEAAwE;IACxE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,EAAE,CAAC;KAC1B;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Used by GitBook and ReadMe section scrapers
|
|
1
|
+
// Used by Docusaurus, GitBook, and ReadMe section scrapers
|
|
2
2
|
export default function getLinksRecursively(linkSections, $) {
|
|
3
3
|
if (linkSections == null || linkSections.length === 0) {
|
|
4
4
|
return [];
|
|
@@ -6,12 +6,17 @@ export default function getLinksRecursively(linkSections, $) {
|
|
|
6
6
|
return linkSections
|
|
7
7
|
.map((i, s) => {
|
|
8
8
|
const subsection = $(s);
|
|
9
|
-
|
|
9
|
+
let link = subsection.children().first();
|
|
10
|
+
if (!link.attr("href")) {
|
|
11
|
+
// Docusaurus nests the <a> inside a <div>
|
|
12
|
+
link = link.find("a[href]").first();
|
|
13
|
+
}
|
|
10
14
|
const linkHref = link.attr("href");
|
|
11
15
|
// Skip missing links. For example, GitBook uses
|
|
12
16
|
// empty divs are used for styling a line beside the nav.
|
|
13
17
|
// Skip external links until Mintlify supports them
|
|
14
18
|
if (!linkHref ||
|
|
19
|
+
linkHref === "#" ||
|
|
15
20
|
linkHref.startsWith("https://") ||
|
|
16
21
|
linkHref.startsWith("http://")) {
|
|
17
22
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLinksRecursively.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/getLinksRecursively.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"getLinksRecursively.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/getLinksRecursively.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,YAAiB,EAAE,CAAM;IACnE,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QACrD,OAAO,EAAE,CAAC;KACX;IAED,OAAO,YAAY;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACtB,0CAA0C;YAC1C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;SACrC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnC,gDAAgD;QAChD,yDAAyD;QACzD,mDAAmD;QACnD,IACE,CAAC,QAAQ;YACT,QAAQ,KAAK,GAAG;YAChB,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;YAC/B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAC9B;YACA,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE1D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,6CAA6C;YAC7C,wEAAwE;YACxE,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;gBAClB,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;aACzD,CAAC;SACH;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;SACD,OAAO,EAAE;SACT,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export default async function openNestedDocusaurusMenus(page) {
|
|
2
|
+
let prevEncountered = [];
|
|
3
|
+
let encounteredHref = ["fake-href-to-make-loop-run-at-least-once"];
|
|
4
|
+
// Loop until we've encountered every link
|
|
5
|
+
while (!encounteredHref.every((href) => prevEncountered.includes(href))) {
|
|
6
|
+
prevEncountered = encounteredHref;
|
|
7
|
+
encounteredHref = await page.evaluate((encounteredHref) => {
|
|
8
|
+
const collapsible = Array.from(document.querySelectorAll(".menu__link.menu__link--sublist"));
|
|
9
|
+
const linksFound = [];
|
|
10
|
+
collapsible.forEach(async (collapsibleItem) => {
|
|
11
|
+
const href = collapsibleItem === null || collapsibleItem === void 0 ? void 0 : collapsibleItem.getAttribute("href");
|
|
12
|
+
// Should never occur but we keep it as a fail-safe
|
|
13
|
+
if ((href === null || href === void 0 ? void 0 : href.startsWith("https://")) || (href === null || href === void 0 ? void 0 : href.startsWith("http://"))) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// Click any links we haven't seen before
|
|
17
|
+
if (href && !encounteredHref.includes(href)) {
|
|
18
|
+
collapsibleItem === null || collapsibleItem === void 0 ? void 0 : collapsibleItem.click();
|
|
19
|
+
}
|
|
20
|
+
if (href) {
|
|
21
|
+
linksFound.push(href);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
return linksFound;
|
|
25
|
+
}, encounteredHref // Need to pass array into the browser
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
return await page.content();
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=openNestedDocusaurusMenus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openNestedDocusaurusMenus.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/openNestedDocusaurusMenus.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAU;IAChE,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,eAAe,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAEnE,0CAA0C;IAC1C,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QACvE,eAAe,GAAG,eAAe,CAAC;QAClC,eAAe,GAAG,MAAM,IAAI,CAAC,QAAQ,CACnC,CAAC,eAAe,EAAE,EAAE;YAClB,MAAM,WAAW,GAAkB,KAAK,CAAC,IAAI,CAC3C,QAAQ,CAAC,gBAAgB,CAAC,iCAAiC,CAAC,CAC7D,CAAC;YAEF,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,eAA4B,EAAE,EAAE;gBACzD,MAAM,IAAI,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,YAAY,CAAC,MAAM,CAAC,CAAC;gBAEnD,mDAAmD;gBACnD,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,UAAU,CAAC,MAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,SAAS,CAAC,CAAA,EAAE;oBAC/D,OAAO;iBACR;gBAED,yCAAyC;gBACzC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAC3C,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,KAAK,EAAE,CAAC;iBAC1B;gBAED,IAAI,IAAI,EAAE;oBACR,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvB;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;QACpB,CAAC,EACD,eAAe,CAAC,sCAAsC;SACvD,CAAC;KACH;IAED,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export default async function openNestedGitbookMenus(page) {
|
|
2
|
+
let prevEncountered = [];
|
|
3
|
+
let encounteredHref = ["fake-href-to-make-loop-run-at-least-once"];
|
|
4
|
+
// Loop until we've encountered every link
|
|
5
|
+
while (!encounteredHref.every((href) => prevEncountered.includes(href))) {
|
|
6
|
+
prevEncountered = encounteredHref;
|
|
7
|
+
encounteredHref = await page.evaluate((encounteredHref) => {
|
|
8
|
+
const icons = Array.from(document.querySelectorAll('path[d="M9 18l6-6-6-6"]'));
|
|
9
|
+
const linksFound = [];
|
|
10
|
+
icons.forEach(async (icon) => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const toClick = (_a = icon === null || icon === void 0 ? void 0 : icon.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement;
|
|
13
|
+
const link = (_b = toClick === null || toClick === void 0 ? void 0 : toClick.parentElement) === null || _b === void 0 ? void 0 : _b.parentElement;
|
|
14
|
+
// Skip icons not in the side navigation
|
|
15
|
+
if (!(link === null || link === void 0 ? void 0 : link.hasAttribute("href"))) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const href = link.getAttribute("href");
|
|
19
|
+
// Should never occur but we keep it as a fail-safe
|
|
20
|
+
if ((href === null || href === void 0 ? void 0 : href.startsWith("https://")) || (href === null || href === void 0 ? void 0 : href.startsWith("http://"))) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Click any links we haven't seen before
|
|
24
|
+
if (href && !encounteredHref.includes(href)) {
|
|
25
|
+
toClick === null || toClick === void 0 ? void 0 : toClick.click();
|
|
26
|
+
}
|
|
27
|
+
if (href) {
|
|
28
|
+
linksFound.push(href);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return linksFound;
|
|
32
|
+
}, encounteredHref // Need to pass array into the browser
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
return await page.content();
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=openNestedGitbookMenus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openNestedGitbookMenus.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/openNestedGitbookMenus.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAU;IAC7D,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,eAAe,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAEnE,0CAA0C;IAC1C,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QACvE,eAAe,GAAG,eAAe,CAAC;QAClC,eAAe,GAAG,MAAM,IAAI,CAAC,QAAQ,CACnC,CAAC,eAAe,EAAE,EAAE;YAClB,MAAM,KAAK,GAAkB,KAAK,CAAC,IAAI,CACrC,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CACrD,CAAC;YAEF,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAiB,EAAE,EAAE;;gBACxC,MAAM,OAAO,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,0CAAE,aAAa,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,0CAAE,aAAa,CAAC;gBAEnD,wCAAwC;gBACxC,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,MAAM,CAAC,CAAA,EAAE;oBAC/B,OAAO;iBACR;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAEvC,mDAAmD;gBACnD,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,UAAU,CAAC,MAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,SAAS,CAAC,CAAA,EAAE;oBAC/D,OAAO;iBACR;gBAED,yCAAyC;gBACzC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAC3C,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,CAAC;iBAClB;gBACD,IAAI,IAAI,EAAE;oBACR,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvB;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;QACpB,CAAC,EACD,eAAe,CAAC,sCAAsC;SACvD,CAAC;KACH;IAED,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -1,48 +1,47 @@
|
|
|
1
1
|
import cheerio from "cheerio";
|
|
2
2
|
import { scrapeGettingFileNameFromUrl } from "../scrapeGettingFileNameFromUrl.js";
|
|
3
|
+
import combineNavWithEmptyGroupTitles from "../combineNavWithEmptyGroupTitles.js";
|
|
3
4
|
import { scrapeDocusaurusPage } from "./scrapeDocusaurusPage.js";
|
|
5
|
+
import getLinksRecursively from "./getLinksRecursively.js";
|
|
6
|
+
import alternateGroupTitle from "./alternateGroupTitle.js";
|
|
4
7
|
export async function scrapeDocusaurusSection(html, origin, cliDir, overwrite) {
|
|
5
8
|
const $ = cheerio.load(html);
|
|
6
9
|
// Get all the navigation sections
|
|
7
10
|
const navigationSections = $(".theme-doc-sidebar-menu").first().children();
|
|
8
11
|
// Get all links per group
|
|
9
12
|
const groupsConfig = navigationSections
|
|
10
|
-
.map((i,
|
|
11
|
-
const
|
|
13
|
+
.map((i, s) => {
|
|
14
|
+
const section = $(s);
|
|
12
15
|
// Links without a group
|
|
13
|
-
if (
|
|
14
|
-
const linkHref =
|
|
16
|
+
if (section.hasClass("theme-doc-sidebar-item-link")) {
|
|
17
|
+
const linkHref = section.find("a[href]").first().attr("href");
|
|
15
18
|
return {
|
|
16
19
|
group: "",
|
|
17
20
|
pages: [linkHref],
|
|
18
21
|
};
|
|
19
22
|
}
|
|
20
|
-
const
|
|
23
|
+
const firstLink = section
|
|
21
24
|
.find(".menu__list-item-collapsible")
|
|
22
25
|
.first()
|
|
23
|
-
.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
.map((i, link) => {
|
|
29
|
-
return $(link).attr("href");
|
|
30
|
-
})
|
|
31
|
-
.filter((i, link) => link !== "#")
|
|
32
|
-
.toArray();
|
|
33
|
-
// Follows the same structure as mint.json
|
|
26
|
+
.find("a[href]");
|
|
27
|
+
const sectionTitle = firstLink.text();
|
|
28
|
+
const firstHref = firstLink.attr("href");
|
|
29
|
+
const linkSections = section.children().eq(1).children();
|
|
30
|
+
const pages = getLinksRecursively(linkSections, $);
|
|
34
31
|
return {
|
|
35
|
-
group: sectionTitle,
|
|
36
|
-
pages:
|
|
32
|
+
group: sectionTitle || alternateGroupTitle(firstLink, pages),
|
|
33
|
+
pages: firstHref ? [firstHref, ...pages] : pages,
|
|
37
34
|
};
|
|
38
35
|
})
|
|
39
36
|
.toArray();
|
|
37
|
+
// Merge groups with empty titles together
|
|
38
|
+
const reducedGroupsConfig = combineNavWithEmptyGroupTitles(groupsConfig);
|
|
40
39
|
// Scrape each link in the navigation.
|
|
41
|
-
const groupsConfigCleanPaths = await Promise.all(
|
|
42
|
-
groupConfig.pages = (await Promise.all(groupConfig.pages.map(async (
|
|
40
|
+
const groupsConfigCleanPaths = await Promise.all(reducedGroupsConfig.map(async (groupConfig) => {
|
|
41
|
+
groupConfig.pages = (await Promise.all(groupConfig.pages.map(async (navEntry) =>
|
|
43
42
|
// Docusaurus requires a directory on all sections wheras we use root.
|
|
44
43
|
// /docs is their default directory so we remove it
|
|
45
|
-
scrapeGettingFileNameFromUrl(
|
|
44
|
+
scrapeGettingFileNameFromUrl(navEntry, cliDir, origin, overwrite, scrapeDocusaurusPage, false, "/docs"))))
|
|
46
45
|
// Remove skipped index pages (they return undefined from the above function)
|
|
47
46
|
.filter(Boolean);
|
|
48
47
|
return groupConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrapeDocusaurusSection.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/scrapeDocusaurusSection.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"scrapeDocusaurusSection.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/scrapeDocusaurusSection.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,8BAA8B,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAC3D,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAY,EACZ,MAAc,EACd,MAAc,EACd,SAAkB;IAElB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,kCAAkC;IAClC,MAAM,kBAAkB,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE3E,0BAA0B;IAC1B,MAAM,YAAY,GAAG,kBAAkB;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAErB,wBAAwB;QACxB,IAAI,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE;YACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9D,OAAO;gBACL,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,CAAC,QAAQ,CAAC;aAClB,CAAC;SACH;QAED,MAAM,SAAS,GAAG,OAAO;aACtB,IAAI,CAAC,8BAA8B,CAAC;aACpC,KAAK,EAAE;aACP,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnB,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEzD,MAAM,KAAK,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEnD,OAAO;YACL,KAAK,EAAE,YAAY,IAAI,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;YAC5D,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;SACjD,CAAC;IACJ,CAAC,CAAC;SACD,OAAO,EAAE,CAAC;IAEb,0CAA0C;IAC1C,MAAM,mBAAmB,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAEzE,sCAAsC;IACtC,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9C,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;QAC5C,WAAW,CAAC,KAAK,GAAG,CAClB,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAyB,EAAE,EAAE;QACxD,sEAAsE;QACtE,mDAAmD;QACnD,4BAA4B,CAC1B,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,oBAAoB,EACpB,KAAK,EACL,OAAO,CACR,CACF,CACF,CACF;YACC,6EAA6E;aAC5E,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { scrapeGettingFileNameFromUrl } from "../scrapeGettingFileNameFromUrl.js
|
|
|
3
3
|
import { scrapeGitBookPage } from "./scrapeGitBookPage.js";
|
|
4
4
|
import combineNavWithEmptyGroupTitles from "../combineNavWithEmptyGroupTitles.js";
|
|
5
5
|
import getLinksRecursively from "./getLinksRecursively.js";
|
|
6
|
+
import alternateGroupTitle from "./alternateGroupTitle.js";
|
|
6
7
|
export async function scrapeGitBookSection(html, origin, cliDir, overwrite) {
|
|
7
8
|
const $ = cheerio.load(html);
|
|
8
9
|
// Get all the navigation sections
|
|
@@ -26,7 +27,7 @@ export async function scrapeGitBookSection(html, origin, cliDir, overwrite) {
|
|
|
26
27
|
const linkSections = section.children().eq(1).children();
|
|
27
28
|
const pages = getLinksRecursively(linkSections, $);
|
|
28
29
|
return {
|
|
29
|
-
group: sectionTitle ||
|
|
30
|
+
group: sectionTitle || alternateGroupTitle(firstLink, pages),
|
|
30
31
|
pages: firstHref ? [firstHref, ...pages] : pages,
|
|
31
32
|
};
|
|
32
33
|
})
|
|
@@ -40,12 +41,4 @@ export async function scrapeGitBookSection(html, origin, cliDir, overwrite) {
|
|
|
40
41
|
}));
|
|
41
42
|
return groupsConfigCleanPaths;
|
|
42
43
|
}
|
|
43
|
-
function alternateTitle(firstLink, pages) {
|
|
44
|
-
// Only assign titles to nested navigation menus outside a section.
|
|
45
|
-
// Others should not have a title so we can merge them into one section.
|
|
46
|
-
if (pages.length > 0) {
|
|
47
|
-
return firstLink === null || firstLink === void 0 ? void 0 : firstLink.text();
|
|
48
|
-
}
|
|
49
|
-
return "";
|
|
50
|
-
}
|
|
51
44
|
//# sourceMappingURL=scrapeGitBookSection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrapeGitBookSection.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/scrapeGitBookSection.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,8BAA8B,MAAM,sCAAsC,CAAC;AAClF,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,MAAc,EACd,MAAc,EACd,SAAkB;IAElB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,kCAAkC;IAClC,MAAM,kBAAkB,GAAG,CAAC,CAC1B,wEAAwE,CACzE;SACE,QAAQ,EAAE;SACV,KAAK,EAAE;SACP,QAAQ,EAAE;SACV,KAAK,EAAE;SACP,QAAQ,EAAE,CAAC;IAEd,0BAA0B;IAC1B,MAAM,YAAY,GAAG,kBAAkB;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC;aAC5B,IAAI,CAAC,uBAAuB,CAAC;aAC7B,KAAK,EAAE;aACP,IAAI,EAAE,CAAC;QAEV,0DAA0D;QAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEnD,OAAO;YACL,KAAK,EAAE,YAAY,IAAI,
|
|
1
|
+
{"version":3,"file":"scrapeGitBookSection.js","sourceRoot":"","sources":["../../../src/scraping/site-scrapers/scrapeGitBookSection.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,8BAA8B,MAAM,sCAAsC,CAAC;AAClF,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAC3D,OAAO,mBAAmB,MAAM,0BAA0B,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,MAAc,EACd,MAAc,EACd,SAAkB;IAElB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,kCAAkC;IAClC,MAAM,kBAAkB,GAAG,CAAC,CAC1B,wEAAwE,CACzE;SACE,QAAQ,EAAE;SACV,KAAK,EAAE;SACP,QAAQ,EAAE;SACV,KAAK,EAAE;SACP,QAAQ,EAAE,CAAC;IAEd,0BAA0B;IAC1B,MAAM,YAAY,GAAG,kBAAkB;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC;aAC5B,IAAI,CAAC,uBAAuB,CAAC;aAC7B,KAAK,EAAE;aACP,IAAI,EAAE,CAAC;QAEV,0DAA0D;QAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEnD,OAAO;YACL,KAAK,EAAE,YAAY,IAAI,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC;YAC5D,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;SACjD,CAAC;IACJ,CAAC,CAAC;SACD,OAAO,EAAE;SACT,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,0CAA0C;IAC1C,MAAM,mBAAmB,GAAG,8BAA8B,CAAC,YAAY,CAAC,CAAC;IAEzE,sCAAsC;IACtC,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9C,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAyB,EAAE,EAAE;QAC1D,OAAO,MAAM,4BAA4B,CACvC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -15,8 +15,8 @@ import {
|
|
|
15
15
|
scrapeSectionAutomatically,
|
|
16
16
|
scrapeSectionAxiosWrapper,
|
|
17
17
|
scrapeGitbookSectionCommand,
|
|
18
|
+
scrapeDocusaurusSectionCommand,
|
|
18
19
|
} from "./scraping/scrapeSectionCommands.js";
|
|
19
|
-
import { scrapeDocusaurusSection } from "./scraping/site-scrapers/scrapeDocusaurusSection.js";
|
|
20
20
|
import { scrapeReadMeSection } from "./scraping/site-scrapers/scrapeReadMeSection.js";
|
|
21
21
|
import dev from "./local-preview/index.js";
|
|
22
22
|
import installDepsCommand from "./local-preview/helper-commands/installDepsCommand.js";
|
|
@@ -86,7 +86,7 @@ yargs(hideBin(process.argv))
|
|
|
86
86
|
"Scrapes the Docusaurus section",
|
|
87
87
|
() => {},
|
|
88
88
|
async (argv) => {
|
|
89
|
-
await
|
|
89
|
+
await scrapeDocusaurusSectionCommand(argv);
|
|
90
90
|
}
|
|
91
91
|
)
|
|
92
92
|
.command(
|
|
@@ -2,10 +2,10 @@ import inquirer from "inquirer";
|
|
|
2
2
|
import shell from "shelljs";
|
|
3
3
|
import { CLIENT_PATH } from "../../constants.js";
|
|
4
4
|
|
|
5
|
-
const clearCommand = () => {
|
|
5
|
+
const clearCommand = async () => {
|
|
6
6
|
shell.cd(CLIENT_PATH);
|
|
7
|
-
shell.exec("git clean -d -x -e node_modules -n");
|
|
8
|
-
inquirer
|
|
7
|
+
shell.exec("git clean -d -x -e node_modules -e last-invocation-path -n");
|
|
8
|
+
await inquirer
|
|
9
9
|
.prompt([
|
|
10
10
|
{
|
|
11
11
|
type: "confirm",
|
|
@@ -16,7 +16,9 @@ const clearCommand = () => {
|
|
|
16
16
|
])
|
|
17
17
|
.then(({ confirm }) => {
|
|
18
18
|
if (confirm) {
|
|
19
|
-
shell.exec(
|
|
19
|
+
shell.exec(
|
|
20
|
+
"git clean -d -x -e node_modules -e last-invocation-path -f"
|
|
21
|
+
);
|
|
20
22
|
} else {
|
|
21
23
|
console.log("Clear cancelled.");
|
|
22
24
|
}
|
|
@@ -2,6 +2,7 @@ import Chalk from "chalk";
|
|
|
2
2
|
import open from "open";
|
|
3
3
|
import { promises as _promises } from "fs";
|
|
4
4
|
import fse, { pathExists } from "fs-extra";
|
|
5
|
+
import inquirer from "inquirer";
|
|
5
6
|
import { isInternetAvailable } from "is-internet-available";
|
|
6
7
|
import path from "path";
|
|
7
8
|
import shell from "shelljs";
|
|
@@ -18,6 +19,25 @@ import listener from "./utils/listener.js";
|
|
|
18
19
|
import { createPage, createMetadataFileFromPages } from "./utils/metadata.js";
|
|
19
20
|
import { updateConfigFile } from "./utils/mintConfigFile.js";
|
|
20
21
|
import { buildLogger, ensureYarn } from "../util.js";
|
|
22
|
+
import clearCommand from "./helper-commands/clearCommand.js";
|
|
23
|
+
|
|
24
|
+
const saveInvocationPath = async () => {
|
|
25
|
+
await fse.outputFile(LAST_INVOCATION_PATH_FILE_LOCATION, CMD_EXEC_PATH);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const cleanOldFiles = async () => {
|
|
29
|
+
const lastInvocationPathExists = await pathExists(
|
|
30
|
+
LAST_INVOCATION_PATH_FILE_LOCATION
|
|
31
|
+
);
|
|
32
|
+
if (!lastInvocationPathExists) return;
|
|
33
|
+
const lastInvocationPath = (
|
|
34
|
+
await readFile(LAST_INVOCATION_PATH_FILE_LOCATION)
|
|
35
|
+
).toString();
|
|
36
|
+
if (lastInvocationPath !== CMD_EXEC_PATH) {
|
|
37
|
+
// clean if invoked in new location
|
|
38
|
+
await clearCommand();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
21
41
|
|
|
22
42
|
const { readFile } = _promises;
|
|
23
43
|
|
|
@@ -90,8 +110,33 @@ const shellExec = (cmd: string) => {
|
|
|
90
110
|
const nodeModulesExists = async () => {
|
|
91
111
|
return pathExists(path.join(DOT_MINTLIFY, "mint", "client", "node_modules"));
|
|
92
112
|
};
|
|
113
|
+
|
|
114
|
+
const promptForYarn = async () => {
|
|
115
|
+
const yarnInstalled = shell.which("yarn");
|
|
116
|
+
if (!yarnInstalled) {
|
|
117
|
+
await inquirer
|
|
118
|
+
.prompt([
|
|
119
|
+
{
|
|
120
|
+
type: "confirm",
|
|
121
|
+
name: "confirm",
|
|
122
|
+
message: "yarn must be globally installed. Install yarn?",
|
|
123
|
+
default: true,
|
|
124
|
+
},
|
|
125
|
+
])
|
|
126
|
+
.then(({ confirm }) => {
|
|
127
|
+
if (confirm) {
|
|
128
|
+
shell.exec("npm install --global yarn");
|
|
129
|
+
} else {
|
|
130
|
+
console.log("Installation cancelled.");
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
93
136
|
const dev = async () => {
|
|
94
137
|
shell.cd(HOME_DIR);
|
|
138
|
+
await cleanOldFiles();
|
|
139
|
+
await promptForYarn();
|
|
95
140
|
const logger = buildLogger("Starting a local Mintlify instance...");
|
|
96
141
|
await fse.ensureDir(path.join(DOT_MINTLIFY, "mint"));
|
|
97
142
|
shell.cd(path.join(HOME_DIR, ".mintlify", "mint"));
|
|
@@ -130,8 +175,7 @@ const dev = async () => {
|
|
|
130
175
|
runYarn = false;
|
|
131
176
|
}
|
|
132
177
|
shell.cd(CLIENT_PATH);
|
|
133
|
-
runYarn
|
|
134
|
-
if (internet && runYarn) {
|
|
178
|
+
if (internet && (runYarn || !(await nodeModulesExists()))) {
|
|
135
179
|
if (firstInstallation) {
|
|
136
180
|
logger.succeed("Local Mintlify instance initialized");
|
|
137
181
|
}
|
|
@@ -153,6 +197,7 @@ const dev = async () => {
|
|
|
153
197
|
`);
|
|
154
198
|
process.exit(1);
|
|
155
199
|
}
|
|
200
|
+
await saveInvocationPath();
|
|
156
201
|
await copyFiles(logger);
|
|
157
202
|
run();
|
|
158
203
|
};
|
|
@@ -161,7 +206,7 @@ const run = () => {
|
|
|
161
206
|
shell.cd(CLIENT_PATH);
|
|
162
207
|
console.log(
|
|
163
208
|
`🌿 ${Chalk.green(
|
|
164
|
-
"Navigate to your local preview at
|
|
209
|
+
"Navigate to your local preview at http://localhost:3000"
|
|
165
210
|
)}`
|
|
166
211
|
);
|
|
167
212
|
shell.exec("npm run dev", { async: true });
|
|
@@ -28,6 +28,11 @@ export default async function downloadAllImages(
|
|
|
28
28
|
// Wait to all images to download before continuing
|
|
29
29
|
const origToNewArray = await Promise.all(
|
|
30
30
|
imageSrcs.map(async (origImageSrc: string) => {
|
|
31
|
+
// We do not support downloading base64 in-line images.
|
|
32
|
+
if (origImageSrc.startsWith("data:")) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
31
36
|
// Add origin if the image tags are using relative sources
|
|
32
37
|
const imageHref = origImageSrc.startsWith("http")
|
|
33
38
|
? origImageSrc
|