mintlify 1.1.0 → 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.
Files changed (79) hide show
  1. package/README.md +7 -0
  2. package/bin/index.js +8 -9
  3. package/bin/index.js.map +1 -1
  4. package/bin/local-preview/helper-commands/clearCommand.js +26 -0
  5. package/bin/local-preview/helper-commands/clearCommand.js.map +1 -0
  6. package/bin/local-preview/helper-commands/installDepsCommand.js +12 -0
  7. package/bin/local-preview/helper-commands/installDepsCommand.js.map +1 -0
  8. package/bin/local-preview/index.js +48 -23
  9. package/bin/local-preview/index.js.map +1 -1
  10. package/bin/{dev → local-preview}/injectNav.js +0 -3
  11. package/bin/local-preview/injectNav.js.map +1 -0
  12. package/bin/local-preview/utils/categorizeFiles.js +56 -0
  13. package/bin/local-preview/utils/categorizeFiles.js.map +1 -0
  14. package/bin/{dev → local-preview/utils}/getOpenApiContext.js +0 -0
  15. package/bin/local-preview/utils/getOpenApiContext.js.map +1 -0
  16. package/bin/local-preview/utils/injectFavicons.js +72 -0
  17. package/bin/local-preview/utils/injectFavicons.js.map +1 -0
  18. package/bin/local-preview/utils/listener.js +112 -0
  19. package/bin/local-preview/utils/listener.js.map +1 -0
  20. package/bin/local-preview/utils/metadata.js +121 -0
  21. package/bin/local-preview/utils/metadata.js.map +1 -0
  22. package/bin/local-preview/utils/mintConfigFile.js +43 -0
  23. package/bin/local-preview/utils/mintConfigFile.js.map +1 -0
  24. package/bin/local-preview/utils/openApiCheck.js +16 -0
  25. package/bin/local-preview/utils/openApiCheck.js.map +1 -0
  26. package/bin/{dev → local-preview/utils}/slugToTitle.js +0 -0
  27. package/bin/local-preview/utils/slugToTitle.js.map +1 -0
  28. package/bin/mint/client/README.md +1 -3
  29. package/bin/mint/client/package.json +0 -1
  30. package/bin/mint/client/src/nav.json +219 -0
  31. package/bin/mint/client/tailwind.config.cjs +1 -1
  32. package/bin/scraping/downloadAllImages.js +4 -0
  33. package/bin/scraping/downloadAllImages.js.map +1 -1
  34. package/bin/scraping/scrapeSectionCommands.js +18 -46
  35. package/bin/scraping/scrapeSectionCommands.js.map +1 -1
  36. package/bin/scraping/site-scrapers/alternateGroupTitle.js +9 -0
  37. package/bin/scraping/site-scrapers/alternateGroupTitle.js.map +1 -0
  38. package/bin/scraping/site-scrapers/getLinksRecursively.js +7 -2
  39. package/bin/scraping/site-scrapers/getLinksRecursively.js.map +1 -1
  40. package/bin/scraping/site-scrapers/openNestedDocusaurusMenus.js +30 -0
  41. package/bin/scraping/site-scrapers/openNestedDocusaurusMenus.js.map +1 -0
  42. package/bin/scraping/site-scrapers/openNestedGitbookMenus.js +37 -0
  43. package/bin/scraping/site-scrapers/openNestedGitbookMenus.js.map +1 -0
  44. package/bin/scraping/site-scrapers/scrapeDocusaurusSection.js +20 -21
  45. package/bin/scraping/site-scrapers/scrapeDocusaurusSection.js.map +1 -1
  46. package/bin/scraping/site-scrapers/scrapeGitBookSection.js +2 -9
  47. package/bin/scraping/site-scrapers/scrapeGitBookSection.js.map +1 -1
  48. package/bin/util.js +12 -0
  49. package/bin/util.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/index.ts +10 -15
  52. package/src/local-preview/helper-commands/clearCommand.ts +28 -0
  53. package/src/local-preview/helper-commands/installDepsCommand.ts +13 -0
  54. package/src/local-preview/index.ts +51 -25
  55. package/src/local-preview/{categorizeFiles.ts → utils/categorizeFiles.ts} +2 -2
  56. package/src/local-preview/{getOpenApiContext.ts → utils/getOpenApiContext.ts} +0 -0
  57. package/src/local-preview/{injectFavicons.ts → utils/injectFavicons.ts} +1 -1
  58. package/src/local-preview/{listener.ts → utils/listener.ts} +3 -3
  59. package/src/local-preview/{metadata.ts → utils/metadata.ts} +1 -1
  60. package/src/local-preview/{mintConfigFile.ts → utils/mintConfigFile.ts} +1 -1
  61. package/src/local-preview/{openApiCheck.ts → utils/openApiCheck.ts} +0 -0
  62. package/src/local-preview/{slugToTitle.ts → utils/slugToTitle.ts} +0 -0
  63. package/src/scraping/downloadAllImages.ts +5 -0
  64. package/src/scraping/scrapeSectionCommands.ts +34 -60
  65. package/src/scraping/site-scrapers/alternateGroupTitle.ts +8 -0
  66. package/src/scraping/site-scrapers/getLinksRecursively.ts +7 -2
  67. package/src/scraping/site-scrapers/openNestedDocusaurusMenus.ts +42 -0
  68. package/src/scraping/site-scrapers/openNestedGitbookMenus.ts +49 -0
  69. package/src/scraping/site-scrapers/scrapeDocusaurusSection.ts +23 -21
  70. package/src/scraping/site-scrapers/scrapeGitBookSection.ts +2 -10
  71. package/src/util.ts +13 -0
  72. package/bin/dev/getOpenApiContext.js.map +0 -1
  73. package/bin/dev/index.js +0 -164
  74. package/bin/dev/index.js.map +0 -1
  75. package/bin/dev/injectNav.js.map +0 -1
  76. package/bin/dev/slugToTitle.js.map +0 -1
  77. package/bin/mint/client/scripts/local-to-docs.js +0 -72
  78. package/bin/templates.js +0 -41
  79. package/bin/templates.js.map +0 -1
@@ -0,0 +1,121 @@
1
+ // TODO - add types
2
+ import fse from "fs-extra";
3
+ import { promises as _promises } from "fs";
4
+ import matter from "gray-matter";
5
+ import path from "path";
6
+ import categorizeFiles from "./categorizeFiles.js";
7
+ import { getConfigObj } from "./mintConfigFile.js";
8
+ import { getOpenApiTitleAndDescription } from "./getOpenApiContext.js";
9
+ import { slugToTitle } from "./slugToTitle.js";
10
+ import { CLIENT_PATH, CMD_EXEC_PATH } from "../../constants.js";
11
+ const { readFile } = _promises;
12
+ // End matter is front matter, but at the end
13
+ const getIndexOfEndMatter = (fileContents) => {
14
+ const frontMatters = fileContents.match(/---\n(title:.+\n|description:.+\n|sidebarTitle:.+\n|api:.+\n|openapi:.+\n)+---$/m);
15
+ if (frontMatters) {
16
+ return fileContents.indexOf(frontMatters[0]);
17
+ }
18
+ return -1;
19
+ };
20
+ export const potentiallyRemoveEndMatter = (fileContents) => {
21
+ const endMatterIndex = getIndexOfEndMatter(fileContents);
22
+ if (endMatterIndex === -1) {
23
+ return fileContents;
24
+ }
25
+ return fileContents.substring(0, endMatterIndex);
26
+ };
27
+ const getMetadata = (fileContents) => {
28
+ const { data } = matter(fileContents);
29
+ if (Object.keys(data).length > 0) {
30
+ return data;
31
+ }
32
+ const startIndex = getIndexOfEndMatter(fileContents);
33
+ if (startIndex === -1) {
34
+ return {};
35
+ }
36
+ const fileContentFromFrontMatter = fileContents.substring(startIndex);
37
+ const { data: nonTopFrontMatter } = matter(fileContentFromFrontMatter);
38
+ return nonTopFrontMatter;
39
+ };
40
+ export const createPage = (path, content, openApiObj) => {
41
+ const slug = path.replace(/\.mdx?$/, "").substring(1);
42
+ let defaultTitle = slugToTitle(slug);
43
+ const metadata = getMetadata(content);
44
+ // Append data from OpenAPI if it exists
45
+ const { title, description } = getOpenApiTitleAndDescription(openApiObj, metadata === null || metadata === void 0 ? void 0 : metadata.openapi);
46
+ if (title) {
47
+ defaultTitle = title;
48
+ }
49
+ return {
50
+ [slug]: Object.assign(Object.assign({ title: defaultTitle, description }, metadata), { href: `/${slug}` }),
51
+ };
52
+ };
53
+ export const createMetadataFileFromPages = (pages, configObj) => {
54
+ const targetPath = path.join(CLIENT_PATH, "src", "metadata.json");
55
+ const createNav = (nav) => {
56
+ return {
57
+ group: nav.group,
58
+ pages: nav.pages.map((page) => {
59
+ if (typeof page === "string") {
60
+ return pages[page];
61
+ }
62
+ return createNav(page);
63
+ }),
64
+ };
65
+ };
66
+ if ((configObj === null || configObj === void 0 ? void 0 : configObj.navigation) == null) {
67
+ return;
68
+ }
69
+ let navFile = configObj.navigation.map((nav) => createNav(nav));
70
+ const filterOutNullInPages = (pages) => {
71
+ const newPages = [];
72
+ pages.forEach((page) => {
73
+ if (page == null) {
74
+ return;
75
+ }
76
+ if (page === null || page === void 0 ? void 0 : page.pages) {
77
+ const newGroup = filterOutNullInGroup(page);
78
+ newPages.push(newGroup);
79
+ }
80
+ else {
81
+ newPages.push(page);
82
+ }
83
+ });
84
+ return newPages;
85
+ };
86
+ const filterOutNullInGroup = (group) => {
87
+ const newPages = filterOutNullInPages(group.pages);
88
+ const newGroup = Object.assign(Object.assign({}, group), { pages: newPages });
89
+ return newGroup;
90
+ };
91
+ const newNavFile = navFile.map((group) => {
92
+ return filterOutNullInGroup(group);
93
+ });
94
+ fse.outputFileSync(targetPath, JSON.stringify(newNavFile, null, 2), {
95
+ flag: "w",
96
+ });
97
+ };
98
+ export const createMetadataFile = async () => {
99
+ // create pages
100
+ const { markdownFiles, openApiBuffer } = await categorizeFiles();
101
+ let openApiObj = null;
102
+ if (openApiBuffer) {
103
+ openApiObj = JSON.parse(openApiBuffer.toString());
104
+ }
105
+ // create config object
106
+ const configObj = await getConfigObj();
107
+ let pages = {};
108
+ const mdPromises = [];
109
+ markdownFiles.forEach((filename) => {
110
+ mdPromises.push((async () => {
111
+ const sourcePath = path.join(CMD_EXEC_PATH, filename);
112
+ const fileContent = await readFile(sourcePath);
113
+ const contentStr = fileContent.toString();
114
+ const page = createPage(filename, contentStr, openApiObj);
115
+ pages = Object.assign(Object.assign({}, pages), page);
116
+ })());
117
+ });
118
+ await Promise.all(mdPromises);
119
+ createMetadataFileFromPages(pages, configObj);
120
+ };
121
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/local-preview/utils/metadata.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;AAE/B,6CAA6C;AAC7C,MAAM,mBAAmB,GAAG,CAAC,YAAoB,EAAE,EAAE;IACnD,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CACrC,kFAAkF,CACnF,CAAC;IACF,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9C;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,YAAoB,EAAE,EAAE;IACjE,MAAM,cAAc,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAEzD,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;QACzB,OAAO,YAAY,CAAC;KACrB;IAED,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAE,EAAE;IAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAChC,OAAO,IAAI,CAAC;KACb;IAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;QACrB,OAAO,EAAE,CAAC;KACX;IAED,MAAM,0BAA0B,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACtE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACvE,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,IAAY,EACZ,OAAe,EACf,UAAyB,EACzB,EAAE;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,wCAAwC;IACxC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,6BAA6B,CAC1D,UAAU,EACV,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,CAClB,CAAC;IACF,IAAI,KAAK,EAAE;QACT,YAAY,GAAG,KAAK,CAAC;KACtB;IACD,OAAO;QACL,CAAC,IAAI,CAAC,gCAAI,KAAK,EAAE,YAAY,EAAE,WAAW,IAAK,QAAQ,KAAE,IAAI,EAAE,IAAI,IAAI,EAAE,GAAE;KAC5E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,KAAU,EAAE,SAAc,EAAE,EAAE;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE;QACxB,OAAO;YACL,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;iBACpB;gBAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,CAAC;SACH,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,KAAI,IAAI,EAAE;QACjC,OAAO;KACR;IAED,IAAI,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,IAAI,IAAI,IAAI,EAAE;gBAChB,OAAO;aACR;YACD,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE;gBACf,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC5C,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACzB;iBAAM;gBACL,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,QAAQ,mCACT,KAAK,KACR,KAAK,EAAE,QAAQ,GAChB,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACvC,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAClE,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;IAC3C,eAAe;IACf,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;IACjE,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,IAAI,aAAa,EAAE;QACjB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;KACnD;IACD,uBAAuB;IACvB,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjC,UAAU,CAAC,IAAI,CACb,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC1D,KAAK,mCACA,KAAK,GACL,IAAI,CACR,CAAC;QACJ,CAAC,CAAC,EAAE,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,2BAA2B,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { promises as _promises } from "fs";
2
+ import fse, { pathExists } from "fs-extra";
3
+ import path from "path";
4
+ import { CLIENT_PATH, CMD_EXEC_PATH } from "../../constants.js";
5
+ const { readFile } = _promises;
6
+ const getConfigPath = async () => {
7
+ let configPath = null;
8
+ if (await pathExists(path.join(CMD_EXEC_PATH, "mint.config.json"))) {
9
+ configPath = path.join(CMD_EXEC_PATH, "mint.config.json");
10
+ }
11
+ if (await pathExists(path.join(CMD_EXEC_PATH, "mint.json"))) {
12
+ configPath = path.join(CMD_EXEC_PATH, "mint.json");
13
+ }
14
+ return configPath;
15
+ };
16
+ export const getConfigObj = async () => {
17
+ const configPath = await getConfigPath();
18
+ let configObj = null;
19
+ if (configPath) {
20
+ const configContents = await readFile(configPath);
21
+ configObj = JSON.parse(configContents.toString());
22
+ }
23
+ return configObj;
24
+ };
25
+ export const updateConfigFile = async (logger) => {
26
+ const configTargetPath = path.join(CLIENT_PATH, "src", "mint.json");
27
+ await fse.remove(configTargetPath);
28
+ let configObj = null;
29
+ const configPath = await getConfigPath();
30
+ if (configPath) {
31
+ await fse.remove(configTargetPath);
32
+ await fse.copy(configPath, configTargetPath);
33
+ logger.succeed("mint config file synced");
34
+ const configContents = await readFile(configPath);
35
+ configObj = JSON.parse(configContents.toString());
36
+ }
37
+ else {
38
+ logger.fail("Must be ran in a directory where a mint.json file exists.");
39
+ process.exit(1);
40
+ }
41
+ return configObj;
42
+ };
43
+ //# sourceMappingURL=mintConfigFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mintConfigFile.js","sourceRoot":"","sources":["../../../src/local-preview/utils/mintConfigFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,GAAG,EAAE,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEhE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;AAE/B,MAAM,aAAa,GAAG,KAAK,IAA4B,EAAE;IACvD,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,EAAE;QAClE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;KAC3D;IAED,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,EAAE;QAC3D,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;KACpD;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,IAA4B,EAAE;IAC7D,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;IACzC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,UAAU,EAAE;QACd,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;KACnD;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAW,EAAE,EAAE;IACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACpE,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACnC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;IAEzC,IAAI,UAAU,EAAE;QACd,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACnC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;KACnD;SAAM;QACL,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import SwaggerParser from "@apidevtools/swagger-parser";
2
+ const openApiCheck = async (path) => {
3
+ let buffer = undefined;
4
+ let isOpenApi = false;
5
+ try {
6
+ const api = await SwaggerParser.validate(path);
7
+ buffer = Buffer.from(JSON.stringify(api, null, 2), "utf-8");
8
+ isOpenApi = true;
9
+ }
10
+ catch (_a) {
11
+ // not valid openApi
12
+ }
13
+ return { buffer, isOpenApi };
14
+ };
15
+ export default openApiCheck;
16
+ //# sourceMappingURL=openApiCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openApiCheck.js","sourceRoot":"","sources":["../../../src/local-preview/utils/openApiCheck.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,6BAA6B,CAAC;AAGxD,MAAM,YAAY,GAAG,KAAK,EACxB,IAAY,EACiD,EAAE;IAC/D,IAAI,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI;QACF,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,SAAS,GAAG,IAAI,CAAC;KAClB;IAAC,WAAM;QACN,oBAAoB;KACrB;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slugToTitle.js","sourceRoot":"","sources":["../../../src/local-preview/utils/slugToTitle.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,EAAE;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB;IACzF,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;IAC3E,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;IACtG,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
@@ -20,9 +20,7 @@ yarn
20
20
  ### Build
21
21
 
22
22
  - `INTERNAL_SITE_BEARER_TOKEN=example yarn prebuild` - fetches the files for the site associated with that bearer token from GitHub. You need the pre-hashed bearer token for that to work. Mintlify employees can request the token that grants access to a test site. In the future, we will work on a way of generating temporary bearer tokens from an employee login.
23
- - `yarn local` - the local version of `yarn prebuild` (fetches the content from the local `../docs` folder)
24
- - `yarn local-to-docs` - transfers the untracked files to the `../docs` file (helpful for when you're working on content and you want to see changes live)
25
- - Both `yarn local` and `yarn local-to-docs` take in a filepath as a parameter for when you want to transfer files to a directory that isn't `../docs`. For example, let's say I'm working on a migration for a client, then I can run `yarn local ../../clients/vital/docs` to get the files from that folder.
23
+ - `yarn local` - the local version of `yarn prebuild` (fetches the content from the local `../docs` folder). It can take in a filepath as a parameter for when you want to transfer files to a directory that isn't `../docs`. For example, let's say I'm working on a migration for a client, then I can run `yarn local ../../clients/vital/docs` to get the files from that folder.
26
24
 
27
25
  ### Watch
28
26
 
@@ -4,7 +4,6 @@
4
4
  "scripts": {
5
5
  "prebuild": "node prebuild index.ts",
6
6
  "local": "node scripts/local",
7
- "local-to-docs": "node scripts/local-to-docs",
8
7
  "dev": "next dev",
9
8
  "build": "next build",
10
9
  "start": "next start",
@@ -0,0 +1,219 @@
1
+ [
2
+ {
3
+ "group": "Getting started",
4
+ "pages": [
5
+ {
6
+ "title": "Onboarding and Setup",
7
+ "description": "This page will help you get started with Telematica EV APIs",
8
+ "href": "/onboarding"
9
+ },
10
+ {
11
+ "title": "Contact us",
12
+ "href": "/contact-us"
13
+ },
14
+ {
15
+ "title": "Supported EV brands",
16
+ "href": "/supported-ev-models-india"
17
+ }
18
+ ]
19
+ },
20
+ {
21
+ "group": "Products",
22
+ "pages": [
23
+ {
24
+ "title": "Telematica Connect UI",
25
+ "description": "Authenticate users with 26+ EV brands using white labeled UI",
26
+ "href": "/products/vehicle-apis"
27
+ },
28
+ {
29
+ "title": "Unified Vehicle APIs",
30
+ "description": "Single API to read and issue commands to 26+ EV brands",
31
+ "href": "/products/unified-vehicle-apis"
32
+ },
33
+ {
34
+ "title": "Telematica Poller",
35
+ "description": "Effortless polling of EV data",
36
+ "href": "/products/telematica-poller"
37
+ },
38
+ {
39
+ "title": "Telematica Webhooks",
40
+ "href": "/products/webhooks"
41
+ },
42
+ {
43
+ "title": "Telematica Schedules",
44
+ "description": "Schedule commands or report generation for your customer vehicles",
45
+ "href": "/products/telematica-schedules-beta"
46
+ },
47
+ {
48
+ "title": "Telematica Routing APIs (beta)",
49
+ "description": "Plug and play routing module for EVs with advanced features",
50
+ "href": "/products/telematica-routing-apis-in-alpha"
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "group": "Guides and How-To's",
56
+ "pages": [
57
+ {
58
+ "title": "Consent UI and custom query parameters",
59
+ "href": "/guides/consent-ui-parameters"
60
+ },
61
+ {
62
+ "title": "Creating the POST callback endpoint",
63
+ "href": "/guides/callback-endpoint"
64
+ },
65
+ {
66
+ "title": "Expected Errors",
67
+ "href": "/guides/expected-errors"
68
+ },
69
+ {
70
+ "title": "FAQs",
71
+ "href": "/guides/faqs"
72
+ }
73
+ ]
74
+ },
75
+ {
76
+ "group": "Telematica Vehicle APIs",
77
+ "pages": [
78
+ {
79
+ "group": "Vehicle Data - v2",
80
+ "pages": [
81
+ {
82
+ "title": "SOC",
83
+ "description": "Get the current SOC of the vehicle in kms",
84
+ "href": "/reference/vehicledatacontroller_getsoc"
85
+ },
86
+ {
87
+ "title": "Range",
88
+ "description": "Get the current range of the vehicle in kms",
89
+ "href": "/reference/vehicledatacontroller_getrange"
90
+ },
91
+ {
92
+ "title": "Odometer",
93
+ "description": "Get the current odometer reading of the vehicle in kms",
94
+ "href": "/reference/vehicledatacontroller_getodo"
95
+ },
96
+ {
97
+ "title": "Location",
98
+ "description": "Get the current location of the vehicle",
99
+ "href": "/reference/vehicledatacontroller_getlocation"
100
+ },
101
+ {
102
+ "title": "Charging Status",
103
+ "description": "Get the current charging status of the vehicle",
104
+ "href": "/reference/vehicledatacontroller_getchargingstatus"
105
+ },
106
+ {
107
+ "title": "Static Attributes",
108
+ "description": "Get the static attributes of the vehicle",
109
+ "href": "/reference/vehicledatacontroller_getstaticattributes"
110
+ },
111
+ {
112
+ "title": "Start Charge",
113
+ "description": "Command the vehicle to start charging",
114
+ "href": "/reference/vehicledatacontroller_startcharging"
115
+ },
116
+ {
117
+ "title": "Stop Charge",
118
+ "description": "Command the vehicle to stop charging",
119
+ "href": "/reference/vehicledatacontroller_stopcharging"
120
+ }
121
+ ]
122
+ },
123
+ {
124
+ "group": "Testing Endpoints",
125
+ "pages": [
126
+ {
127
+ "title": "Testing Endpoints",
128
+ "href": "/reference/testing"
129
+ },
130
+ {
131
+ "title": "Test SOC",
132
+ "description": "Test the soc endpoint on a dummy vehicle",
133
+ "href": "/reference/testing/vehicledatacontroller_getsoctest"
134
+ },
135
+ {
136
+ "title": "Test Range",
137
+ "description": "Test the range endpoint on a dummy vehicle",
138
+ "href": "/reference/testing/vehicledatacontroller_getrangetest"
139
+ },
140
+ {
141
+ "title": "Test Range-SOC",
142
+ "description": "Test the range-soc endpoint on a dummy vehicle",
143
+ "href": "/reference/testing/vehicledatacontroller_getrangesoctest"
144
+ },
145
+ {
146
+ "title": "Test Location",
147
+ "description": "Test the location endpoint on a dummy vehicle",
148
+ "href": "/reference/testing/vehicledatacontroller_getlocationtest"
149
+ },
150
+ {
151
+ "title": "Test Charging Status",
152
+ "description": "Test the charging-status endpoint on a dummy vehicle",
153
+ "href": "/reference/testing/vehicledatacontroller_getchargingstatustest"
154
+ },
155
+ {
156
+ "title": "Test Odometer",
157
+ "description": "Test the odo endpoint on a dummy vehicle",
158
+ "href": "/reference/testing/vehicledatacontroller_getodotest"
159
+ },
160
+ {
161
+ "title": "Test static-attributes",
162
+ "description": "Test the static-attributes endpoint on a dummy vehicle",
163
+ "href": "/reference/testing/vehicledatacontroller_getstaticattributestest"
164
+ }
165
+ ]
166
+ },
167
+ {
168
+ "group": "Vehicle Data - v1",
169
+ "pages": [
170
+ {
171
+ "title": "SOC (battery level)",
172
+ "description": "Get the current SOC (battery level) of the vehicle",
173
+ "href": "/reference/vehicledatacontroller_getsocv1"
174
+ },
175
+ {
176
+ "title": "Range",
177
+ "description": "Get the current range of the vehicle in kms",
178
+ "href": "/reference/vehicledatacontroller_getrangev1"
179
+ },
180
+ {
181
+ "title": "Range-SOC",
182
+ "description": "Get the current range and SOC of the vehicle in single call",
183
+ "href": "/reference/vehicledatacontroller_getrangesocv1"
184
+ },
185
+ {
186
+ "title": "Location",
187
+ "description": "Get the last known location of the vehicle",
188
+ "href": "/reference/vehicledatacontroller_getlocationv1"
189
+ },
190
+ {
191
+ "title": "Charging Status",
192
+ "description": "Get the current charging status of the vehicle",
193
+ "href": "/reference/vehicledatacontroller_getchargingstatusv1"
194
+ },
195
+ {
196
+ "title": "Odometer",
197
+ "description": "Get the odometer reading of the vehicle",
198
+ "href": "/reference/vehicledatacontroller_getodov1"
199
+ },
200
+ {
201
+ "title": "Static Attributes",
202
+ "description": "Get static attributes for a vehicle (like VIN, model, year etc.)",
203
+ "href": "/reference/vehicledatacontroller_getstaticattributesv1"
204
+ }
205
+ ]
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "group": "Sample callback endpoints",
211
+ "pages": [
212
+ {
213
+ "title": "New vehicle connection callback",
214
+ "description": "This is a dummy callback endpoint. Please share the POST callback endpoint created in your app's backend with Telematica to get callback requests of below format",
215
+ "href": "/reference/appcontroller_callback"
216
+ }
217
+ ]
218
+ }
219
+ ]
@@ -58,7 +58,7 @@ module.exports = {
58
58
  'primary-ultralight': config?.colors?.ultraLight ?? '#ddd6fe',
59
59
  'primary-ultradark': config?.colors?.ultraDark ?? '#5b21b6',
60
60
  'background-light': config?.colors?.background?.light ?? '#ffffff',
61
- 'background-dark': config?.colors?.background?.dark ?? '#0f1728',
61
+ 'background-dark': config?.colors?.background?.dark ?? '#0C1322',
62
62
  ...ctaColors,
63
63
  },
64
64
  typography: (theme) => ({
@@ -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 scrapeSectionGitBookWrapper(argv, scrapeGitBookSection);
22
+ await scrapeSectionOpeningAllNested(argv, openNestedGitbookMenus, scrapeGitBookSection);
27
23
  }
28
- async function scrapeSectionGitBookWrapper(argv, scrapeFunc) {
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
- let prevEncountered = [];
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 scrapeSectionAxiosWrapper(argv, scrapeDocusaurusSection);
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":"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"}
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
- const link = subsection.children().first();
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;