@kubb/ast 5.0.0-beta.63 → 5.0.0-beta.64

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.
Files changed (69) hide show
  1. package/dist/{defineMacro-Shz8f6SG.js → defineMacro-B76LsJwO.js} +4 -4
  2. package/dist/{defineMacro-Shz8f6SG.js.map → defineMacro-B76LsJwO.js.map} +1 -1
  3. package/dist/{defineMacro-BATi7xoC.d.ts → defineMacro-B7qm3zTd.d.ts} +3 -3
  4. package/dist/factory-wJLzHeXT.d.ts +27 -0
  5. package/dist/factory.d.ts +3 -27
  6. package/dist/factory.js +2 -2
  7. package/dist/{index-B9cc8MBS.d.ts → index-BKD4drsX.d.ts} +2 -2
  8. package/dist/index.cjs +54 -2
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.ts +24 -21
  11. package/dist/index.js +54 -8
  12. package/dist/index.js.map +1 -1
  13. package/dist/macros.d.ts +2 -2
  14. package/dist/macros.js +4 -4
  15. package/dist/{operationParams-k5CKwSWZ.d.ts → operationParams-ByVfpYr7.d.ts} +3 -3
  16. package/dist/{refs-BjNDuCBD.js → refs-Dx6U5LoE.js} +3 -3
  17. package/dist/{refs-BjNDuCBD.js.map → refs-Dx6U5LoE.js.map} +1 -1
  18. package/dist/{schema-Cbnxmz4b.js → schema-YNbOtTCM.js} +2 -2
  19. package/dist/{schema-Cbnxmz4b.js.map → schema-YNbOtTCM.js.map} +1 -1
  20. package/dist/{types-BB_xgRJ3.d.ts → types-BP9BZoq-.d.ts} +8 -8
  21. package/dist/types.d.ts +5 -5
  22. package/dist/{utils-DaXkewb1.js → utils-BJi0y-xg.js} +4 -4
  23. package/dist/{utils-DaXkewb1.js.map → utils-BJi0y-xg.js.map} +1 -1
  24. package/dist/utils.d.ts +3 -3
  25. package/dist/utils.js +3 -3
  26. package/package.json +1 -2
  27. package/src/constants.ts +0 -150
  28. package/src/defineMacro.ts +0 -139
  29. package/src/defineNode.ts +0 -102
  30. package/src/definePrinter.ts +0 -258
  31. package/src/dialect.ts +0 -86
  32. package/src/factory.ts +0 -44
  33. package/src/guards.ts +0 -28
  34. package/src/index.ts +0 -13
  35. package/src/infer.ts +0 -132
  36. package/src/macros/index.ts +0 -3
  37. package/src/macros/macroDiscriminatorEnum.ts +0 -50
  38. package/src/macros/macroEnumName.ts +0 -33
  39. package/src/macros/macroSimplifyUnion.ts +0 -60
  40. package/src/nodes/base.ts +0 -49
  41. package/src/nodes/code.ts +0 -355
  42. package/src/nodes/content.ts +0 -51
  43. package/src/nodes/file.ts +0 -380
  44. package/src/nodes/function.ts +0 -283
  45. package/src/nodes/index.ts +0 -93
  46. package/src/nodes/input.ts +0 -144
  47. package/src/nodes/operation.ts +0 -168
  48. package/src/nodes/output.ts +0 -49
  49. package/src/nodes/parameter.ts +0 -71
  50. package/src/nodes/property.ts +0 -67
  51. package/src/nodes/requestBody.ts +0 -54
  52. package/src/nodes/response.ts +0 -173
  53. package/src/nodes/schema.ts +0 -732
  54. package/src/optionality.ts +0 -15
  55. package/src/registry.ts +0 -75
  56. package/src/signature.ts +0 -207
  57. package/src/types.ts +0 -8
  58. package/src/utils/codegen.ts +0 -103
  59. package/src/utils/extractStringsFromNodes.ts +0 -35
  60. package/src/utils/fileMerge.ts +0 -183
  61. package/src/utils/index.ts +0 -11
  62. package/src/utils/operationParams.ts +0 -353
  63. package/src/utils/refs.ts +0 -134
  64. package/src/utils/schemaGraph.ts +0 -177
  65. package/src/utils/schemaMerge.ts +0 -34
  66. package/src/utils/schemaTraversal.ts +0 -86
  67. package/src/utils/strings.ts +0 -139
  68. package/src/visitor.ts +0 -519
  69. /package/dist/{chunk-CNktS9qV.js → rolldown-runtime-CNktS9qV.js} +0 -0
@@ -1,732 +0,0 @@
1
- import type { InferSchemaNode } from '../infer.ts'
2
- import { defineNode, type DistributiveOmit } from '../defineNode.ts'
3
- import type { BaseNode } from './base.ts'
4
- import type { PropertyNode } from './property.ts'
5
-
6
- export type PrimitiveSchemaType =
7
- /**
8
- * Text value.
9
- */
10
- | 'string'
11
- /**
12
- * Floating-point number.
13
- */
14
- | 'number'
15
- /**
16
- * Integer number.
17
- */
18
- | 'integer'
19
- /**
20
- * Big integer number.
21
- */
22
- | 'bigint'
23
- /**
24
- * Boolean value.
25
- */
26
- | 'boolean'
27
- /**
28
- * Null value.
29
- */
30
- | 'null'
31
- /**
32
- * Any value.
33
- */
34
- | 'any'
35
- /**
36
- * Unknown value.
37
- */
38
- | 'unknown'
39
- /**
40
- * No value (`void`).
41
- */
42
- | 'void'
43
- /**
44
- * Never value.
45
- */
46
- | 'never'
47
- /**
48
- * Object value.
49
- */
50
- | 'object'
51
- /**
52
- * Array value.
53
- */
54
- | 'array'
55
- /**
56
- * Date value.
57
- */
58
- | 'date'
59
-
60
- /**
61
- * Composite schema types.
62
- */
63
- type ComplexSchemaType = 'tuple' | 'union' | 'intersection' | 'enum'
64
-
65
- /**
66
- * Schema types that need special handling in generators.
67
- */
68
- type SpecialSchemaType = 'ref' | 'datetime' | 'time' | 'uuid' | 'email' | 'url' | 'ipv4' | 'ipv6' | 'blob'
69
-
70
- /**
71
- * All schema type strings.
72
- */
73
- export type SchemaType = PrimitiveSchemaType | ComplexSchemaType | SpecialSchemaType
74
-
75
- /**
76
- * Scalar schema types without extra object/array/ref structure.
77
- */
78
- export type ScalarSchemaType = Exclude<
79
- SchemaType,
80
- | 'object'
81
- | 'array'
82
- | 'tuple'
83
- | 'union'
84
- | 'intersection'
85
- | 'enum'
86
- | 'ref'
87
- | 'datetime'
88
- | 'date'
89
- | 'time'
90
- | 'string'
91
- | 'number'
92
- | 'integer'
93
- | 'bigint'
94
- | 'url'
95
- | 'uuid'
96
- | 'email'
97
- >
98
-
99
- /**
100
- * Fields shared by all schema nodes.
101
- */
102
- type SchemaNodeBase = BaseNode & {
103
- /**
104
- * Node kind.
105
- */
106
- kind: 'Schema'
107
- /**
108
- * Schema name for named definitions (for example, `"Pet"`).
109
- * Inline schemas omit this field.
110
- * `null` means Kubb has processed this and determined there is no applicable name.
111
- * `undefined` means the name has not been set yet.
112
- */
113
- name?: string | null
114
- /**
115
- * Short schema title.
116
- */
117
- title?: string
118
- /**
119
- * Schema description text.
120
- */
121
- description?: string
122
- /**
123
- * Whether `null` is allowed.
124
- */
125
- nullable?: boolean
126
- /**
127
- * Whether the field is optional.
128
- */
129
- optional?: boolean
130
- /**
131
- * Both optional and nullable (`optional` + `nullable`).
132
- */
133
- nullish?: boolean
134
- /**
135
- * Whether the schema is deprecated.
136
- */
137
- deprecated?: boolean
138
- /**
139
- * Whether the schema is read-only.
140
- */
141
- readOnly?: boolean
142
- /**
143
- * Whether the schema is write-only.
144
- */
145
- writeOnly?: boolean
146
- /**
147
- * Default value.
148
- */
149
- default?: unknown
150
- /**
151
- * Example value.
152
- */
153
- example?: unknown
154
- /**
155
- * Base primitive type.
156
- * For example, this is `'string'` for a `uuid` schema.
157
- */
158
- primitive?: PrimitiveSchemaType
159
- /**
160
- * Schema `format` value.
161
- */
162
- format?: string
163
- }
164
-
165
- /**
166
- * Object schema with ordered properties.
167
- *
168
- * @example
169
- * ```ts
170
- * const objectSchema: ObjectSchemaNode = {
171
- * kind: 'Schema',
172
- * type: 'object',
173
- * properties: [],
174
- * }
175
- * ```
176
- */
177
- export type ObjectSchemaNode = SchemaNodeBase & {
178
- /**
179
- * Schema type discriminator.
180
- */
181
- type: 'object'
182
- /**
183
- * Primitive type, always `'object'` for object schemas.
184
- */
185
- primitive: 'object'
186
- /**
187
- * Ordered object properties.
188
- */
189
- properties: Array<PropertyNode>
190
- /**
191
- * Additional object properties behavior:
192
- * - `true`: allow any value
193
- * - `false`: reject unknown properties
194
- * - `SchemaNode`: allow values that match that schema
195
- * - `undefined`: no additional properties constraint (open object)
196
- */
197
- additionalProperties?: SchemaNode | boolean
198
- /**
199
- * Pattern-based property schemas.
200
- */
201
- patternProperties?: Record<string, SchemaNode>
202
- /**
203
- * Minimum number of properties allowed.
204
- */
205
- minProperties?: number
206
- /**
207
- * Maximum number of properties allowed.
208
- */
209
- maxProperties?: number
210
- }
211
-
212
- /**
213
- * Array-like schema (`array` or `tuple`).
214
- *
215
- * @example
216
- * ```ts
217
- * const arraySchema: ArraySchemaNode = {
218
- * kind: 'Schema',
219
- * type: 'array',
220
- * items: [],
221
- * }
222
- * ```
223
- */
224
- export type ArraySchemaNode = SchemaNodeBase & {
225
- /**
226
- * Schema type discriminator (`array` or `tuple`).
227
- */
228
- type: 'array' | 'tuple'
229
- /**
230
- * Item schemas.
231
- */
232
- items?: Array<SchemaNode>
233
- /**
234
- * Tuple rest-item schema for elements beyond positional `items`.
235
- */
236
- rest?: SchemaNode
237
- /**
238
- * Minimum item count (or tuple length).
239
- */
240
- min?: number
241
- /**
242
- * Maximum item count (or tuple length).
243
- */
244
- max?: number
245
- /**
246
- * Whether all items must be unique.
247
- */
248
- unique?: boolean
249
- }
250
-
251
- /**
252
- * Shared shape for union and intersection schemas.
253
- */
254
- type CompositeSchemaNodeBase = SchemaNodeBase & {
255
- /**
256
- * Member schemas.
257
- */
258
- members?: Array<SchemaNode>
259
- }
260
-
261
- /**
262
- * Union schema, often from `oneOf` or `anyOf`.
263
- *
264
- * @example
265
- * ```ts
266
- * const unionSchema: UnionSchemaNode = {
267
- * kind: 'Schema',
268
- * type: 'union',
269
- * members: [],
270
- * }
271
- * ```
272
- */
273
- export type UnionSchemaNode = CompositeSchemaNodeBase & {
274
- /**
275
- * Schema type discriminator.
276
- */
277
- type: 'union'
278
- /**
279
- * Discriminator property name from OpenAPI `discriminator.propertyName`.
280
- */
281
- discriminatorPropertyName?: string
282
- /**
283
- * How many union members must be valid.
284
- * - `'one'`: exactly one member, from `oneOf`
285
- * - `'any'`: any number of members, from `anyOf`
286
- */
287
- strategy?: 'one' | 'any'
288
- }
289
-
290
- /**
291
- * Intersection schema, often from `allOf`.
292
- *
293
- * @example
294
- * ```ts
295
- * const intersectionSchema: IntersectionSchemaNode = {
296
- * kind: 'Schema',
297
- * type: 'intersection',
298
- * members: [],
299
- * }
300
- * ```
301
- */
302
- export type IntersectionSchemaNode = CompositeSchemaNodeBase & {
303
- /**
304
- * Schema type discriminator.
305
- */
306
- type: 'intersection'
307
- }
308
-
309
- /**
310
- * One named enum item.
311
- */
312
- type EnumValueNode = {
313
- /**
314
- * Enum item name.
315
- */
316
- name: string
317
- /**
318
- * Enum item value.
319
- */
320
- value: string | number | boolean
321
- /**
322
- * Primitive type of the enum value.
323
- */
324
- primitive: Extract<PrimitiveSchemaType, 'string' | 'number' | 'boolean'>
325
- }
326
-
327
- /**
328
- * Enum schema node.
329
- *
330
- * @example
331
- * ```ts
332
- * const enumSchema: EnumSchemaNode = {
333
- * kind: 'Schema',
334
- * type: 'enum',
335
- * enumValues: ['a', 'b'],
336
- * }
337
- * ```
338
- */
339
- export type EnumSchemaNode = SchemaNodeBase & {
340
- /**
341
- * Schema type discriminator.
342
- */
343
- type: 'enum'
344
- /**
345
- * Enum values in simple form.
346
- */
347
- enumValues?: Array<string | number | boolean | null>
348
- /**
349
- * Enum values in named form.
350
- * If present, this is used instead of `enumValues`.
351
- */
352
- namedEnumValues?: Array<EnumValueNode>
353
- }
354
-
355
- /**
356
- * Reference schema that points to another schema definition.
357
- *
358
- * @example
359
- * ```ts
360
- * const refSchema: RefSchemaNode = {
361
- * kind: 'Schema',
362
- * type: 'ref',
363
- * ref: '#/components/schemas/Pet',
364
- * }
365
- * ```
366
- */
367
- export type RefSchemaNode = SchemaNodeBase & {
368
- /**
369
- * Schema type discriminator.
370
- */
371
- type: 'ref'
372
- /**
373
- * Referenced schema name.
374
- * `null` means Kubb has processed this and determined there is no applicable name.
375
- */
376
- name?: string | null
377
- /**
378
- * Original `$ref` path, for example, `#/components/schemas/Order`.
379
- * Used to resolve names later.
380
- */
381
- ref?: string
382
- /**
383
- * Pattern copied from a sibling `pattern` field.
384
- */
385
- pattern?: string
386
- /**
387
- * The fully-parsed schema this ref resolves to, so its structure (`primitive`, `properties`)
388
- * can be read without following the reference. Populated during OAS parsing when the
389
- * definition resolves, `null` when it can't or the ref is circular, and `undefined` when
390
- * resolution has not been attempted.
391
- */
392
- schema?: SchemaNode | null
393
- }
394
-
395
- /**
396
- * Datetime schema.
397
- *
398
- * @example
399
- * ```ts
400
- * const datetimeSchema: DatetimeSchemaNode = { kind: 'Schema', type: 'datetime' }
401
- * ```
402
- */
403
- export type DatetimeSchemaNode = SchemaNodeBase & {
404
- /**
405
- * Schema type discriminator.
406
- */
407
- type: 'datetime'
408
- /**
409
- * Whether the datetime includes a timezone offset (`dateType: 'stringOffset'`).
410
- */
411
- offset?: boolean
412
- /**
413
- * Whether the datetime is local (no timezone, `dateType: 'stringLocal'`).
414
- */
415
- local?: boolean
416
- }
417
-
418
- /**
419
- * Shared base for `date` and `time` schemas.
420
- */
421
- type TemporalSchemaNodeBase<T extends 'date' | 'time'> = SchemaNodeBase & {
422
- /**
423
- * Schema type discriminator.
424
- */
425
- type: T
426
- /**
427
- * Output representation in generated code.
428
- */
429
- representation: 'date' | 'string'
430
- }
431
-
432
- /**
433
- * Date schema node.
434
- *
435
- * @example
436
- * ```ts
437
- * const dateSchema: DateSchemaNode = { kind: 'Schema', type: 'date', representation: 'string' }
438
- * ```
439
- */
440
- export type DateSchemaNode = TemporalSchemaNodeBase<'date'>
441
-
442
- /**
443
- * Time schema node.
444
- *
445
- * @example
446
- * ```ts
447
- * const timeSchema: TimeSchemaNode = { kind: 'Schema', type: 'time', representation: 'string' }
448
- * ```
449
- */
450
- export type TimeSchemaNode = TemporalSchemaNodeBase<'time'>
451
-
452
- /**
453
- * String schema node.
454
- *
455
- * @example
456
- * ```ts
457
- * const stringSchema: StringSchemaNode = { kind: 'Schema', type: 'string' }
458
- * ```
459
- */
460
- export type StringSchemaNode = SchemaNodeBase & {
461
- /**
462
- * Schema type discriminator.
463
- */
464
- type: 'string'
465
- /**
466
- * Minimum string length.
467
- */
468
- min?: number
469
- /**
470
- * Maximum string length.
471
- */
472
- max?: number
473
- /**
474
- * Regex pattern.
475
- */
476
- pattern?: string
477
- }
478
-
479
- /**
480
- * Numeric schema (`number`, `integer`, or `bigint`).
481
- *
482
- * @example
483
- * ```ts
484
- * const numberSchema: NumberSchemaNode = { kind: 'Schema', type: 'number' }
485
- * ```
486
- */
487
- export type NumberSchemaNode = SchemaNodeBase & {
488
- /**
489
- * Schema type discriminator.
490
- */
491
- type: 'number' | 'integer' | 'bigint'
492
- /**
493
- * Minimum value.
494
- */
495
- min?: number
496
- /**
497
- * Maximum value.
498
- */
499
- max?: number
500
- /**
501
- * Exclusive minimum value.
502
- */
503
- exclusiveMinimum?: number
504
- /**
505
- * Exclusive maximum value.
506
- */
507
- exclusiveMaximum?: number
508
- /**
509
- * The value must be a multiple of this number.
510
- */
511
- multipleOf?: number
512
- }
513
-
514
- /**
515
- * Scalar schema with no extra constraints.
516
- *
517
- * @example
518
- * ```ts
519
- * const anySchema: ScalarSchemaNode = { kind: 'Schema', type: 'any' }
520
- * ```
521
- */
522
- export type ScalarSchemaNode = SchemaNodeBase & {
523
- /**
524
- * Schema type discriminator.
525
- */
526
- type: ScalarSchemaType
527
- }
528
-
529
- /**
530
- * URL schema node.
531
- * Can include an OpenAPI-style path template for template literal types.
532
- *
533
- * @example
534
- * ```ts
535
- * const urlSchema: UrlSchemaNode = { kind: 'Schema', type: 'url', path: '/pets/{petId}' }
536
- * ```
537
- */
538
- export type UrlSchemaNode = SchemaNodeBase & {
539
- /**
540
- * Schema type discriminator.
541
- */
542
- type: 'url'
543
- /**
544
- * OpenAPI-style path template, for example, `'/pets/{petId}'`.
545
- */
546
- path?: string
547
- /**
548
- * Minimum string length.
549
- */
550
- min?: number
551
- /**
552
- * Maximum string length.
553
- */
554
- max?: number
555
- }
556
-
557
- /**
558
- * Format-string schema for string-based formats that support length constraints.
559
- *
560
- * @example
561
- * ```ts
562
- * const uuidSchema: FormatStringSchemaNode = { kind: 'Schema', type: 'uuid', min: 36, max: 36 }
563
- * ```
564
- */
565
- type FormatStringSchemaNode = SchemaNodeBase & {
566
- /**
567
- * Schema type discriminator.
568
- */
569
- type: 'uuid' | 'email'
570
- /**
571
- * Minimum string length.
572
- */
573
- min?: number
574
- /**
575
- * Maximum string length.
576
- */
577
- max?: number
578
- }
579
-
580
- /**
581
- * IPv4 address schema node.
582
- *
583
- * @example
584
- * ```ts
585
- * const ipv4Schema: Ipv4SchemaNode = { kind: 'Schema', type: 'ipv4' }
586
- * ```
587
- */
588
- type Ipv4SchemaNode = SchemaNodeBase & {
589
- /**
590
- * Schema type discriminator.
591
- */
592
- type: 'ipv4'
593
- }
594
-
595
- /**
596
- * IPv6 address schema node.
597
- *
598
- * @example
599
- * ```ts
600
- * const ipv6Schema: Ipv6SchemaNode = { kind: 'Schema', type: 'ipv6' }
601
- * ```
602
- */
603
- type Ipv6SchemaNode = SchemaNodeBase & {
604
- /**
605
- * Schema type discriminator.
606
- */
607
- type: 'ipv6'
608
- }
609
-
610
- /**
611
- * Mapping from schema type literals to concrete schema node types.
612
- * Used by `narrowSchema`.
613
- */
614
- export type SchemaNodeByType = {
615
- object: ObjectSchemaNode
616
- array: ArraySchemaNode
617
- tuple: ArraySchemaNode
618
- union: UnionSchemaNode
619
- intersection: IntersectionSchemaNode
620
- enum: EnumSchemaNode
621
- ref: RefSchemaNode
622
- datetime: DatetimeSchemaNode
623
- date: DateSchemaNode
624
- time: TimeSchemaNode
625
- string: StringSchemaNode
626
- number: NumberSchemaNode
627
- integer: NumberSchemaNode
628
- bigint: NumberSchemaNode
629
- boolean: ScalarSchemaNode
630
- null: ScalarSchemaNode
631
- any: ScalarSchemaNode
632
- unknown: ScalarSchemaNode
633
- void: ScalarSchemaNode
634
- never: ScalarSchemaNode
635
- uuid: FormatStringSchemaNode
636
- email: FormatStringSchemaNode
637
- url: UrlSchemaNode
638
- ipv4: Ipv4SchemaNode
639
- ipv6: Ipv6SchemaNode
640
- blob: ScalarSchemaNode
641
- }
642
-
643
- /**
644
- * Union of all schema node types.
645
- */
646
- export type SchemaNode =
647
- | ObjectSchemaNode
648
- | ArraySchemaNode
649
- | UnionSchemaNode
650
- | IntersectionSchemaNode
651
- | EnumSchemaNode
652
- | RefSchemaNode
653
- | DatetimeSchemaNode
654
- | DateSchemaNode
655
- | TimeSchemaNode
656
- | StringSchemaNode
657
- | NumberSchemaNode
658
- | UrlSchemaNode
659
- | FormatStringSchemaNode
660
- | Ipv4SchemaNode
661
- | Ipv6SchemaNode
662
- | ScalarSchemaNode
663
-
664
- type CreateSchemaObjectInput = Omit<ObjectSchemaNode, 'kind' | 'properties' | 'primitive'> & { properties?: Array<PropertyNode>; primitive?: 'object' }
665
- type CreateSchemaInput = CreateSchemaObjectInput | DistributiveOmit<Exclude<SchemaNode, ObjectSchemaNode>, 'kind'>
666
- type CreateSchemaOutput<T extends CreateSchemaInput> = InferSchemaNode<T> & {
667
- kind: 'Schema'
668
- }
669
-
670
- /**
671
- * Maps schema `type` to its underlying `primitive`.
672
- * Primitive types map to themselves and special string formats map to `'string'`.
673
- * Any type not listed here (such as `ref`, `enum`, `union`, `intersection`, `tuple`, `ipv4`, `ipv6`, `blob`) has no `primitive`.
674
- */
675
- const TYPE_TO_PRIMITIVE: Partial<Record<SchemaNode['type'], PrimitiveSchemaType>> = {
676
- string: 'string',
677
- number: 'number',
678
- integer: 'integer',
679
- bigint: 'bigint',
680
- boolean: 'boolean',
681
- null: 'null',
682
- any: 'any',
683
- unknown: 'unknown',
684
- void: 'void',
685
- never: 'never',
686
- object: 'object',
687
- array: 'array',
688
- date: 'date',
689
- uuid: 'string',
690
- email: 'string',
691
- url: 'string',
692
- datetime: 'string',
693
- time: 'string',
694
- }
695
-
696
- /**
697
- * Definition for the {@link SchemaNode}. Object schemas default `properties` to an
698
- * empty array, and `primitive` is inferred from `type` when not explicitly provided.
699
- */
700
- export const schemaDef = defineNode<SchemaNode, CreateSchemaInput>({
701
- kind: 'Schema',
702
- build: (props) => {
703
- if (props.type === 'object') {
704
- return { properties: [], primitive: 'object' as const, ...props }
705
- }
706
-
707
- return { primitive: TYPE_TO_PRIMITIVE[props.type as keyof typeof TYPE_TO_PRIMITIVE], ...props }
708
- },
709
- children: ['properties', 'items', 'members', 'additionalProperties'],
710
- visitorKey: 'schema',
711
- })
712
-
713
- /**
714
- * Creates a `SchemaNode`, narrowed to the variant of `props.type`.
715
- *
716
- * @example
717
- * ```ts
718
- * const scalar = createSchema({ type: 'string' })
719
- * // { kind: 'Schema', type: 'string', primitive: 'string' }
720
- * ```
721
- *
722
- * @example
723
- * ```ts
724
- * const object = createSchema({ type: 'object' })
725
- * // { kind: 'Schema', type: 'object', primitive: 'object', properties: [] }
726
- * ```
727
- */
728
- export function createSchema<T extends CreateSchemaInput>(props: T): CreateSchemaOutput<T>
729
- export function createSchema(props: CreateSchemaInput): SchemaNode
730
- export function createSchema(props: CreateSchemaInput): SchemaNode {
731
- return schemaDef.create(props)
732
- }