@mintlify/prebuild 1.0.1285 → 1.0.1287

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,7 +1,8 @@
1
+ import type { OverlayRegistry } from '@mintlify/common';
1
2
  import type { OpenApiFile, DecoratedNavigationPage } from '@mintlify/models';
2
3
  import { DocsConfig } from '@mintlify/validation';
3
4
  import type { InvalidSpecFile } from '../../invalidSpecFiles.js';
4
- export declare const generateOpenApiDivisions: (docsConfig: DocsConfig, openApiFiles: OpenApiFile[], targetDir?: string, localSchema?: boolean, invalidSpecFiles?: InvalidSpecFile[], graphqlPages?: Record<string, DecoratedNavigationPage>, deferWrites?: boolean) => Promise<{
5
+ export declare const generateOpenApiDivisions: (docsConfig: DocsConfig, openApiFiles: OpenApiFile[], targetDir?: string, localSchema?: boolean, invalidSpecFiles?: InvalidSpecFile[], graphqlPages?: Record<string, DecoratedNavigationPage>, deferWrites?: boolean, overlayRegistry?: OverlayRegistry) => Promise<{
5
6
  newDocsConfig: DocsConfig;
6
7
  pagesAcc: Record<string, DecoratedNavigationPage>;
7
8
  openApiFiles: OpenApiFile[];
@@ -2,8 +2,8 @@ import fse from 'fs-extra';
2
2
  import { getOpenApiFilesFromConfig } from '../read/getOpenApiFilesFromConfig.js';
3
3
  import { assertNoGeneratedRouteCollisions } from './generatedRouteCollisions.js';
4
4
  import { generateOpenApiFromDocsConfig } from './generateOpenApiFromDocsConfig.js';
5
- export const generateOpenApiDivisions = async (docsConfig, openApiFiles, targetDir, localSchema, invalidSpecFiles, graphqlPages, deferWrites = false) => {
6
- const openapiFilesFromDocsConfig = await getOpenApiFilesFromConfig('docs', docsConfig, localSchema);
5
+ export const generateOpenApiDivisions = async (docsConfig, openApiFiles, targetDir, localSchema, invalidSpecFiles, graphqlPages, deferWrites = false, overlayRegistry) => {
6
+ const openapiFilesFromDocsConfig = await getOpenApiFilesFromConfig('docs', docsConfig, localSchema, overlayRegistry);
7
7
  openApiFiles.push(...openapiFilesFromDocsConfig);
8
8
  const pagesAcc = {};
9
9
  const writes = [];
@@ -14,6 +14,7 @@ export const generateOpenApiDivisions = async (docsConfig, openApiFiles, targetD
14
14
  targetDir,
15
15
  localSchema,
16
16
  invalidSpecFiles,
17
+ overlayRegistry,
17
18
  ...(planWrites
18
19
  ? {
19
20
  writeFile: (filename, content) => {
@@ -1,3 +1,4 @@
1
+ import { type OverlayRegistry } from '@mintlify/common';
1
2
  import type { OpenApiFile, DecoratedNavigationPage } from '@mintlify/models';
2
3
  import { NavigationConfig } from '@mintlify/validation';
3
4
  import { type InvalidSpecFile } from '../../invalidSpecFiles.js';
@@ -9,6 +10,9 @@ export declare const generateOpenApiFromDocsConfig: (navigation: NavigationConfi
9
10
  invalidSpecFiles?: InvalidSpecFile[];
10
11
  mountPaths?: string[];
11
12
  writeFile?: (filename: string, content: string) => void | Promise<void>;
13
+ overlayRegistry?: OverlayRegistry;
14
+ /** SSRF-safe fetch override for hosted spec URLs; supplied by server environments. */
15
+ fetchRemoteDocument?: (url: string) => Promise<unknown>;
12
16
  }) => Promise<{
13
17
  newNav: NavigationConfig;
14
18
  newOpenApiFiles: OpenApiFile[];
@@ -1,4 +1,4 @@
1
- import { getOpenApiDocumentFromUrl, optionallyAddLeadingSlash, isAllowedLocalSchemaUrl, potentiallyParseOpenApiString, findNavGroup, findOpenApiPath, } from '@mintlify/common';
1
+ import { getOpenApiDocumentFromUrl, optionallyAddLeadingSlash, isAllowedLocalSchemaUrl, potentiallyParseOpenApiString, findNavGroup, findOpenApiPath, resolveOverlaysForSpec, } from '@mintlify/common';
2
2
  import { readObjectArrayProperty } from '@mintlify/common/divisions/iterateObjectArrayProperty';
3
3
  import { generateOpenApiPagesForDocsConfig } from '@mintlify/scraping';
4
4
  import { processOpenApiPath, processOpenApiWebhook, } from '@mintlify/scraping/bin/openapi/common.js';
@@ -19,7 +19,7 @@ const getMountPathForPath = (candidatePath, mountPaths) => {
19
19
  };
20
20
  const resolveMountPath = (specPath, outputDir, mountPaths) => getMountPathForPath(specPath, mountPaths) || getMountPathForPath(outputDir, mountPaths);
21
21
  export const generateOpenApiFromDocsConfig = async (navigation, openApiFiles, pagesAcc, opts) => {
22
- const { overwrite, writeFiles, targetDir, localSchema, invalidSpecFiles, mountPaths = [], writeFile, } = opts;
22
+ const { overwrite, writeFiles, targetDir, localSchema, invalidSpecFiles, mountPaths = [], writeFile, overlayRegistry, fetchRemoteDocument, } = opts;
23
23
  const newOpenApiFiles = [];
24
24
  const openApiFilePromises = new Map();
25
25
  async function processOpenApiInNav(nav) {
@@ -31,7 +31,14 @@ export const generateOpenApiFromDocsConfig = async (navigation, openApiFiles, pa
31
31
  }
32
32
  else if (Array.isArray(nav.openapi) && nav.openapi.length > 0) {
33
33
  // TODO: handle multiple openapi files
34
- openapi = nav.openapi[0];
34
+ const firstEntry = nav.openapi[0];
35
+ if (typeof firstEntry === 'string') {
36
+ openapi = firstEntry;
37
+ }
38
+ else if (firstEntry != undefined) {
39
+ openapi = firstEntry.source;
40
+ outputDir = firstEntry.directory ?? DEFAULT_OUTPUT_DIR;
41
+ }
35
42
  }
36
43
  else if (typeof nav.openapi === 'object' && 'source' in nav.openapi) {
37
44
  openapi = nav.openapi.source;
@@ -42,7 +49,7 @@ export const generateOpenApiFromDocsConfig = async (navigation, openApiFiles, pa
42
49
  let openApiFile = undefined;
43
50
  if (isAllowedLocalSchemaUrl(openapi, localSchema)) {
44
51
  if (!openApiFilePromises.has(openapi)) {
45
- const promise = createOpenApiFile(openapi);
52
+ const promise = createOpenApiFile(openapi, overlayRegistry, fetchRemoteDocument);
46
53
  openApiFilePromises.set(openapi, promise);
47
54
  openApiFile = await promise;
48
55
  newOpenApiFiles.push(openApiFile);
@@ -102,7 +109,14 @@ export const generateOpenApiFromDocsConfig = async (navigation, openApiFiles, pa
102
109
  return { source: openapiProp, directory: undefined };
103
110
  }
104
111
  else if (Array.isArray(openapiProp) && openapiProp.length > 0) {
105
- return { source: openapiProp[0], directory: undefined };
112
+ const firstEntry = openapiProp[0];
113
+ if (typeof firstEntry === 'string') {
114
+ return { source: firstEntry, directory: undefined };
115
+ }
116
+ if (firstEntry != undefined) {
117
+ return { source: firstEntry.source, directory: firstEntry.directory };
118
+ }
119
+ return { source: undefined, directory: undefined };
106
120
  }
107
121
  else if (typeof openapiProp === 'object' &&
108
122
  'source' in openapiProp &&
@@ -150,7 +164,7 @@ export const generateOpenApiFromDocsConfig = async (navigation, openApiFiles, pa
150
164
  if (openapiPath) {
151
165
  if (isAllowedLocalSchemaUrl(openapiPath, localSchema)) {
152
166
  if (!openApiFilePromises.has(openapiPath)) {
153
- const promise = createOpenApiFile(openapiPath);
167
+ const promise = createOpenApiFile(openapiPath, overlayRegistry, fetchRemoteDocument);
154
168
  openApiFilePromises.set(openapiPath, promise);
155
169
  openApiFile = await promise;
156
170
  newOpenApiFiles.push(openApiFile);
@@ -318,9 +332,12 @@ function getDivisionNav(nav) {
318
332
  }
319
333
  return undefined;
320
334
  }
321
- async function createOpenApiFile(openApiUrl) {
335
+ async function createOpenApiFile(openApiUrl, overlayRegistry, fetchRemoteDocument) {
322
336
  try {
323
- const document = await getOpenApiDocumentFromUrl(openApiUrl);
337
+ const overlays = overlayRegistry
338
+ ? await resolveOverlaysForSpec(overlayRegistry, openApiUrl)
339
+ : undefined;
340
+ const document = await getOpenApiDocumentFromUrl(openApiUrl, { overlays, fetchRemoteDocument });
324
341
  return {
325
342
  filename: openApiUrl,
326
343
  spec: document,
@@ -1,9 +1,9 @@
1
- import { AsyncAPIFile } from '@mintlify/common';
1
+ import { AsyncAPIFile, type OverlayRegistry } from '@mintlify/common';
2
2
  import { OpenApiFile, DecoratedNavigationPage } from '@mintlify/models';
3
3
  import type { SdkFormat } from '@mintlify/scraping';
4
4
  import { DocsConfig } from '@mintlify/validation';
5
5
  import type { InvalidSpecFile } from '../../invalidSpecFiles.js';
6
- export declare function updateDocsConfigFile({ contentDirectoryPath, openApiFiles, asyncApiFiles, docsConfig, localSchema, disableOpenApi, strict, invalidSpecFiles, allowSourceRefs, }: {
6
+ export declare function updateDocsConfigFile({ contentDirectoryPath, openApiFiles, asyncApiFiles, docsConfig, localSchema, disableOpenApi, strict, invalidSpecFiles, allowSourceRefs, overlayRegistry, }: {
7
7
  contentDirectoryPath: string;
8
8
  openApiFiles: OpenApiFile[];
9
9
  asyncApiFiles: AsyncAPIFile[];
@@ -13,6 +13,7 @@ export declare function updateDocsConfigFile({ contentDirectoryPath, openApiFile
13
13
  strict?: boolean;
14
14
  invalidSpecFiles?: InvalidSpecFile[];
15
15
  allowSourceRefs?: boolean;
16
+ overlayRegistry?: OverlayRegistry;
16
17
  }): Promise<{
17
18
  docsConfig: DocsConfig;
18
19
  pagesAcc: Record<string, DecoratedNavigationPage>;
@@ -54,7 +54,7 @@ async function scanSdkFrontmatterMetadata(contentDirectoryPath, navigation) {
54
54
  }));
55
55
  return metadataBySlug;
56
56
  }
57
- export async function updateDocsConfigFile({ contentDirectoryPath, openApiFiles, asyncApiFiles, docsConfig, localSchema, disableOpenApi, strict, invalidSpecFiles, allowSourceRefs, }) {
57
+ export async function updateDocsConfigFile({ contentDirectoryPath, openApiFiles, asyncApiFiles, docsConfig, localSchema, disableOpenApi, strict, invalidSpecFiles, allowSourceRefs, overlayRegistry, }) {
58
58
  const configPath = await getConfigPath(contentDirectoryPath, 'docs');
59
59
  if (configPath == null && docsConfig == null) {
60
60
  throw Error(NOT_CORRECT_PATH_ERROR);
@@ -71,7 +71,7 @@ export async function updateDocsConfigFile({ contentDirectoryPath, openApiFiles,
71
71
  const graphqlResult = await generateGraphqlDivisionsFromDocsConfig(docsConfig, (source) => loadGraphqlSdlSource(source, contentDirectoryPath));
72
72
  const { newDocsConfig: docsConfigWithGraphqlPages, pagesAcc: pagesAccWithGraphqlPages } = graphqlResult;
73
73
  const { newDocsConfig: docsConfigWithOpenApiPages, pagesAcc: pagesAccWithOpenApiPages, openApiFiles: newOpenApiFiles, flushWrites: flushOpenApiWrites, } = !disableOpenApi
74
- ? await generateOpenApiDivisions(docsConfigWithGraphqlPages, openApiFiles, undefined, localSchema, invalidSpecFiles, pagesAccWithGraphqlPages, true)
74
+ ? await generateOpenApiDivisions(docsConfigWithGraphqlPages, openApiFiles, undefined, localSchema, invalidSpecFiles, pagesAccWithGraphqlPages, true, overlayRegistry)
75
75
  : {
76
76
  newDocsConfig: docsConfigWithGraphqlPages,
77
77
  pagesAcc: {},