mintlify 2.0.5 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +5 -3
- package/bin/index.js.map +1 -1
- package/bin/local-preview/listener/{categorizeFiles.js → categorize.js} +53 -3
- package/bin/local-preview/listener/categorize.js.map +1 -0
- package/bin/local-preview/listener/generate.js +1 -1
- package/bin/local-preview/listener/generate.js.map +1 -1
- package/bin/local-preview/listener/index.js +144 -107
- package/bin/local-preview/listener/index.js.map +1 -1
- package/bin/local-preview/listener/update.js +1 -1
- package/bin/local-preview/listener/update.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +10 -3
- package/src/local-preview/listener/{categorizeFiles.ts → categorize.ts} +56 -2
- package/src/local-preview/listener/generate.ts +1 -1
- package/src/local-preview/listener/index.ts +162 -142
- package/src/local-preview/listener/update.ts +1 -1
- package/src/local-preview/listener/utils/types.ts +15 -0
- package/bin/local-preview/listener/categorizeFiles.js.map +0 -1
- package/bin/local-preview/listener/utils/fileIsMdxOrMd.js +0 -12
- package/bin/local-preview/listener/utils/fileIsMdxOrMd.js.map +0 -1
- package/bin/pageTemplate.js +0 -30
- package/bin/pageTemplate.js.map +0 -1
- package/src/local-preview/listener/utils/fileIsMdxOrMd.ts +0 -11
- package/src/pageTemplate.ts +0 -32
package/bin/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import yargs from "yargs";
|
|
3
3
|
import { hideBin } from "yargs/helpers";
|
|
4
|
-
import generatePageTemplate from "./pageTemplate.js";
|
|
5
4
|
import { scrapePageAutomatically, scrapePageWrapper, } from "./scraping/scrapePageCommands.js";
|
|
6
5
|
import { scrapeGitBookPage } from "./scraping/site-scrapers/scrapeGitBookPage.js";
|
|
7
6
|
import { scrapeReadMePage } from "./scraping/site-scrapers/scrapeReadMePage.js";
|
|
@@ -9,13 +8,11 @@ import { scrapeSectionAutomatically, scrapeSectionAxiosWrapper, scrapeGitbookSec
|
|
|
9
8
|
import { scrapeReadMeSection } from "./scraping/site-scrapers/scrapeReadMeSection.js";
|
|
10
9
|
import dev from "./local-preview/index.js";
|
|
11
10
|
import installDepsCommand from "./local-preview/helper-commands/installDepsCommand.js";
|
|
12
|
-
// TODO - add descriptions to the command options https://github.com/yargs/yargs/blob/HEAD/docs/api.md#commandmodule
|
|
13
11
|
yargs(hideBin(process.argv))
|
|
14
12
|
.command("dev", "Runs Mintlify locally (Must run in directory with mint.json)", () => { }, async () => {
|
|
15
13
|
await dev();
|
|
16
14
|
})
|
|
17
15
|
.command("install", "Install dependencies for local Mintlify", () => { }, installDepsCommand)
|
|
18
|
-
.command("page", "Generate a new page", () => { }, generatePageTemplate)
|
|
19
16
|
.command("scrape-page [url]", "Scrapes a page", () => { }, async (argv) => {
|
|
20
17
|
await scrapePageAutomatically(argv);
|
|
21
18
|
})
|
|
@@ -34,5 +31,10 @@ yargs(hideBin(process.argv))
|
|
|
34
31
|
.command("scrape-readme-section [url]", "Scrapes the ReadMe section", () => { }, async (argv) => {
|
|
35
32
|
await scrapeSectionAxiosWrapper(argv, scrapeReadMeSection);
|
|
36
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")
|
|
37
39
|
.parse();
|
|
38
40
|
//# sourceMappingURL=index.js.map
|
package/bin/index.js.map
CHANGED
|
@@ -1 +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,
|
|
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,IAAI,EAAE;IACT,MAAM,GAAG,EAAE,CAAC;AACd,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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// TODO - put in prebuild package
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { getFileExtension, openApiCheck, getFileList } from "./utils.js";
|
|
4
|
-
const categorizeFiles = async (contentDirectoryPath) => {
|
|
4
|
+
export const categorizeFiles = async (contentDirectoryPath) => {
|
|
5
5
|
const allFilesInCmdExecutionPath = await getFileList(contentDirectoryPath);
|
|
6
6
|
const contentFilenames = [];
|
|
7
7
|
const staticFilenames = [];
|
|
@@ -43,5 +43,55 @@ const categorizeFiles = async (contentDirectoryPath) => {
|
|
|
43
43
|
await Promise.all(promises);
|
|
44
44
|
return { contentFilenames, staticFilenames, openApiFiles, snippets };
|
|
45
45
|
};
|
|
46
|
-
|
|
47
|
-
|
|
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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"}
|
|
@@ -3,7 +3,7 @@ import { promises as _promises } from "fs";
|
|
|
3
3
|
import { outputFile } from "fs-extra";
|
|
4
4
|
import path from "path";
|
|
5
5
|
import createPage from "./utils/createPage.js";
|
|
6
|
-
import categorizeFiles from "./
|
|
6
|
+
import { categorizeFiles } from "./categorize.js";
|
|
7
7
|
import { CMD_EXEC_PATH } from "../../constants.js";
|
|
8
8
|
import { getConfigObj } from "./utils/mintConfigFile.js";
|
|
9
9
|
const { readFile } = _promises;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/local-preview/listener/generate.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAE/C,OAAO,eAAe,MAAM,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/local-preview/listener/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import chokidar from "chokidar";
|
|
2
2
|
import fse from "fs-extra";
|
|
3
3
|
import pathUtil from "path";
|
|
4
|
-
import { fileIsMdxOrMd } from "./utils/fileIsMdxOrMd.js";
|
|
5
4
|
import { openApiCheck } from "./utils.js";
|
|
6
5
|
import { updateGeneratedNav, updateOpenApiFiles } from "./update.js";
|
|
7
6
|
import { CLIENT_PATH, CMD_EXEC_PATH } from "../../constants.js";
|
|
8
7
|
import { promises as _promises } from "fs";
|
|
9
8
|
import createPage from "./utils/createPage.js";
|
|
9
|
+
import { getCategory } from "./categorize.js";
|
|
10
10
|
const { readFile } = _promises;
|
|
11
11
|
const listener = () => {
|
|
12
12
|
chokidar
|
|
@@ -15,121 +15,158 @@ const listener = () => {
|
|
|
15
15
|
ignored: ["node_modules", ".git", ".idea"],
|
|
16
16
|
cwd: CMD_EXEC_PATH,
|
|
17
17
|
})
|
|
18
|
-
.on("
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
.on("add", async (filename) => {
|
|
19
|
+
try {
|
|
20
|
+
const category = await onUpdateEvent(filename);
|
|
21
|
+
switch (category) {
|
|
22
|
+
case "page":
|
|
23
|
+
console.log("New page detected: ", filename);
|
|
24
|
+
break;
|
|
25
|
+
case "snippet":
|
|
26
|
+
console.log("New snippet detected: ", filename);
|
|
27
|
+
break;
|
|
28
|
+
case "mintConfig":
|
|
29
|
+
console.log("Config added");
|
|
30
|
+
break;
|
|
31
|
+
case "openApi":
|
|
32
|
+
console.log("OpenApi spec added: ", filename);
|
|
33
|
+
break;
|
|
34
|
+
case "staticFile":
|
|
35
|
+
console.log("Static file added: ", filename);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error(error.message);
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
.on("change", async (filename) => {
|
|
44
|
+
try {
|
|
45
|
+
const category = await onUpdateEvent(filename);
|
|
46
|
+
switch (category) {
|
|
47
|
+
case "page":
|
|
48
|
+
console.log("Page edited: ", filename);
|
|
49
|
+
break;
|
|
50
|
+
case "snippet":
|
|
51
|
+
console.log("Snippet edited: ", filename);
|
|
52
|
+
break;
|
|
53
|
+
case "mintConfig":
|
|
54
|
+
console.log("Config edited");
|
|
55
|
+
break;
|
|
56
|
+
case "openApi":
|
|
57
|
+
console.log("OpenApi spec edited: ", filename);
|
|
58
|
+
break;
|
|
59
|
+
case "staticFile":
|
|
60
|
+
console.log("Static file edited: ", filename);
|
|
61
|
+
break;
|
|
24
62
|
}
|
|
25
|
-
|
|
26
|
-
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error(error.message);
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
.on("unlink", async (filename) => {
|
|
69
|
+
try {
|
|
70
|
+
const potentialCategory = getCategory(filename);
|
|
71
|
+
const targetPath = getTargetPath(potentialCategory, filename);
|
|
72
|
+
if (potentialCategory === "page" ||
|
|
73
|
+
potentialCategory === "snippet" ||
|
|
74
|
+
potentialCategory === "mintConfig" ||
|
|
75
|
+
potentialCategory === "staticFile") {
|
|
27
76
|
await fse.remove(targetPath);
|
|
28
|
-
console.log("⚠️ mint.json deleted. Please create a new mint.json file as it is mandatory.");
|
|
29
|
-
process.exit(1);
|
|
30
77
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
78
|
+
switch (potentialCategory) {
|
|
79
|
+
case "page":
|
|
80
|
+
console.log(`Page deleted: ${filename}`);
|
|
81
|
+
break;
|
|
82
|
+
case "snippet":
|
|
83
|
+
console.log(`Snippet deleted: ${filename}`);
|
|
84
|
+
break;
|
|
85
|
+
case "mintConfig":
|
|
86
|
+
console.log("⚠️ mint.json deleted. Please create a new mint.json file as it is mandatory.");
|
|
87
|
+
process.exit(1);
|
|
88
|
+
case "potentialJsonOpenApiSpec":
|
|
89
|
+
case "potentialYamlOpenApiSpec":
|
|
37
90
|
await updateOpenApiFiles();
|
|
38
91
|
await updateGeneratedNav();
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
await fse.remove(targetPath);
|
|
44
|
-
console.log("Static file deleted: ", filename);
|
|
92
|
+
break;
|
|
93
|
+
case "staticFile":
|
|
94
|
+
console.log("Static file deleted: ", filename);
|
|
95
|
+
break;
|
|
45
96
|
}
|
|
46
97
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
let regenerateNav = false;
|
|
50
|
-
if (fileIsMdxOrMd(filename)) {
|
|
51
|
-
const targetPath = pathUtil.join(CLIENT_PATH, "src", "_props", filename);
|
|
52
|
-
if (filename.startsWith("_snippets")) {
|
|
53
|
-
const sourcePath = pathUtil.join(CMD_EXEC_PATH, filename);
|
|
54
|
-
await fse.remove(targetPath);
|
|
55
|
-
await fse.copy(sourcePath, targetPath);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
regenerateNav = true;
|
|
59
|
-
const contentStr = (await readFile(filePath)).toString();
|
|
60
|
-
const { pageContent } = await createPage(filename, contentStr, CMD_EXEC_PATH, []);
|
|
61
|
-
await fse.outputFile(targetPath, pageContent, {
|
|
62
|
-
flag: "w",
|
|
63
|
-
});
|
|
64
|
-
switch (event) {
|
|
65
|
-
case "add":
|
|
66
|
-
case "addDir":
|
|
67
|
-
console.log("New page detected: ", filename);
|
|
68
|
-
break;
|
|
69
|
-
default:
|
|
70
|
-
console.log("Page edited: ", filename);
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else if (filename === "mint.json") {
|
|
75
|
-
regenerateNav = true;
|
|
76
|
-
const targetPath = pathUtil.join(CLIENT_PATH, "src", "_props", "mint.json");
|
|
77
|
-
await fse.copy(filePath, targetPath);
|
|
78
|
-
switch (event) {
|
|
79
|
-
case "add":
|
|
80
|
-
case "addDir":
|
|
81
|
-
console.log("Config added");
|
|
82
|
-
break;
|
|
83
|
-
default:
|
|
84
|
-
console.log("Config edited");
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
const extension = pathUtil.parse(filename).ext.slice(1);
|
|
90
|
-
let isOpenApi = false;
|
|
91
|
-
if (extension &&
|
|
92
|
-
(extension === "json" ||
|
|
93
|
-
extension === "yaml" ||
|
|
94
|
-
extension === "yml")) {
|
|
95
|
-
const openApiInfo = await openApiCheck(pathUtil.join(CMD_EXEC_PATH, filename));
|
|
96
|
-
isOpenApi = openApiInfo.isOpenApi;
|
|
97
|
-
if (isOpenApi) {
|
|
98
|
-
await updateOpenApiFiles();
|
|
99
|
-
regenerateNav = true;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (!isOpenApi) {
|
|
103
|
-
// all other files
|
|
104
|
-
const targetPath = pathUtil.join(CLIENT_PATH, "public", filename);
|
|
105
|
-
await fse.copy(filePath, targetPath);
|
|
106
|
-
}
|
|
107
|
-
switch (event) {
|
|
108
|
-
case "add":
|
|
109
|
-
case "addDir":
|
|
110
|
-
if (isOpenApi) {
|
|
111
|
-
console.log("OpenApi file added: ", filename);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
console.log("Static file added: ", filename);
|
|
115
|
-
}
|
|
116
|
-
break;
|
|
117
|
-
default:
|
|
118
|
-
if (isOpenApi) {
|
|
119
|
-
console.log("OpenApi file edited: ", filename);
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
console.log("Static file edited: ", filename);
|
|
123
|
-
}
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
if (regenerateNav) {
|
|
128
|
-
// TODO: Instead of re-generating the entire nav, optimize by just updating the specific page that changed.
|
|
129
|
-
await updateGeneratedNav();
|
|
130
|
-
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.error(error.message);
|
|
131
100
|
}
|
|
132
101
|
});
|
|
133
102
|
};
|
|
103
|
+
const getTargetPath = (potentialCategory, filePath) => {
|
|
104
|
+
switch (potentialCategory) {
|
|
105
|
+
case "page":
|
|
106
|
+
case "snippet":
|
|
107
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", filePath);
|
|
108
|
+
case "mintConfig":
|
|
109
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", "mint.json");
|
|
110
|
+
case "potentialYamlOpenApiSpec":
|
|
111
|
+
case "potentialJsonOpenApiSpec":
|
|
112
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", "openApiFiles.json");
|
|
113
|
+
case "staticFile":
|
|
114
|
+
return pathUtil.join(CLIENT_PATH, "public", filePath);
|
|
115
|
+
default:
|
|
116
|
+
throw new Error("Invalid category");
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* This function is called when a file is added or changed
|
|
121
|
+
* @param filename
|
|
122
|
+
* @returns FileCategory
|
|
123
|
+
*/
|
|
124
|
+
const onUpdateEvent = async (filename) => {
|
|
125
|
+
const filePath = pathUtil.join(CMD_EXEC_PATH, filename);
|
|
126
|
+
const potentialCategory = getCategory(filename);
|
|
127
|
+
const targetPath = getTargetPath(potentialCategory, filename);
|
|
128
|
+
let regenerateNav = false;
|
|
129
|
+
let category = potentialCategory === "potentialYamlOpenApiSpec" ||
|
|
130
|
+
potentialCategory === "potentialJsonOpenApiSpec"
|
|
131
|
+
? "staticFile"
|
|
132
|
+
: potentialCategory;
|
|
133
|
+
switch (potentialCategory) {
|
|
134
|
+
case "page":
|
|
135
|
+
regenerateNav = true;
|
|
136
|
+
const contentStr = (await readFile(filePath)).toString();
|
|
137
|
+
const { pageContent } = await createPage(filename, contentStr, CMD_EXEC_PATH, []);
|
|
138
|
+
await fse.outputFile(targetPath, pageContent, {
|
|
139
|
+
flag: "w",
|
|
140
|
+
});
|
|
141
|
+
break;
|
|
142
|
+
case "snippet":
|
|
143
|
+
await fse.copy(filePath, targetPath);
|
|
144
|
+
break;
|
|
145
|
+
case "mintConfig":
|
|
146
|
+
regenerateNav = true;
|
|
147
|
+
await fse.copy(filePath, targetPath);
|
|
148
|
+
break;
|
|
149
|
+
case "potentialYamlOpenApiSpec":
|
|
150
|
+
case "potentialJsonOpenApiSpec":
|
|
151
|
+
let isOpenApi = false;
|
|
152
|
+
const openApiInfo = await openApiCheck(pathUtil.join(CMD_EXEC_PATH, filename));
|
|
153
|
+
isOpenApi = openApiInfo.isOpenApi;
|
|
154
|
+
if (isOpenApi) {
|
|
155
|
+
// TODO: Instead of re-generating all openApi files, optimize by just updating the specific file that changed.
|
|
156
|
+
await updateOpenApiFiles();
|
|
157
|
+
regenerateNav = true;
|
|
158
|
+
category = "openApi";
|
|
159
|
+
}
|
|
160
|
+
break;
|
|
161
|
+
case "staticFile":
|
|
162
|
+
await fse.copy(filePath, targetPath);
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
if (regenerateNav) {
|
|
166
|
+
// TODO: Instead of re-generating the entire nav, optimize by just updating the specific page that changed.
|
|
167
|
+
await updateGeneratedNav();
|
|
168
|
+
}
|
|
169
|
+
return category;
|
|
170
|
+
};
|
|
134
171
|
export default listener;
|
|
135
172
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/local-preview/listener/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,QAAQ,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/local-preview/listener/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { getConfigPath } from "./utils/mintConfigFile.js";
|
|
|
5
5
|
import { CLIENT_PATH, CMD_EXEC_PATH } from "../../constants.js";
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
import { generateNav } from "./generate.js";
|
|
8
|
-
import categorizeFiles from "./
|
|
8
|
+
import { categorizeFiles } from "./categorize.js";
|
|
9
9
|
const { readFile } = _promises;
|
|
10
10
|
// TODO: Put in prebuild package
|
|
11
11
|
export const updateConfigFile = async (contentDirectoryPath) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/local-preview/listener/update.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,eAAe,MAAM,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/local-preview/listener/update.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;AAE/B,gCAAgC;AAEhC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,oBAA4B,EAAE,EAAE;IACrE,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IACnE,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACnC,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAE7D,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,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;KACnD;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;IAC3C,MAAM,YAAY,GAAG,MAAM,WAAW,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC3E,MAAM,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACtE,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;IAC3C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC3E,MAAM,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACtE,IAAI,EAAE,GAAG;KACV,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import yargs from "yargs";
|
|
4
4
|
import { hideBin } from "yargs/helpers";
|
|
5
|
-
import generatePageTemplate from "./pageTemplate.js";
|
|
6
5
|
import {
|
|
7
6
|
scrapePageAutomatically,
|
|
8
7
|
scrapePageWrapper,
|
|
@@ -18,7 +17,6 @@ import { scrapeReadMeSection } from "./scraping/site-scrapers/scrapeReadMeSectio
|
|
|
18
17
|
import dev from "./local-preview/index.js";
|
|
19
18
|
import installDepsCommand from "./local-preview/helper-commands/installDepsCommand.js";
|
|
20
19
|
|
|
21
|
-
// TODO - add descriptions to the command options https://github.com/yargs/yargs/blob/HEAD/docs/api.md#commandmodule
|
|
22
20
|
yargs(hideBin(process.argv))
|
|
23
21
|
.command(
|
|
24
22
|
"dev",
|
|
@@ -34,7 +32,6 @@ yargs(hideBin(process.argv))
|
|
|
34
32
|
() => {},
|
|
35
33
|
installDepsCommand
|
|
36
34
|
)
|
|
37
|
-
.command("page", "Generate a new page", () => {}, generatePageTemplate)
|
|
38
35
|
.command(
|
|
39
36
|
"scrape-page [url]",
|
|
40
37
|
"Scrapes a page",
|
|
@@ -84,4 +81,14 @@ yargs(hideBin(process.argv))
|
|
|
84
81
|
}
|
|
85
82
|
)
|
|
86
83
|
|
|
84
|
+
// Print the help menu when the user enters an invalid command.
|
|
85
|
+
.demandCommand(
|
|
86
|
+
1,
|
|
87
|
+
"Unknown command. See above for the list of supported commands."
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
// Alias option flags --help = -h, --version = -v
|
|
91
|
+
.alias("h", "help")
|
|
92
|
+
.alias("v", "version")
|
|
93
|
+
|
|
87
94
|
.parse();
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
import path from "path";
|
|
3
3
|
|
|
4
4
|
import { getFileExtension, openApiCheck, getFileList } from "./utils.js";
|
|
5
|
+
import { PotentialFileCategory } from "./utils/types.js";
|
|
5
6
|
|
|
6
|
-
const categorizeFiles = async (contentDirectoryPath: string) => {
|
|
7
|
+
export const categorizeFiles = async (contentDirectoryPath: string) => {
|
|
7
8
|
const allFilesInCmdExecutionPath = await getFileList(contentDirectoryPath);
|
|
8
9
|
const contentFilenames = [];
|
|
9
10
|
const staticFilenames = [];
|
|
@@ -52,4 +53,57 @@ const categorizeFiles = async (contentDirectoryPath: string) => {
|
|
|
52
53
|
return { contentFilenames, staticFilenames, openApiFiles, snippets };
|
|
53
54
|
};
|
|
54
55
|
|
|
55
|
-
|
|
56
|
+
const excludedMdFiles = ["readme", "license", "contributing", "contribute"];
|
|
57
|
+
|
|
58
|
+
const supportedStaticFileExtensions = [
|
|
59
|
+
".jpeg",
|
|
60
|
+
".jpg",
|
|
61
|
+
".jfif",
|
|
62
|
+
".pjpeg",
|
|
63
|
+
".pjp",
|
|
64
|
+
".png",
|
|
65
|
+
".svg",
|
|
66
|
+
".svgz",
|
|
67
|
+
".ico",
|
|
68
|
+
".webp",
|
|
69
|
+
".gif",
|
|
70
|
+
".apng",
|
|
71
|
+
".avif",
|
|
72
|
+
".bmp",
|
|
73
|
+
".mp4",
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
export const getCategory = (filePath: string): PotentialFileCategory => {
|
|
77
|
+
filePath = filePath.toLowerCase();
|
|
78
|
+
|
|
79
|
+
const parsed = path.parse(filePath);
|
|
80
|
+
|
|
81
|
+
if (parsed.base === "mint.json") {
|
|
82
|
+
return "mintConfig";
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const fileName = parsed.name;
|
|
86
|
+
const extension = parsed.ext;
|
|
87
|
+
if (
|
|
88
|
+
filePath.startsWith("_snippets") &&
|
|
89
|
+
(extension === ".mdx" || extension === ".md")
|
|
90
|
+
) {
|
|
91
|
+
return "snippet";
|
|
92
|
+
} else if (extension === ".mdx") {
|
|
93
|
+
return "page";
|
|
94
|
+
} else if (extension === ".md") {
|
|
95
|
+
// Exclude common markdown files people don't want on their docs website
|
|
96
|
+
if (excludedMdFiles.includes(fileName)) {
|
|
97
|
+
throw new Error("Excluded Md File");
|
|
98
|
+
}
|
|
99
|
+
return "page";
|
|
100
|
+
} else if (extension === ".yaml" || extension === ".yml") {
|
|
101
|
+
return "potentialYamlOpenApiSpec";
|
|
102
|
+
} else if (extension === ".json") {
|
|
103
|
+
return "potentialJsonOpenApiSpec";
|
|
104
|
+
} else if (supportedStaticFileExtensions.includes(extension)) {
|
|
105
|
+
return "staticFile";
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
throw new Error("Unsupported File Type, No change enacted");
|
|
109
|
+
};
|
|
@@ -4,7 +4,7 @@ import { outputFile } from "fs-extra";
|
|
|
4
4
|
import path from "path";
|
|
5
5
|
import createPage from "./utils/createPage.js";
|
|
6
6
|
import { OpenApiFile } from "./utils/types.js";
|
|
7
|
-
import categorizeFiles from "./
|
|
7
|
+
import { categorizeFiles } from "./categorize.js";
|
|
8
8
|
import { CMD_EXEC_PATH } from "../../constants.js";
|
|
9
9
|
import { getConfigObj } from "./utils/mintConfigFile.js";
|
|
10
10
|
const { readFile } = _promises;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import chokidar from "chokidar";
|
|
2
2
|
import fse from "fs-extra";
|
|
3
3
|
import pathUtil from "path";
|
|
4
|
-
import { fileIsMdxOrMd } from "./utils/fileIsMdxOrMd.js";
|
|
5
4
|
import { openApiCheck } from "./utils.js";
|
|
6
5
|
import { updateGeneratedNav, updateOpenApiFiles } from "./update.js";
|
|
7
6
|
import { CLIENT_PATH, CMD_EXEC_PATH } from "../../constants.js";
|
|
8
7
|
import { promises as _promises } from "fs";
|
|
9
8
|
import createPage from "./utils/createPage.js";
|
|
9
|
+
import { getCategory } from "./categorize.js";
|
|
10
|
+
import { PotentialFileCategory, FileCategory } from "./utils/types.js";
|
|
10
11
|
|
|
11
12
|
const { readFile } = _promises;
|
|
12
13
|
|
|
@@ -17,153 +18,172 @@ const listener = () => {
|
|
|
17
18
|
ignored: ["node_modules", ".git", ".idea"],
|
|
18
19
|
cwd: CMD_EXEC_PATH,
|
|
19
20
|
})
|
|
20
|
-
.on("
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
filename
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
21
|
+
.on("add", async (filename: string) => {
|
|
22
|
+
try {
|
|
23
|
+
const category = await onUpdateEvent(filename);
|
|
24
|
+
switch (category) {
|
|
25
|
+
case "page":
|
|
26
|
+
console.log("New page detected: ", filename);
|
|
27
|
+
break;
|
|
28
|
+
case "snippet":
|
|
29
|
+
console.log("New snippet detected: ", filename);
|
|
30
|
+
break;
|
|
31
|
+
case "mintConfig":
|
|
32
|
+
console.log("Config added");
|
|
33
|
+
break;
|
|
34
|
+
case "openApi":
|
|
35
|
+
console.log("OpenApi spec added: ", filename);
|
|
36
|
+
break;
|
|
37
|
+
case "staticFile":
|
|
38
|
+
console.log("Static file added: ", filename);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
} catch (error) {
|
|
42
|
+
console.error(error.message);
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
.on("change", async (filename: string) => {
|
|
46
|
+
try {
|
|
47
|
+
const category = await onUpdateEvent(filename);
|
|
48
|
+
switch (category) {
|
|
49
|
+
case "page":
|
|
50
|
+
console.log("Page edited: ", filename);
|
|
51
|
+
break;
|
|
52
|
+
case "snippet":
|
|
53
|
+
console.log("Snippet edited: ", filename);
|
|
54
|
+
break;
|
|
55
|
+
case "mintConfig":
|
|
56
|
+
console.log("Config edited");
|
|
57
|
+
break;
|
|
58
|
+
case "openApi":
|
|
59
|
+
console.log("OpenApi spec edited: ", filename);
|
|
60
|
+
break;
|
|
61
|
+
case "staticFile":
|
|
62
|
+
console.log("Static file edited: ", filename);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
} catch (error) {
|
|
66
|
+
console.error(error.message);
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
.on("unlink", async (filename: string) => {
|
|
70
|
+
try {
|
|
71
|
+
const potentialCategory = getCategory(filename);
|
|
72
|
+
const targetPath = getTargetPath(potentialCategory, filename);
|
|
73
|
+
if (
|
|
74
|
+
potentialCategory === "page" ||
|
|
75
|
+
potentialCategory === "snippet" ||
|
|
76
|
+
potentialCategory === "mintConfig" ||
|
|
77
|
+
potentialCategory === "staticFile"
|
|
78
|
+
) {
|
|
62
79
|
await fse.remove(targetPath);
|
|
63
|
-
console.log("Static file deleted: ", filename);
|
|
64
80
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (filename.startsWith("_snippets")) {
|
|
76
|
-
const sourcePath = pathUtil.join(CMD_EXEC_PATH, filename);
|
|
77
|
-
await fse.remove(targetPath);
|
|
78
|
-
await fse.copy(sourcePath, targetPath);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
regenerateNav = true;
|
|
82
|
-
|
|
83
|
-
const contentStr = (await readFile(filePath)).toString();
|
|
84
|
-
const { pageContent } = await createPage(
|
|
85
|
-
filename,
|
|
86
|
-
contentStr,
|
|
87
|
-
CMD_EXEC_PATH,
|
|
88
|
-
[]
|
|
89
|
-
);
|
|
90
|
-
await fse.outputFile(targetPath, pageContent, {
|
|
91
|
-
flag: "w",
|
|
92
|
-
});
|
|
93
|
-
switch (event) {
|
|
94
|
-
case "add":
|
|
95
|
-
case "addDir":
|
|
96
|
-
console.log("New page detected: ", filename);
|
|
97
|
-
break;
|
|
98
|
-
default:
|
|
99
|
-
console.log("Page edited: ", filename);
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
} else if (filename === "mint.json") {
|
|
103
|
-
regenerateNav = true;
|
|
104
|
-
const targetPath = pathUtil.join(
|
|
105
|
-
CLIENT_PATH,
|
|
106
|
-
"src",
|
|
107
|
-
"_props",
|
|
108
|
-
"mint.json"
|
|
109
|
-
);
|
|
110
|
-
await fse.copy(filePath, targetPath);
|
|
111
|
-
switch (event) {
|
|
112
|
-
case "add":
|
|
113
|
-
case "addDir":
|
|
114
|
-
console.log("Config added");
|
|
115
|
-
break;
|
|
116
|
-
default:
|
|
117
|
-
console.log("Config edited");
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
} else {
|
|
121
|
-
const extension = pathUtil.parse(filename).ext.slice(1);
|
|
122
|
-
let isOpenApi = false;
|
|
123
|
-
if (
|
|
124
|
-
extension &&
|
|
125
|
-
(extension === "json" ||
|
|
126
|
-
extension === "yaml" ||
|
|
127
|
-
extension === "yml")
|
|
128
|
-
) {
|
|
129
|
-
const openApiInfo = await openApiCheck(
|
|
130
|
-
pathUtil.join(CMD_EXEC_PATH, filename)
|
|
81
|
+
switch (potentialCategory) {
|
|
82
|
+
case "page":
|
|
83
|
+
console.log(`Page deleted: ${filename}`);
|
|
84
|
+
break;
|
|
85
|
+
case "snippet":
|
|
86
|
+
console.log(`Snippet deleted: ${filename}`);
|
|
87
|
+
break;
|
|
88
|
+
case "mintConfig":
|
|
89
|
+
console.log(
|
|
90
|
+
"⚠️ mint.json deleted. Please create a new mint.json file as it is mandatory."
|
|
131
91
|
);
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
await fse.copy(filePath, targetPath);
|
|
142
|
-
}
|
|
143
|
-
switch (event) {
|
|
144
|
-
case "add":
|
|
145
|
-
case "addDir":
|
|
146
|
-
if (isOpenApi) {
|
|
147
|
-
console.log("OpenApi file added: ", filename);
|
|
148
|
-
} else {
|
|
149
|
-
console.log("Static file added: ", filename);
|
|
150
|
-
}
|
|
151
|
-
break;
|
|
152
|
-
default:
|
|
153
|
-
if (isOpenApi) {
|
|
154
|
-
console.log("OpenApi file edited: ", filename);
|
|
155
|
-
} else {
|
|
156
|
-
console.log("Static file edited: ", filename);
|
|
157
|
-
}
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (regenerateNav) {
|
|
162
|
-
// TODO: Instead of re-generating the entire nav, optimize by just updating the specific page that changed.
|
|
163
|
-
await updateGeneratedNav();
|
|
92
|
+
process.exit(1);
|
|
93
|
+
case "potentialJsonOpenApiSpec":
|
|
94
|
+
case "potentialYamlOpenApiSpec":
|
|
95
|
+
await updateOpenApiFiles();
|
|
96
|
+
await updateGeneratedNav();
|
|
97
|
+
break;
|
|
98
|
+
case "staticFile":
|
|
99
|
+
console.log("Static file deleted: ", filename);
|
|
100
|
+
break;
|
|
164
101
|
}
|
|
102
|
+
} catch (error) {
|
|
103
|
+
console.error(error.message);
|
|
165
104
|
}
|
|
166
105
|
});
|
|
167
106
|
};
|
|
168
107
|
|
|
108
|
+
const getTargetPath = (
|
|
109
|
+
potentialCategory: PotentialFileCategory,
|
|
110
|
+
filePath: string
|
|
111
|
+
): string => {
|
|
112
|
+
switch (potentialCategory) {
|
|
113
|
+
case "page":
|
|
114
|
+
case "snippet":
|
|
115
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", filePath);
|
|
116
|
+
case "mintConfig":
|
|
117
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", "mint.json");
|
|
118
|
+
case "potentialYamlOpenApiSpec":
|
|
119
|
+
case "potentialJsonOpenApiSpec":
|
|
120
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", "openApiFiles.json");
|
|
121
|
+
case "staticFile":
|
|
122
|
+
return pathUtil.join(CLIENT_PATH, "public", filePath);
|
|
123
|
+
default:
|
|
124
|
+
throw new Error("Invalid category");
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* This function is called when a file is added or changed
|
|
130
|
+
* @param filename
|
|
131
|
+
* @returns FileCategory
|
|
132
|
+
*/
|
|
133
|
+
const onUpdateEvent = async (filename: string): Promise<FileCategory> => {
|
|
134
|
+
const filePath = pathUtil.join(CMD_EXEC_PATH, filename);
|
|
135
|
+
const potentialCategory = getCategory(filename);
|
|
136
|
+
const targetPath = getTargetPath(potentialCategory, filename);
|
|
137
|
+
let regenerateNav = false;
|
|
138
|
+
let category: FileCategory =
|
|
139
|
+
potentialCategory === "potentialYamlOpenApiSpec" ||
|
|
140
|
+
potentialCategory === "potentialJsonOpenApiSpec"
|
|
141
|
+
? "staticFile"
|
|
142
|
+
: potentialCategory;
|
|
143
|
+
switch (potentialCategory) {
|
|
144
|
+
case "page":
|
|
145
|
+
regenerateNav = true;
|
|
146
|
+
const contentStr = (await readFile(filePath)).toString();
|
|
147
|
+
const { pageContent } = await createPage(
|
|
148
|
+
filename,
|
|
149
|
+
contentStr,
|
|
150
|
+
CMD_EXEC_PATH,
|
|
151
|
+
[]
|
|
152
|
+
);
|
|
153
|
+
await fse.outputFile(targetPath, pageContent, {
|
|
154
|
+
flag: "w",
|
|
155
|
+
});
|
|
156
|
+
break;
|
|
157
|
+
case "snippet":
|
|
158
|
+
await fse.copy(filePath, targetPath);
|
|
159
|
+
break;
|
|
160
|
+
case "mintConfig":
|
|
161
|
+
regenerateNav = true;
|
|
162
|
+
await fse.copy(filePath, targetPath);
|
|
163
|
+
break;
|
|
164
|
+
case "potentialYamlOpenApiSpec":
|
|
165
|
+
case "potentialJsonOpenApiSpec":
|
|
166
|
+
let isOpenApi = false;
|
|
167
|
+
const openApiInfo = await openApiCheck(
|
|
168
|
+
pathUtil.join(CMD_EXEC_PATH, filename)
|
|
169
|
+
);
|
|
170
|
+
isOpenApi = openApiInfo.isOpenApi;
|
|
171
|
+
if (isOpenApi) {
|
|
172
|
+
// TODO: Instead of re-generating all openApi files, optimize by just updating the specific file that changed.
|
|
173
|
+
await updateOpenApiFiles();
|
|
174
|
+
regenerateNav = true;
|
|
175
|
+
category = "openApi";
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
case "staticFile":
|
|
179
|
+
await fse.copy(filePath, targetPath);
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
if (regenerateNav) {
|
|
183
|
+
// TODO: Instead of re-generating the entire nav, optimize by just updating the specific page that changed.
|
|
184
|
+
await updateGeneratedNav();
|
|
185
|
+
}
|
|
186
|
+
return category;
|
|
187
|
+
};
|
|
188
|
+
|
|
169
189
|
export default listener;
|
|
@@ -5,7 +5,7 @@ import { getConfigPath } from "./utils/mintConfigFile.js";
|
|
|
5
5
|
import { CLIENT_PATH, CMD_EXEC_PATH } from "../../constants.js";
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
import { generateNav } from "./generate.js";
|
|
8
|
-
import categorizeFiles from "./
|
|
8
|
+
import { categorizeFiles } from "./categorize.js";
|
|
9
9
|
|
|
10
10
|
const { readFile } = _promises;
|
|
11
11
|
|
|
@@ -1 +1,16 @@
|
|
|
1
1
|
export type OpenApiFile = { name: string; spec: any };
|
|
2
|
+
|
|
3
|
+
export type PotentialFileCategory =
|
|
4
|
+
| "page"
|
|
5
|
+
| "snippet"
|
|
6
|
+
| "mintConfig"
|
|
7
|
+
| "potentialYamlOpenApiSpec"
|
|
8
|
+
| "potentialJsonOpenApiSpec"
|
|
9
|
+
| "staticFile";
|
|
10
|
+
|
|
11
|
+
export type FileCategory =
|
|
12
|
+
| "page"
|
|
13
|
+
| "snippet"
|
|
14
|
+
| "mintConfig"
|
|
15
|
+
| "openApi"
|
|
16
|
+
| "staticFile";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"categorizeFiles.js","sourceRoot":"","sources":["../../../src/local-preview/listener/categorizeFiles.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,eAAe,GAAG,KAAK,EAAE,oBAA4B,EAAE,EAAE;IAC7D,MAAM,0BAA0B,GAAG,MAAM,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAC5B,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,0BAA0B,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,QAAQ,CAAC,IAAI,CACX,CAAC,KAAK,IAAI,EAAE;YACV,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,SAAS,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE;gBAC5D,IAAI,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;oBACrC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACzB;qBAAM;oBACL,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACjC;aACF;iBAAM,IACL,SAAS;gBACT,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK,CAAC,EACrE;gBACA,MAAM,WAAW,GAAG,MAAM,YAAY,CACpC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAC1C,CAAC;gBACF,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;gBAClC,IAAI,SAAS,EAAE;oBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;oBAC3C,YAAY,CAAC,IAAI,CAAC;wBAChB,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;wBAC1D,IAAI,EAAE,WAAW,CAAC,IAAI;qBACvB,CAAC,CAAC;iBACJ;aACF;iBAAM,IACL,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACrC,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAClC,CAAC,SAAS,EACV;gBACA,kBAAkB;gBAClB,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChC;QACH,CAAC,CAAC,EAAE,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE5B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AACvE,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import pathUtil from "path";
|
|
2
|
-
export const fileIsMdxOrMd = (filename) => {
|
|
3
|
-
try {
|
|
4
|
-
const extension = pathUtil.parse(filename).ext;
|
|
5
|
-
return extension && (extension === ".mdx" || extension === ".md");
|
|
6
|
-
}
|
|
7
|
-
catch (e) {
|
|
8
|
-
// TypeError when filename is not a string
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=fileIsMdxOrMd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileIsMdxOrMd.js","sourceRoot":"","sources":["../../../../src/local-preview/listener/utils/fileIsMdxOrMd.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,MAAM,CAAC;AAE5B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,EAAE;IAChD,IAAI;QACF,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;QAC/C,OAAO,SAAS,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK,CAAC,CAAC;KACnE;IAAC,OAAO,CAAC,EAAE;QACV,0CAA0C;QAC1C,OAAO,KAAK,CAAC;KACd;AACH,CAAC,CAAC"}
|
package/bin/pageTemplate.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import inquirer from "inquirer";
|
|
2
|
-
import { createPage } from "./util.js";
|
|
3
|
-
const generatePageTemplate = () => {
|
|
4
|
-
inquirer
|
|
5
|
-
.prompt([
|
|
6
|
-
{
|
|
7
|
-
type: "input",
|
|
8
|
-
name: "title",
|
|
9
|
-
message: "What is the title of the new page?",
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
type: "input",
|
|
13
|
-
name: "description",
|
|
14
|
-
message: "What is the description?",
|
|
15
|
-
default: "",
|
|
16
|
-
},
|
|
17
|
-
])
|
|
18
|
-
.then((answers) => {
|
|
19
|
-
const { title, description } = answers;
|
|
20
|
-
createPage(title, description);
|
|
21
|
-
console.log("🌱 Created initial files for Mintlify docs");
|
|
22
|
-
process.exit(0);
|
|
23
|
-
})
|
|
24
|
-
.catch((error) => {
|
|
25
|
-
console.error(error);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
export default generatePageTemplate;
|
|
30
|
-
//# sourceMappingURL=pageTemplate.js.map
|
package/bin/pageTemplate.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pageTemplate.js","sourceRoot":"","sources":["../src/pageTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IAChC,QAAQ;SACL,MAAM,CAAC;QACN;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,oCAAoC;SAC9C;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,0BAA0B;YACnC,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;SACD,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QAChB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAEvC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import pathUtil from "path";
|
|
2
|
-
|
|
3
|
-
export const fileIsMdxOrMd = (filename: string) => {
|
|
4
|
-
try {
|
|
5
|
-
const extension = pathUtil.parse(filename).ext;
|
|
6
|
-
return extension && (extension === ".mdx" || extension === ".md");
|
|
7
|
-
} catch (e) {
|
|
8
|
-
// TypeError when filename is not a string
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
};
|
package/src/pageTemplate.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import inquirer from "inquirer";
|
|
2
|
-
import { createPage } from "./util.js";
|
|
3
|
-
|
|
4
|
-
const generatePageTemplate = () => {
|
|
5
|
-
inquirer
|
|
6
|
-
.prompt([
|
|
7
|
-
{
|
|
8
|
-
type: "input",
|
|
9
|
-
name: "title",
|
|
10
|
-
message: "What is the title of the new page?",
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
type: "input",
|
|
14
|
-
name: "description",
|
|
15
|
-
message: "What is the description?",
|
|
16
|
-
default: "",
|
|
17
|
-
},
|
|
18
|
-
])
|
|
19
|
-
.then((answers) => {
|
|
20
|
-
const { title, description } = answers;
|
|
21
|
-
|
|
22
|
-
createPage(title, description);
|
|
23
|
-
console.log("🌱 Created initial files for Mintlify docs");
|
|
24
|
-
process.exit(0);
|
|
25
|
-
})
|
|
26
|
-
.catch((error) => {
|
|
27
|
-
console.error(error);
|
|
28
|
-
process.exit(1);
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export default generatePageTemplate;
|