@openclaw/firecrawl-plugin 2026.9.3 → 2026.9.5
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/assets/activity.svg +31 -0
- package/assets/icon.png +0 -0
- package/dist/{firecrawl-fetch-provider-CIpxLKLq.js → .setup/firecrawl-fetch-provider-BM5uWYri.mjs} +1 -1
- package/dist/{firecrawl-search-provider-80szkO8A.js → .setup/firecrawl-search-provider-CdDShG2T.mjs} +1 -1
- package/dist/api.js +1 -1
- package/dist/index.js +3 -3
- package/dist/web-fetch-contract-api.js +1 -1
- package/dist/web-fetch-provider.js +1 -1
- package/dist/web-search-contract-api.js +1 -1
- package/dist/web-search-provider.js +1 -1
- package/node_modules/typebox/build/compile/validator.d.mts +1 -1
- package/node_modules/typebox/build/compile/validator.mjs +1 -1
- package/node_modules/typebox/build/format/idna/idn-hostname.mjs +7 -5
- package/node_modules/typebox/build/format/iri.mjs +5 -1
- package/node_modules/typebox/build/guard/emit.mjs +2 -4
- package/node_modules/typebox/build/guard/guard.mjs +6 -18
- package/node_modules/typebox/build/guard/string.mjs +16 -24
- package/node_modules/typebox/build/schema/build.mjs +2 -2
- package/node_modules/typebox/build/schema/check.mjs +1 -1
- package/node_modules/typebox/build/schema/compile.d.mts +3 -2
- package/node_modules/typebox/build/schema/compile.mjs +8 -8
- package/node_modules/typebox/build/schema/engine/_context.d.mts +6 -7
- package/node_modules/typebox/build/schema/engine/_context.mjs +23 -15
- package/node_modules/typebox/build/schema/engine/_functions.d.mts +2 -2
- package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/_reducer.d.mts +3 -3
- package/node_modules/typebox/build/schema/engine/_refine.d.mts +5 -5
- package/node_modules/typebox/build/schema/engine/_refine.mjs +4 -7
- package/node_modules/typebox/build/schema/engine/_stack.d.mts +34 -16
- package/node_modules/typebox/build/schema/engine/_stack.mjs +148 -104
- package/node_modules/typebox/build/schema/engine/additionalItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +8 -8
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +26 -18
- package/node_modules/typebox/build/schema/engine/allOf.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/allOf.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/anyOf.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/anyOf.mjs +5 -10
- package/node_modules/typebox/build/schema/engine/boolean.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/boolean.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/const.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/const.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/contains.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/contains.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/dependencies.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/dependencies.mjs +3 -6
- package/node_modules/typebox/build/schema/engine/dependentRequired.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/dependentRequired.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/dependentSchemas.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +11 -7
- package/node_modules/typebox/build/schema/engine/enum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/enum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/exclusiveMaximum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/exclusiveMaximum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/exclusiveMinimum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/exclusiveMinimum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/format.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/format.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/if.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/if.mjs +7 -15
- package/node_modules/typebox/build/schema/engine/items.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/items.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/maxContains.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/maxItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maxItems.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/maxLength.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maxLength.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/maxProperties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maxProperties.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/maximum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/maximum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minContains.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/minContains.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minItems.d.mts +5 -5
- package/node_modules/typebox/build/schema/engine/minItems.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minLength.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/minLength.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minProperties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/minProperties.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/minimum.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/minimum.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/multipleOf.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/multipleOf.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/not.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/not.mjs +4 -8
- package/node_modules/typebox/build/schema/engine/oneOf.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/oneOf.mjs +6 -11
- package/node_modules/typebox/build/schema/engine/pattern.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -7
- package/node_modules/typebox/build/schema/engine/patternProperties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/prefixItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/prefixItems.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/properties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/properties.mjs +1 -1
- package/node_modules/typebox/build/schema/engine/propertyNames.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +4 -10
- package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +11 -7
- package/node_modules/typebox/build/schema/engine/ref.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/ref.mjs +19 -15
- package/node_modules/typebox/build/schema/engine/required.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/required.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/schema.d.mts +7 -7
- package/node_modules/typebox/build/schema/engine/schema.mjs +137 -133
- package/node_modules/typebox/build/schema/engine/type.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/type.mjs +2 -6
- package/node_modules/typebox/build/schema/engine/unevaluatedItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +5 -9
- package/node_modules/typebox/build/schema/engine/unevaluatedProperties.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +5 -9
- package/node_modules/typebox/build/schema/engine/uniqueItems.d.mts +4 -4
- package/node_modules/typebox/build/schema/engine/uniqueItems.mjs +2 -6
- package/node_modules/typebox/build/schema/errors.d.mts +2 -2
- package/node_modules/typebox/build/schema/errors.mjs +8 -14
- package/node_modules/typebox/build/schema/intern/index.d.mts +1 -0
- package/node_modules/typebox/build/schema/intern/index.mjs +1 -0
- package/node_modules/typebox/build/schema/intern/intern.d.mts +11 -0
- package/node_modules/typebox/build/schema/intern/intern.mjs +293 -0
- package/node_modules/typebox/build/schema/meta/draft_2019_09.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_2019_09.mjs +288 -0
- package/node_modules/typebox/build/schema/meta/draft_2020_12.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_2020_12.mjs +300 -0
- package/node_modules/typebox/build/schema/meta/draft_3.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_3.mjs +143 -0
- package/node_modules/typebox/build/schema/meta/draft_4.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_4.mjs +149 -0
- package/node_modules/typebox/build/schema/meta/draft_6.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_6.mjs +155 -0
- package/node_modules/typebox/build/schema/meta/draft_7.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/draft_7.mjs +172 -0
- package/node_modules/typebox/build/schema/meta/index.d.mts +2 -0
- package/node_modules/typebox/build/schema/meta/index.mjs +2 -0
- package/node_modules/typebox/build/schema/meta/meta.d.mts +9 -0
- package/node_modules/typebox/build/schema/meta/meta.mjs +15 -0
- package/node_modules/typebox/build/schema/meta/schema.d.mts +6 -0
- package/node_modules/typebox/build/schema/meta/schema.mjs +1 -0
- package/node_modules/typebox/build/schema/parse.d.mts +1 -0
- package/node_modules/typebox/build/schema/parse.mjs +10 -5
- package/node_modules/typebox/build/schema/resolve/resolve.d.mts +8 -3
- package/node_modules/typebox/build/schema/resolve/resolve.mjs +268 -139
- package/node_modules/typebox/build/schema/schema.d.mts +2 -0
- package/node_modules/typebox/build/schema/schema.mjs +2 -0
- package/node_modules/typebox/build/value/errors/errors.d.mts +2 -12
- package/node_modules/typebox/build/value/errors/errors.mjs +2 -7
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +59 -89
- package/node_modules/zod/README.md +27 -0
- package/node_modules/zod/compile.cjs +77 -0
- package/node_modules/zod/compile.d.cts +1 -0
- package/node_modules/zod/compile.d.ts +1 -0
- package/node_modules/zod/compile.js +52 -0
- package/node_modules/zod/index.cjs +2 -2
- package/node_modules/zod/index.d.cts +1 -2
- package/node_modules/zod/index.d.ts +1 -2
- package/node_modules/zod/index.js +5 -2
- package/node_modules/zod/package.json +13 -2
- package/node_modules/zod/src/compile.ts +56 -0
- package/node_modules/zod/src/index.ts +5 -2
- package/node_modules/zod/src/v3/ZodError.ts +22 -12
- package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
- package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
- package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
- package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
- package/node_modules/zod/src/v3/types.ts +5 -5
- package/node_modules/zod/src/v4/classic/checks.ts +1 -0
- package/node_modules/zod/src/v4/classic/compat.ts +26 -18
- package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
- package/node_modules/zod/src/v4/classic/errors.ts +59 -44
- package/node_modules/zod/src/v4/classic/external.ts +12 -9
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +140 -78
- package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
- package/node_modules/zod/src/v4/classic/index.ts +2 -2
- package/node_modules/zod/src/v4/classic/iso.ts +2 -72
- package/node_modules/zod/src/v4/classic/parse.ts +10 -4
- package/node_modules/zod/src/v4/classic/schemas.ts +452 -262
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +135 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +30 -1
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
- package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +720 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
- package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
- package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
- package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +155 -13
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +11 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +274 -6
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +425 -10
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
- package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
- package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
- package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +281 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +47 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
- package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +183 -0
- package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +46 -9
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +245 -12
- package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +234 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
- package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +33 -2
- package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +127 -5
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +11 -2
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1585 -173
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
- package/node_modules/zod/src/v4/classic/tests/validate.test.ts +76 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
- package/node_modules/zod/src/v4/core/api.ts +48 -12
- package/node_modules/zod/src/v4/core/checks.ts +57 -44
- package/node_modules/zod/src/v4/core/compile.ts +2188 -0
- package/node_modules/zod/src/v4/core/core.ts +98 -19
- package/node_modules/zod/src/v4/core/doc.ts +11 -7
- package/node_modules/zod/src/v4/core/errors.ts +115 -24
- package/node_modules/zod/src/v4/core/index.ts +3 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +6 -1
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +257 -93
- package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
- package/node_modules/zod/src/v4/core/memoizer.ts +284 -0
- package/node_modules/zod/src/v4/core/parse.ts +131 -38
- package/node_modules/zod/src/v4/core/regexes.ts +30 -13
- package/node_modules/zod/src/v4/core/registries.ts +2 -2
- package/node_modules/zod/src/v4/core/schemas.ts +759 -461
- package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +969 -0
- package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
- package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
- package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
- package/node_modules/zod/src/v4/core/tests/compile.test.ts +1639 -0
- package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
- package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
- package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
- package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
- package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +31 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +275 -42
- package/node_modules/zod/src/v4/core/util.ts +268 -42
- package/node_modules/zod/src/v4/core/versions.ts +2 -2
- package/node_modules/zod/src/v4/core/visit.ts +193 -0
- package/node_modules/zod/src/v4/index.ts +3 -3
- package/node_modules/zod/src/v4/locales/ar.ts +3 -0
- package/node_modules/zod/src/v4/locales/az.ts +3 -0
- package/node_modules/zod/src/v4/locales/be.ts +10 -0
- package/node_modules/zod/src/v4/locales/bg.ts +3 -0
- package/node_modules/zod/src/v4/locales/bn.ts +121 -0
- package/node_modules/zod/src/v4/locales/ca.ts +3 -0
- package/node_modules/zod/src/v4/locales/ckb.ts +138 -0
- package/node_modules/zod/src/v4/locales/cs.ts +3 -0
- package/node_modules/zod/src/v4/locales/da.ts +5 -2
- package/node_modules/zod/src/v4/locales/de.ts +3 -0
- package/node_modules/zod/src/v4/locales/el.ts +1 -0
- package/node_modules/zod/src/v4/locales/en.ts +15 -4
- package/node_modules/zod/src/v4/locales/eo.ts +3 -0
- package/node_modules/zod/src/v4/locales/es.ts +2 -0
- package/node_modules/zod/src/v4/locales/fa.ts +3 -0
- package/node_modules/zod/src/v4/locales/fi.ts +3 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +3 -0
- package/node_modules/zod/src/v4/locales/fr.ts +19 -14
- package/node_modules/zod/src/v4/locales/gu.ts +121 -0
- package/node_modules/zod/src/v4/locales/he.ts +6 -1
- package/node_modules/zod/src/v4/locales/hi.ts +124 -0
- package/node_modules/zod/src/v4/locales/hr.ts +2 -0
- package/node_modules/zod/src/v4/locales/hu.ts +3 -0
- package/node_modules/zod/src/v4/locales/hy.ts +9 -0
- package/node_modules/zod/src/v4/locales/id.ts +3 -0
- package/node_modules/zod/src/v4/locales/index.ts +10 -0
- package/node_modules/zod/src/v4/locales/is.ts +3 -0
- package/node_modules/zod/src/v4/locales/it.ts +3 -0
- package/node_modules/zod/src/v4/locales/ja.ts +3 -0
- package/node_modules/zod/src/v4/locales/ka.ts +3 -0
- package/node_modules/zod/src/v4/locales/km.ts +3 -0
- package/node_modules/zod/src/v4/locales/kn.ts +124 -0
- package/node_modules/zod/src/v4/locales/ko.ts +3 -0
- package/node_modules/zod/src/v4/locales/lt.ts +2 -0
- package/node_modules/zod/src/v4/locales/mk.ts +3 -0
- package/node_modules/zod/src/v4/locales/ms.ts +3 -0
- package/node_modules/zod/src/v4/locales/ne.ts +126 -0
- package/node_modules/zod/src/v4/locales/nl.ts +3 -0
- package/node_modules/zod/src/v4/locales/nn.ts +119 -0
- package/node_modules/zod/src/v4/locales/no.ts +5 -2
- package/node_modules/zod/src/v4/locales/ota.ts +3 -0
- package/node_modules/zod/src/v4/locales/pl.ts +3 -0
- package/node_modules/zod/src/v4/locales/ps.ts +3 -0
- package/node_modules/zod/src/v4/locales/pt-BR.ts +159 -0
- package/node_modules/zod/src/v4/locales/pt.ts +99 -58
- package/node_modules/zod/src/v4/locales/ro.ts +1 -0
- package/node_modules/zod/src/v4/locales/ru.ts +10 -0
- package/node_modules/zod/src/v4/locales/sk.ts +121 -0
- package/node_modules/zod/src/v4/locales/sl.ts +3 -0
- package/node_modules/zod/src/v4/locales/sv.ts +5 -2
- package/node_modules/zod/src/v4/locales/ta.ts +3 -0
- package/node_modules/zod/src/v4/locales/th.ts +3 -0
- package/node_modules/zod/src/v4/locales/tk.ts +111 -0
- package/node_modules/zod/src/v4/locales/tr.ts +3 -0
- package/node_modules/zod/src/v4/locales/uk.ts +3 -0
- package/node_modules/zod/src/v4/locales/ur.ts +3 -0
- package/node_modules/zod/src/v4/locales/uz.ts +1 -0
- package/node_modules/zod/src/v4/locales/vi.ts +3 -0
- package/node_modules/zod/src/v4/locales/yo.ts +3 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +3 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +3 -0
- package/node_modules/zod/src/v4/mini/checks.ts +1 -0
- package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
- package/node_modules/zod/src/v4/mini/external.ts +10 -1
- package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
- package/node_modules/zod/src/v4/mini/parse.ts +2 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +135 -56
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
- package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
- package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +72 -5
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +21 -0
- package/node_modules/zod/v3/ZodError.cjs +22 -12
- package/node_modules/zod/v3/ZodError.d.cts +1 -1
- package/node_modules/zod/v3/ZodError.d.ts +1 -1
- package/node_modules/zod/v3/ZodError.js +22 -12
- package/node_modules/zod/v3/types.cjs +7 -5
- package/node_modules/zod/v3/types.js +7 -5
- package/node_modules/zod/v4/classic/checks.cjs +2 -1
- package/node_modules/zod/v4/classic/checks.d.cts +1 -1
- package/node_modules/zod/v4/classic/checks.d.ts +1 -1
- package/node_modules/zod/v4/classic/checks.js +1 -1
- package/node_modules/zod/v4/classic/compat.d.cts +9 -11
- package/node_modules/zod/v4/classic/compat.d.ts +9 -11
- package/node_modules/zod/v4/classic/deep-partial.cjs +39 -0
- package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/classic/deep-partial.js +13 -0
- package/node_modules/zod/v4/classic/errors.cjs +43 -34
- package/node_modules/zod/v4/classic/errors.d.cts +3 -4
- package/node_modules/zod/v4/classic/errors.d.ts +3 -4
- package/node_modules/zod/v4/classic/errors.js +43 -34
- package/node_modules/zod/v4/classic/external.cjs +30 -27
- package/node_modules/zod/v4/classic/external.d.cts +5 -2
- package/node_modules/zod/v4/classic/external.d.ts +5 -2
- package/node_modules/zod/v4/classic/external.js +5 -8
- package/node_modules/zod/v4/classic/from-json-schema.cjs +136 -75
- package/node_modules/zod/v4/classic/from-json-schema.js +136 -75
- package/node_modules/zod/v4/classic/in-out.cjs +63 -0
- package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
- package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
- package/node_modules/zod/v4/classic/in-out.js +36 -0
- package/node_modules/zod/v4/classic/index.cjs +2 -2
- package/node_modules/zod/v4/classic/index.d.cts +1 -2
- package/node_modules/zod/v4/classic/index.d.ts +1 -2
- package/node_modules/zod/v4/classic/index.js +2 -2
- package/node_modules/zod/v4/classic/iso.cjs +11 -22
- package/node_modules/zod/v4/classic/iso.d.cts +2 -17
- package/node_modules/zod/v4/classic/iso.d.ts +2 -17
- package/node_modules/zod/v4/classic/iso.js +2 -17
- package/node_modules/zod/v4/classic/parse.cjs +4 -1
- package/node_modules/zod/v4/classic/parse.d.cts +17 -4
- package/node_modules/zod/v4/classic/parse.d.ts +17 -4
- package/node_modules/zod/v4/classic/parse.js +1 -0
- package/node_modules/zod/v4/classic/schemas.cjs +498 -398
- package/node_modules/zod/v4/classic/schemas.d.cts +53 -18
- package/node_modules/zod/v4/classic/schemas.d.ts +53 -18
- package/node_modules/zod/v4/classic/schemas.js +492 -396
- package/node_modules/zod/v4/core/api.cjs +23 -4
- package/node_modules/zod/v4/core/api.d.cts +13 -9
- package/node_modules/zod/v4/core/api.d.ts +13 -9
- package/node_modules/zod/v4/core/api.js +21 -4
- package/node_modules/zod/v4/core/checks.cjs +37 -31
- package/node_modules/zod/v4/core/checks.d.cts +13 -13
- package/node_modules/zod/v4/core/checks.d.ts +13 -13
- package/node_modules/zod/v4/core/checks.js +37 -31
- package/node_modules/zod/v4/core/compile.cjs +1813 -0
- package/node_modules/zod/v4/core/compile.d.cts +51 -0
- package/node_modules/zod/v4/core/compile.d.ts +51 -0
- package/node_modules/zod/v4/core/compile.js +1783 -0
- package/node_modules/zod/v4/core/core.cjs +81 -18
- package/node_modules/zod/v4/core/core.d.cts +16 -4
- package/node_modules/zod/v4/core/core.d.ts +16 -4
- package/node_modules/zod/v4/core/core.js +82 -19
- package/node_modules/zod/v4/core/doc.cjs +5 -7
- package/node_modules/zod/v4/core/doc.d.cts +3 -1
- package/node_modules/zod/v4/core/doc.d.ts +3 -1
- package/node_modules/zod/v4/core/doc.js +5 -7
- package/node_modules/zod/v4/core/errors.cjs +110 -25
- package/node_modules/zod/v4/core/errors.d.cts +4 -0
- package/node_modules/zod/v4/core/errors.d.ts +4 -0
- package/node_modules/zod/v4/core/errors.js +110 -25
- package/node_modules/zod/v4/core/index.cjs +5 -1
- package/node_modules/zod/v4/core/index.d.cts +3 -0
- package/node_modules/zod/v4/core/index.d.ts +3 -0
- package/node_modules/zod/v4/core/index.js +3 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +4 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
- package/node_modules/zod/v4/core/json-schema-generator.js +4 -0
- package/node_modules/zod/v4/core/json-schema-processors.cjs +264 -95
- package/node_modules/zod/v4/core/json-schema-processors.js +243 -97
- package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
- package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
- package/node_modules/zod/v4/core/memoizer.cjs +272 -0
- package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
- package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
- package/node_modules/zod/v4/core/memoizer.js +265 -0
- package/node_modules/zod/v4/core/parse.cjs +96 -34
- package/node_modules/zod/v4/core/parse.d.cts +14 -11
- package/node_modules/zod/v4/core/parse.d.ts +14 -11
- package/node_modules/zod/v4/core/parse.js +94 -33
- package/node_modules/zod/v4/core/regexes.cjs +27 -15
- package/node_modules/zod/v4/core/regexes.d.cts +2 -0
- package/node_modules/zod/v4/core/regexes.d.ts +2 -0
- package/node_modules/zod/v4/core/regexes.js +24 -13
- package/node_modules/zod/v4/core/registries.js +2 -2
- package/node_modules/zod/v4/core/schemas.cjs +537 -326
- package/node_modules/zod/v4/core/schemas.d.cts +100 -31
- package/node_modules/zod/v4/core/schemas.d.ts +100 -31
- package/node_modules/zod/v4/core/schemas.js +526 -325
- package/node_modules/zod/v4/core/to-json-schema.cjs +242 -39
- package/node_modules/zod/v4/core/to-json-schema.d.cts +42 -3
- package/node_modules/zod/v4/core/to-json-schema.d.ts +42 -3
- package/node_modules/zod/v4/core/to-json-schema.js +241 -39
- package/node_modules/zod/v4/core/util.cjs +212 -31
- package/node_modules/zod/v4/core/util.d.cts +58 -1
- package/node_modules/zod/v4/core/util.d.ts +58 -1
- package/node_modules/zod/v4/core/util.js +202 -30
- package/node_modules/zod/v4/core/versions.cjs +2 -2
- package/node_modules/zod/v4/core/versions.d.cts +1 -1
- package/node_modules/zod/v4/core/versions.d.ts +1 -1
- package/node_modules/zod/v4/core/versions.js +2 -2
- package/node_modules/zod/v4/core/visit.cjs +195 -0
- package/node_modules/zod/v4/core/visit.d.cts +30 -0
- package/node_modules/zod/v4/core/visit.d.ts +30 -0
- package/node_modules/zod/v4/core/visit.js +169 -0
- package/node_modules/zod/v4/index.cjs +15 -5
- package/node_modules/zod/v4/index.d.cts +2 -2
- package/node_modules/zod/v4/index.d.ts +2 -2
- package/node_modules/zod/v4/index.js +3 -2
- package/node_modules/zod/v4/locales/ar.cjs +3 -0
- package/node_modules/zod/v4/locales/ar.js +3 -0
- package/node_modules/zod/v4/locales/az.cjs +3 -0
- package/node_modules/zod/v4/locales/az.js +3 -0
- package/node_modules/zod/v4/locales/be.cjs +10 -0
- package/node_modules/zod/v4/locales/be.js +10 -0
- package/node_modules/zod/v4/locales/bg.cjs +3 -0
- package/node_modules/zod/v4/locales/bg.js +3 -0
- package/node_modules/zod/v4/locales/bn.cjs +138 -0
- package/node_modules/zod/v4/locales/bn.d.cts +5 -0
- package/node_modules/zod/v4/locales/bn.d.ts +4 -0
- package/node_modules/zod/v4/locales/bn.js +111 -0
- package/node_modules/zod/v4/locales/ca.cjs +3 -0
- package/node_modules/zod/v4/locales/ca.js +3 -0
- package/node_modules/zod/v4/locales/ckb.cjs +158 -0
- package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
- package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
- package/node_modules/zod/v4/locales/ckb.js +131 -0
- package/node_modules/zod/v4/locales/cs.cjs +3 -0
- package/node_modules/zod/v4/locales/cs.js +3 -0
- package/node_modules/zod/v4/locales/da.cjs +5 -2
- package/node_modules/zod/v4/locales/da.js +5 -2
- package/node_modules/zod/v4/locales/de.cjs +3 -0
- package/node_modules/zod/v4/locales/de.js +3 -0
- package/node_modules/zod/v4/locales/el.cjs +1 -0
- package/node_modules/zod/v4/locales/el.js +1 -0
- package/node_modules/zod/v4/locales/en.cjs +14 -4
- package/node_modules/zod/v4/locales/en.js +14 -4
- package/node_modules/zod/v4/locales/eo.cjs +3 -0
- package/node_modules/zod/v4/locales/eo.js +3 -0
- package/node_modules/zod/v4/locales/es.cjs +2 -0
- package/node_modules/zod/v4/locales/es.js +2 -0
- package/node_modules/zod/v4/locales/fa.cjs +3 -0
- package/node_modules/zod/v4/locales/fa.js +3 -0
- package/node_modules/zod/v4/locales/fi.cjs +3 -0
- package/node_modules/zod/v4/locales/fi.js +3 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +3 -0
- package/node_modules/zod/v4/locales/fr-CA.js +3 -0
- package/node_modules/zod/v4/locales/fr.cjs +16 -14
- package/node_modules/zod/v4/locales/fr.js +16 -14
- package/node_modules/zod/v4/locales/gu.cjs +138 -0
- package/node_modules/zod/v4/locales/gu.d.cts +5 -0
- package/node_modules/zod/v4/locales/gu.d.ts +4 -0
- package/node_modules/zod/v4/locales/gu.js +111 -0
- package/node_modules/zod/v4/locales/he.cjs +5 -0
- package/node_modules/zod/v4/locales/he.js +5 -0
- package/node_modules/zod/v4/locales/hi.cjs +136 -0
- package/node_modules/zod/v4/locales/hi.d.cts +5 -0
- package/node_modules/zod/v4/locales/hi.d.ts +4 -0
- package/node_modules/zod/v4/locales/hi.js +109 -0
- package/node_modules/zod/v4/locales/hr.cjs +2 -0
- package/node_modules/zod/v4/locales/hr.js +2 -0
- package/node_modules/zod/v4/locales/hu.cjs +3 -0
- package/node_modules/zod/v4/locales/hu.js +3 -0
- package/node_modules/zod/v4/locales/hy.cjs +9 -0
- package/node_modules/zod/v4/locales/hy.js +9 -0
- package/node_modules/zod/v4/locales/id.cjs +3 -0
- package/node_modules/zod/v4/locales/id.js +3 -0
- package/node_modules/zod/v4/locales/index.cjs +22 -2
- package/node_modules/zod/v4/locales/index.d.cts +10 -0
- package/node_modules/zod/v4/locales/index.d.ts +10 -0
- package/node_modules/zod/v4/locales/index.js +10 -0
- package/node_modules/zod/v4/locales/is.cjs +3 -0
- package/node_modules/zod/v4/locales/is.js +3 -0
- package/node_modules/zod/v4/locales/it.cjs +3 -0
- package/node_modules/zod/v4/locales/it.js +3 -0
- package/node_modules/zod/v4/locales/ja.cjs +3 -0
- package/node_modules/zod/v4/locales/ja.js +3 -0
- package/node_modules/zod/v4/locales/ka.cjs +3 -0
- package/node_modules/zod/v4/locales/ka.js +3 -0
- package/node_modules/zod/v4/locales/km.cjs +3 -0
- package/node_modules/zod/v4/locales/km.js +3 -0
- package/node_modules/zod/v4/locales/kn.cjs +141 -0
- package/node_modules/zod/v4/locales/kn.d.cts +5 -0
- package/node_modules/zod/v4/locales/kn.d.ts +4 -0
- package/node_modules/zod/v4/locales/kn.js +114 -0
- package/node_modules/zod/v4/locales/ko.cjs +3 -0
- package/node_modules/zod/v4/locales/ko.js +3 -0
- package/node_modules/zod/v4/locales/lt.cjs +2 -0
- package/node_modules/zod/v4/locales/lt.js +2 -0
- package/node_modules/zod/v4/locales/mk.cjs +3 -0
- package/node_modules/zod/v4/locales/mk.js +3 -0
- package/node_modules/zod/v4/locales/ms.cjs +3 -0
- package/node_modules/zod/v4/locales/ms.js +3 -0
- package/node_modules/zod/v4/locales/ne.cjs +136 -0
- package/node_modules/zod/v4/locales/ne.d.cts +5 -0
- package/node_modules/zod/v4/locales/ne.d.ts +4 -0
- package/node_modules/zod/v4/locales/ne.js +109 -0
- package/node_modules/zod/v4/locales/nl.cjs +3 -0
- package/node_modules/zod/v4/locales/nl.js +3 -0
- package/node_modules/zod/v4/locales/nn.cjs +138 -0
- package/node_modules/zod/v4/locales/nn.d.cts +5 -0
- package/node_modules/zod/v4/locales/nn.d.ts +4 -0
- package/node_modules/zod/v4/locales/nn.js +111 -0
- package/node_modules/zod/v4/locales/no.cjs +5 -2
- package/node_modules/zod/v4/locales/no.js +5 -2
- package/node_modules/zod/v4/locales/ota.cjs +3 -0
- package/node_modules/zod/v4/locales/ota.js +3 -0
- package/node_modules/zod/v4/locales/pl.cjs +3 -0
- package/node_modules/zod/v4/locales/pl.js +3 -0
- package/node_modules/zod/v4/locales/ps.cjs +3 -0
- package/node_modules/zod/v4/locales/ps.js +3 -0
- package/node_modules/zod/v4/locales/pt-BR.cjs +168 -0
- package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt-BR.js +141 -0
- package/node_modules/zod/v4/locales/pt.cjs +87 -55
- package/node_modules/zod/v4/locales/pt.js +87 -55
- package/node_modules/zod/v4/locales/ro.cjs +1 -0
- package/node_modules/zod/v4/locales/ro.js +1 -0
- package/node_modules/zod/v4/locales/ru.cjs +10 -0
- package/node_modules/zod/v4/locales/ru.js +10 -0
- package/node_modules/zod/v4/locales/sk.cjs +141 -0
- package/node_modules/zod/v4/locales/sk.d.cts +5 -0
- package/node_modules/zod/v4/locales/sk.d.ts +4 -0
- package/node_modules/zod/v4/locales/sk.js +114 -0
- package/node_modules/zod/v4/locales/sl.cjs +3 -0
- package/node_modules/zod/v4/locales/sl.js +3 -0
- package/node_modules/zod/v4/locales/sv.cjs +5 -2
- package/node_modules/zod/v4/locales/sv.js +5 -2
- package/node_modules/zod/v4/locales/ta.cjs +3 -0
- package/node_modules/zod/v4/locales/ta.js +3 -0
- package/node_modules/zod/v4/locales/th.cjs +3 -0
- package/node_modules/zod/v4/locales/th.js +3 -0
- package/node_modules/zod/v4/locales/tk.cjs +132 -0
- package/node_modules/zod/v4/locales/tk.d.cts +5 -0
- package/node_modules/zod/v4/locales/tk.d.ts +4 -0
- package/node_modules/zod/v4/locales/tk.js +105 -0
- package/node_modules/zod/v4/locales/tr.cjs +3 -0
- package/node_modules/zod/v4/locales/tr.js +3 -0
- package/node_modules/zod/v4/locales/uk.cjs +3 -0
- package/node_modules/zod/v4/locales/uk.js +3 -0
- package/node_modules/zod/v4/locales/ur.cjs +3 -0
- package/node_modules/zod/v4/locales/ur.js +3 -0
- package/node_modules/zod/v4/locales/uz.cjs +1 -0
- package/node_modules/zod/v4/locales/uz.js +1 -0
- package/node_modules/zod/v4/locales/vi.cjs +3 -0
- package/node_modules/zod/v4/locales/vi.js +3 -0
- package/node_modules/zod/v4/locales/yo.cjs +3 -0
- package/node_modules/zod/v4/locales/yo.js +3 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +3 -0
- package/node_modules/zod/v4/locales/zh-CN.js +3 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +3 -0
- package/node_modules/zod/v4/locales/zh-TW.js +3 -0
- package/node_modules/zod/v4/mini/checks.cjs +2 -1
- package/node_modules/zod/v4/mini/checks.d.cts +1 -1
- package/node_modules/zod/v4/mini/checks.d.ts +1 -1
- package/node_modules/zod/v4/mini/checks.js +1 -1
- package/node_modules/zod/v4/mini/deep-partial.cjs +39 -0
- package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
- package/node_modules/zod/v4/mini/deep-partial.js +13 -0
- package/node_modules/zod/v4/mini/external.cjs +12 -1
- package/node_modules/zod/v4/mini/external.d.cts +5 -2
- package/node_modules/zod/v4/mini/external.d.ts +5 -2
- package/node_modules/zod/v4/mini/external.js +3 -1
- package/node_modules/zod/v4/mini/in-out.cjs +63 -0
- package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
- package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
- package/node_modules/zod/v4/mini/in-out.js +36 -0
- package/node_modules/zod/v4/mini/parse.cjs +3 -1
- package/node_modules/zod/v4/mini/parse.d.cts +1 -1
- package/node_modules/zod/v4/mini/parse.d.ts +1 -1
- package/node_modules/zod/v4/mini/parse.js +1 -1
- package/node_modules/zod/v4/mini/schemas.cjs +75 -47
- package/node_modules/zod/v4/mini/schemas.d.cts +43 -13
- package/node_modules/zod/v4/mini/schemas.d.ts +43 -13
- package/node_modules/zod/v4/mini/schemas.js +71 -45
- package/openclaw.plugin.json +15 -0
- package/package.json +9 -7
- package/node_modules/zod/src/v4/core/config.ts +0 -15
- /package/dist/{firecrawl-client-BPFpIblh.js → .setup/firecrawl-client-BPFpIblh.mjs} +0 -0
|
@@ -54,6 +54,33 @@ test("number with constraints", () => {
|
|
|
54
54
|
expect(() => schema.parse(47)).toThrow(); // not multiple of 5
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
+
test("draft-04 boolean exclusive bounds do not emit a redundant inclusive bound", () => {
|
|
58
|
+
const schema = fromJSONSchema({
|
|
59
|
+
type: "number",
|
|
60
|
+
minimum: 5,
|
|
61
|
+
maximum: 10,
|
|
62
|
+
exclusiveMinimum: true,
|
|
63
|
+
exclusiveMaximum: true,
|
|
64
|
+
});
|
|
65
|
+
// exclusive on both ends: boundaries rejected, interior accepted
|
|
66
|
+
expect(() => schema.parse(5)).toThrow();
|
|
67
|
+
expect(() => schema.parse(10)).toThrow();
|
|
68
|
+
expect(schema.parse(7)).toBe(7);
|
|
69
|
+
// the dominated inclusive bound would otherwise report a second, weaker issue alongside the exclusive one
|
|
70
|
+
expect(schema.safeParse(4).error!.issues).toHaveLength(1);
|
|
71
|
+
expect(schema.safeParse(11).error!.issues).toHaveLength(1);
|
|
72
|
+
// the inclusive .min()/.max() must be skipped so only the exclusive checks remain
|
|
73
|
+
const checks = (schema as any)._zod.def.checks.map((c: any) => [
|
|
74
|
+
c._zod.def.check,
|
|
75
|
+
c._zod.def.value,
|
|
76
|
+
c._zod.def.inclusive,
|
|
77
|
+
]);
|
|
78
|
+
expect(checks).toEqual([
|
|
79
|
+
["greater_than", 5, false],
|
|
80
|
+
["less_than", 10, false],
|
|
81
|
+
]);
|
|
82
|
+
});
|
|
83
|
+
|
|
57
84
|
test("integer schema", () => {
|
|
58
85
|
const schema = fromJSONSchema({ type: "integer" });
|
|
59
86
|
expect(schema.parse(42)).toBe(42);
|
|
@@ -127,11 +154,76 @@ test("tuple with prefixItems (draft-2020-12)", () => {
|
|
|
127
154
|
type: "array",
|
|
128
155
|
prefixItems: [{ type: "string" }, { type: "number" }],
|
|
129
156
|
});
|
|
157
|
+
expect(schema.parse([])).toEqual([]);
|
|
158
|
+
expect(schema.parse(["hello"])).toEqual(["hello"]);
|
|
130
159
|
expect(schema.parse(["hello", 42])).toEqual(["hello", 42]);
|
|
131
|
-
|
|
160
|
+
// no `items`, so the tail is unconstrained
|
|
161
|
+
expect(schema.parse(["hello", 42, "extra"])).toEqual(["hello", 42, "extra"]);
|
|
162
|
+
expect(() => schema.parse([1])).toThrow();
|
|
132
163
|
expect(() => schema.parse(["hello", "world"])).toThrow();
|
|
133
164
|
});
|
|
134
165
|
|
|
166
|
+
test("tuple with prefixItems and minItems (draft-2020-12)", () => {
|
|
167
|
+
const partialItems = fromJSONSchema({
|
|
168
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
169
|
+
type: "array",
|
|
170
|
+
prefixItems: [{ type: "string" }, { type: "number" }],
|
|
171
|
+
minItems: 1,
|
|
172
|
+
});
|
|
173
|
+
expect(() => partialItems.parse([])).toThrow();
|
|
174
|
+
expect(partialItems.parse(["hello"])).toEqual(["hello"]);
|
|
175
|
+
|
|
176
|
+
const allRequired = fromJSONSchema({
|
|
177
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
178
|
+
type: "array",
|
|
179
|
+
prefixItems: [{ type: "string" }, { type: "number" }],
|
|
180
|
+
minItems: 2,
|
|
181
|
+
});
|
|
182
|
+
expect(() => allRequired.parse(["hello"])).toThrow();
|
|
183
|
+
expect(allRequired.parse(["hello", 42])).toEqual(["hello", 42]);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
test("tuple with prefixItems allows extra items by default (draft-2020-12)", () => {
|
|
187
|
+
const schema = fromJSONSchema({
|
|
188
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
189
|
+
type: "array",
|
|
190
|
+
prefixItems: [{ type: "string" }],
|
|
191
|
+
});
|
|
192
|
+
expect(schema.parse(["hello", 42, true])).toEqual(["hello", 42, true]);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test("tuple with prefixItems respects items schema (draft-2020-12)", () => {
|
|
196
|
+
const schema = fromJSONSchema({
|
|
197
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
198
|
+
type: "array",
|
|
199
|
+
prefixItems: [{ type: "string" }],
|
|
200
|
+
items: { type: "number" },
|
|
201
|
+
});
|
|
202
|
+
expect(schema.parse(["hello", 1, 2])).toEqual(["hello", 1, 2]);
|
|
203
|
+
expect(() => schema.parse(["hello", 1, "extra"])).toThrow();
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
test("tuple with prefixItems and items true allows extra items (draft-2020-12)", () => {
|
|
207
|
+
const schema = fromJSONSchema({
|
|
208
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
209
|
+
type: "array",
|
|
210
|
+
prefixItems: [{ type: "string" }, { type: "number" }],
|
|
211
|
+
items: true,
|
|
212
|
+
});
|
|
213
|
+
expect(schema.parse(["hello", 42, "extra", true])).toEqual(["hello", 42, "extra", true]);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test("tuple with prefixItems and items false rejects extra items (draft-2020-12)", () => {
|
|
217
|
+
const schema = fromJSONSchema({
|
|
218
|
+
$schema: "https://json-schema.org/draft/2020-12/schema",
|
|
219
|
+
type: "array",
|
|
220
|
+
prefixItems: [{ type: "string" }],
|
|
221
|
+
items: false,
|
|
222
|
+
});
|
|
223
|
+
expect(schema.parse(["hello"])).toEqual(["hello"]);
|
|
224
|
+
expect(() => schema.parse(["hello", 42])).toThrow();
|
|
225
|
+
});
|
|
226
|
+
|
|
135
227
|
test("tuple with items array (draft-7)", () => {
|
|
136
228
|
const schema = fromJSONSchema({
|
|
137
229
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
@@ -139,10 +231,66 @@ test("tuple with items array (draft-7)", () => {
|
|
|
139
231
|
items: [{ type: "string" }, { type: "number" }],
|
|
140
232
|
additionalItems: false,
|
|
141
233
|
});
|
|
234
|
+
expect(schema.parse([])).toEqual([]);
|
|
235
|
+
expect(schema.parse(["hello"])).toEqual(["hello"]);
|
|
142
236
|
expect(schema.parse(["hello", 42])).toEqual(["hello", 42]);
|
|
237
|
+
expect(() => schema.parse([1])).toThrow();
|
|
238
|
+
expect(() => schema.parse(["hello", "world"])).toThrow();
|
|
143
239
|
expect(() => schema.parse(["hello", 42, "extra"])).toThrow();
|
|
144
240
|
});
|
|
145
241
|
|
|
242
|
+
test("tuple with items array and minItems (draft-7)", () => {
|
|
243
|
+
const partialItems = fromJSONSchema({
|
|
244
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
245
|
+
type: "array",
|
|
246
|
+
items: [{ type: "string" }, { type: "number" }],
|
|
247
|
+
additionalItems: false,
|
|
248
|
+
minItems: 1,
|
|
249
|
+
});
|
|
250
|
+
expect(() => partialItems.parse([])).toThrow();
|
|
251
|
+
expect(partialItems.parse(["hello"])).toEqual(["hello"]);
|
|
252
|
+
|
|
253
|
+
const allRequired = fromJSONSchema({
|
|
254
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
255
|
+
type: "array",
|
|
256
|
+
items: [{ type: "string" }, { type: "number" }],
|
|
257
|
+
additionalItems: false,
|
|
258
|
+
minItems: 2,
|
|
259
|
+
});
|
|
260
|
+
expect(() => allRequired.parse(["hello"])).toThrow();
|
|
261
|
+
expect(allRequired.parse(["hello", 42])).toEqual(["hello", 42]);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
test("tuple with items array allows extra items by default (draft-7)", () => {
|
|
265
|
+
const schema = fromJSONSchema({
|
|
266
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
267
|
+
type: "array",
|
|
268
|
+
items: [{ type: "string" }],
|
|
269
|
+
});
|
|
270
|
+
expect(schema.parse(["hello", 42, true])).toEqual(["hello", 42, true]);
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
test("tuple with items array and additionalItems true allows extra items (draft-7)", () => {
|
|
274
|
+
const schema = fromJSONSchema({
|
|
275
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
276
|
+
type: "array",
|
|
277
|
+
items: [{ type: "string" }, { type: "number" }],
|
|
278
|
+
additionalItems: true,
|
|
279
|
+
});
|
|
280
|
+
expect(schema.parse(["hello", 42, "extra", true])).toEqual(["hello", 42, "extra", true]);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
test("tuple with items array respects additionalItems schema (draft-7)", () => {
|
|
284
|
+
const schema = fromJSONSchema({
|
|
285
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
286
|
+
type: "array",
|
|
287
|
+
items: [{ type: "string" }],
|
|
288
|
+
additionalItems: { type: "number" },
|
|
289
|
+
});
|
|
290
|
+
expect(schema.parse(["hello", 1, 2])).toEqual(["hello", 1, 2]);
|
|
291
|
+
expect(() => schema.parse(["hello", 1, "extra"])).toThrow();
|
|
292
|
+
});
|
|
293
|
+
|
|
146
294
|
test("enum schema", () => {
|
|
147
295
|
const schema = fromJSONSchema({
|
|
148
296
|
enum: ["red", "green", "blue"],
|
|
@@ -299,6 +447,15 @@ test("local $ref resolution", () => {
|
|
|
299
447
|
expect(() => schema.parse({})).toThrow();
|
|
300
448
|
});
|
|
301
449
|
|
|
450
|
+
test("local $ref resolution unescapes JSON Pointer tokens", () => {
|
|
451
|
+
// `~1` must be decoded before `~0`, so the id "a~1b" survives as itself and not as "a/b".
|
|
452
|
+
for (const id of ["Shared/User", "My~Model", "a~b/c", "a~1b"]) {
|
|
453
|
+
const inner = z.object({ name: z.string() }).meta({ id });
|
|
454
|
+
const schema = fromJSONSchema(z.toJSONSchema(z.object({ inner })));
|
|
455
|
+
expect(schema.parse({ inner: { name: "John" } })).toEqual({ inner: { name: "John" } });
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
|
|
302
459
|
test("circular $ref with lazy", () => {
|
|
303
460
|
const schema = fromJSONSchema({
|
|
304
461
|
$defs: {
|
|
@@ -336,10 +493,156 @@ test("patternProperties", () => {
|
|
|
336
493
|
expect(result.S_age).toBe("30");
|
|
337
494
|
});
|
|
338
495
|
|
|
496
|
+
test("propertyNames with enum does not require keys", () => {
|
|
497
|
+
const schema = fromJSONSchema({
|
|
498
|
+
type: "object",
|
|
499
|
+
propertyNames: { enum: ["a", "b"] },
|
|
500
|
+
additionalProperties: { type: "string" },
|
|
501
|
+
});
|
|
502
|
+
expect(schema.parse({ a: "x" })).toEqual({ a: "x" });
|
|
503
|
+
expect(schema.parse({ b: "y" })).toEqual({ b: "y" });
|
|
504
|
+
expect(schema.parse({})).toEqual({});
|
|
505
|
+
expect(() => schema.parse({ c: "z" })).toThrow();
|
|
506
|
+
});
|
|
507
|
+
|
|
508
|
+
test("propertyNames with enum alongside properties", () => {
|
|
509
|
+
const schema = fromJSONSchema({
|
|
510
|
+
type: "object",
|
|
511
|
+
properties: { a: { type: "string" } },
|
|
512
|
+
propertyNames: { enum: ["a", "b"] },
|
|
513
|
+
additionalProperties: { type: "string" },
|
|
514
|
+
});
|
|
515
|
+
expect(schema.parse({ a: "x" })).toEqual({ a: "x" });
|
|
516
|
+
expect(schema.parse({})).toEqual({});
|
|
517
|
+
expect(() => schema.parse({ c: "z" })).toThrow();
|
|
518
|
+
expect(() => schema.parse({ a: "x", c: "z" })).toThrow();
|
|
519
|
+
});
|
|
520
|
+
|
|
521
|
+
test("propertyNames with enum still honors required", () => {
|
|
522
|
+
const schema = fromJSONSchema({
|
|
523
|
+
type: "object",
|
|
524
|
+
properties: { a: { type: "string" }, b: { type: "string" } },
|
|
525
|
+
required: ["a"],
|
|
526
|
+
propertyNames: { enum: ["a", "b"] },
|
|
527
|
+
additionalProperties: { type: "string" },
|
|
528
|
+
});
|
|
529
|
+
expect(schema.parse({ a: "x" })).toEqual({ a: "x" });
|
|
530
|
+
expect(schema.parse({ a: "x", b: "y" })).toEqual({ a: "x", b: "y" });
|
|
531
|
+
expect(() => schema.parse({})).toThrow();
|
|
532
|
+
expect(() => schema.parse({ b: "y" })).toThrow();
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
test("propertyNames does not apply additionalProperties to declared properties", () => {
|
|
536
|
+
const schema = fromJSONSchema({
|
|
537
|
+
type: "object",
|
|
538
|
+
properties: { a: { type: "number" } },
|
|
539
|
+
propertyNames: { enum: ["a", "b"] },
|
|
540
|
+
additionalProperties: { type: "string" },
|
|
541
|
+
});
|
|
542
|
+
expect(schema.parse({ a: 1 })).toEqual({ a: 1 });
|
|
543
|
+
expect(schema.parse({ a: 1, b: "x" })).toEqual({ a: 1, b: "x" });
|
|
544
|
+
expect(() => schema.parse({ b: 1 })).toThrow();
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
test("propertyNames alongside additionalProperties: false", () => {
|
|
548
|
+
const schema = fromJSONSchema({
|
|
549
|
+
type: "object",
|
|
550
|
+
properties: { a: { type: "string" } },
|
|
551
|
+
propertyNames: { enum: ["a", "b"] },
|
|
552
|
+
additionalProperties: false,
|
|
553
|
+
});
|
|
554
|
+
expect(schema.parse({ a: "x" })).toEqual({ a: "x" });
|
|
555
|
+
expect(() => schema.parse({ a: "x", b: "y" })).toThrow();
|
|
556
|
+
expect(() => schema.parse({ c: "z" })).toThrow();
|
|
557
|
+
});
|
|
558
|
+
|
|
559
|
+
test("propertyNames alongside patternProperties", () => {
|
|
560
|
+
const schema = fromJSONSchema({
|
|
561
|
+
type: "object",
|
|
562
|
+
patternProperties: { "^S_": { type: "string" } },
|
|
563
|
+
propertyNames: { type: "string", pattern: "^S_" },
|
|
564
|
+
});
|
|
565
|
+
expect(schema.parse({ S_a: "x" })).toEqual({ S_a: "x" });
|
|
566
|
+
expect(() => schema.parse({ S_a: 1 })).toThrow();
|
|
567
|
+
expect(() => schema.parse({ other: "x" })).toThrow();
|
|
568
|
+
});
|
|
569
|
+
|
|
570
|
+
test("propertyNames rejects keys the object parse would drop or synthesize", () => {
|
|
571
|
+
const schema = fromJSONSchema({ type: "object", propertyNames: { enum: ["a"] } });
|
|
572
|
+
// An object parse strips `__proto__`, so the guard has to see the raw input.
|
|
573
|
+
expect(() => schema.parse(JSON.parse('{"__proto__":1}'))).toThrow();
|
|
574
|
+
|
|
575
|
+
// A property `default` adds a key that was never in the instance.
|
|
576
|
+
const withDefault = fromJSONSchema({
|
|
577
|
+
type: "object",
|
|
578
|
+
properties: { AB: { type: "string", default: "x" } },
|
|
579
|
+
propertyNames: { type: "string", pattern: "^[a-z]+$" },
|
|
580
|
+
});
|
|
581
|
+
expect(withDefault.parse({})).toEqual({ AB: "x" });
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
test("propertyNames subschema without a type still constrains keys", () => {
|
|
585
|
+
const schema = fromJSONSchema({
|
|
586
|
+
type: "object",
|
|
587
|
+
propertyNames: { pattern: "^[A-Za-z_][A-Za-z0-9_]*$" },
|
|
588
|
+
});
|
|
589
|
+
expect(schema.parse({ valid_key: "x" })).toEqual({ valid_key: "x" });
|
|
590
|
+
expect(() => schema.parse({ "001 invalid": "x" })).toThrow();
|
|
591
|
+
});
|
|
592
|
+
|
|
593
|
+
test("boolean propertyNames", () => {
|
|
594
|
+
expect(() => fromJSONSchema({ type: "object", propertyNames: false }).parse({ a: 1 })).toThrow();
|
|
595
|
+
expect(fromJSONSchema({ type: "object", propertyNames: false }).parse({})).toEqual({});
|
|
596
|
+
expect(fromJSONSchema({ type: "object", propertyNames: true }).parse({ anything: 1 })).toEqual({ anything: 1 });
|
|
597
|
+
});
|
|
598
|
+
|
|
599
|
+
test("propertyNames metadata is not attached where it is inert", () => {
|
|
600
|
+
// Not an object: nothing enforces it, so it must not be advertised either.
|
|
601
|
+
expect(z.toJSONSchema(fromJSONSchema({ type: "string", propertyNames: { enum: ["a"] } }))).not.toHaveProperty(
|
|
602
|
+
"propertyNames"
|
|
603
|
+
);
|
|
604
|
+
|
|
605
|
+
// A $ref target is shared by every reference to it; metadata must not leak onto it.
|
|
606
|
+
const shared = z.toJSONSchema(
|
|
607
|
+
fromJSONSchema({
|
|
608
|
+
$defs: { N: { type: "object", properties: { v: { type: "string" } } } },
|
|
609
|
+
type: "object",
|
|
610
|
+
properties: { a: { $ref: "#/$defs/N", propertyNames: { enum: ["v"] } }, b: { $ref: "#/$defs/N" } },
|
|
611
|
+
})
|
|
612
|
+
) as any;
|
|
613
|
+
expect(shared.properties.b).not.toHaveProperty("propertyNames");
|
|
614
|
+
});
|
|
615
|
+
|
|
616
|
+
test("propertyNames survives a toJSONSchema round trip", () => {
|
|
617
|
+
const roundTripped = z.toJSONSchema(
|
|
618
|
+
fromJSONSchema({
|
|
619
|
+
type: "object",
|
|
620
|
+
propertyNames: { enum: ["a", "b"] },
|
|
621
|
+
additionalProperties: { type: "string" },
|
|
622
|
+
})
|
|
623
|
+
) as Record<string, unknown>;
|
|
624
|
+
expect(roundTripped.propertyNames).toEqual({ enum: ["a", "b"] });
|
|
625
|
+
expect(roundTripped.required).toBeUndefined();
|
|
626
|
+
|
|
627
|
+
// The key guard is a pipe; neither side may swallow the object it wraps.
|
|
628
|
+
for (const io of ["input", "output"] as const) {
|
|
629
|
+
const out = z.toJSONSchema(
|
|
630
|
+
fromJSONSchema({
|
|
631
|
+
type: "object",
|
|
632
|
+
properties: { a: { type: "string" } },
|
|
633
|
+
propertyNames: { enum: ["a", "b"] },
|
|
634
|
+
additionalProperties: { type: "string" },
|
|
635
|
+
}),
|
|
636
|
+
{ io }
|
|
637
|
+
) as Record<string, unknown>;
|
|
638
|
+
expect(out.type).toBe("object");
|
|
639
|
+
expect(out.properties).toEqual({ a: { type: "string" } });
|
|
640
|
+
expect(out.propertyNames).toEqual({ enum: ["a", "b"] });
|
|
641
|
+
}
|
|
642
|
+
});
|
|
643
|
+
|
|
339
644
|
test("patternProperties with regular properties", () => {
|
|
340
|
-
// Note: When patternProperties is combined with properties, the intersection
|
|
341
|
-
// validates all keys against the pattern. This test uses a pattern that
|
|
342
|
-
// matches the regular property name as well.
|
|
645
|
+
// Note: When patternProperties is combined with properties, the intersection validates all keys against the pattern. This test uses a pattern that matches the regular property name as well.
|
|
343
646
|
const schema = fromJSONSchema({
|
|
344
647
|
type: "object",
|
|
345
648
|
properties: {
|
|
@@ -387,13 +690,55 @@ test("multiple overlapping patternProperties", () => {
|
|
|
387
690
|
expect(() => schema.parse({ S_N: "ab" })).toThrow(); // too short for ^S_N pattern
|
|
388
691
|
});
|
|
389
692
|
|
|
693
|
+
test("patternProperties with additionalProperties false", () => {
|
|
694
|
+
const schema = fromJSONSchema({
|
|
695
|
+
type: "object",
|
|
696
|
+
patternProperties: {
|
|
697
|
+
"^S_": { type: "string" },
|
|
698
|
+
},
|
|
699
|
+
additionalProperties: false,
|
|
700
|
+
});
|
|
701
|
+
expect(schema.parse({ S_name: "ok" })).toEqual({ S_name: "ok" });
|
|
702
|
+
expect(() => schema.parse({ X_A: false })).toThrow();
|
|
703
|
+
expect(() => schema.parse({ S_name: 1 })).toThrow();
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
test("patternProperties and properties with additionalProperties false", () => {
|
|
707
|
+
const schema = fromJSONSchema({
|
|
708
|
+
type: "object",
|
|
709
|
+
properties: {
|
|
710
|
+
name: { type: "string" },
|
|
711
|
+
},
|
|
712
|
+
patternProperties: {
|
|
713
|
+
"^S_": { type: "string" },
|
|
714
|
+
},
|
|
715
|
+
additionalProperties: false,
|
|
716
|
+
required: ["name"],
|
|
717
|
+
});
|
|
718
|
+
expect(schema.parse({ name: "ok", S_count: "1" })).toEqual({ name: "ok", S_count: "1" });
|
|
719
|
+
expect(() => schema.parse({ name: "ok", S_count: 1 })).toThrow();
|
|
720
|
+
expect(() => schema.parse({ name: "ok", other: "value" })).toThrow();
|
|
721
|
+
});
|
|
722
|
+
|
|
723
|
+
test("multiple patternProperties with additionalProperties false", () => {
|
|
724
|
+
const schema = fromJSONSchema({
|
|
725
|
+
type: "object",
|
|
726
|
+
patternProperties: {
|
|
727
|
+
"^S_": { type: "string" },
|
|
728
|
+
"^N_": { type: "number" },
|
|
729
|
+
},
|
|
730
|
+
additionalProperties: false,
|
|
731
|
+
});
|
|
732
|
+
expect(schema.parse({ S_a: "a", N_b: 1 })).toEqual({ S_a: "a", N_b: 1 });
|
|
733
|
+
expect(() => schema.parse({ S_a: "a", N_b: 1, other: "value" })).toThrow();
|
|
734
|
+
});
|
|
735
|
+
|
|
390
736
|
test("default value", () => {
|
|
391
737
|
const schema = fromJSONSchema({
|
|
392
738
|
type: "string",
|
|
393
739
|
default: "hello",
|
|
394
740
|
});
|
|
395
|
-
// Default is applied during parsing if value is missing/undefined
|
|
396
|
-
// This depends on Zod's default behavior
|
|
741
|
+
// Default is applied during parsing if value is missing/undefined. This depends on Zod's default behavior
|
|
397
742
|
expect(schema.parse("world")).toBe("world");
|
|
398
743
|
});
|
|
399
744
|
|
|
@@ -457,6 +802,53 @@ test("string format - uuid", () => {
|
|
|
457
802
|
expect(schema.parse(uuid)).toBe(uuid);
|
|
458
803
|
});
|
|
459
804
|
|
|
805
|
+
test("string format - date-time", () => {
|
|
806
|
+
const schema = fromJSONSchema({
|
|
807
|
+
type: "string",
|
|
808
|
+
format: "date-time",
|
|
809
|
+
});
|
|
810
|
+
expect(schema.safeParse("2026-07-29T14:30:00Z").success).toBe(true);
|
|
811
|
+
expect(schema.safeParse("2026-07-29T16:30:00+02:00").success).toBe(true);
|
|
812
|
+
expect(schema.safeParse("2026-07-29T14:30:00").success).toBe(false);
|
|
813
|
+
expect(schema.safeParse("2026-07-29T16:30:00+0200").success).toBe(false);
|
|
814
|
+
|
|
815
|
+
const zuluOnly = fromJSONSchema({
|
|
816
|
+
type: "string",
|
|
817
|
+
format: "date-time",
|
|
818
|
+
pattern: "Z$",
|
|
819
|
+
});
|
|
820
|
+
expect(zuluOnly.safeParse("2026-07-29T14:30:00Z").success).toBe(true);
|
|
821
|
+
expect(zuluOnly.safeParse("2026-07-29T16:30:00+02:00").success).toBe(false);
|
|
822
|
+
expect(zuluOnly.safeParse("garbageZ").success).toBe(false);
|
|
823
|
+
|
|
824
|
+
const roundTripped = fromJSONSchema(z.toJSONSchema(z.iso.datetime({ offset: true })));
|
|
825
|
+
expect(roundTripped.safeParse("2026-07-29T16:30:00+02:00").success).toBe(true);
|
|
826
|
+
});
|
|
827
|
+
|
|
828
|
+
test("string format - time", () => {
|
|
829
|
+
const schema = fromJSONSchema({
|
|
830
|
+
type: "string",
|
|
831
|
+
format: "time",
|
|
832
|
+
});
|
|
833
|
+
// full-time, so seconds and an offset are both required
|
|
834
|
+
expect(schema.safeParse("14:30:00Z").success).toBe(true);
|
|
835
|
+
expect(schema.safeParse("16:30:00+02:00").success).toBe(true);
|
|
836
|
+
expect(schema.safeParse("16:30:00.123-05:30").success).toBe(true);
|
|
837
|
+
expect(schema.safeParse("14:30:00").success).toBe(false);
|
|
838
|
+
expect(schema.safeParse("14:30Z").success).toBe(false);
|
|
839
|
+
expect(schema.safeParse("16:30:00+0200").success).toBe(false);
|
|
840
|
+
expect(schema.safeParse("16:30:00+24:00").success).toBe(false);
|
|
841
|
+
});
|
|
842
|
+
|
|
843
|
+
test("string format - hostname", () => {
|
|
844
|
+
const schema = fromJSONSchema({
|
|
845
|
+
type: "string",
|
|
846
|
+
format: "hostname",
|
|
847
|
+
});
|
|
848
|
+
expect(schema.parse("example.com")).toBe("example.com");
|
|
849
|
+
expect(() => schema.parse("not a hostname!")).toThrow();
|
|
850
|
+
});
|
|
851
|
+
|
|
460
852
|
test("exclusiveMinimum and exclusiveMaximum", () => {
|
|
461
853
|
const schema = fromJSONSchema({
|
|
462
854
|
type: "number",
|
|
@@ -648,8 +1040,7 @@ test("metadata on nested schemas", () => {
|
|
|
648
1040
|
// Verify parent schema has its metadata
|
|
649
1041
|
expect(customRegistry.get(parentSchema)?.title).toBe("User");
|
|
650
1042
|
|
|
651
|
-
// We can't easily access nested schemas directly, but we can verify
|
|
652
|
-
// the registry is being used correctly by checking a separate schema
|
|
1043
|
+
// We can't easily access nested schemas directly, but we can verify the registry is being used correctly by checking a separate schema
|
|
653
1044
|
const simpleSchema = fromJSONSchema(
|
|
654
1045
|
{
|
|
655
1046
|
type: "string",
|
|
@@ -673,8 +1064,7 @@ test("no metadata added when no unrecognized keys", () => {
|
|
|
673
1064
|
{ registry: customRegistry }
|
|
674
1065
|
);
|
|
675
1066
|
|
|
676
|
-
// description is handled via .describe(), so it shouldn't be in metadata
|
|
677
|
-
// All other keys are recognized, so no metadata should be added
|
|
1067
|
+
// description is handled via .describe(), so it shouldn't be in metadata. All other keys are recognized, so no metadata should be added
|
|
678
1068
|
expect(customRegistry.get(schema)).toBeUndefined();
|
|
679
1069
|
});
|
|
680
1070
|
|
|
@@ -893,3 +1283,28 @@ test("Date default is coerced to its JSON string form", () => {
|
|
|
893
1283
|
const schema = fromJSONSchema({ type: "string", default: date as any });
|
|
894
1284
|
expect(schema.parse(undefined)).toBe(date.toISOString());
|
|
895
1285
|
});
|
|
1286
|
+
|
|
1287
|
+
// An object literal can't express an own "__proto__" key — `{ __proto__: x }` sets the literal's prototype instead. JSON.parse is both the realistic source of a JSON Schema and the only way to write these cases.
|
|
1288
|
+
test("required __proto__ property is represented in the shape but stripped during parsing", () => {
|
|
1289
|
+
const schema = fromJSONSchema(
|
|
1290
|
+
JSON.parse(`{
|
|
1291
|
+
"type": "object",
|
|
1292
|
+
"properties": { "__proto__": { "type": "string", "const": "admin" }, "role": { "type": "string" } },
|
|
1293
|
+
"required": ["__proto__", "role"]
|
|
1294
|
+
}`)
|
|
1295
|
+
);
|
|
1296
|
+
|
|
1297
|
+
expect(Object.prototype.hasOwnProperty.call((schema as z.ZodObject).shape, "__proto__")).toBe(true);
|
|
1298
|
+
expect(schema.parse({ role: "x" })).toEqual({ role: "x" });
|
|
1299
|
+
expect(schema.parse(JSON.parse(`{ "role": "x", "__proto__": "wrong" }`))).toEqual({ role: "x" });
|
|
1300
|
+
expect(schema.parse(JSON.parse(`{ "role": "x", "__proto__": "admin" }`))).toEqual({ role: "x" });
|
|
1301
|
+
});
|
|
1302
|
+
|
|
1303
|
+
test("__proto__ annotation key reaches the registry", () => {
|
|
1304
|
+
const registry = z.registry<Record<string, unknown>>();
|
|
1305
|
+
const schema = fromJSONSchema(JSON.parse(`{ "type": "string", "__proto__": { "custom": 1 } }`), { registry });
|
|
1306
|
+
|
|
1307
|
+
const meta = registry.get(schema)!;
|
|
1308
|
+
expect(Object.prototype.hasOwnProperty.call(meta, "__proto__")).toBe(true);
|
|
1309
|
+
expect(meta.__proto__).toEqual({ custom: 1 });
|
|
1310
|
+
});
|
|
@@ -358,3 +358,34 @@ test("extra parameters with rest", () => {
|
|
|
358
358
|
const filteredList = ["apple", "orange", "pear", "banana", "strawberry"].filter(maxLength5);
|
|
359
359
|
expect(filteredList.length).toEqual(2);
|
|
360
360
|
});
|
|
361
|
+
|
|
362
|
+
test("implement exposes the function schema at runtime", () => {
|
|
363
|
+
const schema = z.function({ input: [z.string()], output: z.number() });
|
|
364
|
+
const fn = schema.implement((s) => s.length);
|
|
365
|
+
|
|
366
|
+
// Deliberately absent from implement()'s return type: reaching `_zod` takes a cast, so an implemented function never reads as a schema to TypeScript even though it does at runtime.
|
|
367
|
+
type HasZod = "_zod" extends keyof typeof fn ? true : false;
|
|
368
|
+
expectTypeOf<HasZod>().toEqualTypeOf<false>();
|
|
369
|
+
|
|
370
|
+
expect((fn as any)._zod).toBe(schema._zod);
|
|
371
|
+
expect((fn as any)._zod.def.input).toBe(schema._def.input);
|
|
372
|
+
expect((fn as any)._zod.def.output).toBe(schema._def.output);
|
|
373
|
+
expect(Object.keys(fn)).toEqual([]);
|
|
374
|
+
expect(Object.getOwnPropertyDescriptor(fn, "_zod")).toMatchObject({ enumerable: false, writable: false });
|
|
375
|
+
expect(fn("asdf")).toBe(4);
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
test("implementAsync exposes the function schema at runtime", async () => {
|
|
379
|
+
const schema = z.function({ input: [z.string()], output: z.promise(z.number()) });
|
|
380
|
+
const fn = schema.implementAsync(async (s) => s.length);
|
|
381
|
+
|
|
382
|
+
expect((fn as any)._zod).toBe(schema._zod);
|
|
383
|
+
await expect(fn("asdf")).resolves.toBe(4);
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
test("parsing through a function schema exposes it the same way", () => {
|
|
387
|
+
const schema = z.function({ input: [z.string()], output: z.number() });
|
|
388
|
+
const { handler } = z.object({ handler: schema }).parse({ handler: (s: string) => s.length });
|
|
389
|
+
|
|
390
|
+
expect((handler as any)._zod).toBe(schema._zod);
|
|
391
|
+
});
|
|
@@ -7,11 +7,7 @@ import * as core from "zod/v4/core";
|
|
|
7
7
|
// bundled copies of Zod in a monorepo. This mirrors the existing
|
|
8
8
|
// `globalRegistry` -> `globalThis.__zod_globalRegistry` treatment.
|
|
9
9
|
//
|
|
10
|
-
// See #5789 for the footgun this fixes: users with both CJS and ESM
|
|
11
|
-
// instances of Zod loaded had to call `z.config({ jitless: true })`
|
|
12
|
-
// twice — once per instance — because each module-scope `globalConfig`
|
|
13
|
-
// was a different object. With this change, one call updates state seen
|
|
14
|
-
// by every loaded copy.
|
|
10
|
+
// See #5789 for the footgun this fixes: users with both CJS and ESM instances of Zod loaded had to call `z.config({ jitless: true })` twice — once per instance — because each module-scope `globalConfig` was a different object. With this change, one call updates state seen by every loaded copy.
|
|
15
11
|
|
|
16
12
|
afterEach(() => {
|
|
17
13
|
// Don't leak config mutations into other test files.
|
|
@@ -28,10 +24,7 @@ test("z.config writes are observed via globalThis.__zod_globalConfig", () => {
|
|
|
28
24
|
});
|
|
29
25
|
|
|
30
26
|
test("pre-set globalThis.__zod_globalConfig is preserved on import", () => {
|
|
31
|
-
// Object identity is preserved across reloads of the module: anyone who
|
|
32
|
-
// pre-populates `globalThis.__zod_globalConfig` before Zod loads (e.g.
|
|
33
|
-
// an inline script before the bundle) keeps that exact object as the
|
|
34
|
-
// source of truth. Mutating it directly is equivalent to z.config().
|
|
27
|
+
// Object identity is preserved across reloads of the module: anyone who pre-populates `globalThis.__zod_globalConfig` before Zod loads (e.g. an inline script before the bundle) keeps that exact object as the source of truth. Mutating it directly is equivalent to z.config().
|
|
35
28
|
const direct = (globalThis as any).__zod_globalConfig;
|
|
36
29
|
direct.jitless = true;
|
|
37
30
|
expect(core.globalConfig.jitless).toBe(true);
|
|
@@ -46,8 +46,7 @@ test("hash() API — types and runtime across all alg/enc combinations", async (
|
|
|
46
46
|
expect(() => hash(alg, { enc: "base64" }).parse(hex)).toThrow();
|
|
47
47
|
expect(() => hash(alg, { enc: "base64url" }).parse(base64)).toThrow();
|
|
48
48
|
|
|
49
|
-
// Encoding-specific failures
|
|
50
|
-
// hex: uppercase allowed, wrong length should fail
|
|
49
|
+
// Encoding-specific failures hex: uppercase allowed, wrong length should fail
|
|
51
50
|
hash(alg, { enc: "hex" }).parse(hex.toUpperCase());
|
|
52
51
|
expect(() => hash(alg, { enc: "hex" }).parse(hex.slice(0, -1))).toThrow();
|
|
53
52
|
|