@mintlify/scraping 4.0.163 → 4.0.165
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/__test__/fixtures/basicAsyncAPI.yml +9 -0
- package/__test__/generateOpenApiPages.test.ts +1 -1
- package/__test__/generateOpenApiPagesForDocsConfig.test.ts +1 -1
- package/__test__/getAsyncApiDefinition.test.ts +23 -99
- package/__test__/prepareStringToBeValidFilename.test.ts +1 -1
- package/bin/apiPages/common.d.ts +8 -0
- package/bin/apiPages/common.js +41 -0
- package/bin/apiPages/common.js.map +1 -0
- package/bin/asyncapi/getAsyncApiDefinition.d.ts +3 -3
- package/bin/asyncapi/getAsyncApiDefinition.js +15 -5
- package/bin/asyncapi/getAsyncApiDefinition.js.map +1 -1
- package/bin/asyncapi/processAsyncApiChannel.d.ts +22 -0
- package/bin/asyncapi/processAsyncApiChannel.js +45 -0
- package/bin/asyncapi/processAsyncApiChannel.js.map +1 -0
- package/bin/openapi/common.d.ts +1 -5
- package/bin/openapi/common.js +1 -25
- package/bin/openapi/common.js.map +1 -1
- package/bin/openapi/generateOpenApiPages.js +2 -1
- package/bin/openapi/generateOpenApiPages.js.map +1 -1
- package/bin/openapi/generateOpenApiPagesForDocsConfig.js +2 -15
- package/bin/openapi/generateOpenApiPagesForDocsConfig.js.map +1 -1
- package/bin/tsconfig.build.tsbuildinfo +1 -1
- package/bin/utils/log.js +1 -1
- package/bin/utils/log.js.map +1 -1
- package/bin/utils/network.d.ts +2 -2
- package/bin/utils/network.js +6 -1
- package/bin/utils/network.js.map +1 -1
- package/package.json +3 -3
- package/src/apiPages/common.ts +61 -0
- package/src/asyncapi/getAsyncApiDefinition.ts +18 -8
- package/src/asyncapi/processAsyncApiChannel.ts +104 -0
- package/src/openapi/common.ts +6 -33
- package/src/openapi/generateOpenApiPages.ts +1 -1
- package/src/openapi/generateOpenApiPagesForDocsConfig.ts +2 -27
- package/src/utils/log.ts +1 -1
- package/src/utils/network.ts +7 -3
package/bin/utils/log.js
CHANGED
|
@@ -89,7 +89,7 @@ export function log(message, statusOrColor = undefined, opts = {}) {
|
|
|
89
89
|
? 'error'
|
|
90
90
|
: statusOrColor === 'warn' || statusOrColor === 'warning'
|
|
91
91
|
? 'warn'
|
|
92
|
-
: 'log'](`${color}${icon} ${statusMsg}${activeColors.default}${separator}${typeof message === 'string' ||
|
|
92
|
+
: 'log'](`${color}${icon}${icon ? ' ' : ''}${statusMsg}${activeColors.default}${separator}${typeof message === 'string' ||
|
|
93
93
|
typeof message === 'bigint' ||
|
|
94
94
|
typeof message === 'number' ||
|
|
95
95
|
typeof message === 'boolean'
|
package/bin/utils/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"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"}
|
package/bin/utils/network.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AsyncAPIDocumentInterface } from '@mintlify/common/asyncapi';
|
|
2
2
|
import { OpenAPI } from 'openapi-types';
|
|
3
3
|
import { Browser } from 'puppeteer';
|
|
4
4
|
export declare function startPuppeteer(): Promise<Browser | undefined>;
|
|
@@ -6,4 +6,4 @@ export declare function getHtmlWithPuppeteer(browser: Browser, url: string | URL
|
|
|
6
6
|
export declare function fetchPageHtml(url: string | URL, browser?: Browser | undefined): Promise<string>;
|
|
7
7
|
export declare function fetchImage(url: string): Promise<NodeJS.TypedArray>;
|
|
8
8
|
export declare function fetchOpenApi(url: URL): Promise<OpenAPI.Document>;
|
|
9
|
-
export declare function fetchAsyncApi(url: URL): Promise<
|
|
9
|
+
export declare function fetchAsyncApi(url: URL): Promise<AsyncAPIDocumentInterface>;
|
package/bin/utils/network.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { validateAsyncApi } from '@mintlify/common/asyncapi';
|
|
1
2
|
import yaml from 'js-yaml';
|
|
2
3
|
import { launch } from 'puppeteer';
|
|
3
4
|
import { framework } from './detectFramework.js';
|
|
@@ -154,7 +155,11 @@ export async function fetchAsyncApi(url) {
|
|
|
154
155
|
throw new Error(`${res.status} ${res.statusText}`);
|
|
155
156
|
}
|
|
156
157
|
const file = await res.text();
|
|
157
|
-
|
|
158
|
+
const { document, errorMessage } = await validateAsyncApi(file);
|
|
159
|
+
if (!document) {
|
|
160
|
+
throw new Error(`${url} - this document is not a valid AsyncAPI document - ${errorMessage}`);
|
|
161
|
+
}
|
|
162
|
+
return document;
|
|
158
163
|
}
|
|
159
164
|
catch (error) {
|
|
160
165
|
const errorMessage = getErrorMessage(error);
|
package/bin/utils/network.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,UAAU,GAAG;IACjB,uHAAuH;IACvH,uHAAuH;IACvH,uHAAuH;IACvH,uHAAuH;IACvH,uHAAuH;CAC/G,CAAC;AAEX,MAAM,OAAO,GAAG;IACd,iBAAiB,EAAE,gBAAgB;IACnC,MAAM,EACJ,yIAAyI;IAC3I,YAAY,EACV,uHAAuH;IACzH,iBAAiB,EAAE,yBAAyB;IAC5C,UAAU,EAAE,YAAY;CAChB,CAAC;AAEX,KAAK,UAAU,kBAAkB,CAC/B,SAA2B,EAC3B,UAAkB,CAAC,EACnB,QAAgB,IAAI,EACpB,SAAiB,CAAC;IAElB,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,OAAO,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC;YAClB,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,GAAG,CAAC,wCAAwC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAgB,EAChB,GAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAErC,MAAM,IAAI,CAAC,WAAW,CAAC;YACrB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,iBAAiB,EAAE,CAAC;YACpB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,YAAY,CACrB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAC3E,CAAC;QACF,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACxB,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE,KAAK;SACf,CAAC,CACH,CAAC;QAEF,IAAI,SAAS,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACvB,QAAQ,CAAC,gBAAgB,CACvB,OAAO,EACP,CAAC,CAAC,EAAE,EAAE;oBACJ,IAAI,CAAC,CAAC,MAAM,YAAY,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC;wBACnF,CAAC,CAAC,cAAc,EAAE,CAAC;gBACvB,CAAC,EACD,IAAI,CACL,CAAC;gBAEF,SAAS,UAAU,CAAC,EAA0B;oBAC5C,MAAM,SAAS,GAAG,EAAE,CAAC,sBAAsB,CACzC,qBAAqB,CACW,CAAC;oBACnC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;wBAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;wBACb,UAAU,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAiB;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,mCAAmC,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAiB,EACjB,UAA+B,SAAS;IAExC,IAAI,CAAC;QACH,IAAI,GAAG,GAAuB,SAAS,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAE9C,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,0CAA0C,YAAY,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAQ;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAqB,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,iDAAiD,YAAY,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAQ;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,uDAAuD,YAAY,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,qDAAqD,YAAY,EAAE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mintlify/scraping",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.165",
|
|
4
4
|
"description": "Scrape documentation frameworks to Mintlify docs",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=18.0.0"
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"format:check": "prettier . --check"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@mintlify/common": "1.0.
|
|
41
|
+
"@mintlify/common": "1.0.314",
|
|
42
42
|
"@mintlify/openapi-parser": "^0.0.7",
|
|
43
43
|
"fs-extra": "^11.1.1",
|
|
44
44
|
"hast-util-to-mdast": "^10.1.0",
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"typescript": "^5.5.3",
|
|
79
79
|
"vitest": "^2.0.4"
|
|
80
80
|
},
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "5f1fad60cd8625ceeaeb5e06fcd5aae5c65b2573"
|
|
82
82
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Functions used for both OpenAPI and AsyncAPI page generation
|
|
2
|
+
import { NavigationEntry } from '@mintlify/models';
|
|
3
|
+
import {
|
|
4
|
+
DecoratedGroupsConfig,
|
|
5
|
+
DecoratedPagesConfig,
|
|
6
|
+
GroupsConfig,
|
|
7
|
+
PagesConfig,
|
|
8
|
+
} from '@mintlify/validation';
|
|
9
|
+
|
|
10
|
+
export const DEFAULT_API_GROUP_NAME = 'API Reference';
|
|
11
|
+
export const DEFAULT_WEBHOOK_GROUP_NAME = 'Webhooks';
|
|
12
|
+
export const DEFAULT_WEBSOCKETS_GROUP_NAME = 'Websockets';
|
|
13
|
+
|
|
14
|
+
export const findNavGroup = (
|
|
15
|
+
nav: GroupsConfig | DecoratedGroupsConfig,
|
|
16
|
+
groupName: string = DEFAULT_API_GROUP_NAME
|
|
17
|
+
): PagesConfig | DecoratedPagesConfig => {
|
|
18
|
+
const group = nav.find(
|
|
19
|
+
(fileOrGroup) =>
|
|
20
|
+
typeof fileOrGroup === 'object' && 'group' in fileOrGroup && fileOrGroup.group === groupName
|
|
21
|
+
);
|
|
22
|
+
if (group === undefined || !('pages' in group)) {
|
|
23
|
+
const newGroup = {
|
|
24
|
+
group: groupName,
|
|
25
|
+
pages: [],
|
|
26
|
+
};
|
|
27
|
+
nav.push(newGroup);
|
|
28
|
+
return newGroup.pages;
|
|
29
|
+
} else {
|
|
30
|
+
return group.pages;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const prepareStringToBeValidFilename = (str?: string) =>
|
|
35
|
+
str
|
|
36
|
+
? str
|
|
37
|
+
.replaceAll(' ', '-')
|
|
38
|
+
.replace(/\{.*?\}/g, '-') // remove path parameters
|
|
39
|
+
.replace(/^-/, '')
|
|
40
|
+
.replace(/-$/, '')
|
|
41
|
+
.replace(/[{}(),.'\n\/]/g, '') // remove special characters
|
|
42
|
+
.replaceAll(/--/g, '-') // replace double hyphens
|
|
43
|
+
.toLowerCase()
|
|
44
|
+
: undefined;
|
|
45
|
+
|
|
46
|
+
// returns a filename that is unique within the given array of pages
|
|
47
|
+
export const generateUniqueFilenameWithoutExtension = (
|
|
48
|
+
pages: NavigationEntry[],
|
|
49
|
+
base: string
|
|
50
|
+
): string => {
|
|
51
|
+
let filename = base;
|
|
52
|
+
if (pages.includes(filename)) {
|
|
53
|
+
let extension = 1;
|
|
54
|
+
filename = `${base}-${extension}`;
|
|
55
|
+
while (pages.includes(filename)) {
|
|
56
|
+
extension += 1;
|
|
57
|
+
filename = `${base}-${extension}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return filename;
|
|
61
|
+
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AsyncAPIDocumentInterface, validateAsyncApi } from '@mintlify/common/asyncapi';
|
|
2
2
|
import * as fs from 'fs/promises';
|
|
3
|
-
import yaml from 'js-yaml';
|
|
4
3
|
import * as path from 'path';
|
|
5
4
|
|
|
6
5
|
import { fetchAsyncApi } from '../utils/network.js';
|
|
7
6
|
|
|
8
7
|
export const getAsyncApiDefinition = async (
|
|
9
|
-
pathOrDocumentOrUrl: string |
|
|
10
|
-
): Promise<{ document:
|
|
8
|
+
pathOrDocumentOrUrl: string | URL
|
|
9
|
+
): Promise<{ document: AsyncAPIDocumentInterface | undefined; isUrl: boolean }> => {
|
|
10
|
+
let document: AsyncAPIDocumentInterface | undefined = undefined;
|
|
11
11
|
if (typeof pathOrDocumentOrUrl === 'string') {
|
|
12
12
|
if (pathOrDocumentOrUrl.startsWith('http://')) {
|
|
13
13
|
// This is an invalid location either for a file or a URL
|
|
@@ -18,8 +18,18 @@ export const getAsyncApiDefinition = async (
|
|
|
18
18
|
pathOrDocumentOrUrl = url;
|
|
19
19
|
} catch {
|
|
20
20
|
const pathname = path.join(process.cwd(), pathOrDocumentOrUrl.toString());
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
try {
|
|
22
|
+
const file = await fs.readFile(pathname, 'utf-8');
|
|
23
|
+
const { document: asyncApiDocument, errorMessage } = await validateAsyncApi(file);
|
|
24
|
+
if (!asyncApiDocument) {
|
|
25
|
+
throw new Error(
|
|
26
|
+
`${pathname} - this document is not a valid AsyncAPI document - ${errorMessage}`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
document = asyncApiDocument;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
throw new Error(`Failed to read file ${pathname} - ${error}`);
|
|
32
|
+
}
|
|
23
33
|
}
|
|
24
34
|
}
|
|
25
35
|
}
|
|
@@ -28,8 +38,8 @@ export const getAsyncApiDefinition = async (
|
|
|
28
38
|
if (pathOrDocumentOrUrl.protocol !== 'https:') {
|
|
29
39
|
throw new Error('Only HTTPS URLs are supported. Please provide an HTTPS URL');
|
|
30
40
|
}
|
|
31
|
-
|
|
41
|
+
document = await fetchAsyncApi(pathOrDocumentOrUrl);
|
|
32
42
|
}
|
|
33
43
|
|
|
34
|
-
return { document
|
|
44
|
+
return { document, isUrl };
|
|
35
45
|
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { optionallyAddLeadingSlash } from '@mintlify/common';
|
|
2
|
+
import { AsyncAPIChannel } from '@mintlify/common/asyncapi';
|
|
3
|
+
import { DecoratedNavigationPage } from '@mintlify/models';
|
|
4
|
+
import {
|
|
5
|
+
DecoratedGroupsConfig,
|
|
6
|
+
DecoratedPagesConfig,
|
|
7
|
+
GroupsConfig,
|
|
8
|
+
PagesConfig,
|
|
9
|
+
} from '@mintlify/validation';
|
|
10
|
+
import fse from 'fs-extra';
|
|
11
|
+
import { outputFile } from 'fs-extra';
|
|
12
|
+
import { join, resolve } from 'path';
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
DEFAULT_WEBSOCKETS_GROUP_NAME,
|
|
16
|
+
prepareStringToBeValidFilename,
|
|
17
|
+
generateUniqueFilenameWithoutExtension,
|
|
18
|
+
} from '../apiPages/common.js';
|
|
19
|
+
|
|
20
|
+
type GenerateAsyncApiPagesOptions = {
|
|
21
|
+
asyncApiFilePath?: string;
|
|
22
|
+
version?: string;
|
|
23
|
+
writeFiles?: boolean;
|
|
24
|
+
outDir?: string;
|
|
25
|
+
outDirBasePath?: string;
|
|
26
|
+
overwrite?: boolean;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type ProcessAsyncApiChannelArgs = {
|
|
30
|
+
channel: AsyncAPIChannel;
|
|
31
|
+
nav: GroupsConfig;
|
|
32
|
+
decoratedNav: DecoratedGroupsConfig;
|
|
33
|
+
writePromises: Promise<void>[];
|
|
34
|
+
pagesAcc: Record<string, DecoratedNavigationPage>;
|
|
35
|
+
opts?: GenerateAsyncApiPagesOptions;
|
|
36
|
+
findNavGroup: (
|
|
37
|
+
nav: GroupsConfig | DecoratedGroupsConfig,
|
|
38
|
+
groupName: string
|
|
39
|
+
) => PagesConfig | DecoratedPagesConfig;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const processAsyncApiChannel = ({
|
|
43
|
+
channel,
|
|
44
|
+
nav,
|
|
45
|
+
decoratedNav,
|
|
46
|
+
writePromises,
|
|
47
|
+
pagesAcc,
|
|
48
|
+
opts,
|
|
49
|
+
findNavGroup,
|
|
50
|
+
}: ProcessAsyncApiChannelArgs) => {
|
|
51
|
+
const asyncApiFilePathFromRoot = opts?.asyncApiFilePath
|
|
52
|
+
? optionallyAddLeadingSlash(opts.asyncApiFilePath)
|
|
53
|
+
: undefined;
|
|
54
|
+
|
|
55
|
+
const operation = 'websocket';
|
|
56
|
+
const tags = channel.tags().all();
|
|
57
|
+
const groupName = tags[0]?.name() ?? DEFAULT_WEBSOCKETS_GROUP_NAME;
|
|
58
|
+
const channelId = channel.id();
|
|
59
|
+
const title = channel.title() ?? channelId;
|
|
60
|
+
const description = channel.description() ?? channel.summary() ?? '';
|
|
61
|
+
|
|
62
|
+
const folder = prepareStringToBeValidFilename(groupName) ?? '';
|
|
63
|
+
const base = join(opts?.outDir ?? '', folder, title);
|
|
64
|
+
|
|
65
|
+
const navGroup = findNavGroup(nav, groupName);
|
|
66
|
+
const decoratedNavGroup = findNavGroup(decoratedNav, groupName);
|
|
67
|
+
|
|
68
|
+
const filenameWithoutExtension = generateUniqueFilenameWithoutExtension(navGroup, base);
|
|
69
|
+
|
|
70
|
+
const asyncApiMetaTag = `${
|
|
71
|
+
asyncApiFilePathFromRoot ? `${asyncApiFilePathFromRoot} ` : ''
|
|
72
|
+
}${operation} ${channelId}`;
|
|
73
|
+
|
|
74
|
+
navGroup.push(filenameWithoutExtension);
|
|
75
|
+
|
|
76
|
+
const page: DecoratedNavigationPage = {
|
|
77
|
+
asyncapi: asyncApiMetaTag,
|
|
78
|
+
href: resolve('/', filenameWithoutExtension),
|
|
79
|
+
title: title,
|
|
80
|
+
description,
|
|
81
|
+
version: opts?.version,
|
|
82
|
+
};
|
|
83
|
+
decoratedNavGroup.push(page);
|
|
84
|
+
pagesAcc[filenameWithoutExtension] = page;
|
|
85
|
+
|
|
86
|
+
const targetPath = opts?.outDirBasePath
|
|
87
|
+
? join(opts.outDirBasePath, `${filenameWithoutExtension}.mdx`)
|
|
88
|
+
: `${filenameWithoutExtension}.mdx`;
|
|
89
|
+
if (opts?.writeFiles && (!fse.pathExistsSync(targetPath) || opts.overwrite)) {
|
|
90
|
+
writePromises.push(createAsyncApiFrontmatter(targetPath, asyncApiMetaTag, opts.version));
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const createAsyncApiFrontmatter = async (
|
|
95
|
+
filename: string,
|
|
96
|
+
asyncApiMetaTag: string,
|
|
97
|
+
version?: string
|
|
98
|
+
) => {
|
|
99
|
+
const data = `---
|
|
100
|
+
asyncapi: ${asyncApiMetaTag}${version ? `\nversion: ${version}` : ''}
|
|
101
|
+
---`;
|
|
102
|
+
|
|
103
|
+
await outputFile(filename, data);
|
|
104
|
+
};
|
package/src/openapi/common.ts
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
optionallyAddLeadingSlash,
|
|
4
4
|
slugToTitle,
|
|
5
5
|
} from '@mintlify/common';
|
|
6
|
-
import type { DecoratedNavigationPage
|
|
6
|
+
import type { DecoratedNavigationPage } from '@mintlify/models';
|
|
7
7
|
import { outputFile } from 'fs-extra';
|
|
8
8
|
import fse from 'fs-extra';
|
|
9
9
|
import fs from 'fs/promises';
|
|
@@ -11,6 +11,11 @@ import yaml from 'js-yaml';
|
|
|
11
11
|
import { OpenAPI, OpenAPIV3 } from 'openapi-types';
|
|
12
12
|
import path, { join, parse, resolve } from 'path';
|
|
13
13
|
|
|
14
|
+
import {
|
|
15
|
+
DEFAULT_WEBHOOK_GROUP_NAME,
|
|
16
|
+
prepareStringToBeValidFilename,
|
|
17
|
+
generateUniqueFilenameWithoutExtension,
|
|
18
|
+
} from '../apiPages/common.js';
|
|
14
19
|
import { fetchOpenApi } from '../utils/network.js';
|
|
15
20
|
|
|
16
21
|
export const getOpenApiDefinition = async (
|
|
@@ -42,23 +47,6 @@ export const getOpenApiDefinition = async (
|
|
|
42
47
|
return { document: pathOrDocumentOrUrl, isUrl };
|
|
43
48
|
};
|
|
44
49
|
|
|
45
|
-
// returns a filename that is unique within the given array of pages
|
|
46
|
-
export const generateUniqueFilenameWithoutExtension = (
|
|
47
|
-
pages: NavigationEntry[],
|
|
48
|
-
base: string
|
|
49
|
-
): string => {
|
|
50
|
-
let filename = base;
|
|
51
|
-
if (pages.includes(filename)) {
|
|
52
|
-
let extension = 1;
|
|
53
|
-
filename = `${base}-${extension}`;
|
|
54
|
-
while (pages.includes(filename)) {
|
|
55
|
-
extension += 1;
|
|
56
|
-
filename = `${base}-${extension}`;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return filename;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
50
|
export const createOpenApiFrontmatter = async (
|
|
63
51
|
filename: string,
|
|
64
52
|
openApiMetaTag: string,
|
|
@@ -71,18 +59,6 @@ openapi: ${openApiMetaTag}${version ? `\nversion: ${version}` : ''}
|
|
|
71
59
|
await outputFile(filename, data);
|
|
72
60
|
};
|
|
73
61
|
|
|
74
|
-
export const prepareStringToBeValidFilename = (str?: string) =>
|
|
75
|
-
str
|
|
76
|
-
? str
|
|
77
|
-
.replaceAll(' ', '-')
|
|
78
|
-
.replace(/\{.*?\}/g, '-') // remove path parameters
|
|
79
|
-
.replace(/^-/, '')
|
|
80
|
-
.replace(/-$/, '')
|
|
81
|
-
.replace(/[{}(),.'\n\/]/g, '') // remove special characters
|
|
82
|
-
.replaceAll(/--/g, '-') // replace double hyphens
|
|
83
|
-
.toLowerCase()
|
|
84
|
-
: undefined;
|
|
85
|
-
|
|
86
62
|
export type GenerateOpenApiPagesOptions = {
|
|
87
63
|
openApiFilePath?: string;
|
|
88
64
|
version?: string;
|
|
@@ -165,9 +141,6 @@ export function processOpenApiPath<N, DN>(
|
|
|
165
141
|
});
|
|
166
142
|
}
|
|
167
143
|
|
|
168
|
-
export const DEFAULT_API_GROUP_NAME = 'API Reference';
|
|
169
|
-
export const DEFAULT_WEBHOOK_GROUP_NAME = 'Webhooks';
|
|
170
|
-
|
|
171
144
|
export function processOpenApiWebhook<N, DN>(
|
|
172
145
|
webhook: string,
|
|
173
146
|
webhookObject: OpenAPIV3.PathItemObject,
|
|
@@ -8,12 +8,12 @@ import type {
|
|
|
8
8
|
} from '@mintlify/models';
|
|
9
9
|
import { OpenAPI } from 'openapi-types';
|
|
10
10
|
|
|
11
|
+
import { DEFAULT_API_GROUP_NAME } from '../apiPages/common.js';
|
|
11
12
|
import {
|
|
12
13
|
getOpenApiDefinition,
|
|
13
14
|
GenerateOpenApiPagesOptions,
|
|
14
15
|
OpenApiPageGenerationResult,
|
|
15
16
|
processOpenApiPath,
|
|
16
|
-
DEFAULT_API_GROUP_NAME,
|
|
17
17
|
processOpenApiWebhook,
|
|
18
18
|
} from './common.js';
|
|
19
19
|
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
import { validate } from '@mintlify/common';
|
|
2
2
|
import { DecoratedNavigationPage } from '@mintlify/models';
|
|
3
|
-
import {
|
|
4
|
-
DecoratedGroupsConfig,
|
|
5
|
-
GroupsConfig,
|
|
6
|
-
PagesConfig,
|
|
7
|
-
DecoratedPagesConfig,
|
|
8
|
-
} from '@mintlify/validation';
|
|
3
|
+
import { DecoratedGroupsConfig, GroupsConfig } from '@mintlify/validation';
|
|
9
4
|
import { OpenAPI } from 'openapi-types';
|
|
10
5
|
|
|
6
|
+
import { findNavGroup } from '../apiPages/common.js';
|
|
11
7
|
import {
|
|
12
8
|
getOpenApiDefinition,
|
|
13
9
|
GenerateOpenApiPagesOptions,
|
|
14
10
|
OpenApiPageGenerationResult,
|
|
15
11
|
processOpenApiPath,
|
|
16
|
-
DEFAULT_API_GROUP_NAME,
|
|
17
12
|
processOpenApiWebhook,
|
|
18
13
|
} from './common.js';
|
|
19
14
|
|
|
@@ -90,23 +85,3 @@ export async function generateOpenApiPagesForDocsConfig(
|
|
|
90
85
|
isUrl,
|
|
91
86
|
};
|
|
92
87
|
}
|
|
93
|
-
|
|
94
|
-
const findNavGroup = (
|
|
95
|
-
nav: GroupsConfig | DecoratedGroupsConfig,
|
|
96
|
-
groupName: string = DEFAULT_API_GROUP_NAME
|
|
97
|
-
): PagesConfig | DecoratedPagesConfig => {
|
|
98
|
-
const group = nav.find(
|
|
99
|
-
(fileOrGroup) =>
|
|
100
|
-
typeof fileOrGroup === 'object' && 'group' in fileOrGroup && fileOrGroup.group === groupName
|
|
101
|
-
);
|
|
102
|
-
if (group === undefined || !('pages' in group)) {
|
|
103
|
-
const newGroup = {
|
|
104
|
-
group: groupName,
|
|
105
|
-
pages: [],
|
|
106
|
-
};
|
|
107
|
-
nav.push(newGroup);
|
|
108
|
-
return newGroup.pages;
|
|
109
|
-
} else {
|
|
110
|
-
return group.pages;
|
|
111
|
-
}
|
|
112
|
-
};
|
package/src/utils/log.ts
CHANGED
|
@@ -114,7 +114,7 @@ export function log(
|
|
|
114
114
|
? 'warn'
|
|
115
115
|
: 'log'
|
|
116
116
|
](
|
|
117
|
-
`${color}${icon} ${statusMsg}${activeColors.default}${separator}${
|
|
117
|
+
`${color}${icon}${icon ? ' ' : ''}${statusMsg}${activeColors.default}${separator}${
|
|
118
118
|
typeof message === 'string' ||
|
|
119
119
|
typeof message === 'bigint' ||
|
|
120
120
|
typeof message === 'number' ||
|
package/src/utils/network.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AsyncAPIDocumentInterface, validateAsyncApi } from '@mintlify/common/asyncapi';
|
|
2
2
|
import yaml from 'js-yaml';
|
|
3
3
|
import { OpenAPI } from 'openapi-types';
|
|
4
4
|
import { Browser, launch } from 'puppeteer';
|
|
@@ -180,14 +180,18 @@ export async function fetchOpenApi(url: URL): Promise<OpenAPI.Document> {
|
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
export async function fetchAsyncApi(url: URL): Promise<
|
|
183
|
+
export async function fetchAsyncApi(url: URL): Promise<AsyncAPIDocumentInterface> {
|
|
184
184
|
try {
|
|
185
185
|
const res = await fetch(url);
|
|
186
186
|
if (!res.ok) {
|
|
187
187
|
throw new Error(`${res.status} ${res.statusText}`);
|
|
188
188
|
}
|
|
189
189
|
const file = await res.text();
|
|
190
|
-
|
|
190
|
+
const { document, errorMessage } = await validateAsyncApi(file);
|
|
191
|
+
if (!document) {
|
|
192
|
+
throw new Error(`${url} - this document is not a valid AsyncAPI document - ${errorMessage}`);
|
|
193
|
+
}
|
|
194
|
+
return document;
|
|
191
195
|
} catch (error) {
|
|
192
196
|
const errorMessage = getErrorMessage(error);
|
|
193
197
|
throw new Error(`${url} - failed to retrieve AsyncAPI file from source - ${errorMessage}`);
|