mintlify 3.0.7 → 3.0.9

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.
Files changed (87) hide show
  1. package/bin/browser.js +24 -0
  2. package/bin/browser.js.map +1 -0
  3. package/bin/constants.js +31 -0
  4. package/bin/constants.js.map +1 -0
  5. package/bin/downloadImage.js +72 -0
  6. package/bin/downloadImage.js.map +1 -0
  7. package/bin/index.js +40 -0
  8. package/bin/index.js.map +1 -0
  9. package/bin/local-preview/helper-commands/installDepsCommand.js +12 -0
  10. package/bin/local-preview/helper-commands/installDepsCommand.js.map +1 -0
  11. package/bin/local-preview/index.js +154 -0
  12. package/bin/local-preview/index.js.map +1 -0
  13. package/bin/local-preview/listener/categorize.js +97 -0
  14. package/bin/local-preview/listener/categorize.js.map +1 -0
  15. package/bin/local-preview/listener/generate.js +89 -0
  16. package/bin/local-preview/listener/generate.js.map +1 -0
  17. package/bin/local-preview/listener/index.js +195 -0
  18. package/bin/local-preview/listener/index.js.map +1 -0
  19. package/bin/local-preview/listener/update.js +41 -0
  20. package/bin/local-preview/listener/update.js.map +1 -0
  21. package/bin/local-preview/listener/utils/createPage.js +167 -0
  22. package/bin/local-preview/listener/utils/createPage.js.map +1 -0
  23. package/bin/local-preview/listener/utils/getOpenApiContext.js +57 -0
  24. package/bin/local-preview/listener/utils/getOpenApiContext.js.map +1 -0
  25. package/bin/local-preview/listener/utils/mintConfigFile.js +22 -0
  26. package/bin/local-preview/listener/utils/mintConfigFile.js.map +1 -0
  27. package/bin/local-preview/listener/utils/toTitleCase.js +36 -0
  28. package/bin/local-preview/listener/utils/toTitleCase.js.map +1 -0
  29. package/bin/local-preview/listener/utils/types.js +2 -0
  30. package/bin/local-preview/listener/utils/types.js.map +1 -0
  31. package/bin/local-preview/listener/utils.js +62 -0
  32. package/bin/local-preview/listener/utils.js.map +1 -0
  33. package/bin/scraping/combineNavWithEmptyGroupTitles.js +20 -0
  34. package/bin/scraping/combineNavWithEmptyGroupTitles.js.map +1 -0
  35. package/bin/scraping/detectFramework.js +34 -0
  36. package/bin/scraping/detectFramework.js.map +1 -0
  37. package/bin/scraping/downloadAllImages.js +32 -0
  38. package/bin/scraping/downloadAllImages.js.map +1 -0
  39. package/bin/scraping/downloadLogoImage.js +13 -0
  40. package/bin/scraping/downloadLogoImage.js.map +1 -0
  41. package/bin/scraping/getSitemapLinks.js +18 -0
  42. package/bin/scraping/getSitemapLinks.js.map +1 -0
  43. package/bin/scraping/replaceImagePaths.js +17 -0
  44. package/bin/scraping/replaceImagePaths.js.map +1 -0
  45. package/bin/scraping/scrapeFileGettingFileNameFromUrl.js +43 -0
  46. package/bin/scraping/scrapeFileGettingFileNameFromUrl.js.map +1 -0
  47. package/bin/scraping/scrapeGettingFileNameFromUrl.js +13 -0
  48. package/bin/scraping/scrapeGettingFileNameFromUrl.js.map +1 -0
  49. package/bin/scraping/scrapePage.js +10 -0
  50. package/bin/scraping/scrapePage.js.map +1 -0
  51. package/bin/scraping/scrapePageCommands.js +48 -0
  52. package/bin/scraping/scrapePageCommands.js.map +1 -0
  53. package/bin/scraping/scrapeSection.js +12 -0
  54. package/bin/scraping/scrapeSection.js.map +1 -0
  55. package/bin/scraping/scrapeSectionCommands.js +60 -0
  56. package/bin/scraping/scrapeSectionCommands.js.map +1 -0
  57. package/bin/scraping/site-scrapers/alternateGroupTitle.js +9 -0
  58. package/bin/scraping/site-scrapers/alternateGroupTitle.js.map +1 -0
  59. package/bin/scraping/site-scrapers/links-per-group/getDocusaurusLinksPerGroup.js +36 -0
  60. package/bin/scraping/site-scrapers/links-per-group/getDocusaurusLinksPerGroup.js.map +1 -0
  61. package/bin/scraping/site-scrapers/links-per-group/getLinksRecursively.js +38 -0
  62. package/bin/scraping/site-scrapers/links-per-group/getLinksRecursively.js.map +1 -0
  63. package/bin/scraping/site-scrapers/links-per-group/getLinksRecursivelyGitBook.js +38 -0
  64. package/bin/scraping/site-scrapers/links-per-group/getLinksRecursivelyGitBook.js.map +1 -0
  65. package/bin/scraping/site-scrapers/openNestedDocusaurusMenus.js +30 -0
  66. package/bin/scraping/site-scrapers/openNestedDocusaurusMenus.js.map +1 -0
  67. package/bin/scraping/site-scrapers/openNestedGitbookMenus.js +17 -0
  68. package/bin/scraping/site-scrapers/openNestedGitbookMenus.js.map +1 -0
  69. package/bin/scraping/site-scrapers/scrapeDocusaurusPage.js +49 -0
  70. package/bin/scraping/site-scrapers/scrapeDocusaurusPage.js.map +1 -0
  71. package/bin/scraping/site-scrapers/scrapeDocusaurusSection.js +30 -0
  72. package/bin/scraping/site-scrapers/scrapeDocusaurusSection.js.map +1 -0
  73. package/bin/scraping/site-scrapers/scrapeGitBookPage.js +34 -0
  74. package/bin/scraping/site-scrapers/scrapeGitBookPage.js.map +1 -0
  75. package/bin/scraping/site-scrapers/scrapeGitBookSection.js +52 -0
  76. package/bin/scraping/site-scrapers/scrapeGitBookSection.js.map +1 -0
  77. package/bin/scraping/site-scrapers/scrapeReadMePage.js +36 -0
  78. package/bin/scraping/site-scrapers/scrapeReadMePage.js.map +1 -0
  79. package/bin/scraping/site-scrapers/scrapeReadMeSection.js +44 -0
  80. package/bin/scraping/site-scrapers/scrapeReadMeSection.js.map +1 -0
  81. package/bin/util.js +129 -0
  82. package/bin/util.js.map +1 -0
  83. package/bin/validation/isValidLink.js +11 -0
  84. package/bin/validation/isValidLink.js.map +1 -0
  85. package/bin/validation/stopIfInvalidLink.js +9 -0
  86. package/bin/validation/stopIfInvalidLink.js.map +1 -0
  87. package/package.json +2 -2
package/bin/browser.js ADDED
@@ -0,0 +1,24 @@
1
+ import { launch } from "puppeteer";
2
+ export async function startBrowser() {
3
+ try {
4
+ return await launch({
5
+ headless: true,
6
+ ignoreHTTPSErrors: true,
7
+ });
8
+ }
9
+ catch (err) {
10
+ console.log("Could not create a browser instance: ", err);
11
+ process.exit(1);
12
+ }
13
+ }
14
+ export async function getHtmlWithPuppeteer(href) {
15
+ const browser = await startBrowser();
16
+ const page = await browser.newPage();
17
+ await page.goto(href, {
18
+ waitUntil: "networkidle2",
19
+ });
20
+ const html = await page.content();
21
+ browser.close();
22
+ return html;
23
+ }
24
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI;QACF,OAAO,MAAM,MAAM,CAAC;YAClB,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;KACJ;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACpB,SAAS,EAAE,cAAc;KAC1B,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,31 @@
1
+ import path from "path";
2
+ import * as url from "url";
3
+ import os from "os";
4
+ // Change this to bump to a newer version of mint's client
5
+ export const TARGET_MINT_VERSION = "v0.0.4";
6
+ // package installation location
7
+ export const INSTALL_PATH = url.fileURLToPath(new URL(".", import.meta.url));
8
+ export const HOME_DIR = os.homedir();
9
+ export const DOT_MINTLIFY = path.join(HOME_DIR, ".mintlify");
10
+ export const VERSION_PATH = path.join(DOT_MINTLIFY, "mint", "mint-version.txt");
11
+ export const CLIENT_PATH = path.join(DOT_MINTLIFY, "mint", "client");
12
+ // command execution location
13
+ export const CMD_EXEC_PATH = process.cwd();
14
+ export const SUPPORTED_MEDIA_EXTENSIONS = [
15
+ "jpeg",
16
+ "jpg",
17
+ "jfif",
18
+ "pjpeg",
19
+ "pjp",
20
+ "png",
21
+ "svg",
22
+ "svgz",
23
+ "ico",
24
+ "webp",
25
+ "gif",
26
+ "apng",
27
+ "avif",
28
+ "bmp",
29
+ "mp4",
30
+ ];
31
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,0DAA0D;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAE5C,gCAAgC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;AAErC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAErE,6BAA6B;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAE3C,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;CACN,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { existsSync, mkdirSync, createWriteStream } from "fs";
2
+ import path from "path";
3
+ import axios from "axios";
4
+ import { getFileExtension } from "./util.js";
5
+ import { SUPPORTED_MEDIA_EXTENSIONS } from "./constants.js";
6
+ async function writeImageToFile(imageSrc, writePath, overwrite) {
7
+ // Avoid unnecessary downloads
8
+ if (existsSync(writePath) && !overwrite) {
9
+ return Promise.reject({
10
+ code: "EEXIST",
11
+ });
12
+ }
13
+ // Create the folders needed if they're missing
14
+ mkdirSync(path.dirname(writePath), { recursive: true });
15
+ const writer = createWriteStream(writePath);
16
+ const response = await axios.get(imageSrc, {
17
+ responseType: "stream",
18
+ });
19
+ // wx prevents overwriting an image with the exact same name
20
+ // being created in the time we were downloading
21
+ response.data.pipe(writer, {
22
+ flag: "wx",
23
+ });
24
+ return new Promise((resolve, reject) => {
25
+ writer.on("finish", resolve);
26
+ writer.on("error", reject);
27
+ });
28
+ }
29
+ export function isValidImageSrc(src) {
30
+ if (!src) {
31
+ return false;
32
+ }
33
+ // We do not support downloading base64 in-line images.
34
+ if (src.startsWith("data:")) {
35
+ return false;
36
+ }
37
+ const imageHref = removeMetadataFromImageSrc(src);
38
+ const ext = getFileExtension(imageHref);
39
+ if (!SUPPORTED_MEDIA_EXTENSIONS.includes(ext)) {
40
+ console.error("🚨 We do not support the file extension: " + ext);
41
+ return false;
42
+ }
43
+ return true;
44
+ }
45
+ export function removeMetadataFromImageSrc(src) {
46
+ // Part of the URL standard
47
+ const metadataSymbols = ["?", "#"];
48
+ metadataSymbols.forEach((dividerSymbol) => {
49
+ // Some frameworks add metadata after the file extension, we need to remove that.
50
+ src = src.split(dividerSymbol)[0];
51
+ });
52
+ return src;
53
+ }
54
+ export function cleanImageSrc(src, origin) {
55
+ // Add origin if the image tags are using relative sources
56
+ return src.startsWith("http") ? src : new URL(src, origin).href;
57
+ }
58
+ export default async function downloadImage(imageSrc, writePath, overwrite = false) {
59
+ await writeImageToFile(imageSrc, writePath, overwrite)
60
+ .then(() => {
61
+ console.log("🖼️ - " + writePath);
62
+ })
63
+ .catch((e) => {
64
+ if (e.code === "EEXIST") {
65
+ console.log(`❌ Skipping existing image ${writePath}`);
66
+ }
67
+ else {
68
+ console.error(e);
69
+ }
70
+ });
71
+ }
72
+ //# sourceMappingURL=downloadImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadImage.js","sourceRoot":"","sources":["../src/downloadImage.ts"],"names":[],"mappings":"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"}
package/bin/index.js ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ import yargs from "yargs";
3
+ import { hideBin } from "yargs/helpers";
4
+ import { scrapePageAutomatically, scrapePageWrapper, } from "./scraping/scrapePageCommands.js";
5
+ import { scrapeGitBookPage } from "./scraping/site-scrapers/scrapeGitBookPage.js";
6
+ import { scrapeReadMePage } from "./scraping/site-scrapers/scrapeReadMePage.js";
7
+ import { scrapeSectionAutomatically, scrapeSectionAxiosWrapper, scrapeGitbookSectionCommand, } from "./scraping/scrapeSectionCommands.js";
8
+ import { scrapeReadMeSection } from "./scraping/site-scrapers/scrapeReadMeSection.js";
9
+ import dev from "./local-preview/index.js";
10
+ import installDepsCommand from "./local-preview/helper-commands/installDepsCommand.js";
11
+ yargs(hideBin(process.argv))
12
+ .command("dev", "Runs Mintlify locally (Must run in directory with mint.json)", () => { }, async (argv) => {
13
+ await dev(argv);
14
+ })
15
+ .command("install", "Install dependencies for local Mintlify", () => { }, installDepsCommand)
16
+ .command("scrape-page [url]", "Scrapes a page", () => { }, async (argv) => {
17
+ await scrapePageAutomatically(argv);
18
+ })
19
+ .command("scrape-gitbook-page [url]", "Scrapes a GitBook page", () => { }, async (argv) => {
20
+ await scrapePageWrapper(argv, scrapeGitBookPage);
21
+ })
22
+ .command("scrape-readme-page [url]", "Scrapes a ReadMe page", () => { }, async (argv) => {
23
+ await scrapePageWrapper(argv, scrapeReadMePage);
24
+ })
25
+ .command("scrape-section [url]", "Scrapes the docs in the section", () => { }, async (argv) => {
26
+ await scrapeSectionAutomatically(argv);
27
+ })
28
+ .command("scrape-gitbook-section [url]", "Scrapes the Gitbook section", () => { }, async (argv) => {
29
+ await scrapeGitbookSectionCommand(argv);
30
+ })
31
+ .command("scrape-readme-section [url]", "Scrapes the ReadMe section", () => { }, async (argv) => {
32
+ await scrapeSectionAxiosWrapper(argv, scrapeReadMeSection);
33
+ })
34
+ // Print the help menu when the user enters an invalid command.
35
+ .demandCommand(1, "Unknown command. See above for the list of supported commands.")
36
+ // Alias option flags --help = -h, --version = -v
37
+ .alias("h", "help")
38
+ .alias("v", "version")
39
+ .parse();
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,GAAG,MAAM,0BAA0B,CAAC;AAC3C,OAAO,kBAAkB,MAAM,uDAAuD,CAAC;AAEvF,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB,OAAO,CACN,KAAK,EACL,8DAA8D,EAC9D,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC,CACF;KACA,OAAO,CACN,SAAS,EACT,yCAAyC,EACzC,GAAG,EAAE,GAAE,CAAC,EACR,kBAAkB,CACnB;KACA,OAAO,CACN,mBAAmB,EACnB,gBAAgB,EAChB,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC,CACF;KACA,OAAO,CACN,2BAA2B,EAC3B,wBAAwB,EACxB,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACnD,CAAC,CACF;KACA,OAAO,CACN,0BAA0B,EAC1B,uBAAuB,EACvB,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAClD,CAAC,CACF;KACA,OAAO,CACN,sBAAsB,EACtB,iCAAiC,EACjC,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC,CACF;KACA,OAAO,CACN,8BAA8B,EAC9B,6BAA6B,EAC7B,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CACF;KACA,OAAO,CACN,6BAA6B,EAC7B,4BAA4B,EAC5B,GAAG,EAAE,GAAE,CAAC,EACR,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC7D,CAAC,CACF;IAED,+DAA+D;KAC9D,aAAa,CACZ,CAAC,EACD,gEAAgE,CACjE;IAED,iDAAiD;KAChD,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;KAClB,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC;KAErB,KAAK,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import shell from "shelljs";
2
+ import { CLIENT_PATH } from "../../constants.js";
3
+ import { buildLogger, ensureYarn } from "../../util.js";
4
+ const installDeps = async () => {
5
+ const logger = buildLogger("");
6
+ ensureYarn(logger);
7
+ shell.cd(CLIENT_PATH);
8
+ shell.exec("yarn");
9
+ logger.succeed("Dependencies installed.");
10
+ };
11
+ export default installDeps;
12
+ //# sourceMappingURL=installDepsCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installDepsCommand.js","sourceRoot":"","sources":["../../../src/local-preview/helper-commands/installDepsCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;IAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/B,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACtB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,154 @@
1
+ import Chalk from "chalk";
2
+ import child_process from "child_process";
3
+ import open from "open";
4
+ import fse, { pathExists } from "fs-extra";
5
+ import inquirer from "inquirer";
6
+ import { isInternetAvailable } from "is-internet-available";
7
+ import path from "path";
8
+ import shell from "shelljs";
9
+ import { Octokit } from "@octokit/rest";
10
+ import { CLIENT_PATH, HOME_DIR, DOT_MINTLIFY, CMD_EXEC_PATH, TARGET_MINT_VERSION, VERSION_PATH, } from "../constants.js";
11
+ import { buildLogger, ensureYarn } from "../util.js";
12
+ import listener from "./listener/index.js";
13
+ const shellExec = (cmd) => {
14
+ return shell.exec(cmd, { silent: true });
15
+ };
16
+ const nodeModulesExists = async () => {
17
+ return pathExists(path.join(DOT_MINTLIFY, "mint", "client", "node_modules"));
18
+ };
19
+ const promptForYarn = async () => {
20
+ const yarnInstalled = shell.which("yarn");
21
+ if (!yarnInstalled) {
22
+ await inquirer
23
+ .prompt([
24
+ {
25
+ type: "confirm",
26
+ name: "confirm",
27
+ message: "yarn must be globally installed. Install yarn?",
28
+ default: true,
29
+ },
30
+ ])
31
+ .then(({ confirm }) => {
32
+ if (confirm) {
33
+ shell.exec("npm install --global yarn");
34
+ }
35
+ else {
36
+ console.log("Installation cancelled.");
37
+ }
38
+ });
39
+ }
40
+ };
41
+ const dev = async (argv) => {
42
+ shell.cd(HOME_DIR);
43
+ await promptForYarn();
44
+ const logger = buildLogger("Preparing local Mintlify instance...");
45
+ await fse.ensureDir(path.join(DOT_MINTLIFY, "mint"));
46
+ const MINT_PATH = path.join(DOT_MINTLIFY, "mint");
47
+ shell.cd(MINT_PATH);
48
+ // The CLI can only run offline if Mint was already downloaded
49
+ const internet = await isInternetAvailable();
50
+ if (!internet && !(await pathExists(CLIENT_PATH))) {
51
+ logger.fail("Running mintlify dev for the first time requires an internet connection.");
52
+ process.exit(1);
53
+ }
54
+ // Avoid checking if we are on the target Mint if we are offline
55
+ if (internet) {
56
+ const mintVersionExists = await pathExists(VERSION_PATH);
57
+ // We always download the target version of Mintlify if the mint-version.txt file doesn't exist.
58
+ // We do this because users updating from an older version of the CLI never have mint-version.txt set.
59
+ let downloadTargetMint = !mintVersionExists;
60
+ // Download target mint if the current version is different. Keep in mind this also allows
61
+ // downgrading to an older version of Mintlify by installing an older CLI version.
62
+ if (mintVersionExists) {
63
+ const currVersion = fse.readFileSync(VERSION_PATH, "utf8");
64
+ if (currVersion !== TARGET_MINT_VERSION) {
65
+ downloadTargetMint = true;
66
+ }
67
+ }
68
+ if (downloadTargetMint) {
69
+ // Delete any existing contents
70
+ fse.emptyDirSync(MINT_PATH);
71
+ logger.text = "Downloading Mintlify framework...";
72
+ const octokit = new Octokit();
73
+ const downloadRes = await octokit.repos.downloadTarballArchive({
74
+ owner: "mintlify",
75
+ repo: "mint",
76
+ ref: TARGET_MINT_VERSION,
77
+ });
78
+ logger.text = "Extracting Mintlify framework...";
79
+ const TAR_PATH = path.join(MINT_PATH, "mint.tar.gz");
80
+ // Unzip tar file
81
+ fse.writeFileSync(TAR_PATH, Buffer.from(downloadRes.data));
82
+ shellExec("tar -xzf mint.tar.gz");
83
+ // List all files in tar file and get the first one.
84
+ // There is never anything else in the tar file, so this is safe.
85
+ // We do this because the folder name includes the commit sha, so we can't hardcode it.
86
+ // Lastly, we call .trim() to remove the newline character.
87
+ const extractedFolderName = shellExec('tar -tzf mint.tar.gz | head -1 | cut -f1 -d"/"').stdout.trim();
88
+ // Delete tar file
89
+ fse.removeSync(TAR_PATH);
90
+ fse.moveSync(path.join(MINT_PATH, extractedFolderName, "client"), path.join(CLIENT_PATH));
91
+ // Store the currently downloaded version
92
+ fse.writeFileSync(VERSION_PATH, TARGET_MINT_VERSION);
93
+ // Delete unnecessary contents downloaded from GitHub
94
+ fse.removeSync(path.join(MINT_PATH, extractedFolderName));
95
+ logger.text = "Installing dependencies...";
96
+ ensureYarn(logger);
97
+ shell.cd(CLIENT_PATH);
98
+ shellExec("yarn");
99
+ }
100
+ }
101
+ if (!(await nodeModulesExists())) {
102
+ if (!internet) {
103
+ logger.fail(`Dependencies are missing and you are offline. Connect to the internet and run
104
+
105
+ mintlify install
106
+
107
+ `);
108
+ }
109
+ else {
110
+ logger.fail(`Dependencies were not installed correctly, run
111
+
112
+ mintlify install
113
+
114
+ `);
115
+ }
116
+ process.exit(1);
117
+ }
118
+ const relativePath = path.relative(CLIENT_PATH, CMD_EXEC_PATH);
119
+ shellExec(`yarn preconfigure ${relativePath}`);
120
+ logger.succeed("Local Mintlify instance is ready. Launching your site now.");
121
+ run(argv.port || "3000");
122
+ };
123
+ const run = (port) => {
124
+ shell.cd(CLIENT_PATH);
125
+ // next-remote-watch can only receive ports as env variables
126
+ // https://github.com/hashicorp/next-remote-watch/issues/23
127
+ const mintlifyDevProcess = child_process.spawn("npm run dev-watch", {
128
+ env: {
129
+ ...process.env,
130
+ PORT: port,
131
+ },
132
+ cwd: CLIENT_PATH,
133
+ stdio: "pipe",
134
+ shell: true,
135
+ });
136
+ mintlifyDevProcess.stdout.on("data", (data) => {
137
+ const output = data.toString();
138
+ console.log(output);
139
+ if (output.startsWith("> Ready on http://localhost:")) {
140
+ console.log(`🌿 ${Chalk.green(`Your local preview is available at http://localhost:${port}`)}`);
141
+ console.log(`🌿 ${Chalk.green("Press Ctrl+C any time to stop the local preview.")}`);
142
+ open(`http://localhost:${port}`);
143
+ }
144
+ });
145
+ const onExit = () => {
146
+ mintlifyDevProcess.kill("SIGINT");
147
+ process.exit(0);
148
+ };
149
+ process.on("SIGINT", onExit);
150
+ process.on("SIGTERM", onExit);
151
+ listener();
152
+ };
153
+ export default dev;
154
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local-preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,aAAa,MAAM,eAAe,CAAC;AAC1C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,EAAE,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAG3C,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;IACnC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,aAAa,EAAE;QAClB,MAAM,QAAQ;aACX,MAAM,CAAC;YACN;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,gDAAgD;gBACzD,OAAO,EAAE,IAAI;aACd;SACF,CAAC;aACD,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACpB,IAAI,OAAO,EAAE;gBACX,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;aACzC;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;aACxC;QACH,CAAC,CAAC,CAAC;KACN;AACH,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,KAAK,EAAE,IAAwB,EAAE,EAAE;IAC7C,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACnB,MAAM,aAAa,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,WAAW,CAAC,sCAAsC,CAAC,CAAC;IACnE,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAEpB,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC7C,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE;QACjD,MAAM,CAAC,IAAI,CACT,0EAA0E,CAC3E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,gEAAgE;IAChE,IAAI,QAAQ,EAAE;QACZ,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;QAEzD,gGAAgG;QAChG,sGAAsG;QACtG,IAAI,kBAAkB,GAAG,CAAC,iBAAiB,CAAC;QAE5C,0FAA0F;QAC1F,kFAAkF;QAClF,IAAI,iBAAiB,EAAE;YACrB,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,WAAW,KAAK,mBAAmB,EAAE;gBACvC,kBAAkB,GAAG,IAAI,CAAC;aAC3B;SACF;QAED,IAAI,kBAAkB,EAAE;YACtB,+BAA+B;YAC/B,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAE5B,MAAM,CAAC,IAAI,GAAG,mCAAmC,CAAC;YAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;gBAC7D,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,mBAAmB;aACzB,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,GAAG,kCAAkC,CAAC;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAErD,iBAAiB;YACjB,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAW,CAAC,CAAC,CAAC;YAClE,SAAS,CAAC,sBAAsB,CAAC,CAAC;YAElC,oDAAoD;YACpD,iEAAiE;YACjE,uFAAuF;YACvF,2DAA2D;YAC3D,MAAM,mBAAmB,GAAG,SAAS,CACnC,gDAAgD,CACjD,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAEhB,kBAAkB;YAClB,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEzB,GAAG,CAAC,QAAQ,CACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,EAAE,QAAQ,CAAC,EACnD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CACvB,CAAC;YAEF,yCAAyC;YACzC,GAAG,CAAC,aAAa,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;YAErD,qDAAqD;YACrD,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;YAE1D,MAAM,CAAC,IAAI,GAAG,4BAA4B,CAAC;YAE3C,UAAU,CAAC,MAAM,CAAC,CAAC;YACnB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YACtB,SAAS,CAAC,MAAM,CAAC,CAAC;SACnB;KACF;IAED,IAAI,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,EAAE;QAChC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,CAAC,IAAI,CAAC;;;;OAIX,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,CAAC,IAAI,CAAC;;;;OAIX,CAAC,CAAC;SACJ;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC/D,SAAS,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC;IAC7E,GAAG,CAAE,IAAI,CAAC,IAAe,IAAI,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE;IAC3B,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IAEtB,4DAA4D;IAC5D,2DAA2D;IAC3D,MAAM,kBAAkB,GAAG,aAAa,CAAC,KAAK,CAAC,mBAAmB,EAAE;QAClE,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,IAAI,EAAE,IAAI;SACX;QACD,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,EAAE;YACrD,OAAO,CAAC,GAAG,CACT,MAAM,KAAK,CAAC,KAAK,CACf,uDAAuD,IAAI,EAAE,CAC9D,EAAE,CACJ,CAAC;YACF,OAAO,CAAC,GAAG,CACT,MAAM,KAAK,CAAC,KAAK,CAAC,kDAAkD,CAAC,EAAE,CACxE,CAAC;YACF,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;SAClC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC;AACb,CAAC,CAAC;AAEF,eAAe,GAAG,CAAC"}
@@ -0,0 +1,97 @@
1
+ // TODO - put in prebuild package
2
+ import path from "path";
3
+ import { getFileExtension, openApiCheck, getFileList } from "./utils.js";
4
+ export const categorizeFiles = async (contentDirectoryPath) => {
5
+ const allFilesInCmdExecutionPath = await getFileList(contentDirectoryPath);
6
+ const contentFilenames = [];
7
+ const staticFilenames = [];
8
+ const promises = [];
9
+ const openApiFiles = [];
10
+ const snippets = [];
11
+ allFilesInCmdExecutionPath.forEach((filename) => {
12
+ promises.push((async () => {
13
+ const extension = getFileExtension(filename);
14
+ let isOpenApi = false;
15
+ if (extension && (extension === "mdx" || extension === "md")) {
16
+ if (filename.startsWith("/_snippets")) {
17
+ snippets.push(filename);
18
+ }
19
+ else {
20
+ contentFilenames.push(filename);
21
+ }
22
+ }
23
+ else if (extension &&
24
+ (extension === "json" || extension === "yaml" || extension === "yml")) {
25
+ const openApiInfo = await openApiCheck(path.join(contentDirectoryPath, filename));
26
+ isOpenApi = openApiInfo.isOpenApi;
27
+ if (isOpenApi) {
28
+ const fileName = path.parse(filename).base;
29
+ openApiFiles.push({
30
+ filename: fileName.substring(0, fileName.lastIndexOf(".")),
31
+ spec: openApiInfo.spec,
32
+ });
33
+ }
34
+ }
35
+ else if ((!filename.endsWith("mint.config.json") ||
36
+ !filename.endsWith("mint.json")) &&
37
+ !isOpenApi) {
38
+ // all other files
39
+ staticFilenames.push(filename);
40
+ }
41
+ })());
42
+ });
43
+ await Promise.all(promises);
44
+ return { contentFilenames, staticFilenames, openApiFiles, snippets };
45
+ };
46
+ const excludedMdFiles = ["readme", "license", "contributing", "contribute"];
47
+ const supportedStaticFileExtensions = [
48
+ ".jpeg",
49
+ ".jpg",
50
+ ".jfif",
51
+ ".pjpeg",
52
+ ".pjp",
53
+ ".png",
54
+ ".svg",
55
+ ".svgz",
56
+ ".ico",
57
+ ".webp",
58
+ ".gif",
59
+ ".apng",
60
+ ".avif",
61
+ ".bmp",
62
+ ".mp4",
63
+ ];
64
+ export const getCategory = (filePath) => {
65
+ filePath = filePath.toLowerCase();
66
+ const parsed = path.parse(filePath);
67
+ if (parsed.base === "mint.json") {
68
+ return "mintConfig";
69
+ }
70
+ const fileName = parsed.name;
71
+ const extension = parsed.ext;
72
+ if (filePath.startsWith("_snippets") &&
73
+ (extension === ".mdx" || extension === ".md")) {
74
+ return "snippet";
75
+ }
76
+ else if (extension === ".mdx") {
77
+ return "page";
78
+ }
79
+ else if (extension === ".md") {
80
+ // Exclude common markdown files people don't want on their docs website
81
+ if (excludedMdFiles.includes(fileName)) {
82
+ throw new Error("Excluded Md File");
83
+ }
84
+ return "page";
85
+ }
86
+ else if (extension === ".yaml" || extension === ".yml") {
87
+ return "potentialYamlOpenApiSpec";
88
+ }
89
+ else if (extension === ".json") {
90
+ return "potentialJsonOpenApiSpec";
91
+ }
92
+ else if (supportedStaticFileExtensions.includes(extension)) {
93
+ return "staticFile";
94
+ }
95
+ throw new Error("Unsupported File Type, No change enacted");
96
+ };
97
+ //# sourceMappingURL=categorize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categorize.js","sourceRoot":"","sources":["../../../src/local-preview/listener/categorize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ // TODO - add types
2
+ import { promises as _promises } from "fs";
3
+ import { outputFile } from "fs-extra";
4
+ import path from "path";
5
+ import createPage from "./utils/createPage.js";
6
+ import { categorizeFiles } from "./categorize.js";
7
+ import { CMD_EXEC_PATH } from "../../constants.js";
8
+ import { getConfigObj } from "./utils/mintConfigFile.js";
9
+ const { readFile } = _promises;
10
+ // TODO: Put in prebuild package
11
+ const generateNavFromPages = (pages, mintConfigNav) => {
12
+ const createNav = (nav) => {
13
+ return {
14
+ group: nav.group,
15
+ version: nav.version,
16
+ pages: nav.pages.map((page) => {
17
+ if (typeof page === "string") {
18
+ return pages[page];
19
+ }
20
+ return createNav(page);
21
+ }),
22
+ };
23
+ };
24
+ if (mintConfigNav == null) {
25
+ return;
26
+ }
27
+ let navFile = mintConfigNav.map((nav) => createNav(nav));
28
+ const filterOutNullInPages = (pages) => {
29
+ const newPages = [];
30
+ pages.forEach((page) => {
31
+ if (page == null) {
32
+ return;
33
+ }
34
+ if (page?.pages) {
35
+ const newGroup = filterOutNullInGroup(page);
36
+ newPages.push(newGroup);
37
+ }
38
+ else {
39
+ newPages.push(page);
40
+ }
41
+ });
42
+ return newPages;
43
+ };
44
+ const filterOutNullInGroup = (group) => {
45
+ const newPages = filterOutNullInPages(group.pages);
46
+ const newGroup = {
47
+ ...group,
48
+ pages: newPages,
49
+ };
50
+ return newGroup;
51
+ };
52
+ const newNavFile = navFile.map((group) => {
53
+ return filterOutNullInGroup(group);
54
+ });
55
+ return newNavFile;
56
+ };
57
+ // TODO: Put in prebuild package
58
+ const createPagesAcc = async (contentDirectoryPath, contentFilenames, openApiFiles, clientPath, writeFiles = false) => {
59
+ let pagesAcc = {};
60
+ const contentPromises = [];
61
+ contentFilenames.forEach((filename) => {
62
+ contentPromises.push((async () => {
63
+ const sourcePath = path.join(contentDirectoryPath, filename);
64
+ const contentStr = (await readFile(sourcePath)).toString();
65
+ const { slug, pageMetadata, pageContent } = await createPage(filename, contentStr, contentDirectoryPath, openApiFiles);
66
+ if (clientPath && writeFiles) {
67
+ const targetPath = path.join(clientPath, "src", "_props", filename);
68
+ await outputFile(targetPath, pageContent, {
69
+ flag: "w",
70
+ });
71
+ }
72
+ pagesAcc = {
73
+ ...pagesAcc,
74
+ [slug]: pageMetadata,
75
+ };
76
+ })());
77
+ });
78
+ await Promise.all(contentPromises);
79
+ return pagesAcc;
80
+ };
81
+ export const generateNav = async () => {
82
+ const { contentFilenames, openApiFiles } = await categorizeFiles(CMD_EXEC_PATH);
83
+ const [pageAcc, configObj] = await Promise.all([
84
+ createPagesAcc(CMD_EXEC_PATH, contentFilenames, openApiFiles),
85
+ getConfigObj(CMD_EXEC_PATH),
86
+ ]);
87
+ return generateNavFromPages(pageAcc, configObj?.navigation);
88
+ };
89
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/local-preview/listener/generate.ts"],"names":[],"mappings":"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"}