fumadocs-openapi 10.2.2 → 10.2.3
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/generate-file.d.ts +53 -49
- package/dist/generate-file.d.ts.map +1 -1
- package/dist/generate-file.js +88 -102
- package/dist/generate-file.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +3 -1
- package/dist/playground/client.d.ts +88 -72
- package/dist/playground/client.d.ts.map +1 -1
- package/dist/playground/client.js +446 -296
- package/dist/playground/client.js.map +1 -0
- package/dist/playground/components/inputs.js +395 -172
- package/dist/playground/components/inputs.js.map +1 -0
- package/dist/playground/components/oauth-dialog.js +270 -174
- package/dist/playground/components/oauth-dialog.js.map +1 -0
- package/dist/playground/components/server-select.js +115 -55
- package/dist/playground/components/server-select.js.map +1 -0
- package/dist/playground/fetcher.d.ts +10 -18
- package/dist/playground/fetcher.d.ts.map +1 -1
- package/dist/playground/fetcher.js +67 -75
- package/dist/playground/fetcher.js.map +1 -0
- package/dist/playground/get-default-values.js +23 -26
- package/dist/playground/get-default-values.js.map +1 -0
- package/dist/playground/index.d.ts +23 -13
- package/dist/playground/index.d.ts.map +1 -1
- package/dist/playground/index.js +87 -91
- package/dist/playground/index.js.map +1 -0
- package/dist/playground/lazy.js +9 -2
- package/dist/playground/lazy.js.map +1 -0
- package/dist/playground/schema.d.ts +18 -55
- package/dist/playground/schema.d.ts.map +1 -1
- package/dist/playground/schema.js +117 -106
- package/dist/playground/schema.js.map +1 -0
- package/dist/playground/status-info.js +49 -37
- package/dist/playground/status-info.js.map +1 -0
- package/dist/requests/generators/csharp.js +40 -50
- package/dist/requests/generators/csharp.js.map +1 -0
- package/dist/requests/generators/curl.js +28 -27
- package/dist/requests/generators/curl.js.map +1 -0
- package/dist/requests/generators/go.js +39 -35
- package/dist/requests/generators/go.js.map +1 -0
- package/dist/requests/generators/index.js +49 -43
- package/dist/requests/generators/index.js.map +1 -0
- package/dist/requests/generators/java.js +56 -67
- package/dist/requests/generators/java.js.map +1 -0
- package/dist/requests/generators/javascript.js +38 -45
- package/dist/requests/generators/javascript.js.map +1 -0
- package/dist/requests/generators/python.js +33 -37
- package/dist/requests/generators/python.js.map +1 -0
- package/dist/requests/media/adapter.d.ts +38 -84
- package/dist/requests/media/adapter.d.ts.map +1 -1
- package/dist/requests/media/adapter.js +122 -169
- package/dist/requests/media/adapter.js.map +1 -0
- package/dist/requests/media/encode.d.ts +12 -7
- package/dist/requests/media/encode.d.ts.map +1 -1
- package/dist/requests/media/encode.js +129 -109
- package/dist/requests/media/encode.js.map +1 -0
- package/dist/requests/media/resolve-adapter.js +28 -28
- package/dist/requests/media/resolve-adapter.js.map +1 -0
- package/dist/requests/string-utils.js +28 -35
- package/dist/requests/string-utils.js.map +1 -0
- package/dist/requests/to-python-object.js +16 -28
- package/dist/requests/to-python-object.js.map +1 -0
- package/dist/requests/types.d.ts +25 -21
- package/dist/requests/types.d.ts.map +1 -1
- package/dist/scalar/client.js +57 -20
- package/dist/scalar/client.js.map +1 -0
- package/dist/scalar/index.d.ts +8 -2
- package/dist/scalar/index.d.ts.map +1 -1
- package/dist/scalar/index.js +29 -19
- package/dist/scalar/index.js.map +1 -0
- package/dist/server/create.d.ts +29 -25
- package/dist/server/create.d.ts.map +1 -1
- package/dist/server/create.js +42 -39
- package/dist/server/create.js.map +1 -0
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.js +4 -2
- package/dist/server/proxy.d.ts +28 -28
- package/dist/server/proxy.d.ts.map +1 -1
- package/dist/server/proxy.js +58 -75
- package/dist/server/proxy.js.map +1 -0
- package/dist/server/source-api.d.ts +32 -29
- package/dist/server/source-api.d.ts.map +1 -1
- package/dist/server/source-api.js +82 -75
- package/dist/server/source-api.js.map +1 -0
- package/dist/types.d.ts +41 -36
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/api-page.d.ts +140 -136
- package/dist/ui/api-page.d.ts.map +1 -1
- package/dist/ui/api-page.js +134 -118
- package/dist/ui/api-page.js.map +1 -0
- package/dist/ui/client/index.d.ts +30 -26
- package/dist/ui/client/index.d.ts.map +1 -1
- package/dist/ui/client/index.js +8 -2
- package/dist/ui/client/index.js.map +1 -0
- package/dist/ui/client/storage-key.js +16 -10
- package/dist/ui/client/storage-key.js.map +1 -0
- package/dist/ui/components/accordion.js +40 -14
- package/dist/ui/components/accordion.js.map +1 -0
- package/dist/ui/components/dialog.js +51 -15
- package/dist/ui/components/dialog.js.map +1 -0
- package/dist/ui/components/input.js +18 -8
- package/dist/ui/components/input.js.map +1 -0
- package/dist/ui/components/method-label.js +38 -33
- package/dist/ui/components/method-label.js.map +1 -0
- package/dist/ui/components/select.js +66 -15
- package/dist/ui/components/select.js.map +1 -0
- package/dist/ui/contexts/api.js +96 -85
- package/dist/ui/contexts/api.js.map +1 -0
- package/dist/ui/contexts/api.lazy.js +9 -2
- package/dist/ui/contexts/api.lazy.js.map +1 -0
- package/dist/ui/index.d.ts +2 -2
- package/dist/ui/index.js +3 -1
- package/dist/ui/operation/client.js +65 -27
- package/dist/ui/operation/client.js.map +1 -0
- package/dist/ui/operation/index.js +403 -186
- package/dist/ui/operation/index.js.map +1 -0
- package/dist/ui/operation/request-tabs.d.ts +15 -16
- package/dist/ui/operation/request-tabs.d.ts.map +1 -1
- package/dist/ui/operation/request-tabs.js +151 -131
- package/dist/ui/operation/request-tabs.js.map +1 -0
- package/dist/ui/operation/response-tabs.d.ts +27 -28
- package/dist/ui/operation/response-tabs.d.ts.map +1 -1
- package/dist/ui/operation/response-tabs.js +73 -56
- package/dist/ui/operation/response-tabs.js.map +1 -0
- package/dist/ui/operation/usage-tabs/client.js +117 -88
- package/dist/ui/operation/usage-tabs/client.js.map +1 -0
- package/dist/ui/operation/usage-tabs/index.d.ts +22 -21
- package/dist/ui/operation/usage-tabs/index.d.ts.map +1 -1
- package/dist/ui/operation/usage-tabs/index.js +63 -48
- package/dist/ui/operation/usage-tabs/index.js.map +1 -0
- package/dist/ui/operation/usage-tabs/lazy.js +11 -4
- package/dist/ui/operation/usage-tabs/lazy.js.map +1 -0
- package/dist/ui/schema/client.d.ts +11 -7
- package/dist/ui/schema/client.d.ts.map +1 -1
- package/dist/ui/schema/client.js +213 -127
- package/dist/ui/schema/client.js.map +1 -0
- package/dist/ui/schema/index.d.ts +51 -50
- package/dist/ui/schema/index.d.ts.map +1 -1
- package/dist/ui/schema/index.js +225 -248
- package/dist/ui/schema/index.js.map +1 -0
- package/dist/ui/schema/lazy.js +9 -2
- package/dist/ui/schema/lazy.js.map +1 -0
- package/dist/utils/cn.js +3 -1
- package/dist/utils/deep-equal.js +18 -26
- package/dist/utils/deep-equal.js.map +1 -0
- package/dist/utils/get-typescript-schema.js +21 -19
- package/dist/utils/get-typescript-schema.js.map +1 -0
- package/dist/utils/id-to-title.js +13 -16
- package/dist/utils/id-to-title.js.map +1 -0
- package/dist/utils/lazy.js +13 -11
- package/dist/utils/lazy.js.map +1 -0
- package/dist/utils/merge-schema.js +130 -174
- package/dist/utils/merge-schema.js.map +1 -0
- package/dist/utils/pages/builder.d.ts +80 -76
- package/dist/utils/pages/builder.d.ts.map +1 -1
- package/dist/utils/pages/builder.js +101 -118
- package/dist/utils/pages/builder.js.map +1 -0
- package/dist/utils/pages/preset-auto.d.ts +58 -55
- package/dist/utils/pages/preset-auto.d.ts.map +1 -1
- package/dist/utils/pages/preset-auto.js +124 -137
- package/dist/utils/pages/preset-auto.js.map +1 -0
- package/dist/utils/pages/to-body.js +21 -18
- package/dist/utils/pages/to-body.js.map +1 -0
- package/dist/utils/pages/to-static-data.js +48 -40
- package/dist/utils/pages/to-static-data.js.map +1 -0
- package/dist/utils/pages/to-text.d.ts +43 -41
- package/dist/utils/pages/to-text.d.ts.map +1 -1
- package/dist/utils/pages/to-text.js +93 -126
- package/dist/utils/pages/to-text.js.map +1 -0
- package/dist/utils/process-document.d.ts +18 -19
- package/dist/utils/process-document.d.ts.map +1 -1
- package/dist/utils/process-document.js +43 -54
- package/dist/utils/process-document.js.map +1 -0
- package/dist/utils/remove-undefined.js +18 -18
- package/dist/utils/remove-undefined.js.map +1 -0
- package/dist/utils/schema-to-string.js +46 -64
- package/dist/utils/schema-to-string.js.map +1 -0
- package/dist/utils/schema.d.ts +11 -27
- package/dist/utils/schema.d.ts.map +1 -1
- package/dist/utils/schema.js +43 -44
- package/dist/utils/schema.js.map +1 -0
- package/dist/utils/url.js +35 -56
- package/dist/utils/url.js.map +1 -0
- package/dist/utils/use-query.js +39 -33
- package/dist/utils/use-query.js.map +1 -0
- package/package.json +33 -32
- package/dist/index.d.ts.map +0 -1
- package/dist/playground/components/inputs.d.ts +0 -25
- package/dist/playground/components/inputs.d.ts.map +0 -1
- package/dist/playground/components/oauth-dialog.d.ts +0 -13
- package/dist/playground/components/oauth-dialog.d.ts.map +0 -1
- package/dist/playground/components/server-select.d.ts +0 -3
- package/dist/playground/components/server-select.d.ts.map +0 -1
- package/dist/playground/get-default-values.d.ts +0 -3
- package/dist/playground/get-default-values.d.ts.map +0 -1
- package/dist/playground/lazy.d.ts +0 -2
- package/dist/playground/lazy.d.ts.map +0 -1
- package/dist/playground/status-info.d.ts +0 -8
- package/dist/playground/status-info.d.ts.map +0 -1
- package/dist/requests/generators/csharp.d.ts +0 -3
- package/dist/requests/generators/csharp.d.ts.map +0 -1
- package/dist/requests/generators/curl.d.ts +0 -3
- package/dist/requests/generators/curl.d.ts.map +0 -1
- package/dist/requests/generators/go.d.ts +0 -3
- package/dist/requests/generators/go.d.ts.map +0 -1
- package/dist/requests/generators/index.d.ts +0 -3
- package/dist/requests/generators/index.d.ts.map +0 -1
- package/dist/requests/generators/java.d.ts +0 -3
- package/dist/requests/generators/java.d.ts.map +0 -1
- package/dist/requests/generators/javascript.d.ts +0 -3
- package/dist/requests/generators/javascript.d.ts.map +0 -1
- package/dist/requests/generators/python.d.ts +0 -3
- package/dist/requests/generators/python.d.ts.map +0 -1
- package/dist/requests/media/resolve-adapter.d.ts +0 -19
- package/dist/requests/media/resolve-adapter.d.ts.map +0 -1
- package/dist/requests/string-utils.d.ts +0 -7
- package/dist/requests/string-utils.d.ts.map +0 -1
- package/dist/requests/to-python-object.d.ts +0 -2
- package/dist/requests/to-python-object.d.ts.map +0 -1
- package/dist/requests/types.js +0 -1
- package/dist/scalar/client.d.ts +0 -7
- package/dist/scalar/client.d.ts.map +0 -1
- package/dist/server/index.d.ts.map +0 -1
- package/dist/types.js +0 -1
- package/dist/ui/client/storage-key.d.ts +0 -9
- package/dist/ui/client/storage-key.d.ts.map +0 -1
- package/dist/ui/components/accordion.d.ts +0 -8
- package/dist/ui/components/accordion.d.ts.map +0 -1
- package/dist/ui/components/dialog.d.ts +0 -20
- package/dist/ui/components/dialog.d.ts.map +0 -1
- package/dist/ui/components/input.d.ts +0 -6
- package/dist/ui/components/input.d.ts.map +0 -1
- package/dist/ui/components/method-label.d.ts +0 -10
- package/dist/ui/components/method-label.d.ts.map +0 -1
- package/dist/ui/components/select.d.ts +0 -14
- package/dist/ui/components/select.d.ts.map +0 -1
- package/dist/ui/contexts/api.d.ts +0 -33
- package/dist/ui/contexts/api.d.ts.map +0 -1
- package/dist/ui/contexts/api.lazy.d.ts +0 -2
- package/dist/ui/contexts/api.lazy.d.ts.map +0 -1
- package/dist/ui/icons.d.ts +0 -49
- package/dist/ui/icons.d.ts.map +0 -1
- package/dist/ui/icons.js +0 -281
- package/dist/ui/index.d.ts.map +0 -1
- package/dist/ui/operation/client.d.ts +0 -19
- package/dist/ui/operation/client.d.ts.map +0 -1
- package/dist/ui/operation/index.d.ts +0 -12
- package/dist/ui/operation/index.d.ts.map +0 -1
- package/dist/ui/operation/usage-tabs/client.d.ts +0 -23
- package/dist/ui/operation/usage-tabs/client.d.ts.map +0 -1
- package/dist/ui/operation/usage-tabs/lazy.d.ts +0 -4
- package/dist/ui/operation/usage-tabs/lazy.d.ts.map +0 -1
- package/dist/ui/schema/lazy.d.ts +0 -2
- package/dist/ui/schema/lazy.d.ts.map +0 -1
- package/dist/utils/cn.d.ts +0 -2
- package/dist/utils/cn.d.ts.map +0 -1
- package/dist/utils/deep-equal.d.ts +0 -2
- package/dist/utils/deep-equal.d.ts.map +0 -1
- package/dist/utils/get-typescript-schema.d.ts +0 -4
- package/dist/utils/get-typescript-schema.d.ts.map +0 -1
- package/dist/utils/id-to-title.d.ts +0 -2
- package/dist/utils/id-to-title.d.ts.map +0 -1
- package/dist/utils/lazy.d.ts +0 -5
- package/dist/utils/lazy.d.ts.map +0 -1
- package/dist/utils/merge-schema.d.ts +0 -7
- package/dist/utils/merge-schema.d.ts.map +0 -1
- package/dist/utils/pages/to-body.d.ts +0 -4
- package/dist/utils/pages/to-body.d.ts.map +0 -1
- package/dist/utils/pages/to-static-data.d.ts +0 -10
- package/dist/utils/pages/to-static-data.d.ts.map +0 -1
- package/dist/utils/remove-undefined.d.ts +0 -2
- package/dist/utils/remove-undefined.d.ts.map +0 -1
- package/dist/utils/schema-to-string.d.ts +0 -8
- package/dist/utils/schema-to-string.d.ts.map +0 -1
- package/dist/utils/url.d.ts +0 -11
- package/dist/utils/url.d.ts.map +0 -1
- package/dist/utils/use-query.d.ts +0 -8
- package/dist/utils/use-query.d.ts.map +0 -1
|
@@ -1,131 +1,98 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
tag: entry.rawTag,
|
|
37
|
-
});
|
|
38
|
-
case 'webhook':
|
|
39
|
-
return generatePage(entry.schemaId, processed, {
|
|
40
|
-
webhooks: [entry.item],
|
|
41
|
-
}, {
|
|
42
|
-
...options,
|
|
43
|
-
...entry.info,
|
|
44
|
-
}, {
|
|
45
|
-
type: 'operation',
|
|
46
|
-
});
|
|
47
|
-
}
|
|
1
|
+
import { removeUndefined } from "../remove-undefined.js";
|
|
2
|
+
import { toStaticData } from "./to-static-data.js";
|
|
3
|
+
import { dump } from "js-yaml";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/pages/to-text.ts
|
|
6
|
+
function toText(entry, processed, options = {}) {
|
|
7
|
+
switch (entry.type) {
|
|
8
|
+
case "operation": return generatePage(entry.schemaId, processed, { operations: [entry.item] }, {
|
|
9
|
+
...options,
|
|
10
|
+
...entry.info
|
|
11
|
+
}, { type: "operation" });
|
|
12
|
+
case "group": return generatePage(entry.schemaId, processed, {
|
|
13
|
+
operations: entry.operations,
|
|
14
|
+
webhooks: entry.webhooks,
|
|
15
|
+
showTitle: true
|
|
16
|
+
}, {
|
|
17
|
+
...options,
|
|
18
|
+
...entry.info
|
|
19
|
+
}, { type: "file" });
|
|
20
|
+
case "tag": return generatePage(entry.schemaId, processed, {
|
|
21
|
+
operations: entry.operations,
|
|
22
|
+
webhooks: entry.webhooks,
|
|
23
|
+
showTitle: true
|
|
24
|
+
}, {
|
|
25
|
+
...options,
|
|
26
|
+
...entry.info
|
|
27
|
+
}, {
|
|
28
|
+
type: "tag",
|
|
29
|
+
tag: entry.rawTag
|
|
30
|
+
});
|
|
31
|
+
case "webhook": return generatePage(entry.schemaId, processed, { webhooks: [entry.item] }, {
|
|
32
|
+
...options,
|
|
33
|
+
...entry.info
|
|
34
|
+
}, { type: "operation" });
|
|
35
|
+
}
|
|
48
36
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (imports) {
|
|
64
|
-
out.push(...imports
|
|
65
|
-
.map((item) => `import { ${item.names.join(', ')} } from ${JSON.stringify(item.from)};`)
|
|
66
|
-
.join('\n'));
|
|
67
|
-
}
|
|
68
|
-
out.push(content);
|
|
69
|
-
return out.join('\n\n');
|
|
37
|
+
function generateDocument(frontmatter, content, options) {
|
|
38
|
+
const { addGeneratedComment = true, imports } = options;
|
|
39
|
+
const out = [];
|
|
40
|
+
const banner = dump(removeUndefined(frontmatter)).trimEnd();
|
|
41
|
+
if (banner.length > 0) out.push(`---\n${banner}\n---`);
|
|
42
|
+
if (addGeneratedComment) {
|
|
43
|
+
let commentContent = "This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again.";
|
|
44
|
+
if (typeof addGeneratedComment === "string") commentContent = addGeneratedComment;
|
|
45
|
+
commentContent = commentContent.replaceAll("/", "\\/");
|
|
46
|
+
out.push(`{/* ${commentContent} */}`);
|
|
47
|
+
}
|
|
48
|
+
if (imports) out.push(...imports.map((item) => `import { ${item.names.join(", ")} } from ${JSON.stringify(item.from)};`).join("\n"));
|
|
49
|
+
out.push(content);
|
|
50
|
+
return out.join("\n\n");
|
|
70
51
|
}
|
|
71
52
|
function generatePage(schemaId, processed, pageProps, options, context) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
description: !includeDescription ? options.description : undefined,
|
|
100
|
-
full: true,
|
|
101
|
-
...extend,
|
|
102
|
-
_openapi: {
|
|
103
|
-
...meta,
|
|
104
|
-
...data,
|
|
105
|
-
...extend?._openapi,
|
|
106
|
-
},
|
|
107
|
-
}, content.join('\n\n'), options);
|
|
53
|
+
const { frontmatter, includeDescription = false } = options;
|
|
54
|
+
const extend = frontmatter?.(options.title, options.description, context);
|
|
55
|
+
const page = {
|
|
56
|
+
...pageProps,
|
|
57
|
+
document: schemaId
|
|
58
|
+
};
|
|
59
|
+
let meta;
|
|
60
|
+
if (page.operations?.length === 1) meta = { method: page.operations[0].method.toUpperCase() };
|
|
61
|
+
else if (page.webhooks?.length === 1) meta = {
|
|
62
|
+
method: page.webhooks[0].method.toUpperCase(),
|
|
63
|
+
webhook: true
|
|
64
|
+
};
|
|
65
|
+
const data = toStaticData(page, processed.dereferenced);
|
|
66
|
+
const content = [];
|
|
67
|
+
if (options.description && includeDescription) content.push(options.description);
|
|
68
|
+
content.push(pageContent(page));
|
|
69
|
+
return generateDocument({
|
|
70
|
+
title: options.title,
|
|
71
|
+
description: !includeDescription ? options.description : void 0,
|
|
72
|
+
full: true,
|
|
73
|
+
...extend,
|
|
74
|
+
_openapi: {
|
|
75
|
+
...meta,
|
|
76
|
+
...data,
|
|
77
|
+
...extend?._openapi
|
|
78
|
+
}
|
|
79
|
+
}, content.join("\n\n"), options);
|
|
108
80
|
}
|
|
109
|
-
function pageContent({ showTitle, showDescription, document, webhooks, operations
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
})))}}`);
|
|
123
|
-
}
|
|
124
|
-
if (showTitle) {
|
|
125
|
-
propStrs.push(`showTitle={${JSON.stringify(showTitle)}}`);
|
|
126
|
-
}
|
|
127
|
-
if (showDescription) {
|
|
128
|
-
propStrs.push(`showDescription={${JSON.stringify(showDescription)}}`);
|
|
129
|
-
}
|
|
130
|
-
return `<APIPage ${propStrs.join(' ')} />`;
|
|
81
|
+
function pageContent({ showTitle, showDescription, document, webhooks, operations }) {
|
|
82
|
+
const propStrs = [`document={${JSON.stringify(document)}}`];
|
|
83
|
+
if (webhooks) propStrs.push(`webhooks={${JSON.stringify(webhooks.map((item) => ({
|
|
84
|
+
name: item.name,
|
|
85
|
+
method: item.method
|
|
86
|
+
})))}}`);
|
|
87
|
+
if (operations) propStrs.push(`operations={${JSON.stringify(operations.map((item) => ({
|
|
88
|
+
path: item.path,
|
|
89
|
+
method: item.method
|
|
90
|
+
})))}}`);
|
|
91
|
+
if (showTitle) propStrs.push(`showTitle={${JSON.stringify(showTitle)}}`);
|
|
92
|
+
if (showDescription) propStrs.push(`showDescription={${JSON.stringify(showDescription)}}`);
|
|
93
|
+
return `<APIPage ${propStrs.join(" ")} />`;
|
|
131
94
|
}
|
|
95
|
+
|
|
96
|
+
//#endregion
|
|
97
|
+
export { generateDocument, toText };
|
|
98
|
+
//# sourceMappingURL=to-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-text.js","names":["out: string[]","page: ApiPageProps","meta: InternalOpenAPIMeta | undefined","content: string[]","propStrs: string[]"],"sources":["../../../src/utils/pages/to-text.ts"],"sourcesContent":["import type { ApiPageProps, OperationItem, WebhookItem } from '@/ui/api-page';\nimport type { ProcessedDocument } from '@/utils/process-document';\nimport type { TagObject } from '@/types';\nimport { dump } from 'js-yaml';\nimport { removeUndefined } from '@/utils/remove-undefined';\nimport type { OutputEntry } from '@/utils/pages/builder';\nimport type { InternalOpenAPIMeta } from '@/server/source-api';\nimport { toStaticData } from '@/utils/pages/to-static-data';\n\nexport interface PagesToTextOptions {\n /**\n * Additional imports of your MDX components.\n */\n imports?: {\n names: string[];\n from: string;\n }[];\n\n /**\n * Customise frontmatter.\n *\n * A `full: true` property will be added by default.\n */\n frontmatter?: (\n title: string,\n description: string | undefined,\n context: DocumentContext,\n ) => Record<string, unknown>;\n\n /**\n * Add description to document body.\n *\n * We recommend but don't enable it by default because some OpenAPI schemas have invalid description that breaks MDX syntax.\n *\n * @defaultValue false\n */\n includeDescription?: boolean;\n\n /**\n * Add a comment to the top of generated files indicating they are auto-generated.\n * - `true`: Adds a standardized comment\n * - `false`: No comment is added\n * - `string`: Adds the provided custom comment\n *\n * @defaultValue true\n */\n addGeneratedComment?: boolean | string;\n}\n\nexport function toText(\n entry: OutputEntry,\n processed: ProcessedDocument,\n options: PagesToTextOptions = {},\n) {\n switch (entry.type) {\n case 'operation':\n return generatePage(\n entry.schemaId,\n processed,\n {\n operations: [entry.item],\n },\n {\n ...options,\n ...entry.info,\n },\n {\n type: 'operation',\n },\n );\n case 'group':\n return generatePage(\n entry.schemaId,\n processed,\n {\n operations: entry.operations,\n webhooks: entry.webhooks,\n showTitle: true,\n },\n {\n ...options,\n ...entry.info,\n },\n {\n type: 'file',\n },\n );\n case 'tag':\n return generatePage(\n entry.schemaId,\n processed,\n {\n operations: entry.operations,\n webhooks: entry.webhooks,\n showTitle: true,\n },\n {\n ...options,\n ...entry.info,\n },\n {\n type: 'tag',\n tag: entry.rawTag,\n },\n );\n case 'webhook':\n return generatePage(\n entry.schemaId,\n processed,\n {\n webhooks: [entry.item],\n },\n {\n ...options,\n ...entry.info,\n },\n {\n type: 'operation',\n },\n );\n }\n}\n\nexport function generateDocument(\n frontmatter: unknown,\n content: string,\n options: PagesToTextOptions,\n): string {\n const { addGeneratedComment = true, imports } = options;\n const out: string[] = [];\n const banner = dump(removeUndefined(frontmatter as object)).trimEnd();\n if (banner.length > 0) out.push(`---\\n${banner}\\n---`);\n\n if (addGeneratedComment) {\n let commentContent =\n 'This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again.';\n\n if (typeof addGeneratedComment === 'string') {\n commentContent = addGeneratedComment;\n }\n\n commentContent = commentContent.replaceAll('/', '\\\\/');\n out.push(`{/* ${commentContent} */}`);\n }\n\n if (imports) {\n out.push(\n ...imports\n .map((item) => `import { ${item.names.join(', ')} } from ${JSON.stringify(item.from)};`)\n .join('\\n'),\n );\n }\n\n out.push(content);\n return out.join('\\n\\n');\n}\n\nexport type DocumentContext =\n | {\n type: 'tag';\n tag: TagObject | undefined;\n }\n | {\n type: 'operation';\n }\n | {\n type: 'file';\n };\n\nfunction generatePage(\n schemaId: string,\n processed: ProcessedDocument,\n pageProps: Omit<ApiPageProps, 'document'>,\n options: PagesToTextOptions & {\n title: string;\n description?: string;\n },\n context: DocumentContext,\n): string {\n const { frontmatter, includeDescription = false } = options;\n const extend = frontmatter?.(options.title, options.description, context);\n const page: ApiPageProps = {\n ...pageProps,\n document: schemaId,\n };\n\n let meta: InternalOpenAPIMeta | undefined;\n if (page.operations?.length === 1) {\n const operation = page.operations[0];\n\n meta = {\n method: operation.method.toUpperCase(),\n };\n } else if (page.webhooks?.length === 1) {\n const webhook = page.webhooks[0];\n\n meta = {\n method: webhook.method.toUpperCase(),\n webhook: true,\n };\n }\n\n const data = toStaticData(page, processed.dereferenced);\n const content: string[] = [];\n\n if (options.description && includeDescription) content.push(options.description);\n content.push(pageContent(page));\n\n return generateDocument(\n {\n title: options.title,\n description: !includeDescription ? options.description : undefined,\n full: true,\n ...extend,\n _openapi: {\n ...meta,\n ...data,\n ...(extend?._openapi as object | undefined),\n },\n },\n content.join('\\n\\n'),\n options,\n );\n}\n\nfunction pageContent({\n showTitle,\n showDescription,\n document,\n webhooks,\n operations,\n}: ApiPageProps): string {\n const propStrs: string[] = [`document={${JSON.stringify(document)}}`];\n\n // filter extra properties in props\n if (webhooks) {\n propStrs.push(\n `webhooks={${JSON.stringify(\n webhooks.map(\n (item) =>\n ({\n name: item.name,\n method: item.method,\n }) satisfies WebhookItem,\n ),\n )}}`,\n );\n }\n if (operations) {\n propStrs.push(\n `operations={${JSON.stringify(\n operations.map(\n (item) =>\n ({\n path: item.path,\n method: item.method,\n }) satisfies OperationItem,\n ),\n )}}`,\n );\n }\n if (showTitle) {\n propStrs.push(`showTitle={${JSON.stringify(showTitle)}}`);\n }\n if (showDescription) {\n propStrs.push(`showDescription={${JSON.stringify(showDescription)}}`);\n }\n\n return `<APIPage ${propStrs.join(' ')} />`;\n}\n"],"mappings":"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"}
|
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { NoReference } from "./schema.js";
|
|
2
|
+
import { Document } from "../types.js";
|
|
3
|
+
import { OpenAPIV3, OpenAPIV3_1 } from "openapi-types";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/process-document.d.ts
|
|
6
|
+
type ProcessedDocument = {
|
|
7
|
+
/**
|
|
8
|
+
* dereferenced document
|
|
9
|
+
*/
|
|
10
|
+
dereferenced: NoReference<Document>;
|
|
11
|
+
_internal_idToSchema: () => Map<string, object>;
|
|
12
|
+
/**
|
|
13
|
+
* Get raw object from dereferenced object
|
|
14
|
+
*/
|
|
15
|
+
getRawRef: (obj: object) => string | undefined;
|
|
16
|
+
bundled: Document;
|
|
15
17
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* process & reference input document to a Fumadocs OpenAPI compatible format
|
|
19
|
-
*/
|
|
20
|
-
export declare function processDocument(input: string | OpenAPIV3_1.Document | OpenAPIV3.Document): Promise<ProcessedDocument>;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { ProcessedDocument };
|
|
21
20
|
//# sourceMappingURL=process-document.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-document.d.ts","
|
|
1
|
+
{"version":3,"file":"process-document.d.ts","names":[],"sources":["../../src/utils/process-document.ts"],"sourcesContent":[],"mappings":";;;;;KAOY,iBAAA;;AAAZ;;EAIgB,YAAA,EAAA,WAAA,CAAY,QAAZ,CAAA;EAEc,oBAAA,EAAA,GAAA,GAAA,GAAA,CAAA,MAAA,EAAA,MAAA,CAAA;EAOnB;;;;WAAA"}
|
|
@@ -1,56 +1,45 @@
|
|
|
1
|
-
import { dereference, upgrade } from
|
|
2
|
-
import { bundle } from
|
|
3
|
-
import { fetchUrls, readFiles } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (typeof input !== 'string')
|
|
7
|
-
return processDocument(input);
|
|
8
|
-
const cached = cache.get(input);
|
|
9
|
-
if (cached)
|
|
10
|
-
return cached;
|
|
11
|
-
const processed = await processDocument(input);
|
|
12
|
-
cache.set(input, processed);
|
|
13
|
-
return processed;
|
|
14
|
-
}
|
|
1
|
+
import { dereference, upgrade } from "@scalar/openapi-parser";
|
|
2
|
+
import { bundle } from "@scalar/json-magic/bundle";
|
|
3
|
+
import { fetchUrls, readFiles } from "@scalar/json-magic/bundle/plugins/node";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/process-document.ts
|
|
15
6
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
},
|
|
51
|
-
_internal_idToSchema() {
|
|
52
|
-
return serializable;
|
|
53
|
-
},
|
|
54
|
-
bundled: document,
|
|
55
|
-
};
|
|
7
|
+
* process & reference input document to a Fumadocs OpenAPI compatible format
|
|
8
|
+
*/
|
|
9
|
+
async function processDocument(input) {
|
|
10
|
+
const document = await bundle(input, {
|
|
11
|
+
plugins: [fetchUrls(), readFiles()],
|
|
12
|
+
treeShake: true,
|
|
13
|
+
urlMap: true,
|
|
14
|
+
hooks: { onResolveError(node) {
|
|
15
|
+
throw new Error(`Failed to resolve ${node.$ref}`);
|
|
16
|
+
} }
|
|
17
|
+
}).then((v) => upgrade(v).specification).catch((e) => {
|
|
18
|
+
throw new Error(`[OpenAPI] Failed to resolve input: ${input}`, { cause: e });
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* Dereferenced value and its original `$ref` value
|
|
22
|
+
*/
|
|
23
|
+
const dereferenceMap = /* @__PURE__ */ new WeakMap();
|
|
24
|
+
const serializable = /* @__PURE__ */ new Map();
|
|
25
|
+
return {
|
|
26
|
+
dereferenced: dereference(document, {
|
|
27
|
+
throwOnError: true,
|
|
28
|
+
onDereference({ schema, ref }) {
|
|
29
|
+
serializable.set(ref, schema);
|
|
30
|
+
dereferenceMap.set(schema, ref);
|
|
31
|
+
}
|
|
32
|
+
}).schema,
|
|
33
|
+
getRawRef(obj) {
|
|
34
|
+
return dereferenceMap.get(obj);
|
|
35
|
+
},
|
|
36
|
+
_internal_idToSchema() {
|
|
37
|
+
return serializable;
|
|
38
|
+
},
|
|
39
|
+
bundled: document
|
|
40
|
+
};
|
|
56
41
|
}
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
export { processDocument };
|
|
45
|
+
//# sourceMappingURL=process-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-document.js","names":[],"sources":["../../src/utils/process-document.ts"],"sourcesContent":["import type { Document } from '@/types';\nimport type { NoReference } from '@/utils/schema';\nimport type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types';\nimport { dereference, upgrade } from '@scalar/openapi-parser';\nimport { bundle } from '@scalar/json-magic/bundle';\nimport { fetchUrls, readFiles } from '@scalar/json-magic/bundle/plugins/node';\n\nexport type ProcessedDocument = {\n /**\n * dereferenced document\n */\n dereferenced: NoReference<Document>;\n\n _internal_idToSchema: () => Map<string, object>;\n\n /**\n * Get raw object from dereferenced object\n */\n getRawRef: (obj: object) => string | undefined;\n\n bundled: Document;\n};\n\nconst cache = new Map<string, ProcessedDocument>();\n\nexport async function processDocumentCached(\n input: string | OpenAPIV3_1.Document | OpenAPIV3.Document,\n): Promise<ProcessedDocument> {\n if (typeof input !== 'string') return processDocument(input);\n\n const cached = cache.get(input);\n if (cached) return cached;\n const processed = await processDocument(input);\n\n cache.set(input, processed);\n return processed;\n}\n\n/**\n * process & reference input document to a Fumadocs OpenAPI compatible format\n */\nexport async function processDocument(\n input: string | OpenAPIV3_1.Document | OpenAPIV3.Document,\n): Promise<ProcessedDocument> {\n const document = await bundle(input as string, {\n plugins: [fetchUrls(), readFiles()],\n treeShake: true,\n urlMap: true,\n hooks: {\n onResolveError(node) {\n throw new Error(`Failed to resolve ${node.$ref}`);\n },\n },\n })\n .then((v) => upgrade(v).specification)\n .catch((e) => {\n throw new Error(`[OpenAPI] Failed to resolve input: ${input}`, {\n cause: e,\n });\n });\n\n /**\n * Dereferenced value and its original `$ref` value\n */\n const dereferenceMap = new WeakMap<object, string>();\n const serializable = new Map<string, object>();\n\n return {\n dereferenced: dereference(document, {\n throwOnError: true,\n onDereference({ schema, ref }) {\n serializable.set(ref, schema);\n dereferenceMap.set(schema, ref);\n },\n }).schema as NoReference<Document>,\n getRawRef(obj) {\n return dereferenceMap.get(obj);\n },\n\n _internal_idToSchema() {\n return serializable;\n },\n bundled: document as Document,\n };\n}\n"],"mappings":";;;;;;;;AAyCA,eAAsB,gBACpB,OAC4B;CAC5B,MAAM,WAAW,MAAM,OAAO,OAAiB;EAC7C,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;EACnC,WAAW;EACX,QAAQ;EACR,OAAO,EACL,eAAe,MAAM;AACnB,SAAM,IAAI,MAAM,qBAAqB,KAAK,OAAO;KAEpD;EACF,CAAC,CACC,MAAM,MAAM,QAAQ,EAAE,CAAC,cAAc,CACrC,OAAO,MAAM;AACZ,QAAM,IAAI,MAAM,sCAAsC,SAAS,EAC7D,OAAO,GACR,CAAC;GACF;;;;CAKJ,MAAM,iCAAiB,IAAI,SAAyB;CACpD,MAAM,+BAAe,IAAI,KAAqB;AAE9C,QAAO;EACL,cAAc,YAAY,UAAU;GAClC,cAAc;GACd,cAAc,EAAE,QAAQ,OAAO;AAC7B,iBAAa,IAAI,KAAK,OAAO;AAC7B,mBAAe,IAAI,QAAQ,IAAI;;GAElC,CAAC,CAAC;EACH,UAAU,KAAK;AACb,UAAO,eAAe,IAAI,IAAI;;EAGhC,uBAAuB;AACrB,UAAO;;EAET,SAAS;EACV"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
removeUndefined(item, deep);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return value;
|
|
1
|
+
//#region src/utils/remove-undefined.ts
|
|
2
|
+
function removeUndefined(value, deep = false) {
|
|
3
|
+
const obj = value;
|
|
4
|
+
for (const key in obj) {
|
|
5
|
+
if (obj[key] === void 0) delete obj[key];
|
|
6
|
+
if (!deep) continue;
|
|
7
|
+
const entry = obj[key];
|
|
8
|
+
if (typeof entry === "object" && entry !== null) {
|
|
9
|
+
removeUndefined(entry, deep);
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
if (Array.isArray(entry)) for (const item of entry) removeUndefined(item, deep);
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
19
15
|
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { removeUndefined };
|
|
19
|
+
//# sourceMappingURL=remove-undefined.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-undefined.js","names":[],"sources":["../../src/utils/remove-undefined.ts"],"sourcesContent":["export function removeUndefined<T extends object>(value: T, deep = false): T {\n const obj = value as Record<string, unknown>;\n\n for (const key in obj) {\n if (obj[key] === undefined) delete obj[key];\n if (!deep) continue;\n\n const entry = obj[key];\n\n if (typeof entry === 'object' && entry !== null) {\n removeUndefined(entry, deep);\n continue;\n }\n\n if (Array.isArray(entry)) {\n for (const item of entry) removeUndefined(item, deep);\n }\n }\n\n return value;\n}\n"],"mappings":";AAAA,SAAgB,gBAAkC,OAAU,OAAO,OAAU;CAC3E,MAAM,MAAM;AAEZ,MAAK,MAAM,OAAO,KAAK;AACrB,MAAI,IAAI,SAAS,OAAW,QAAO,IAAI;AACvC,MAAI,CAAC,KAAM;EAEX,MAAM,QAAQ,IAAI;AAElB,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,mBAAgB,OAAO,KAAK;AAC5B;;AAGF,MAAI,MAAM,QAAQ,MAAM,CACtB,MAAK,MAAM,QAAQ,MAAO,iBAAgB,MAAM,KAAK;;AAIzD,QAAO"}
|
|
@@ -1,65 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (schema.oneOf && schema.anyOf) {
|
|
44
|
-
return `(${union(schema.oneOf, ' | ', flags)}) & (${union(schema.anyOf, ' | ', flags)})`;
|
|
45
|
-
}
|
|
46
|
-
else if (or) {
|
|
47
|
-
return union(or, ' | ', flags);
|
|
48
|
-
}
|
|
49
|
-
if (schema.allOf) {
|
|
50
|
-
return union(schema.allOf, ' & ', flags);
|
|
51
|
-
}
|
|
52
|
-
if (schema.not)
|
|
53
|
-
return `not ${run(schema.not, flags)}`;
|
|
54
|
-
if (schema.type === 'string' && schema.format === 'binary')
|
|
55
|
-
return 'file';
|
|
56
|
-
if (schema.type && Array.isArray(schema.type)) {
|
|
57
|
-
return schema.type.filter((v) => v !== 'null').join(' | ');
|
|
58
|
-
}
|
|
59
|
-
if (schema.type) {
|
|
60
|
-
return schema.type;
|
|
61
|
-
}
|
|
62
|
-
return 'unknown';
|
|
63
|
-
}
|
|
64
|
-
return run(value, flags);
|
|
1
|
+
//#region src/utils/schema-to-string.ts
|
|
2
|
+
let FormatFlags = /* @__PURE__ */ function(FormatFlags$1) {
|
|
3
|
+
FormatFlags$1[FormatFlags$1["None"] = 0] = "None";
|
|
4
|
+
FormatFlags$1[FormatFlags$1["UseAlias"] = 1] = "UseAlias";
|
|
5
|
+
return FormatFlags$1;
|
|
6
|
+
}({});
|
|
7
|
+
function schemaToString(value, ctx, flags = FormatFlags.None) {
|
|
8
|
+
function union(union$1, sep, flags$1) {
|
|
9
|
+
const members = /* @__PURE__ */ new Set();
|
|
10
|
+
let nullable = false;
|
|
11
|
+
for (const item of union$1) {
|
|
12
|
+
const result$1 = run(item, flags$1 | FormatFlags.UseAlias);
|
|
13
|
+
if (result$1 === "null") nullable = true;
|
|
14
|
+
else if (result$1 !== "unknown") members.add(result$1);
|
|
15
|
+
}
|
|
16
|
+
const result = Array.from(members).join(sep);
|
|
17
|
+
return nullable ? `${result} | null` : result;
|
|
18
|
+
}
|
|
19
|
+
function run(schema, flags$1) {
|
|
20
|
+
if (schema === true) return "any";
|
|
21
|
+
else if (schema === false) return "never";
|
|
22
|
+
if ((flags$1 & FormatFlags.UseAlias) === FormatFlags.UseAlias) {
|
|
23
|
+
if (schema.title) return schema.title;
|
|
24
|
+
const ref = ctx?.getRawRef(schema)?.split("/");
|
|
25
|
+
if (ref && ref.length > 0) return ref[ref.length - 1];
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(schema.type)) return union(schema.type.map((type) => ({
|
|
28
|
+
...schema,
|
|
29
|
+
type
|
|
30
|
+
})), " | ", flags$1);
|
|
31
|
+
if (schema.type === "array") return `array<${schema.items ? run(schema.items, flags$1 | FormatFlags.UseAlias) : "unknown"}>`;
|
|
32
|
+
const or = schema.oneOf ?? schema.anyOf;
|
|
33
|
+
if (schema.oneOf && schema.anyOf) return `(${union(schema.oneOf, " | ", flags$1)}) & (${union(schema.anyOf, " | ", flags$1)})`;
|
|
34
|
+
else if (or) return union(or, " | ", flags$1);
|
|
35
|
+
if (schema.allOf) return union(schema.allOf, " & ", flags$1);
|
|
36
|
+
if (schema.not) return `not ${run(schema.not, flags$1)}`;
|
|
37
|
+
if (schema.type === "string" && schema.format === "binary") return "file";
|
|
38
|
+
if (schema.type && Array.isArray(schema.type)) return schema.type.filter((v) => v !== "null").join(" | ");
|
|
39
|
+
if (schema.type) return schema.type;
|
|
40
|
+
return "unknown";
|
|
41
|
+
}
|
|
42
|
+
return run(value, flags);
|
|
65
43
|
}
|
|
44
|
+
|
|
45
|
+
//#endregion
|
|
46
|
+
export { FormatFlags, schemaToString };
|
|
47
|
+
//# sourceMappingURL=schema-to-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-to-string.js","names":["union","result","flags"],"sources":["../../src/utils/schema-to-string.ts"],"sourcesContent":["import { type ResolvedSchema } from '@/utils/schema';\nimport type { ProcessedDocument } from '@/utils/process-document';\n\nexport enum FormatFlags {\n None = 0,\n UseAlias = 1 << 0,\n}\n\nexport function schemaToString(\n value: ResolvedSchema,\n ctx?: ProcessedDocument,\n flags: FormatFlags = FormatFlags.None,\n): string {\n function union(union: readonly ResolvedSchema[], sep: string, flags: FormatFlags) {\n const members = new Set();\n let nullable = false;\n\n for (const item of union) {\n const result = run(item, flags | FormatFlags.UseAlias);\n\n if (result === 'null') {\n nullable = true;\n } else if (result !== 'unknown') {\n members.add(result);\n }\n }\n\n const result = Array.from(members).join(sep);\n return nullable ? `${result} | null` : result;\n }\n\n function run(schema: ResolvedSchema, flags: FormatFlags): string {\n if (schema === true) return 'any';\n else if (schema === false) return 'never';\n\n if ((flags & FormatFlags.UseAlias) === FormatFlags.UseAlias) {\n if (schema.title) return schema.title;\n\n const ref = ctx?.getRawRef(schema)?.split('/');\n if (ref && ref.length > 0) return ref[ref.length - 1];\n }\n\n if (Array.isArray(schema.type)) {\n return union(\n schema.type.map((type) => ({\n ...schema,\n type,\n })),\n ' | ',\n flags,\n );\n }\n\n if (schema.type === 'array')\n return `array<${schema.items ? run(schema.items, flags | FormatFlags.UseAlias) : 'unknown'}>`;\n\n const or = schema.oneOf ?? schema.anyOf;\n if (schema.oneOf && schema.anyOf) {\n return `(${union(schema.oneOf, ' | ', flags)}) & (${union(schema.anyOf, ' | ', flags)})`;\n } else if (or) {\n return union(or, ' | ', flags);\n }\n\n if (schema.allOf) {\n return union(schema.allOf, ' & ', flags);\n }\n\n if (schema.not) return `not ${run(schema.not, flags)}`;\n if (schema.type === 'string' && schema.format === 'binary') return 'file';\n\n if (schema.type && Array.isArray(schema.type)) {\n return schema.type.filter((v) => v !== 'null').join(' | ');\n }\n\n if (schema.type) {\n return schema.type as string;\n }\n\n return 'unknown';\n }\n\n return run(value, flags);\n}\n"],"mappings":";AAGA,IAAY,sDAAL;AACL;AACA;;;AAGF,SAAgB,eACd,OACA,KACA,QAAqB,YAAY,MACzB;CACR,SAAS,MAAM,SAAkC,KAAa,SAAoB;EAChF,MAAM,0BAAU,IAAI,KAAK;EACzB,IAAI,WAAW;AAEf,OAAK,MAAM,QAAQA,SAAO;GACxB,MAAMC,WAAS,IAAI,MAAMC,UAAQ,YAAY,SAAS;AAEtD,OAAID,aAAW,OACb,YAAW;YACFA,aAAW,UACpB,SAAQ,IAAIA,SAAO;;EAIvB,MAAM,SAAS,MAAM,KAAK,QAAQ,CAAC,KAAK,IAAI;AAC5C,SAAO,WAAW,GAAG,OAAO,WAAW;;CAGzC,SAAS,IAAI,QAAwB,SAA4B;AAC/D,MAAI,WAAW,KAAM,QAAO;WACnB,WAAW,MAAO,QAAO;AAElC,OAAKC,UAAQ,YAAY,cAAc,YAAY,UAAU;AAC3D,OAAI,OAAO,MAAO,QAAO,OAAO;GAEhC,MAAM,MAAM,KAAK,UAAU,OAAO,EAAE,MAAM,IAAI;AAC9C,OAAI,OAAO,IAAI,SAAS,EAAG,QAAO,IAAI,IAAI,SAAS;;AAGrD,MAAI,MAAM,QAAQ,OAAO,KAAK,CAC5B,QAAO,MACL,OAAO,KAAK,KAAK,UAAU;GACzB,GAAG;GACH;GACD,EAAE,EACH,OACAA,QACD;AAGH,MAAI,OAAO,SAAS,QAClB,QAAO,SAAS,OAAO,QAAQ,IAAI,OAAO,OAAOA,UAAQ,YAAY,SAAS,GAAG,UAAU;EAE7F,MAAM,KAAK,OAAO,SAAS,OAAO;AAClC,MAAI,OAAO,SAAS,OAAO,MACzB,QAAO,IAAI,MAAM,OAAO,OAAO,OAAOA,QAAM,CAAC,OAAO,MAAM,OAAO,OAAO,OAAOA,QAAM,CAAC;WAC7E,GACT,QAAO,MAAM,IAAI,OAAOA,QAAM;AAGhC,MAAI,OAAO,MACT,QAAO,MAAM,OAAO,OAAO,OAAOA,QAAM;AAG1C,MAAI,OAAO,IAAK,QAAO,OAAO,IAAI,OAAO,KAAKA,QAAM;AACpD,MAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAAU,QAAO;AAEnE,MAAI,OAAO,QAAQ,MAAM,QAAQ,OAAO,KAAK,CAC3C,QAAO,OAAO,KAAK,QAAQ,MAAM,MAAM,OAAO,CAAC,KAAK,MAAM;AAG5D,MAAI,OAAO,KACT,QAAO,OAAO;AAGhB,SAAO;;AAGT,QAAO,IAAI,OAAO,MAAM"}
|
package/dist/utils/schema.d.ts
CHANGED
|
@@ -1,30 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} : T;
|
|
1
|
+
import { ReferenceObject } from "../types.js";
|
|
2
|
+
import { OpenAPIV3_1 } from "openapi-types";
|
|
3
|
+
import { JSONSchema } from "json-schema-typed/draft-2020-12";
|
|
4
|
+
|
|
5
|
+
//#region src/utils/schema.d.ts
|
|
6
|
+
type NoReference<T> = T extends (infer I)[] ? NoReference<I>[] : T extends ReferenceObject ? Exclude<T, ReferenceObject> : T extends object ? { [K in keyof T]: NoReference<T[K]> } : T;
|
|
8
7
|
type NoReferenceJSONSchema<T> = T extends (infer I)[] ? NoReference<I>[] : T extends {
|
|
9
|
-
|
|
8
|
+
$ref?: string;
|
|
10
9
|
} ? Omit<T, '$ref'> : T;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
export
|
|
15
|
-
/**
|
|
16
|
-
* Summarize method endpoint information
|
|
17
|
-
*/
|
|
18
|
-
export declare function createMethod(method: string, path: NoReference<PathItemObject>, operation: NoReference<OperationObject>): MethodInformation;
|
|
19
|
-
interface ExampleLike {
|
|
20
|
-
example?: unknown;
|
|
21
|
-
examples?: {
|
|
22
|
-
[media: string]: OpenAPIV3_1.ExampleObject;
|
|
23
|
-
};
|
|
24
|
-
content?: {
|
|
25
|
-
[media: string]: OpenAPIV3_1.MediaTypeObject;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
export declare function pickExample(value: ExampleLike): unknown | undefined;
|
|
29
|
-
export {};
|
|
10
|
+
type ParsedSchema = JSONSchema;
|
|
11
|
+
type ResolvedSchema = NoReferenceJSONSchema<ParsedSchema>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { NoReference, ParsedSchema, ResolvedSchema };
|
|
30
14
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","
|
|
1
|
+
{"version":3,"file":"schema.d.ts","names":[],"sources":["../../src/utils/schema.ts"],"sourcesContent":[],"mappings":";;;;;KAaY,iBAAiB,wBACzB,YAAY,OACZ,UAAU,kBACR,QAAQ,GAAG,mBACX,2BAJM,MAMU,CANV,GAMc,WANH,CAMe,CANf,CAMiB,CANjB,CAAA,CAAA,EAAM,GAQrB,CARqB;KAUxB,qBATW,CAAA,CAAA,CAAA,GASgB,CAThB,SAAA,CAAA,KAAA,EAAA,CAAA,EAAA,GAUZ,WAVY,CAUA,CAVA,CAAA,EAAA,GAWZ,CAXY,SAAA;EAAZ,IAAA,CAAA,EAAA,MAAA;CACA,GAWE,IAXF,CAWO,CAXP,EAAA,MAAA,CAAA,GAYE,CAZF;AAAU,KAcF,YAAA,GAAe,UAdb;AACA,KAcF,cAAA,GAAiB,qBAdf,CAcqC,YAdrC,CAAA"}
|