@kubb/ast 5.0.0-beta.60 → 5.0.0-beta.62

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 (87) hide show
  1. package/README.md +2 -1
  2. package/dist/defineMacro-BryDiuQl.cjs +115 -0
  3. package/dist/defineMacro-BryDiuQl.cjs.map +1 -0
  4. package/dist/defineMacro-CNkUpxia.js +99 -0
  5. package/dist/defineMacro-CNkUpxia.js.map +1 -0
  6. package/dist/defineMacro-Vw-xQvq7.d.ts +467 -0
  7. package/dist/factory.cjs +64 -4
  8. package/dist/factory.cjs.map +1 -0
  9. package/dist/factory.d.ts +2 -37
  10. package/dist/factory.js +58 -3
  11. package/dist/factory.js.map +1 -0
  12. package/dist/{index-BzjwdK2M.d.ts → index-CTaN_ee_.d.ts} +235 -198
  13. package/dist/index.cjs +33 -32
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.ts +36 -36
  16. package/dist/index.js +19 -14
  17. package/dist/index.js.map +1 -1
  18. package/dist/macros.cjs +130 -0
  19. package/dist/macros.cjs.map +1 -0
  20. package/dist/macros.d.ts +61 -0
  21. package/dist/macros.js +128 -0
  22. package/dist/macros.js.map +1 -0
  23. package/dist/{operationParams-BZ07xDm0.d.ts → operationParams-B44p6EQy.d.ts} +2 -2
  24. package/dist/{response-DS5S3IG4.cjs → response-BeG6hq2D.cjs} +389 -173
  25. package/dist/response-BeG6hq2D.cjs.map +1 -0
  26. package/dist/{response-DKxTr522.js → response-Rd1uisM1.js} +377 -162
  27. package/dist/response-Rd1uisM1.js.map +1 -0
  28. package/dist/types-DQTgVSwE.d.ts +314 -0
  29. package/dist/types.d.ts +5 -5
  30. package/dist/{utils-D83JA6Xx.cjs → utils-BDI3kXlb.cjs} +20 -753
  31. package/dist/utils-BDI3kXlb.cjs.map +1 -0
  32. package/dist/{utils-Dj_KoXMv.js → utils-DW9rnfsD.js} +11 -630
  33. package/dist/utils-DW9rnfsD.js.map +1 -0
  34. package/dist/utils.cjs +11 -9
  35. package/dist/utils.d.ts +38 -4
  36. package/dist/utils.js +4 -3
  37. package/dist/visitor-B7Zlnp4c.cjs +604 -0
  38. package/dist/visitor-B7Zlnp4c.cjs.map +1 -0
  39. package/dist/visitor-DepQEKyp.js +510 -0
  40. package/dist/visitor-DepQEKyp.js.map +1 -0
  41. package/package.json +5 -1
  42. package/src/constants.ts +0 -30
  43. package/src/dedupe.ts +1 -9
  44. package/src/defineMacro.ts +139 -0
  45. package/src/{node.ts → defineNode.ts} +19 -42
  46. package/src/dialect.ts +42 -19
  47. package/src/factory.ts +3 -90
  48. package/src/index.ts +9 -15
  49. package/src/macros/index.ts +3 -0
  50. package/src/macros/macroDiscriminatorEnum.ts +50 -0
  51. package/src/macros/macroEnumName.ts +33 -0
  52. package/src/macros/macroSimplifyUnion.ts +60 -0
  53. package/src/nodes/code.ts +32 -75
  54. package/src/nodes/content.ts +2 -7
  55. package/src/nodes/file.ts +102 -14
  56. package/src/nodes/function.ts +46 -46
  57. package/src/nodes/index.ts +2 -3
  58. package/src/nodes/input.ts +13 -9
  59. package/src/nodes/operation.ts +5 -5
  60. package/src/nodes/output.ts +1 -1
  61. package/src/nodes/parameter.ts +6 -6
  62. package/src/nodes/property.ts +6 -6
  63. package/src/nodes/requestBody.ts +6 -13
  64. package/src/nodes/response.ts +93 -8
  65. package/src/nodes/schema.ts +1 -1
  66. package/src/registry.ts +1 -1
  67. package/src/types.ts +4 -4
  68. package/src/utils/extractStringsFromNodes.ts +1 -0
  69. package/src/utils/index.ts +2 -2
  70. package/src/utils/operationParams.ts +1 -1
  71. package/src/utils/refs.ts +27 -1
  72. package/src/utils/schemaMerge.ts +34 -0
  73. package/src/visitor.ts +2 -13
  74. package/dist/extractStringsFromNodes-WMYJ8nQL.d.ts +0 -82
  75. package/dist/factory-Cl8Z7mcc.cjs +0 -299
  76. package/dist/factory-Cl8Z7mcc.cjs.map +0 -1
  77. package/dist/factory-Du7nEP4B.js +0 -282
  78. package/dist/factory-Du7nEP4B.js.map +0 -1
  79. package/dist/response-DKxTr522.js.map +0 -1
  80. package/dist/response-DS5S3IG4.cjs.map +0 -1
  81. package/dist/types-olVl9v5p.d.ts +0 -764
  82. package/dist/utils-D83JA6Xx.cjs.map +0 -1
  83. package/dist/utils-Dj_KoXMv.js.map +0 -1
  84. package/src/mocks.ts +0 -56
  85. package/src/nodes/http.ts +0 -85
  86. package/src/transformers.ts +0 -191
  87. /package/src/{printer.ts → definePrinter.ts} +0 -0
@@ -1,191 +0,0 @@
1
- import { isScalarPrimitive } from './constants.ts'
2
- import { narrowSchema } from './guards.ts'
3
- import { createProperty } from './nodes/property.ts'
4
- import { createSchema, type SchemaNode } from './nodes/schema.ts'
5
- import { enumPropName } from './utils/refs.ts'
6
-
7
- /**
8
- * Replaces a discriminator property's schema with a string enum of allowed values.
9
- *
10
- * If `node` is not an object schema, or if the property does not exist, the input
11
- * node is returned as-is.
12
- *
13
- * @example
14
- * ```ts
15
- * const schema = createSchema({
16
- * type: 'object',
17
- * properties: [createProperty({ name: 'type', required: true, schema: createSchema({ type: 'string' }) })],
18
- * })
19
- * const result = setDiscriminatorEnum({ node: schema, propertyName: 'type', values: ['dog', 'cat'] })
20
- * ```
21
- */
22
- export function setDiscriminatorEnum({
23
- node,
24
- propertyName,
25
- values,
26
- enumName,
27
- }: {
28
- node: SchemaNode
29
- propertyName: string
30
- values: Array<string>
31
- enumName?: string
32
- }): SchemaNode {
33
- const objectNode = narrowSchema(node, 'object')
34
- if (!objectNode?.properties?.length) {
35
- return node
36
- }
37
-
38
- const hasProperty = objectNode.properties.some((prop) => prop.name === propertyName)
39
- if (!hasProperty) {
40
- return node
41
- }
42
-
43
- return createSchema({
44
- ...objectNode,
45
- properties: objectNode.properties.map((prop) => {
46
- if (prop.name !== propertyName) {
47
- return prop
48
- }
49
-
50
- return createProperty({
51
- ...prop,
52
- schema: createSchema({
53
- type: 'enum',
54
- primitive: 'string',
55
- enumValues: values,
56
- name: enumName,
57
- readOnly: prop.schema.readOnly,
58
- writeOnly: prop.schema.writeOnly,
59
- }),
60
- })
61
- }),
62
- })
63
- }
64
-
65
- /**
66
- * Merges adjacent anonymous object members into a single anonymous object member.
67
- *
68
- * @example
69
- * ```ts
70
- * const merged = mergeAdjacentObjects([
71
- * createSchema({ type: 'object', properties: [createProperty({ name: 'a', schema: createSchema({ type: 'string' }) })] }),
72
- * createSchema({ type: 'object', properties: [createProperty({ name: 'b', schema: createSchema({ type: 'number' }) })] }),
73
- * ])
74
- * ```
75
- */
76
- export function* mergeAdjacentObjectsLazy(members: Iterable<SchemaNode>): Generator<SchemaNode, void, undefined> {
77
- let acc: SchemaNode | undefined
78
-
79
- for (const member of members) {
80
- const objectMember = narrowSchema(member, 'object')
81
- if (objectMember && !objectMember.name && acc !== undefined) {
82
- const accObject = narrowSchema(acc, 'object')
83
- if (accObject && !accObject.name) {
84
- acc = createSchema({
85
- ...accObject,
86
- properties: [...(accObject.properties ?? []), ...(objectMember.properties ?? [])],
87
- })
88
- continue
89
- }
90
- }
91
- if (acc !== undefined) yield acc
92
- acc = member
93
- }
94
-
95
- if (acc !== undefined) yield acc
96
- }
97
-
98
- export function mergeAdjacentObjects(members: Array<SchemaNode>): Array<SchemaNode> {
99
- return [...mergeAdjacentObjectsLazy(members)]
100
- }
101
-
102
- /**
103
- * Removes enum members that are covered by broader scalar primitives in the same union.
104
- *
105
- * @example
106
- * ```ts
107
- * const simplified = simplifyUnion([
108
- * createSchema({ type: 'enum', primitive: 'string', enumValues: ['active'] }),
109
- * createSchema({ type: 'string' }),
110
- * ])
111
- * // keeps only string member
112
- * ```
113
- */
114
- export function simplifyUnion(members: Array<SchemaNode>): Array<SchemaNode> {
115
- const scalarPrimitives = new Set(members.filter((member) => isScalarPrimitive(member.type)).map((m) => m.type))
116
-
117
- if (!scalarPrimitives.size) {
118
- return members
119
- }
120
-
121
- return members.filter((member) => {
122
- const enumNode = narrowSchema(member, 'enum')
123
- if (!enumNode) {
124
- return true
125
- }
126
-
127
- const primitive = enumNode.primitive
128
- if (!primitive) {
129
- return true
130
- }
131
-
132
- const enumValueCount = enumNode.namedEnumValues?.length ?? enumNode.enumValues?.length ?? 0
133
- if (enumValueCount <= 1) {
134
- return true
135
- }
136
-
137
- if (scalarPrimitives.has(primitive)) {
138
- return false
139
- }
140
-
141
- if ((primitive === 'integer' || primitive === 'number') && (scalarPrimitives.has('integer') || scalarPrimitives.has('number'))) {
142
- return false
143
- }
144
-
145
- return true
146
- })
147
- }
148
-
149
- export function setEnumName(propNode: SchemaNode, parentName: string | null | undefined, propName: string, enumSuffix: string): SchemaNode {
150
- const enumNode = narrowSchema(propNode, 'enum')
151
-
152
- if (enumNode?.primitive === 'boolean') {
153
- return { ...propNode, name: null }
154
- }
155
-
156
- if (enumNode) {
157
- return {
158
- ...propNode,
159
- name: enumPropName(parentName, propName, enumSuffix),
160
- }
161
- }
162
-
163
- return propNode
164
- }
165
-
166
- /**
167
- * Merges a ref node with its resolved schema, giving usage-site fields precedence.
168
- *
169
- * Usage-site fields (`description`, `readOnly`, `nullable`, `deprecated`) on the ref node override
170
- * the same fields in the resolved `node.schema`. Non-ref nodes are returned unchanged.
171
- *
172
- * @example
173
- * ```ts
174
- * // Ref with description override
175
- * const ref = createSchema({ type: 'ref', ref: '#/components/schemas/Pet', description: 'A cute pet' })
176
- * const merged = syncSchemaRef(ref) // merges with resolved Pet schema
177
- * ```
178
- */
179
- export function syncSchemaRef(node: SchemaNode): SchemaNode {
180
- const ref = narrowSchema(node, 'ref')
181
-
182
- if (!ref) return node
183
- if (!ref.schema) return node
184
-
185
- const { kind: _kind, type: _type, name: _name, ref: _ref, schema: _schema, ...overrides } = ref
186
-
187
- // Filter out undefined override values so they don't shadow the resolved schema's fields.
188
- const definedOverrides = Object.fromEntries(Object.entries(overrides).filter(([, v]) => v !== undefined))
189
-
190
- return createSchema({ ...ref.schema, ...definedOverrides })
191
- }
File without changes