@willaimg/yatsp 4.3.6
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 +22 -0
- package/compile.cjs +96 -0
- package/compile.d.cts +1 -0
- package/compile.d.ts +1 -0
- package/compile.js +52 -0
- package/index.cjs +52 -0
- package/index.d.cts +3 -0
- package/index.d.ts +3 -0
- package/index.js +7 -0
- package/locales/index.cjs +36 -0
- package/locales/index.d.cts +1 -0
- package/locales/index.d.ts +1 -0
- package/locales/index.js +1 -0
- package/mini/index.cjs +51 -0
- package/mini/index.d.cts +3 -0
- package/mini/index.d.ts +3 -0
- package/mini/index.js +3 -0
- package/package.json +142 -0
- package/src/compile.ts +56 -0
- package/src/index.ts +7 -0
- package/src/locales/index.ts +1 -0
- package/src/mini/index.ts +3 -0
- package/src/v3/YatspError.ts +340 -0
- package/src/v3/benchmarks/datetime.ts +58 -0
- package/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/src/v3/benchmarks/index.ts +59 -0
- package/src/v3/benchmarks/ipv4.ts +57 -0
- package/src/v3/benchmarks/object.ts +69 -0
- package/src/v3/benchmarks/primitives.ts +162 -0
- package/src/v3/benchmarks/realworld.ts +63 -0
- package/src/v3/benchmarks/string.ts +55 -0
- package/src/v3/benchmarks/union.ts +80 -0
- package/src/v3/errors.ts +13 -0
- package/src/v3/external.ts +6 -0
- package/src/v3/helpers/enumUtil.ts +17 -0
- package/src/v3/helpers/errorUtil.ts +8 -0
- package/src/v3/helpers/parseUtil.ts +176 -0
- package/src/v3/helpers/partialUtil.ts +34 -0
- package/src/v3/helpers/typeAliases.ts +2 -0
- package/src/v3/helpers/util.ts +224 -0
- package/src/v3/index.ts +4 -0
- package/src/v3/locales/en.ts +124 -0
- package/src/v3/standard-schema.ts +113 -0
- package/src/v3/tests/Mocker.ts +54 -0
- package/src/v3/tests/all-errors.test.ts +157 -0
- package/src/v3/tests/anyunknown.test.ts +28 -0
- package/src/v3/tests/array.test.ts +71 -0
- package/src/v3/tests/async-parsing.test.ts +388 -0
- package/src/v3/tests/async-refinements.test.ts +46 -0
- package/src/v3/tests/base.test.ts +29 -0
- package/src/v3/tests/bigint.test.ts +55 -0
- package/src/v3/tests/branded.test.ts +53 -0
- package/src/v3/tests/catch.test.ts +220 -0
- package/src/v3/tests/coerce.test.ts +133 -0
- package/src/v3/tests/complex.test.ts +70 -0
- package/src/v3/tests/custom.test.ts +31 -0
- package/src/v3/tests/date.test.ts +32 -0
- package/src/v3/tests/deepmasking.test.ts +186 -0
- package/src/v3/tests/default.test.ts +112 -0
- package/src/v3/tests/description.test.ts +33 -0
- package/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/src/v3/tests/enum.test.ts +80 -0
- package/src/v3/tests/error.test.ts +586 -0
- package/src/v3/tests/firstparty.test.ts +87 -0
- package/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/src/v3/tests/function.test.ts +261 -0
- package/src/v3/tests/generics.test.ts +48 -0
- package/src/v3/tests/instanceof.test.ts +37 -0
- package/src/v3/tests/intersection.test.ts +128 -0
- package/src/v3/tests/language-server.source.ts +76 -0
- package/src/v3/tests/language-server.test.ts +206 -0
- package/src/v3/tests/literal.test.ts +36 -0
- package/src/v3/tests/map.test.ts +110 -0
- package/src/v3/tests/masking.test.ts +4 -0
- package/src/v3/tests/mocker.test.ts +19 -0
- package/src/v3/tests/nan.test.ts +24 -0
- package/src/v3/tests/nativeEnum.test.ts +87 -0
- package/src/v3/tests/nullable.test.ts +42 -0
- package/src/v3/tests/number.test.ts +176 -0
- package/src/v3/tests/object-augmentation.test.ts +29 -0
- package/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/src/v3/tests/object.test.ts +431 -0
- package/src/v3/tests/optional.test.ts +42 -0
- package/src/v3/tests/parseUtil.test.ts +23 -0
- package/src/v3/tests/parser.test.ts +41 -0
- package/src/v3/tests/partials.test.ts +243 -0
- package/src/v3/tests/pickomit.test.ts +111 -0
- package/src/v3/tests/pipeline.test.ts +29 -0
- package/src/v3/tests/preprocess.test.ts +186 -0
- package/src/v3/tests/primitive.test.ts +440 -0
- package/src/v3/tests/promise.test.ts +90 -0
- package/src/v3/tests/readonly.test.ts +114 -0
- package/src/v3/tests/record.test.ts +171 -0
- package/src/v3/tests/recursive.test.ts +197 -0
- package/src/v3/tests/refine.test.ts +313 -0
- package/src/v3/tests/safeparse.test.ts +27 -0
- package/src/v3/tests/set.test.ts +142 -0
- package/src/v3/tests/standard-schema.test.ts +83 -0
- package/src/v3/tests/string.test.ts +922 -0
- package/src/v3/tests/transformer.test.ts +233 -0
- package/src/v3/tests/tuple.test.ts +90 -0
- package/src/v3/tests/unions.test.ts +57 -0
- package/src/v3/tests/validations.test.ts +133 -0
- package/src/v3/tests/void.test.ts +15 -0
- package/src/v3/types.ts +5162 -0
- package/src/v4/classic/checks.ts +33 -0
- package/src/v4/classic/coerce.ts +27 -0
- package/src/v4/classic/compat.ts +78 -0
- package/src/v4/classic/deep-partial.ts +76 -0
- package/src/v4/classic/errors.ts +97 -0
- package/src/v4/classic/external.ts +57 -0
- package/src/v4/classic/from-json-schema.ts +944 -0
- package/src/v4/classic/in-out.ts +45 -0
- package/src/v4/classic/index.ts +5 -0
- package/src/v4/classic/iso.ts +20 -0
- package/src/v4/classic/parse.ts +88 -0
- package/src/v4/classic/schemas.ts +2994 -0
- package/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/src/v4/classic/tests/apply.test.ts +86 -0
- package/src/v4/classic/tests/array.test.ts +264 -0
- package/src/v4/classic/tests/assignability.test.ts +402 -0
- package/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/src/v4/classic/tests/base.test.ts +7 -0
- package/src/v4/classic/tests/bigint.test.ts +89 -0
- package/src/v4/classic/tests/brand.test.ts +106 -0
- package/src/v4/classic/tests/catch.test.ts +604 -0
- package/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/src/v4/classic/tests/codec-examples.test.ts +572 -0
- package/src/v4/classic/tests/codec.test.ts +704 -0
- package/src/v4/classic/tests/coerce.test.ts +160 -0
- package/src/v4/classic/tests/continuability.test.ts +374 -0
- package/src/v4/classic/tests/credit-card.test.ts +76 -0
- package/src/v4/classic/tests/custom.test.ts +40 -0
- package/src/v4/classic/tests/cyclic-data.test.ts +985 -0
- package/src/v4/classic/tests/date.test.ts +92 -0
- package/src/v4/classic/tests/datetime.test.ts +316 -0
- package/src/v4/classic/tests/deep-partial.test.ts +380 -0
- package/src/v4/classic/tests/default-locale.test.ts +32 -0
- package/src/v4/classic/tests/default.test.ts +455 -0
- package/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
- package/src/v4/classic/tests/description.test.ts +32 -0
- package/src/v4/classic/tests/detached-methods.test.ts +226 -0
- package/src/v4/classic/tests/discriminated-unions.test.ts +942 -0
- package/src/v4/classic/tests/enum.test.ts +305 -0
- package/src/v4/classic/tests/error-utils.test.ts +917 -0
- package/src/v4/classic/tests/error.test.ts +1108 -0
- package/src/v4/classic/tests/file.test.ts +96 -0
- package/src/v4/classic/tests/firstparty.test.ts +179 -0
- package/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
- package/src/v4/classic/tests/from-json-schema.test.ts +1467 -0
- package/src/v4/classic/tests/function.test.ts +391 -0
- package/src/v4/classic/tests/generics.test.ts +72 -0
- package/src/v4/classic/tests/global-config.test.ts +32 -0
- package/src/v4/classic/tests/hash.test.ts +67 -0
- package/src/v4/classic/tests/iban.test.ts +81 -0
- package/src/v4/classic/tests/in-out.test.ts +159 -0
- package/src/v4/classic/tests/index.test.ts +958 -0
- package/src/v4/classic/tests/instance-footprint.test.ts +319 -0
- package/src/v4/classic/tests/instanceof.test.ts +127 -0
- package/src/v4/classic/tests/intersection.test.ts +334 -0
- package/src/v4/classic/tests/issue-schema.test.ts +215 -0
- package/src/v4/classic/tests/jitless-allows-eval.test.ts +39 -0
- package/src/v4/classic/tests/json.test.ts +109 -0
- package/src/v4/classic/tests/lazy.test.ts +262 -0
- package/src/v4/classic/tests/literal.test.ts +128 -0
- package/src/v4/classic/tests/locales_ka.test.ts +29 -0
- package/src/v4/classic/tests/locales_ro.test.ts +24 -0
- package/src/v4/classic/tests/map.test.ts +342 -0
- package/src/v4/classic/tests/nan.test.ts +21 -0
- package/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/src/v4/classic/tests/nonoptional.test.ts +101 -0
- package/src/v4/classic/tests/nullable.test.ts +22 -0
- package/src/v4/classic/tests/number.test.ts +401 -0
- package/src/v4/classic/tests/object.test.ts +1006 -0
- package/src/v4/classic/tests/optin-ladder.test.ts +235 -0
- package/src/v4/classic/tests/optional.test.ts +366 -0
- package/src/v4/classic/tests/partial.test.ts +497 -0
- package/src/v4/classic/tests/pickomit.test.ts +211 -0
- package/src/v4/classic/tests/pipe.test.ts +101 -0
- package/src/v4/classic/tests/prefault.test.ts +144 -0
- package/src/v4/classic/tests/preprocess-types.test.ts +44 -0
- package/src/v4/classic/tests/preprocess.test.ts +351 -0
- package/src/v4/classic/tests/primitive.test.ts +175 -0
- package/src/v4/classic/tests/promise.test.ts +81 -0
- package/src/v4/classic/tests/properties.test.ts +141 -0
- package/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/src/v4/classic/tests/readonly.test.ts +184 -0
- package/src/v4/classic/tests/record.test.ts +885 -0
- package/src/v4/classic/tests/recursive-types.test.ts +707 -0
- package/src/v4/classic/tests/redos.test.ts +68 -0
- package/src/v4/classic/tests/refine.test.ts +693 -0
- package/src/v4/classic/tests/registries.test.ts +243 -0
- package/src/v4/classic/tests/set.test.ts +190 -0
- package/src/v4/classic/tests/standard-schema.test.ts +153 -0
- package/src/v4/classic/tests/string-formats.test.ts +125 -0
- package/src/v4/classic/tests/string.test.ts +1440 -0
- package/src/v4/classic/tests/stringbool.test.ts +124 -0
- package/src/v4/classic/tests/template-literal.test.ts +814 -0
- package/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
- package/src/v4/classic/tests/to-json-schema.test.ts +4733 -0
- package/src/v4/classic/tests/transform.test.ts +378 -0
- package/src/v4/classic/tests/tuple.test.ts +511 -0
- package/src/v4/classic/tests/union.test.ts +310 -0
- package/src/v4/classic/tests/url.test.ts +13 -0
- package/src/v4/classic/tests/validate.test.ts +645 -0
- package/src/v4/classic/tests/validations.test.ts +283 -0
- package/src/v4/classic/tests/void.test.ts +12 -0
- package/src/v4/core/api.ts +1913 -0
- package/src/v4/core/checks.ts +1274 -0
- package/src/v4/core/compile.ts +2315 -0
- package/src/v4/core/core.ts +230 -0
- package/src/v4/core/doc.ts +52 -0
- package/src/v4/core/errors.ts +546 -0
- package/src/v4/core/index.ts +19 -0
- package/src/v4/core/json-schema-generator.ts +131 -0
- package/src/v4/core/json-schema-processors.ts +934 -0
- package/src/v4/core/json-schema.ts +148 -0
- package/src/v4/core/memoizer.ts +331 -0
- package/src/v4/core/parse.ts +309 -0
- package/src/v4/core/regexes.ts +217 -0
- package/src/v4/core/registries.ts +109 -0
- package/src/v4/core/schemas.ts +5295 -0
- package/src/v4/core/standard-schema.ts +159 -0
- package/src/v4/core/tests/cached.test.ts +54 -0
- package/src/v4/core/tests/compile-differential.test.ts +1004 -0
- package/src/v4/core/tests/compile-generative.test.ts +445 -0
- package/src/v4/core/tests/compile-global.test.ts +89 -0
- package/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
- package/src/v4/core/tests/compile-stats.test.ts +34 -0
- package/src/v4/core/tests/compile.test.ts +2040 -0
- package/src/v4/core/tests/email-regex.test.ts +140 -0
- package/src/v4/core/tests/extend.test.ts +59 -0
- package/src/v4/core/tests/index.test.ts +46 -0
- package/src/v4/core/tests/locales/be.test.ts +124 -0
- package/src/v4/core/tests/locales/el.test.ts +214 -0
- package/src/v4/core/tests/locales/en.test.ts +22 -0
- package/src/v4/core/tests/locales/es.test.ts +180 -0
- package/src/v4/core/tests/locales/fr.test.ts +72 -0
- package/src/v4/core/tests/locales/he.test.ts +379 -0
- package/src/v4/core/tests/locales/hr.test.ts +163 -0
- package/src/v4/core/tests/locales/nl.test.ts +46 -0
- package/src/v4/core/tests/locales/parity.test.ts +42 -0
- package/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/src/v4/core/tests/locales/tg.test.ts +85 -0
- package/src/v4/core/tests/locales/tk.test.ts +69 -0
- package/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/src/v4/core/tests/locales/uz.test.ts +105 -0
- package/src/v4/core/tests/polyfill-collision.test.ts +46 -0
- package/src/v4/core/tests/record-constructor.test.ts +125 -0
- package/src/v4/core/tests/recursive-tuples.test.ts +45 -0
- package/src/v4/core/tests/treeshake.test.ts +51 -0
- package/src/v4/core/tests/url-no-canparse.test.ts +133 -0
- package/src/v4/core/to-json-schema.ts +857 -0
- package/src/v4/core/util.ts +1284 -0
- package/src/v4/core/versions.ts +5 -0
- package/src/v4/core/visit.ts +193 -0
- package/src/v4/core/zsf.ts +323 -0
- package/src/v4/index.ts +4 -0
- package/src/v4/locales/ar.ts +120 -0
- package/src/v4/locales/az.ts +116 -0
- package/src/v4/locales/be.ts +188 -0
- package/src/v4/locales/bg.ts +133 -0
- package/src/v4/locales/bn.ts +123 -0
- package/src/v4/locales/ca.ts +121 -0
- package/src/v4/locales/ckb.ts +140 -0
- package/src/v4/locales/cs.ts +123 -0
- package/src/v4/locales/da.ts +128 -0
- package/src/v4/locales/de.ts +121 -0
- package/src/v4/locales/el.ts +124 -0
- package/src/v4/locales/en.ts +136 -0
- package/src/v4/locales/eo.ts +123 -0
- package/src/v4/locales/es.ts +145 -0
- package/src/v4/locales/fa.ts +131 -0
- package/src/v4/locales/fi.ts +126 -0
- package/src/v4/locales/fr-CA.ts +121 -0
- package/src/v4/locales/fr.ts +139 -0
- package/src/v4/locales/gu.ts +123 -0
- package/src/v4/locales/he.ts +253 -0
- package/src/v4/locales/hi.ts +126 -0
- package/src/v4/locales/hr.ts +135 -0
- package/src/v4/locales/hu.ts +122 -0
- package/src/v4/locales/hy.ts +175 -0
- package/src/v4/locales/id.ts +120 -0
- package/src/v4/locales/index.ts +63 -0
- package/src/v4/locales/is.ts +124 -0
- package/src/v4/locales/it.ts +121 -0
- package/src/v4/locales/ja.ts +119 -0
- package/src/v4/locales/ka.ts +128 -0
- package/src/v4/locales/kh.ts +7 -0
- package/src/v4/locales/km.ts +124 -0
- package/src/v4/locales/kn.ts +126 -0
- package/src/v4/locales/ko.ts +126 -0
- package/src/v4/locales/lt.ts +243 -0
- package/src/v4/locales/mk.ts +123 -0
- package/src/v4/locales/ms.ts +120 -0
- package/src/v4/locales/ne.ts +128 -0
- package/src/v4/locales/nl.ts +126 -0
- package/src/v4/locales/nn.ts +121 -0
- package/src/v4/locales/no.ts +121 -0
- package/src/v4/locales/ota.ts +122 -0
- package/src/v4/locales/pl.ts +123 -0
- package/src/v4/locales/ps.ts +131 -0
- package/src/v4/locales/pt-BR.ts +161 -0
- package/src/v4/locales/pt.ts +159 -0
- package/src/v4/locales/ro.ts +132 -0
- package/src/v4/locales/ru.ts +188 -0
- package/src/v4/locales/sk.ts +123 -0
- package/src/v4/locales/sl.ts +123 -0
- package/src/v4/locales/sv.ts +124 -0
- package/src/v4/locales/ta.ts +123 -0
- package/src/v4/locales/tg.ts +135 -0
- package/src/v4/locales/th.ts +124 -0
- package/src/v4/locales/tk.ts +113 -0
- package/src/v4/locales/tr.ts +116 -0
- package/src/v4/locales/ua.ts +7 -0
- package/src/v4/locales/uk.ts +122 -0
- package/src/v4/locales/ur.ts +124 -0
- package/src/v4/locales/uz.ts +120 -0
- package/src/v4/locales/vi.ts +122 -0
- package/src/v4/locales/yo.ts +129 -0
- package/src/v4/locales/zh-CN.ts +121 -0
- package/src/v4/locales/zh-TW.ts +120 -0
- package/src/v4/mini/checks.ts +33 -0
- package/src/v4/mini/coerce.ts +27 -0
- package/src/v4/mini/deep-partial.ts +73 -0
- package/src/v4/mini/external.ts +52 -0
- package/src/v4/mini/in-out.ts +45 -0
- package/src/v4/mini/index.ts +3 -0
- package/src/v4/mini/iso.ts +66 -0
- package/src/v4/mini/parse.ts +16 -0
- package/src/v4/mini/schemas.ts +2093 -0
- package/src/v4/mini/tests/apply.test.ts +57 -0
- package/src/v4/mini/tests/assignability.test.ts +190 -0
- package/src/v4/mini/tests/brand.test.ts +94 -0
- package/src/v4/mini/tests/checks.test.ts +158 -0
- package/src/v4/mini/tests/codec.test.ts +582 -0
- package/src/v4/mini/tests/computed.test.ts +30 -0
- package/src/v4/mini/tests/cyclic-data.test.ts +84 -0
- package/src/v4/mini/tests/deep-partial.test.ts +54 -0
- package/src/v4/mini/tests/error.test.ts +41 -0
- package/src/v4/mini/tests/functions.test.ts +14 -0
- package/src/v4/mini/tests/index.test.ts +1148 -0
- package/src/v4/mini/tests/number.test.ts +109 -0
- package/src/v4/mini/tests/object.test.ts +292 -0
- package/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/src/v4/mini/tests/recursive-types.test.ts +341 -0
- package/src/v4/mini/tests/standard-schema.test.ts +50 -0
- package/src/v4/mini/tests/string.test.ts +396 -0
- package/src/v4-mini/index.ts +3 -0
- package/v3/YatspError.cjs +167 -0
- package/v3/YatspError.d.cts +164 -0
- package/v3/YatspError.d.ts +164 -0
- package/v3/YatspError.js +143 -0
- package/v3/errors.cjs +36 -0
- package/v3/errors.d.cts +5 -0
- package/v3/errors.d.ts +5 -0
- package/v3/errors.js +9 -0
- package/v3/external.cjs +41 -0
- package/v3/external.d.cts +6 -0
- package/v3/external.d.ts +6 -0
- package/v3/external.js +6 -0
- package/v3/helpers/enumUtil.cjs +21 -0
- package/v3/helpers/enumUtil.d.cts +8 -0
- package/v3/helpers/enumUtil.d.ts +8 -0
- package/v3/helpers/enumUtil.js +1 -0
- package/v3/helpers/errorUtil.cjs +28 -0
- package/v3/helpers/errorUtil.d.cts +9 -0
- package/v3/helpers/errorUtil.d.ts +9 -0
- package/v3/helpers/errorUtil.js +6 -0
- package/v3/helpers/parseUtil.cjs +143 -0
- package/v3/helpers/parseUtil.d.cts +78 -0
- package/v3/helpers/parseUtil.d.ts +78 -0
- package/v3/helpers/parseUtil.js +109 -0
- package/v3/helpers/partialUtil.cjs +21 -0
- package/v3/helpers/partialUtil.d.cts +8 -0
- package/v3/helpers/partialUtil.d.ts +8 -0
- package/v3/helpers/partialUtil.js +1 -0
- package/v3/helpers/typeAliases.cjs +21 -0
- package/v3/helpers/typeAliases.d.cts +2 -0
- package/v3/helpers/typeAliases.d.ts +2 -0
- package/v3/helpers/typeAliases.js +1 -0
- package/v3/helpers/util.cjs +156 -0
- package/v3/helpers/util.d.cts +85 -0
- package/v3/helpers/util.d.ts +85 -0
- package/v3/helpers/util.js +133 -0
- package/v3/index.cjs +52 -0
- package/v3/index.d.cts +4 -0
- package/v3/index.d.ts +4 -0
- package/v3/index.js +4 -0
- package/v3/locales/en.cjs +112 -0
- package/v3/locales/en.d.cts +3 -0
- package/v3/locales/en.d.ts +3 -0
- package/v3/locales/en.js +109 -0
- package/v3/standard-schema.cjs +21 -0
- package/v3/standard-schema.d.cts +102 -0
- package/v3/standard-schema.d.ts +102 -0
- package/v3/standard-schema.js +1 -0
- package/v3/types.cjs +3798 -0
- package/v3/types.d.cts +1034 -0
- package/v3/types.d.ts +1034 -0
- package/v3/types.js +3697 -0
- package/v4/classic/checks.cjs +53 -0
- package/v4/classic/checks.d.cts +1 -0
- package/v4/classic/checks.d.ts +1 -0
- package/v4/classic/checks.js +1 -0
- package/v4/classic/coerce.cjs +66 -0
- package/v4/classic/coerce.d.cts +17 -0
- package/v4/classic/coerce.d.ts +17 -0
- package/v4/classic/coerce.js +17 -0
- package/v4/classic/compat.cjs +80 -0
- package/v4/classic/compat.d.cts +48 -0
- package/v4/classic/compat.d.ts +48 -0
- package/v4/classic/compat.js +31 -0
- package/v4/classic/deep-partial.cjs +58 -0
- package/v4/classic/deep-partial.d.cts +14 -0
- package/v4/classic/deep-partial.d.ts +14 -0
- package/v4/classic/deep-partial.js +13 -0
- package/v4/classic/errors.cjs +102 -0
- package/v4/classic/errors.d.cts +29 -0
- package/v4/classic/errors.d.ts +29 -0
- package/v4/classic/errors.js +57 -0
- package/v4/classic/external.cjs +97 -0
- package/v4/classic/external.d.cts +19 -0
- package/v4/classic/external.d.ts +19 -0
- package/v4/classic/external.js +17 -0
- package/v4/classic/from-json-schema.cjs +926 -0
- package/v4/classic/from-json-schema.d.cts +12 -0
- package/v4/classic/from-json-schema.d.ts +12 -0
- package/v4/classic/from-json-schema.js +881 -0
- package/v4/classic/in-out.cjs +82 -0
- package/v4/classic/in-out.d.cts +8 -0
- package/v4/classic/in-out.d.ts +8 -0
- package/v4/classic/in-out.js +36 -0
- package/v4/classic/index.cjs +52 -0
- package/v4/classic/index.d.cts +3 -0
- package/v4/classic/index.d.ts +3 -0
- package/v4/classic/index.js +4 -0
- package/v4/classic/iso.cjs +68 -0
- package/v4/classic/iso.d.cts +7 -0
- package/v4/classic/iso.d.ts +7 -0
- package/v4/classic/iso.js +15 -0
- package/v4/classic/parse.cjs +63 -0
- package/v4/classic/parse.d.cts +44 -0
- package/v4/classic/parse.d.ts +44 -0
- package/v4/classic/parse.js +16 -0
- package/v4/classic/schemas.cjs +1676 -0
- package/v4/classic/schemas.d.cts +816 -0
- package/v4/classic/schemas.d.ts +816 -0
- package/v4/classic/schemas.js +1535 -0
- package/v4/core/api.cjs +1269 -0
- package/v4/core/api.d.cts +335 -0
- package/v4/core/api.d.ts +335 -0
- package/v4/core/api.js +1107 -0
- package/v4/core/checks.cjs +561 -0
- package/v4/core/checks.d.cts +294 -0
- package/v4/core/checks.d.ts +294 -0
- package/v4/core/checks.js +516 -0
- package/v4/core/compile.cjs +1908 -0
- package/v4/core/compile.d.cts +65 -0
- package/v4/core/compile.d.ts +65 -0
- package/v4/core/compile.js +1858 -0
- package/v4/core/core.cjs +167 -0
- package/v4/core/core.d.cts +82 -0
- package/v4/core/core.d.ts +82 -0
- package/v4/core/core.js +141 -0
- package/v4/core/doc.cjs +61 -0
- package/v4/core/doc.d.cts +16 -0
- package/v4/core/doc.d.ts +16 -0
- package/v4/core/doc.js +38 -0
- package/v4/core/errors.cjs +317 -0
- package/v4/core/errors.d.cts +225 -0
- package/v4/core/errors.d.ts +225 -0
- package/v4/core/errors.js +267 -0
- package/v4/core/index.cjs +70 -0
- package/v4/core/index.d.cts +19 -0
- package/v4/core/index.d.ts +19 -0
- package/v4/core/index.js +19 -0
- package/v4/core/json-schema-generator.cjs +122 -0
- package/v4/core/json-schema-generator.d.cts +65 -0
- package/v4/core/json-schema-generator.d.ts +65 -0
- package/v4/core/json-schema-generator.js +99 -0
- package/v4/core/json-schema-processors.cjs +929 -0
- package/v4/core/json-schema-processors.d.cts +65 -0
- package/v4/core/json-schema-processors.d.ts +65 -0
- package/v4/core/json-schema-processors.js +843 -0
- package/v4/core/json-schema.cjs +21 -0
- package/v4/core/json-schema.d.cts +89 -0
- package/v4/core/json-schema.d.ts +89 -0
- package/v4/core/json-schema.js +1 -0
- package/v4/core/memoizer.cjs +360 -0
- package/v4/core/memoizer.d.cts +15 -0
- package/v4/core/memoizer.d.ts +15 -0
- package/v4/core/memoizer.js +311 -0
- package/v4/core/parse.cjs +233 -0
- package/v4/core/parse.d.cts +52 -0
- package/v4/core/parse.d.ts +52 -0
- package/v4/core/parse.js +175 -0
- package/v4/core/regexes.cjs +209 -0
- package/v4/core/regexes.d.cts +90 -0
- package/v4/core/regexes.d.ts +90 -0
- package/v4/core/regexes.js +156 -0
- package/v4/core/registries.cjs +76 -0
- package/v4/core/registries.d.cts +35 -0
- package/v4/core/registries.d.ts +35 -0
- package/v4/core/registries.js +52 -0
- package/v4/core/schemas.cjs +2669 -0
- package/v4/core/schemas.d.cts +1273 -0
- package/v4/core/schemas.d.ts +1273 -0
- package/v4/core/schemas.js +2606 -0
- package/v4/core/standard-schema.cjs +21 -0
- package/v4/core/standard-schema.d.cts +126 -0
- package/v4/core/standard-schema.d.ts +126 -0
- package/v4/core/standard-schema.js +1 -0
- package/v4/core/to-json-schema.cjs +681 -0
- package/v4/core/to-json-schema.d.cts +154 -0
- package/v4/core/to-json-schema.d.ts +154 -0
- package/v4/core/to-json-schema.js +651 -0
- package/v4/core/util.cjs +949 -0
- package/v4/core/util.d.cts +278 -0
- package/v4/core/util.d.ts +278 -0
- package/v4/core/util.js +859 -0
- package/v4/core/versions.cjs +27 -0
- package/v4/core/versions.d.cts +5 -0
- package/v4/core/versions.d.ts +5 -0
- package/v4/core/versions.js +5 -0
- package/v4/core/visit.cjs +214 -0
- package/v4/core/visit.d.cts +30 -0
- package/v4/core/visit.d.ts +30 -0
- package/v4/core/visit.js +169 -0
- package/v4/index.cjs +51 -0
- package/v4/index.d.cts +3 -0
- package/v4/index.d.ts +3 -0
- package/v4/index.js +4 -0
- package/v4/locales/ar.cjs +138 -0
- package/v4/locales/ar.d.cts +5 -0
- package/v4/locales/ar.d.ts +4 -0
- package/v4/locales/ar.js +111 -0
- package/v4/locales/az.cjs +137 -0
- package/v4/locales/az.d.cts +5 -0
- package/v4/locales/az.d.ts +4 -0
- package/v4/locales/az.js +110 -0
- package/v4/locales/be.cjs +195 -0
- package/v4/locales/be.d.cts +5 -0
- package/v4/locales/be.d.ts +4 -0
- package/v4/locales/be.js +168 -0
- package/v4/locales/bg.cjs +152 -0
- package/v4/locales/bg.d.cts +5 -0
- package/v4/locales/bg.d.ts +4 -0
- package/v4/locales/bg.js +125 -0
- package/v4/locales/bn.cjs +140 -0
- package/v4/locales/bn.d.cts +5 -0
- package/v4/locales/bn.d.ts +4 -0
- package/v4/locales/bn.js +113 -0
- package/v4/locales/ca.cjs +139 -0
- package/v4/locales/ca.d.cts +5 -0
- package/v4/locales/ca.d.ts +4 -0
- package/v4/locales/ca.js +112 -0
- package/v4/locales/ckb.cjs +160 -0
- package/v4/locales/ckb.d.cts +5 -0
- package/v4/locales/ckb.d.ts +4 -0
- package/v4/locales/ckb.js +133 -0
- package/v4/locales/cs.cjs +143 -0
- package/v4/locales/cs.d.cts +5 -0
- package/v4/locales/cs.d.ts +4 -0
- package/v4/locales/cs.js +116 -0
- package/v4/locales/da.cjs +147 -0
- package/v4/locales/da.d.cts +5 -0
- package/v4/locales/da.d.ts +4 -0
- package/v4/locales/da.js +120 -0
- package/v4/locales/de.cjs +140 -0
- package/v4/locales/de.d.cts +5 -0
- package/v4/locales/de.d.ts +4 -0
- package/v4/locales/de.js +113 -0
- package/v4/locales/el.cjs +139 -0
- package/v4/locales/el.d.cts +5 -0
- package/v4/locales/el.d.ts +4 -0
- package/v4/locales/el.js +112 -0
- package/v4/locales/en.cjs +152 -0
- package/v4/locales/en.d.cts +5 -0
- package/v4/locales/en.d.ts +4 -0
- package/v4/locales/en.js +125 -0
- package/v4/locales/eo.cjs +141 -0
- package/v4/locales/eo.d.cts +5 -0
- package/v4/locales/eo.d.ts +4 -0
- package/v4/locales/eo.js +114 -0
- package/v4/locales/es.cjs +163 -0
- package/v4/locales/es.d.cts +5 -0
- package/v4/locales/es.d.ts +4 -0
- package/v4/locales/es.js +136 -0
- package/v4/locales/fa.cjs +146 -0
- package/v4/locales/fa.d.cts +5 -0
- package/v4/locales/fa.d.ts +4 -0
- package/v4/locales/fa.js +119 -0
- package/v4/locales/fi.cjs +144 -0
- package/v4/locales/fi.d.cts +5 -0
- package/v4/locales/fi.d.ts +4 -0
- package/v4/locales/fi.js +117 -0
- package/v4/locales/fr-CA.cjs +139 -0
- package/v4/locales/fr-CA.d.cts +5 -0
- package/v4/locales/fr-CA.d.ts +4 -0
- package/v4/locales/fr-CA.js +112 -0
- package/v4/locales/fr.cjs +156 -0
- package/v4/locales/fr.d.cts +5 -0
- package/v4/locales/fr.d.ts +4 -0
- package/v4/locales/fr.js +129 -0
- package/v4/locales/gu.cjs +140 -0
- package/v4/locales/gu.d.cts +5 -0
- package/v4/locales/gu.d.ts +4 -0
- package/v4/locales/gu.js +113 -0
- package/v4/locales/he.cjs +248 -0
- package/v4/locales/he.d.cts +5 -0
- package/v4/locales/he.d.ts +4 -0
- package/v4/locales/he.js +221 -0
- package/v4/locales/hi.cjs +138 -0
- package/v4/locales/hi.d.cts +5 -0
- package/v4/locales/hi.d.ts +4 -0
- package/v4/locales/hi.js +111 -0
- package/v4/locales/hr.cjs +153 -0
- package/v4/locales/hr.d.cts +5 -0
- package/v4/locales/hr.d.ts +4 -0
- package/v4/locales/hr.js +126 -0
- package/v4/locales/hu.cjs +140 -0
- package/v4/locales/hu.d.cts +5 -0
- package/v4/locales/hu.d.ts +4 -0
- package/v4/locales/hu.js +113 -0
- package/v4/locales/hy.cjs +185 -0
- package/v4/locales/hy.d.cts +5 -0
- package/v4/locales/hy.d.ts +4 -0
- package/v4/locales/hy.js +158 -0
- package/v4/locales/id.cjs +138 -0
- package/v4/locales/id.d.cts +5 -0
- package/v4/locales/id.d.ts +4 -0
- package/v4/locales/id.js +111 -0
- package/v4/locales/index.cjs +152 -0
- package/v4/locales/index.d.cts +63 -0
- package/v4/locales/index.d.ts +63 -0
- package/v4/locales/index.js +63 -0
- package/v4/locales/is.cjs +141 -0
- package/v4/locales/is.d.cts +5 -0
- package/v4/locales/is.d.ts +4 -0
- package/v4/locales/is.js +114 -0
- package/v4/locales/it.cjs +140 -0
- package/v4/locales/it.d.cts +5 -0
- package/v4/locales/it.d.ts +4 -0
- package/v4/locales/it.js +113 -0
- package/v4/locales/ja.cjs +139 -0
- package/v4/locales/ja.d.cts +5 -0
- package/v4/locales/ja.d.ts +4 -0
- package/v4/locales/ja.js +112 -0
- package/v4/locales/ka.cjs +144 -0
- package/v4/locales/ka.d.cts +5 -0
- package/v4/locales/ka.d.ts +4 -0
- package/v4/locales/ka.js +117 -0
- package/v4/locales/kh.cjs +12 -0
- package/v4/locales/kh.d.cts +5 -0
- package/v4/locales/kh.d.ts +5 -0
- package/v4/locales/kh.js +5 -0
- package/v4/locales/km.cjs +142 -0
- package/v4/locales/km.d.cts +5 -0
- package/v4/locales/km.d.ts +4 -0
- package/v4/locales/km.js +115 -0
- package/v4/locales/kn.cjs +143 -0
- package/v4/locales/kn.d.cts +5 -0
- package/v4/locales/kn.d.ts +4 -0
- package/v4/locales/kn.js +116 -0
- package/v4/locales/ko.cjs +143 -0
- package/v4/locales/ko.d.cts +5 -0
- package/v4/locales/ko.d.ts +4 -0
- package/v4/locales/ko.js +116 -0
- package/v4/locales/lt.cjs +234 -0
- package/v4/locales/lt.d.cts +5 -0
- package/v4/locales/lt.d.ts +4 -0
- package/v4/locales/lt.js +207 -0
- package/v4/locales/mk.cjs +141 -0
- package/v4/locales/mk.d.cts +5 -0
- package/v4/locales/mk.d.ts +4 -0
- package/v4/locales/mk.js +114 -0
- package/v4/locales/ms.cjs +139 -0
- package/v4/locales/ms.d.cts +5 -0
- package/v4/locales/ms.d.ts +4 -0
- package/v4/locales/ms.js +112 -0
- package/v4/locales/ne.cjs +138 -0
- package/v4/locales/ne.d.cts +5 -0
- package/v4/locales/ne.d.ts +4 -0
- package/v4/locales/ne.js +111 -0
- package/v4/locales/nl.cjs +142 -0
- package/v4/locales/nl.d.cts +5 -0
- package/v4/locales/nl.d.ts +4 -0
- package/v4/locales/nl.js +115 -0
- package/v4/locales/nn.cjs +140 -0
- package/v4/locales/nn.d.cts +5 -0
- package/v4/locales/nn.d.ts +4 -0
- package/v4/locales/nn.js +113 -0
- package/v4/locales/no.cjs +140 -0
- package/v4/locales/no.d.cts +5 -0
- package/v4/locales/no.d.ts +4 -0
- package/v4/locales/no.js +113 -0
- package/v4/locales/ota.cjs +141 -0
- package/v4/locales/ota.d.cts +5 -0
- package/v4/locales/ota.d.ts +4 -0
- package/v4/locales/ota.js +114 -0
- package/v4/locales/pl.cjs +141 -0
- package/v4/locales/pl.d.cts +5 -0
- package/v4/locales/pl.d.ts +4 -0
- package/v4/locales/pl.js +114 -0
- package/v4/locales/ps.cjs +146 -0
- package/v4/locales/ps.d.cts +5 -0
- package/v4/locales/ps.d.ts +4 -0
- package/v4/locales/ps.js +119 -0
- package/v4/locales/pt-BR.cjs +170 -0
- package/v4/locales/pt-BR.d.cts +5 -0
- package/v4/locales/pt-BR.d.ts +4 -0
- package/v4/locales/pt-BR.js +143 -0
- package/v4/locales/pt.cjs +169 -0
- package/v4/locales/pt.d.cts +5 -0
- package/v4/locales/pt.d.ts +4 -0
- package/v4/locales/pt.js +142 -0
- package/v4/locales/ro.cjs +149 -0
- package/v4/locales/ro.d.cts +5 -0
- package/v4/locales/ro.d.ts +4 -0
- package/v4/locales/ro.js +122 -0
- package/v4/locales/ru.cjs +195 -0
- package/v4/locales/ru.d.cts +5 -0
- package/v4/locales/ru.d.ts +4 -0
- package/v4/locales/ru.js +168 -0
- package/v4/locales/sk.cjs +143 -0
- package/v4/locales/sk.d.cts +5 -0
- package/v4/locales/sk.d.ts +4 -0
- package/v4/locales/sk.js +116 -0
- package/v4/locales/sl.cjs +141 -0
- package/v4/locales/sl.d.cts +5 -0
- package/v4/locales/sl.d.ts +4 -0
- package/v4/locales/sl.js +114 -0
- package/v4/locales/sv.cjs +142 -0
- package/v4/locales/sv.d.cts +5 -0
- package/v4/locales/sv.d.ts +4 -0
- package/v4/locales/sv.js +115 -0
- package/v4/locales/ta.cjs +142 -0
- package/v4/locales/ta.d.cts +5 -0
- package/v4/locales/ta.d.ts +4 -0
- package/v4/locales/ta.js +115 -0
- package/v4/locales/tg.cjs +144 -0
- package/v4/locales/tg.d.cts +5 -0
- package/v4/locales/tg.d.ts +4 -0
- package/v4/locales/tg.js +117 -0
- package/v4/locales/th.cjs +142 -0
- package/v4/locales/th.d.cts +5 -0
- package/v4/locales/th.d.ts +4 -0
- package/v4/locales/th.js +115 -0
- package/v4/locales/tk.cjs +134 -0
- package/v4/locales/tk.d.cts +5 -0
- package/v4/locales/tk.d.ts +4 -0
- package/v4/locales/tk.js +107 -0
- package/v4/locales/tr.cjs +137 -0
- package/v4/locales/tr.d.cts +5 -0
- package/v4/locales/tr.d.ts +4 -0
- package/v4/locales/tr.js +110 -0
- package/v4/locales/ua.cjs +12 -0
- package/v4/locales/ua.d.cts +5 -0
- package/v4/locales/ua.d.ts +5 -0
- package/v4/locales/ua.js +5 -0
- package/v4/locales/uk.cjs +140 -0
- package/v4/locales/uk.d.cts +5 -0
- package/v4/locales/uk.d.ts +4 -0
- package/v4/locales/uk.js +113 -0
- package/v4/locales/ur.cjs +142 -0
- package/v4/locales/ur.d.cts +5 -0
- package/v4/locales/ur.d.ts +4 -0
- package/v4/locales/ur.js +115 -0
- package/v4/locales/uz.cjs +140 -0
- package/v4/locales/uz.d.cts +5 -0
- package/v4/locales/uz.d.ts +4 -0
- package/v4/locales/uz.js +113 -0
- package/v4/locales/vi.cjs +140 -0
- package/v4/locales/vi.d.cts +5 -0
- package/v4/locales/vi.d.ts +4 -0
- package/v4/locales/vi.js +113 -0
- package/v4/locales/yo.cjs +139 -0
- package/v4/locales/yo.d.cts +5 -0
- package/v4/locales/yo.d.ts +4 -0
- package/v4/locales/yo.js +112 -0
- package/v4/locales/zh-CN.cjs +141 -0
- package/v4/locales/zh-CN.d.cts +5 -0
- package/v4/locales/zh-CN.d.ts +4 -0
- package/v4/locales/zh-CN.js +114 -0
- package/v4/locales/zh-TW.cjs +139 -0
- package/v4/locales/zh-TW.d.cts +5 -0
- package/v4/locales/zh-TW.d.ts +4 -0
- package/v4/locales/zh-TW.js +112 -0
- package/v4/mini/checks.cjs +54 -0
- package/v4/mini/checks.d.cts +1 -0
- package/v4/mini/checks.d.ts +1 -0
- package/v4/mini/checks.js +1 -0
- package/v4/mini/coerce.cjs +71 -0
- package/v4/mini/coerce.d.cts +7 -0
- package/v4/mini/coerce.d.ts +7 -0
- package/v4/mini/coerce.js +22 -0
- package/v4/mini/deep-partial.cjs +58 -0
- package/v4/mini/deep-partial.d.cts +14 -0
- package/v4/mini/deep-partial.d.ts +14 -0
- package/v4/mini/deep-partial.js +13 -0
- package/v4/mini/external.cjs +95 -0
- package/v4/mini/external.d.cts +16 -0
- package/v4/mini/external.d.ts +16 -0
- package/v4/mini/external.js +16 -0
- package/v4/mini/in-out.cjs +82 -0
- package/v4/mini/in-out.d.cts +8 -0
- package/v4/mini/in-out.d.ts +8 -0
- package/v4/mini/in-out.js +36 -0
- package/v4/mini/index.cjs +51 -0
- package/v4/mini/index.d.cts +3 -0
- package/v4/mini/index.d.ts +3 -0
- package/v4/mini/index.js +3 -0
- package/v4/mini/iso.cjs +83 -0
- package/v4/mini/iso.d.cts +22 -0
- package/v4/mini/iso.d.ts +22 -0
- package/v4/mini/iso.js +34 -0
- package/v4/mini/parse.cjs +37 -0
- package/v4/mini/parse.d.cts +1 -0
- package/v4/mini/parse.d.ts +1 -0
- package/v4/mini/parse.js +1 -0
- package/v4/mini/schemas.cjs +1149 -0
- package/v4/mini/schemas.d.cts +480 -0
- package/v4/mini/schemas.d.ts +480 -0
- package/v4/mini/schemas.js +1004 -0
- package/v4-mini/index.cjs +51 -0
- package/v4-mini/index.d.cts +3 -0
- package/v4-mini/index.d.ts +3 -0
- package/v4-mini/index.js +3 -0
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
import type { $YatspCheck, $YatspStringFormats } from "./checks.js";
|
|
2
|
+
import { $constructor } from "./core.js";
|
|
3
|
+
import type { $YatspType } from "./schemas.js";
|
|
4
|
+
import type { StandardSchemaV1 } from "./standard-schema.js";
|
|
5
|
+
import * as util from "./util.js";
|
|
6
|
+
|
|
7
|
+
///////////////////////////
|
|
8
|
+
//// base type ////
|
|
9
|
+
///////////////////////////
|
|
10
|
+
export interface $YatspIssueBase {
|
|
11
|
+
readonly code?: string;
|
|
12
|
+
readonly input?: unknown;
|
|
13
|
+
readonly path: PropertyKey[];
|
|
14
|
+
readonly message: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
////////////////////////////////
|
|
18
|
+
//// issue subtypes ////
|
|
19
|
+
////////////////////////////////
|
|
20
|
+
export type $YatspInvalidTypeExpected =
|
|
21
|
+
| "string"
|
|
22
|
+
| "number"
|
|
23
|
+
| "int"
|
|
24
|
+
| "boolean"
|
|
25
|
+
| "bigint"
|
|
26
|
+
| "symbol"
|
|
27
|
+
| "undefined"
|
|
28
|
+
| "null"
|
|
29
|
+
| "never"
|
|
30
|
+
| "void"
|
|
31
|
+
| "date"
|
|
32
|
+
| "array"
|
|
33
|
+
| "object"
|
|
34
|
+
| "tuple"
|
|
35
|
+
| "record"
|
|
36
|
+
| "map"
|
|
37
|
+
| "set"
|
|
38
|
+
| "file"
|
|
39
|
+
| "nonoptional"
|
|
40
|
+
| "nan"
|
|
41
|
+
| "function"
|
|
42
|
+
| (string & {}); // class names for instanceof
|
|
43
|
+
|
|
44
|
+
export interface $YatspIssueInvalidType<Input = unknown> extends $YatspIssueBase {
|
|
45
|
+
readonly code: "invalid_type";
|
|
46
|
+
readonly expected: $YatspInvalidTypeExpected;
|
|
47
|
+
readonly input?: Input;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface $YatspIssueTooBig<Input = unknown> extends $YatspIssueBase {
|
|
51
|
+
readonly code: "too_big";
|
|
52
|
+
readonly origin: "number" | "int" | "bigint" | "date" | "string" | "array" | "set" | "file" | (string & {});
|
|
53
|
+
readonly maximum: number | bigint;
|
|
54
|
+
readonly inclusive?: boolean;
|
|
55
|
+
readonly exact?: boolean;
|
|
56
|
+
readonly input?: Input;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface $YatspIssueTooSmall<Input = unknown> extends $YatspIssueBase {
|
|
60
|
+
readonly code: "too_small";
|
|
61
|
+
readonly origin: "number" | "int" | "bigint" | "date" | "string" | "array" | "set" | "file" | (string & {});
|
|
62
|
+
readonly minimum: number | bigint;
|
|
63
|
+
/** True if the allowable range includes the minimum */
|
|
64
|
+
readonly inclusive?: boolean;
|
|
65
|
+
/** True if the allowed value is fixed (e.g.` z.length(5)`), not a range (`z.minLength(5)`) */
|
|
66
|
+
readonly exact?: boolean;
|
|
67
|
+
readonly input?: Input;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface $YatspIssueInvalidStringFormat extends $YatspIssueBase {
|
|
71
|
+
readonly code: "invalid_format";
|
|
72
|
+
readonly format: $YatspStringFormats | (string & {});
|
|
73
|
+
readonly pattern?: string;
|
|
74
|
+
readonly input?: string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface $YatspIssueNotMultipleOf<Input extends number | bigint = number | bigint> extends $YatspIssueBase {
|
|
78
|
+
readonly code: "not_multiple_of";
|
|
79
|
+
readonly divisor: number;
|
|
80
|
+
readonly input?: Input;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface $YatspIssueUnrecognizedKeys extends $YatspIssueBase {
|
|
84
|
+
readonly code: "unrecognized_keys";
|
|
85
|
+
readonly keys: string[];
|
|
86
|
+
readonly input?: Record<string, unknown>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
interface $YatspIssueInvalidUnionNoMatch extends $YatspIssueBase {
|
|
90
|
+
readonly code: "invalid_union";
|
|
91
|
+
readonly errors: $YatspIssue[][];
|
|
92
|
+
readonly input?: unknown;
|
|
93
|
+
readonly discriminator?: string | undefined;
|
|
94
|
+
readonly options?: util.Primitive[];
|
|
95
|
+
readonly inclusive?: true;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
interface $YatspIssueInvalidUnionMultipleMatch extends $YatspIssueBase {
|
|
99
|
+
readonly code: "invalid_union";
|
|
100
|
+
readonly errors: [];
|
|
101
|
+
readonly input?: unknown;
|
|
102
|
+
readonly discriminator?: string | undefined;
|
|
103
|
+
readonly inclusive: false;
|
|
104
|
+
/** Indices of the options that matched */
|
|
105
|
+
readonly matches: number[];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export type $YatspIssueInvalidUnion = $YatspIssueInvalidUnionNoMatch | $YatspIssueInvalidUnionMultipleMatch;
|
|
109
|
+
|
|
110
|
+
export interface $YatspIssueInvalidKey<Input = unknown> extends $YatspIssueBase {
|
|
111
|
+
readonly code: "invalid_key";
|
|
112
|
+
readonly origin: "map" | "record";
|
|
113
|
+
readonly issues: $YatspIssue[];
|
|
114
|
+
readonly input?: Input;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface $YatspIssueInvalidElement<Input = unknown> extends $YatspIssueBase {
|
|
118
|
+
readonly code: "invalid_element";
|
|
119
|
+
readonly origin: "map" | "set";
|
|
120
|
+
readonly key: unknown;
|
|
121
|
+
readonly issues: $YatspIssue[];
|
|
122
|
+
readonly input?: Input;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface $YatspIssueInvalidValue<Input = unknown> extends $YatspIssueBase {
|
|
126
|
+
readonly code: "invalid_value";
|
|
127
|
+
readonly values: util.Primitive[];
|
|
128
|
+
readonly input?: Input;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export interface $YatspIssueCustom extends $YatspIssueBase {
|
|
132
|
+
readonly code: "custom";
|
|
133
|
+
readonly params?: Record<string, any> | undefined;
|
|
134
|
+
readonly input?: unknown;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
////////////////////////////////////////////
|
|
138
|
+
//// first-party string formats ////
|
|
139
|
+
////////////////////////////////////////////
|
|
140
|
+
|
|
141
|
+
export interface $YatspIssueStringCommonFormats extends $YatspIssueInvalidStringFormat {
|
|
142
|
+
format: Exclude<$YatspStringFormats, "regex" | "jwt" | "starts_with" | "ends_with" | "includes">;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export interface $YatspIssueStringInvalidRegex extends $YatspIssueInvalidStringFormat {
|
|
146
|
+
format: "regex";
|
|
147
|
+
pattern: string;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export interface $YatspIssueStringInvalidJWT extends $YatspIssueInvalidStringFormat {
|
|
151
|
+
format: "jwt";
|
|
152
|
+
algorithm?: string;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface $YatspIssueStringStartsWith extends $YatspIssueInvalidStringFormat {
|
|
156
|
+
format: "starts_with";
|
|
157
|
+
prefix: string;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export interface $YatspIssueStringEndsWith extends $YatspIssueInvalidStringFormat {
|
|
161
|
+
format: "ends_with";
|
|
162
|
+
suffix: string;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export interface $YatspIssueStringIncludes extends $YatspIssueInvalidStringFormat {
|
|
166
|
+
format: "includes";
|
|
167
|
+
includes: string;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export type $YatspStringFormatIssues =
|
|
171
|
+
| $YatspIssueStringCommonFormats
|
|
172
|
+
| $YatspIssueStringInvalidRegex
|
|
173
|
+
| $YatspIssueStringInvalidJWT
|
|
174
|
+
| $YatspIssueStringStartsWith
|
|
175
|
+
| $YatspIssueStringEndsWith
|
|
176
|
+
| $YatspIssueStringIncludes;
|
|
177
|
+
|
|
178
|
+
////////////////////////
|
|
179
|
+
//// utils /////
|
|
180
|
+
////////////////////////
|
|
181
|
+
|
|
182
|
+
export type $YatspIssue =
|
|
183
|
+
| $YatspIssueInvalidType
|
|
184
|
+
| $YatspIssueTooBig
|
|
185
|
+
| $YatspIssueTooSmall
|
|
186
|
+
| $YatspIssueInvalidStringFormat
|
|
187
|
+
| $YatspIssueNotMultipleOf
|
|
188
|
+
| $YatspIssueUnrecognizedKeys
|
|
189
|
+
| $YatspIssueInvalidUnion
|
|
190
|
+
| $YatspIssueInvalidKey
|
|
191
|
+
| $YatspIssueInvalidElement
|
|
192
|
+
| $YatspIssueInvalidValue
|
|
193
|
+
| $YatspIssueCustom;
|
|
194
|
+
|
|
195
|
+
export type $YatspIssueCode = $YatspIssue["code"];
|
|
196
|
+
|
|
197
|
+
export type $YatspInternalIssue<T extends $YatspIssueBase = $YatspIssue> = T extends any ? RawIssue<T> : never;
|
|
198
|
+
type RawIssue<T extends $YatspIssueBase> = T extends any
|
|
199
|
+
? util.Flatten<
|
|
200
|
+
util.MakePartial<T, "message" | "path"> & {
|
|
201
|
+
/** The input data */
|
|
202
|
+
readonly input: unknown;
|
|
203
|
+
/** The schema or check that originated this issue. */
|
|
204
|
+
readonly inst?: $YatspType | $YatspCheck;
|
|
205
|
+
/** The schema that owns the issue. Equal to `inst` when a schema originated the issue, and the schema the check was attached to when a check did. */
|
|
206
|
+
readonly schema?: $YatspType | undefined;
|
|
207
|
+
/** If `true`, Yatsp will continue executing checks/refinements after this issue. */
|
|
208
|
+
readonly continue?: boolean | undefined;
|
|
209
|
+
} & Record<string, unknown>
|
|
210
|
+
>
|
|
211
|
+
: never;
|
|
212
|
+
|
|
213
|
+
export type $YatspRawIssue<T extends $YatspIssueBase = $YatspIssue> = $YatspInternalIssue<T>;
|
|
214
|
+
|
|
215
|
+
export interface $YatspErrorMap<T extends $YatspIssueBase = $YatspIssue> {
|
|
216
|
+
// biome-ignore lint/style/useShorthandFunctionType: interface form is public API
|
|
217
|
+
(issue: $YatspRawIssue<T>): { message: string } | string | undefined | null;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
//////////////////////// ERROR CLASS ////////////////////////
|
|
221
|
+
|
|
222
|
+
// const YATSP_ERROR: symbol = Symbol.for("{{yatsp.error}}");
|
|
223
|
+
export interface $YatspError<T = unknown> extends Error {
|
|
224
|
+
type: T;
|
|
225
|
+
issues: $YatspIssue[];
|
|
226
|
+
_yatsp: {
|
|
227
|
+
output: T;
|
|
228
|
+
def: $YatspIssue[];
|
|
229
|
+
};
|
|
230
|
+
stack?: string;
|
|
231
|
+
name: string;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/* Computing the message eagerly is expensive (pretty-printed JSON of all
|
|
235
|
+
* issues), so defer it until first read. The accessor functions and
|
|
236
|
+
* descriptors are shared across instances to keep error construction
|
|
237
|
+
* cheap; the computed message is cached on the internals object. The
|
|
238
|
+
* setter preserves plain assignment semantics for consumers that
|
|
239
|
+
* overwrite `message`. */
|
|
240
|
+
function _getMessage(this: $YatspError): string {
|
|
241
|
+
const internals = this._yatsp as { def: $YatspIssue[]; message?: string };
|
|
242
|
+
internals.message ??= JSON.stringify(internals.def, util.jsonStringifyReplacer, 2);
|
|
243
|
+
return internals.message;
|
|
244
|
+
}
|
|
245
|
+
function _setMessage(this: $YatspError, value: string): void {
|
|
246
|
+
(this._yatsp as { message?: string }).message = value;
|
|
247
|
+
}
|
|
248
|
+
const _messageDesc: PropertyDescriptor = {
|
|
249
|
+
get: _getMessage,
|
|
250
|
+
set: _setMessage,
|
|
251
|
+
enumerable: true,
|
|
252
|
+
configurable: true,
|
|
253
|
+
};
|
|
254
|
+
const _issuesDesc: PropertyDescriptor = { value: undefined, enumerable: false };
|
|
255
|
+
|
|
256
|
+
/* Prototypes that already carry the lazy `toString`. Seeded with the
|
|
257
|
+
* intrinsics so that `init` on a foreign object — it accepts any object —
|
|
258
|
+
* can never install an accessor onto a prototype we do not own. */
|
|
259
|
+
const _installedToString = /* @__PURE__ */ new WeakSet<object>([Object.prototype, Error.prototype]);
|
|
260
|
+
|
|
261
|
+
const initializer = (inst: $YatspError, def: $YatspIssue[]): void => {
|
|
262
|
+
inst.name = "$YatspError";
|
|
263
|
+
// `_yatsp` is already non-enumerable: $constructor's init defined it with this same descriptor
|
|
264
|
+
_issuesDesc.value = def;
|
|
265
|
+
Object.defineProperty(inst, "issues", _issuesDesc);
|
|
266
|
+
// Clear the shared slot; a retained `value` pins the last error's issues.
|
|
267
|
+
_issuesDesc.value = undefined;
|
|
268
|
+
Object.defineProperty(inst, "message", _messageDesc);
|
|
269
|
+
|
|
270
|
+
/* `toString` lives as a non-enumerable lazy getter on the shared
|
|
271
|
+
* prototype; on first access it caches a per-instance closure so
|
|
272
|
+
* detached usage still works. */
|
|
273
|
+
const proto = Object.getPrototypeOf(inst);
|
|
274
|
+
if (!_installedToString.has(proto)) {
|
|
275
|
+
_installedToString.add(proto);
|
|
276
|
+
Object.defineProperty(proto, "toString", {
|
|
277
|
+
configurable: true,
|
|
278
|
+
enumerable: false,
|
|
279
|
+
get(this: $YatspError) {
|
|
280
|
+
const value = () => this.message;
|
|
281
|
+
Object.defineProperty(this, "toString", { value, configurable: true, writable: true });
|
|
282
|
+
return value;
|
|
283
|
+
},
|
|
284
|
+
set(this: $YatspError, value: unknown) {
|
|
285
|
+
Object.defineProperty(this, "toString", { value, configurable: true, writable: true });
|
|
286
|
+
},
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
export const $YatspError: $constructor<$YatspError> = $constructor("$YatspError", initializer);
|
|
292
|
+
interface $YatspRealError<T = any> extends $YatspError<T> {}
|
|
293
|
+
export const $YatspRealError: $constructor<$YatspRealError> = $constructor("$YatspError", initializer, undefined, {
|
|
294
|
+
Parent: Error,
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
/////////////////// ERROR UTILITIES ////////////////////////
|
|
298
|
+
|
|
299
|
+
// flatten
|
|
300
|
+
export type $YatspFlattenedError<T, U = string> = _FlattenedError<T, U>;
|
|
301
|
+
type _FlattenedError<T, U = string> = {
|
|
302
|
+
formErrors: U[];
|
|
303
|
+
fieldErrors: {
|
|
304
|
+
[P in keyof T]?: U[];
|
|
305
|
+
};
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
/** Get-or-create `obj[key]` as an own data property. A path segment naming an inherited member
|
|
309
|
+
* ("toString", "constructor") would otherwise read through to the prototype, and assigning
|
|
310
|
+
* "__proto__" would hit the setter instead of creating a key. */
|
|
311
|
+
function node<T>(obj: any, key: PropertyKey, make: () => T): T {
|
|
312
|
+
if (!Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
313
|
+
if (key === "__proto__") {
|
|
314
|
+
Object.defineProperty(obj, key, { value: make(), writable: true, enumerable: true, configurable: true });
|
|
315
|
+
} else {
|
|
316
|
+
obj[key] = make();
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return obj[key];
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
export function flattenError<T>(error: $YatspError<T>): _FlattenedError<T>;
|
|
323
|
+
export function flattenError<T, U>(error: $YatspError<T>, mapper?: (issue: $YatspIssue) => U): _FlattenedError<T, U>;
|
|
324
|
+
export function flattenError<T, U>(error: $YatspError<T>, mapper = (issue: $YatspIssue) => issue.message as U) {
|
|
325
|
+
const fieldErrors: Record<PropertyKey, any> = {};
|
|
326
|
+
const formErrors: U[] = [];
|
|
327
|
+
for (const sub of error.issues) {
|
|
328
|
+
if (sub.path.length > 0) {
|
|
329
|
+
node<U[]>(fieldErrors, sub.path[0]!, () => []).push(mapper(sub));
|
|
330
|
+
} else {
|
|
331
|
+
formErrors.push(mapper(sub));
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return { formErrors, fieldErrors };
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
type _YatspFormattedError<T, U = string> = T extends [any, ...any[]]
|
|
338
|
+
? { [K in keyof T]?: $YatspFormattedError<T[K], U> }
|
|
339
|
+
: T extends any[]
|
|
340
|
+
? { [k: number]: $YatspFormattedError<T[number], U> }
|
|
341
|
+
: T extends object
|
|
342
|
+
? util.Flatten<{ [K in keyof T]?: $YatspFormattedError<T[K], U> }>
|
|
343
|
+
: any;
|
|
344
|
+
|
|
345
|
+
export type $YatspFormattedError<T, U = string> = {
|
|
346
|
+
_errors: U[];
|
|
347
|
+
} & util.Flatten<_YatspFormattedError<T, U>>;
|
|
348
|
+
|
|
349
|
+
export function formatError<T>(error: $YatspError<T>): $YatspFormattedError<T>;
|
|
350
|
+
export function formatError<T, U>(
|
|
351
|
+
error: $YatspError<T>,
|
|
352
|
+
mapper?: (issue: $YatspIssue) => U
|
|
353
|
+
): $YatspFormattedError<T, U>;
|
|
354
|
+
export function formatError<T, U>(error: $YatspError<T>, mapper = (issue: $YatspIssue) => issue.message as U) {
|
|
355
|
+
const fieldErrors: $YatspFormattedError<T> = { _errors: [] } as any;
|
|
356
|
+
const processError = (error: { issues: $YatspIssue[] }, path: PropertyKey[] = []) => {
|
|
357
|
+
for (const issue of error.issues) {
|
|
358
|
+
if (issue.code === "invalid_union" && issue.errors.length) {
|
|
359
|
+
issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));
|
|
360
|
+
} else if (issue.code === "invalid_key") {
|
|
361
|
+
processError({ issues: issue.issues }, [...path, ...issue.path]);
|
|
362
|
+
} else if (issue.code === "invalid_element") {
|
|
363
|
+
processError({ issues: issue.issues }, [...path, ...issue.path]);
|
|
364
|
+
} else {
|
|
365
|
+
const fullpath = [...path, ...issue.path];
|
|
366
|
+
if (fullpath.length === 0) {
|
|
367
|
+
(fieldErrors as any)._errors.push(mapper(issue));
|
|
368
|
+
} else {
|
|
369
|
+
let curr: any = fieldErrors;
|
|
370
|
+
let i = 0;
|
|
371
|
+
while (i < fullpath.length) {
|
|
372
|
+
const el = fullpath[i]!;
|
|
373
|
+
const terminal = i === fullpath.length - 1;
|
|
374
|
+
|
|
375
|
+
// `_errors` is reserved by this legacy format, so merge a matching path segment into the current node instead of treating its array as a child.
|
|
376
|
+
if (el === "_errors") {
|
|
377
|
+
if (terminal) curr._errors.push(mapper(issue));
|
|
378
|
+
i++;
|
|
379
|
+
continue;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// A path element may collide with an inherited property name such as
|
|
383
|
+
// "__proto__" or "constructor". Truthiness checks read the prototype
|
|
384
|
+
// (so no node is created, then ._errors.push throws), and bracket
|
|
385
|
+
// assignment of "__proto__" hits the setter instead of creating an
|
|
386
|
+
// own key. Guard the read with hasOwnProperty and create the node
|
|
387
|
+
// with defineProperty so any path element becomes a real own key.
|
|
388
|
+
if (!Object.prototype.hasOwnProperty.call(curr, el)) {
|
|
389
|
+
Object.defineProperty(curr, el, {
|
|
390
|
+
value: { _errors: [] },
|
|
391
|
+
enumerable: true,
|
|
392
|
+
writable: true,
|
|
393
|
+
configurable: true,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
const node = curr[el];
|
|
397
|
+
if (terminal) {
|
|
398
|
+
node._errors.push(mapper(issue));
|
|
399
|
+
}
|
|
400
|
+
curr = node;
|
|
401
|
+
i++;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
processError(error);
|
|
408
|
+
return fieldErrors;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
export type $YatspErrorTree<T, U = string> = T extends util.Primitive
|
|
412
|
+
? { errors: U[] }
|
|
413
|
+
: T extends [any, ...any[]]
|
|
414
|
+
? { errors: U[]; items?: { [K in keyof T]?: $YatspErrorTree<T[K], U> } }
|
|
415
|
+
: T extends any[]
|
|
416
|
+
? { errors: U[]; items?: Array<$YatspErrorTree<T[number], U>> }
|
|
417
|
+
: T extends object
|
|
418
|
+
? {
|
|
419
|
+
errors: U[];
|
|
420
|
+
properties?: { [K in keyof T]?: $YatspErrorTree<T[K], U> };
|
|
421
|
+
}
|
|
422
|
+
: { errors: U[] };
|
|
423
|
+
|
|
424
|
+
export function treeifyError<T>(error: $YatspError<T>): $YatspErrorTree<T>;
|
|
425
|
+
export function treeifyError<T, U>(error: $YatspError<T>, mapper?: (issue: $YatspIssue) => U): $YatspErrorTree<T, U>;
|
|
426
|
+
export function treeifyError<T, U>(error: $YatspError<T>, mapper = (issue: $YatspIssue) => issue.message as U) {
|
|
427
|
+
const result: $YatspErrorTree<T, U> = { errors: [] } as any;
|
|
428
|
+
const processError = (error: { issues: $YatspIssue[] }, path: PropertyKey[] = []) => {
|
|
429
|
+
for (const issue of error.issues) {
|
|
430
|
+
if (issue.code === "invalid_union" && issue.errors.length) {
|
|
431
|
+
// regular union error
|
|
432
|
+
issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));
|
|
433
|
+
} else if (issue.code === "invalid_key") {
|
|
434
|
+
processError({ issues: issue.issues }, [...path, ...issue.path]);
|
|
435
|
+
} else if (issue.code === "invalid_element") {
|
|
436
|
+
processError({ issues: issue.issues }, [...path, ...issue.path]);
|
|
437
|
+
} else {
|
|
438
|
+
const fullpath = [...path, ...issue.path];
|
|
439
|
+
if (fullpath.length === 0) {
|
|
440
|
+
result.errors.push(mapper(issue));
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
let curr: any = result;
|
|
445
|
+
let i = 0;
|
|
446
|
+
while (i < fullpath.length) {
|
|
447
|
+
const el = fullpath[i]!;
|
|
448
|
+
|
|
449
|
+
const terminal = i === fullpath.length - 1;
|
|
450
|
+
if (typeof el === "string") {
|
|
451
|
+
curr.properties ??= {};
|
|
452
|
+
// el may collide with an inherited property name ("__proto__",
|
|
453
|
+
// "constructor", ...); ??= reads the prototype so the node is never
|
|
454
|
+
// created and curr.errors.push throws. Guard with hasOwnProperty and
|
|
455
|
+
// create the node with defineProperty so "__proto__" becomes a real
|
|
456
|
+
// own key rather than invoking the prototype setter.
|
|
457
|
+
if (!Object.prototype.hasOwnProperty.call(curr.properties, el)) {
|
|
458
|
+
Object.defineProperty(curr.properties, el, {
|
|
459
|
+
value: { errors: [] },
|
|
460
|
+
enumerable: true,
|
|
461
|
+
writable: true,
|
|
462
|
+
configurable: true,
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
curr = curr.properties[el];
|
|
466
|
+
} else {
|
|
467
|
+
curr.items ??= [];
|
|
468
|
+
curr.items[el] ??= { errors: [] };
|
|
469
|
+
curr = curr.items[el];
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
if (terminal) {
|
|
473
|
+
curr.errors.push(mapper(issue));
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
i++;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
processError(error);
|
|
482
|
+
return result;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/** Format a YatspError as a human-readable string in the following form.
|
|
486
|
+
*
|
|
487
|
+
* From
|
|
488
|
+
*
|
|
489
|
+
* ```ts
|
|
490
|
+
* YatspError {
|
|
491
|
+
* issues: [
|
|
492
|
+
* {
|
|
493
|
+
* expected: 'string',
|
|
494
|
+
* code: 'invalid_type',
|
|
495
|
+
* path: [ 'username' ],
|
|
496
|
+
* message: 'Invalid input: expected string'
|
|
497
|
+
* },
|
|
498
|
+
* {
|
|
499
|
+
* expected: 'number',
|
|
500
|
+
* code: 'invalid_type',
|
|
501
|
+
* path: [ 'favoriteNumbers', 1 ],
|
|
502
|
+
* message: 'Invalid input: expected number'
|
|
503
|
+
* }
|
|
504
|
+
* ];
|
|
505
|
+
* }
|
|
506
|
+
* ```
|
|
507
|
+
*
|
|
508
|
+
* to
|
|
509
|
+
*
|
|
510
|
+
* ```
|
|
511
|
+
* username
|
|
512
|
+
* ✖ Expected number, received string at "username
|
|
513
|
+
* favoriteNumbers[0]
|
|
514
|
+
* ✖ Invalid input: expected number
|
|
515
|
+
* ```
|
|
516
|
+
*/
|
|
517
|
+
export function toDotPath(_path: readonly (string | number | symbol | StandardSchemaV1.PathSegment)[]): string {
|
|
518
|
+
const segs: string[] = [];
|
|
519
|
+
const path: PropertyKey[] = _path.map((seg: any) => (typeof seg === "object" ? seg.key : seg));
|
|
520
|
+
for (const seg of path) {
|
|
521
|
+
if (typeof seg === "number") segs.push(`[${seg}]`);
|
|
522
|
+
else if (typeof seg === "symbol") segs.push(`[${JSON.stringify(String(seg))}]`);
|
|
523
|
+
else if (/[^\w$]/.test(seg)) segs.push(`[${JSON.stringify(seg)}]`);
|
|
524
|
+
else {
|
|
525
|
+
if (segs.length) segs.push(".");
|
|
526
|
+
segs.push(seg);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
return segs.join("");
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
export function prettifyError(error: StandardSchemaV1.FailureResult): string {
|
|
534
|
+
const lines: string[] = [];
|
|
535
|
+
// sort by path length
|
|
536
|
+
const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);
|
|
537
|
+
|
|
538
|
+
// Process each issue
|
|
539
|
+
for (const issue of issues) {
|
|
540
|
+
lines.push(`✖ ${issue.message}`);
|
|
541
|
+
if (issue.path?.length) lines.push(` → at ${toDotPath(issue.path)}`);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
// Convert Map to formatted string
|
|
545
|
+
return lines.join("\n");
|
|
546
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export * from "./core.js";
|
|
2
|
+
export * from "./parse.js";
|
|
3
|
+
export * from "./errors.js";
|
|
4
|
+
export * from "./schemas.js";
|
|
5
|
+
export * from "./memoizer.js";
|
|
6
|
+
export * from "./checks.js";
|
|
7
|
+
export * from "./versions.js";
|
|
8
|
+
export * as util from "./util.js";
|
|
9
|
+
export { toYatsp } from "./util.js";
|
|
10
|
+
export * as regexes from "./regexes.js";
|
|
11
|
+
export * as locales from "../locales/index.js";
|
|
12
|
+
export * from "./registries.js";
|
|
13
|
+
export * from "./doc.js";
|
|
14
|
+
export * from "./compile.js";
|
|
15
|
+
export * from "./api.js";
|
|
16
|
+
export * from "./to-json-schema.js";
|
|
17
|
+
export { toJSONSchema } from "./json-schema-processors.js";
|
|
18
|
+
export { JSONSchemaGenerator } from "./json-schema-generator.js";
|
|
19
|
+
export * as JSONSchema from "./json-schema.js";
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { allProcessors } from "./json-schema-processors.js";
|
|
2
|
+
import type * as JSONSchema from "./json-schema.js";
|
|
3
|
+
import type { $YatspRegistry } from "./registries.js";
|
|
4
|
+
import type * as schemas from "./schemas.js";
|
|
5
|
+
import {
|
|
6
|
+
type JSONSchemaGeneratorParams,
|
|
7
|
+
type ProcessParams,
|
|
8
|
+
type Seen,
|
|
9
|
+
type ToJSONSchemaContext,
|
|
10
|
+
extractDefs,
|
|
11
|
+
finalize,
|
|
12
|
+
initializeContext,
|
|
13
|
+
processSchema,
|
|
14
|
+
} from "./to-json-schema.js";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Parameters for the emit method of JSONSchemaGenerator.
|
|
18
|
+
* @deprecated Use toJSONSchema function instead
|
|
19
|
+
*/
|
|
20
|
+
export type EmitParams = Pick<JSONSchemaGeneratorParams, "cycles" | "reused" | "external">;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Parameters for JSONSchemaGenerator constructor.
|
|
24
|
+
* @deprecated Use toJSONSchema function instead
|
|
25
|
+
*/
|
|
26
|
+
type JSONSchemaGeneratorConstructorParams = Pick<
|
|
27
|
+
JSONSchemaGeneratorParams,
|
|
28
|
+
"metadata" | "target" | "unrepresentable" | "override" | "io"
|
|
29
|
+
>;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Legacy class-based interface for JSON Schema generation.
|
|
33
|
+
* This class wraps the new functional implementation to provide backward compatibility.
|
|
34
|
+
*
|
|
35
|
+
* @deprecated Use the `toJSONSchema` function instead for new code.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* // Legacy usage (still supported)
|
|
40
|
+
* const gen = new JSONSchemaGenerator({ target: "draft-07" });
|
|
41
|
+
* gen.process(schema);
|
|
42
|
+
* const result = gen.emit(schema);
|
|
43
|
+
*
|
|
44
|
+
* // Preferred modern usage
|
|
45
|
+
* const result = toJSONSchema(schema, { target: "draft-07" });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export class JSONSchemaGenerator {
|
|
49
|
+
private ctx: ToJSONSchemaContext;
|
|
50
|
+
|
|
51
|
+
/** @deprecated Access via ctx instead */
|
|
52
|
+
get metadataRegistry(): $YatspRegistry<Record<string, any>> {
|
|
53
|
+
return this.ctx.metadataRegistry;
|
|
54
|
+
}
|
|
55
|
+
/** @deprecated Access via ctx instead */
|
|
56
|
+
get target() {
|
|
57
|
+
return this.ctx.target;
|
|
58
|
+
}
|
|
59
|
+
// annotated so the .d.cts emits an indexed access rather than an inline `import()` of an ESM path
|
|
60
|
+
/** @deprecated Access via ctx instead */
|
|
61
|
+
get unrepresentable(): ToJSONSchemaContext["unrepresentable"] {
|
|
62
|
+
return this.ctx.unrepresentable;
|
|
63
|
+
}
|
|
64
|
+
/** @deprecated Access via ctx instead */
|
|
65
|
+
get override() {
|
|
66
|
+
return this.ctx.override;
|
|
67
|
+
}
|
|
68
|
+
/** @deprecated Access via ctx instead */
|
|
69
|
+
get io() {
|
|
70
|
+
return this.ctx.io;
|
|
71
|
+
}
|
|
72
|
+
/** @deprecated Access via ctx instead */
|
|
73
|
+
get counter() {
|
|
74
|
+
return this.ctx.counter;
|
|
75
|
+
}
|
|
76
|
+
set counter(value: number) {
|
|
77
|
+
this.ctx.counter = value;
|
|
78
|
+
}
|
|
79
|
+
/** @deprecated Access via ctx instead */
|
|
80
|
+
get seen(): Map<schemas.$YatspType, Seen> {
|
|
81
|
+
return this.ctx.seen;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
constructor(params?: JSONSchemaGeneratorConstructorParams) {
|
|
85
|
+
// Normalize target for internal context
|
|
86
|
+
let normalizedTarget: ToJSONSchemaContext["target"] = params?.target ?? "draft-2020-12";
|
|
87
|
+
if (normalizedTarget === "draft-4") normalizedTarget = "draft-04";
|
|
88
|
+
if (normalizedTarget === "draft-7") normalizedTarget = "draft-07";
|
|
89
|
+
|
|
90
|
+
this.ctx = initializeContext({
|
|
91
|
+
processors: allProcessors,
|
|
92
|
+
target: normalizedTarget,
|
|
93
|
+
...(params?.metadata && { metadata: params.metadata }),
|
|
94
|
+
...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),
|
|
95
|
+
...(params?.override && { override: params.override as any }),
|
|
96
|
+
...(params?.io && { io: params.io }),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Process a schema to prepare it for JSON Schema generation.
|
|
102
|
+
* This must be called before emit().
|
|
103
|
+
*/
|
|
104
|
+
process(schema: schemas.$YatspType, _params: ProcessParams = { path: [], schemaPath: [] }): JSONSchema.BaseSchema {
|
|
105
|
+
return processSchema(schema, this.ctx, _params);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Emit the final JSON Schema after processing.
|
|
110
|
+
* Must call process() first.
|
|
111
|
+
*/
|
|
112
|
+
emit(schema: schemas.$YatspType, _params?: EmitParams): JSONSchema.BaseSchema {
|
|
113
|
+
// Apply emit params to the context
|
|
114
|
+
if (_params) {
|
|
115
|
+
if (_params.cycles) this.ctx.cycles = _params.cycles;
|
|
116
|
+
if (_params.reused) this.ctx.reused = _params.reused;
|
|
117
|
+
if (_params.external) this.ctx.external = _params.external;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// extractDefs/finalize skip their whole-map passes when they have already run for this `external`, but they also branch on `cycles`, `reused`, `seen.count` and the metadata registry — any of which can change between emits, including with no params at all. Drop the guards so the passes re-run. The registry conversion calls extractDefs/finalize directly and never routes through here, so it keeps skipping them.
|
|
121
|
+
this.ctx.sharedDefsExtractedFor = undefined;
|
|
122
|
+
this.ctx.sharedEmitDoneFor = undefined;
|
|
123
|
+
|
|
124
|
+
extractDefs(this.ctx, schema);
|
|
125
|
+
const result = finalize(this.ctx, schema);
|
|
126
|
+
|
|
127
|
+
// Strip ~standard property to match old implementation's return type
|
|
128
|
+
const { "~standard": _, ...plainResult } = result as any;
|
|
129
|
+
return plainResult as JSONSchema.BaseSchema;
|
|
130
|
+
}
|
|
131
|
+
}
|