@mintlify/prebuild 1.0.425 → 1.0.427

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,5 +1,6 @@
1
+ import { AsyncAPIFile } from '@mintlify/common/asyncapi';
1
2
  import { OpenApiFile, DecoratedNavigationPage } from '@mintlify/models';
2
- export declare const createPage: (pagePath: string, pageContent: string, contentDirectoryPath: string, openApiFiles: OpenApiFile[], suppressErrLog?: boolean) => Promise<{
3
+ export declare const createPage: (pagePath: string, pageContent: string, contentDirectoryPath: string, openApiFiles: OpenApiFile[], asyncApiFiles: AsyncAPIFile[], suppressErrLog?: boolean) => Promise<{
3
4
  pageMetadata: DecoratedNavigationPage;
4
5
  pageContent: string;
5
6
  slug: string;
@@ -1,11 +1,11 @@
1
1
  import { getDecoratedNavPageAndSlug } from '@mintlify/common';
2
2
  import { getLocationErrString } from '../errorMessages/getLocationErrString.js';
3
3
  import { preparseMdx } from './preparseMdx/index.js';
4
- export const createPage = async (pagePath, pageContent, contentDirectoryPath, openApiFiles, suppressErrLog = false) => {
4
+ export const createPage = async (pagePath, pageContent, contentDirectoryPath, openApiFiles, asyncApiFiles, suppressErrLog = false) => {
5
5
  let pageMetadata;
6
6
  let slug;
7
7
  try {
8
- const { pageMetadata: metadata, slug: pageSlug } = getDecoratedNavPageAndSlug(pagePath, pageContent, openApiFiles);
8
+ const { pageMetadata: metadata, slug: pageSlug } = getDecoratedNavPageAndSlug(pagePath, pageContent, openApiFiles, asyncApiFiles);
9
9
  pageMetadata = metadata;
10
10
  slug = pageSlug;
11
11
  pageContent = await preparseMdx(pageContent, contentDirectoryPath, pagePath, suppressErrLog);
@@ -0,0 +1,8 @@
1
+ import { AsyncAPIFile } from '@mintlify/common/asyncapi';
2
+ import { DecoratedNavigationPage } from '@mintlify/models';
3
+ import { DocsConfig } from '@mintlify/validation';
4
+ export declare const generateAsyncApiDivisions: (docsConfig: DocsConfig, asyncApiFiles: AsyncAPIFile[], targetDir?: string) => Promise<{
5
+ newDocsConfig: DocsConfig;
6
+ pagesAcc: Record<string, DecoratedNavigationPage>;
7
+ asyncApiFiles: AsyncAPIFile[];
8
+ }>;
@@ -0,0 +1,16 @@
1
+ import { getAsyncApiFilesFromConfig } from '../read/getAsyncApiFilesFromConfig.js';
2
+ import { generateAsyncApiFromDocsConfig } from './generateAsyncApiFromDocsConfig.js';
3
+ export const generateAsyncApiDivisions = async (docsConfig, asyncApiFiles, targetDir) => {
4
+ const asyncApiFilesFromDocsConfig = await getAsyncApiFilesFromConfig(docsConfig);
5
+ const pagesAcc = {};
6
+ const { newNav, newAsyncApiFiles } = await generateAsyncApiFromDocsConfig(docsConfig.navigation, asyncApiFiles, pagesAcc, {
7
+ overwrite: true,
8
+ writeFiles: true,
9
+ targetDir,
10
+ });
11
+ return {
12
+ newDocsConfig: { ...docsConfig, navigation: newNav },
13
+ pagesAcc,
14
+ asyncApiFiles: [...asyncApiFiles, ...asyncApiFilesFromDocsConfig, ...newAsyncApiFiles],
15
+ };
16
+ };
@@ -0,0 +1,11 @@
1
+ import { AsyncAPIFile } from '@mintlify/common/asyncapi';
2
+ import type { DecoratedNavigationPage } from '@mintlify/models';
3
+ import { NavigationConfig } from '@mintlify/validation';
4
+ export declare const generateAsyncApiFromDocsConfig: (navigation: NavigationConfig, asyncApiFiles: AsyncAPIFile[], pagesAcc: Record<string, DecoratedNavigationPage>, opts: {
5
+ overwrite?: boolean;
6
+ writeFiles: boolean;
7
+ targetDir?: string;
8
+ }) => Promise<{
9
+ newNav: NavigationConfig;
10
+ newAsyncApiFiles: AsyncAPIFile[];
11
+ }>;
@@ -0,0 +1,136 @@
1
+ import { optionallyAddLeadingSlash } from '@mintlify/common';
2
+ import { getAsyncApiDocumentFromUrl } from '@mintlify/common/asyncapi';
3
+ import { generateAsyncApiPagesForDocsConfig } from '@mintlify/scraping';
4
+ import { divisions } from '@mintlify/validation';
5
+ import * as path from 'path';
6
+ const DEFAULT_OUTPUT_DIR = 'api-reference';
7
+ export const generateAsyncApiFromDocsConfig = async (navigation, asyncApiFiles, pagesAcc, opts) => {
8
+ const { overwrite, writeFiles, targetDir } = opts;
9
+ const newAsyncApiFiles = [];
10
+ async function processAsyncApiInNav(nav) {
11
+ let outputDir = DEFAULT_OUTPUT_DIR;
12
+ let asyncApis = [];
13
+ if ('asyncapi' in nav) {
14
+ if (typeof nav.asyncapi === 'string') {
15
+ asyncApis = [nav.asyncapi];
16
+ }
17
+ else if (Array.isArray(nav.asyncapi)) {
18
+ asyncApis = nav.asyncapi;
19
+ }
20
+ else if (typeof nav.asyncapi === 'object' && 'source' in nav.asyncapi) {
21
+ asyncApis = [nav.asyncapi.source];
22
+ outputDir = nav.asyncapi.directory ?? DEFAULT_OUTPUT_DIR;
23
+ }
24
+ }
25
+ if (asyncApis.length > 0) {
26
+ const processedAsyncApiFiles = [];
27
+ for (const asyncApi of asyncApis) {
28
+ let asyncApiFile = undefined;
29
+ if (asyncApi.startsWith('https://')) {
30
+ asyncApiFile = await createAsyncApiFile(asyncApi);
31
+ newAsyncApiFiles.push(asyncApiFile);
32
+ }
33
+ else {
34
+ asyncApiFile = asyncApiFiles.find((file) => file.originalFileLocation === optionallyAddLeadingSlash(asyncApi));
35
+ }
36
+ if (!asyncApiFile) {
37
+ if (asyncApi === asyncApis[0] &&
38
+ asyncApiFiles.length > 0 &&
39
+ !asyncApiFiles[0]?.spec.channels().length) {
40
+ throw new Error('No channels defined');
41
+ }
42
+ throw new Error(`AsyncAPI file ${asyncApi} defined in ${getDivisionNav(nav)
43
+ ?.division} in your docs.json does not exist`);
44
+ }
45
+ processedAsyncApiFiles.push(asyncApiFile);
46
+ }
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ let allGeneratedNav = [];
49
+ for (const asyncApiFile of processedAsyncApiFiles) {
50
+ const { pagesAcc: pagesAccFromGeneratedAsyncApiPages, nav: navFromGeneratedAsyncApiPages } = await generateAsyncApiPagesForDocsConfig(asyncApiFile.spec, {
51
+ asyncApiFilePath: asyncApiFile.originalFileLocation,
52
+ writeFiles,
53
+ outDir: outputDir,
54
+ outDirBasePath: path.join(targetDir ?? '', 'src', '_props'),
55
+ overwrite,
56
+ });
57
+ Object.entries(pagesAccFromGeneratedAsyncApiPages).forEach(([key, value]) => {
58
+ pagesAcc[key] = value;
59
+ });
60
+ allGeneratedNav = [...allGeneratedNav, ...navFromGeneratedAsyncApiPages];
61
+ }
62
+ const divisionNav = getDivisionNav(nav);
63
+ if (divisionNav?.division) {
64
+ return {
65
+ [divisionNav.division]: divisionNav.name,
66
+ ...divisionNav.nav,
67
+ ...(divisionNav.division === 'group'
68
+ ? {
69
+ pages: 'pages' in nav ? [...nav.pages, ...allGeneratedNav] : allGeneratedNav,
70
+ }
71
+ : {
72
+ groups: 'groups' in nav ? [...nav.groups, ...allGeneratedNav] : allGeneratedNav,
73
+ }),
74
+ };
75
+ }
76
+ }
77
+ return null;
78
+ }
79
+ async function processNav(nav) {
80
+ const processedNav = await processAsyncApiInNav(nav);
81
+ if (processedNav) {
82
+ return processedNav;
83
+ }
84
+ let newNav = { ...nav };
85
+ for (const division of ['groups', ...divisions]) {
86
+ if (division in newNav) {
87
+ const items = newNav[division];
88
+ newNav = {
89
+ ...newNav,
90
+ [division]: await Promise.all(items.map((item) => processNav(item))),
91
+ };
92
+ }
93
+ }
94
+ return newNav;
95
+ }
96
+ const processedNavigation = await processNav(navigation);
97
+ navigation = processedNavigation;
98
+ return {
99
+ newNav: processedNavigation,
100
+ newAsyncApiFiles,
101
+ };
102
+ };
103
+ function getDivisionNav(nav) {
104
+ if ('asyncapi' in nav) {
105
+ const { asyncapi: _, ...updatedNav } = nav;
106
+ const divisionMap = {
107
+ group: 'group',
108
+ anchor: 'anchor',
109
+ tab: 'tab',
110
+ version: 'version',
111
+ language: 'language',
112
+ dropdown: 'dropdown',
113
+ };
114
+ const divisionType = Object.keys(divisionMap).find((key) => key in updatedNav);
115
+ return {
116
+ division: divisionMap[divisionType],
117
+ name: updatedNav[divisionType],
118
+ nav: updatedNav,
119
+ };
120
+ }
121
+ return undefined;
122
+ }
123
+ async function createAsyncApiFile(url) {
124
+ try {
125
+ const document = await getAsyncApiDocumentFromUrl(url);
126
+ return {
127
+ filename: url,
128
+ spec: document,
129
+ originalFileLocation: url,
130
+ };
131
+ }
132
+ catch (err) {
133
+ console.error(err);
134
+ throw err;
135
+ }
136
+ }
@@ -1,10 +1,11 @@
1
1
  import { AsyncAPIFile } from '@mintlify/common/asyncapi';
2
2
  import { OpenApiFile, DecoratedNavigationPage } from '@mintlify/models';
3
3
  import { DocsConfig } from '@mintlify/validation';
4
- export declare function updateDocsConfigFile(contentDirectoryPath: string, openApiFiles: OpenApiFile[], _asyncApiFiles: AsyncAPIFile[], docsConfig?: DocsConfig): Promise<{
4
+ export declare function updateDocsConfigFile(contentDirectoryPath: string, openApiFiles: OpenApiFile[], asyncApiFiles: AsyncAPIFile[], docsConfig?: DocsConfig): Promise<{
5
5
  docsConfig: DocsConfig;
6
6
  pagesAcc: Record<string, DecoratedNavigationPage>;
7
7
  newOpenApiFiles: OpenApiFile[];
8
+ newAsyncApiFiles: AsyncAPIFile[];
8
9
  }>;
9
10
  export { generateOpenApiDivisions } from './generateOpenApiDivisions.js';
10
11
  export { generateOpenApiFromDocsConfig } from './generateOpenApiFromDocsConfig.js';
@@ -1,7 +1,8 @@
1
1
  import { getConfigPath } from '../../../utils.js';
2
2
  import { DocsConfigUpdater } from '../ConfigUpdater.js';
3
+ import { generateAsyncApiDivisions } from './generateAsyncApiDivisions.js';
3
4
  import { generateOpenApiDivisions } from './generateOpenApiDivisions.js';
4
- export async function updateDocsConfigFile(contentDirectoryPath, openApiFiles, _asyncApiFiles, docsConfig) {
5
+ export async function updateDocsConfigFile(contentDirectoryPath, openApiFiles, asyncApiFiles, docsConfig) {
5
6
  const configPath = await getConfigPath(contentDirectoryPath, 'docs');
6
7
  if (configPath == null && docsConfig == null) {
7
8
  throw Error('Must be run in a directory where a docs.json file exists.');
@@ -12,9 +13,11 @@ export async function updateDocsConfigFile(contentDirectoryPath, openApiFiles, _
12
13
  if (docsConfig == null) {
13
14
  throw Error('Must be run in a directory where a docs.json file exists.');
14
15
  }
15
- const { newDocsConfig, pagesAcc, openApiFiles: newOpenApiFiles, } = await generateOpenApiDivisions(docsConfig, openApiFiles);
16
+ const { newDocsConfig: docsConfigWithOpenApiPages, pagesAcc: pagesAccWithOpenApiPages, openApiFiles: newOpenApiFiles, } = await generateOpenApiDivisions(docsConfig, openApiFiles);
17
+ const { newDocsConfig, pagesAcc: pagesAccWithAsyncApiPages, asyncApiFiles: newAsyncApiFiles, } = await generateAsyncApiDivisions(docsConfigWithOpenApiPages, asyncApiFiles);
18
+ const pagesAcc = { ...pagesAccWithOpenApiPages, ...pagesAccWithAsyncApiPages };
16
19
  await DocsConfigUpdater.writeConfigFile(newDocsConfig);
17
- return { docsConfig: newDocsConfig, pagesAcc, newOpenApiFiles };
20
+ return { docsConfig: newDocsConfig, pagesAcc, newOpenApiFiles, newAsyncApiFiles };
18
21
  }
19
22
  export { generateOpenApiDivisions } from './generateOpenApiDivisions.js';
20
23
  export { generateOpenApiFromDocsConfig } from './generateOpenApiFromDocsConfig.js';
@@ -6,6 +6,7 @@ import { readPageContents, readSnippetsV2Contents } from './read/readContent.js'
6
6
  import { resolveImportsAndWriteFiles } from './resolveImportsAndWriteFiles.js';
7
7
  import { updateFavicons } from './updateFavicons.js';
8
8
  import { updateGeneratedDocsNav, updateGeneratedNav } from './updateGeneratedNav.js';
9
+ import { writeAsyncApiFiles } from './write/writeAsyncApiFiles.js';
9
10
  import { writeFiles } from './write/writeFiles.js';
10
11
  import { writeOpenApiFiles } from './write/writeOpenApiFiles.js';
11
12
  export const update = async ({ contentDirectoryPath, staticFilenames, openApiFiles, asyncApiFiles, contentFilenames, snippets, snippetV2Filenames, docsConfigPath, }) => {
@@ -13,16 +14,29 @@ export const update = async ({ contentDirectoryPath, staticFilenames, openApiFil
13
14
  // we used the original mint config without openapi pages injected
14
15
  // because we will do it in `updateDocsConfigFile`, this will avoid duplicated openapi pages
15
16
  const docsConfig = mintConfigResult != null ? upgradeToDocsConfig(mintConfigResult.originalMintConfig) : undefined;
16
- const { docsConfig: newDocsConfig, pagesAcc, newOpenApiFiles, } = await updateDocsConfigFile(contentDirectoryPath, openApiFiles, asyncApiFiles, docsConfigPath ? undefined : docsConfig);
17
- const pagePromises = readPageContents(contentDirectoryPath, newOpenApiFiles, contentFilenames, pagesAcc);
17
+ const { docsConfig: newDocsConfig, pagesAcc, newOpenApiFiles, newAsyncApiFiles, } = await updateDocsConfigFile(contentDirectoryPath, openApiFiles, asyncApiFiles, docsConfigPath ? undefined : docsConfig);
18
+ const pagePromises = readPageContents({
19
+ contentDirectoryPath,
20
+ openApiFiles: newOpenApiFiles,
21
+ asyncApiFiles: newAsyncApiFiles,
22
+ contentFilenames,
23
+ pagesAcc,
24
+ });
18
25
  const snippetV2Promises = readSnippetsV2Contents(contentDirectoryPath, snippetV2Filenames);
19
26
  const [snippetV2Contents, { mdxFilesWithNoImports, filesWithImports }] = await Promise.all([
20
27
  snippetV2Promises,
21
28
  pagePromises,
22
29
  ]);
23
30
  await Promise.all([
24
- resolveImportsAndWriteFiles(openApiFiles, pagesAcc, snippetV2Contents, filesWithImports),
31
+ resolveImportsAndWriteFiles({
32
+ openApiFiles: newOpenApiFiles,
33
+ asyncApiFiles: newAsyncApiFiles,
34
+ pagesAcc,
35
+ snippetsV2: snippetV2Contents,
36
+ filesWithImports,
37
+ }),
25
38
  writeOpenApiFiles(newOpenApiFiles),
39
+ writeAsyncApiFiles(newAsyncApiFiles),
26
40
  updateFavicons(newDocsConfig, contentDirectoryPath),
27
41
  ...writeMdxFilesWithNoImports(mdxFilesWithNoImports),
28
42
  ...writeFiles(contentDirectoryPath, 'public', [...staticFilenames, ...snippets]),
@@ -0,0 +1,3 @@
1
+ import { AsyncAPIFile } from '@mintlify/common/asyncapi';
2
+ import { DocsConfig } from '@mintlify/validation';
3
+ export declare const getAsyncApiFilesFromConfig: (config: DocsConfig) => Promise<AsyncAPIFile[]>;
@@ -0,0 +1,30 @@
1
+ import { getAsyncApiDocumentFromUrl } from '@mintlify/common/asyncapi';
2
+ export const getAsyncApiFilesFromConfig = async (config) => {
3
+ const asyncApiConfig = config.api?.asyncapi;
4
+ const asyncApiFiles = [];
5
+ async function addAsyncApiFileFromUrl(url) {
6
+ try {
7
+ const document = await getAsyncApiDocumentFromUrl(url);
8
+ asyncApiFiles.push({
9
+ filename: url,
10
+ spec: document,
11
+ originalFileLocation: url,
12
+ });
13
+ }
14
+ catch (err) {
15
+ console.error(err);
16
+ throw err;
17
+ }
18
+ }
19
+ if (asyncApiConfig) {
20
+ if (typeof asyncApiConfig === 'string' && asyncApiConfig.startsWith('https://')) {
21
+ await addAsyncApiFileFromUrl(asyncApiConfig);
22
+ }
23
+ else if (typeof asyncApiConfig === 'object' &&
24
+ 'source' in asyncApiConfig &&
25
+ asyncApiConfig.source.startsWith('https')) {
26
+ await addAsyncApiFileFromUrl(asyncApiConfig.source);
27
+ }
28
+ }
29
+ return asyncApiFiles;
30
+ };
@@ -1,6 +1,14 @@
1
1
  import type { FileWithImports } from '@mintlify/common';
2
+ import { AsyncAPIFile } from '@mintlify/common/asyncapi';
2
3
  import type { OpenApiFile, DecoratedNavigationPage } from '@mintlify/models';
3
- export declare const readPageContents: (contentDirectoryPath: string, openApiFiles: OpenApiFile[], contentFilenames: string[], pagesAcc: Record<string, DecoratedNavigationPage>) => Promise<{
4
+ type ReadPageContentsArgs = {
5
+ contentDirectoryPath: string;
6
+ openApiFiles: OpenApiFile[];
7
+ asyncApiFiles: AsyncAPIFile[];
8
+ contentFilenames: string[];
9
+ pagesAcc: Record<string, DecoratedNavigationPage>;
10
+ };
11
+ export declare const readPageContents: ({ contentDirectoryPath, openApiFiles, asyncApiFiles, contentFilenames, pagesAcc, }: ReadPageContentsArgs) => Promise<{
4
12
  mdxFilesWithNoImports: {
5
13
  targetPath: string;
6
14
  fileContent: string;
@@ -12,3 +20,4 @@ export declare const readSnippetsV2Contents: (contentDirectoryPath: string, snip
12
20
  filename: string;
13
21
  content: string;
14
22
  }[]>;
23
+ export {};
@@ -3,7 +3,7 @@ import { promises as _promises } from 'fs';
3
3
  import { join } from 'path';
4
4
  import { preparseMdx } from '../../../createPage/preparseMdx/index.js';
5
5
  const { readFile } = _promises;
6
- export const readPageContents = async (contentDirectoryPath, openApiFiles, contentFilenames, pagesAcc) => {
6
+ export const readPageContents = async ({ contentDirectoryPath, openApiFiles, asyncApiFiles, contentFilenames, pagesAcc, }) => {
7
7
  const filesWithImports = [];
8
8
  const pagePromises = contentFilenames.map(async (filename) => {
9
9
  const sourcePath = join(contentDirectoryPath, filename);
@@ -20,7 +20,7 @@ export const readPageContents = async (contentDirectoryPath, openApiFiles, conte
20
20
  });
21
21
  return;
22
22
  }
23
- const { slug, pageMetadata } = getDecoratedNavPageAndSlug(filename, contentStr, openApiFiles);
23
+ const { slug, pageMetadata } = getDecoratedNavPageAndSlug(filename, contentStr, openApiFiles, asyncApiFiles);
24
24
  pagesAcc[slug] = pageMetadata;
25
25
  return { targetPath, fileContent };
26
26
  }
@@ -1,3 +1,12 @@
1
1
  import type { FileType, FileWithImports } from '@mintlify/common';
2
+ import { AsyncAPIFile } from '@mintlify/common/asyncapi';
2
3
  import type { OpenApiFile, DecoratedNavigationPage } from '@mintlify/models';
3
- export declare const resolveImportsAndWriteFiles: (openApiFiles: OpenApiFile[], pagesAcc: Record<string, DecoratedNavigationPage>, snippetsV2: FileType[], filesWithImports: FileWithImports[]) => Promise<void>;
4
+ type ResolveImportsAndWriteFilesArgs = {
5
+ openApiFiles: OpenApiFile[];
6
+ asyncApiFiles: AsyncAPIFile[];
7
+ pagesAcc: Record<string, DecoratedNavigationPage>;
8
+ snippetsV2: FileType[];
9
+ filesWithImports: FileWithImports[];
10
+ };
11
+ export declare const resolveImportsAndWriteFiles: ({ openApiFiles, asyncApiFiles, pagesAcc, snippetsV2, filesWithImports, }: ResolveImportsAndWriteFilesArgs) => Promise<void>;
12
+ export {};
@@ -1,10 +1,16 @@
1
1
  import { resolveAllImports, hasImports, findAndRemoveImports, getDecoratedNavPageAndSlug, topologicalSort, } from '@mintlify/common';
2
2
  import { outputFile } from 'fs-extra';
3
3
  import { join } from 'path';
4
- export const resolveImportsAndWriteFiles = async (openApiFiles, pagesAcc, snippetsV2, filesWithImports) => {
4
+ export const resolveImportsAndWriteFiles = async ({ openApiFiles, asyncApiFiles, pagesAcc, snippetsV2, filesWithImports, }) => {
5
5
  const snippetsWithResolvedImports = await resolveImportsInSnippets(snippetsV2);
6
6
  const writeSnippetsWithImportsPromises = await writeSnippets(snippetsWithResolvedImports);
7
- const pagesWithResolvedImports = await resolveImportsInPages(openApiFiles, snippetsWithResolvedImports, filesWithImports, pagesAcc);
7
+ const pagesWithResolvedImports = await resolveImportsInPages({
8
+ openApiFiles,
9
+ asyncApiFiles,
10
+ snippetsWithResolvedImports,
11
+ filesWithImports,
12
+ pagesAcc,
13
+ });
8
14
  const writePagesPromise = writePages(pagesWithResolvedImports);
9
15
  await Promise.all([...writeSnippetsWithImportsPromises, ...writePagesPromise]);
10
16
  };
@@ -40,13 +46,13 @@ const writeSnippets = async (snippetsWithImports) => snippetsWithImports.map(asy
40
46
  flag: 'w',
41
47
  });
42
48
  });
43
- const resolveImportsInPages = async (openApiFiles, snippetsWithResolvedImports, filesWithImports, pagesAcc) => {
49
+ const resolveImportsInPages = async ({ openApiFiles, asyncApiFiles, snippetsWithResolvedImports, filesWithImports, pagesAcc, }) => {
44
50
  const filesWithResolvedImportsPromises = filesWithImports.map(async (fileWithImports) => {
45
51
  const content = await resolveAllImports({
46
52
  snippets: snippetsWithResolvedImports,
47
53
  fileWithImports,
48
54
  });
49
- const { slug, pageMetadata } = getDecoratedNavPageAndSlug(fileWithImports.filename, content, openApiFiles);
55
+ const { slug, pageMetadata } = getDecoratedNavPageAndSlug(fileWithImports.filename, content, openApiFiles, asyncApiFiles);
50
56
  pagesAcc[slug] = pageMetadata;
51
57
  const targetPath = join('src', '_props', fileWithImports.filename);
52
58
  return {
@@ -0,0 +1,2 @@
1
+ import { AsyncAPIFile } from '@mintlify/common/asyncapi';
2
+ export declare const writeAsyncApiFiles: (asyncApiFiles: AsyncAPIFile[]) => Promise<void>;
@@ -0,0 +1,8 @@
1
+ import fse from 'fs-extra';
2
+ export const writeAsyncApiFiles = async (asyncApiFiles) => {
3
+ const asyncApiTargetPath = 'src/_props/asyncApiFiles.json';
4
+ await fse.remove(asyncApiTargetPath);
5
+ await fse.outputFile(asyncApiTargetPath, JSON.stringify(asyncApiFiles), {
6
+ flag: 'w',
7
+ });
8
+ };