@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.
@@ -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
- [divisionNav.division]: divisionNav.name,
66
- ...divisionNav.nav,
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
- if (division in newNav) {
100
- const items = newNav[division];
101
- newNav = {
102
- ...newNav,
103
- [division]: await Promise.all(items.map((item) => processNav(item))),
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
- [divisionNav.division]: divisionNav.name,
80
- ...divisionNav.nav,
81
- ...(divisionNav.division === 'group'
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
- if (division in updated) {
267
- const items = updated[division];
268
- updated = {
269
- ...updated,
270
- [division]: await Promise.all(items.map((child) => generateBulkNav(child))),
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 { DecoratedNavigationPage } from '@mintlify/models';
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 declare function generateSdkDivisionsFromDocsConfig(docsConfig: DocsConfig, loadReference: SdkReferenceLoader): Promise<GenerateSdkDivisionsResult>;
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 {};