mintlify 1.1.8 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/bin/constants.js +0 -1
- package/bin/constants.js.map +1 -1
- package/bin/index.js +0 -2
- package/bin/index.js.map +1 -1
- package/bin/local-preview/helper-commands/cleanCommand.js +8 -0
- package/bin/local-preview/helper-commands/cleanCommand.js.map +1 -0
- package/bin/local-preview/index.js +1 -17
- package/bin/local-preview/index.js.map +1 -1
- package/bin/scraping/scrapeSectionCommands.js +2 -5
- package/bin/scraping/scrapeSectionCommands.js.map +1 -1
- package/package.json +1 -1
- package/src/constants.ts +0 -5
- package/src/index.ts +0 -9
- package/src/local-preview/index.ts +0 -22
- package/src/scraping/scrapeSectionCommands.ts +2 -5
- package/bin/local-preview/injectNav.js +0 -94
- package/bin/local-preview/injectNav.js.map +0 -1
- package/bin/mint/client/.babel-plugin-macrosrc.json +0 -5
- package/bin/mint/client/.babelrc +0 -4
- package/bin/mint/client/.editorconfig +0 -12
- package/bin/mint/client/.eslintrc.json +0 -7
- package/bin/mint/client/.prettierignore +0 -4
- package/bin/mint/client/.prettierrc +0 -14
- package/bin/mint/client/.vscode/launch.json +0 -28
- package/bin/mint/client/README.md +0 -44
- package/bin/mint/client/jest.config.ts +0 -195
- package/bin/mint/client/next-env.d.ts +0 -4
- package/bin/mint/client/next.config.js +0 -152
- package/bin/mint/client/package.json +0 -139
- package/bin/mint/client/postcss.config.cjs +0 -9
- package/bin/mint/client/prebuild/faviconConfig.js +0 -35
- package/bin/mint/client/prebuild/getOpenApiContext.js +0 -53
- package/bin/mint/client/prebuild/index.js +0 -117
- package/bin/mint/client/prebuild/injectNav.js +0 -115
- package/bin/mint/client/prebuild/slugToTitle.js +0 -7
- package/bin/mint/client/rehype/withApiComponents.js +0 -60
- package/bin/mint/client/rehype/withCodeBlocks.js +0 -54
- package/bin/mint/client/rehype/withLayouts.js +0 -113
- package/bin/mint/client/rehype/withLinkRoles.js +0 -13
- package/bin/mint/client/rehype/withRawComponents.js +0 -13
- package/bin/mint/client/rehype/withStaticProps.js +0 -25
- package/bin/mint/client/rehype/withSyntaxHighlighting.js +0 -60
- package/bin/mint/client/remark/utils.js +0 -369
- package/bin/mint/client/remark/withFrames.js +0 -55
- package/bin/mint/client/remark/withImportsInjected.js +0 -36
- package/bin/mint/client/remark/withNextLinks.js +0 -37
- package/bin/mint/client/remark/withTableOfContents.js +0 -71
- package/bin/mint/client/scripts/local.js +0 -177
- package/bin/mint/client/sentry.client.config.js +0 -15
- package/bin/mint/client/sentry.properties +0 -4
- package/bin/mint/client/sentry.server.config.js +0 -15
- package/bin/mint/client/src/analytics/AbstractAnalyticsImplementation.ts +0 -50
- package/bin/mint/client/src/analytics/AnalyticsContext.ts +0 -5
- package/bin/mint/client/src/analytics/AnalyticsMediator.ts +0 -101
- package/bin/mint/client/src/analytics/FakeAnalyticsMediator.ts +0 -9
- package/bin/mint/client/src/analytics/GA4Script.tsx +0 -33
- package/bin/mint/client/src/analytics/implementations/amplitude.ts +0 -26
- package/bin/mint/client/src/analytics/implementations/fathom.ts +0 -38
- package/bin/mint/client/src/analytics/implementations/ga4.ts +0 -33
- package/bin/mint/client/src/analytics/implementations/hotjar.ts +0 -53
- package/bin/mint/client/src/analytics/implementations/mixpanel-browser.d.ts +0 -1
- package/bin/mint/client/src/analytics/implementations/mixpanel.ts +0 -52
- package/bin/mint/client/src/analytics/implementations/posthog.ts +0 -37
- package/bin/mint/client/src/components/Accordion/Accordion.tsx +0 -43
- package/bin/mint/client/src/components/Accordion/index.ts +0 -4
- package/bin/mint/client/src/components/ApiExample.tsx +0 -9
- package/bin/mint/client/src/components/Card.tsx +0 -51
- package/bin/mint/client/src/components/CodeGroup.tsx +0 -132
- package/bin/mint/client/src/components/Editor.tsx +0 -12
- package/bin/mint/client/src/components/Expandable.tsx +0 -40
- package/bin/mint/client/src/components/Heading.tsx +0 -84
- package/bin/mint/client/src/components/Param.tsx +0 -56
- package/bin/mint/client/src/components/Request.tsx +0 -19
- package/bin/mint/client/src/components/ResponseField.tsx +0 -33
- package/bin/mint/client/src/components/TabBar.tsx +0 -61
- package/bin/mint/client/src/config.ts +0 -115
- package/bin/mint/client/src/css/bar-of-progress.css +0 -10
- package/bin/mint/client/src/css/base.css +0 -29
- package/bin/mint/client/src/css/font-awesome.css +0 -7
- package/bin/mint/client/src/css/fonts.css +0 -44
- package/bin/mint/client/src/css/main.css +0 -11
- package/bin/mint/client/src/css/prism.css +0 -270
- package/bin/mint/client/src/css/utilities.css +0 -43
- package/bin/mint/client/src/enums/components.ts +0 -8
- package/bin/mint/client/src/fonts/FiraCode-VF.woff +0 -0
- package/bin/mint/client/src/fonts/FiraCode-VF.woff2 +0 -0
- package/bin/mint/client/src/fonts/IBMPlexMono-Regular.ttf +0 -0
- package/bin/mint/client/src/fonts/IBMPlexMono-SemiBold.ttf +0 -0
- package/bin/mint/client/src/fonts/Inter-italic-latin.var.woff2 +0 -0
- package/bin/mint/client/src/fonts/Inter-roman-latin.var.woff2 +0 -0
- package/bin/mint/client/src/fonts/Pally-Variable.ttf +0 -0
- package/bin/mint/client/src/fonts/SourceSansPro-Regular.otf +0 -0
- package/bin/mint/client/src/fonts/SourceSerifPro-Regular.ttf +0 -0
- package/bin/mint/client/src/fonts/Synonym-Variable.ttf +0 -0
- package/bin/mint/client/src/fonts/Ubuntu-Mono-bold.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-Regular-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-Regular-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-Regular.module.css +0 -11
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-SemiBold-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-SemiBold-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/IBMPlexMono-SemiBold.module.css +0 -11
- package/bin/mint/client/src/fonts/generated/Pally-Variable-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/Pally-Variable-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/Pally-Variable.module.css +0 -11
- package/bin/mint/client/src/fonts/generated/SourceSerifPro-Regular-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/SourceSerifPro-Regular-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/SourceSerifPro-Regular.module.css +0 -11
- package/bin/mint/client/src/fonts/generated/Synonym-Variable-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/Synonym-Variable-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/Synonym-Variable.module.css +0 -11
- package/bin/mint/client/src/fonts/generated/TenorSans-Regular-subset.woff2 +0 -0
- package/bin/mint/client/src/fonts/generated/TenorSans-Regular-subset.zopfli.woff +0 -0
- package/bin/mint/client/src/fonts/generated/TenorSans-Regular.module.css +0 -11
- package/bin/mint/client/src/hooks/useActionKey.ts +0 -20
- package/bin/mint/client/src/hooks/useIsomorphicLayoutEffect.ts +0 -3
- package/bin/mint/client/src/hooks/useMedia.ts +0 -27
- package/bin/mint/client/src/hooks/usePrevNext.ts +0 -34
- package/bin/mint/client/src/hooks/useTop.ts +0 -15
- package/bin/mint/client/src/icons/CopyToClipboard.tsx +0 -33
- package/bin/mint/client/src/index.d.ts +0 -1
- package/bin/mint/client/src/layouts/ApiSupplemental.tsx +0 -173
- package/bin/mint/client/src/layouts/ContentsLayout.tsx +0 -256
- package/bin/mint/client/src/layouts/DocumentationLayout.tsx +0 -44
- package/bin/mint/client/src/layouts/OpenApiContent.tsx +0 -301
- package/bin/mint/client/src/layouts/SidebarLayout.tsx +0 -412
- package/bin/mint/client/src/layouts/UserFeedback.tsx +0 -73
- package/bin/mint/client/src/layouts/getGroupsInDivision.ts +0 -25
- package/bin/mint/client/src/layouts/isPathInGroupPages.ts +0 -10
- package/bin/mint/client/src/metadata.ts +0 -58
- package/bin/mint/client/src/nav.json +0 -219
- package/bin/mint/client/src/openapi.ts +0 -3
- package/bin/mint/client/src/pages/404.tsx +0 -73
- package/bin/mint/client/src/pages/_app.tsx +0 -138
- package/bin/mint/client/src/pages/_document.tsx +0 -57
- package/bin/mint/client/src/pages/api/issue.ts +0 -10
- package/bin/mint/client/src/pages/api/name.ts +0 -8
- package/bin/mint/client/src/pages/api/request.ts +0 -31
- package/bin/mint/client/src/pages/api/suggest.ts +0 -10
- package/bin/mint/client/src/pages/api/syntax-highlighted-json.ts +0 -13
- package/bin/mint/client/src/pages/api/utils.ts +0 -6
- package/bin/mint/client/src/pages/index.tsx +0 -31
- package/bin/mint/client/src/ui/Api.tsx +0 -359
- package/bin/mint/client/src/ui/Footer.tsx +0 -124
- package/bin/mint/client/src/ui/Header.tsx +0 -370
- package/bin/mint/client/src/ui/Logo.tsx +0 -55
- package/bin/mint/client/src/ui/PageHeader.tsx +0 -51
- package/bin/mint/client/src/ui/Search.tsx +0 -386
- package/bin/mint/client/src/ui/ThemeToggle.tsx +0 -285
- package/bin/mint/client/src/ui/Title.tsx +0 -22
- package/bin/mint/client/src/ui/TopLevelLink.tsx +0 -122
- package/bin/mint/client/src/utils/api.ts +0 -252
- package/bin/mint/client/src/utils/brands.ts +0 -217
- package/bin/mint/client/src/utils/castArray.ts +0 -3
- package/bin/mint/client/src/utils/childrenArray.ts +0 -3
- package/bin/mint/client/src/utils/fit.ts +0 -27
- package/bin/mint/client/src/utils/fontAwesome.ts +0 -577
- package/bin/mint/client/src/utils/getAnalyticsConfig.ts +0 -14
- package/bin/mint/client/src/utils/getLogoHref.ts +0 -9
- package/bin/mint/client/src/utils/getOpenApiContext.ts +0 -26
- package/bin/mint/client/src/utils/importAll.ts +0 -6
- package/bin/mint/client/src/utils/isObject.ts +0 -3
- package/bin/mint/client/src/utils/kebabToTitleCase.ts +0 -3
- package/bin/mint/client/src/utils/loadImage.ts +0 -8
- package/bin/mint/client/src/utils/slugToTitle.ts +0 -7
- package/bin/mint/client/src/utils/wait.ts +0 -5
- package/bin/mint/client/tailwind.config.cjs +0 -323
- package/bin/mint/client/test/test.test.ts +0 -5
- package/bin/mint/client/tsconfig.json +0 -36
- package/bin/mint/client/yarn.lock +0 -9702
- package/src/local-preview/helper-commands/clearCommand.ts +0 -33
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import favicons from 'favicons';
|
|
3
|
-
import fs from 'fs-extra';
|
|
4
|
-
import { dirname } from 'path';
|
|
5
|
-
import { resolve } from 'path';
|
|
6
|
-
import { fileURLToPath } from 'url';
|
|
7
|
-
|
|
8
|
-
import faviconConfig from './faviconConfig.js';
|
|
9
|
-
import { createPage, injectNav } from './injectNav.js';
|
|
10
|
-
|
|
11
|
-
const API_ENDPOINT = 'https://docs.mintlify.com';
|
|
12
|
-
|
|
13
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
-
const __dirname = dirname(__filename);
|
|
15
|
-
|
|
16
|
-
const injectMarkdownFilesAndNav = (markdownFiles, openApiObj, configObj) => {
|
|
17
|
-
let pages = {};
|
|
18
|
-
markdownFiles.forEach((markdownFile) => {
|
|
19
|
-
const path = __dirname + `/../src/pages/${markdownFile.path}`;
|
|
20
|
-
const page = createPage(markdownFile.path, markdownFile.content, openApiObj);
|
|
21
|
-
if (page != null) {
|
|
22
|
-
pages = {
|
|
23
|
-
...pages,
|
|
24
|
-
...page,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
fs.outputFileSync(path, Buffer.from(markdownFile.content), { flag: 'w' });
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
console.log(`📄 ${markdownFiles.length} pages injected`);
|
|
32
|
-
|
|
33
|
-
injectNav(pages, configObj);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const injectStaticFiles = (staticFiles) => {
|
|
37
|
-
staticFiles.forEach((staticFile) => {
|
|
38
|
-
const path = __dirname + `/../public/${staticFile.path}`;
|
|
39
|
-
fs.outputFileSync(path, Buffer.from(staticFile.content), { flag: 'w' });
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
console.log(`📄 ${staticFiles.length} static files injected`);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const injectConfig = (config) => {
|
|
46
|
-
const path = __dirname + `/../src/mint.json`;
|
|
47
|
-
const buffer = Buffer.from(config);
|
|
48
|
-
fs.outputFileSync(path, buffer, { flag: 'w' });
|
|
49
|
-
console.log('⚙️ Config file set properly as mint.json');
|
|
50
|
-
return JSON.parse(buffer.toString());
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const injectFavicons = async (config) => {
|
|
54
|
-
const buffer = Buffer.from(config);
|
|
55
|
-
const configJSON = JSON.parse(buffer.toString());
|
|
56
|
-
|
|
57
|
-
if (configJSON?.favicon == null) return;
|
|
58
|
-
|
|
59
|
-
const desiredPath = resolve(__dirname + `/../public/${configJSON.favicon}`);
|
|
60
|
-
const favicon = fs.readFileSync(desiredPath);
|
|
61
|
-
if (favicon == null) return;
|
|
62
|
-
console.log('Generating favicons...');
|
|
63
|
-
favicons(favicon, faviconConfig(config?.name), (err, response) => {
|
|
64
|
-
if (err) {
|
|
65
|
-
console.log(err.message); // Error description e.g. "An unknown error has occurred"
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
response.images.forEach((img) => {
|
|
69
|
-
const path = __dirname + `/../public/favicons/${img.name}`;
|
|
70
|
-
fs.outputFileSync(path, Buffer.from(img.contents), { flag: 'w' });
|
|
71
|
-
});
|
|
72
|
-
response.files.forEach((file) => {
|
|
73
|
-
const path = __dirname + `/../public/favicons/${file.name}`;
|
|
74
|
-
fs.outputFileSync(path, file.contents, { flag: 'w' });
|
|
75
|
-
});
|
|
76
|
-
console.log('Favicons generated');
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
const injectOpenApi = async (openApi) => {
|
|
81
|
-
const path = __dirname + `/../src/openapi.json`;
|
|
82
|
-
if (openApi) {
|
|
83
|
-
const buffer = Buffer.from(openApi);
|
|
84
|
-
fs.outputFileSync(path, buffer, { flag: 'w' });
|
|
85
|
-
console.log('🖥️ OpenAPI file detected and set as openapi.json');
|
|
86
|
-
return JSON.parse(buffer.toString());
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
fs.outputFileSync(path, '{}', { flag: 'w' });
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
const getAllFilesAndConfig = async () => {
|
|
93
|
-
const ref = process.env.GIT_REF;
|
|
94
|
-
const {
|
|
95
|
-
data: { markdownFiles, staticFiles, config, openApi },
|
|
96
|
-
} = await axios.get(`${API_ENDPOINT}/api/v1/sites/files`, {
|
|
97
|
-
headers: { Authorization: `Bearer ${process.env.INTERNAL_SITE_BEARER_TOKEN}` },
|
|
98
|
-
params: {
|
|
99
|
-
ref,
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
const openApiObj = await injectOpenApi(openApi);
|
|
103
|
-
const configObj = await injectConfig(config);
|
|
104
|
-
injectMarkdownFilesAndNav(markdownFiles, openApiObj, configObj);
|
|
105
|
-
injectStaticFiles(staticFiles);
|
|
106
|
-
injectFavicons(config);
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
(async function () {
|
|
110
|
-
try {
|
|
111
|
-
console.log('🔍 Fetching files');
|
|
112
|
-
await getAllFilesAndConfig();
|
|
113
|
-
} catch (error) {
|
|
114
|
-
console.log(error);
|
|
115
|
-
console.error('⚠️ Error while prebuilding documents');
|
|
116
|
-
}
|
|
117
|
-
})();
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra';
|
|
2
|
-
import matter from 'gray-matter';
|
|
3
|
-
import { dirname } from 'path';
|
|
4
|
-
import { fileURLToPath } from 'url';
|
|
5
|
-
|
|
6
|
-
import { getOpenApiTitleAndDescription } from './getOpenApiContext.js';
|
|
7
|
-
import { slugToTitle } from './slugToTitle.js';
|
|
8
|
-
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
const __dirname = dirname(__filename);
|
|
11
|
-
|
|
12
|
-
// End matter is front matter, but at the end
|
|
13
|
-
const getIndexOfEndMatter = (fileContents) => {
|
|
14
|
-
const frontMatters = fileContents.match(
|
|
15
|
-
/---\n(title:.+\n|description:.+\n|sidebarTitle:.+\n|api:.+\n|openapi:.+\n)+---$/m
|
|
16
|
-
);
|
|
17
|
-
if (frontMatters) {
|
|
18
|
-
return fileContents.indexOf(frontMatters[0]);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return -1;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export const potentiallyRemoveEndMatter = (fileContents) => {
|
|
25
|
-
const endMatterIndex = getIndexOfEndMatter(fileContents);
|
|
26
|
-
|
|
27
|
-
if (endMatterIndex === -1) {
|
|
28
|
-
return fileContents;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return fileContents.substring(0, endMatterIndex);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const getMetadata = (fileContents) => {
|
|
35
|
-
const { data } = matter(fileContents);
|
|
36
|
-
|
|
37
|
-
if (Object.keys(data).length > 0) {
|
|
38
|
-
return data;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const startIndex = getIndexOfEndMatter(fileContents);
|
|
42
|
-
if (startIndex === -1) {
|
|
43
|
-
return {};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const fileContentFromFrontMatter = fileContents.substring(startIndex);
|
|
47
|
-
const { data: nonTopFrontMatter } = matter(fileContentFromFrontMatter);
|
|
48
|
-
return nonTopFrontMatter;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
export const createPage = (path, content, openApiObj) => {
|
|
52
|
-
const slug = path.replace(/\.mdx?$/, '');
|
|
53
|
-
let defaultTitle = slugToTitle(slug);
|
|
54
|
-
const fileContents = Buffer.from(content).toString();
|
|
55
|
-
const metadata = getMetadata(fileContents);
|
|
56
|
-
// Append data from OpenAPI if it exists
|
|
57
|
-
const { title, description } = getOpenApiTitleAndDescription(openApiObj, metadata?.openapi);
|
|
58
|
-
if (title) {
|
|
59
|
-
defaultTitle = title;
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
[slug]: { title: defaultTitle, description, ...metadata, href: `/${slug}` },
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
export const injectNav = (pages, configObj) => {
|
|
67
|
-
const path = __dirname + `/../src/metadata.json`;
|
|
68
|
-
const createNav = (nav) => {
|
|
69
|
-
return {
|
|
70
|
-
group: nav.group,
|
|
71
|
-
pages: nav.pages.map((page) => {
|
|
72
|
-
if (typeof page === 'string') {
|
|
73
|
-
return pages[page];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return createNav(page);
|
|
77
|
-
}),
|
|
78
|
-
};
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
if (configObj?.navigation == null) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
let navFile = configObj.navigation.map((nav) => createNav(nav));
|
|
86
|
-
const filterOutNullInPages = (pages) => {
|
|
87
|
-
const newPages = [];
|
|
88
|
-
pages.forEach((page) => {
|
|
89
|
-
if (page == null) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
if (page?.pages) {
|
|
93
|
-
const newGroup = filterOutNullInGroup(page);
|
|
94
|
-
newPages.push(newGroup);
|
|
95
|
-
} else {
|
|
96
|
-
newPages.push(page);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
return newPages;
|
|
101
|
-
};
|
|
102
|
-
const filterOutNullInGroup = (group) => {
|
|
103
|
-
const newPages = filterOutNullInPages(group.pages);
|
|
104
|
-
const newGroup = {
|
|
105
|
-
...group,
|
|
106
|
-
pages: newPages,
|
|
107
|
-
};
|
|
108
|
-
return newGroup;
|
|
109
|
-
};
|
|
110
|
-
const newNavFile = navFile.map((group) => {
|
|
111
|
-
return filterOutNullInGroup(group);
|
|
112
|
-
});
|
|
113
|
-
fs.outputFileSync(path, JSON.stringify(newNavFile, null, 2), { flag: 'w' });
|
|
114
|
-
console.log(`⛵️ Navigation generated and injected`);
|
|
115
|
-
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export const slugToTitle = (slug) => {
|
|
2
|
-
const slugArr = slug.split('/');
|
|
3
|
-
let defaultTitle = slugArr[slugArr.length - 1].split('-').join(' '); //replace all dashes
|
|
4
|
-
defaultTitle = defaultTitle.split('_').join(' '); //replace all underscores
|
|
5
|
-
defaultTitle = defaultTitle.charAt(0).toUpperCase() + defaultTitle.slice(1); //capitalize first letter
|
|
6
|
-
return defaultTitle;
|
|
7
|
-
};
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { toHtml } from 'hast-util-to-html';
|
|
2
|
-
import { filter } from 'unist-util-filter';
|
|
3
|
-
import visit from 'unist-util-visit';
|
|
4
|
-
|
|
5
|
-
import { addExport } from '../remark/utils.js';
|
|
6
|
-
|
|
7
|
-
const langFilename = (className) => {
|
|
8
|
-
switch (className) {
|
|
9
|
-
case 'language-shell':
|
|
10
|
-
return 'Bash';
|
|
11
|
-
case 'language-json':
|
|
12
|
-
return 'JSON';
|
|
13
|
-
case 'language-js':
|
|
14
|
-
return 'JavaScript';
|
|
15
|
-
default:
|
|
16
|
-
const language = className.substring(9);
|
|
17
|
-
return language.charAt(0).toUpperCase() + language.slice(1);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
const withApiComponents = () => {
|
|
21
|
-
return (tree) => {
|
|
22
|
-
let apiComponents = [];
|
|
23
|
-
visit(tree, 'mdxJsxFlowElement', (node, _, parent) => {
|
|
24
|
-
if (['ResponseExample', 'RequestExample'].includes(node.name)) {
|
|
25
|
-
// remove all jsx components to convert to html (removes <ResponseExample> and <Editor>)
|
|
26
|
-
const children = node.children.map((child, i) => {
|
|
27
|
-
const preComponent = child.children[0];
|
|
28
|
-
const html = toHtml(preComponent);
|
|
29
|
-
let filename =
|
|
30
|
-
preComponent?.properties?.className?.length > 1
|
|
31
|
-
? langFilename(preComponent?.properties?.className[0])
|
|
32
|
-
: '';
|
|
33
|
-
if (child?.attributes && child.attributes.length > 0) {
|
|
34
|
-
filename = child.attributes[0]?.value;
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
filename,
|
|
38
|
-
html,
|
|
39
|
-
};
|
|
40
|
-
});
|
|
41
|
-
apiComponents.push({
|
|
42
|
-
type: node.name,
|
|
43
|
-
children,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (parent.type === 'root' && (node.name === 'Param' || node.name === 'ParamField')) {
|
|
48
|
-
apiComponents.push({
|
|
49
|
-
type: 'ParamField',
|
|
50
|
-
children: node.children,
|
|
51
|
-
attributes: node.attributes,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
addExport(tree, 'apiComponents', apiComponents);
|
|
56
|
-
return filter(tree, (node) => !['ResponseExample', 'RequestExample'].includes(node.name));
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export default withApiComponents;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { fromHtml } from 'hast-util-from-html';
|
|
2
|
-
import visit from 'unist-util-visit';
|
|
3
|
-
|
|
4
|
-
import { addImport } from '../remark/utils.js';
|
|
5
|
-
|
|
6
|
-
const withCodeBlocks = () => {
|
|
7
|
-
return (tree) => {
|
|
8
|
-
let preTree = { children: [] };
|
|
9
|
-
let componentName;
|
|
10
|
-
|
|
11
|
-
visit(tree, 'element', (node, i, parent) => {
|
|
12
|
-
if (node?.tagName !== 'pre') return node;
|
|
13
|
-
if (node?.children && node?.children[0]?.tagName !== 'code') return node;
|
|
14
|
-
const code = node.children[0];
|
|
15
|
-
const copyToClipboard = fromHtml(
|
|
16
|
-
`<span class="copy-to-clipboard w-5 z-10 flex absolute right-5"><svg class="top-5 h-5 fill-slate-500 hover:fill-slate-300 cursor-pointer" viewBox="0 0 20 20"><path d="M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z" /><path d="M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z" /></svg><div class="tooltip hidden absolute bottom-full left-1/2 mb-3.5 pb-1 -translate-x-1/2"><div class="relative bg-primary-dark text-white text-xs leading-6 font-medium px-1.5 rounded-lg" data-reach-alert="true"><span>Copied</span><svg aria-hidden="true" width="16" height="6" viewBox="0 0 16 6" class="text-primary-dark absolute top-full left-1/2 -mt-px -ml-2"><path fillRule="evenodd" clipRule="evenodd" d="M15 0H1V1.00366V1.00366V1.00371H1.01672C2.72058 1.0147 4.24225 2.74704 5.42685 4.72928C6.42941 6.40691 9.57154 6.4069 10.5741 4.72926C11.7587 2.74703 13.2803 1.0147 14.9841 1.00371H15V0Z" fill="currentColor"></path></svg></div></div></span>`,
|
|
17
|
-
{ fragment: true }
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
const prepend = (value, array) => {
|
|
21
|
-
var newArray = array.slice();
|
|
22
|
-
newArray.unshift(value);
|
|
23
|
-
return newArray;
|
|
24
|
-
};
|
|
25
|
-
node.children = prepend(copyToClipboard, node.children);
|
|
26
|
-
let filename = undefined;
|
|
27
|
-
if (['RequestExample', 'ResponseExample'].includes(parent.name)) {
|
|
28
|
-
const parentType = parent.name.slice(0, -7);
|
|
29
|
-
filename = i === 0 ? parentType : `${parentType} ${i + 1}`;
|
|
30
|
-
node.children[0].data.meta = filename;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (code.data?.meta) {
|
|
34
|
-
filename = code.data.meta;
|
|
35
|
-
}
|
|
36
|
-
if (filename) {
|
|
37
|
-
if (!componentName) {
|
|
38
|
-
componentName = addImport(preTree, '@/components/Editor', 'Editor');
|
|
39
|
-
}
|
|
40
|
-
const wrap = {
|
|
41
|
-
type: 'mdxJsxFlowElement',
|
|
42
|
-
name: componentName,
|
|
43
|
-
attributes: [{ type: 'mdxJsxAttribute', name: 'filename', value: filename }],
|
|
44
|
-
data: { _mdxExplicitJsx: true },
|
|
45
|
-
};
|
|
46
|
-
wrap.children = [node];
|
|
47
|
-
parent.children[i] = wrap;
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
tree.children = [...preTree.children, ...tree.children];
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export default withCodeBlocks;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { getEsmNode } from '../remark/utils.js';
|
|
2
|
-
|
|
3
|
-
const withLayouts = () => {
|
|
4
|
-
return (tree) => {
|
|
5
|
-
const importNode = getEsmNode(
|
|
6
|
-
`import { ContentsLayout as _Default } from '@/layouts/ContentsLayout'`
|
|
7
|
-
);
|
|
8
|
-
tree.children.unshift(importNode);
|
|
9
|
-
tree.children.push({
|
|
10
|
-
type: 'mdxjsEsm',
|
|
11
|
-
value: `export default (props) => <_Default {...props} tableOfContents={tableOfContents} apiComponents={apiComponents}>{props.children}</_Default>`,
|
|
12
|
-
data: {
|
|
13
|
-
estree: {
|
|
14
|
-
type: 'Program',
|
|
15
|
-
sourceType: 'module',
|
|
16
|
-
body: [
|
|
17
|
-
{
|
|
18
|
-
type: 'ExportDefaultDeclaration',
|
|
19
|
-
declaration: {
|
|
20
|
-
type: 'ArrowFunctionExpression',
|
|
21
|
-
async: false,
|
|
22
|
-
expression: true,
|
|
23
|
-
generator: false,
|
|
24
|
-
id: null,
|
|
25
|
-
body: {
|
|
26
|
-
type: 'JSXElement',
|
|
27
|
-
children: [
|
|
28
|
-
{
|
|
29
|
-
type: 'JSXExpressionContainer',
|
|
30
|
-
expression: {
|
|
31
|
-
type: 'MemberExpression',
|
|
32
|
-
computed: false,
|
|
33
|
-
optional: false,
|
|
34
|
-
object: {
|
|
35
|
-
name: 'props',
|
|
36
|
-
type: 'Identifier',
|
|
37
|
-
},
|
|
38
|
-
property: {
|
|
39
|
-
name: 'children',
|
|
40
|
-
type: 'Identifier',
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
],
|
|
45
|
-
closingElement: {
|
|
46
|
-
type: 'JSXClosingElement',
|
|
47
|
-
name: {
|
|
48
|
-
type: 'JSXIdentifier',
|
|
49
|
-
name: '_Default',
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
openingElement: {
|
|
53
|
-
type: 'JSXOpeningElement',
|
|
54
|
-
selfClosing: false,
|
|
55
|
-
name: {
|
|
56
|
-
type: 'JSXIdentifier',
|
|
57
|
-
name: '_Default',
|
|
58
|
-
},
|
|
59
|
-
attributes: [
|
|
60
|
-
{
|
|
61
|
-
type: 'JSXSpreadAttribute',
|
|
62
|
-
argument: {
|
|
63
|
-
type: 'Identifier',
|
|
64
|
-
name: 'props',
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
type: 'JSXAttribute',
|
|
69
|
-
name: {
|
|
70
|
-
type: 'JSXIdentifier',
|
|
71
|
-
name: 'tableOfContents',
|
|
72
|
-
},
|
|
73
|
-
value: {
|
|
74
|
-
type: 'JSXExpressionContainer',
|
|
75
|
-
expression: {
|
|
76
|
-
type: 'Identifier',
|
|
77
|
-
name: 'tableOfContents',
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
type: 'JSXAttribute',
|
|
83
|
-
name: {
|
|
84
|
-
type: 'JSXIdentifier',
|
|
85
|
-
name: 'apiComponents',
|
|
86
|
-
},
|
|
87
|
-
value: {
|
|
88
|
-
type: 'JSXExpressionContainer',
|
|
89
|
-
expression: {
|
|
90
|
-
type: 'Identifier',
|
|
91
|
-
name: 'apiComponents',
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
],
|
|
96
|
-
},
|
|
97
|
-
},
|
|
98
|
-
params: [
|
|
99
|
-
{
|
|
100
|
-
type: 'Identifier',
|
|
101
|
-
name: 'props',
|
|
102
|
-
},
|
|
103
|
-
],
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
export default withLayouts;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import visit from 'unist-util-visit';
|
|
2
|
-
|
|
3
|
-
const withLinkRoles = () => {
|
|
4
|
-
return (tree) => {
|
|
5
|
-
visit(tree, 'element', (element) => {
|
|
6
|
-
if (['ol', 'ul'].includes(element.tagName)) {
|
|
7
|
-
element.properties.role = 'list';
|
|
8
|
-
}
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export default withLinkRoles;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { fromHtml } from 'hast-util-from-html';
|
|
2
|
-
import visit from 'unist-util-visit';
|
|
3
|
-
|
|
4
|
-
const withRawComponents = () => {
|
|
5
|
-
return (tree) => {
|
|
6
|
-
visit(tree, 'raw', (raw, i, parent) => {
|
|
7
|
-
const rawAst = fromHtml(raw.value, { fragment: true });
|
|
8
|
-
parent.children[i] = rawAst;
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export default withRawComponents;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { parse } from 'acorn';
|
|
2
|
-
|
|
3
|
-
const withStaticProps = (map) => {
|
|
4
|
-
return function transformer(tree) {
|
|
5
|
-
tree.children.push({
|
|
6
|
-
type: 'mdxjsEsm',
|
|
7
|
-
data: {
|
|
8
|
-
estree: parse(
|
|
9
|
-
`
|
|
10
|
-
export const getStaticProps = async () => {
|
|
11
|
-
return {
|
|
12
|
-
props: ${map},
|
|
13
|
-
}
|
|
14
|
-
}`,
|
|
15
|
-
{
|
|
16
|
-
sourceType: 'module',
|
|
17
|
-
ecmaVersion: 2020,
|
|
18
|
-
}
|
|
19
|
-
),
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export default withStaticProps;
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { toString } from 'hast-util-to-string';
|
|
2
|
-
import { refractor } from 'refractor';
|
|
3
|
-
import docker from 'refractor/lang/docker.js';
|
|
4
|
-
import jsx from 'refractor/lang/jsx.js';
|
|
5
|
-
import protobuf from 'refractor/lang/protobuf.js';
|
|
6
|
-
import visit from 'unist-util-visit';
|
|
7
|
-
|
|
8
|
-
refractor.register(jsx);
|
|
9
|
-
refractor.register(docker);
|
|
10
|
-
refractor.register(protobuf);
|
|
11
|
-
|
|
12
|
-
const withSyntaxHighlighting = (options) => {
|
|
13
|
-
options = options || {};
|
|
14
|
-
|
|
15
|
-
if (options.alias) {
|
|
16
|
-
refractor.alias(options.alias);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return (tree) => {
|
|
20
|
-
visit(tree, 'element', visitor);
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
function visitor(node, _, parent) {
|
|
24
|
-
if (!parent || parent.tagName !== 'pre' || node.tagName !== 'code') {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const lang = getLanguage(node);
|
|
29
|
-
|
|
30
|
-
if (lang === null) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
let result;
|
|
35
|
-
try {
|
|
36
|
-
parent.properties.className = (parent.properties.className || []).concat('language-' + lang);
|
|
37
|
-
result = refractor.highlight(toString(node), lang);
|
|
38
|
-
node.children = result.children;
|
|
39
|
-
} catch (err) {
|
|
40
|
-
if (options.ignoreMissing && /Unknown language/.test(err.message)) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
throw err;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
function getLanguage(node) {
|
|
49
|
-
const className = node.properties.className || [];
|
|
50
|
-
|
|
51
|
-
for (const classListItem of className) {
|
|
52
|
-
if (classListItem.slice(0, 9) === 'language-') {
|
|
53
|
-
return classListItem.slice(9).toLowerCase();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export default withSyntaxHighlighting;
|