@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.
Files changed (41) hide show
  1. package/README.md +34 -4
  2. package/dist/cjs/core.cjs +33 -45
  3. package/dist/cjs/core.cjs.map +1 -1
  4. package/dist/cjs/core.d.cts +11 -12
  5. package/dist/cjs/errors.cjs +1 -1
  6. package/dist/cjs/errors.cjs.map +1 -1
  7. package/dist/cjs/registry.cjs +43 -0
  8. package/dist/cjs/registry.cjs.map +1 -0
  9. package/dist/cjs/registry.d.cts +9 -0
  10. package/dist/cjs/utils.cjs +21 -0
  11. package/dist/cjs/utils.cjs.map +1 -0
  12. package/dist/cjs/utils.d.cts +12 -0
  13. package/dist/cjs/zod-to-json.cjs +36 -41
  14. package/dist/cjs/zod-to-json.cjs.map +1 -1
  15. package/dist/cjs/zod-to-json.d.cts +7 -7
  16. package/dist/esm/core.d.ts +11 -12
  17. package/dist/esm/core.js +34 -46
  18. package/dist/esm/core.js.map +1 -1
  19. package/dist/esm/errors.js +1 -1
  20. package/dist/esm/errors.js.map +1 -1
  21. package/dist/esm/registry.d.ts +9 -0
  22. package/dist/esm/registry.js +43 -0
  23. package/dist/esm/registry.js.map +1 -0
  24. package/dist/esm/utils.d.ts +12 -0
  25. package/dist/esm/utils.js +21 -0
  26. package/dist/esm/utils.js.map +1 -0
  27. package/dist/esm/zod-to-json.d.ts +7 -7
  28. package/dist/esm/zod-to-json.js +36 -41
  29. package/dist/esm/zod-to-json.js.map +1 -1
  30. package/package.json +13 -11
  31. package/src/core.ts +44 -60
  32. package/src/registry.ts +64 -0
  33. package/src/utils.ts +33 -0
  34. package/src/zod-to-json.ts +62 -52
  35. package/dist/cjs/json-to-oas.cjs +0 -85
  36. package/dist/cjs/json-to-oas.cjs.map +0 -1
  37. package/dist/cjs/json-to-oas.d.cts +0 -9
  38. package/dist/esm/json-to-oas.d.ts +0 -9
  39. package/dist/esm/json-to-oas.js +0 -85
  40. package/dist/esm/json-to-oas.js.map +0 -1
  41. 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;"}
@@ -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
- }