mintlify 1.1.6 → 1.1.8
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/CONTRIBUTING.md +5 -0
- package/bin/index.js +1 -8
- package/bin/index.js.map +1 -1
- package/bin/local-preview/injectNav.js +94 -0
- package/bin/local-preview/injectNav.js.map +1 -0
- 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/detectFramework.js +12 -3
- package/bin/scraping/detectFramework.js.map +1 -1
- package/bin/scraping/scrapeFileGettingFileNameFromUrl.js +2 -2
- package/bin/scraping/scrapeFileGettingFileNameFromUrl.js.map +1 -1
- package/bin/scraping/scrapeGettingFileNameFromUrl.js +3 -3
- package/bin/scraping/scrapeGettingFileNameFromUrl.js.map +1 -1
- package/bin/scraping/scrapePage.js +2 -2
- package/bin/scraping/scrapePage.js.map +1 -1
- package/bin/scraping/scrapePageCommands.js +6 -6
- package/bin/scraping/scrapePageCommands.js.map +1 -1
- package/bin/scraping/scrapeSection.js +2 -2
- package/bin/scraping/scrapeSection.js.map +1 -1
- package/bin/scraping/scrapeSectionCommands.js +8 -7
- package/bin/scraping/scrapeSectionCommands.js.map +1 -1
- package/bin/scraping/site-scrapers/links-per-group/getDocusaurusLinksPerGroup.js +36 -0
- package/bin/scraping/site-scrapers/links-per-group/getDocusaurusLinksPerGroup.js.map +1 -0
- package/bin/scraping/site-scrapers/links-per-group/getLinksRecursively.js +38 -0
- package/bin/scraping/site-scrapers/links-per-group/getLinksRecursively.js.map +1 -0
- package/bin/scraping/site-scrapers/scrapeDocusaurusPage.js +14 -8
- package/bin/scraping/site-scrapers/scrapeDocusaurusPage.js.map +1 -1
- package/bin/scraping/site-scrapers/scrapeDocusaurusSection.js +4 -29
- package/bin/scraping/site-scrapers/scrapeDocusaurusSection.js.map +1 -1
- package/bin/scraping/site-scrapers/scrapeGitBookPage.js +2 -1
- package/bin/scraping/site-scrapers/scrapeGitBookPage.js.map +1 -1
- package/bin/scraping/site-scrapers/scrapeGitBookSection.js +7 -5
- package/bin/scraping/site-scrapers/scrapeGitBookSection.js.map +1 -1
- package/bin/scraping/site-scrapers/scrapeReadMePage.js +2 -1
- package/bin/scraping/site-scrapers/scrapeReadMePage.js.map +1 -1
- package/bin/scraping/site-scrapers/scrapeReadMeSection.js +3 -3
- package/bin/scraping/site-scrapers/scrapeReadMeSection.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +0 -16
- package/src/scraping/detectFramework.ts +13 -3
- package/src/scraping/scrapeFileGettingFileNameFromUrl.ts +5 -2
- package/src/scraping/scrapeGettingFileNameFromUrl.ts +5 -1
- package/src/scraping/scrapePage.ts +6 -3
- package/src/scraping/scrapePageCommands.ts +10 -6
- package/src/scraping/scrapeSection.ts +9 -2
- package/src/scraping/scrapeSectionCommands.ts +24 -7
- package/src/scraping/site-scrapers/links-per-group/getDocusaurusLinksPerGroup.ts +46 -0
- package/src/scraping/site-scrapers/{getLinksRecursively.ts → links-per-group/getLinksRecursively.ts} +0 -0
- package/src/scraping/site-scrapers/scrapeDocusaurusPage.ts +20 -8
- package/src/scraping/site-scrapers/scrapeDocusaurusSection.ts +9 -33
- package/src/scraping/site-scrapers/scrapeGitBookPage.ts +2 -1
- package/src/scraping/site-scrapers/scrapeGitBookSection.ts +9 -5
- package/src/scraping/site-scrapers/scrapeReadMePage.ts +2 -1
- package/src/scraping/site-scrapers/scrapeReadMeSection.ts +4 -2
- package/bin/local-preview/helper-commands/cleanCommand.js +0 -8
- package/bin/local-preview/helper-commands/cleanCommand.js.map +0 -1
|
@@ -14,17 +14,27 @@ export function detectFramework(html) {
|
|
|
14
14
|
docusaurusMeta.length > 0 &&
|
|
15
15
|
docusaurusMeta.attr("content").includes("Docusaurus")
|
|
16
16
|
) {
|
|
17
|
-
|
|
17
|
+
if (docusaurusMeta.attr("content").includes("v3")) {
|
|
18
|
+
return { framework: Frameworks.DOCUSAURUS, version: "3" };
|
|
19
|
+
}
|
|
20
|
+
if (docusaurusMeta.attr("content").includes("v2")) {
|
|
21
|
+
return { framework: Frameworks.DOCUSAURUS, version: "2" };
|
|
22
|
+
} else if (docusaurusMeta.attr("content").includes("v1")) {
|
|
23
|
+
console.warn(
|
|
24
|
+
"WARNING: We detected Docusaurus version 1 but we only support scraping versions 2 and 3."
|
|
25
|
+
);
|
|
26
|
+
return { framework: Frameworks.DOCUSAURUS, version: "1" };
|
|
27
|
+
}
|
|
18
28
|
}
|
|
19
29
|
|
|
20
30
|
const isGitBook = $(".gitbook-root").length > 0;
|
|
21
31
|
if (isGitBook) {
|
|
22
|
-
return Frameworks.GITBOOK;
|
|
32
|
+
return { framework: Frameworks.GITBOOK };
|
|
23
33
|
}
|
|
24
34
|
|
|
25
35
|
const isReadMe = $('meta[name="readme-deploy"]').length > 0;
|
|
26
36
|
if (isReadMe) {
|
|
27
|
-
return Frameworks.README;
|
|
37
|
+
return { framework: Frameworks.README };
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
return undefined;
|
|
@@ -12,13 +12,15 @@ export async function scrapeFileGettingFileNameFromUrl(
|
|
|
12
12
|
html: string,
|
|
13
13
|
origin: string,
|
|
14
14
|
cliDir: string,
|
|
15
|
-
imageBaseDir: string
|
|
15
|
+
imageBaseDir: string,
|
|
16
|
+
version: string | undefined
|
|
16
17
|
) => Promise<{
|
|
17
18
|
title?: string;
|
|
18
19
|
description?: string;
|
|
19
20
|
markdown?: string;
|
|
20
21
|
}>,
|
|
21
22
|
puppeteer = false,
|
|
23
|
+
version: string | undefined,
|
|
22
24
|
baseToRemove?: string
|
|
23
25
|
) {
|
|
24
26
|
// Skip scraping external links
|
|
@@ -53,7 +55,8 @@ export async function scrapeFileGettingFileNameFromUrl(
|
|
|
53
55
|
html,
|
|
54
56
|
origin,
|
|
55
57
|
cliDir,
|
|
56
|
-
imageBaseDir
|
|
58
|
+
imageBaseDir,
|
|
59
|
+
version
|
|
57
60
|
);
|
|
58
61
|
|
|
59
62
|
// Check if page didn't have content
|
|
@@ -10,13 +10,15 @@ export async function scrapeGettingFileNameFromUrl(
|
|
|
10
10
|
html: string,
|
|
11
11
|
origin: string,
|
|
12
12
|
cliDir: string,
|
|
13
|
-
imageBaseDir: string
|
|
13
|
+
imageBaseDir: string,
|
|
14
|
+
version: string | undefined
|
|
14
15
|
) => Promise<{
|
|
15
16
|
title?: string;
|
|
16
17
|
description?: string;
|
|
17
18
|
markdown?: string;
|
|
18
19
|
}>,
|
|
19
20
|
puppeteer = false,
|
|
21
|
+
version: string | undefined,
|
|
20
22
|
baseToRemove?: string
|
|
21
23
|
): Promise<NavigationEntry> {
|
|
22
24
|
if (isNavigation(navEntry)) {
|
|
@@ -30,6 +32,7 @@ export async function scrapeGettingFileNameFromUrl(
|
|
|
30
32
|
overwrite,
|
|
31
33
|
scrapePageFunc,
|
|
32
34
|
puppeteer,
|
|
35
|
+
version,
|
|
33
36
|
baseToRemove
|
|
34
37
|
)
|
|
35
38
|
);
|
|
@@ -45,6 +48,7 @@ export async function scrapeGettingFileNameFromUrl(
|
|
|
45
48
|
overwrite,
|
|
46
49
|
scrapePageFunc,
|
|
47
50
|
puppeteer,
|
|
51
|
+
version,
|
|
48
52
|
baseToRemove
|
|
49
53
|
);
|
|
50
54
|
}
|
|
@@ -6,11 +6,13 @@ export async function scrapePage(
|
|
|
6
6
|
html: string,
|
|
7
7
|
origin: string,
|
|
8
8
|
cliDir: string,
|
|
9
|
-
imageBaseDir: string
|
|
9
|
+
imageBaseDir: string,
|
|
10
|
+
version: string | undefined
|
|
10
11
|
) => Promise<any>,
|
|
11
12
|
href: string,
|
|
12
13
|
html: string,
|
|
13
|
-
overwrite: boolean
|
|
14
|
+
overwrite: boolean,
|
|
15
|
+
version: string | undefined
|
|
14
16
|
) {
|
|
15
17
|
const origin = getOrigin(href);
|
|
16
18
|
const imageBaseDir = path.join(process.cwd(), "images");
|
|
@@ -18,7 +20,8 @@ export async function scrapePage(
|
|
|
18
20
|
html,
|
|
19
21
|
origin,
|
|
20
22
|
process.cwd(),
|
|
21
|
-
imageBaseDir
|
|
23
|
+
imageBaseDir,
|
|
24
|
+
version
|
|
22
25
|
);
|
|
23
26
|
createPage(title, description, markdown, overwrite, process.cwd());
|
|
24
27
|
}
|
|
@@ -19,16 +19,20 @@ function validateFramework(framework) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export async function scrapePageWrapper(
|
|
22
|
+
export async function scrapePageWrapper(
|
|
23
|
+
argv: any,
|
|
24
|
+
scrapeFunc: any,
|
|
25
|
+
options?: { version?: string; puppeteer?: boolean }
|
|
26
|
+
) {
|
|
23
27
|
const href = getHrefFromArgs(argv);
|
|
24
28
|
let html: string;
|
|
25
|
-
if (puppeteer) {
|
|
29
|
+
if (options.puppeteer) {
|
|
26
30
|
html = await getHtmlWithPuppeteer(href);
|
|
27
31
|
} else {
|
|
28
32
|
const res = await axios.default.get(href);
|
|
29
33
|
html = res.data;
|
|
30
34
|
}
|
|
31
|
-
await scrapePage(scrapeFunc, href, html, argv.overwrite);
|
|
35
|
+
await scrapePage(scrapeFunc, href, html, argv.overwrite, options.version);
|
|
32
36
|
process.exit(0);
|
|
33
37
|
}
|
|
34
38
|
|
|
@@ -36,16 +40,16 @@ export async function scrapePageAutomatically(argv: any) {
|
|
|
36
40
|
const href = getHrefFromArgs(argv);
|
|
37
41
|
const res = await axios.default.get(href);
|
|
38
42
|
const html = res.data;
|
|
39
|
-
const framework = detectFramework(html);
|
|
43
|
+
const { framework, version } = detectFramework(html);
|
|
40
44
|
|
|
41
45
|
validateFramework(framework);
|
|
42
46
|
|
|
43
47
|
console.log("Detected framework: " + framework);
|
|
44
48
|
|
|
45
49
|
if (framework === Frameworks.DOCUSAURUS) {
|
|
46
|
-
await scrapePageWrapper(argv, scrapeDocusaurusPage);
|
|
50
|
+
await scrapePageWrapper(argv, scrapeDocusaurusPage, { version });
|
|
47
51
|
} else if (framework === Frameworks.GITBOOK) {
|
|
48
|
-
await scrapePageWrapper(argv, scrapeGitBookPage, true);
|
|
52
|
+
await scrapePageWrapper(argv, scrapeGitBookPage, { puppeteer: true });
|
|
49
53
|
} else if (framework === Frameworks.README) {
|
|
50
54
|
await scrapePageWrapper(argv, scrapeReadMePage);
|
|
51
55
|
}
|
|
@@ -4,12 +4,19 @@ export async function scrapeSection(
|
|
|
4
4
|
scrapeFunc: any,
|
|
5
5
|
html: string,
|
|
6
6
|
origin: string,
|
|
7
|
-
overwrite: boolean
|
|
7
|
+
overwrite: boolean,
|
|
8
|
+
version: string | undefined
|
|
8
9
|
) {
|
|
9
10
|
console.log(
|
|
10
11
|
`Started scraping${overwrite ? ", overwrite mode is on" : ""}...`
|
|
11
12
|
);
|
|
12
|
-
const groupsConfig = await scrapeFunc(
|
|
13
|
+
const groupsConfig = await scrapeFunc(
|
|
14
|
+
html,
|
|
15
|
+
origin,
|
|
16
|
+
process.cwd(),
|
|
17
|
+
overwrite,
|
|
18
|
+
version
|
|
19
|
+
);
|
|
13
20
|
console.log("Finished scraping.");
|
|
14
21
|
console.log("Add the following to your navigation in mint.json:");
|
|
15
22
|
console.log(objToReadableString(groupsConfig));
|
|
@@ -13,15 +13,25 @@ export async function scrapeSectionAxiosWrapper(argv: any, scrapeFunc: any) {
|
|
|
13
13
|
const href = getHrefFromArgs(argv);
|
|
14
14
|
const res = await axios.default.get(href);
|
|
15
15
|
const html = res.data;
|
|
16
|
-
await scrapeSection(
|
|
16
|
+
await scrapeSection(
|
|
17
|
+
scrapeFunc,
|
|
18
|
+
html,
|
|
19
|
+
getOrigin(href),
|
|
20
|
+
argv.overwrite,
|
|
21
|
+
undefined
|
|
22
|
+
);
|
|
17
23
|
process.exit(0);
|
|
18
24
|
}
|
|
19
25
|
|
|
20
|
-
export async function scrapeDocusaurusSectionCommand(
|
|
26
|
+
export async function scrapeDocusaurusSectionCommand(
|
|
27
|
+
argv: any,
|
|
28
|
+
version: string // "1" | "2" | "3"
|
|
29
|
+
) {
|
|
21
30
|
await scrapeSectionOpeningAllNested(
|
|
22
31
|
argv,
|
|
23
32
|
openNestedDocusaurusMenus,
|
|
24
|
-
scrapeDocusaurusSection
|
|
33
|
+
scrapeDocusaurusSection,
|
|
34
|
+
version
|
|
25
35
|
);
|
|
26
36
|
}
|
|
27
37
|
|
|
@@ -36,7 +46,8 @@ export async function scrapeGitbookSectionCommand(argv: any) {
|
|
|
36
46
|
async function scrapeSectionOpeningAllNested(
|
|
37
47
|
argv: any,
|
|
38
48
|
openLinks: any,
|
|
39
|
-
scrapeFunc: any
|
|
49
|
+
scrapeFunc: any,
|
|
50
|
+
version?: string
|
|
40
51
|
) {
|
|
41
52
|
const href = getHrefFromArgs(argv);
|
|
42
53
|
|
|
@@ -48,7 +59,13 @@ async function scrapeSectionOpeningAllNested(
|
|
|
48
59
|
|
|
49
60
|
const html = await openLinks(page);
|
|
50
61
|
browser.close();
|
|
51
|
-
await scrapeSection(
|
|
62
|
+
await scrapeSection(
|
|
63
|
+
scrapeFunc,
|
|
64
|
+
html,
|
|
65
|
+
getOrigin(href),
|
|
66
|
+
argv.overwrite,
|
|
67
|
+
version
|
|
68
|
+
);
|
|
52
69
|
process.exit(0);
|
|
53
70
|
}
|
|
54
71
|
|
|
@@ -56,14 +73,14 @@ export async function scrapeSectionAutomatically(argv: any) {
|
|
|
56
73
|
const href = getHrefFromArgs(argv);
|
|
57
74
|
const res = await axios.default.get(href);
|
|
58
75
|
const html = res.data;
|
|
59
|
-
const framework = detectFramework(html);
|
|
76
|
+
const { framework, version } = detectFramework(html);
|
|
60
77
|
|
|
61
78
|
validateFramework(framework);
|
|
62
79
|
|
|
63
80
|
console.log("Detected framework: " + framework);
|
|
64
81
|
|
|
65
82
|
if (framework === Frameworks.DOCUSAURUS) {
|
|
66
|
-
await scrapeDocusaurusSectionCommand(argv);
|
|
83
|
+
await scrapeDocusaurusSectionCommand(argv, version);
|
|
67
84
|
} else if (framework === Frameworks.GITBOOK) {
|
|
68
85
|
await scrapeGitbookSectionCommand(argv);
|
|
69
86
|
} else if (framework === Frameworks.README) {
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import alternateGroupTitle from "../alternateGroupTitle.js";
|
|
2
|
+
import getLinksRecursively from "./getLinksRecursively.js";
|
|
3
|
+
|
|
4
|
+
export function getDocusaurusLinksPerGroup(
|
|
5
|
+
navigationSections: any,
|
|
6
|
+
$: any,
|
|
7
|
+
version: string | undefined
|
|
8
|
+
) {
|
|
9
|
+
if (version === "3" || version === "2") {
|
|
10
|
+
return getDocusaurusLinksPerGroupLoop(navigationSections, $);
|
|
11
|
+
}
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function getDocusaurusLinksPerGroupLoop(navigationSections: any, $: any) {
|
|
16
|
+
return navigationSections
|
|
17
|
+
.map((i, s) => {
|
|
18
|
+
const section = $(s);
|
|
19
|
+
|
|
20
|
+
// Links without a group
|
|
21
|
+
if (section.hasClass("theme-doc-sidebar-item-link")) {
|
|
22
|
+
const linkHref = section.find("a[href]").first().attr("href");
|
|
23
|
+
return {
|
|
24
|
+
group: "",
|
|
25
|
+
pages: [linkHref],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const firstLink = section
|
|
30
|
+
.find(".menu__list-item-collapsible")
|
|
31
|
+
.first()
|
|
32
|
+
.find("a[href]");
|
|
33
|
+
|
|
34
|
+
const sectionTitle = firstLink.text();
|
|
35
|
+
const firstHref = firstLink.attr("href");
|
|
36
|
+
const linkSections = section.children().eq(1).children();
|
|
37
|
+
|
|
38
|
+
const pages = getLinksRecursively(linkSections, $);
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
group: sectionTitle || alternateGroupTitle(firstLink, pages),
|
|
42
|
+
pages: firstHref ? [firstHref, ...pages] : pages,
|
|
43
|
+
};
|
|
44
|
+
})
|
|
45
|
+
.toArray();
|
|
46
|
+
}
|
package/src/scraping/site-scrapers/{getLinksRecursively.ts → links-per-group/getLinksRecursively.ts}
RENAMED
|
File without changes
|
|
@@ -7,34 +7,46 @@ export async function scrapeDocusaurusPage(
|
|
|
7
7
|
html: string,
|
|
8
8
|
origin: string,
|
|
9
9
|
cliDir: string,
|
|
10
|
-
imageBaseDir: string
|
|
10
|
+
imageBaseDir: string,
|
|
11
|
+
version: string | undefined // expects "2", or "3". Have not written support for "1" yet
|
|
11
12
|
) {
|
|
12
13
|
const $ = cheerio.load(html);
|
|
13
14
|
|
|
14
|
-
const
|
|
15
|
+
const article =
|
|
16
|
+
version === "3" ? $(".theme-doc-markdown").first() : $("article").first();
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
if (article.length === 0) {
|
|
19
|
+
// Index pages with no additional text don't have the markdown class
|
|
18
20
|
return {};
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
const titleComponent =
|
|
23
|
+
const titleComponent = article.find("h1");
|
|
22
24
|
const title = titleComponent.text().trim();
|
|
23
25
|
|
|
24
26
|
// Do not include title in the content when we insert it in our metadata
|
|
25
27
|
titleComponent.remove();
|
|
26
28
|
|
|
29
|
+
const markdownContent =
|
|
30
|
+
version === "3" ? article : article.find(".markdown").first();
|
|
31
|
+
|
|
27
32
|
const origToWritePath = await downloadAllImages(
|
|
28
33
|
$,
|
|
29
|
-
|
|
34
|
+
markdownContent,
|
|
30
35
|
origin,
|
|
31
36
|
imageBaseDir
|
|
32
37
|
);
|
|
33
38
|
|
|
34
|
-
const
|
|
39
|
+
const markdownHtml = markdownContent.html();
|
|
35
40
|
|
|
36
41
|
const nhm = new NodeHtmlMarkdown();
|
|
37
|
-
let markdown = nhm.translate(
|
|
42
|
+
let markdown = nhm.translate(markdownHtml);
|
|
43
|
+
|
|
44
|
+
if (markdown == null) {
|
|
45
|
+
console.error(
|
|
46
|
+
"We do not support scraping this page. Content will be empty"
|
|
47
|
+
);
|
|
48
|
+
return { title, description: null, markdown: "" };
|
|
49
|
+
}
|
|
38
50
|
|
|
39
51
|
// Description only exists in meta tags. The code is commented out because its prone to incorrectly
|
|
40
52
|
// including a description if the first line of text had markdown annotations like `.
|
|
@@ -3,14 +3,14 @@ import { NavigationEntry } from "../..//navigation.js";
|
|
|
3
3
|
import { scrapeGettingFileNameFromUrl } from "../scrapeGettingFileNameFromUrl.js";
|
|
4
4
|
import combineNavWithEmptyGroupTitles from "../combineNavWithEmptyGroupTitles.js";
|
|
5
5
|
import { scrapeDocusaurusPage } from "./scrapeDocusaurusPage.js";
|
|
6
|
-
import
|
|
7
|
-
import alternateGroupTitle from "./alternateGroupTitle.js";
|
|
6
|
+
import { getDocusaurusLinksPerGroup } from "./links-per-group/getDocusaurusLinksPerGroup.js";
|
|
8
7
|
|
|
9
8
|
export async function scrapeDocusaurusSection(
|
|
10
9
|
html: string,
|
|
11
10
|
origin: string,
|
|
12
11
|
cliDir: string,
|
|
13
|
-
overwrite: boolean
|
|
12
|
+
overwrite: boolean,
|
|
13
|
+
version: string
|
|
14
14
|
) {
|
|
15
15
|
const $ = cheerio.load(html);
|
|
16
16
|
|
|
@@ -18,36 +18,11 @@ export async function scrapeDocusaurusSection(
|
|
|
18
18
|
const navigationSections = $(".theme-doc-sidebar-menu").first().children();
|
|
19
19
|
|
|
20
20
|
// Get all links per group
|
|
21
|
-
const groupsConfig =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (section.hasClass("theme-doc-sidebar-item-link")) {
|
|
27
|
-
const linkHref = section.find("a[href]").first().attr("href");
|
|
28
|
-
return {
|
|
29
|
-
group: "",
|
|
30
|
-
pages: [linkHref],
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const firstLink = section
|
|
35
|
-
.find(".menu__list-item-collapsible")
|
|
36
|
-
.first()
|
|
37
|
-
.find("a[href]");
|
|
38
|
-
|
|
39
|
-
const sectionTitle = firstLink.text();
|
|
40
|
-
const firstHref = firstLink.attr("href");
|
|
41
|
-
const linkSections = section.children().eq(1).children();
|
|
42
|
-
|
|
43
|
-
const pages = getLinksRecursively(linkSections, $);
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
group: sectionTitle || alternateGroupTitle(firstLink, pages),
|
|
47
|
-
pages: firstHref ? [firstHref, ...pages] : pages,
|
|
48
|
-
};
|
|
49
|
-
})
|
|
50
|
-
.toArray();
|
|
21
|
+
const groupsConfig = getDocusaurusLinksPerGroup(
|
|
22
|
+
navigationSections,
|
|
23
|
+
$,
|
|
24
|
+
version
|
|
25
|
+
);
|
|
51
26
|
|
|
52
27
|
// Merge groups with empty titles together
|
|
53
28
|
const reducedGroupsConfig = combineNavWithEmptyGroupTitles(groupsConfig);
|
|
@@ -67,6 +42,7 @@ export async function scrapeDocusaurusSection(
|
|
|
67
42
|
overwrite,
|
|
68
43
|
scrapeDocusaurusPage,
|
|
69
44
|
false,
|
|
45
|
+
version,
|
|
70
46
|
"/docs"
|
|
71
47
|
)
|
|
72
48
|
)
|
|
@@ -3,23 +3,26 @@ import { NavigationEntry } from "../../navigation.js";
|
|
|
3
3
|
import { scrapeGettingFileNameFromUrl } from "../scrapeGettingFileNameFromUrl.js";
|
|
4
4
|
import { scrapeGitBookPage } from "./scrapeGitBookPage.js";
|
|
5
5
|
import combineNavWithEmptyGroupTitles from "../combineNavWithEmptyGroupTitles.js";
|
|
6
|
-
import getLinksRecursively from "./getLinksRecursively.js";
|
|
6
|
+
import getLinksRecursively from "./links-per-group/getLinksRecursively.js";
|
|
7
7
|
import alternateGroupTitle from "./alternateGroupTitle.js";
|
|
8
8
|
|
|
9
9
|
export async function scrapeGitBookSection(
|
|
10
10
|
html: string,
|
|
11
11
|
origin: string,
|
|
12
12
|
cliDir: string,
|
|
13
|
-
overwrite: boolean
|
|
13
|
+
overwrite: boolean,
|
|
14
|
+
version: string | undefined
|
|
14
15
|
) {
|
|
15
16
|
const $ = cheerio.load(html);
|
|
16
17
|
|
|
17
18
|
// Get all the navigation sections
|
|
19
|
+
// Some variants of the GitBook UI show the logo and search base in the side navigation bar,
|
|
20
|
+
// but the navigation sections are always the last value.
|
|
18
21
|
const navigationSections = $(
|
|
19
|
-
'div[data-testid="page.desktopTableOfContents"] >
|
|
22
|
+
'div[data-testid="page.desktopTableOfContents"] > nav > div:first-child'
|
|
20
23
|
)
|
|
21
24
|
.children()
|
|
22
|
-
.
|
|
25
|
+
.eq(-1)
|
|
23
26
|
.children()
|
|
24
27
|
.first()
|
|
25
28
|
.children();
|
|
@@ -60,7 +63,8 @@ export async function scrapeGitBookSection(
|
|
|
60
63
|
origin,
|
|
61
64
|
overwrite,
|
|
62
65
|
scrapeGitBookPage,
|
|
63
|
-
true
|
|
66
|
+
true,
|
|
67
|
+
version
|
|
64
68
|
);
|
|
65
69
|
})
|
|
66
70
|
);
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import cheerio from "cheerio";
|
|
2
2
|
import { scrapeReadMePage } from "./scrapeReadMePage.js";
|
|
3
3
|
import { scrapeGettingFileNameFromUrl } from "../scrapeGettingFileNameFromUrl.js";
|
|
4
|
-
import getLinksRecursively from "./getLinksRecursively.js";
|
|
4
|
+
import getLinksRecursively from "./links-per-group/getLinksRecursively.js";
|
|
5
5
|
import { NavigationEntry } from "../../navigation.js";
|
|
6
6
|
|
|
7
7
|
export async function scrapeReadMeSection(
|
|
8
8
|
html: string,
|
|
9
9
|
origin: string,
|
|
10
10
|
cliDir: string,
|
|
11
|
-
overwrite: boolean
|
|
11
|
+
overwrite: boolean,
|
|
12
|
+
version: string | undefined
|
|
12
13
|
) {
|
|
13
14
|
const $ = cheerio.load(html);
|
|
14
15
|
|
|
@@ -53,6 +54,7 @@ export async function scrapeReadMeSection(
|
|
|
53
54
|
overwrite,
|
|
54
55
|
scrapeReadMePage,
|
|
55
56
|
false,
|
|
57
|
+
version,
|
|
56
58
|
"/docs"
|
|
57
59
|
);
|
|
58
60
|
})
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import shell from "shelljs";
|
|
2
|
-
import { CLIENT_PATH } from "../../constants.js";
|
|
3
|
-
const cleanCommand = () => {
|
|
4
|
-
shell.cd(CLIENT_PATH);
|
|
5
|
-
shell.exec("git clean -d -x -e node_modules -n");
|
|
6
|
-
};
|
|
7
|
-
export default cleanCommand;
|
|
8
|
-
//# sourceMappingURL=cleanCommand.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cleanCommand.js","sourceRoot":"","sources":["../../../src/local-preview/helper-commands/cleanCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|