@mintlify/prebuild 1.0.1237 → 1.0.1239
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/dist/prebuild/update/ConfigUpdater.d.ts +72 -54
- package/dist/prebuild/update/docsConfig/generateAsyncApiFromDocsConfig.js +34 -18
- package/dist/prebuild/update/docsConfig/generateOpenApiFromDocsConfig.js +37 -21
- package/dist/prebuild/update/docsConfig/generateSdkDivisions.d.ts +39 -3
- package/dist/prebuild/update/docsConfig/generateSdkDivisions.js +432 -48
- package/dist/prebuild/update/docsConfig/index.d.ts +11 -2
- package/dist/prebuild/update/docsConfig/index.js +53 -3
- package/dist/prebuild/update/index.d.ts +72 -54
- package/dist/prebuild/update/index.js +20 -3
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getAsyncApiDocumentFromUrl, optionallyAddLeadingSlash, isAllowedLocalSchemaUrl, } from '@mintlify/common';
|
|
2
|
+
import { readObjectArrayProperty } from '@mintlify/common/divisions/iterateObjectArrayProperty';
|
|
2
3
|
import { generateAsyncApiPagesForDocsConfig } from '@mintlify/scraping';
|
|
3
4
|
import { divisions } from '@mintlify/validation';
|
|
4
5
|
import * as path from 'path';
|
|
@@ -61,18 +62,18 @@ export const generateAsyncApiFromDocsConfig = async (navigation, asyncApiFiles,
|
|
|
61
62
|
}
|
|
62
63
|
const divisionNav = getDivisionNav(nav);
|
|
63
64
|
if (divisionNav?.division) {
|
|
65
|
+
const rest = divisionNav.nav;
|
|
66
|
+
if ('group' in rest) {
|
|
67
|
+
return {
|
|
68
|
+
...rest,
|
|
69
|
+
pages: 'pages' in rest && Array.isArray(rest.pages)
|
|
70
|
+
? [...rest.pages, ...allGeneratedNav]
|
|
71
|
+
: allGeneratedNav,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
64
74
|
return {
|
|
65
|
-
|
|
66
|
-
...
|
|
67
|
-
...(divisionNav.division === 'group'
|
|
68
|
-
? {
|
|
69
|
-
pages: 'pages' in nav && Array.isArray(nav.pages)
|
|
70
|
-
? [...nav.pages, ...allGeneratedNav]
|
|
71
|
-
: allGeneratedNav,
|
|
72
|
-
}
|
|
73
|
-
: {
|
|
74
|
-
groups: 'groups' in nav ? [...nav.groups, ...allGeneratedNav] : allGeneratedNav,
|
|
75
|
-
}),
|
|
75
|
+
...rest,
|
|
76
|
+
groups: 'groups' in rest ? [...rest.groups, ...allGeneratedNav] : allGeneratedNav,
|
|
76
77
|
};
|
|
77
78
|
}
|
|
78
79
|
}
|
|
@@ -96,23 +97,38 @@ export const generateAsyncApiFromDocsConfig = async (navigation, asyncApiFiles,
|
|
|
96
97
|
newNav.pages = processedPages;
|
|
97
98
|
}
|
|
98
99
|
for (const division of ['groups', ...divisions]) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
100
|
+
const items = readObjectArrayProperty(newNav, division);
|
|
101
|
+
if (!items)
|
|
102
|
+
continue;
|
|
103
|
+
newNav = Object.assign({}, newNav, {
|
|
104
|
+
[division]: await Promise.all(items.map((item) => processNav(item))),
|
|
105
|
+
});
|
|
106
106
|
}
|
|
107
107
|
return newNav;
|
|
108
108
|
}
|
|
109
109
|
const processedNavigation = await processNav(navigation);
|
|
110
|
+
if (!isTopLevelNavigation(processedNavigation)) {
|
|
111
|
+
throw new Error('AsyncAPI page generation produced a non-top-level navigation node');
|
|
112
|
+
}
|
|
110
113
|
navigation = processedNavigation;
|
|
111
114
|
return {
|
|
112
115
|
newNav: processedNavigation,
|
|
113
116
|
newAsyncApiFiles,
|
|
114
117
|
};
|
|
115
118
|
};
|
|
119
|
+
const DIVISION_NODE_KEYS = [
|
|
120
|
+
'group',
|
|
121
|
+
'tab',
|
|
122
|
+
'anchor',
|
|
123
|
+
'version',
|
|
124
|
+
'language',
|
|
125
|
+
'dropdown',
|
|
126
|
+
'product',
|
|
127
|
+
'item',
|
|
128
|
+
];
|
|
129
|
+
function isTopLevelNavigation(value) {
|
|
130
|
+
return DIVISION_NODE_KEYS.every((key) => !(key in value));
|
|
131
|
+
}
|
|
116
132
|
function getDivisionNav(nav) {
|
|
117
133
|
if ('asyncapi' in nav) {
|
|
118
134
|
const { asyncapi: _, ...updatedNav } = nav;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getOpenApiDocumentFromUrl, optionallyAddLeadingSlash, isAllowedLocalSchemaUrl, potentiallyParseOpenApiString, findNavGroup, findOpenApiPath, } from '@mintlify/common';
|
|
2
|
+
import { readObjectArrayProperty } from '@mintlify/common/divisions/iterateObjectArrayProperty';
|
|
2
3
|
import { generateOpenApiPagesForDocsConfig } from '@mintlify/scraping';
|
|
3
4
|
import { processOpenApiPath, processOpenApiWebhook, } from '@mintlify/scraping/bin/openapi/common.js';
|
|
4
5
|
import { divisions, } from '@mintlify/validation';
|
|
@@ -75,20 +76,20 @@ export const generateOpenApiFromDocsConfig = async (navigation, openApiFiles, pa
|
|
|
75
76
|
});
|
|
76
77
|
const divisionNav = getDivisionNav(nav);
|
|
77
78
|
if (divisionNav?.division) {
|
|
79
|
+
const rest = divisionNav.nav;
|
|
80
|
+
if ('group' in rest) {
|
|
81
|
+
return {
|
|
82
|
+
...rest,
|
|
83
|
+
pages: 'pages' in rest && Array.isArray(rest.pages)
|
|
84
|
+
? [...rest.pages, ...navFromGeneratedOpenApiPages]
|
|
85
|
+
: navFromGeneratedOpenApiPages,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
78
88
|
return {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
pages: 'pages' in nav && Array.isArray(nav.pages)
|
|
84
|
-
? [...nav.pages, ...navFromGeneratedOpenApiPages]
|
|
85
|
-
: navFromGeneratedOpenApiPages,
|
|
86
|
-
}
|
|
87
|
-
: {
|
|
88
|
-
groups: 'groups' in nav
|
|
89
|
-
? [...nav.groups, ...navFromGeneratedOpenApiPages]
|
|
90
|
-
: navFromGeneratedOpenApiPages,
|
|
91
|
-
}),
|
|
89
|
+
...rest,
|
|
90
|
+
groups: 'groups' in rest
|
|
91
|
+
? [...rest.groups, ...navFromGeneratedOpenApiPages]
|
|
92
|
+
: navFromGeneratedOpenApiPages,
|
|
92
93
|
};
|
|
93
94
|
}
|
|
94
95
|
}
|
|
@@ -251,7 +252,7 @@ export const generateOpenApiFromDocsConfig = async (navigation, openApiFiles, pa
|
|
|
251
252
|
if (processed)
|
|
252
253
|
updated = processed;
|
|
253
254
|
}
|
|
254
|
-
if ('pages' in updated) {
|
|
255
|
+
if ('pages' in updated && updated.pages) {
|
|
255
256
|
const updatedPages = await Promise.all(updated.pages.map(async (p) => {
|
|
256
257
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
257
258
|
if (typeof p === 'object' && p !== null && 'group' in p) {
|
|
@@ -263,23 +264,38 @@ export const generateOpenApiFromDocsConfig = async (navigation, openApiFiles, pa
|
|
|
263
264
|
updated.pages = updatedPages;
|
|
264
265
|
}
|
|
265
266
|
for (const division of ['groups', ...divisions]) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
267
|
+
const items = readObjectArrayProperty(updated, division);
|
|
268
|
+
if (!items)
|
|
269
|
+
continue;
|
|
270
|
+
updated = Object.assign({}, updated, {
|
|
271
|
+
[division]: await Promise.all(items.map((child) => generateBulkNav(child))),
|
|
272
|
+
});
|
|
273
273
|
}
|
|
274
274
|
return updated;
|
|
275
275
|
}
|
|
276
276
|
const processedNavigation = await generateBulkNav(navAfterExplicit);
|
|
277
|
+
if (!isTopLevelNavigation(processedNavigation)) {
|
|
278
|
+
throw new Error('OpenAPI page generation produced a non-top-level navigation node');
|
|
279
|
+
}
|
|
277
280
|
navigation = processedNavigation;
|
|
278
281
|
return {
|
|
279
282
|
newNav: processedNavigation,
|
|
280
283
|
newOpenApiFiles,
|
|
281
284
|
};
|
|
282
285
|
};
|
|
286
|
+
const DIVISION_NODE_KEYS = [
|
|
287
|
+
'group',
|
|
288
|
+
'tab',
|
|
289
|
+
'anchor',
|
|
290
|
+
'version',
|
|
291
|
+
'language',
|
|
292
|
+
'dropdown',
|
|
293
|
+
'product',
|
|
294
|
+
'item',
|
|
295
|
+
];
|
|
296
|
+
function isTopLevelNavigation(value) {
|
|
297
|
+
return DIVISION_NODE_KEYS.every((key) => !(key in value));
|
|
298
|
+
}
|
|
283
299
|
function getDivisionNav(nav) {
|
|
284
300
|
if ('openapi' in nav) {
|
|
285
301
|
const { openapi: _, ...updatedNav } = nav;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type DecoratedNavigationPage, type ResolvedSdkTarget, type SdkTarget } from '@mintlify/models';
|
|
2
2
|
import { type SdkFormat, type SdkReference } from '@mintlify/scraping';
|
|
3
3
|
import type { DocsConfig } from '@mintlify/validation';
|
|
4
4
|
import { type LoadRemoteFileOptions } from './loadRemoteGraphqlSdl.js';
|
|
@@ -15,16 +15,52 @@ export type GeneratedSdkPage = {
|
|
|
15
15
|
content: string;
|
|
16
16
|
format: SdkFormat;
|
|
17
17
|
source: string;
|
|
18
|
+
sdk?: ResolvedSdkTarget;
|
|
19
|
+
autogeneratedBySdk?: boolean;
|
|
20
|
+
generatedBody?: string;
|
|
18
21
|
};
|
|
19
22
|
export type GenerateSdkDivisionsResult = {
|
|
20
23
|
newDocsConfig: DocsConfig;
|
|
21
24
|
pagesAcc: Record<string, DecoratedNavigationPage>;
|
|
22
25
|
generatedPages: GeneratedSdkPage[];
|
|
23
26
|
generatedRoutes: string[];
|
|
27
|
+
inheritedSdkBySlug: Record<string, SdkConfig>;
|
|
24
28
|
};
|
|
25
29
|
export type SdkReferenceLoader = (config: SdkConfig) => Promise<SdkReference>;
|
|
26
|
-
export
|
|
30
|
+
export type GenerateSdkDivisionsOptions = {
|
|
31
|
+
pageMetadataBySlug?: Record<string, {
|
|
32
|
+
sdk?: unknown;
|
|
33
|
+
}>;
|
|
34
|
+
};
|
|
35
|
+
export declare function navigationHasSdkConfig(value: unknown): boolean;
|
|
36
|
+
export declare function generateSdkDivisionsFromDocsConfig(docsConfig: DocsConfig, loadReference: SdkReferenceLoader, options?: GenerateSdkDivisionsOptions): Promise<GenerateSdkDivisionsResult>;
|
|
37
|
+
export declare function composeSdkFrontmatterPage(args: {
|
|
38
|
+
slug: string;
|
|
39
|
+
authorContent: string;
|
|
40
|
+
metadata: {
|
|
41
|
+
sdk?: unknown;
|
|
42
|
+
title?: unknown;
|
|
43
|
+
description?: unknown;
|
|
44
|
+
tag?: unknown;
|
|
45
|
+
};
|
|
46
|
+
loadReference: SdkReferenceLoader;
|
|
47
|
+
inherited?: SdkConfig;
|
|
48
|
+
}): Promise<GeneratedSdkPage | undefined>;
|
|
49
|
+
export declare function isSdkFrontmatterValue(value: unknown): boolean;
|
|
50
|
+
export declare function readContainedMarkdown(contentRoot: string, slug: string): Promise<{
|
|
51
|
+
content: string;
|
|
52
|
+
extension: '.mdx' | '.md';
|
|
53
|
+
} | undefined>;
|
|
54
|
+
export type { SdkTarget };
|
|
27
55
|
export declare const isRemoteSdkSource: (source: string) => boolean;
|
|
28
56
|
export declare function loadSdkReferenceSource(config: SdkConfig, contentDirectoryPath: string, remoteOptions?: LoadRemoteFileOptions): Promise<SdkReference>;
|
|
57
|
+
export declare function writeSdkFrontmatterPages({ contentDirectoryPath, inheritedSdkBySlug, pageMetadataBySlug, loadReference, targetDir, }: {
|
|
58
|
+
contentDirectoryPath: string;
|
|
59
|
+
inheritedSdkBySlug: Record<string, SdkConfig>;
|
|
60
|
+
pageMetadataBySlug: Record<string, {
|
|
61
|
+
sdk?: unknown;
|
|
62
|
+
}>;
|
|
63
|
+
loadReference: SdkReferenceLoader;
|
|
64
|
+
targetDir?: string;
|
|
65
|
+
}): Promise<void>;
|
|
29
66
|
export declare function writeSdkArtifacts(result: GenerateSdkDivisionsResult, targetDir?: string): Promise<void>;
|
|
30
|
-
export {};
|