@scalar/schemas 0.2.0

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/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # @scalar/schemas
2
+
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#9211](https://github.com/scalar/scalar/pull/9211): feat: write custom schemas for api-reference configuration
8
+
9
+ ## 0.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#8844](https://github.com/scalar/scalar/pull/8844): feat: write custom schemas for api-reference configuration
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023-present Scalar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,278 @@
1
+ export declare const apiReferenceConfigurationSchema: import("@scalar/validation").IntersectionSchema<readonly [import("@scalar/validation").ObjectSchema<{
2
+ title: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
3
+ slug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
4
+ authentication: import("@scalar/validation").OptionalSchema<import("@scalar/validation").AnySchema>;
5
+ baseServerURL: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
6
+ hideClientButton: import("@scalar/validation").BooleanSchema;
7
+ proxyUrl: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
8
+ oauth2RedirectUri: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
9
+ searchHotKey: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"a"> | import("@scalar/validation").LiteralSchema<"b"> | import("@scalar/validation").LiteralSchema<"c"> | import("@scalar/validation").LiteralSchema<"d"> | import("@scalar/validation").LiteralSchema<"e"> | import("@scalar/validation").LiteralSchema<"f"> | import("@scalar/validation").LiteralSchema<"g"> | import("@scalar/validation").LiteralSchema<"h"> | import("@scalar/validation").LiteralSchema<"i"> | import("@scalar/validation").LiteralSchema<"j"> | import("@scalar/validation").LiteralSchema<"k"> | import("@scalar/validation").LiteralSchema<"l"> | import("@scalar/validation").LiteralSchema<"m"> | import("@scalar/validation").LiteralSchema<"n"> | import("@scalar/validation").LiteralSchema<"o"> | import("@scalar/validation").LiteralSchema<"p"> | import("@scalar/validation").LiteralSchema<"q"> | import("@scalar/validation").LiteralSchema<"r"> | import("@scalar/validation").LiteralSchema<"s"> | import("@scalar/validation").LiteralSchema<"t"> | import("@scalar/validation").LiteralSchema<"u"> | import("@scalar/validation").LiteralSchema<"v"> | import("@scalar/validation").LiteralSchema<"w"> | import("@scalar/validation").LiteralSchema<"x"> | import("@scalar/validation").LiteralSchema<"y"> | import("@scalar/validation").LiteralSchema<"z">)[]>>;
10
+ servers: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ArraySchema<import("@scalar/validation").AnySchema>>;
11
+ showSidebar: import("@scalar/validation").BooleanSchema;
12
+ showDeveloperTools: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"localhost"> | import("@scalar/validation").LiteralSchema<"always"> | import("@scalar/validation").LiteralSchema<"never">)[]>;
13
+ showToolbar: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"localhost"> | import("@scalar/validation").LiteralSchema<"always"> | import("@scalar/validation").LiteralSchema<"never">)[]>;
14
+ operationTitleSource: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"summary"> | import("@scalar/validation").LiteralSchema<"path">)[]>;
15
+ theme: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"default"> | import("@scalar/validation").LiteralSchema<"alternate"> | import("@scalar/validation").LiteralSchema<"moon"> | import("@scalar/validation").LiteralSchema<"purple"> | import("@scalar/validation").LiteralSchema<"solarized"> | import("@scalar/validation").LiteralSchema<"bluePlanet"> | import("@scalar/validation").LiteralSchema<"deepSpace"> | import("@scalar/validation").LiteralSchema<"saturn"> | import("@scalar/validation").LiteralSchema<"kepler"> | import("@scalar/validation").LiteralSchema<"elysiajs"> | import("@scalar/validation").LiteralSchema<"fastify"> | import("@scalar/validation").LiteralSchema<"mars"> | import("@scalar/validation").LiteralSchema<"laserwave"> | import("@scalar/validation").LiteralSchema<"none">)[]>;
16
+ _integration: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").NullableSchema | import("@scalar/validation").LiteralSchema<"elysiajs"> | import("@scalar/validation").LiteralSchema<"fastify"> | import("@scalar/validation").LiteralSchema<"adonisjs"> | import("@scalar/validation").LiteralSchema<"astro"> | import("@scalar/validation").LiteralSchema<"docusaurus"> | import("@scalar/validation").LiteralSchema<"dotnet"> | import("@scalar/validation").LiteralSchema<"express"> | import("@scalar/validation").LiteralSchema<"fastapi"> | import("@scalar/validation").LiteralSchema<"go"> | import("@scalar/validation").LiteralSchema<"hono"> | import("@scalar/validation").LiteralSchema<"html"> | import("@scalar/validation").LiteralSchema<"laravel"> | import("@scalar/validation").LiteralSchema<"litestar"> | import("@scalar/validation").LiteralSchema<"nestjs"> | import("@scalar/validation").LiteralSchema<"nextjs"> | import("@scalar/validation").LiteralSchema<"nitro"> | import("@scalar/validation").LiteralSchema<"nuxt"> | import("@scalar/validation").LiteralSchema<"platformatic"> | import("@scalar/validation").LiteralSchema<"react"> | import("@scalar/validation").LiteralSchema<"rust"> | import("@scalar/validation").LiteralSchema<"svelte"> | import("@scalar/validation").LiteralSchema<"vue">)[]>>;
17
+ onRequestSent: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: string) => void>>;
18
+ persistAuth: import("@scalar/validation").BooleanSchema;
19
+ telemetry: import("@scalar/validation").BooleanSchema;
20
+ externalUrls: import("@scalar/validation").ObjectSchema<{
21
+ dashboardUrl: import("@scalar/validation").StringSchema;
22
+ registryUrl: import("@scalar/validation").StringSchema;
23
+ proxyUrl: import("@scalar/validation").StringSchema;
24
+ apiBaseUrl: import("@scalar/validation").StringSchema;
25
+ }>;
26
+ }>, import("@scalar/validation").ObjectSchema<{
27
+ default: import("@scalar/validation").BooleanSchema;
28
+ url: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
29
+ content: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").StringSchema | import("@scalar/validation").NullableSchema | import("@scalar/validation").RecordSchema<import("@scalar/validation").StringSchema, import("@scalar/validation").AnySchema> | import("@scalar/validation").FunctionSchema<() => string | any>)[]>>;
30
+ title: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
31
+ slug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
32
+ spec: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ObjectSchema<{
33
+ url: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
34
+ content: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").StringSchema | import("@scalar/validation").NullableSchema | import("@scalar/validation").RecordSchema<import("@scalar/validation").StringSchema, import("@scalar/validation").AnySchema> | import("@scalar/validation").FunctionSchema<() => string | any>)[]>>;
35
+ }>>;
36
+ agent: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ObjectSchema<{
37
+ key: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
38
+ disabled: import("@scalar/validation").OptionalSchema<import("@scalar/validation").BooleanSchema>;
39
+ hideAddApi: import("@scalar/validation").OptionalSchema<import("@scalar/validation").BooleanSchema>;
40
+ }>>;
41
+ }>, import("@scalar/validation").ObjectSchema<{
42
+ layout: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"modern"> | import("@scalar/validation").LiteralSchema<"classic">)[]>;
43
+ proxy: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
44
+ fetch: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<typeof fetch>>;
45
+ plugins: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ArraySchema<import("@scalar/validation").FunctionSchema<() => {
46
+ name: string;
47
+ extensions: import("@scalar/validation").Static<import("@scalar/validation").ObjectSchema<{
48
+ name: import("@scalar/validation").StringSchema;
49
+ component: import("@scalar/validation").UnknownSchema;
50
+ renderer: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnknownSchema>;
51
+ }>>[];
52
+ views: import("@scalar/validation").Static<import("@scalar/validation").ObjectSchema<{
53
+ 'content.end': import("@scalar/validation").OptionalSchema<import("@scalar/validation").ArraySchema<import("@scalar/validation").ObjectSchema<{
54
+ component: import("@scalar/validation").UnknownSchema;
55
+ renderer: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnknownSchema>;
56
+ props: import("@scalar/validation").OptionalSchema<import("@scalar/validation").RecordSchema<import("@scalar/validation").StringSchema, import("@scalar/validation").AnySchema>>;
57
+ }>>>;
58
+ }>>;
59
+ hooks: import("@scalar/validation").Static<import("@scalar/validation").ObjectSchema<{
60
+ onInit: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<({ config }: {
61
+ config: any;
62
+ }) => void>>;
63
+ onConfigChange: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<({ config }: {
64
+ config: any;
65
+ }) => void>>;
66
+ onDestroy: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<() => void>>;
67
+ }>>;
68
+ apiClientPlugins: any[];
69
+ }>>>;
70
+ isEditable: import("@scalar/validation").BooleanSchema;
71
+ isLoading: import("@scalar/validation").BooleanSchema;
72
+ hideModels: import("@scalar/validation").BooleanSchema;
73
+ documentDownloadType: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"none"> | import("@scalar/validation").LiteralSchema<"both"> | import("@scalar/validation").LiteralSchema<"yaml"> | import("@scalar/validation").LiteralSchema<"json"> | import("@scalar/validation").LiteralSchema<"direct">)[]>;
74
+ hideDownloadButton: import("@scalar/validation").OptionalSchema<import("@scalar/validation").BooleanSchema>;
75
+ hideTestRequestButton: import("@scalar/validation").BooleanSchema;
76
+ hideSearch: import("@scalar/validation").BooleanSchema;
77
+ showOperationId: import("@scalar/validation").BooleanSchema;
78
+ darkMode: import("@scalar/validation").OptionalSchema<import("@scalar/validation").BooleanSchema>;
79
+ forceDarkModeState: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"dark"> | import("@scalar/validation").LiteralSchema<"light">)[]>>;
80
+ hideDarkModeToggle: import("@scalar/validation").BooleanSchema;
81
+ metaData: import("@scalar/validation").OptionalSchema<import("@scalar/validation").AnySchema>;
82
+ favicon: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
83
+ hiddenClients: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").ArraySchema<import("@scalar/validation").StringSchema> | import("@scalar/validation").RecordSchema<import("@scalar/validation").StringSchema, import("@scalar/validation").UnionSchema<(import("@scalar/validation").BooleanSchema | import("@scalar/validation").ArraySchema<import("@scalar/validation").StringSchema>)[]>> | import("@scalar/validation").LiteralSchema<true>)[]>>;
84
+ defaultHttpClient: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ObjectSchema<{
85
+ targetKey: import("@scalar/validation").StringSchema;
86
+ clientKey: import("@scalar/validation").StringSchema;
87
+ }>>;
88
+ customCss: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
89
+ onSpecUpdate: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: string) => void>>;
90
+ onServerChange: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: string) => void>>;
91
+ onDocumentSelect: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<() => void>>;
92
+ onLoaded: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(slug: string) => Promise<void> | void>>;
93
+ onBeforeRequest: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: {
94
+ request: Request;
95
+ requestBuilder: unknown;
96
+ envVariables: Record<string, string>;
97
+ }) => Promise<void> | void>>;
98
+ onShowMore: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(tagId: string) => Promise<void> | void>>;
99
+ onSidebarClick: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(href: string) => Promise<void> | void>>;
100
+ pathRouting: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ObjectSchema<{
101
+ basePath: import("@scalar/validation").StringSchema;
102
+ }>>;
103
+ mcp: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ObjectSchema<{
104
+ name: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
105
+ url: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
106
+ disabled: import("@scalar/validation").OptionalSchema<import("@scalar/validation").BooleanSchema>;
107
+ }>>;
108
+ generateHeadingSlug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: {
109
+ slug?: string;
110
+ }) => string>>;
111
+ generateModelSlug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: {
112
+ name?: string;
113
+ }) => string>>;
114
+ generateTagSlug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: {
115
+ name?: string;
116
+ }) => string>>;
117
+ generateOperationSlug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: {
118
+ path: string;
119
+ operationId?: string;
120
+ method: string;
121
+ summary?: string;
122
+ }) => string>>;
123
+ generateWebhookSlug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: {
124
+ name: string;
125
+ method?: string;
126
+ }) => string>>;
127
+ redirect: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: string) => string | null | undefined>>;
128
+ withDefaultFonts: import("@scalar/validation").BooleanSchema;
129
+ defaultOpenFirstTag: import("@scalar/validation").BooleanSchema;
130
+ defaultOpenAllTags: import("@scalar/validation").BooleanSchema;
131
+ expandAllModelSections: import("@scalar/validation").BooleanSchema;
132
+ expandAllResponses: import("@scalar/validation").BooleanSchema;
133
+ tagsSorter: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"alpha"> | import("@scalar/validation").FunctionSchema<(a: any, b: any) => number>)[]>>;
134
+ operationsSorter: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"alpha"> | import("@scalar/validation").LiteralSchema<"method"> | import("@scalar/validation").FunctionSchema<(a: any, b: any) => number>)[]>>;
135
+ orderSchemaPropertiesBy: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"alpha"> | import("@scalar/validation").LiteralSchema<"preserve">)[]>;
136
+ orderRequiredPropertiesFirst: import("@scalar/validation").BooleanSchema;
137
+ }>]>;
138
+ export declare const apiReferenceConfigurationWithSourceSchema: (rawInput: unknown) => {
139
+ hideClientButton: boolean;
140
+ showSidebar: boolean;
141
+ showDeveloperTools: "localhost" | "always" | "never";
142
+ showToolbar: "localhost" | "always" | "never";
143
+ operationTitleSource: "summary" | "path";
144
+ theme: "default" | "alternate" | "moon" | "purple" | "solarized" | "bluePlanet" | "deepSpace" | "saturn" | "kepler" | "elysiajs" | "fastify" | "mars" | "laserwave" | "none";
145
+ persistAuth: boolean;
146
+ telemetry: boolean;
147
+ externalUrls: {
148
+ dashboardUrl: string;
149
+ registryUrl: string;
150
+ proxyUrl: string;
151
+ apiBaseUrl: string;
152
+ };
153
+ } & {
154
+ proxyUrl?: string | undefined;
155
+ title?: string | undefined;
156
+ slug?: string | undefined;
157
+ authentication?: any;
158
+ baseServerURL?: string | undefined;
159
+ oauth2RedirectUri?: string | undefined;
160
+ searchHotKey?: "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | undefined;
161
+ servers?: any[] | undefined;
162
+ _integration?: "elysiajs" | "fastify" | "adonisjs" | "astro" | "docusaurus" | "dotnet" | "express" | "fastapi" | "go" | "hono" | "html" | "laravel" | "litestar" | "nestjs" | "nextjs" | "nitro" | "nuxt" | "platformatic" | "react" | "rust" | "svelte" | "vue" | null | undefined;
163
+ onRequestSent?: ((input: string) => void) | undefined;
164
+ } & {
165
+ default: boolean;
166
+ } & {
167
+ title?: string | undefined;
168
+ slug?: string | undefined;
169
+ url?: string | undefined;
170
+ content?: string | Record<string, any> | (() => string | any) | null | undefined;
171
+ spec?: {
172
+ url?: string | undefined;
173
+ content?: string | Record<string, any> | (() => string | any) | null | undefined;
174
+ } | undefined;
175
+ agent?: {
176
+ key?: string | undefined;
177
+ disabled?: boolean | undefined;
178
+ hideAddApi?: boolean | undefined;
179
+ } | undefined;
180
+ } & {
181
+ layout: "modern" | "classic";
182
+ isEditable: boolean;
183
+ isLoading: boolean;
184
+ hideModels: boolean;
185
+ documentDownloadType: "none" | "both" | "yaml" | "json" | "direct";
186
+ hideTestRequestButton: boolean;
187
+ hideSearch: boolean;
188
+ showOperationId: boolean;
189
+ hideDarkModeToggle: boolean;
190
+ withDefaultFonts: boolean;
191
+ defaultOpenFirstTag: boolean;
192
+ defaultOpenAllTags: boolean;
193
+ expandAllModelSections: boolean;
194
+ expandAllResponses: boolean;
195
+ orderSchemaPropertiesBy: "alpha" | "preserve";
196
+ orderRequiredPropertiesFirst: boolean;
197
+ } & {
198
+ proxy?: string | undefined;
199
+ fetch?: typeof fetch | undefined;
200
+ plugins?: (() => {
201
+ name: string;
202
+ extensions: import("@scalar/validation").Static<import("@scalar/validation").ObjectSchema<{
203
+ name: import("@scalar/validation").StringSchema;
204
+ component: import("@scalar/validation").UnknownSchema;
205
+ renderer: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnknownSchema>;
206
+ }>>[];
207
+ views: import("@scalar/validation").Static<import("@scalar/validation").ObjectSchema<{
208
+ 'content.end': import("@scalar/validation").OptionalSchema<import("@scalar/validation").ArraySchema<import("@scalar/validation").ObjectSchema<{
209
+ component: import("@scalar/validation").UnknownSchema;
210
+ renderer: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnknownSchema>;
211
+ props: import("@scalar/validation").OptionalSchema<import("@scalar/validation").RecordSchema<import("@scalar/validation").StringSchema, import("@scalar/validation").AnySchema>>;
212
+ }>>>;
213
+ }>>;
214
+ hooks: import("@scalar/validation").Static<import("@scalar/validation").ObjectSchema<{
215
+ onInit: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<({ config }: {
216
+ config: any;
217
+ }) => void>>;
218
+ onConfigChange: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<({ config }: {
219
+ config: any;
220
+ }) => void>>;
221
+ onDestroy: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<() => void>>;
222
+ }>>;
223
+ apiClientPlugins: any[];
224
+ })[] | undefined;
225
+ hideDownloadButton?: boolean | undefined;
226
+ darkMode?: boolean | undefined;
227
+ forceDarkModeState?: "dark" | "light" | undefined;
228
+ metaData?: any;
229
+ favicon?: string | undefined;
230
+ hiddenClients?: true | string[] | Record<string, boolean | string[]> | undefined;
231
+ defaultHttpClient?: {
232
+ targetKey: string;
233
+ clientKey: string;
234
+ } | undefined;
235
+ customCss?: string | undefined;
236
+ onSpecUpdate?: ((input: string) => void) | undefined;
237
+ onServerChange?: ((input: string) => void) | undefined;
238
+ onDocumentSelect?: (() => void) | undefined;
239
+ onLoaded?: ((slug: string) => Promise<void> | void) | undefined;
240
+ onBeforeRequest?: ((input: {
241
+ request: Request;
242
+ requestBuilder: unknown;
243
+ envVariables: Record<string, string>;
244
+ }) => Promise<void> | void) | undefined;
245
+ onShowMore?: ((tagId: string) => Promise<void> | void) | undefined;
246
+ onSidebarClick?: ((href: string) => Promise<void> | void) | undefined;
247
+ pathRouting?: {
248
+ basePath: string;
249
+ } | undefined;
250
+ mcp?: {
251
+ name?: string | undefined;
252
+ url?: string | undefined;
253
+ disabled?: boolean | undefined;
254
+ } | undefined;
255
+ generateHeadingSlug?: ((input: {
256
+ slug?: string;
257
+ }) => string) | undefined;
258
+ generateModelSlug?: ((input: {
259
+ name?: string;
260
+ }) => string) | undefined;
261
+ generateTagSlug?: ((input: {
262
+ name?: string;
263
+ }) => string) | undefined;
264
+ generateOperationSlug?: ((input: {
265
+ path: string;
266
+ operationId?: string;
267
+ method: string;
268
+ summary?: string;
269
+ }) => string) | undefined;
270
+ generateWebhookSlug?: ((input: {
271
+ name: string;
272
+ method?: string;
273
+ }) => string) | undefined;
274
+ redirect?: ((input: string) => string | null | undefined) | undefined;
275
+ tagsSorter?: "alpha" | ((a: any, b: any) => number) | undefined;
276
+ operationsSorter?: "alpha" | "method" | ((a: any, b: any) => number) | undefined;
277
+ };
278
+ //# sourceMappingURL=api-reference-configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-reference-configuration.d.ts","sourceRoot":"","sources":["../../src/api-reference/api-reference-configuration.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kHAqFN,MAAM,KAAK,IAAI;oHAGb,MAAM,KAAK,IAAI;oHAGf,IAAI;6GAGX,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;qHAKhD;QACN,OAAO,EAAE,OAAO,CAAA;QAChB,cAAc,EAAE,OAAO,CAAA;QACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACrC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;gHAOE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;mHAG5B,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;;;;;;;;;yHA4BzB;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;uHAG9B;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;qHAG9B;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;2HAIpD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;yHAKvD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;8GAGvD,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;4MA0Bb,GAAG,KAAK,GAAG,KAAK,MAAM;yQAGG,GAAG,KAAK,GAAG,KAAK,MAAM;;;IAWtG,CAAA;AAKF,eAAO,MAAM,yCAAyC,GAAI,UAAU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAvHrC,MAAM,KAAK,IAAI;8BAGb,MAAM,KAAK,IAAI;8BAGf,IAAI;uBAGX,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;+BAKhD;QACN,OAAO,EAAE,OAAO,CAAA;QAChB,cAAc,EAAE,OAAO,CAAA;QACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACrC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;0BAOE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;6BAG5B,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;;;;;;;;;mCA4BzB;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;iCAG9B;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;+BAG9B;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;qCAIpD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;mCAKvD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM;wBAGvD,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS;gCA0Bb,GAAG,KAAK,GAAG,KAAK,MAAM;iDAGG,GAAG,KAAK,GAAG,KAAK,MAAM;CA2EvG,CAAA"}
@@ -0,0 +1,209 @@
1
+ import { any, array, boolean, coerce, fn, intersection, literal, object, optional, record, string, union, } from '@scalar/validation';
2
+ import { apiReferencePluginSchema } from '../api-reference/api-reference-plugin.js';
3
+ import { baseConfigurationSchema } from './base-configuration.js';
4
+ import { sourceConfigurationSchema } from './source-configuration.js';
5
+ export const apiReferenceConfigurationSchema = intersection([
6
+ baseConfigurationSchema,
7
+ sourceConfigurationSchema,
8
+ object({
9
+ layout: union([literal('modern'), literal('classic')], {
10
+ typeComment: 'The layout to use for the references',
11
+ }),
12
+ proxy: optional(string(), {
13
+ typeComment: '@deprecated Use proxyUrl instead',
14
+ }),
15
+ fetch: optional(fn(), {
16
+ typeComment: 'Custom fetch function for custom logic. Can be used to add custom headers, handle auth, etc.',
17
+ }),
18
+ plugins: optional(array(apiReferencePluginSchema), {
19
+ typeComment: 'Plugins for the API reference',
20
+ }),
21
+ isEditable: boolean({
22
+ default: false,
23
+ typeComment: 'Allows the user to inject an editor for the spec',
24
+ }),
25
+ isLoading: boolean({
26
+ default: false,
27
+ typeComment: 'Controls whether the references show a loading state in the intro',
28
+ }),
29
+ hideModels: boolean({
30
+ default: false,
31
+ typeComment: 'Whether to show models in the sidebar, search, and content.',
32
+ }),
33
+ documentDownloadType: union([literal('both'), literal('yaml'), literal('json'), literal('direct'), literal('none')], {
34
+ typeComment: 'Sets the file type of the document to download, set to `none` to hide the download button',
35
+ }),
36
+ hideDownloadButton: optional(boolean(), {
37
+ typeComment: "@deprecated Use `documentDownloadType: 'none'` instead",
38
+ }),
39
+ hideTestRequestButton: boolean({
40
+ default: false,
41
+ typeComment: 'Whether to show the "Test Request" button',
42
+ }),
43
+ hideSearch: boolean({
44
+ default: false,
45
+ typeComment: 'Whether to show the sidebar search bar',
46
+ }),
47
+ showOperationId: boolean({
48
+ default: false,
49
+ typeComment: 'Whether to show the operationId',
50
+ }),
51
+ darkMode: optional(boolean(), {
52
+ typeComment: 'Whether dark mode is on or off initially (light mode)',
53
+ }),
54
+ forceDarkModeState: optional(union([literal('dark'), literal('light')]), {
55
+ typeComment: 'forceDarkModeState makes it always this state no matter what',
56
+ }),
57
+ hideDarkModeToggle: boolean({
58
+ default: false,
59
+ typeComment: 'Whether to show the dark mode toggle',
60
+ }),
61
+ metaData: optional(any(), {
62
+ typeComment: 'If used, passed data will be added to the HTML header. @see https://unhead.unjs.io/usage/composables/use-seo-meta',
63
+ }),
64
+ favicon: optional(string(), {
65
+ typeComment: 'Path to a favicon image',
66
+ }),
67
+ hiddenClients: optional(union([record(string(), union([boolean(), array(string())])), array(string()), literal(true)]), {
68
+ typeComment: 'List of httpsnippet clients to hide from the clients menu. By default hides Unirest, pass `[]` to show all clients',
69
+ }),
70
+ defaultHttpClient: optional(object({
71
+ targetKey: string(),
72
+ clientKey: string(),
73
+ }), {
74
+ typeComment: 'Determine the HTTP client that is selected by default',
75
+ }),
76
+ customCss: optional(string(), {
77
+ typeComment: 'Custom CSS to be added to the page',
78
+ }),
79
+ onSpecUpdate: optional(fn(), {
80
+ typeComment: 'onSpecUpdate is fired on spec/swagger content change',
81
+ }),
82
+ onServerChange: optional(fn(), {
83
+ typeComment: 'onServerChange is fired on selected server change',
84
+ }),
85
+ onDocumentSelect: optional(fn(), {
86
+ typeComment: 'onDocumentSelect is fired when the config is selected',
87
+ }),
88
+ onLoaded: optional(fn(), {
89
+ typeComment: 'Callback fired when the reference is fully loaded',
90
+ }),
91
+ onBeforeRequest: optional(fn(), {
92
+ typeComment: 'Fired before the outbound request is built; callback receives a mutable request builder. Experimental API.',
93
+ }),
94
+ onShowMore: optional(fn(), {
95
+ typeComment: 'onShowMore is fired when the user clicks the "Show more" button on the references',
96
+ }),
97
+ onSidebarClick: optional(fn(), {
98
+ typeComment: 'onSidebarClick is fired when the user clicks on a sidebar item',
99
+ }),
100
+ pathRouting: optional(object({
101
+ basePath: string(),
102
+ }), {
103
+ typeComment: 'Route using paths instead of hashes, your server MUST support this. @experimental',
104
+ }),
105
+ mcp: optional(object({
106
+ name: optional(string(), {
107
+ typeComment: 'Display name for the MCP server',
108
+ }),
109
+ url: optional(string(), {
110
+ typeComment: 'URL of the MCP server',
111
+ }),
112
+ disabled: optional(boolean(), {
113
+ typeComment: 'When true, disables the MCP integration',
114
+ }),
115
+ }), {
116
+ typeComment: 'MCP (Model Context Protocol) configuration. When provided, enables MCP integration with the given name and url.',
117
+ }),
118
+ generateHeadingSlug: optional(fn(), {
119
+ typeComment: 'Customize the heading portion of the hash',
120
+ }),
121
+ generateModelSlug: optional(fn(), {
122
+ typeComment: 'Customize the model portion of the hash',
123
+ }),
124
+ generateTagSlug: optional(fn(), {
125
+ typeComment: 'Customize the tag portion of the hash',
126
+ }),
127
+ generateOperationSlug: optional(fn(), {
128
+ typeComment: 'Customize the operation portion of the hash',
129
+ }),
130
+ generateWebhookSlug: optional(fn(), {
131
+ typeComment: 'Customize the webhook portion of the hash',
132
+ }),
133
+ redirect: optional(fn(), {
134
+ typeComment: 'To handle redirects, pass a function that receives the current path/hash and passes that to history.replaceState',
135
+ }),
136
+ withDefaultFonts: boolean({
137
+ default: true,
138
+ typeComment: 'Whether to include default fonts',
139
+ }),
140
+ defaultOpenFirstTag: boolean({
141
+ default: true,
142
+ typeComment: 'Whether to expand the first tag in the sidebar when no specific URL target is present',
143
+ }),
144
+ defaultOpenAllTags: boolean({
145
+ default: false,
146
+ typeComment: 'Whether to expand all tags by default. Warning: this can cause performance issues on big documents',
147
+ }),
148
+ expandAllModelSections: boolean({
149
+ default: false,
150
+ typeComment: 'Whether to expand all models by default. Warning: this can cause performance issues on big documents',
151
+ }),
152
+ expandAllResponses: boolean({
153
+ default: false,
154
+ typeComment: 'Whether to expand all responses by default. Warning: this can cause performance issues on big documents',
155
+ }),
156
+ tagsSorter: optional(union([literal('alpha'), fn()]), {
157
+ typeComment: 'Function to sort tags',
158
+ }),
159
+ operationsSorter: optional(union([literal('alpha'), literal('method'), fn()]), {
160
+ typeComment: 'Function to sort operations',
161
+ }),
162
+ orderSchemaPropertiesBy: union([literal('alpha'), literal('preserve')], {
163
+ typeComment: 'Order the schema properties by',
164
+ }),
165
+ orderRequiredPropertiesFirst: boolean({
166
+ default: true,
167
+ typeComment: 'Sort the schema properties by required ones first',
168
+ }),
169
+ }),
170
+ ]);
171
+ const OLD_PROXY_URL = 'https://api.scalar.com/request-proxy';
172
+ const NEW_PROXY_URL = 'https://proxy.scalar.com';
173
+ export const apiReferenceConfigurationWithSourceSchema = (rawInput) => {
174
+ const input = coerce(apiReferenceConfigurationSchema, rawInput);
175
+ if (input.hideDownloadButton) {
176
+ console.warn(`[DEPRECATED] You're using the deprecated 'hideDownloadButton' attribute. Use 'documentDownloadType: 'none'' instead.`);
177
+ input.documentDownloadType = 'none';
178
+ }
179
+ if (input.spec?.url) {
180
+ console.warn(`[DEPRECATED] You're using the deprecated 'spec.url' attribute. Remove the spec prefix and move the 'url' attribute to the top level.`);
181
+ input.url = input.spec.url;
182
+ delete input.spec;
183
+ }
184
+ if (input.spec?.content) {
185
+ console.warn(`[DEPRECATED] You're using the deprecated 'spec.content' attribute. Remove the spec prefix and move the 'content' attribute to the top level.`);
186
+ input.content = input.spec.content;
187
+ delete input.spec;
188
+ }
189
+ if (input.proxy) {
190
+ console.warn(`[DEPRECATED] You're using the deprecated 'proxy' attribute. Use 'proxyUrl' instead.`);
191
+ if (!input.proxyUrl) {
192
+ input.proxyUrl = input.proxy;
193
+ }
194
+ delete input.proxy;
195
+ }
196
+ if (input.proxyUrl === OLD_PROXY_URL) {
197
+ console.warn(`[DEPRECATED] Warning: configuration.proxyUrl points to our old proxy (${OLD_PROXY_URL}).`);
198
+ console.warn(`[DEPRECATED] We are overwriting the value and use the new proxy URL (${NEW_PROXY_URL}) instead.`);
199
+ console.warn(`[DEPRECATED] Action Required: You should manually update your configuration to use the new URL (${NEW_PROXY_URL}). Read more: https://github.com/scalar/scalar`);
200
+ input.proxyUrl = NEW_PROXY_URL;
201
+ }
202
+ if (input.showToolbar && input.showToolbar !== 'localhost') {
203
+ console.warn(`[DEPRECATED] You're using the deprecated 'showToolbar' attribute. Use 'showDeveloperTools' instead.`);
204
+ input.showDeveloperTools = input.showToolbar;
205
+ // @ts-expect-error - We're deleting the deprecated attribute
206
+ delete input.showToolbar;
207
+ }
208
+ return input;
209
+ };
@@ -0,0 +1,31 @@
1
+ import { type Static } from '@scalar/validation';
2
+ declare const openApiExtensionSchema: import("@scalar/validation").ObjectSchema<{
3
+ name: import("@scalar/validation").StringSchema;
4
+ component: import("@scalar/validation").UnknownSchema;
5
+ renderer: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnknownSchema>;
6
+ }>;
7
+ declare const viewsSchema: import("@scalar/validation").ObjectSchema<{
8
+ 'content.end': import("@scalar/validation").OptionalSchema<import("@scalar/validation").ArraySchema<import("@scalar/validation").ObjectSchema<{
9
+ component: import("@scalar/validation").UnknownSchema;
10
+ renderer: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnknownSchema>;
11
+ props: import("@scalar/validation").OptionalSchema<import("@scalar/validation").RecordSchema<import("@scalar/validation").StringSchema, import("@scalar/validation").AnySchema>>;
12
+ }>>>;
13
+ }>;
14
+ declare const lifecycleHooksSchema: import("@scalar/validation").ObjectSchema<{
15
+ onInit: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<({ config }: {
16
+ config: any;
17
+ }) => void>>;
18
+ onConfigChange: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<({ config }: {
19
+ config: any;
20
+ }) => void>>;
21
+ onDestroy: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<() => void>>;
22
+ }>;
23
+ export declare const apiReferencePluginSchema: import("@scalar/validation").FunctionSchema<() => {
24
+ name: string;
25
+ extensions: Static<typeof openApiExtensionSchema>[];
26
+ views: Static<typeof viewsSchema>;
27
+ hooks: Static<typeof lifecycleHooksSchema>;
28
+ apiClientPlugins: any[];
29
+ }>;
30
+ export {};
31
+ //# sourceMappingURL=api-reference-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-reference-plugin.d.ts","sourceRoot":"","sources":["../../src/api-reference/api-reference-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAA6D,MAAM,oBAAoB,CAAA;AAE3G,QAAA,MAAM,sBAAsB;;;;EAY1B,CAAA;AAgBF,QAAA,MAAM,WAAW;;;;;;EAIf,CAAA;AAEF,QAAA,MAAM,oBAAoB;iHACS;QAAE,MAAM,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI;yHAChB;QAAE,MAAM,EAAE,GAAG,CAAA;KAAE,KAAK,IAAI;6GACpC,IAAI;EACjC,CAAA;AAEF,eAAO,MAAM,wBAAwB,oDAE3B;IACJ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAC,OAAO,sBAAsB,CAAC,EAAE,CAAA;IACnD,KAAK,EAAE,MAAM,CAAC,OAAO,WAAW,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAA;IAC1C,gBAAgB,EAAE,GAAG,EAAE,CAAA;CACxB,CACA,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { any, array, fn, object, optional, record, string, unknown } from '@scalar/validation';
2
+ const openApiExtensionSchema = object({
3
+ name: string({
4
+ typeComment: 'Name of specification extension property. Has to start with \`x-\`.',
5
+ }),
6
+ component: unknown({
7
+ typeComment: 'Vue component to render the specification extension',
8
+ }),
9
+ renderer: optional(unknown({
10
+ typeComment: 'Custom renderer to render the specification extension',
11
+ })),
12
+ });
13
+ const viewComponentSchema = object({
14
+ component: unknown({
15
+ typeComment: 'Vue component to render in the view',
16
+ }),
17
+ renderer: optional(unknown({
18
+ typeComment: 'Custom renderer to render the view component (e.g., ReactRenderer)',
19
+ })),
20
+ props: optional(record(string(), any()), {
21
+ typeComment: 'Additional props to pass to the component',
22
+ }),
23
+ });
24
+ const viewsSchema = object({
25
+ 'content.end': optional(array(viewComponentSchema), {
26
+ typeComment: 'Components to render at specific views in the API Reference',
27
+ }),
28
+ });
29
+ const lifecycleHooksSchema = object({
30
+ onInit: optional(fn()),
31
+ onConfigChange: optional(fn()),
32
+ onDestroy: optional(fn()),
33
+ });
34
+ export const apiReferencePluginSchema = fn();
@@ -0,0 +1,27 @@
1
+ export declare const baseConfigurationSchema: import("@scalar/validation").ObjectSchema<{
2
+ title: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
3
+ slug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
4
+ authentication: import("@scalar/validation").OptionalSchema<import("@scalar/validation").AnySchema>;
5
+ baseServerURL: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
6
+ hideClientButton: import("@scalar/validation").BooleanSchema;
7
+ proxyUrl: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
8
+ oauth2RedirectUri: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
9
+ searchHotKey: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"a"> | import("@scalar/validation").LiteralSchema<"b"> | import("@scalar/validation").LiteralSchema<"c"> | import("@scalar/validation").LiteralSchema<"d"> | import("@scalar/validation").LiteralSchema<"e"> | import("@scalar/validation").LiteralSchema<"f"> | import("@scalar/validation").LiteralSchema<"g"> | import("@scalar/validation").LiteralSchema<"h"> | import("@scalar/validation").LiteralSchema<"i"> | import("@scalar/validation").LiteralSchema<"j"> | import("@scalar/validation").LiteralSchema<"k"> | import("@scalar/validation").LiteralSchema<"l"> | import("@scalar/validation").LiteralSchema<"m"> | import("@scalar/validation").LiteralSchema<"n"> | import("@scalar/validation").LiteralSchema<"o"> | import("@scalar/validation").LiteralSchema<"p"> | import("@scalar/validation").LiteralSchema<"q"> | import("@scalar/validation").LiteralSchema<"r"> | import("@scalar/validation").LiteralSchema<"s"> | import("@scalar/validation").LiteralSchema<"t"> | import("@scalar/validation").LiteralSchema<"u"> | import("@scalar/validation").LiteralSchema<"v"> | import("@scalar/validation").LiteralSchema<"w"> | import("@scalar/validation").LiteralSchema<"x"> | import("@scalar/validation").LiteralSchema<"y"> | import("@scalar/validation").LiteralSchema<"z">)[]>>;
10
+ servers: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ArraySchema<import("@scalar/validation").AnySchema>>;
11
+ showSidebar: import("@scalar/validation").BooleanSchema;
12
+ showDeveloperTools: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"localhost"> | import("@scalar/validation").LiteralSchema<"always"> | import("@scalar/validation").LiteralSchema<"never">)[]>;
13
+ showToolbar: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"localhost"> | import("@scalar/validation").LiteralSchema<"always"> | import("@scalar/validation").LiteralSchema<"never">)[]>;
14
+ operationTitleSource: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"summary"> | import("@scalar/validation").LiteralSchema<"path">)[]>;
15
+ theme: import("@scalar/validation").UnionSchema<(import("@scalar/validation").LiteralSchema<"default"> | import("@scalar/validation").LiteralSchema<"alternate"> | import("@scalar/validation").LiteralSchema<"moon"> | import("@scalar/validation").LiteralSchema<"purple"> | import("@scalar/validation").LiteralSchema<"solarized"> | import("@scalar/validation").LiteralSchema<"bluePlanet"> | import("@scalar/validation").LiteralSchema<"deepSpace"> | import("@scalar/validation").LiteralSchema<"saturn"> | import("@scalar/validation").LiteralSchema<"kepler"> | import("@scalar/validation").LiteralSchema<"elysiajs"> | import("@scalar/validation").LiteralSchema<"fastify"> | import("@scalar/validation").LiteralSchema<"mars"> | import("@scalar/validation").LiteralSchema<"laserwave"> | import("@scalar/validation").LiteralSchema<"none">)[]>;
16
+ _integration: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").NullableSchema | import("@scalar/validation").LiteralSchema<"elysiajs"> | import("@scalar/validation").LiteralSchema<"fastify"> | import("@scalar/validation").LiteralSchema<"adonisjs"> | import("@scalar/validation").LiteralSchema<"astro"> | import("@scalar/validation").LiteralSchema<"docusaurus"> | import("@scalar/validation").LiteralSchema<"dotnet"> | import("@scalar/validation").LiteralSchema<"express"> | import("@scalar/validation").LiteralSchema<"fastapi"> | import("@scalar/validation").LiteralSchema<"go"> | import("@scalar/validation").LiteralSchema<"hono"> | import("@scalar/validation").LiteralSchema<"html"> | import("@scalar/validation").LiteralSchema<"laravel"> | import("@scalar/validation").LiteralSchema<"litestar"> | import("@scalar/validation").LiteralSchema<"nestjs"> | import("@scalar/validation").LiteralSchema<"nextjs"> | import("@scalar/validation").LiteralSchema<"nitro"> | import("@scalar/validation").LiteralSchema<"nuxt"> | import("@scalar/validation").LiteralSchema<"platformatic"> | import("@scalar/validation").LiteralSchema<"react"> | import("@scalar/validation").LiteralSchema<"rust"> | import("@scalar/validation").LiteralSchema<"svelte"> | import("@scalar/validation").LiteralSchema<"vue">)[]>>;
17
+ onRequestSent: import("@scalar/validation").OptionalSchema<import("@scalar/validation").FunctionSchema<(input: string) => void>>;
18
+ persistAuth: import("@scalar/validation").BooleanSchema;
19
+ telemetry: import("@scalar/validation").BooleanSchema;
20
+ externalUrls: import("@scalar/validation").ObjectSchema<{
21
+ dashboardUrl: import("@scalar/validation").StringSchema;
22
+ registryUrl: import("@scalar/validation").StringSchema;
23
+ proxyUrl: import("@scalar/validation").StringSchema;
24
+ apiBaseUrl: import("@scalar/validation").StringSchema;
25
+ }>;
26
+ }>;
27
+ //# sourceMappingURL=base-configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-configuration.d.ts","sourceRoot":"","sources":["../../src/api-reference/base-configuration.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;mHA4HC,MAAM,KAAK,IAAI;;;;;;;;;EAYlD,CAAA"}
@@ -0,0 +1,136 @@
1
+ import { any, array, boolean, fn, literal, nullable, object, optional, string, union } from '@scalar/validation';
2
+ const externalUrlsSchema = object({
3
+ dashboardUrl: string({ default: 'https://dashboard.scalar.com' }),
4
+ registryUrl: string({ default: 'https://registry.scalar.com' }),
5
+ proxyUrl: string({ default: 'https://proxy.scalar.com' }),
6
+ apiBaseUrl: string({ default: 'https://api.scalar.com' }),
7
+ }, {
8
+ typeComment: 'External service URLs used by Scalar packages',
9
+ });
10
+ export const baseConfigurationSchema = object({
11
+ title: optional(string(), {
12
+ typeComment: 'The title of the OpenAPI document.',
13
+ }),
14
+ slug: optional(string(), {
15
+ typeComment: 'The slug of the OpenAPI document used in the URL. If none is passed, the title will be used. If no title is used, it will just use the index.',
16
+ }),
17
+ authentication: optional(any(), {
18
+ typeComment: 'Prefill authentication',
19
+ }),
20
+ baseServerURL: optional(string(), {
21
+ typeComment: 'Base URL for the API server',
22
+ }),
23
+ hideClientButton: boolean({
24
+ default: false,
25
+ typeComment: 'Whether to hide the client button',
26
+ }),
27
+ proxyUrl: optional(string(), {
28
+ typeComment: 'URL to a request proxy for the API client',
29
+ }),
30
+ oauth2RedirectUri: optional(string(), {
31
+ typeComment: 'Default OAuth 2.0 redirect URI used to prefill auth flows in the API client.',
32
+ }),
33
+ searchHotKey: optional(union([
34
+ literal('a'),
35
+ literal('b'),
36
+ literal('c'),
37
+ literal('d'),
38
+ literal('e'),
39
+ literal('f'),
40
+ literal('g'),
41
+ literal('h'),
42
+ literal('i'),
43
+ literal('j'),
44
+ literal('k'),
45
+ literal('l'),
46
+ literal('m'),
47
+ literal('n'),
48
+ literal('o'),
49
+ literal('p'),
50
+ literal('q'),
51
+ literal('r'),
52
+ literal('s'),
53
+ literal('t'),
54
+ literal('u'),
55
+ literal('v'),
56
+ literal('w'),
57
+ literal('x'),
58
+ literal('y'),
59
+ literal('z'),
60
+ ]), {
61
+ typeComment: "Key used with CTRL/CMD to open the search modal (defaults to 'k' e.g. CMD+k)",
62
+ }),
63
+ servers: optional(array(any()), {
64
+ typeComment: 'List of OpenAPI server objects',
65
+ }),
66
+ showSidebar: boolean({
67
+ default: true,
68
+ typeComment: 'Whether to show the sidebar',
69
+ }),
70
+ showDeveloperTools: union([literal('localhost'), literal('always'), literal('never')], {
71
+ typeComment: 'Whether and when to show the developer tools.',
72
+ }),
73
+ showToolbar: union([literal('localhost'), literal('always'), literal('never')], {
74
+ typeComment: '@deprecated Use showDeveloperTools instead',
75
+ }),
76
+ operationTitleSource: union([literal('summary'), literal('path')], {
77
+ typeComment: 'Whether to use the operation summary or the operation path for the sidebar and search',
78
+ }),
79
+ theme: union([
80
+ literal('default'),
81
+ literal('alternate'),
82
+ literal('moon'),
83
+ literal('purple'),
84
+ literal('solarized'),
85
+ literal('bluePlanet'),
86
+ literal('deepSpace'),
87
+ literal('saturn'),
88
+ literal('kepler'),
89
+ literal('elysiajs'),
90
+ literal('fastify'),
91
+ literal('mars'),
92
+ literal('laserwave'),
93
+ literal('none'),
94
+ ], {
95
+ typeComment: 'A string to use one of the color presets',
96
+ }),
97
+ _integration: optional(union([
98
+ literal('adonisjs'),
99
+ literal('astro'),
100
+ literal('docusaurus'),
101
+ literal('dotnet'),
102
+ literal('elysiajs'),
103
+ literal('express'),
104
+ literal('fastapi'),
105
+ literal('fastify'),
106
+ literal('go'),
107
+ literal('hono'),
108
+ literal('html'),
109
+ literal('laravel'),
110
+ literal('litestar'),
111
+ literal('nestjs'),
112
+ literal('nextjs'),
113
+ literal('nitro'),
114
+ literal('nuxt'),
115
+ literal('platformatic'),
116
+ literal('react'),
117
+ literal('rust'),
118
+ literal('svelte'),
119
+ literal('vue'),
120
+ nullable(),
121
+ ]), {
122
+ typeComment: 'Integration type identifier',
123
+ }),
124
+ onRequestSent: optional(fn(), {
125
+ typeComment: 'onRequestSent is fired when a request is sent',
126
+ }),
127
+ persistAuth: boolean({
128
+ default: false,
129
+ typeComment: 'Whether to persist auth to local storage',
130
+ }),
131
+ telemetry: boolean({
132
+ default: true,
133
+ typeComment: 'Enables / disables telemetry',
134
+ }),
135
+ externalUrls: externalUrlsSchema,
136
+ });
@@ -0,0 +1,14 @@
1
+ export declare const htmlRenderingConfigurationSchema: import("@scalar/validation").ObjectSchema<{
2
+ /**
3
+ * The URL to the Scalar API Reference JS CDN.
4
+ *
5
+ * Use this to pin a specific version of the Scalar API Reference.
6
+ *
7
+ * @default https://cdn.jsdelivr.net/npm/@scalar/api-reference
8
+ *
9
+ * @example https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.25.122
10
+ */
11
+ cdn: import("@scalar/validation").StringSchema;
12
+ pageTitle: import("@scalar/validation").StringSchema;
13
+ }>;
14
+ //# sourceMappingURL=html-rendering-configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-rendering-configuration.d.ts","sourceRoot":"","sources":["../../src/api-reference/html-rendering-configuration.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gCAAgC;IAC3C;;;;;;;;OAQG;;;EAOH,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { object, string } from '@scalar/validation';
2
+ export const htmlRenderingConfigurationSchema = object({
3
+ /**
4
+ * The URL to the Scalar API Reference JS CDN.
5
+ *
6
+ * Use this to pin a specific version of the Scalar API Reference.
7
+ *
8
+ * @default https://cdn.jsdelivr.net/npm/@scalar/api-reference
9
+ *
10
+ * @example https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.25.122
11
+ */
12
+ cdn: string({
13
+ default: 'https://cdn.jsdelivr.net/npm/@scalar/api-reference',
14
+ }),
15
+ pageTitle: string({
16
+ default: 'Scalar API Reference',
17
+ }),
18
+ });
@@ -0,0 +1,3 @@
1
+ export { apiReferenceConfigurationSchema, apiReferenceConfigurationWithSourceSchema, } from './api-reference-configuration.js';
2
+ export { htmlRenderingConfigurationSchema } from './html-rendering-configuration.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api-reference/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,yCAAyC,GAC1C,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { apiReferenceConfigurationSchema, apiReferenceConfigurationWithSourceSchema, } from './api-reference-configuration.js';
2
+ export { htmlRenderingConfigurationSchema } from './html-rendering-configuration.js';
@@ -0,0 +1,22 @@
1
+ /**
2
+ * A source is any potential document input used for API Reference
3
+ * and API Client integrations. Sources may be specified in the configuration
4
+ * or used independently. Some configurations may have multiple sources.
5
+ */
6
+ export declare const sourceConfigurationSchema: import("@scalar/validation").ObjectSchema<{
7
+ default: import("@scalar/validation").BooleanSchema;
8
+ url: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
9
+ content: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").StringSchema | import("@scalar/validation").NullableSchema | import("@scalar/validation").RecordSchema<import("@scalar/validation").StringSchema, import("@scalar/validation").AnySchema> | import("@scalar/validation").FunctionSchema<() => string | any>)[]>>;
10
+ title: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
11
+ slug: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
12
+ spec: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ObjectSchema<{
13
+ url: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
14
+ content: import("@scalar/validation").OptionalSchema<import("@scalar/validation").UnionSchema<(import("@scalar/validation").StringSchema | import("@scalar/validation").NullableSchema | import("@scalar/validation").RecordSchema<import("@scalar/validation").StringSchema, import("@scalar/validation").AnySchema> | import("@scalar/validation").FunctionSchema<() => string | any>)[]>>;
15
+ }>>;
16
+ agent: import("@scalar/validation").OptionalSchema<import("@scalar/validation").ObjectSchema<{
17
+ key: import("@scalar/validation").OptionalSchema<import("@scalar/validation").StringSchema>;
18
+ disabled: import("@scalar/validation").OptionalSchema<import("@scalar/validation").BooleanSchema>;
19
+ hideAddApi: import("@scalar/validation").OptionalSchema<import("@scalar/validation").BooleanSchema>;
20
+ }>>;
21
+ }>;
22
+ //# sourceMappingURL=source-configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-configuration.d.ts","sourceRoot":"","sources":["../../src/api-reference/source-configuration.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;8WAP+C,MAAM,GAAG,GAAG;;;;;kXAAZ,MAAM,GAAG,GAAG;;;;;;;EA8C/F,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { any, boolean, fn, nullable, object, optional, record, string, union } from '@scalar/validation';
2
+ /**
3
+ * The content of an OpenAPI document. Accepts any of:
4
+ * - a raw string (YAML or JSON),
5
+ * - `null` to explicitly opt out of inline content,
6
+ * - a plain object representing the parsed document, or
7
+ * - a function that returns either of the above (sync or async resolution
8
+ * happens further downstream).
9
+ */
10
+ const contentSchema = union([string(), nullable(), record(string(), any()), fn()]);
11
+ /**
12
+ * A source is any potential document input used for API Reference
13
+ * and API Client integrations. Sources may be specified in the configuration
14
+ * or used independently. Some configurations may have multiple sources.
15
+ */
16
+ export const sourceConfigurationSchema = object({
17
+ default: boolean({ default: false }),
18
+ url: optional(string(), {
19
+ typeComment: 'URL to an OpenAPI/Swagger document',
20
+ }),
21
+ content: optional(contentSchema, {
22
+ typeComment: 'Directly embed the OpenAPI document. Can be a string, object, function returning an object, or null. It is recommended to pass a URL instead of content.',
23
+ }),
24
+ title: optional(string(), {
25
+ typeComment: 'The title of the OpenAPI document. @deprecated Please move `title` to the top level and remove the `spec` prefix.',
26
+ }),
27
+ slug: optional(string(), {
28
+ typeComment: 'The slug of the OpenAPI document used in the URL. @deprecated Please move `slug` to the top level and remove the `spec` prefix.',
29
+ }),
30
+ spec: optional(object({
31
+ url: optional(string()),
32
+ content: optional(contentSchema),
33
+ }), {
34
+ typeComment: '@deprecated Use `url` and `content` on the top level instead.',
35
+ }),
36
+ agent: optional(object({
37
+ key: optional(string()),
38
+ disabled: optional(boolean()),
39
+ hideAddApi: optional(boolean(), {
40
+ typeComment: 'When true, hide the control to add more APIs in the agent chat. Only preloaded/registry documents are shown; the public API list is not offered.',
41
+ }),
42
+ }), {
43
+ typeComment: 'Agent Scalar configuration',
44
+ }),
45
+ });
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@scalar/schemas",
3
+ "description": "Schemas for Scalar packages",
4
+ "license": "MIT",
5
+ "author": "Scalar (https://github.com/scalar)",
6
+ "homepage": "https://github.com/scalar/scalar",
7
+ "bugs": "https://github.com/scalar/scalar/issues/new/choose",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/scalar/scalar.git",
11
+ "directory": "packages/schemas"
12
+ },
13
+ "keywords": [
14
+ "schemas",
15
+ "scalar"
16
+ ],
17
+ "version": "0.2.0",
18
+ "engines": {
19
+ "node": ">=22"
20
+ },
21
+ "type": "module",
22
+ "exports": {
23
+ "./api-reference": {
24
+ "import": "./dist/api-reference/index.js",
25
+ "types": "./dist/api-reference/index.d.ts",
26
+ "default": "./dist/api-reference/index.js"
27
+ }
28
+ },
29
+ "files": [
30
+ "dist",
31
+ "CHANGELOG.md"
32
+ ],
33
+ "dependencies": {
34
+ "@scalar/validation": "0.5.0"
35
+ },
36
+ "devDependencies": {
37
+ "vitest": "4.1.0",
38
+ "@scalar/types": "0.11.0"
39
+ },
40
+ "scripts": {
41
+ "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
42
+ "test": "vitest --run",
43
+ "types:check": "tsc --noEmit",
44
+ "types:generate": "tsx scripts/generate-types.ts"
45
+ }
46
+ }