@kubb/ast 5.0.0-beta.60 → 5.0.0-beta.61
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/README.md +2 -1
- package/dist/defineMacro-BLIR6k-j.d.ts +475 -0
- package/dist/defineMacro-BTXvS8nI.js +106 -0
- package/dist/defineMacro-BTXvS8nI.js.map +1 -0
- package/dist/defineMacro-Bv9R_9a2.cjs +123 -0
- package/dist/defineMacro-Bv9R_9a2.cjs.map +1 -0
- package/dist/extractStringsFromNodes-Cja-xxx5.js +29 -0
- package/dist/extractStringsFromNodes-Cja-xxx5.js.map +1 -0
- package/dist/extractStringsFromNodes-DKgDjFO0.cjs +34 -0
- package/dist/extractStringsFromNodes-DKgDjFO0.cjs.map +1 -0
- package/dist/extractStringsFromNodes-p4mX1TQD.d.ts +14 -0
- package/dist/{factory-Du7nEP4B.js → factory-CZNOGI-N.js} +3 -2
- package/dist/{factory-Du7nEP4B.js.map → factory-CZNOGI-N.js.map} +1 -1
- package/dist/{factory-Cl8Z7mcc.cjs → factory-DG1CVkEb.cjs} +5 -4
- package/dist/{factory-Cl8Z7mcc.cjs.map → factory-DG1CVkEb.cjs.map} +1 -1
- package/dist/factory.cjs +2 -2
- package/dist/factory.js +2 -2
- package/dist/index.cjs +22 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +18 -17
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/macros.cjs +117 -0
- package/dist/macros.cjs.map +1 -0
- package/dist/macros.d.ts +59 -0
- package/dist/macros.js +115 -0
- package/dist/macros.js.map +1 -0
- package/dist/{response-DKxTr522.js → response-KUdWiDWw.js} +36 -61
- package/dist/response-KUdWiDWw.js.map +1 -0
- package/dist/{response-DS5S3IG4.cjs → response-hnSw2NKE.cjs} +35 -66
- package/dist/response-hnSw2NKE.cjs.map +1 -0
- package/dist/{types-olVl9v5p.d.ts → types-DyDzizSf.d.ts} +3 -403
- package/dist/types.d.ts +4 -3
- package/dist/{utils-D83JA6Xx.cjs → utils-BLJwyza-.cjs} +18 -751
- package/dist/utils-BLJwyza-.cjs.map +1 -0
- package/dist/{utils-Dj_KoXMv.js → utils-CF_-Pn_c.js} +9 -628
- package/dist/utils-CF_-Pn_c.js.map +1 -0
- package/dist/utils.cjs +12 -10
- package/dist/utils.d.ts +28 -2
- package/dist/utils.js +4 -3
- package/dist/visitor-DJ6ZEJvq.js +548 -0
- package/dist/visitor-DJ6ZEJvq.js.map +1 -0
- package/dist/visitor-DpKZ9Tk0.cjs +654 -0
- package/dist/visitor-DpKZ9Tk0.cjs.map +1 -0
- package/package.json +5 -1
- package/src/defineMacro.ts +132 -0
- package/src/index.ts +3 -7
- package/src/macros/index.ts +3 -0
- package/src/macros/macroDiscriminatorEnum.ts +44 -0
- package/src/macros/macroEnumName.ts +25 -0
- package/src/macros/macroSimplifyUnion.ts +50 -0
- package/src/types.ts +2 -1
- package/src/utils/index.ts +2 -2
- package/src/utils/refs.ts +27 -1
- package/src/utils/schemaMerge.ts +34 -0
- package/dist/extractStringsFromNodes-WMYJ8nQL.d.ts +0 -82
- package/dist/response-DKxTr522.js.map +0 -1
- package/dist/response-DS5S3IG4.cjs.map +0 -1
- package/dist/utils-D83JA6Xx.cjs.map +0 -1
- package/dist/utils-Dj_KoXMv.js.map +0 -1
- package/src/transformers.ts +0 -191
package/src/transformers.ts
DELETED
|
@@ -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
|
-
}
|