fumadocs-openapi 10.2.1 → 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 -25
- package/dist/server/source-api.d.ts.map +1 -1
- package/dist/server/source-api.js +82 -69
- 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 +35 -34
- 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
package/dist/ui/schema/index.js
CHANGED
|
@@ -1,252 +1,229 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { FormatFlags, schemaToString } from "../../utils/schema-to-string.js";
|
|
2
|
+
import { mergeAllOf } from "../../utils/merge-schema.js";
|
|
3
|
+
import { SchemaUILazy } from "./lazy.js";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/ui/schema/index.tsx
|
|
7
|
+
function Schema({ ctx, ...options }) {
|
|
8
|
+
if (ctx.schemaUI?.render) return ctx.schemaUI.render(options, ctx);
|
|
9
|
+
return /* @__PURE__ */ jsx(SchemaUILazy, {
|
|
10
|
+
...options.client,
|
|
11
|
+
generated: generateSchemaUI(options, ctx)
|
|
12
|
+
});
|
|
10
13
|
}
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
refs[id] = {
|
|
214
|
-
type: 'array',
|
|
215
|
-
item: {
|
|
216
|
-
$type,
|
|
217
|
-
},
|
|
218
|
-
...base(schema),
|
|
219
|
-
};
|
|
220
|
-
scanRefs($type, items);
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
refs[id] = {
|
|
224
|
-
type: 'primitive',
|
|
225
|
-
...base(schema),
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
const $root = getSchemaId(root);
|
|
229
|
-
scanRefs($root, root);
|
|
230
|
-
return {
|
|
231
|
-
refs,
|
|
232
|
-
$root,
|
|
233
|
-
};
|
|
14
|
+
function generateSchemaUI({ root, readOnly, writeOnly }, ctx) {
|
|
15
|
+
const refs = {};
|
|
16
|
+
const { showExample = false } = ctx.schemaUI ?? {};
|
|
17
|
+
function generateInfoTags(schema) {
|
|
18
|
+
const fields = [];
|
|
19
|
+
function field(key, value) {
|
|
20
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
21
|
+
className: "bg-fd-secondary border rounded-lg text-xs p-1.5 shadow-md",
|
|
22
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
23
|
+
className: "font-medium me-2",
|
|
24
|
+
children: key
|
|
25
|
+
}), /* @__PURE__ */ jsx("code", {
|
|
26
|
+
className: "text-fd-muted-foreground",
|
|
27
|
+
children: value
|
|
28
|
+
})]
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
if (schema.default !== void 0) fields.push(field("Default", JSON.stringify(schema.default)));
|
|
32
|
+
if (schema.pattern) fields.push(field("Match", schema.pattern));
|
|
33
|
+
if (schema.format) fields.push(field("Format", schema.format));
|
|
34
|
+
if (schema.multipleOf) fields.push(field("Multiple Of", schema.multipleOf));
|
|
35
|
+
let range = formatRange("value", schema.minimum, schema.exclusiveMinimum, schema.maximum, schema.exclusiveMaximum);
|
|
36
|
+
if (range) fields.push(field("Range", range));
|
|
37
|
+
range = formatRange("length", schema.minLength, void 0, schema.maxLength, void 0);
|
|
38
|
+
if (range) fields.push(field("Length", range));
|
|
39
|
+
range = formatRange("properties", schema.minProperties, void 0, schema.maxProperties, void 0);
|
|
40
|
+
if (range) fields.push(field("Properties", range));
|
|
41
|
+
range = formatRange("items", schema.minItems, void 0, schema.maxItems, void 0);
|
|
42
|
+
if (range) fields.push(field("Items", range));
|
|
43
|
+
if (schema.enum) fields.push(field("Value in", schema.enum.map((value) => JSON.stringify(value)).join(" | ")));
|
|
44
|
+
if (showExample && schema.examples) for (const example of schema.examples) fields.push(field("Example", JSON.stringify(example, null, 2)));
|
|
45
|
+
return fields;
|
|
46
|
+
}
|
|
47
|
+
let _counter = 0;
|
|
48
|
+
const autoIds = /* @__PURE__ */ new WeakMap();
|
|
49
|
+
function getSchemaId(schema) {
|
|
50
|
+
if (typeof schema === "boolean") return String(schema);
|
|
51
|
+
const raw = ctx.schema.getRawRef(schema);
|
|
52
|
+
if (raw) return raw;
|
|
53
|
+
const prev = autoIds.get(schema);
|
|
54
|
+
if (prev) return prev;
|
|
55
|
+
const generated = `__${_counter++}`;
|
|
56
|
+
autoIds.set(schema, generated);
|
|
57
|
+
return generated;
|
|
58
|
+
}
|
|
59
|
+
function isVisible(schema) {
|
|
60
|
+
if (typeof schema === "boolean") return true;
|
|
61
|
+
if (schema.writeOnly) return writeOnly ?? false;
|
|
62
|
+
if (schema.readOnly) return readOnly ?? false;
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
function base(schema) {
|
|
66
|
+
if (typeof schema === "boolean") {
|
|
67
|
+
const name = schema ? "any" : "never";
|
|
68
|
+
return {
|
|
69
|
+
typeName: name,
|
|
70
|
+
aliasName: name
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
description: schema.description && ctx.renderMarkdown(schema.description),
|
|
75
|
+
infoTags: generateInfoTags(schema),
|
|
76
|
+
typeName: schemaToString(schema, ctx.schema),
|
|
77
|
+
aliasName: schemaToString(schema, ctx.schema, FormatFlags.UseAlias),
|
|
78
|
+
deprecated: schema.deprecated
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function scanRefs(id, schema) {
|
|
82
|
+
if (id in refs) return;
|
|
83
|
+
if (typeof schema === "boolean") {
|
|
84
|
+
refs[id] = {
|
|
85
|
+
type: "primitive",
|
|
86
|
+
...base(schema)
|
|
87
|
+
};
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (Array.isArray(schema.type)) {
|
|
91
|
+
const out = {
|
|
92
|
+
type: "or",
|
|
93
|
+
items: [],
|
|
94
|
+
...base(schema)
|
|
95
|
+
};
|
|
96
|
+
refs[id] = out;
|
|
97
|
+
for (const type of schema.type) {
|
|
98
|
+
const key = `${id}_type:${type}`;
|
|
99
|
+
scanRefs(key, {
|
|
100
|
+
...schema,
|
|
101
|
+
type
|
|
102
|
+
});
|
|
103
|
+
out.items.push({
|
|
104
|
+
name: type,
|
|
105
|
+
$type: key
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (schema.oneOf && schema.anyOf) {
|
|
111
|
+
const out = {
|
|
112
|
+
type: "and",
|
|
113
|
+
items: [],
|
|
114
|
+
...base(schema)
|
|
115
|
+
};
|
|
116
|
+
refs[id] = out;
|
|
117
|
+
for (const omit of ["anyOf", "oneOf"]) {
|
|
118
|
+
const $type = `${id}_omit:${omit}`;
|
|
119
|
+
scanRefs($type, {
|
|
120
|
+
...schema,
|
|
121
|
+
[omit]: void 0
|
|
122
|
+
});
|
|
123
|
+
out.items.push({
|
|
124
|
+
name: refs[$type].aliasName,
|
|
125
|
+
$type
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const union = schema.oneOf ?? schema.anyOf;
|
|
131
|
+
if (union) {
|
|
132
|
+
const out = {
|
|
133
|
+
type: "or",
|
|
134
|
+
items: [],
|
|
135
|
+
...base(schema)
|
|
136
|
+
};
|
|
137
|
+
refs[id] = out;
|
|
138
|
+
for (const item of union) {
|
|
139
|
+
if (typeof item !== "object" || !isVisible(item)) continue;
|
|
140
|
+
const itemId = getSchemaId(item);
|
|
141
|
+
const key = `${id}_extends:${itemId}`;
|
|
142
|
+
scanRefs(key, {
|
|
143
|
+
...schema,
|
|
144
|
+
oneOf: void 0,
|
|
145
|
+
anyOf: void 0,
|
|
146
|
+
...item,
|
|
147
|
+
properties: {
|
|
148
|
+
...schema.properties,
|
|
149
|
+
...item.properties
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
out.items.push({
|
|
153
|
+
$type: key,
|
|
154
|
+
name: refs[itemId]?.aliasName ?? schemaToString(item, ctx.schema, FormatFlags.UseAlias)
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (schema.allOf) {
|
|
160
|
+
scanRefs(id, mergeAllOf(schema));
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (schema.type === "object") {
|
|
164
|
+
const out = {
|
|
165
|
+
type: "object",
|
|
166
|
+
props: [],
|
|
167
|
+
...base(schema)
|
|
168
|
+
};
|
|
169
|
+
refs[id] = out;
|
|
170
|
+
const { properties = {}, patternProperties, additionalProperties } = schema;
|
|
171
|
+
const props = Object.entries(properties);
|
|
172
|
+
if (patternProperties) props.push(...Object.entries(patternProperties));
|
|
173
|
+
for (const [key, prop] of props) {
|
|
174
|
+
if (!isVisible(prop)) continue;
|
|
175
|
+
const $type = getSchemaId(prop);
|
|
176
|
+
scanRefs($type, prop);
|
|
177
|
+
out.props.push({
|
|
178
|
+
$type,
|
|
179
|
+
name: key,
|
|
180
|
+
required: schema.required?.includes(key) ?? false
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
if (additionalProperties !== void 0 && isVisible(additionalProperties)) {
|
|
184
|
+
const $type = getSchemaId(additionalProperties);
|
|
185
|
+
scanRefs($type, additionalProperties);
|
|
186
|
+
out.props.push({
|
|
187
|
+
$type,
|
|
188
|
+
name: "[key: string]",
|
|
189
|
+
required: false
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (schema.type === "array") {
|
|
195
|
+
const items = schema.items ?? true;
|
|
196
|
+
const $type = getSchemaId(items);
|
|
197
|
+
refs[id] = {
|
|
198
|
+
type: "array",
|
|
199
|
+
item: { $type },
|
|
200
|
+
...base(schema)
|
|
201
|
+
};
|
|
202
|
+
scanRefs($type, items);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
refs[id] = {
|
|
206
|
+
type: "primitive",
|
|
207
|
+
...base(schema)
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
const $root = getSchemaId(root);
|
|
211
|
+
scanRefs($root, root);
|
|
212
|
+
return {
|
|
213
|
+
refs,
|
|
214
|
+
$root
|
|
215
|
+
};
|
|
234
216
|
}
|
|
235
217
|
function formatRange(value, min, exclusiveMin, max, exclusiveMax) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
out.push(value);
|
|
244
|
-
if (max !== undefined) {
|
|
245
|
-
out.push(`<= ${max}`);
|
|
246
|
-
}
|
|
247
|
-
else if (exclusiveMax !== undefined) {
|
|
248
|
-
out.push(`< ${exclusiveMax}`);
|
|
249
|
-
}
|
|
250
|
-
if (out.length > 1)
|
|
251
|
-
return out.join(' ');
|
|
218
|
+
const out = [];
|
|
219
|
+
if (min !== void 0) out.push(`${min} <=`);
|
|
220
|
+
else if (exclusiveMin !== void 0) out.push(`${exclusiveMin} <`);
|
|
221
|
+
out.push(value);
|
|
222
|
+
if (max !== void 0) out.push(`<= ${max}`);
|
|
223
|
+
else if (exclusiveMax !== void 0) out.push(`< ${exclusiveMax}`);
|
|
224
|
+
if (out.length > 1) return out.join(" ");
|
|
252
225
|
}
|
|
226
|
+
|
|
227
|
+
//#endregion
|
|
228
|
+
export { Schema };
|
|
229
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["refs: Record<string, SchemaData>","fields: ReactNode[]","out: SchemaData","out: string[]"],"sources":["../../../src/ui/schema/index.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport type { ResolvedSchema } from '@/utils/schema';\nimport type { RenderContext } from '@/types';\nimport { FormatFlags, schemaToString } from '@/utils/schema-to-string';\nimport { mergeAllOf } from '@/utils/merge-schema';\nimport type { SchemaUIProps } from '@/ui/schema/client';\nimport { SchemaUILazy } from '@/ui/schema/lazy';\n\nexport interface FieldBase {\n description?: ReactNode;\n infoTags?: ReactNode[];\n\n typeName: string;\n aliasName: string;\n\n deprecated?: boolean;\n}\n\nexport type SchemaData = FieldBase &\n (\n | {\n type: 'primitive';\n }\n | {\n type: 'object';\n props: {\n name: string;\n $type: string;\n required: boolean;\n }[];\n }\n | {\n type: 'array';\n item: {\n $type: string;\n };\n }\n | {\n type: 'or';\n items: {\n name: string;\n $type: string;\n }[];\n }\n | {\n type: 'and';\n items: {\n name: string;\n $type: string;\n }[];\n }\n );\n\nexport interface SchemaUIOptions {\n root: ResolvedSchema;\n client: Omit<SchemaUIProps, 'generated'>;\n\n /**\n * include read only props\n */\n readOnly?: boolean;\n /**\n * include write only props\n */\n writeOnly?: boolean;\n}\n\nexport interface SchemaUIGeneratedData {\n $root: string;\n refs: Record<string, SchemaData>;\n}\n\nexport function Schema({\n ctx,\n ...options\n}: SchemaUIOptions & {\n ctx: RenderContext;\n}) {\n if (ctx.schemaUI?.render) {\n return ctx.schemaUI.render(options, ctx);\n }\n\n return <SchemaUILazy {...options.client} generated={generateSchemaUI(options, ctx)} />;\n}\n\nexport function generateSchemaUI(\n { root, readOnly, writeOnly }: SchemaUIOptions,\n ctx: RenderContext,\n): SchemaUIGeneratedData {\n const refs: Record<string, SchemaData> = {};\n const { showExample = false } = ctx.schemaUI ?? {};\n\n function generateInfoTags(schema: Exclude<ResolvedSchema, boolean>) {\n const fields: ReactNode[] = [];\n\n function field(key: string, value: ReactNode) {\n return (\n <div className=\"bg-fd-secondary border rounded-lg text-xs p-1.5 shadow-md\">\n <span className=\"font-medium me-2\">{key}</span>\n <code className=\"text-fd-muted-foreground\">{value}</code>\n </div>\n );\n }\n\n if (schema.default !== undefined) {\n fields.push(field('Default', JSON.stringify(schema.default)));\n }\n\n if (schema.pattern) {\n fields.push(field('Match', schema.pattern));\n }\n\n if (schema.format) {\n fields.push(field('Format', schema.format));\n }\n\n if (schema.multipleOf) {\n fields.push(field('Multiple Of', schema.multipleOf));\n }\n\n let range = formatRange(\n 'value',\n schema.minimum,\n schema.exclusiveMinimum,\n schema.maximum,\n schema.exclusiveMaximum,\n );\n if (range) fields.push(field('Range', range));\n\n range = formatRange('length', schema.minLength, undefined, schema.maxLength, undefined);\n if (range) fields.push(field('Length', range));\n\n range = formatRange(\n 'properties',\n schema.minProperties,\n undefined,\n schema.maxProperties,\n undefined,\n );\n if (range) fields.push(field('Properties', range));\n\n range = formatRange('items', schema.minItems, undefined, schema.maxItems, undefined);\n if (range) fields.push(field('Items', range));\n\n if (schema.enum) {\n fields.push(field('Value in', schema.enum.map((value) => JSON.stringify(value)).join(' | ')));\n }\n\n if (showExample && schema.examples) {\n for (const example of schema.examples) {\n fields.push(field('Example', JSON.stringify(example, null, 2)));\n }\n }\n\n return fields;\n }\n\n let _counter = 0;\n const autoIds = new WeakMap();\n function getSchemaId(schema: ResolvedSchema) {\n if (typeof schema === 'boolean') return String(schema);\n const raw = ctx.schema.getRawRef(schema);\n if (raw) return raw;\n\n const prev = autoIds.get(schema);\n if (prev) return prev;\n\n const generated = `__${_counter++}`;\n autoIds.set(schema, generated);\n return generated;\n }\n\n function isVisible(schema: ResolvedSchema): boolean {\n if (typeof schema === 'boolean') return true;\n if (schema.writeOnly) return writeOnly ?? false;\n if (schema.readOnly) return readOnly ?? false;\n return true;\n }\n\n function base(schema: ResolvedSchema): FieldBase {\n if (typeof schema === 'boolean') {\n const name = schema ? 'any' : 'never';\n return {\n typeName: name,\n aliasName: name,\n };\n }\n\n return {\n description: schema.description && ctx.renderMarkdown(schema.description),\n infoTags: generateInfoTags(schema),\n typeName: schemaToString(schema, ctx.schema),\n aliasName: schemaToString(schema, ctx.schema, FormatFlags.UseAlias),\n deprecated: schema.deprecated,\n };\n }\n\n function scanRefs(id: string, schema: ResolvedSchema) {\n if (id in refs) return;\n if (typeof schema === 'boolean') {\n refs[id] = {\n type: 'primitive',\n ...base(schema),\n };\n return;\n }\n\n if (Array.isArray(schema.type)) {\n const out: SchemaData = {\n type: 'or',\n items: [],\n ...base(schema),\n };\n refs[id] = out;\n\n for (const type of schema.type) {\n const key = `${id}_type:${type}`;\n scanRefs(key, {\n ...schema,\n type,\n });\n out.items.push({\n name: type,\n $type: key,\n });\n }\n return;\n }\n\n if (schema.oneOf && schema.anyOf) {\n const out: SchemaData = {\n type: 'and',\n items: [],\n ...base(schema),\n };\n refs[id] = out;\n for (const omit of ['anyOf', 'oneOf'] as const) {\n const $type = `${id}_omit:${omit}`;\n scanRefs($type, { ...schema, [omit]: undefined });\n\n out.items.push({\n name: refs[$type].aliasName,\n $type,\n });\n }\n return;\n }\n\n // display both `oneOf` & `anyOf` as OR for simplified overview\n const union = schema.oneOf ?? schema.anyOf;\n if (union) {\n const out: SchemaData = {\n type: 'or',\n items: [],\n ...base(schema),\n };\n refs[id] = out;\n\n for (const item of union) {\n if (typeof item !== 'object' || !isVisible(item)) continue;\n const itemId = getSchemaId(item);\n const key = `${id}_extends:${itemId}`;\n\n scanRefs(key, {\n ...schema,\n oneOf: undefined,\n anyOf: undefined,\n ...item,\n properties: {\n ...schema.properties,\n ...item.properties,\n },\n });\n out.items.push({\n $type: key,\n name: refs[itemId]?.aliasName ?? schemaToString(item, ctx.schema, FormatFlags.UseAlias),\n });\n }\n return;\n }\n\n if (schema.allOf) {\n scanRefs(id, mergeAllOf(schema));\n return;\n }\n\n if (schema.type === 'object') {\n const out: SchemaData = {\n type: 'object',\n props: [],\n ...base(schema),\n };\n refs[id] = out;\n\n const { properties = {}, patternProperties, additionalProperties } = schema;\n const props = Object.entries(properties);\n if (patternProperties) props.push(...Object.entries(patternProperties));\n\n for (const [key, prop] of props) {\n if (!isVisible(prop)) continue;\n const $type = getSchemaId(prop);\n scanRefs($type, prop);\n out.props.push({\n $type,\n name: key,\n required: schema.required?.includes(key) ?? false,\n });\n }\n\n if (additionalProperties !== undefined && isVisible(additionalProperties)) {\n const $type = getSchemaId(additionalProperties);\n scanRefs($type, additionalProperties);\n\n out.props.push({\n $type,\n name: '[key: string]',\n required: false,\n });\n }\n return;\n }\n\n if (schema.type === 'array') {\n const items = schema.items ?? true;\n const $type = getSchemaId(items);\n\n refs[id] = {\n type: 'array',\n item: {\n $type,\n },\n ...base(schema),\n };\n scanRefs($type, items);\n return;\n }\n\n refs[id] = {\n type: 'primitive',\n ...base(schema),\n };\n }\n\n const $root = getSchemaId(root);\n scanRefs($root, root);\n return {\n refs,\n $root,\n };\n}\n\nfunction formatRange(\n value: string,\n min: number | undefined,\n exclusiveMin: number | undefined,\n max: number | undefined,\n exclusiveMax: number | undefined,\n) {\n const out: string[] = [];\n if (min !== undefined) {\n out.push(`${min} <=`);\n } else if (exclusiveMin !== undefined) {\n out.push(`${exclusiveMin} <`);\n }\n\n out.push(value);\n if (max !== undefined) {\n out.push(`<= ${max}`);\n } else if (exclusiveMax !== undefined) {\n out.push(`< ${exclusiveMax}`);\n }\n if (out.length > 1) return out.join(' ');\n}\n"],"mappings":"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"}
|
package/dist/ui/schema/lazy.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
import { wrapLazy } from "../../utils/lazy.js";
|
|
4
|
+
|
|
5
|
+
//#region src/ui/schema/lazy.ts
|
|
6
|
+
const SchemaUILazy = wrapLazy(() => import("./client.js").then((mod) => ({ default: mod.SchemaUI })));
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { SchemaUILazy };
|
|
10
|
+
//# sourceMappingURL=lazy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy.js","names":[],"sources":["../../../src/ui/schema/lazy.ts"],"sourcesContent":["'use client';\nimport { wrapLazy } from '../../utils/lazy';\n\nexport const SchemaUILazy = wrapLazy(() =>\n import('./client').then((mod) => ({ default: mod.SchemaUI })),\n);\n"],"mappings":";;;;;AAGA,MAAa,eAAe,eAC1B,OAAO,eAAY,MAAM,SAAS,EAAE,SAAS,IAAI,UAAU,EAAE,CAC9D"}
|
package/dist/utils/cn.js
CHANGED
package/dist/utils/deep-equal.js
CHANGED
|
@@ -1,27 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return a.every((item, index) => deepEqual(item, b[index]));
|
|
16
|
-
}
|
|
17
|
-
if (Array.isArray(a) || Array.isArray(b)) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
const keysA = Object.keys(a);
|
|
21
|
-
const keysB = Object.keys(b);
|
|
22
|
-
if (keysA.length !== keysB.length) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
return keysA.every((key) => Object.prototype.hasOwnProperty.call(b, key) &&
|
|
26
|
-
deepEqual(a[key], b[key]));
|
|
1
|
+
//#region src/utils/deep-equal.ts
|
|
2
|
+
function deepEqual(a, b) {
|
|
3
|
+
if (a === b) return true;
|
|
4
|
+
if (a == null || b == null) return false;
|
|
5
|
+
if (typeof a !== "object" || typeof b !== "object") return false;
|
|
6
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
7
|
+
if (a.length !== b.length) return false;
|
|
8
|
+
return a.every((item, index) => deepEqual(item, b[index]));
|
|
9
|
+
}
|
|
10
|
+
if (Array.isArray(a) || Array.isArray(b)) return false;
|
|
11
|
+
const keysA = Object.keys(a);
|
|
12
|
+
const keysB = Object.keys(b);
|
|
13
|
+
if (keysA.length !== keysB.length) return false;
|
|
14
|
+
return keysA.every((key) => Object.prototype.hasOwnProperty.call(b, key) && deepEqual(a[key], b[key]));
|
|
27
15
|
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { deepEqual };
|
|
19
|
+
//# sourceMappingURL=deep-equal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-equal.js","names":[],"sources":["../../src/utils/deep-equal.ts"],"sourcesContent":["export function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null) {\n return false;\n }\n\n if (typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n return a.every((item, index) => deepEqual(item, b[index]));\n }\n\n if (Array.isArray(a) || Array.isArray(b)) {\n return false;\n }\n\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n return keysA.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(b, key) &&\n deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]),\n );\n}\n"],"mappings":";AAAA,SAAgB,UAAU,GAAY,GAAqB;AACzD,KAAI,MAAM,EACR,QAAO;AAGT,KAAI,KAAK,QAAQ,KAAK,KACpB,QAAO;AAGT,KAAI,OAAO,MAAM,YAAY,OAAO,MAAM,SACxC,QAAO;AAGT,KAAI,MAAM,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,EAAE;AACxC,MAAI,EAAE,WAAW,EAAE,OACjB,QAAO;AAET,SAAO,EAAE,OAAO,MAAM,UAAU,UAAU,MAAM,EAAE,OAAO,CAAC;;AAG5D,KAAI,MAAM,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,CACtC,QAAO;CAGT,MAAM,QAAQ,OAAO,KAAK,EAAY;CACtC,MAAM,QAAQ,OAAO,KAAK,EAAY;AAEtC,KAAI,MAAM,WAAW,MAAM,OACzB,QAAO;AAGT,QAAO,MAAM,OACV,QACC,OAAO,UAAU,eAAe,KAAK,GAAG,IAAI,IAC5C,UAAW,EAA8B,MAAO,EAA8B,KAAK,CACtF"}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
console.warn('Failed to generate typescript schema:', e);
|
|
19
|
-
}
|
|
1
|
+
//#region src/utils/get-typescript-schema.ts
|
|
2
|
+
async function getTypescriptSchema(schema, ctx) {
|
|
3
|
+
const { compile } = await import("@fumari/json-schema-to-typescript");
|
|
4
|
+
try {
|
|
5
|
+
const input = structuredClone({
|
|
6
|
+
schema,
|
|
7
|
+
idToSchema: ctx.schema._internal_idToSchema()
|
|
8
|
+
});
|
|
9
|
+
const schemaToId = /* @__PURE__ */ new WeakMap();
|
|
10
|
+
for (const [k, v] of input.idToSchema) schemaToId.set(v, k);
|
|
11
|
+
return await compile(input.schema, "Response", {
|
|
12
|
+
enableConstEnums: false,
|
|
13
|
+
schemaToId
|
|
14
|
+
});
|
|
15
|
+
} catch (e) {
|
|
16
|
+
console.warn("Failed to generate typescript schema:", e);
|
|
17
|
+
}
|
|
20
18
|
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { getTypescriptSchema };
|
|
22
|
+
//# sourceMappingURL=get-typescript-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-typescript-schema.js","names":[],"sources":["../../src/utils/get-typescript-schema.ts"],"sourcesContent":["import type { SchemaObject } from 'ajv';\nimport type { RenderContext } from '@/types';\n\nexport async function getTypescriptSchema(\n schema: SchemaObject,\n ctx: RenderContext,\n): Promise<string | undefined> {\n const { compile } = await import('@fumari/json-schema-to-typescript');\n\n try {\n const input = structuredClone({\n schema,\n idToSchema: ctx.schema._internal_idToSchema(),\n });\n\n const schemaToId = new WeakMap<object, string>();\n\n for (const [k, v] of input.idToSchema) {\n schemaToId.set(v, k);\n }\n\n return await compile(input.schema, 'Response', {\n enableConstEnums: false,\n schemaToId,\n });\n } catch (e) {\n console.warn('Failed to generate typescript schema:', e);\n }\n}\n"],"mappings":";AAGA,eAAsB,oBACpB,QACA,KAC6B;CAC7B,MAAM,EAAE,YAAY,MAAM,OAAO;AAEjC,KAAI;EACF,MAAM,QAAQ,gBAAgB;GAC5B;GACA,YAAY,IAAI,OAAO,sBAAsB;GAC9C,CAAC;EAEF,MAAM,6BAAa,IAAI,SAAyB;AAEhD,OAAK,MAAM,CAAC,GAAG,MAAM,MAAM,WACzB,YAAW,IAAI,GAAG,EAAE;AAGtB,SAAO,MAAM,QAAQ,MAAM,QAAQ,YAAY;GAC7C,kBAAkB;GAClB;GACD,CAAC;UACK,GAAG;AACV,UAAQ,KAAK,yCAAyC,EAAE"}
|