fullstacked 0.12.1-1359 → 0.12.1-1364
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/fullstacked_modules/@fullstacked/ai-agent/ai-agent.js +55352 -53576
- package/fullstacked_modules/@fullstacked/ai-agent/index.ts +0 -1
- package/fullstacked_modules/@fullstacked/ai-agent/lock.json +157 -152
- package/fullstacked_modules/@fullstacked/ai-agent/package.json +13 -13
- package/fullstacked_modules/@fullstacked/ai-agent/src/providers/ollama.ts +2 -2
- package/fullstacked_modules/@fullstacked/ui/index.js +6 -1
- package/fullstacked_modules/zod/README.md +4 -4
- package/fullstacked_modules/zod/index.cjs +2 -2
- package/fullstacked_modules/zod/index.d.cts +2 -2
- package/fullstacked_modules/zod/index.d.ts +2 -2
- package/fullstacked_modules/zod/index.js +2 -2
- package/fullstacked_modules/zod/locales/index.cjs +17 -0
- package/fullstacked_modules/zod/locales/index.d.cts +1 -0
- package/fullstacked_modules/zod/locales/index.d.ts +1 -0
- package/fullstacked_modules/zod/locales/index.js +1 -0
- package/fullstacked_modules/zod/locales/package.json +6 -0
- package/fullstacked_modules/zod/mini/index.cjs +17 -0
- package/fullstacked_modules/zod/mini/index.d.cts +1 -0
- package/fullstacked_modules/zod/mini/index.d.ts +1 -0
- package/fullstacked_modules/zod/mini/index.js +1 -0
- package/fullstacked_modules/zod/mini/package.json +6 -0
- package/fullstacked_modules/zod/package.json +29 -12
- package/fullstacked_modules/zod/src/index.ts +2 -2
- package/fullstacked_modules/zod/src/locales/index.ts +1 -0
- package/fullstacked_modules/zod/src/mini/index.ts +1 -0
- package/fullstacked_modules/zod/src/v3/ZodError.ts +1 -1
- package/fullstacked_modules/zod/src/v3/tests/object.test.ts +2 -2
- package/fullstacked_modules/zod/src/v3/tests/string.test.ts +2 -2
- package/fullstacked_modules/zod/src/v3/types.ts +3 -1
- package/fullstacked_modules/zod/src/v4/classic/checks.ts +1 -0
- package/fullstacked_modules/zod/src/v4/classic/compat.ts +4 -0
- package/fullstacked_modules/zod/src/v4/classic/errors.ts +9 -2
- package/fullstacked_modules/zod/src/v4/classic/external.ts +1 -1
- package/fullstacked_modules/zod/src/v4/classic/parse.ts +49 -0
- package/fullstacked_modules/zod/src/v4/classic/schemas.ts +224 -81
- package/fullstacked_modules/zod/src/v4/classic/tests/array.test.ts +6 -6
- package/fullstacked_modules/zod/src/v4/classic/tests/catch.test.ts +29 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/continuability.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/classic/tests/datetime.test.ts +6 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/default.test.ts +52 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +42 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/error-utils.test.ts +70 -2
- package/fullstacked_modules/zod/src/v4/classic/tests/file.test.ts +9 -4
- package/fullstacked_modules/zod/src/v4/classic/tests/firstparty.test.ts +4 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/function.test.ts +71 -31
- package/fullstacked_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/index.test.ts +15 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/literal.test.ts +25 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/nonoptional.test.ts +15 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/number.test.ts +23 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/object.test.ts +48 -2
- package/fullstacked_modules/zod/src/v4/classic/tests/optional.test.ts +13 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/partial.test.ts +193 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/pickomit.test.ts +5 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/pipe.test.ts +25 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/prefault.test.ts +37 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/preprocess.test.ts +5 -21
- package/fullstacked_modules/zod/src/v4/classic/tests/record.test.ts +15 -1
- package/fullstacked_modules/zod/src/v4/classic/tests/recursive-types.test.ts +226 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/refine.test.ts +78 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/set.test.ts +5 -3
- package/fullstacked_modules/zod/src/v4/classic/tests/string-formats.test.ts +16 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/string.test.ts +204 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/stringbool.test.ts +40 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/template-literal.test.ts +14 -9
- package/fullstacked_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +315 -7
- package/fullstacked_modules/zod/src/v4/classic/tests/transform.test.ts +111 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/tuple.test.ts +2 -2
- package/fullstacked_modules/zod/src/v4/classic/tests/union.test.ts +90 -3
- package/fullstacked_modules/zod/src/v4/core/api.ts +160 -133
- package/fullstacked_modules/zod/src/v4/core/checks.ts +6 -2
- package/fullstacked_modules/zod/src/v4/core/core.ts +9 -28
- package/fullstacked_modules/zod/src/v4/core/doc.ts +2 -2
- package/fullstacked_modules/zod/src/v4/core/errors.ts +49 -60
- package/fullstacked_modules/zod/src/v4/core/index.ts +0 -1
- package/fullstacked_modules/zod/src/v4/core/json-schema.ts +7 -3
- package/fullstacked_modules/zod/src/v4/core/parse.ts +101 -0
- package/fullstacked_modules/zod/src/v4/core/regexes.ts +56 -14
- package/fullstacked_modules/zod/src/v4/core/registries.ts +5 -4
- package/fullstacked_modules/zod/src/v4/core/schemas.ts +705 -230
- package/fullstacked_modules/zod/src/v4/core/tests/extend.test.ts +18 -0
- package/fullstacked_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/fullstacked_modules/zod/src/v4/core/to-json-schema.ts +100 -33
- package/fullstacked_modules/zod/src/v4/core/util.ts +237 -102
- package/fullstacked_modules/zod/src/v4/core/versions.ts +2 -2
- package/fullstacked_modules/zod/src/v4/locales/bg.ts +136 -0
- package/fullstacked_modules/zod/src/v4/locales/da.ts +141 -0
- package/fullstacked_modules/zod/src/v4/locales/es.ts +44 -10
- package/fullstacked_modules/zod/src/v4/locales/index.ts +8 -0
- package/fullstacked_modules/zod/src/v4/locales/is.ts +127 -0
- package/fullstacked_modules/zod/src/v4/locales/ka.ts +138 -0
- package/fullstacked_modules/zod/src/v4/locales/kh.ts +3 -122
- package/fullstacked_modules/zod/src/v4/locales/km.ts +126 -0
- package/fullstacked_modules/zod/src/v4/locales/lt.ts +265 -0
- package/fullstacked_modules/zod/src/v4/locales/ua.ts +3 -122
- package/fullstacked_modules/zod/src/v4/locales/uk.ts +126 -0
- package/fullstacked_modules/zod/src/v4/locales/yo.ts +131 -0
- package/fullstacked_modules/zod/src/v4/mini/external.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/parse.ts +14 -1
- package/fullstacked_modules/zod/src/v4/mini/schemas.ts +186 -40
- package/fullstacked_modules/zod/src/v4/mini/tests/assignability.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
- package/fullstacked_modules/zod/src/v4/mini/tests/computed.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/error.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/index.test.ts +29 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/number.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/object.test.ts +16 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/prototypes.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/recursive-types.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/string.test.ts +17 -1
- package/fullstacked_modules/zod/v3/ZodError.cjs +1 -1
- package/fullstacked_modules/zod/v3/ZodError.d.cts +6 -6
- package/fullstacked_modules/zod/v3/ZodError.d.ts +6 -6
- package/fullstacked_modules/zod/v3/ZodError.js +1 -1
- package/fullstacked_modules/zod/v3/locales/en.cjs +1 -0
- package/fullstacked_modules/zod/v3/locales/en.d.cts +1 -1
- package/fullstacked_modules/zod/v3/package.json +6 -0
- package/fullstacked_modules/zod/v3/types.cjs +2 -0
- package/fullstacked_modules/zod/v3/types.d.cts +4 -1
- package/fullstacked_modules/zod/v3/types.d.ts +4 -1
- package/fullstacked_modules/zod/v3/types.js +2 -0
- package/fullstacked_modules/zod/v4/classic/checks.d.cts +1 -1
- package/fullstacked_modules/zod/v4/classic/checks.d.ts +1 -1
- package/fullstacked_modules/zod/v4/classic/compat.cjs +5 -1
- package/fullstacked_modules/zod/v4/classic/compat.d.cts +4 -0
- package/fullstacked_modules/zod/v4/classic/compat.d.ts +4 -0
- package/fullstacked_modules/zod/v4/classic/compat.js +4 -0
- package/fullstacked_modules/zod/v4/classic/errors.cjs +9 -2
- package/fullstacked_modules/zod/v4/classic/errors.js +9 -2
- package/fullstacked_modules/zod/v4/classic/external.cjs +2 -2
- package/fullstacked_modules/zod/v4/classic/external.d.cts +1 -1
- package/fullstacked_modules/zod/v4/classic/external.d.ts +1 -1
- package/fullstacked_modules/zod/v4/classic/external.js +1 -1
- package/fullstacked_modules/zod/v4/classic/package.json +6 -0
- package/fullstacked_modules/zod/v4/classic/parse.cjs +10 -1
- package/fullstacked_modules/zod/v4/classic/parse.d.cts +8 -0
- package/fullstacked_modules/zod/v4/classic/parse.d.ts +8 -0
- package/fullstacked_modules/zod/v4/classic/parse.js +9 -0
- package/fullstacked_modules/zod/v4/classic/schemas.cjs +90 -48
- package/fullstacked_modules/zod/v4/classic/schemas.d.cts +70 -27
- package/fullstacked_modules/zod/v4/classic/schemas.d.ts +70 -27
- package/fullstacked_modules/zod/v4/classic/schemas.js +81 -47
- package/fullstacked_modules/zod/v4/core/api.cjs +52 -31
- package/fullstacked_modules/zod/v4/core/api.d.cts +87 -76
- package/fullstacked_modules/zod/v4/core/api.d.ts +87 -76
- package/fullstacked_modules/zod/v4/core/api.js +50 -31
- package/fullstacked_modules/zod/v4/core/checks.cjs +4 -0
- package/fullstacked_modules/zod/v4/core/checks.d.cts +2 -2
- package/fullstacked_modules/zod/v4/core/checks.d.ts +2 -2
- package/fullstacked_modules/zod/v4/core/checks.js +4 -0
- package/fullstacked_modules/zod/v4/core/core.cjs +8 -1
- package/fullstacked_modules/zod/v4/core/core.d.cts +5 -2
- package/fullstacked_modules/zod/v4/core/core.d.ts +5 -2
- package/fullstacked_modules/zod/v4/core/core.js +6 -0
- package/fullstacked_modules/zod/v4/core/doc.d.cts +1 -1
- package/fullstacked_modules/zod/v4/core/doc.d.ts +1 -1
- package/fullstacked_modules/zod/v4/core/errors.cjs +6 -19
- package/fullstacked_modules/zod/v4/core/errors.d.cts +24 -22
- package/fullstacked_modules/zod/v4/core/errors.d.ts +24 -22
- package/fullstacked_modules/zod/v4/core/errors.js +6 -19
- package/fullstacked_modules/zod/v4/core/index.cjs +0 -1
- package/fullstacked_modules/zod/v4/core/index.d.cts +0 -1
- package/fullstacked_modules/zod/v4/core/index.d.ts +0 -1
- package/fullstacked_modules/zod/v4/core/index.js +0 -1
- package/fullstacked_modules/zod/v4/core/json-schema.d.cts +4 -3
- package/fullstacked_modules/zod/v4/core/json-schema.d.ts +4 -3
- package/fullstacked_modules/zod/v4/core/package.json +6 -0
- package/fullstacked_modules/zod/v4/core/parse.cjs +45 -1
- package/fullstacked_modules/zod/v4/core/parse.d.cts +24 -0
- package/fullstacked_modules/zod/v4/core/parse.d.ts +24 -0
- package/fullstacked_modules/zod/v4/core/parse.js +36 -0
- package/fullstacked_modules/zod/v4/core/regexes.cjs +49 -16
- package/fullstacked_modules/zod/v4/core/regexes.d.cts +18 -2
- package/fullstacked_modules/zod/v4/core/regexes.d.ts +18 -2
- package/fullstacked_modules/zod/v4/core/regexes.js +46 -14
- package/fullstacked_modules/zod/v4/core/registries.cjs +4 -3
- package/fullstacked_modules/zod/v4/core/registries.d.cts +2 -2
- package/fullstacked_modules/zod/v4/core/registries.d.ts +2 -2
- package/fullstacked_modules/zod/v4/core/registries.js +4 -3
- package/fullstacked_modules/zod/v4/core/schemas.cjs +409 -171
- package/fullstacked_modules/zod/v4/core/schemas.d.cts +88 -16
- package/fullstacked_modules/zod/v4/core/schemas.d.ts +88 -16
- package/fullstacked_modules/zod/v4/core/schemas.js +408 -170
- package/fullstacked_modules/zod/v4/core/to-json-schema.cjs +97 -31
- package/fullstacked_modules/zod/v4/core/to-json-schema.d.cts +5 -3
- package/fullstacked_modules/zod/v4/core/to-json-schema.d.ts +5 -3
- package/fullstacked_modules/zod/v4/core/to-json-schema.js +97 -31
- package/fullstacked_modules/zod/v4/core/util.cjs +220 -101
- package/fullstacked_modules/zod/v4/core/util.d.cts +14 -0
- package/fullstacked_modules/zod/v4/core/util.d.ts +14 -0
- package/fullstacked_modules/zod/v4/core/util.js +209 -101
- package/fullstacked_modules/zod/v4/core/versions.cjs +2 -2
- package/fullstacked_modules/zod/v4/core/versions.d.cts +1 -1
- package/fullstacked_modules/zod/v4/core/versions.d.ts +1 -1
- package/fullstacked_modules/zod/v4/core/versions.js +2 -2
- package/fullstacked_modules/zod/v4/locales/ar.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ar.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/az.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/az.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/be.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/be.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/bg.cjs +156 -0
- package/fullstacked_modules/zod/v4/locales/bg.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/bg.d.ts +5 -0
- package/fullstacked_modules/zod/v4/locales/bg.js +128 -0
- package/fullstacked_modules/zod/v4/locales/ca.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ca.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/cs.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/cs.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/da.cjs +158 -0
- package/fullstacked_modules/zod/v4/locales/da.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/da.d.ts +4 -0
- package/fullstacked_modules/zod/v4/locales/da.js +131 -0
- package/fullstacked_modules/zod/v4/locales/de.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/de.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/es.cjs +43 -10
- package/fullstacked_modules/zod/v4/locales/es.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/es.js +42 -10
- package/fullstacked_modules/zod/v4/locales/fa.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/fa.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/fi.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/fi.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/fr-CA.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/fr-CA.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/fr.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/fr.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/he.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/he.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/hu.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/hu.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/id.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/id.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/index.cjs +17 -1
- package/fullstacked_modules/zod/v4/locales/index.d.cts +8 -0
- package/fullstacked_modules/zod/v4/locales/index.d.ts +8 -0
- package/fullstacked_modules/zod/v4/locales/index.js +8 -0
- package/fullstacked_modules/zod/v4/locales/is.cjs +145 -0
- package/fullstacked_modules/zod/v4/locales/is.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/is.d.ts +5 -0
- package/fullstacked_modules/zod/v4/locales/is.js +117 -0
- package/fullstacked_modules/zod/v4/locales/it.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/it.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ja.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ja.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ka.cjs +153 -0
- package/fullstacked_modules/zod/v4/locales/ka.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/ka.d.ts +5 -0
- package/fullstacked_modules/zod/v4/locales/ka.js +125 -0
- package/fullstacked_modules/zod/v4/locales/kh.cjs +6 -137
- package/fullstacked_modules/zod/v4/locales/kh.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/kh.d.ts +1 -0
- package/fullstacked_modules/zod/v4/locales/kh.js +3 -115
- package/fullstacked_modules/zod/v4/locales/km.cjs +144 -0
- package/fullstacked_modules/zod/v4/locales/km.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/km.d.ts +4 -0
- package/fullstacked_modules/zod/v4/locales/km.js +117 -0
- package/fullstacked_modules/zod/v4/locales/ko.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ko.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/lt.cjs +258 -0
- package/fullstacked_modules/zod/v4/locales/lt.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/lt.d.ts +5 -0
- package/fullstacked_modules/zod/v4/locales/lt.js +230 -0
- package/fullstacked_modules/zod/v4/locales/mk.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/mk.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ms.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ms.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/nl.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/nl.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/no.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/no.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ota.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ota.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/package.json +6 -0
- package/fullstacked_modules/zod/v4/locales/pl.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/pl.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ps.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ps.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/pt.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/pt.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ru.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ru.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/sl.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/sl.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/sv.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/sv.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ta.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ta.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/th.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/th.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ua.cjs +6 -137
- package/fullstacked_modules/zod/v4/locales/ua.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ua.d.ts +1 -0
- package/fullstacked_modules/zod/v4/locales/ua.js +3 -115
- package/fullstacked_modules/zod/v4/locales/uk.cjs +144 -0
- package/fullstacked_modules/zod/v4/locales/uk.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/uk.d.ts +4 -0
- package/fullstacked_modules/zod/v4/locales/uk.js +117 -0
- package/fullstacked_modules/zod/v4/locales/ur.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ur.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/vi.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/vi.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/yo.cjs +142 -0
- package/fullstacked_modules/zod/v4/locales/yo.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/yo.d.ts +4 -0
- package/fullstacked_modules/zod/v4/locales/yo.js +115 -0
- package/fullstacked_modules/zod/v4/locales/zh-CN.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/zh-CN.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/zh-TW.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/zh-TW.d.cts +2 -1
- package/fullstacked_modules/zod/v4/mini/external.cjs +2 -2
- package/fullstacked_modules/zod/v4/mini/external.d.cts +1 -1
- package/fullstacked_modules/zod/v4/mini/external.d.ts +1 -1
- package/fullstacked_modules/zod/v4/mini/external.js +1 -1
- package/fullstacked_modules/zod/v4/mini/package.json +6 -0
- package/fullstacked_modules/zod/v4/mini/parse.cjs +9 -1
- package/fullstacked_modules/zod/v4/mini/parse.d.cts +1 -1
- package/fullstacked_modules/zod/v4/mini/parse.d.ts +1 -1
- package/fullstacked_modules/zod/v4/mini/parse.js +1 -1
- package/fullstacked_modules/zod/v4/mini/schemas.cjs +77 -24
- package/fullstacked_modules/zod/v4/mini/schemas.d.cts +56 -5
- package/fullstacked_modules/zod/v4/mini/schemas.d.ts +56 -5
- package/fullstacked_modules/zod/v4/mini/schemas.js +66 -23
- package/fullstacked_modules/zod/v4/package.json +6 -0
- package/fullstacked_modules/zod/v4-mini/package.json +6 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/fullstacked_modules/@fullstacked/ai-agent/story.txt +0 -7
- package/fullstacked_modules/@fullstacked/ai-agent/summary.txt +0 -7
- package/fullstacked_modules/zod/src/v4/core/function.ts +0 -176
- package/fullstacked_modules/zod/v4/core/function.cjs +0 -102
- package/fullstacked_modules/zod/v4/core/function.d.cts +0 -52
- package/fullstacked_modules/zod/v4/core/function.d.ts +0 -52
- package/fullstacked_modules/zod/v4/core/function.js +0 -75
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { test } from "vitest";
|
|
2
|
+
import * as z from "zod/v4";
|
|
3
|
+
|
|
4
|
+
test("extend chaining preserves and overrides properties", () => {
|
|
5
|
+
const schema1 = z.object({
|
|
6
|
+
email: z.string(),
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
const schema2 = schema1.extend({
|
|
10
|
+
email: schema1.shape.email.check(z.email()),
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const schema3 = schema2.extend({
|
|
14
|
+
email: schema2.shape.email.or(z.literal("")),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
schema3.parse({ email: "test@example.com" });
|
|
18
|
+
});
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { z } from "../../../../index.js";
|
|
3
|
+
import es from "../../../locales/es.js";
|
|
4
|
+
|
|
5
|
+
test("Spanish locale - type name translations in too_small errors", () => {
|
|
6
|
+
z.config(es());
|
|
7
|
+
|
|
8
|
+
// Test string type translation
|
|
9
|
+
const stringSchema = z.string().min(5);
|
|
10
|
+
const stringResult = stringSchema.safeParse("abc");
|
|
11
|
+
expect(stringResult.success).toBe(false);
|
|
12
|
+
if (!stringResult.success) {
|
|
13
|
+
expect(stringResult.error.issues[0].message).toBe(
|
|
14
|
+
"Demasiado pequeño: se esperaba que texto tuviera >=5 caracteres"
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Test number type translation
|
|
19
|
+
const numberSchema = z.number().min(10);
|
|
20
|
+
const numberResult = numberSchema.safeParse(5);
|
|
21
|
+
expect(numberResult.success).toBe(false);
|
|
22
|
+
if (!numberResult.success) {
|
|
23
|
+
expect(numberResult.error.issues[0].message).toBe("Demasiado pequeño: se esperaba que número fuera >=10");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Test array type translation
|
|
27
|
+
const arraySchema = z.array(z.string()).min(3);
|
|
28
|
+
const arrayResult = arraySchema.safeParse(["a", "b"]);
|
|
29
|
+
expect(arrayResult.success).toBe(false);
|
|
30
|
+
if (!arrayResult.success) {
|
|
31
|
+
expect(arrayResult.error.issues[0].message).toBe(
|
|
32
|
+
"Demasiado pequeño: se esperaba que arreglo tuviera >=3 elementos"
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Test set type translation
|
|
37
|
+
const setSchema = z.set(z.string()).min(2);
|
|
38
|
+
const setResult = setSchema.safeParse(new Set(["a"]));
|
|
39
|
+
expect(setResult.success).toBe(false);
|
|
40
|
+
if (!setResult.success) {
|
|
41
|
+
expect(setResult.error.issues[0].message).toBe("Demasiado pequeño: se esperaba que conjunto tuviera >=2 elementos");
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test("Spanish locale - type name translations in too_big errors", () => {
|
|
46
|
+
z.config(es());
|
|
47
|
+
|
|
48
|
+
// Test string type translation
|
|
49
|
+
const stringSchema = z.string().max(3);
|
|
50
|
+
const stringResult = stringSchema.safeParse("abcde");
|
|
51
|
+
expect(stringResult.success).toBe(false);
|
|
52
|
+
if (!stringResult.success) {
|
|
53
|
+
expect(stringResult.error.issues[0].message).toBe("Demasiado grande: se esperaba que texto tuviera <=3 caracteres");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Test number type translation
|
|
57
|
+
const numberSchema = z.number().max(10);
|
|
58
|
+
const numberResult = numberSchema.safeParse(15);
|
|
59
|
+
expect(numberResult.success).toBe(false);
|
|
60
|
+
if (!numberResult.success) {
|
|
61
|
+
expect(numberResult.error.issues[0].message).toBe("Demasiado grande: se esperaba que número fuera <=10");
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Test array type translation
|
|
65
|
+
const arraySchema = z.array(z.string()).max(2);
|
|
66
|
+
const arrayResult = arraySchema.safeParse(["a", "b", "c"]);
|
|
67
|
+
expect(arrayResult.success).toBe(false);
|
|
68
|
+
if (!arrayResult.success) {
|
|
69
|
+
expect(arrayResult.error.issues[0].message).toBe("Demasiado grande: se esperaba que arreglo tuviera <=2 elementos");
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("Spanish locale - type name translations in invalid_type errors", () => {
|
|
74
|
+
z.config(es());
|
|
75
|
+
|
|
76
|
+
// Test string expected, number received
|
|
77
|
+
const stringSchema = z.string();
|
|
78
|
+
const stringResult = stringSchema.safeParse(123);
|
|
79
|
+
expect(stringResult.success).toBe(false);
|
|
80
|
+
if (!stringResult.success) {
|
|
81
|
+
expect(stringResult.error.issues[0].message).toBe("Entrada inválida: se esperaba texto, recibido número");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Test number expected, string received
|
|
85
|
+
const numberSchema = z.number();
|
|
86
|
+
const numberResult = numberSchema.safeParse("abc");
|
|
87
|
+
expect(numberResult.success).toBe(false);
|
|
88
|
+
if (!numberResult.success) {
|
|
89
|
+
expect(numberResult.error.issues[0].message).toBe("Entrada inválida: se esperaba número, recibido texto");
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Test boolean expected, null received
|
|
93
|
+
const booleanSchema = z.boolean();
|
|
94
|
+
const booleanResult = booleanSchema.safeParse(null);
|
|
95
|
+
expect(booleanResult.success).toBe(false);
|
|
96
|
+
if (!booleanResult.success) {
|
|
97
|
+
expect(booleanResult.error.issues[0].message).toBe("Entrada inválida: se esperaba booleano, recibido nulo");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Test array expected, object received
|
|
101
|
+
const arraySchema = z.array(z.string());
|
|
102
|
+
const arrayResult = arraySchema.safeParse({});
|
|
103
|
+
expect(arrayResult.success).toBe(false);
|
|
104
|
+
if (!arrayResult.success) {
|
|
105
|
+
expect(arrayResult.error.issues[0].message).toBe("Entrada inválida: se esperaba arreglo, recibido objeto");
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test("Spanish locale - fallback for unknown type names", () => {
|
|
110
|
+
z.config(es());
|
|
111
|
+
|
|
112
|
+
// Test with a type that's not in the TypeNames dictionary
|
|
113
|
+
// This will test the fallback behavior
|
|
114
|
+
const dateSchema = z.date().min(new Date("2025-01-01"));
|
|
115
|
+
const dateResult = dateSchema.safeParse(new Date("2024-01-01"));
|
|
116
|
+
expect(dateResult.success).toBe(false);
|
|
117
|
+
if (!dateResult.success) {
|
|
118
|
+
// Should use "fecha" since we included it in TypeNames
|
|
119
|
+
expect(dateResult.error.issues[0].message).toContain("fecha");
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test("Spanish locale - other error cases", () => {
|
|
124
|
+
z.config(es());
|
|
125
|
+
|
|
126
|
+
// Test invalid_element with tuple
|
|
127
|
+
const tupleSchema = z.tuple([z.string(), z.number()]);
|
|
128
|
+
const tupleResult = tupleSchema.safeParse(["abc", "not a number"]);
|
|
129
|
+
expect(tupleResult.success).toBe(false);
|
|
130
|
+
if (!tupleResult.success) {
|
|
131
|
+
expect(tupleResult.error.issues[0].message).toContain("Entrada inválida");
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Test invalid_value with enum
|
|
135
|
+
const enumSchema = z.enum(["a", "b"]);
|
|
136
|
+
const enumResult = enumSchema.safeParse("c");
|
|
137
|
+
expect(enumResult.success).toBe(false);
|
|
138
|
+
if (!enumResult.success) {
|
|
139
|
+
expect(enumResult.error.issues[0].message).toBe('Opción inválida: se esperaba una de "a"|"b"');
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Test not_multiple_of
|
|
143
|
+
const multipleSchema = z.number().multipleOf(3);
|
|
144
|
+
const multipleResult = multipleSchema.safeParse(10);
|
|
145
|
+
expect(multipleResult.success).toBe(false);
|
|
146
|
+
if (!multipleResult.success) {
|
|
147
|
+
expect(multipleResult.error.issues[0].message).toBe("Número inválido: debe ser múltiplo de 3");
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Test unrecognized_keys
|
|
151
|
+
const strictSchema = z.object({ a: z.string() }).strict();
|
|
152
|
+
const strictResult = strictSchema.safeParse({ a: "test", b: "extra" });
|
|
153
|
+
expect(strictResult.success).toBe(false);
|
|
154
|
+
if (!strictResult.success) {
|
|
155
|
+
expect(strictResult.error.issues[0].message).toBe('Llave desconocida: "b"');
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Test invalid_union
|
|
159
|
+
const unionSchema = z.union([z.string(), z.number()]);
|
|
160
|
+
const unionResult = unionSchema.safeParse(true);
|
|
161
|
+
expect(unionResult.success).toBe(false);
|
|
162
|
+
if (!unionResult.success) {
|
|
163
|
+
expect(unionResult.error.issues[0].message).toBe("Entrada inválida");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Test invalid_format with regex
|
|
167
|
+
const regexSchema = z.string().regex(/^[a-z]+$/);
|
|
168
|
+
const regexResult = regexSchema.safeParse("ABC123");
|
|
169
|
+
expect(regexResult.success).toBe(false);
|
|
170
|
+
if (!regexResult.success) {
|
|
171
|
+
expect(regexResult.error.issues[0].message).toBe("Cadena inválida: debe coincidir con el patrón /^[a-z]+$/");
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Test invalid_format with startsWith
|
|
175
|
+
const startsWithSchema = z.string().startsWith("hello");
|
|
176
|
+
const startsWithResult = startsWithSchema.safeParse("world");
|
|
177
|
+
expect(startsWithResult.success).toBe(false);
|
|
178
|
+
if (!startsWithResult.success) {
|
|
179
|
+
expect(startsWithResult.error.issues[0].message).toBe('Cadena inválida: debe comenzar con "hello"');
|
|
180
|
+
}
|
|
181
|
+
});
|
|
@@ -10,8 +10,10 @@ interface JSONSchemaGeneratorParams {
|
|
|
10
10
|
metadata?: $ZodRegistry<Record<string, any>>;
|
|
11
11
|
/** The JSON Schema version to target.
|
|
12
12
|
* - `"draft-2020-12"` — Default. JSON Schema Draft 2020-12
|
|
13
|
-
* - `"draft-7"` — JSON Schema Draft 7
|
|
14
|
-
|
|
13
|
+
* - `"draft-7"` — JSON Schema Draft 7
|
|
14
|
+
* - `"draft-4"` — JSON Schema Draft 4
|
|
15
|
+
* - `"openapi-3.0"` — OpenAPI 3.0 Schema Object */
|
|
16
|
+
target?: "draft-4" | "draft-7" | "draft-2020-12" | "openapi-3.0";
|
|
15
17
|
/** How to handle unrepresentable types.
|
|
16
18
|
* - `"throw"` — Default. Unrepresentable types throw an error
|
|
17
19
|
* - `"any"` — Unrepresentable types become `{}` */
|
|
@@ -71,7 +73,7 @@ interface Seen {
|
|
|
71
73
|
|
|
72
74
|
export class JSONSchemaGenerator {
|
|
73
75
|
metadataRegistry: $ZodRegistry<Record<string, any>>;
|
|
74
|
-
target: "draft-7" | "draft-2020-12";
|
|
76
|
+
target: "draft-4" | "draft-7" | "draft-2020-12" | "openapi-3.0";
|
|
75
77
|
unrepresentable: "throw" | "any";
|
|
76
78
|
override: (ctx: {
|
|
77
79
|
zodSchema: schemas.$ZodTypes;
|
|
@@ -163,7 +165,9 @@ export class JSONSchemaGenerator {
|
|
|
163
165
|
else if (regexes.length > 1) {
|
|
164
166
|
result.schema.allOf = [
|
|
165
167
|
...regexes.map((regex) => ({
|
|
166
|
-
...(this.target === "draft-7"
|
|
168
|
+
...(this.target === "draft-7" || this.target === "draft-4" || this.target === "openapi-3.0"
|
|
169
|
+
? ({ type: "string" } as const)
|
|
170
|
+
: {}),
|
|
167
171
|
pattern: regex.source,
|
|
168
172
|
})),
|
|
169
173
|
];
|
|
@@ -178,19 +182,33 @@ export class JSONSchemaGenerator {
|
|
|
178
182
|
if (typeof format === "string" && format.includes("int")) json.type = "integer";
|
|
179
183
|
else json.type = "number";
|
|
180
184
|
|
|
181
|
-
if (typeof exclusiveMinimum === "number")
|
|
185
|
+
if (typeof exclusiveMinimum === "number") {
|
|
186
|
+
if (this.target === "draft-4" || this.target === "openapi-3.0") {
|
|
187
|
+
json.minimum = exclusiveMinimum;
|
|
188
|
+
json.exclusiveMinimum = true;
|
|
189
|
+
} else {
|
|
190
|
+
json.exclusiveMinimum = exclusiveMinimum;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
182
193
|
if (typeof minimum === "number") {
|
|
183
194
|
json.minimum = minimum;
|
|
184
|
-
if (typeof exclusiveMinimum === "number") {
|
|
195
|
+
if (typeof exclusiveMinimum === "number" && this.target !== "draft-4") {
|
|
185
196
|
if (exclusiveMinimum >= minimum) delete json.minimum;
|
|
186
197
|
else delete json.exclusiveMinimum;
|
|
187
198
|
}
|
|
188
199
|
}
|
|
189
200
|
|
|
190
|
-
if (typeof exclusiveMaximum === "number")
|
|
201
|
+
if (typeof exclusiveMaximum === "number") {
|
|
202
|
+
if (this.target === "draft-4" || this.target === "openapi-3.0") {
|
|
203
|
+
json.maximum = exclusiveMaximum;
|
|
204
|
+
json.exclusiveMaximum = true;
|
|
205
|
+
} else {
|
|
206
|
+
json.exclusiveMaximum = exclusiveMaximum;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
191
209
|
if (typeof maximum === "number") {
|
|
192
210
|
json.maximum = maximum;
|
|
193
|
-
if (typeof exclusiveMaximum === "number") {
|
|
211
|
+
if (typeof exclusiveMaximum === "number" && this.target !== "draft-4") {
|
|
194
212
|
if (exclusiveMaximum <= maximum) delete json.maximum;
|
|
195
213
|
else delete json.exclusiveMaximum;
|
|
196
214
|
}
|
|
@@ -218,7 +236,11 @@ export class JSONSchemaGenerator {
|
|
|
218
236
|
break;
|
|
219
237
|
}
|
|
220
238
|
case "null": {
|
|
221
|
-
|
|
239
|
+
if (this.target === "openapi-3.0") {
|
|
240
|
+
_json.type = "string";
|
|
241
|
+
_json.nullable = true;
|
|
242
|
+
_json.enum = [null];
|
|
243
|
+
} else _json.type = "null";
|
|
222
244
|
break;
|
|
223
245
|
}
|
|
224
246
|
case "any": {
|
|
@@ -308,12 +330,13 @@ export class JSONSchemaGenerator {
|
|
|
308
330
|
}
|
|
309
331
|
case "union": {
|
|
310
332
|
const json: JSONSchema.BaseSchema = _json as any;
|
|
311
|
-
|
|
333
|
+
const options = def.options.map((x, i) =>
|
|
312
334
|
this.process(x, {
|
|
313
335
|
...params,
|
|
314
336
|
path: [...params.path, "anyOf", i],
|
|
315
337
|
})
|
|
316
338
|
);
|
|
339
|
+
json.anyOf = options;
|
|
317
340
|
break;
|
|
318
341
|
}
|
|
319
342
|
case "intersection": {
|
|
@@ -338,35 +361,48 @@ export class JSONSchemaGenerator {
|
|
|
338
361
|
case "tuple": {
|
|
339
362
|
const json: JSONSchema.ArraySchema = _json as any;
|
|
340
363
|
json.type = "array";
|
|
364
|
+
|
|
365
|
+
const prefixPath = this.target === "draft-2020-12" ? "prefixItems" : "items";
|
|
366
|
+
const restPath =
|
|
367
|
+
this.target === "draft-2020-12" ? "items" : this.target === "openapi-3.0" ? "items" : "additionalItems";
|
|
368
|
+
|
|
341
369
|
const prefixItems = def.items.map((x, i) =>
|
|
342
|
-
this.process(x, {
|
|
370
|
+
this.process(x, {
|
|
371
|
+
...params,
|
|
372
|
+
path: [...params.path, prefixPath, i],
|
|
373
|
+
})
|
|
343
374
|
);
|
|
375
|
+
const rest = def.rest
|
|
376
|
+
? this.process(def.rest, {
|
|
377
|
+
...params,
|
|
378
|
+
path: [...params.path, restPath, ...(this.target === "openapi-3.0" ? [def.items.length] : [])],
|
|
379
|
+
})
|
|
380
|
+
: null;
|
|
381
|
+
|
|
344
382
|
if (this.target === "draft-2020-12") {
|
|
345
383
|
json.prefixItems = prefixItems;
|
|
384
|
+
if (rest) {
|
|
385
|
+
json.items = rest;
|
|
386
|
+
}
|
|
387
|
+
} else if (this.target === "openapi-3.0") {
|
|
388
|
+
json.items = {
|
|
389
|
+
anyOf: prefixItems,
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
if (rest) {
|
|
393
|
+
json.items.anyOf!.push(rest);
|
|
394
|
+
}
|
|
395
|
+
json.minItems = prefixItems.length;
|
|
396
|
+
if (!rest) {
|
|
397
|
+
json.maxItems = prefixItems.length;
|
|
398
|
+
}
|
|
346
399
|
} else {
|
|
347
400
|
json.items = prefixItems;
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
if (def.rest) {
|
|
351
|
-
const rest = this.process(def.rest, {
|
|
352
|
-
...params,
|
|
353
|
-
path: [...params.path, "items"],
|
|
354
|
-
});
|
|
355
|
-
if (this.target === "draft-2020-12") {
|
|
356
|
-
json.items = rest;
|
|
357
|
-
} else {
|
|
401
|
+
if (rest) {
|
|
358
402
|
json.additionalItems = rest;
|
|
359
403
|
}
|
|
360
404
|
}
|
|
361
405
|
|
|
362
|
-
// additionalItems
|
|
363
|
-
if (def.rest) {
|
|
364
|
-
json.items = this.process(def.rest, {
|
|
365
|
-
...params,
|
|
366
|
-
path: [...params.path, "items"],
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
|
|
370
406
|
// length
|
|
371
407
|
const { minimum, maximum } = schema._zod.bag as {
|
|
372
408
|
minimum?: number;
|
|
@@ -379,7 +415,12 @@ export class JSONSchemaGenerator {
|
|
|
379
415
|
case "record": {
|
|
380
416
|
const json: JSONSchema.ObjectSchema = _json as any;
|
|
381
417
|
json.type = "object";
|
|
382
|
-
|
|
418
|
+
if (this.target === "draft-7" || this.target === "draft-2020-12") {
|
|
419
|
+
json.propertyNames = this.process(def.keyType, {
|
|
420
|
+
...params,
|
|
421
|
+
path: [...params.path, "propertyNames"],
|
|
422
|
+
});
|
|
423
|
+
}
|
|
383
424
|
json.additionalProperties = this.process(def.valueType, {
|
|
384
425
|
...params,
|
|
385
426
|
path: [...params.path, "additionalProperties"],
|
|
@@ -432,7 +473,11 @@ export class JSONSchemaGenerator {
|
|
|
432
473
|
} else if (vals.length === 1) {
|
|
433
474
|
const val = vals[0]!;
|
|
434
475
|
json.type = val === null ? ("null" as const) : (typeof val as any);
|
|
435
|
-
|
|
476
|
+
if (this.target === "draft-4" || this.target === "openapi-3.0") {
|
|
477
|
+
json.enum = [val];
|
|
478
|
+
} else {
|
|
479
|
+
json.const = val;
|
|
480
|
+
}
|
|
436
481
|
} else {
|
|
437
482
|
if (vals.every((v) => typeof v === "number")) json.type = "number";
|
|
438
483
|
if (vals.every((v) => typeof v === "string")) json.type = "string";
|
|
@@ -482,7 +527,12 @@ export class JSONSchemaGenerator {
|
|
|
482
527
|
|
|
483
528
|
case "nullable": {
|
|
484
529
|
const inner = this.process(def.innerType, params);
|
|
485
|
-
|
|
530
|
+
if (this.target === "openapi-3.0") {
|
|
531
|
+
result.ref = def.innerType;
|
|
532
|
+
_json.nullable = true;
|
|
533
|
+
} else {
|
|
534
|
+
_json.anyOf = [inner, { type: "null" }];
|
|
535
|
+
}
|
|
486
536
|
break;
|
|
487
537
|
}
|
|
488
538
|
case "nonoptional": {
|
|
@@ -570,6 +620,12 @@ export class JSONSchemaGenerator {
|
|
|
570
620
|
}
|
|
571
621
|
break;
|
|
572
622
|
}
|
|
623
|
+
case "function": {
|
|
624
|
+
if (this.unrepresentable === "throw") {
|
|
625
|
+
throw new Error("Function types cannot be represented in JSON Schema");
|
|
626
|
+
}
|
|
627
|
+
break;
|
|
628
|
+
}
|
|
573
629
|
default: {
|
|
574
630
|
def satisfies never;
|
|
575
631
|
}
|
|
@@ -749,7 +805,10 @@ export class JSONSchemaGenerator {
|
|
|
749
805
|
|
|
750
806
|
// merge referenced schema into current
|
|
751
807
|
const refSchema = this.seen.get(ref)!.schema;
|
|
752
|
-
if (
|
|
808
|
+
if (
|
|
809
|
+
refSchema.$ref &&
|
|
810
|
+
(params.target === "draft-7" || params.target === "draft-4" || params.target === "openapi-3.0")
|
|
811
|
+
) {
|
|
753
812
|
schema.allOf = schema.allOf ?? [];
|
|
754
813
|
schema.allOf.push(refSchema);
|
|
755
814
|
} else {
|
|
@@ -776,7 +835,12 @@ export class JSONSchemaGenerator {
|
|
|
776
835
|
result.$schema = "https://json-schema.org/draft/2020-12/schema";
|
|
777
836
|
} else if (this.target === "draft-7") {
|
|
778
837
|
result.$schema = "http://json-schema.org/draft-07/schema#";
|
|
838
|
+
} else if (this.target === "draft-4") {
|
|
839
|
+
result.$schema = "http://json-schema.org/draft-04/schema#";
|
|
840
|
+
} else if (this.target === "openapi-3.0") {
|
|
841
|
+
// OpenAPI 3.0 schema objects should not include a $schema property
|
|
779
842
|
} else {
|
|
843
|
+
// @ts-ignore
|
|
780
844
|
console.warn(`Invalid target: ${this.target}`);
|
|
781
845
|
}
|
|
782
846
|
|
|
@@ -969,6 +1033,9 @@ function isTransforming(
|
|
|
969
1033
|
case "catch": {
|
|
970
1034
|
return false;
|
|
971
1035
|
}
|
|
1036
|
+
case "function": {
|
|
1037
|
+
return false;
|
|
1038
|
+
}
|
|
972
1039
|
|
|
973
1040
|
default:
|
|
974
1041
|
def satisfies never;
|