@mintlify/previewing 3.0.0
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/.eslintignore +1 -0
- package/.eslintrc.json +3 -0
- package/CONTRIBUTING.md +17 -0
- package/README.md +78 -0
- package/bin/constants.js +32 -0
- package/bin/constants.js.map +1 -0
- package/bin/downloadImage.js +82 -0
- package/bin/downloadImage.js.map +1 -0
- package/bin/index.js +19 -0
- package/bin/index.js.map +1 -0
- package/bin/local-preview/helper-commands/installDepsCommand.js +12 -0
- package/bin/local-preview/helper-commands/installDepsCommand.js.map +1 -0
- package/bin/local-preview/index.js +154 -0
- package/bin/local-preview/index.js.map +1 -0
- package/bin/local-preview/listener/categorize.js +95 -0
- package/bin/local-preview/listener/categorize.js.map +1 -0
- package/bin/local-preview/listener/generate.js +74 -0
- package/bin/local-preview/listener/generate.js.map +1 -0
- package/bin/local-preview/listener/index.js +200 -0
- package/bin/local-preview/listener/index.js.map +1 -0
- package/bin/local-preview/listener/update.js +24 -0
- package/bin/local-preview/listener/update.js.map +1 -0
- package/bin/local-preview/listener/utils/createPage.js +163 -0
- package/bin/local-preview/listener/utils/createPage.js.map +1 -0
- package/bin/local-preview/listener/utils/getOpenApiContext.js +57 -0
- package/bin/local-preview/listener/utils/getOpenApiContext.js.map +1 -0
- package/bin/local-preview/listener/utils/mintConfigFile.js +22 -0
- package/bin/local-preview/listener/utils/mintConfigFile.js.map +1 -0
- package/bin/local-preview/listener/utils/toTitleCase.js +36 -0
- package/bin/local-preview/listener/utils/toTitleCase.js.map +1 -0
- package/bin/local-preview/listener/utils/types.js +2 -0
- package/bin/local-preview/listener/utils/types.js.map +1 -0
- package/bin/local-preview/listener/utils.js +68 -0
- package/bin/local-preview/listener/utils.js.map +1 -0
- package/bin/util.js +123 -0
- package/bin/util.js.map +1 -0
- package/package.json +77 -0
- package/scraper.md +121 -0
- package/src/constants.ts +40 -0
- package/src/downloadImage.ts +102 -0
- package/src/index.ts +35 -0
- package/src/local-preview/helper-commands/installDepsCommand.ts +13 -0
- package/src/local-preview/index.ts +196 -0
- package/src/local-preview/listener/categorize.ts +107 -0
- package/src/local-preview/listener/generate.ts +121 -0
- package/src/local-preview/listener/index.ts +228 -0
- package/src/local-preview/listener/update.ts +27 -0
- package/src/local-preview/listener/utils/createPage.ts +211 -0
- package/src/local-preview/listener/utils/getOpenApiContext.ts +77 -0
- package/src/local-preview/listener/utils/mintConfigFile.ts +28 -0
- package/src/local-preview/listener/utils/toTitleCase.ts +40 -0
- package/src/local-preview/listener/utils/types.ts +14 -0
- package/src/local-preview/listener/utils.ts +87 -0
- package/src/types.d.ts +35 -0
- package/src/util.ts +154 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import chokidar from "chokidar";
|
|
2
|
+
import fse from "fs-extra";
|
|
3
|
+
import pathUtil from "path";
|
|
4
|
+
import Chalk from "chalk";
|
|
5
|
+
import mintValidation from "@mintlify/validation";
|
|
6
|
+
import { isFileSizeValid, openApiCheck } from "./utils.js";
|
|
7
|
+
import { updateGeneratedNav, updateOpenApiFiles } from "./update.js";
|
|
8
|
+
import { CLIENT_PATH, CMD_EXEC_PATH } from "../../constants.js";
|
|
9
|
+
import { promises as _promises } from "fs";
|
|
10
|
+
import createPage from "./utils/createPage.js";
|
|
11
|
+
import { getCategory } from "./categorize.js";
|
|
12
|
+
const { readFile } = _promises;
|
|
13
|
+
const listener = () => {
|
|
14
|
+
chokidar
|
|
15
|
+
.watch(CMD_EXEC_PATH, {
|
|
16
|
+
ignoreInitial: true,
|
|
17
|
+
ignored: ["node_modules", ".git", ".idea"],
|
|
18
|
+
cwd: CMD_EXEC_PATH,
|
|
19
|
+
})
|
|
20
|
+
.on("add", async (filename) => {
|
|
21
|
+
try {
|
|
22
|
+
const category = await onUpdateEvent(filename);
|
|
23
|
+
switch (category) {
|
|
24
|
+
case "page":
|
|
25
|
+
console.log("New page detected: ", filename);
|
|
26
|
+
break;
|
|
27
|
+
case "snippet":
|
|
28
|
+
console.log("New snippet detected: ", filename);
|
|
29
|
+
break;
|
|
30
|
+
case "mintConfig":
|
|
31
|
+
console.log("Config added");
|
|
32
|
+
break;
|
|
33
|
+
case "openApi":
|
|
34
|
+
console.log("OpenApi spec added: ", filename);
|
|
35
|
+
break;
|
|
36
|
+
case "staticFile":
|
|
37
|
+
console.log("Static file added: ", filename);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error(error.message);
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
.on("change", async (filename) => {
|
|
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
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error(error.message);
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
.on("unlink", async (filename) => {
|
|
71
|
+
try {
|
|
72
|
+
const potentialCategory = getCategory(filename);
|
|
73
|
+
const targetPath = getTargetPath(potentialCategory, filename);
|
|
74
|
+
if (potentialCategory === "page" ||
|
|
75
|
+
potentialCategory === "snippet" ||
|
|
76
|
+
potentialCategory === "mintConfig" ||
|
|
77
|
+
potentialCategory === "staticFile") {
|
|
78
|
+
await fse.remove(targetPath);
|
|
79
|
+
}
|
|
80
|
+
switch (potentialCategory) {
|
|
81
|
+
case "page":
|
|
82
|
+
console.log(`Page deleted: ${filename}`);
|
|
83
|
+
break;
|
|
84
|
+
case "snippet":
|
|
85
|
+
console.log(`Snippet deleted: ${filename}`);
|
|
86
|
+
break;
|
|
87
|
+
case "mintConfig":
|
|
88
|
+
console.log("⚠️ mint.json deleted. Please create a new mint.json file as it is mandatory.");
|
|
89
|
+
process.exit(1);
|
|
90
|
+
case "potentialJsonOpenApiSpec":
|
|
91
|
+
case "potentialYamlOpenApiSpec":
|
|
92
|
+
await updateOpenApiFiles();
|
|
93
|
+
await updateGeneratedNav();
|
|
94
|
+
break;
|
|
95
|
+
case "staticFile":
|
|
96
|
+
console.log("Static file deleted: ", filename);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(error.message);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
const getTargetPath = (potentialCategory, filePath) => {
|
|
106
|
+
switch (potentialCategory) {
|
|
107
|
+
case "page":
|
|
108
|
+
case "snippet":
|
|
109
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", filePath);
|
|
110
|
+
case "mintConfig":
|
|
111
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", "mint.json");
|
|
112
|
+
case "potentialYamlOpenApiSpec":
|
|
113
|
+
case "potentialJsonOpenApiSpec":
|
|
114
|
+
return pathUtil.join(CLIENT_PATH, "src", "_props", "openApiFiles.json");
|
|
115
|
+
case "staticFile":
|
|
116
|
+
return pathUtil.join(CLIENT_PATH, "public", filePath);
|
|
117
|
+
default:
|
|
118
|
+
throw new Error("Invalid category");
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* This function is called when a file is added or changed
|
|
123
|
+
* @param filename
|
|
124
|
+
* @returns FileCategory
|
|
125
|
+
*/
|
|
126
|
+
const onUpdateEvent = async (filename) => {
|
|
127
|
+
const filePath = pathUtil.join(CMD_EXEC_PATH, filename);
|
|
128
|
+
const potentialCategory = getCategory(filename);
|
|
129
|
+
const targetPath = getTargetPath(potentialCategory, filename);
|
|
130
|
+
let regenerateNav = false;
|
|
131
|
+
let category = potentialCategory === "potentialYamlOpenApiSpec" ||
|
|
132
|
+
potentialCategory === "potentialJsonOpenApiSpec"
|
|
133
|
+
? "staticFile"
|
|
134
|
+
: potentialCategory;
|
|
135
|
+
switch (potentialCategory) {
|
|
136
|
+
case "page":
|
|
137
|
+
regenerateNav = true;
|
|
138
|
+
const contentStr = (await readFile(filePath)).toString();
|
|
139
|
+
const { pageContent } = await createPage(filename, contentStr, CMD_EXEC_PATH, []);
|
|
140
|
+
await fse.outputFile(targetPath, pageContent, {
|
|
141
|
+
flag: "w",
|
|
142
|
+
});
|
|
143
|
+
break;
|
|
144
|
+
case "snippet":
|
|
145
|
+
await fse.copy(filePath, targetPath);
|
|
146
|
+
break;
|
|
147
|
+
case "mintConfig":
|
|
148
|
+
regenerateNav = true;
|
|
149
|
+
const mintJsonFileContent = (await readFile(filePath)).toString();
|
|
150
|
+
try {
|
|
151
|
+
const mintConfig = JSON.parse(mintJsonFileContent);
|
|
152
|
+
const { status, errors, warnings } = mintValidation.validateMintConfig(mintConfig);
|
|
153
|
+
errors.forEach((error) => {
|
|
154
|
+
console.error(`🚨 ${Chalk.red(error)}`);
|
|
155
|
+
});
|
|
156
|
+
warnings.forEach((warning) => {
|
|
157
|
+
console.warn(`⚠️ ${Chalk.yellow(warning)}`);
|
|
158
|
+
});
|
|
159
|
+
if (status === "success") {
|
|
160
|
+
await fse.copy(filePath, targetPath);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (error.name === "SyntaxError") {
|
|
165
|
+
console.error(`🚨 ${Chalk.red("mint.json has invalid JSON. You are likely missing a comma or a bracket. You can paste your mint.json file into https://jsonlint.com/ to get a more specific error message.")}`);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.error(`🚨 ${Chalk.red(error.message)}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
case "potentialYamlOpenApiSpec":
|
|
173
|
+
case "potentialJsonOpenApiSpec":
|
|
174
|
+
let isOpenApi = false;
|
|
175
|
+
const openApiInfo = await openApiCheck(filePath);
|
|
176
|
+
isOpenApi = openApiInfo.isOpenApi;
|
|
177
|
+
if (isOpenApi) {
|
|
178
|
+
// TODO: Instead of re-generating all openApi files, optimize by just updating the specific file that changed.
|
|
179
|
+
await updateOpenApiFiles();
|
|
180
|
+
regenerateNav = true;
|
|
181
|
+
category = "openApi";
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
184
|
+
case "staticFile":
|
|
185
|
+
if (await isFileSizeValid(filePath, 5)) {
|
|
186
|
+
await fse.copy(filePath, targetPath);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
console.error(Chalk.red(`🚨 The file at ${filename} is too big. The maximum file size is 5 mb.`));
|
|
190
|
+
}
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
if (regenerateNav) {
|
|
194
|
+
// TODO: Instead of re-generating the entire nav, optimize by just updating the specific page that changed.
|
|
195
|
+
await updateGeneratedNav();
|
|
196
|
+
}
|
|
197
|
+
return category;
|
|
198
|
+
};
|
|
199
|
+
export default listener;
|
|
200
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/local-preview/listener/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// TODO: Add Types
|
|
2
|
+
import fse from "fs-extra";
|
|
3
|
+
import { promises as _promises } from "fs";
|
|
4
|
+
import { CLIENT_PATH, CMD_EXEC_PATH } from "../../constants.js";
|
|
5
|
+
import { join } from "path";
|
|
6
|
+
import { generateNav } from "./generate.js";
|
|
7
|
+
import { categorizeFiles } from "./categorize.js";
|
|
8
|
+
const { readFile } = _promises;
|
|
9
|
+
// TODO: Put in prebuild package
|
|
10
|
+
export const updateGeneratedNav = async () => {
|
|
11
|
+
const generatedNav = await generateNav();
|
|
12
|
+
const targetPath = join(CLIENT_PATH, "src", "_props", "generatedNav.json");
|
|
13
|
+
await fse.outputFile(targetPath, JSON.stringify(generatedNav, null, 2), {
|
|
14
|
+
flag: "w",
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
export const updateOpenApiFiles = async () => {
|
|
18
|
+
const { openApiFiles } = await categorizeFiles(CMD_EXEC_PATH);
|
|
19
|
+
const targetPath = join(CLIENT_PATH, "src", "_props", "openApiFiles.json");
|
|
20
|
+
await fse.outputFile(targetPath, JSON.stringify(openApiFiles, null, 2), {
|
|
21
|
+
flag: "w",
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +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,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,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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import matter from "gray-matter";
|
|
2
|
+
import isAbsoluteUrl from "is-absolute-url";
|
|
3
|
+
import { remark } from "remark";
|
|
4
|
+
import remarkFrontmatter from "remark-frontmatter";
|
|
5
|
+
import remarkGfm from "remark-gfm";
|
|
6
|
+
import remarkMdx from "remark-mdx";
|
|
7
|
+
import { visit } from "unist-util-visit";
|
|
8
|
+
const createPage = async (pagePath, pageContent, contentDirectoryPath, openApiFiles) => {
|
|
9
|
+
const { data: metadata } = matter(pageContent);
|
|
10
|
+
try {
|
|
11
|
+
const parsedContent = await preParseMdx(pageContent, contentDirectoryPath);
|
|
12
|
+
pageContent = parsedContent;
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
pageContent = `🚧 A parsing error occured. Please contact the owner of this website.`;
|
|
16
|
+
}
|
|
17
|
+
// Replace .mdx so we can pass file paths into this function
|
|
18
|
+
const slug = pagePath.replace(/\.mdx?$/, "");
|
|
19
|
+
let defaultTitle = slugToTitle(slug);
|
|
20
|
+
// Append data from OpenAPI if it exists
|
|
21
|
+
const { title, description } = getOpenApiTitleAndDescription(openApiFiles, metadata?.openapi);
|
|
22
|
+
if (title) {
|
|
23
|
+
defaultTitle = title;
|
|
24
|
+
}
|
|
25
|
+
const pageMetadata = {
|
|
26
|
+
title: defaultTitle,
|
|
27
|
+
description,
|
|
28
|
+
...metadata,
|
|
29
|
+
href: optionallyAddLeadingSlash(slug),
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
pageMetadata,
|
|
33
|
+
pageContent,
|
|
34
|
+
slug: removeLeadingSlash(slug),
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
const preParseMdx = async (fileContent, contentDirectoryPath) => {
|
|
38
|
+
const removeContentDirectoryPath = (filePath) => {
|
|
39
|
+
const pathArr = createPathArr(filePath);
|
|
40
|
+
const contentDirectoryPathArr = createPathArr(contentDirectoryPath);
|
|
41
|
+
contentDirectoryPathArr.reverse().forEach((dir, index) => {
|
|
42
|
+
if (pathArr[index] === dir) {
|
|
43
|
+
pathArr.pop();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return "/" + pathArr.join("/");
|
|
47
|
+
};
|
|
48
|
+
const removeContentDirectoryPaths = () => {
|
|
49
|
+
return (tree) => {
|
|
50
|
+
visit(tree, (node) => {
|
|
51
|
+
if (node == null) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (node.name === "img" || node.name === "source") {
|
|
55
|
+
const srcAttrIndex = node.attributes.findIndex((attr) => attr?.name === "src");
|
|
56
|
+
const nodeUrl = node.attributes[srcAttrIndex].value;
|
|
57
|
+
if (
|
|
58
|
+
// <img/> component
|
|
59
|
+
srcAttrIndex !== -1 &&
|
|
60
|
+
!isAbsoluteUrl(nodeUrl) &&
|
|
61
|
+
!isDataString(nodeUrl)) {
|
|
62
|
+
node.attributes[srcAttrIndex].value =
|
|
63
|
+
removeContentDirectoryPath(nodeUrl);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else if (
|
|
67
|
+
// ![]() format
|
|
68
|
+
node.type === "image" &&
|
|
69
|
+
node.url &&
|
|
70
|
+
!isAbsoluteUrl(node.url) &&
|
|
71
|
+
!isDataString(node.url)) {
|
|
72
|
+
node.url = removeContentDirectoryPath(node.url);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return tree;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
const file = await remark()
|
|
79
|
+
.use(remarkMdx)
|
|
80
|
+
.use(remarkGfm)
|
|
81
|
+
.use(remarkFrontmatter, ["yaml", "toml"])
|
|
82
|
+
.use(removeContentDirectoryPaths)
|
|
83
|
+
.process(fileContent);
|
|
84
|
+
return String(file);
|
|
85
|
+
};
|
|
86
|
+
const removeLeadingSlash = (str) => {
|
|
87
|
+
const path = createPathArr(str);
|
|
88
|
+
return path.join("/");
|
|
89
|
+
};
|
|
90
|
+
const createPathArr = (path) => {
|
|
91
|
+
return path.split("/").filter((dir) => dir !== "");
|
|
92
|
+
};
|
|
93
|
+
const isDataString = (str) => str.startsWith("data:");
|
|
94
|
+
const getOpenApiTitleAndDescription = (openApiFiles, openApiMetaField) => {
|
|
95
|
+
const { operation } = getOpenApiOperationMethodAndEndpoint(openApiFiles, openApiMetaField);
|
|
96
|
+
if (operation == null) {
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
title: operation.summary,
|
|
101
|
+
description: operation.description,
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
const getOpenApiOperationMethodAndEndpoint = (openApiFiles, openApiMetaField) => {
|
|
105
|
+
const { endpoint, method, filename } = extractMethodAndEndpoint(openApiMetaField);
|
|
106
|
+
let path;
|
|
107
|
+
openApiFiles?.forEach((file) => {
|
|
108
|
+
const openApiFile = file.spec;
|
|
109
|
+
const openApiPath = openApiFile.paths && openApiFile.paths[endpoint];
|
|
110
|
+
const isFilenameOrNone = !filename || filename === file.filename;
|
|
111
|
+
if (openApiPath && isFilenameOrNone) {
|
|
112
|
+
path = openApiPath;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
if (path == null) {
|
|
116
|
+
return {};
|
|
117
|
+
}
|
|
118
|
+
let operation;
|
|
119
|
+
if (method) {
|
|
120
|
+
operation = path[method.toLowerCase()];
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const firstOperationKey = Object.keys(path)[0];
|
|
124
|
+
operation = path[firstOperationKey];
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
operation,
|
|
128
|
+
method,
|
|
129
|
+
endpoint,
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
const extractMethodAndEndpoint = (openApiMetaField) => {
|
|
133
|
+
const methodRegex = /(get|post|put|delete|patch)\s/i;
|
|
134
|
+
const trimmed = openApiMetaField.trim();
|
|
135
|
+
const foundMethod = trimmed.match(methodRegex);
|
|
136
|
+
const startIndexOfMethod = foundMethod
|
|
137
|
+
? openApiMetaField.indexOf(foundMethod[0])
|
|
138
|
+
: 0;
|
|
139
|
+
const endIndexOfMethod = foundMethod
|
|
140
|
+
? startIndexOfMethod + foundMethod[0].length - 1
|
|
141
|
+
: 0;
|
|
142
|
+
const filename = openApiMetaField.substring(0, startIndexOfMethod).trim();
|
|
143
|
+
return {
|
|
144
|
+
method: foundMethod ? foundMethod[0].slice(0, -1).toUpperCase() : undefined,
|
|
145
|
+
endpoint: openApiMetaField.substring(endIndexOfMethod).trim(),
|
|
146
|
+
filename: filename ? filename : undefined,
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
function optionallyAddLeadingSlash(path) {
|
|
150
|
+
if (path.startsWith("/")) {
|
|
151
|
+
return path;
|
|
152
|
+
}
|
|
153
|
+
return "/" + path;
|
|
154
|
+
}
|
|
155
|
+
export const slugToTitle = (slug) => {
|
|
156
|
+
const slugArr = slug.split("/");
|
|
157
|
+
let defaultTitle = slugArr[slugArr.length - 1].split("-").join(" "); //replace all dashes
|
|
158
|
+
defaultTitle = defaultTitle.split("_").join(" "); //replace all underscores
|
|
159
|
+
defaultTitle = defaultTitle.charAt(0).toUpperCase() + defaultTitle.slice(1); //capitalize first letter
|
|
160
|
+
return defaultTitle;
|
|
161
|
+
};
|
|
162
|
+
export default createPage;
|
|
163
|
+
//# sourceMappingURL=createPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPage.js","sourceRoot":"","sources":["../../../../src/local-preview/listener/utils/createPage.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,UAAU,GAAG,KAAK,EACtB,QAAgB,EAChB,WAAmB,EACnB,oBAA4B,EAC5B,YAA2B,EAC3B,EAAE;IACF,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI;QACF,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC3E,WAAW,GAAG,aAAa,CAAC;KAC7B;IAAC,OAAO,KAAK,EAAE;QACd,WAAW,GAAG,uEAAuE,CAAC;KACvF;IAED,4DAA4D;IAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,wCAAwC;IACxC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,6BAA6B,CAC1D,YAAY,EACZ,QAAQ,EAAE,OAAO,CAClB,CAAC;IAEF,IAAI,KAAK,EAAE;QACT,YAAY,GAAG,KAAK,CAAC;KACtB;IAED,MAAM,YAAY,GAAG;QACnB,KAAK,EAAE,YAAY;QACnB,WAAW;QACX,GAAG,QAAQ;QACX,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC;KACtC,CAAC;IAEF,OAAO;QACL,YAAY;QACZ,WAAW;QACX,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;KAC/B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EACvB,WAAmB,EACnB,oBAA4B,EAC5B,EAAE;IACF,MAAM,0BAA0B,GAAG,CAAC,QAAgB,EAAE,EAAE;QACtD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,uBAAuB,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;QACpE,uBAAuB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;YACvE,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;gBAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;aACf;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,GAAG,EAAE;QACvC,OAAO,CAAC,IAAI,EAAE,EAAE;YACd,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBACnB,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,OAAO;iBACR;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACjD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAC/B,CAAC;oBACF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;oBACpD;oBACE,mBAAmB;oBACnB,YAAY,KAAK,CAAC,CAAC;wBACnB,CAAC,aAAa,CAAC,OAAO,CAAC;wBACvB,CAAC,YAAY,CAAC,OAAO,CAAC,EACtB;wBACA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK;4BACjC,0BAA0B,CAAC,OAAO,CAAC,CAAC;qBACvC;iBACF;qBAAM;gBACL,eAAe;gBACf,IAAI,CAAC,IAAI,KAAK,OAAO;oBACrB,IAAI,CAAC,GAAG;oBACR,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;oBACxB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EACvB;oBACA,IAAI,CAAC,GAAG,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACjD;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE;SACxB,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACxC,GAAG,CAAC,2BAA2B,CAAC;SAChC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,EAAE;IACzC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAE9D,MAAM,6BAA6B,GAAG,CACpC,YAA2B,EAC3B,gBAAwB,EACxB,EAAE;IACF,MAAM,EAAE,SAAS,EAAE,GAAG,oCAAoC,CACxD,YAAY,EACZ,gBAAgB,CACjB,CAAC;IAEF,IAAI,SAAS,IAAI,IAAI,EAAE;QACrB,OAAO,EAAE,CAAC;KACX;IAED,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,OAAO;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW;KACnC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,oCAAoC,GAAG,CAC3C,YAA2B,EAC3B,gBAAwB,EACxB,EAAE;IACF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAClC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC;IAET,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,gBAAgB,GAAG,CAAC,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;QACjE,IAAI,WAAW,IAAI,gBAAgB,EAAE;YACnC,IAAI,GAAG,WAAW,CAAC;SACpB;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,SAAS,CAAC;IACd,IAAI,MAAM,EAAE;QACV,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;KACxC;SAAM;QACL,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACrC;IAED,OAAO;QACL,SAAS;QACT,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,gBAAwB,EAAE,EAAE;IAC5D,MAAM,WAAW,GAAG,gCAAgC,CAAC;IACrD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE/C,MAAM,kBAAkB,GAAG,WAAW;QACpC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,gBAAgB,GAAG,WAAW;QAClC,CAAC,CAAC,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAChD,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1E,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3E,QAAQ,EAAE,gBAAgB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;QAC7D,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KAC1C,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,yBAAyB,CAAC,IAAY;IAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACxB,OAAO,IAAI,CAAC;KACb;IACD,OAAO,GAAG,GAAG,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE;IAC1C,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;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export const extractMethodAndEndpoint = (api) => {
|
|
2
|
+
const methodRegex = /(get|post|put|delete|patch)\s/i;
|
|
3
|
+
const trimmed = api.trim();
|
|
4
|
+
const foundMethod = trimmed.match(methodRegex);
|
|
5
|
+
const startIndexOfMethod = foundMethod ? api.indexOf(foundMethod[0]) : 0;
|
|
6
|
+
const endIndexOfMethod = foundMethod
|
|
7
|
+
? startIndexOfMethod + foundMethod[0].length - 1
|
|
8
|
+
: 0;
|
|
9
|
+
const filename = api.substring(0, startIndexOfMethod).trim();
|
|
10
|
+
return {
|
|
11
|
+
method: foundMethod ? foundMethod[0].slice(0, -1).toUpperCase() : undefined,
|
|
12
|
+
endpoint: api.substring(endIndexOfMethod).trim(),
|
|
13
|
+
filename: filename ? filename : undefined,
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export const getOpenApiOperationMethodAndEndpoint = (openApi, openApiMetaField) => {
|
|
17
|
+
const { endpoint, method, filename } = extractMethodAndEndpoint(openApiMetaField);
|
|
18
|
+
let path;
|
|
19
|
+
openApi.files?.forEach((file) => {
|
|
20
|
+
const openApiFile = file.openapi;
|
|
21
|
+
const openApiPath = openApiFile.paths && openApiFile.paths[endpoint];
|
|
22
|
+
const isFilenameOrNone = !filename || filename === file.name;
|
|
23
|
+
if (openApiPath && isFilenameOrNone) {
|
|
24
|
+
path = openApiPath;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
if (path == null) {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
let operation;
|
|
31
|
+
if (method) {
|
|
32
|
+
operation = path[method.toLowerCase()];
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const firstOperationKey = Object.keys(path)[0];
|
|
36
|
+
operation = path[firstOperationKey];
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
operation,
|
|
40
|
+
method,
|
|
41
|
+
endpoint,
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export const getOpenApiTitleAndDescription = (openApi, openApiMetaField) => {
|
|
45
|
+
if (openApi == null || !openApiMetaField || openApiMetaField == null) {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
const { operation } = getOpenApiOperationMethodAndEndpoint(openApi, openApiMetaField);
|
|
49
|
+
if (operation == null) {
|
|
50
|
+
return {};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
title: operation.summary,
|
|
54
|
+
description: operation.description,
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=getOpenApiContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOpenApiContext.js","sourceRoot":"","sources":["../../../../src/local-preview/listener/utils/getOpenApiContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { promises as _promises } from "fs";
|
|
2
|
+
import { pathExists } from "fs-extra";
|
|
3
|
+
import pathUtil from "path";
|
|
4
|
+
const { readFile } = _promises;
|
|
5
|
+
// TODO: Put in prebuild package
|
|
6
|
+
export const getConfigPath = async (contentDirectoryPath) => {
|
|
7
|
+
if (await pathExists(pathUtil.join(contentDirectoryPath, "mint.json"))) {
|
|
8
|
+
return pathUtil.join(contentDirectoryPath, "mint.json");
|
|
9
|
+
}
|
|
10
|
+
return null;
|
|
11
|
+
};
|
|
12
|
+
// TODO: Put in prebuild package
|
|
13
|
+
export const getConfigObj = async (contentDirectoryPath) => {
|
|
14
|
+
const configPath = await getConfigPath(contentDirectoryPath);
|
|
15
|
+
let configObj = null;
|
|
16
|
+
if (configPath) {
|
|
17
|
+
const configContents = await readFile(configPath);
|
|
18
|
+
configObj = await JSON.parse(configContents.toString());
|
|
19
|
+
}
|
|
20
|
+
return configObj;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=mintConfigFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mintConfigFile.js","sourceRoot":"","sources":["../../../../src/local-preview/listener/utils/mintConfigFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,QAAQ,MAAM,MAAM,CAAC;AAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;AAE/B,gCAAgC;AAChC,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,oBAA4B,EACJ,EAAE;IAC1B,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC,EAAE;QACtE,OAAO,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;KACzD;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,gCAAgC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,oBAA4B,EACd,EAAE;IAChB,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC7D,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,UAAU,EAAE;QACd,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;KACzD;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function toTitleCase(text) {
|
|
2
|
+
const smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|v.?|vs.?|via)$/i;
|
|
3
|
+
const alphanumericPattern = /([A-Za-z0-9\u00C0-\u00FF])/;
|
|
4
|
+
const wordSeparators = /([ :–—-])/;
|
|
5
|
+
return text
|
|
6
|
+
.split(wordSeparators)
|
|
7
|
+
.map(function (current, index, array) {
|
|
8
|
+
if (
|
|
9
|
+
// Check for small words
|
|
10
|
+
current.search(smallWords) > -1 &&
|
|
11
|
+
// Skip first and last word
|
|
12
|
+
index !== 0 &&
|
|
13
|
+
index !== array.length - 1 &&
|
|
14
|
+
// Ignore title end and subtitle start
|
|
15
|
+
array[index - 3] !== ':' &&
|
|
16
|
+
array[index + 1] !== ':' &&
|
|
17
|
+
// Ignore small words that start a hyphenated phrase
|
|
18
|
+
(array[index + 1] !== '-' || (array[index - 1] === '-' && array[index + 1] === '-'))) {
|
|
19
|
+
return current.toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
// Ignore intentional capitalization
|
|
22
|
+
if (current.substring(1).search(/[A-Z]|\../) > -1) {
|
|
23
|
+
return current;
|
|
24
|
+
}
|
|
25
|
+
// Ignore URLs
|
|
26
|
+
if (array[index + 1] === ':' && array[index + 2] !== '') {
|
|
27
|
+
return current;
|
|
28
|
+
}
|
|
29
|
+
// Capitalize the first letter
|
|
30
|
+
return current.replace(alphanumericPattern, function (match) {
|
|
31
|
+
return match.toUpperCase();
|
|
32
|
+
});
|
|
33
|
+
})
|
|
34
|
+
.join('');
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=toTitleCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toTitleCase.js","sourceRoot":"","sources":["../../../../src/local-preview/listener/utils/toTitleCase.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,UAAU,GAAG,8EAA8E,CAAC;IAClG,MAAM,mBAAmB,GAAG,4BAA4B,CAAC;IACzD,MAAM,cAAc,GAAG,WAAW,CAAC;IAEnC,OAAO,IAAI;SACR,KAAK,CAAC,cAAc,CAAC;SACrB,GAAG,CAAC,UAAU,OAAO,EAAE,KAAK,EAAE,KAAK;QAClC;QACE,wBAAwB;QACxB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,2BAA2B;YAC3B,KAAK,KAAK,CAAC;YACX,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;YAC1B,sCAAsC;YACtC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG;YACxB,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG;YACxB,oDAAoD;YACpD,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EACpF;YACA,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;SAC9B;QAED,oCAAoC;QACpC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;YACjD,OAAO,OAAO,CAAC;SAChB;QAED,cAAc;QACd,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACvD,OAAO,OAAO,CAAC;SAChB;QAED,8BAA8B;QAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,KAAa;YACjE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/local-preview/listener/utils/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import SwaggerParser from "@apidevtools/swagger-parser";
|
|
2
|
+
import { promises as _promises } from "fs";
|
|
3
|
+
const { readdir, stat } = _promises;
|
|
4
|
+
export const getFileExtension = (filename) => {
|
|
5
|
+
return (filename.substring(filename.lastIndexOf(".") + 1, filename.length) ||
|
|
6
|
+
filename);
|
|
7
|
+
};
|
|
8
|
+
export const openApiCheck = async (path) => {
|
|
9
|
+
let spec;
|
|
10
|
+
let isOpenApi = false;
|
|
11
|
+
try {
|
|
12
|
+
spec = await SwaggerParser.validate(path);
|
|
13
|
+
isOpenApi = true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// not valid openApi
|
|
17
|
+
}
|
|
18
|
+
return { spec, isOpenApi };
|
|
19
|
+
};
|
|
20
|
+
export const filterOutNullInGroup = (group) => {
|
|
21
|
+
const newPages = filterOutNullInPages(group.pages);
|
|
22
|
+
const newGroup = {
|
|
23
|
+
...group,
|
|
24
|
+
pages: newPages,
|
|
25
|
+
};
|
|
26
|
+
return newGroup;
|
|
27
|
+
};
|
|
28
|
+
const filterOutNullInPages = (pages) => {
|
|
29
|
+
const newPages = [];
|
|
30
|
+
pages.forEach((page) => {
|
|
31
|
+
if (page == null) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (page.hasOwnProperty("pages")) {
|
|
35
|
+
const group = page;
|
|
36
|
+
const newGroup = filterOutNullInGroup(group);
|
|
37
|
+
newPages.push(newGroup);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
newPages.push(page);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return newPages;
|
|
44
|
+
};
|
|
45
|
+
export const getFileList = async (dirName, og = dirName) => {
|
|
46
|
+
let files = [];
|
|
47
|
+
const items = await readdir(dirName, { withFileTypes: true });
|
|
48
|
+
for (const item of items) {
|
|
49
|
+
if (item.isDirectory()) {
|
|
50
|
+
files = [...files, ...(await getFileList(`${dirName}/${item.name}`, og))];
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const path = `${dirName}/${item.name}`;
|
|
54
|
+
const name = path.replace(og, "");
|
|
55
|
+
files.push(name);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return files;
|
|
59
|
+
};
|
|
60
|
+
export const isFileSizeValid = async (path, maxFileSizeInMb) => {
|
|
61
|
+
const maxFileSizeBytes = maxFileSizeInMb * 1000000;
|
|
62
|
+
const stats = await stat(path);
|
|
63
|
+
return stats.size <= maxFileSizeBytes;
|
|
64
|
+
};
|
|
65
|
+
export function isError(obj) {
|
|
66
|
+
return Object.prototype.toString.call(obj) === "[object Error]";
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/local-preview/listener/utils.ts"],"names":[],"mappings":"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"}
|