@bram-dc/fastify-type-provider-zod 5.0.3 → 7.0.1
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 +34 -4
- package/dist/cjs/core.cjs +33 -45
- package/dist/cjs/core.cjs.map +1 -1
- package/dist/cjs/core.d.cts +11 -12
- package/dist/cjs/errors.cjs +1 -1
- package/dist/cjs/errors.cjs.map +1 -1
- package/dist/cjs/registry.cjs +43 -0
- package/dist/cjs/registry.cjs.map +1 -0
- package/dist/cjs/registry.d.cts +9 -0
- package/dist/cjs/utils.cjs +21 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +12 -0
- package/dist/cjs/zod-to-json.cjs +36 -41
- package/dist/cjs/zod-to-json.cjs.map +1 -1
- package/dist/cjs/zod-to-json.d.cts +7 -7
- package/dist/esm/core.d.ts +11 -12
- package/dist/esm/core.js +34 -46
- package/dist/esm/core.js.map +1 -1
- package/dist/esm/errors.js +1 -1
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/registry.d.ts +9 -0
- package/dist/esm/registry.js +43 -0
- package/dist/esm/registry.js.map +1 -0
- package/dist/esm/utils.d.ts +12 -0
- package/dist/esm/utils.js +21 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/zod-to-json.d.ts +7 -7
- package/dist/esm/zod-to-json.js +36 -41
- package/dist/esm/zod-to-json.js.map +1 -1
- package/package.json +13 -11
- package/src/core.ts +44 -60
- package/src/registry.ts +64 -0
- package/src/utils.ts +33 -0
- package/src/zod-to-json.ts +62 -52
- package/dist/cjs/json-to-oas.cjs +0 -85
- package/dist/cjs/json-to-oas.cjs.map +0 -1
- package/dist/cjs/json-to-oas.d.cts +0 -9
- package/dist/esm/json-to-oas.d.ts +0 -9
- package/dist/esm/json-to-oas.js +0 -85
- package/dist/esm/json-to-oas.js.map +0 -1
- package/src/json-to-oas.ts +0 -109
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-to-oas.js","sources":["../../src/json-to-oas.ts"],"sourcesContent":["import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\nimport type { JSONSchema } from 'zod/v4/core'\n\ntype OASVersion = '3.0' | '3.1'\n\nexport const getOASVersion = (documentObject: {\n openapiObject: Partial<OpenAPIV3.Document | OpenAPIV3_1.Document>\n}): OASVersion => {\n const openapiVersion = documentObject.openapiObject.openapi || '3.0.3'\n\n if (openapiVersion.startsWith('3.1')) {\n return '3.1'\n }\n\n if (openapiVersion.startsWith('3.0')) {\n return '3.0'\n }\n\n throw new Error('Unsupported OpenAPI document object')\n}\n\nexport const jsonSchemaToOAS_3_0 = (jsonSchema: JSONSchema.BaseSchema): OpenAPIV3.SchemaObject => {\n const clone: any = { ...jsonSchema }\n\n if (clone.type === 'null') {\n clone.nullable = true\n delete clone.type\n clone.enum = [null]\n }\n\n if (Array.isArray(clone.prefixItems)) {\n const tuple = clone.prefixItems as JSONSchema.BaseSchema[]\n\n clone.minItems ??= tuple.length\n clone.maxItems ??= tuple.length\n\n clone.items = {\n oneOf: tuple.map(jsonSchemaToOAS_3_0),\n }\n\n delete clone.prefixItems\n }\n\n if ('const' in clone && clone.const !== undefined) {\n clone.enum = [clone.const]\n delete clone.const\n }\n\n if (typeof clone.exclusiveMinimum === 'number') {\n clone.minimum = clone.exclusiveMinimum\n clone.exclusiveMinimum = true\n }\n if (typeof clone.exclusiveMaximum === 'number') {\n clone.maximum = clone.exclusiveMaximum\n clone.exclusiveMaximum = true\n }\n\n for (const key of [\n '$schema',\n '$id',\n 'unevaluatedProperties',\n 'dependentSchemas',\n 'patternProperties',\n 'propertyNames',\n 'contentEncoding',\n 'contentMediaType',\n ]) {\n delete clone[key]\n }\n\n const recursive = (v: any): any =>\n Array.isArray(v) ? v.map(jsonSchemaToOAS_3_0) : jsonSchemaToOAS_3_0(v)\n\n if (clone.properties) {\n for (const [k, v] of Object.entries(clone.properties)) {\n clone.properties![k] = jsonSchemaToOAS_3_0(v as any)\n }\n }\n\n if (clone.items && !Array.isArray(clone.items)) {\n clone.items = recursive(clone.items)\n }\n\n for (const key of ['allOf', 'anyOf', 'oneOf', 'not', 'then', 'else', 'if', 'contains']) {\n if (clone[key]) {\n clone[key] = recursive(clone[key])\n }\n }\n\n return clone as OpenAPIV3.SchemaObject\n}\n\nconst jsonSchemaToOAS_3_1 = (jsonSchema: JSONSchema.BaseSchema): OpenAPIV3_1.SchemaObject => {\n return jsonSchema as OpenAPIV3_1.SchemaObject\n}\n\nexport const jsonSchemaToOAS = (\n jsonSchema: JSONSchema.BaseSchema,\n oasVersion: OASVersion,\n): OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject => {\n switch (oasVersion) {\n case '3.0':\n return jsonSchemaToOAS_3_0(jsonSchema)\n case '3.1':\n return jsonSchemaToOAS_3_1(jsonSchema)\n default:\n throw new Error(`Unsupported OpenAPI version: ${oasVersion}`)\n }\n}\n"],"names":[],"mappings":"AAKO,MAAM,gBAAgB,CAAC,mBAEZ;AAChB,QAAM,iBAAiB,eAAe,cAAc,WAAW;AAE/D,MAAI,eAAe,WAAW,KAAK,GAAG;AACpC,WAAO;AAAA,EACT;AAEA,MAAI,eAAe,WAAW,KAAK,GAAG;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,MAAM,qCAAqC;AACvD;AAEO,MAAM,sBAAsB,CAAC,eAA8D;AAChG,QAAM,QAAa,EAAE,GAAG,WAAA;AAExB,MAAI,MAAM,SAAS,QAAQ;AACzB,UAAM,WAAW;AACjB,WAAO,MAAM;AACb,UAAM,OAAO,CAAC,IAAI;AAAA,EACpB;AAEA,MAAI,MAAM,QAAQ,MAAM,WAAW,GAAG;AACpC,UAAM,QAAQ,MAAM;AAEpB,UAAM,aAAa,MAAM;AACzB,UAAM,aAAa,MAAM;AAEzB,UAAM,QAAQ;AAAA,MACZ,OAAO,MAAM,IAAI,mBAAmB;AAAA,IAAA;AAGtC,WAAO,MAAM;AAAA,EACf;AAEA,MAAI,WAAW,SAAS,MAAM,UAAU,QAAW;AACjD,UAAM,OAAO,CAAC,MAAM,KAAK;AACzB,WAAO,MAAM;AAAA,EACf;AAEA,MAAI,OAAO,MAAM,qBAAqB,UAAU;AAC9C,UAAM,UAAU,MAAM;AACtB,UAAM,mBAAmB;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,qBAAqB,UAAU;AAC9C,UAAM,UAAU,MAAM;AACtB,UAAM,mBAAmB;AAAA,EAC3B;AAEA,aAAW,OAAO;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACC;AACD,WAAO,MAAM,GAAG;AAAA,EAClB;AAEA,QAAM,YAAY,CAAC,MACjB,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,mBAAmB,IAAI,oBAAoB,CAAC;AAEvE,MAAI,MAAM,YAAY;AACpB,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAM,UAAU,GAAG;AACrD,YAAM,WAAY,CAAC,IAAI,oBAAoB,CAAQ;AAAA,IACrD;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,CAAC,MAAM,QAAQ,MAAM,KAAK,GAAG;AAC9C,UAAM,QAAQ,UAAU,MAAM,KAAK;AAAA,EACrC;AAEA,aAAW,OAAO,CAAC,SAAS,SAAS,SAAS,OAAO,QAAQ,QAAQ,MAAM,UAAU,GAAG;AACtF,QAAI,MAAM,GAAG,GAAG;AACd,YAAM,GAAG,IAAI,UAAU,MAAM,GAAG,CAAC;AAAA,IACnC;AAAA,EACF;AAEA,SAAO;AACT;AAEA,MAAM,sBAAsB,CAAC,eAAgE;AAC3F,SAAO;AACT;AAEO,MAAM,kBAAkB,CAC7B,YACA,eACsD;AACtD,UAAQ,YAAA;AAAA,IACN,KAAK;AACH,aAAO,oBAAoB,UAAU;AAAA,IACvC,KAAK;AACH,aAAO,oBAAoB,UAAU;AAAA,IACvC;AACE,YAAM,IAAI,MAAM,gCAAgC,UAAU,EAAE;AAAA,EAAA;AAElE;"}
|
package/src/json-to-oas.ts
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'
|
|
2
|
-
import type { JSONSchema } from 'zod/v4/core'
|
|
3
|
-
|
|
4
|
-
type OASVersion = '3.0' | '3.1'
|
|
5
|
-
|
|
6
|
-
export const getOASVersion = (documentObject: {
|
|
7
|
-
openapiObject: Partial<OpenAPIV3.Document | OpenAPIV3_1.Document>
|
|
8
|
-
}): OASVersion => {
|
|
9
|
-
const openapiVersion = documentObject.openapiObject.openapi || '3.0.3'
|
|
10
|
-
|
|
11
|
-
if (openapiVersion.startsWith('3.1')) {
|
|
12
|
-
return '3.1'
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
if (openapiVersion.startsWith('3.0')) {
|
|
16
|
-
return '3.0'
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
throw new Error('Unsupported OpenAPI document object')
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export const jsonSchemaToOAS_3_0 = (jsonSchema: JSONSchema.BaseSchema): OpenAPIV3.SchemaObject => {
|
|
23
|
-
const clone: any = { ...jsonSchema }
|
|
24
|
-
|
|
25
|
-
if (clone.type === 'null') {
|
|
26
|
-
clone.nullable = true
|
|
27
|
-
delete clone.type
|
|
28
|
-
clone.enum = [null]
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (Array.isArray(clone.prefixItems)) {
|
|
32
|
-
const tuple = clone.prefixItems as JSONSchema.BaseSchema[]
|
|
33
|
-
|
|
34
|
-
clone.minItems ??= tuple.length
|
|
35
|
-
clone.maxItems ??= tuple.length
|
|
36
|
-
|
|
37
|
-
clone.items = {
|
|
38
|
-
oneOf: tuple.map(jsonSchemaToOAS_3_0),
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
delete clone.prefixItems
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if ('const' in clone && clone.const !== undefined) {
|
|
45
|
-
clone.enum = [clone.const]
|
|
46
|
-
delete clone.const
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (typeof clone.exclusiveMinimum === 'number') {
|
|
50
|
-
clone.minimum = clone.exclusiveMinimum
|
|
51
|
-
clone.exclusiveMinimum = true
|
|
52
|
-
}
|
|
53
|
-
if (typeof clone.exclusiveMaximum === 'number') {
|
|
54
|
-
clone.maximum = clone.exclusiveMaximum
|
|
55
|
-
clone.exclusiveMaximum = true
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
for (const key of [
|
|
59
|
-
'$schema',
|
|
60
|
-
'$id',
|
|
61
|
-
'unevaluatedProperties',
|
|
62
|
-
'dependentSchemas',
|
|
63
|
-
'patternProperties',
|
|
64
|
-
'propertyNames',
|
|
65
|
-
'contentEncoding',
|
|
66
|
-
'contentMediaType',
|
|
67
|
-
]) {
|
|
68
|
-
delete clone[key]
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const recursive = (v: any): any =>
|
|
72
|
-
Array.isArray(v) ? v.map(jsonSchemaToOAS_3_0) : jsonSchemaToOAS_3_0(v)
|
|
73
|
-
|
|
74
|
-
if (clone.properties) {
|
|
75
|
-
for (const [k, v] of Object.entries(clone.properties)) {
|
|
76
|
-
clone.properties![k] = jsonSchemaToOAS_3_0(v as any)
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (clone.items && !Array.isArray(clone.items)) {
|
|
81
|
-
clone.items = recursive(clone.items)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
for (const key of ['allOf', 'anyOf', 'oneOf', 'not', 'then', 'else', 'if', 'contains']) {
|
|
85
|
-
if (clone[key]) {
|
|
86
|
-
clone[key] = recursive(clone[key])
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return clone as OpenAPIV3.SchemaObject
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const jsonSchemaToOAS_3_1 = (jsonSchema: JSONSchema.BaseSchema): OpenAPIV3_1.SchemaObject => {
|
|
94
|
-
return jsonSchema as OpenAPIV3_1.SchemaObject
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export const jsonSchemaToOAS = (
|
|
98
|
-
jsonSchema: JSONSchema.BaseSchema,
|
|
99
|
-
oasVersion: OASVersion,
|
|
100
|
-
): OpenAPIV3.SchemaObject | OpenAPIV3_1.SchemaObject => {
|
|
101
|
-
switch (oasVersion) {
|
|
102
|
-
case '3.0':
|
|
103
|
-
return jsonSchemaToOAS_3_0(jsonSchema)
|
|
104
|
-
case '3.1':
|
|
105
|
-
return jsonSchemaToOAS_3_1(jsonSchema)
|
|
106
|
-
default:
|
|
107
|
-
throw new Error(`Unsupported OpenAPI version: ${oasVersion}`)
|
|
108
|
-
}
|
|
109
|
-
}
|