@openclaw/feishu 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 +3 -0
- package/assets/icon.png +0 -0
- package/dist/{accounts-cCMNFBKg.js → .setup/accounts-DmU0xYPx.mjs} +1 -1
- package/dist/{app-registration-BI99e_JI.js → .setup/app-registration-Bv4mvauR.mjs} +1 -1
- package/dist/{channel-DrAqd5ED.js → .setup/channel-C1KrXXJa.mjs} +100 -99
- package/dist/{channel.runtime-BZzuDlOS.js → .setup/channel.runtime-Bizuv7WZ.mjs} +32 -18
- package/dist/{chat-BZSnEtgb.js → .setup/chat-dWJYS63b.mjs} +89 -88
- package/dist/{client-DMbIL3UH.js → .setup/client-DCwNVFZg.mjs} +128 -11
- package/dist/{conversation-id-VYgGQ-GX.js → .setup/conversation-id-H-lUayji.mjs} +49 -14
- package/dist/{monitor-DSGtOPio.js → .setup/monitor-C69OLzgO.mjs} +4 -4
- package/dist/{monitor.account-BRDUsS_q.js → .setup/monitor.account-zwHb3HKM.mjs} +76 -52
- package/dist/{probe-D_SatdZl.js → .setup/probe-bdidyhAn.mjs} +2 -2
- package/dist/{reply-delivery-result-BXEmtKpf.js → .setup/reply-delivery-result-DFjxGLgX.mjs} +162 -163
- package/dist/.setup/runtime-setter-api-CG-RC4_r.mjs +3 -0
- package/dist/.setup/secret-contract-api-jmCkqVLc.mjs +3 -0
- package/dist/{security-audit-DKfR4Cv3.js → .setup/security-audit-CmiKKfU-.mjs} +1 -1
- package/dist/{session-conversation-DFCIvQK-.js → .setup/session-conversation-ZC6TC1zk.mjs} +1 -1
- package/dist/.setup/setup-api-CTRwX09n.mjs +3 -0
- package/dist/{subagent-hooks-Buadpie_.js → .setup/subagent-hooks-BBfF1hZk.mjs} +3 -19
- package/dist/api.js +125 -121
- package/dist/channel-plugin-api.js +1 -1
- package/dist/contract-api.js +3 -3
- package/dist/doctor-contract-api.js +1 -1
- package/dist/runtime-api.js +1 -1
- package/dist/runtime-setter-api.js +1 -1
- package/dist/secret-contract-api.js +1 -1
- package/dist/security-contract-api.js +1 -1
- package/dist/session-binding-contract-api.js +1 -1
- package/dist/session-key-api.js +1 -1
- package/dist/setup-api.js +1 -1
- package/dist/setup-entry.js +4 -3
- package/dist/subagent-hooks-api.js +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/es/index.js +199 -35
- package/node_modules/@larksuiteoapi/node-sdk/lib/index.js +199 -35
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/CHANGELOG.md +62 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/README.md +233 -5
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/axios.js +387 -89
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/axios.min.js +3 -3
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/axios.min.js.map +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/browser/axios.cjs +458 -98
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/esm/axios.js +458 -98
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/esm/axios.min.js +2 -2
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/esm/axios.min.js.map +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/node/axios.cjs +568 -116
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/index.d.cts +4 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/index.d.ts +4 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/adapters/fetch.js +64 -11
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/adapters/http.js +134 -50
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/adapters/xhr.js +52 -3
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/Axios.js +19 -14
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/InterceptorManager.js +107 -8
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/buildFullPath.js +1 -13
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/dispatchRequest.js +8 -2
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/mergeConfig.js +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/methodList.js +17 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/defaults/index.js +2 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/env/data.js +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/Http2Sessions.js +2 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/HttpStatusCode.js +11 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/fromDataURI.js +5 -4
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/normalizeURLForProtocolCheck.js +24 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/progressEventReducer.js +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/resolveConfig.js +4 -2
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/shouldBypassProxy.js +182 -6
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/throttle.js +3 -2
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/toFormData.js +14 -21
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/utils.js +134 -13
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/package.json +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/README.md +24 -17
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/light/protobuf.js +124 -14
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/minimal/protobuf.js +63 -9
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/protobuf.js +133 -18
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/protobuf.js.map +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/protobuf.min.js +3 -3
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/ext/descriptor.generated.d.ts +7 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/ext/descriptor.js +24 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/ext/protojson.js +14 -4
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/ext/textformat.js +8 -4
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/google/protobuf/descriptor.json +20 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/google/protobuf/descriptor.proto +14 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/index.d.ts +12 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/package.json +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/decoder.js +31 -2
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/enum.js +10 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/object.js +5 -2
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/parse.js +9 -4
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/reader.js +61 -7
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/type.js +10 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/wrappers.js +5 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/.github/THREAT_MODEL.md +3 -3
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/CHANGELOG.md +15 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/README.md +19 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/dist/qs.js +21 -21
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/eslint.config.mjs +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/lib/parse.js +3 -4
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/lib/stringify.js +23 -8
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/lib/utils.js +10 -3
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/package.json +4 -4
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/test/parse.js +192 -3
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/test/stringify.js +317 -0
- package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/test/utils.js +12 -0
- package/node_modules/@larksuiteoapi/node-sdk/package.json +1 -1
- package/node_modules/@larksuiteoapi/node-sdk/types/index.d.ts +35 -0
- 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 +27 -56
- package/package.json +10 -7
- package/dist/targets-BTQCYRZQ.js +0 -48
- package/node_modules/zod/src/v4/core/config.ts +0 -15
- /package/dist/{audio-preflight.runtime-BBfC9elv.js → .setup/audio-preflight.runtime-BBfC9elv.mjs} +0 -0
- /package/dist/{doctor-contract-w6FpMypv.js → .setup/doctor-contract-w6FpMypv.mjs} +0 -0
- /package/dist/{json-response-DXajw_FU.js → .setup/json-response-DXajw_FU.mjs} +0 -0
- /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
- /package/dist/{runtime-C5JxBWZp.js → .setup/runtime-C5JxBWZp.mjs} +0 -0
- /package/dist/{secret-contract-BCpDLdg9.js → .setup/secret-contract-BCpDLdg9.mjs} +0 -0
- /package/dist/{security-audit-shared-CK5rVR-1.js → .setup/security-audit-shared-CK5rVR-1.mjs} +0 -0
- /package/dist/{thread-bindings-BiL1wGqK.js → .setup/thread-bindings-BiL1wGqK.mjs} +0 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import * as z from "zod";
|
|
3
|
+
|
|
4
|
+
describe("z.input / z.output", () => {
|
|
5
|
+
test("flat codec: input/output give the right side", () => {
|
|
6
|
+
const c = z.codec(z.string(), z.bigint(), {
|
|
7
|
+
decode: (s) => BigInt(s),
|
|
8
|
+
encode: (n) => n.toString(),
|
|
9
|
+
});
|
|
10
|
+
expect(z.input(c).parse("1")).toBe("1");
|
|
11
|
+
expect(z.output(c).parse(1n)).toBe(1n);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test("codec nested in object: output works recursively (regression #5224)", () => {
|
|
15
|
+
const c = z.codec(z.string(), z.bigint(), {
|
|
16
|
+
decode: (s) => BigInt(s),
|
|
17
|
+
encode: (n) => n.toString(),
|
|
18
|
+
});
|
|
19
|
+
const obj = z.object({ b: c });
|
|
20
|
+
|
|
21
|
+
const decoded = z.output(obj);
|
|
22
|
+
expect(decoded.parse({ b: 1n })).toEqual({ b: 1n });
|
|
23
|
+
|
|
24
|
+
const encoded = z.input(obj);
|
|
25
|
+
expect(encoded.parse({ b: "1" })).toEqual({ b: "1" });
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test("nested across record / map: matches the use case in #5224", () => {
|
|
29
|
+
const keyCodec = z.codec(z.string(), z.enum(["a", "b"]), {
|
|
30
|
+
decode: (s) => (s === "a" || s === "b" ? s : z.NEVER),
|
|
31
|
+
encode: (s) => s,
|
|
32
|
+
});
|
|
33
|
+
const valueObject = z.object({
|
|
34
|
+
n: z.codec(z.string(), z.bigint(), { decode: (s) => BigInt(s), encode: (n) => n.toString() }),
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const fullCodec = z.codec(
|
|
38
|
+
z.record(z.input(keyCodec), z.input(valueObject)),
|
|
39
|
+
z.map(z.output(keyCodec), z.output(valueObject)),
|
|
40
|
+
{
|
|
41
|
+
decode: (input) => {
|
|
42
|
+
const m = new Map<"a" | "b", { n: bigint }>();
|
|
43
|
+
for (const [k, v] of Object.entries(input)) {
|
|
44
|
+
m.set(keyCodec.decode(k), valueObject.decode(v));
|
|
45
|
+
}
|
|
46
|
+
return m;
|
|
47
|
+
},
|
|
48
|
+
encode: (input) => {
|
|
49
|
+
const out: Record<string, { n: string }> = {};
|
|
50
|
+
for (const [k, v] of input.entries()) {
|
|
51
|
+
out[keyCodec.encode(k)] = valueObject.encode(v);
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
},
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
expect(fullCodec.decode({ a: { n: "1" } })).toEqual(new Map([["a", { n: 1n }]]));
|
|
59
|
+
expect(fullCodec.encode(new Map([["b", { n: 2n }]]))).toEqual({ b: { n: "2" } });
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("schema without pipes is returned with identity (no clone)", () => {
|
|
63
|
+
const s = z.object({ a: z.string() });
|
|
64
|
+
expect(z.input(s)).toBe(s);
|
|
65
|
+
expect(z.output(s)).toBe(s);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("z.output carries checks attached to a pipe", () => {
|
|
69
|
+
const c = z
|
|
70
|
+
.codec(z.string(), z.number().int(), { decode: Number, encode: String })
|
|
71
|
+
.refine((n) => n > 10, { error: "gt10" });
|
|
72
|
+
const obj = z.object({ list: z.array(c) });
|
|
73
|
+
const decoded = z.output(obj);
|
|
74
|
+
|
|
75
|
+
expect(decoded.parse({ list: [50] })).toEqual({ list: [50] });
|
|
76
|
+
// The pipe's own check and the one already on its out side both survive, in that order.
|
|
77
|
+
expect(() => decoded.parse({ list: [5] })).toThrow("gt10");
|
|
78
|
+
expect(() => decoded.parse({ list: [50.5] })).toThrow();
|
|
79
|
+
// A pipe's checks run on the decoded value in both directions, so encode enforces them too.
|
|
80
|
+
expect(() => decoded.encode({ list: [5] })).toThrow("gt10");
|
|
81
|
+
// Carrying them clones the out side rather than mutating it.
|
|
82
|
+
expect(c._zod.def.out._zod.def.checks).toHaveLength(1);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test("z.input drops a pipe's checks, which constrain a value the input side never produces", () => {
|
|
86
|
+
const c = z.codec(z.string(), z.number(), { decode: Number, encode: String }).refine((n) => n > 10);
|
|
87
|
+
expect(z.input(c).parse("5")).toBe("5");
|
|
88
|
+
|
|
89
|
+
// Control: a check that isn't attached to a pipe is left alone.
|
|
90
|
+
expect(() => z.input(z.object({ s: z.string().min(2) })).parse({ s: "a" })).toThrow();
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test("z.input resolves past a preprocess transform, which is not a real input side", () => {
|
|
94
|
+
const p = z.preprocess((v) => String(v), z.string().min(5));
|
|
95
|
+
const encoded = z.input(p);
|
|
96
|
+
|
|
97
|
+
expect(encoded.parse("abcde")).toBe("abcde");
|
|
98
|
+
// The bare transform used to come back here: it validated nothing and re-ran the preprocessor.
|
|
99
|
+
expect(() => encoded.parse(1)).toThrow();
|
|
100
|
+
expect(() => encoded.parse("abc")).toThrow();
|
|
101
|
+
// The same resolution the JSON Schema emitter already makes for this schema.
|
|
102
|
+
expect(z.toJSONSchema(p, { io: "input" })).toMatchObject({ type: "string", minLength: 5 });
|
|
103
|
+
|
|
104
|
+
// A check on the pipe itself travels with whichever side wins.
|
|
105
|
+
const checked = z.preprocess((v) => String(v), z.string()).refine((s) => s.startsWith("ok"));
|
|
106
|
+
expect(z.input(checked).parse("okay")).toBe("okay");
|
|
107
|
+
expect(() => z.input(checked).parse("nope")).toThrow();
|
|
108
|
+
|
|
109
|
+
// Control: a codec has two real sides, so its input side is still `in`, by identity.
|
|
110
|
+
const c = z.codec(z.string(), z.number(), { decode: Number, encode: String });
|
|
111
|
+
expect(z.input(c)).toBe(c._zod.def.in);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
test("a wrapper's stored value survives only on the side it belongs to", () => {
|
|
115
|
+
const c = z.codec(z.string(), z.number(), { decode: Number, encode: String });
|
|
116
|
+
|
|
117
|
+
// A default and a catch hold output-side values, so the input projection sheds them.
|
|
118
|
+
expect(z.input(c.default(7)).parse(undefined)).toBe(undefined);
|
|
119
|
+
expect(z.input(c.default(7)).parse("1")).toBe("1");
|
|
120
|
+
expect(() => z.input(c.catch(9)).parse(123 as any)).toThrow();
|
|
121
|
+
expect(z.input(c.catch(9)).parse("1")).toBe("1");
|
|
122
|
+
expect(z.output(c.default(7)).parse(undefined)).toBe(7);
|
|
123
|
+
expect(z.output(c.catch(9)).parse("zz" as any)).toBe(9);
|
|
124
|
+
|
|
125
|
+
// A prefault is fed through the schema, so it is input-side and the output projection sheds it.
|
|
126
|
+
expect(z.input(c.prefault("5")).parse(undefined)).toBe("5");
|
|
127
|
+
expect(() => z.output(c.prefault("5")).parse(undefined as any)).toThrow();
|
|
128
|
+
expect(z.output(c.prefault("5")).parse(3)).toBe(3);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
test("a wrapper over a pipe-free schema keeps both its value and its identity", () => {
|
|
132
|
+
const d = z.string().default("x");
|
|
133
|
+
const k = z.string().catch("y");
|
|
134
|
+
const f = z.string().prefault("z");
|
|
135
|
+
|
|
136
|
+
expect(z.input(d)).toBe(d);
|
|
137
|
+
expect(z.input(d).parse(undefined)).toBe("x");
|
|
138
|
+
expect(z.input(k)).toBe(k);
|
|
139
|
+
expect(z.output(f)).toBe(f);
|
|
140
|
+
|
|
141
|
+
const obj = z.object({ a: z.string().default("q") });
|
|
142
|
+
expect(z.input(obj)).toBe(obj);
|
|
143
|
+
expect(z.input(obj).parse({})).toEqual({ a: "q" });
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test("runtime `z.input` agrees with type-level `z.input<T>`", () => {
|
|
147
|
+
const c = z.codec(z.string(), z.bigint(), {
|
|
148
|
+
decode: (s) => BigInt(s),
|
|
149
|
+
encode: (n) => n.toString(),
|
|
150
|
+
});
|
|
151
|
+
const obj = z.object({ b: c });
|
|
152
|
+
|
|
153
|
+
// Runtime: parse the input shape.
|
|
154
|
+
const parsed = z.input(obj).parse({ b: "1" });
|
|
155
|
+
// Type: matches the declared input type.
|
|
156
|
+
const asType: z.input<typeof obj> = parsed;
|
|
157
|
+
expect(asType).toEqual({ b: "1" });
|
|
158
|
+
});
|
|
159
|
+
});
|
|
@@ -653,8 +653,7 @@ test("z.custom check", () => {
|
|
|
653
653
|
});
|
|
654
654
|
|
|
655
655
|
test("z.check", () => {
|
|
656
|
-
// this is a more flexible version of z.custom that accepts an arbitrary _parse logic
|
|
657
|
-
// the function should return base.$ZodResult
|
|
656
|
+
// this is a more flexible version of z.custom that accepts an arbitrary _parse logic the function should return base.$ZodResult
|
|
658
657
|
const a = z.any().check(
|
|
659
658
|
z.check<string>((ctx) => {
|
|
660
659
|
if (typeof ctx.value === "string") return;
|
|
@@ -736,6 +735,26 @@ test("z.refine", () => {
|
|
|
736
735
|
expect(() => z.parse(a, "hi")).toThrow();
|
|
737
736
|
});
|
|
738
737
|
|
|
738
|
+
test("z.superRefine preserves explicit nullish issue input", () => {
|
|
739
|
+
const schema = z.string().check(
|
|
740
|
+
z.superRefine((_, ctx) => {
|
|
741
|
+
ctx.addIssue({ code: "custom", message: "default" });
|
|
742
|
+
ctx.addIssue({ code: "custom", message: "null", input: null });
|
|
743
|
+
ctx.addIssue({ code: "custom", message: "undefined", input: undefined });
|
|
744
|
+
})
|
|
745
|
+
);
|
|
746
|
+
|
|
747
|
+
const result = z.safeParse(schema, "sensitive", { reportInput: true });
|
|
748
|
+
expect(result.success).toEqual(false);
|
|
749
|
+
if (!result.success) {
|
|
750
|
+
expect(result.error.issues).toHaveLength(3);
|
|
751
|
+
expect(result.error.issues[0].input).toEqual("sensitive");
|
|
752
|
+
expect(result.error.issues[1].input).toEqual(null);
|
|
753
|
+
expect(result.error.issues[2]).toHaveProperty("input");
|
|
754
|
+
expect(result.error.issues[2].input).toEqual(undefined);
|
|
755
|
+
}
|
|
756
|
+
});
|
|
757
|
+
|
|
739
758
|
// test("z.superRefine", () => {
|
|
740
759
|
// const a = z.number([
|
|
741
760
|
// z.superRefine((val, ctx) => {
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
|
|
3
|
+
import * as zm from "zod/mini";
|
|
4
|
+
import * as z from "zod/v4";
|
|
5
|
+
import * as core from "zod/v4/core";
|
|
6
|
+
|
|
7
|
+
// V8 sizes an instance's property backing store in steps, and schema instances get no in-object slots (their constructor assigns nothing itself): 12 own properties cost 128 bytes, 13 cost 848, 21 cost 1616. Methods therefore live on the prototype and materialize per instance on first read. These bounds are what keeps a schema graph small; crossing one silently multiplies its memory by 6x.
|
|
8
|
+
const MAX_OWN_PROPS = 12;
|
|
9
|
+
|
|
10
|
+
test("schema instances stay under V8's property-count step", () => {
|
|
11
|
+
const cases: Array<[string, object]> = [
|
|
12
|
+
["string", z.string()],
|
|
13
|
+
["number", z.number()],
|
|
14
|
+
["bigint", z.bigint()],
|
|
15
|
+
["boolean", z.boolean()],
|
|
16
|
+
["date", z.date()],
|
|
17
|
+
["enum", z.enum(["a", "b"])],
|
|
18
|
+
["array", z.array(z.string())],
|
|
19
|
+
["object", z.object({ a: z.string() })],
|
|
20
|
+
["record", z.record(z.string(), z.string())],
|
|
21
|
+
["map", z.map(z.string(), z.string())],
|
|
22
|
+
["set", z.set(z.string())],
|
|
23
|
+
["union", z.union([z.string(), z.number()])],
|
|
24
|
+
["optional", z.string().optional()],
|
|
25
|
+
["pipe", z.string().pipe(z.string())],
|
|
26
|
+
["email", z.email()],
|
|
27
|
+
["mini string", zm.string()],
|
|
28
|
+
["mini object", zm.object({ a: zm.string() })],
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const over = cases
|
|
32
|
+
.map(([name, schema]) => [name, Reflect.ownKeys(schema).length] as const)
|
|
33
|
+
.filter(([, count]) => count > MAX_OWN_PROPS);
|
|
34
|
+
|
|
35
|
+
expect(over).toEqual([]);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("prototype-installed members survive detaching", () => {
|
|
39
|
+
const schema = z.string();
|
|
40
|
+
const { parse, safeParse, spa } = schema;
|
|
41
|
+
|
|
42
|
+
expect(parse("hi")).toEqual("hi");
|
|
43
|
+
expect(safeParse("hi").success).toEqual(true);
|
|
44
|
+
expect(["a", "b"].map((v) => parse(v))).toEqual(["a", "b"]);
|
|
45
|
+
expect(spa).toBe(schema.safeParseAsync);
|
|
46
|
+
|
|
47
|
+
const email = schema.email;
|
|
48
|
+
expect(email().safeParse("a@b.co").success).toEqual(true);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("prototype-installed members can be overwritten per instance", () => {
|
|
52
|
+
const schema: any = z.string();
|
|
53
|
+
schema.parse = () => "overridden";
|
|
54
|
+
|
|
55
|
+
expect(schema.parse("anything")).toEqual("overridden");
|
|
56
|
+
expect(z.string().parse("untouched")).toEqual("untouched");
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("~standard is lazy but complete", () => {
|
|
60
|
+
const schema = z.string();
|
|
61
|
+
|
|
62
|
+
expect(Object.prototype.hasOwnProperty.call(schema, "~standard")).toEqual(false);
|
|
63
|
+
expect(schema["~standard"].vendor).toEqual("zod");
|
|
64
|
+
expect(schema["~standard"].version).toEqual(1);
|
|
65
|
+
expect(schema["~standard"].validate("hi")).toEqual({ value: "hi" });
|
|
66
|
+
expect((schema["~standard"] as any).jsonSchema.input()).toMatchObject({ type: "string" });
|
|
67
|
+
// Reading it caches on the instance, so the getter runs once.
|
|
68
|
+
expect(Object.prototype.hasOwnProperty.call(schema, "~standard")).toEqual(true);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test("caching a lazy member preserves its original enumerability", () => {
|
|
72
|
+
const schema = z.string();
|
|
73
|
+
|
|
74
|
+
// Methods were enumerable own properties before they moved to the prototype, so touching one still surfaces it to `Object.keys`.
|
|
75
|
+
void schema.parse;
|
|
76
|
+
void schema.optional;
|
|
77
|
+
expect(Object.keys(schema)).toContain("parse");
|
|
78
|
+
expect(Object.keys(schema)).toContain("optional");
|
|
79
|
+
|
|
80
|
+
// `~standard` never was an own data property, so caching it must not add it to `Object.keys` or to `JSON.stringify` of a schema.
|
|
81
|
+
void schema["~standard"];
|
|
82
|
+
expect(Object.keys(schema)).not.toContain("~standard");
|
|
83
|
+
expect(JSON.stringify(schema)).not.toContain("~standard");
|
|
84
|
+
|
|
85
|
+
// An explicit assignment behaves like one, as before.
|
|
86
|
+
const other: any = z.string();
|
|
87
|
+
other["~standard"] = { vendor: "x" };
|
|
88
|
+
expect(Object.keys(other)).toContain("~standard");
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test("_def stays read-only", () => {
|
|
92
|
+
expect(() => {
|
|
93
|
+
(z.string() as any)._def = {};
|
|
94
|
+
}).toThrow(TypeError);
|
|
95
|
+
expect(() => {
|
|
96
|
+
(z.function({ input: [z.string()], output: z.number() }) as any)._def = {};
|
|
97
|
+
}).toThrow(TypeError);
|
|
98
|
+
const schema = z.string();
|
|
99
|
+
expect(schema._def).toBe(schema._zod.def);
|
|
100
|
+
expect(z.object({ a: z.string() })._def.type).toEqual("object");
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test("deferred initializers are released after construction", () => {
|
|
104
|
+
expect(z.string()._zod.deferred).toEqual(undefined);
|
|
105
|
+
expect(z.object({ a: z.string() })._zod.deferred).toEqual(undefined);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("a trait initializer called directly still installs its members", () => {
|
|
109
|
+
// a direct `init` installs onto the receiver's own prototype, since it is not below the constructor's
|
|
110
|
+
z.string();
|
|
111
|
+
|
|
112
|
+
const proto = {};
|
|
113
|
+
const inst = Object.create(proto) as z.ZodString;
|
|
114
|
+
z.ZodString.init(inst, { type: "string" });
|
|
115
|
+
|
|
116
|
+
expect(typeof inst.email).toBe("function");
|
|
117
|
+
expect(typeof inst.optional).toBe("function");
|
|
118
|
+
expect(Object.prototype.hasOwnProperty.call(proto, "email")).toBe(true);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("a nested init during a repeat construction still installs its members", () => {
|
|
122
|
+
// the install used to read a module-level flag the outer construction set, so a nested `init` on an unrelated receiver inherited an answer that was not about it
|
|
123
|
+
const seen: string[] = [];
|
|
124
|
+
|
|
125
|
+
// an assertion signature needs the call target explicitly annotated
|
|
126
|
+
const Nested: core.$constructor<any> = core.$constructor<any>("Nested", () => {}, {
|
|
127
|
+
tag() {
|
|
128
|
+
return "nested";
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
const Outer = core.$constructor<any>("Outer", (_inst, def) => {
|
|
132
|
+
if (!def.nest) return;
|
|
133
|
+
// not a plain `{}`: the install target would resolve to `Object.prototype` and leak `tag` into every object the worker touches
|
|
134
|
+
const plain: any = Object.create({});
|
|
135
|
+
Nested.init(plain, {});
|
|
136
|
+
seen.push(typeof plain.tag);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
new Outer({ nest: false });
|
|
140
|
+
new Outer({ nest: true });
|
|
141
|
+
|
|
142
|
+
expect(seen).toEqual(["function"]);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test("a derived trait's members win over the ones it composes", () => {
|
|
146
|
+
// Classic installs a richer `~standard` over core's. Trait dedupe is what orders them: core's initializer runs once, at the first `init` that reaches it, so classic's always lands second.
|
|
147
|
+
expect(typeof (z.string()["~standard"] as any).jsonSchema.input).toBe("function");
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
test("a live member keeps the descriptor a prototype member had", () => {
|
|
151
|
+
// An object literal's getter is enumerable; the `defineProperty` it replaced was not. `for..in` over a schema is public surface, and the construction path walks the prototype with it.
|
|
152
|
+
const proto = Object.getPrototypeOf(z.string());
|
|
153
|
+
expect(Object.getOwnPropertyDescriptor(proto, "description")?.enumerable).toBe(false);
|
|
154
|
+
expect(Object.getOwnPropertyDescriptor(proto, "_def")?.enumerable).toBe(false);
|
|
155
|
+
|
|
156
|
+
const keys: string[] = [];
|
|
157
|
+
for (const k in z.string()) keys.push(k);
|
|
158
|
+
expect(keys).toEqual(["def", "type", "format", "minLength", "maxLength"]);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test("a live member is not cached per instance", () => {
|
|
162
|
+
const schema = z.string();
|
|
163
|
+
|
|
164
|
+
expect(schema.description).toBe(undefined);
|
|
165
|
+
core.globalRegistry.add(schema, { description: "later" });
|
|
166
|
+
expect(schema.description).toBe("later");
|
|
167
|
+
expect(Object.prototype.hasOwnProperty.call(schema, "description")).toBe(false);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test("constructing through a subclass does not strip the base prototype", () => {
|
|
171
|
+
// `super(def)` gives `this` a prototype of `new.target.prototype`, so a constructor can complete a construction without having built its own prototype.
|
|
172
|
+
const MyString: new (def: { type: "string" }) => z.ZodString = class extends (z.ZodString as any) {} as any;
|
|
173
|
+
new MyString({ type: "string" });
|
|
174
|
+
|
|
175
|
+
const plain = z.string();
|
|
176
|
+
expect(plain.parse("x")).toBe("x");
|
|
177
|
+
expect(typeof plain.email).toBe("function");
|
|
178
|
+
expect(typeof new MyString({ type: "string" }).email).toBe("function");
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
test("a subclass's own members survive the install", () => {
|
|
182
|
+
// The members go on the prototype of the constructor that built the instance, so a subclass's own prototype keeps what it declared. `z.symbol()` is constructed nowhere else here, which puts the subclass before its base — the ordering the install has to get right. Asserted rather than assumed, so warming it elsewhere fails the test instead of hollowing it out.
|
|
183
|
+
expect(Object.prototype.hasOwnProperty.call((z.ZodSymbol as any).prototype, "parse")).toBe(false);
|
|
184
|
+
const First = class extends (z.ZodSymbol as any) {
|
|
185
|
+
parse() {
|
|
186
|
+
return "PARSE";
|
|
187
|
+
}
|
|
188
|
+
optional() {
|
|
189
|
+
return "OPTIONAL";
|
|
190
|
+
}
|
|
191
|
+
} as any;
|
|
192
|
+
const first = new First({ type: "symbol" });
|
|
193
|
+
expect(first.parse(Symbol())).toBe("PARSE");
|
|
194
|
+
expect(first.optional()).toBe("OPTIONAL");
|
|
195
|
+
const sym = Symbol();
|
|
196
|
+
expect(z.symbol().parse(sym)).toBe(sym);
|
|
197
|
+
|
|
198
|
+
// and the other way round, with the base prototype already built by one of the `z.number()` calls above. Asserted for the same reason: warm it nowhere and this block quietly becomes a second copy of the cold case.
|
|
199
|
+
expect(Object.prototype.hasOwnProperty.call((z.ZodNumber as any).prototype, "parse")).toBe(true);
|
|
200
|
+
const Second = class extends (z.ZodNumber as any) {
|
|
201
|
+
parse() {
|
|
202
|
+
return "SECOND";
|
|
203
|
+
}
|
|
204
|
+
} as any;
|
|
205
|
+
expect(new Second({ type: "number" }).parse(1)).toBe("SECOND");
|
|
206
|
+
|
|
207
|
+
// two levels deep: neither prototype takes a copy, so the inherited member is one function
|
|
208
|
+
const Third = class extends (Second as any) {} as any;
|
|
209
|
+
new Third({ type: "number" });
|
|
210
|
+
expect(Second.prototype.parse).toBe(Third.prototype.parse);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
test("a hand-written getter member accepts assignment", () => {
|
|
214
|
+
// Every member was an accessor with a setter before they moved onto `proto`, so a getter written by hand needs one too.
|
|
215
|
+
const schema: any = z.string();
|
|
216
|
+
schema.spa = () => "SPA";
|
|
217
|
+
schema.toJSONSchema = () => "JSON";
|
|
218
|
+
expect(schema.spa()).toBe("SPA");
|
|
219
|
+
expect(schema.toJSONSchema()).toBe("JSON");
|
|
220
|
+
|
|
221
|
+
const mini: any = zm.string();
|
|
222
|
+
mini.with = () => "WITH";
|
|
223
|
+
expect(mini.with()).toBe("WITH");
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
test("shape is lazy and stays out of Object.keys", () => {
|
|
227
|
+
const schema = z.object({ a: z.string() });
|
|
228
|
+
|
|
229
|
+
expect(Object.prototype.hasOwnProperty.call(schema, "shape")).toEqual(false);
|
|
230
|
+
expect("shape" in schema).toEqual(true);
|
|
231
|
+
expect(Object.keys(schema)).not.toContain("shape");
|
|
232
|
+
expect({ ...schema }).not.toHaveProperty("shape");
|
|
233
|
+
|
|
234
|
+
expect(Object.keys(schema.shape)).toEqual(["a"]);
|
|
235
|
+
|
|
236
|
+
// Reading caches a non-enumerable own data property. An own accessor here would put every later object schema into V8 dictionary mode.
|
|
237
|
+
expect(Object.prototype.hasOwnProperty.call(schema, "shape")).toEqual(true);
|
|
238
|
+
expect(Object.getOwnPropertyDescriptor(schema, "shape")).toMatchObject({
|
|
239
|
+
writable: true,
|
|
240
|
+
enumerable: false,
|
|
241
|
+
configurable: true,
|
|
242
|
+
});
|
|
243
|
+
expect(Object.keys(schema)).not.toContain("shape");
|
|
244
|
+
|
|
245
|
+
const mini = zm.object({ a: zm.string() });
|
|
246
|
+
expect(Object.prototype.hasOwnProperty.call(mini, "shape")).toEqual(false);
|
|
247
|
+
expect(Object.keys(mini.shape)).toEqual(["a"]);
|
|
248
|
+
expect(Object.keys(mini)).not.toContain("shape");
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
test("shape accepts repeated assignment and recomputes after deletion", () => {
|
|
252
|
+
const schema: any = z.object({ a: z.string() });
|
|
253
|
+
|
|
254
|
+
schema.shape = { b: z.number() };
|
|
255
|
+
expect(Object.keys(schema.shape)).toEqual(["b"]);
|
|
256
|
+
// The cached property stays writable, so a second assignment does not throw in strict mode.
|
|
257
|
+
schema.shape = { c: z.boolean() };
|
|
258
|
+
expect(Object.keys(schema.shape)).toEqual(["c"]);
|
|
259
|
+
|
|
260
|
+
// Deleting clears the memo rather than removing the property, since the accessor lives on the prototype.
|
|
261
|
+
delete schema.shape;
|
|
262
|
+
expect(Object.keys(schema.shape)).toEqual(["a"]);
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
test("a self-referential shape getter breaks the cycle instead of recursing", () => {
|
|
266
|
+
const Self: any = z.object({
|
|
267
|
+
a: z.string(),
|
|
268
|
+
get b() {
|
|
269
|
+
return z.array(z.object(Self.shape));
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
expect(Object.keys(Self.shape)).toEqual(["a", "b"]);
|
|
273
|
+
|
|
274
|
+
const Mini: any = zm.object({
|
|
275
|
+
a: zm.string(),
|
|
276
|
+
get b() {
|
|
277
|
+
return zm.array(zm.object(Mini.shape));
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
expect(Object.keys(Mini.shape)).toEqual(["a", "b"]);
|
|
281
|
+
});
|
|
@@ -58,3 +58,50 @@ test("instanceof respects customError", () => {
|
|
|
58
58
|
|
|
59
59
|
z.config({ customError: undefined });
|
|
60
60
|
});
|
|
61
|
+
|
|
62
|
+
test("z.properties", () => {
|
|
63
|
+
const httpsUrl = z.instanceof(URL).check(
|
|
64
|
+
...z.properties({
|
|
65
|
+
protocol: z.literal("https:" as string),
|
|
66
|
+
hostname: z.string().regex(z.regexes.domain),
|
|
67
|
+
})
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
expectTypeOf<URL>().toEqualTypeOf<z.infer<typeof httpsUrl>>();
|
|
71
|
+
expect(httpsUrl.safeParse(new URL("https://example.com")).success).toBe(true);
|
|
72
|
+
|
|
73
|
+
// Checks abort on the first failure, exactly as the equivalent chain of z.property() calls does.
|
|
74
|
+
const both = httpsUrl.safeParse(new URL("http://localhost"));
|
|
75
|
+
expect(both.error!.issues.map((i) => i.path)).toEqual([["protocol"]]);
|
|
76
|
+
|
|
77
|
+
// A failing base schema yields its own issue and no property issues.
|
|
78
|
+
for (const input of ["not a url", null]) {
|
|
79
|
+
const issues = httpsUrl.safeParse(input).error!.issues;
|
|
80
|
+
expect(issues.map((i) => [i.code, i.path])).toEqual([["custom", []]]);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Not specific to z.instanceof(). A base whose type mismatch aborts implicitly rather than explicitly must still not run the property checks against the rejected value.
|
|
84
|
+
const obj = z
|
|
85
|
+
.object({ a: z.string(), b: z.string() })
|
|
86
|
+
.check(...z.properties({ a: z.literal("x"), b: z.literal("y") }));
|
|
87
|
+
expect(obj.safeParse({ a: "x", b: "y" }).success).toBe(true);
|
|
88
|
+
expect(obj.safeParse({ a: "!", b: "!" }).error!.issues.map((i) => i.path)).toEqual([["a"]]);
|
|
89
|
+
for (const input of [null, undefined, 5]) {
|
|
90
|
+
expect(obj.safeParse(input).error!.issues.map((i) => [i.code, i.path])).toEqual([["invalid_type", []]]);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Known looseness versus the longhand, pinned so it stays deliberate: every element is typed over the whole shape, and `$ZodCheckInternals.check()` is a method, so TypeScript compares it bivariantly and accepts a check type that is a subtype of the target. Naming a key the target lacks therefore compiles here and fails at parse time, where the equivalent chain of `z.property()` calls rejects it outright. Typing each element over only its own key fixes that and breaks every valid call, since a union argument must satisfy the target on its own.
|
|
94
|
+
z.object({ a: z.string() }).check(...z.properties({ a: z.literal("x"), b: z.literal("y") }));
|
|
95
|
+
expect(
|
|
96
|
+
z
|
|
97
|
+
.object({ a: z.string() })
|
|
98
|
+
.check(...z.properties({ a: z.string(), b: z.literal("y") }))
|
|
99
|
+
.safeParse({ a: "ok" })
|
|
100
|
+
.error!.issues.map((i) => [i.code, i.path])
|
|
101
|
+
).toEqual([["invalid_value", ["b"]]]);
|
|
102
|
+
|
|
103
|
+
// Plain property checks carry no `when`, so the schema stays on the compiled fast path.
|
|
104
|
+
const compiled = z.compile(httpsUrl);
|
|
105
|
+
expect(compiled.safeParse(new URL("https://example.com")).success).toBe(true);
|
|
106
|
+
expect(compiled.safeParse(new URL("http://localhost")).error!.issues.map((i) => i.path)).toEqual([["protocol"]]);
|
|
107
|
+
});
|
|
@@ -67,6 +67,24 @@ test("object intersection: strict + strict", () => {
|
|
|
67
67
|
`);
|
|
68
68
|
});
|
|
69
69
|
|
|
70
|
+
test("object intersection strips __proto__ from pass-through operands", () => {
|
|
71
|
+
const cases = [
|
|
72
|
+
[
|
|
73
|
+
z.intersection(z.object({ name: z.string() }), z.unknown()),
|
|
74
|
+
JSON.parse('{"__proto__":{"isAdmin":true},"name":"alice"}'),
|
|
75
|
+
{ name: "alice" },
|
|
76
|
+
],
|
|
77
|
+
[z.intersection(z.record(z.string(), z.unknown()), z.any()), JSON.parse('{"__proto__":{},"a":1}'), { a: 1 }],
|
|
78
|
+
] as const;
|
|
79
|
+
|
|
80
|
+
for (const [schema, input, expected] of cases) {
|
|
81
|
+
const parsed = schema.parse(input);
|
|
82
|
+
expect(parsed).toEqual(expected);
|
|
83
|
+
expect(Object.getPrototypeOf(parsed)).toBe(Object.prototype);
|
|
84
|
+
expect(Object.prototype.hasOwnProperty.call(parsed, "__proto__")).toBe(false);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
70
88
|
test("deep intersection", () => {
|
|
71
89
|
const Animal = z.object({
|
|
72
90
|
properties: z.object({
|
|
@@ -196,3 +214,121 @@ test("invalid deep merge of object and array combination", async () => {
|
|
|
196
214
|
`[Error: Unmergable intersection. Error path: ["students",0,"name"]]`
|
|
197
215
|
);
|
|
198
216
|
});
|
|
217
|
+
|
|
218
|
+
// A record's key schema says which keys that record GOVERNS; it is not a predicate
|
|
219
|
+
// every key in the result must satisfy. TypeScript works the same way: in
|
|
220
|
+
// `{name: string} & Record<`S_${string}`, string>` the index signature constrains
|
|
221
|
+
// only the keys matching it, so `name` is fine. So a key one side does not govern
|
|
222
|
+
// is reconciled against the other side, exactly as unrecognized_keys already is.
|
|
223
|
+
test("a record's key schema governs only its own keys inside an intersection", () => {
|
|
224
|
+
const Obj = z.object({ name: z.string() });
|
|
225
|
+
const value = { name: "a", S_a: "s" };
|
|
226
|
+
|
|
227
|
+
// Every key-schema flavor behaves the same: `name` belongs to the object side.
|
|
228
|
+
expect(z.intersection(Obj, z.record(z.string().regex(/^S_/), z.string())).parse(value)).toEqual(value);
|
|
229
|
+
expect(z.intersection(Obj, z.record(z.templateLiteral(["S_", z.string()]), z.string())).parse(value)).toEqual(value);
|
|
230
|
+
expect(z.intersection(Obj, z.partialRecord(z.enum(["p1", "p2"]), z.string())).parse({ name: "a", p1: "x" })).toEqual({
|
|
231
|
+
name: "a",
|
|
232
|
+
p1: "x",
|
|
233
|
+
});
|
|
234
|
+
expect(z.intersection(Obj, z.record(z.enum(["p1"]), z.string())).parse({ name: "a", p1: "x" })).toEqual({
|
|
235
|
+
name: "a",
|
|
236
|
+
p1: "x",
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
// A key the record DOES govern still has its value validated across the intersection.
|
|
240
|
+
const governed = z.intersection(z.object({ S_x: z.number() }), z.record(z.string().regex(/^S_/), z.string()));
|
|
241
|
+
expect(governed.safeParse({ S_x: 1 }).success).toBe(false);
|
|
242
|
+
|
|
243
|
+
// A key NEITHER side governs is still rejected.
|
|
244
|
+
const strict = z.intersection(z.strictObject({ name: z.string() }), z.record(z.string().regex(/^S_/), z.string()));
|
|
245
|
+
expect(strict.parse(value)).toEqual(value);
|
|
246
|
+
expect(strict.safeParse({ ...value, evil: "q" }).success).toBe(false);
|
|
247
|
+
|
|
248
|
+
// Standalone, a record still rejects a key it does not govern.
|
|
249
|
+
expect(z.record(z.string().regex(/^S_/), z.string()).safeParse({ S_a: "s", bad: "x" }).success).toBe(false);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
test("partialRecord reports an out-of-set key as unrecognized, not invalid", () => {
|
|
253
|
+
const enumKeys = z.partialRecord(z.enum(["a", "b"]), z.string()).safeParse({ a: "x", zzz: "q" });
|
|
254
|
+
expect(enumKeys.success).toBe(false);
|
|
255
|
+
expect(enumKeys.error!.issues[0].code).toBe("unrecognized_keys");
|
|
256
|
+
|
|
257
|
+
// A regex key schema still reports the failure as an invalid key.
|
|
258
|
+
const regexKeys = z.record(z.string().regex(/^S_/), z.string()).safeParse({ S_a: "x", zzz: "q" });
|
|
259
|
+
expect(regexKeys.success).toBe(false);
|
|
260
|
+
expect(regexKeys.error!.issues[0].code).toBe("invalid_key");
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
test("intersection operands run their own checks, refinements and transforms", () => {
|
|
264
|
+
let checks = 0;
|
|
265
|
+
const failing = z.intersection(
|
|
266
|
+
z.strictObject({ x: z.string() }).check(() => {
|
|
267
|
+
checks++;
|
|
268
|
+
}),
|
|
269
|
+
z.strictObject({ a: z.string() }).superRefine((_data, ctx) => {
|
|
270
|
+
checks++;
|
|
271
|
+
ctx.addIssue({ code: "custom", message: "boom" });
|
|
272
|
+
})
|
|
273
|
+
);
|
|
274
|
+
expect(failing.safeParse({ x: "test", a: "hello" })).toMatchObject({
|
|
275
|
+
success: false,
|
|
276
|
+
error: { issues: [{ code: "custom", message: "boom" }] },
|
|
277
|
+
});
|
|
278
|
+
expect(checks).toBe(2);
|
|
279
|
+
|
|
280
|
+
const transformed = z.intersection(
|
|
281
|
+
z.strictObject({ x: z.string() }).transform((v) => ({ ...v, x: v.x.toUpperCase() })),
|
|
282
|
+
z.strictObject({ a: z.string() }).transform((v) => ({ ...v, seen: true }))
|
|
283
|
+
);
|
|
284
|
+
expect(transformed.parse({ x: "test", a: "hello" })).toEqual({ x: "TEST", a: "hello", seen: true });
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
test("intersection operands apply defaults, including through a nested intersection", () => {
|
|
288
|
+
const inner = z.intersection(
|
|
289
|
+
z.strictObject({ x: z.string().default("X default"), y: z.number() }),
|
|
290
|
+
z.strictObject({ z: z.boolean() })
|
|
291
|
+
);
|
|
292
|
+
const schema = z.intersection(inner, z.strictObject({ a: z.string() }));
|
|
293
|
+
expectTypeOf<z.output<typeof schema>>().toEqualTypeOf<{ x: string; y: number } & { z: boolean } & { a: string }>();
|
|
294
|
+
|
|
295
|
+
expect(schema.parse({ y: 34, z: true, a: "hello" })).toEqual({ x: "X default", y: 34, z: true, a: "hello" });
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
test("a record operand runs its own refinements inside an intersection", () => {
|
|
299
|
+
let calls = 0;
|
|
300
|
+
const schema = z
|
|
301
|
+
.record(z.enum(["p1", "p2"]), z.string())
|
|
302
|
+
.superRefine((_data, ctx) => {
|
|
303
|
+
calls++;
|
|
304
|
+
ctx.addIssue({ code: "custom", message: "record refined" });
|
|
305
|
+
})
|
|
306
|
+
.and(z.strictObject({ name: z.string() }));
|
|
307
|
+
|
|
308
|
+
expect(schema.safeParse({ p1: "a", p2: "b", name: "n" })).toMatchObject({
|
|
309
|
+
success: false,
|
|
310
|
+
error: { issues: [{ code: "custom", message: "record refined" }] },
|
|
311
|
+
});
|
|
312
|
+
expect(calls).toBe(1);
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
test("a strict object nested under an operand keeps its strictness", () => {
|
|
316
|
+
const schema = z.intersection(
|
|
317
|
+
z.object({ inner: z.strictObject({ a: z.string() }) }),
|
|
318
|
+
z.object({ other: z.string() })
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
expect(schema.parse({ inner: { a: "x" }, other: "y" })).toEqual({ inner: { a: "x" }, other: "y" });
|
|
322
|
+
expect(schema.safeParse({ inner: { a: "x", extra: 1 }, other: "y" })).toMatchObject({
|
|
323
|
+
success: false,
|
|
324
|
+
error: { issues: [{ code: "unrecognized_keys", keys: ["extra"], path: ["inner"] }] },
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
test("a strict object composes with a refined object", () => {
|
|
329
|
+
const A = z.object({ key1: z.boolean() }).strict();
|
|
330
|
+
const B = z.object({ key2: z.boolean() }).refine(({ key2 }) => key2, "key2 must be true");
|
|
331
|
+
|
|
332
|
+
expect(A.and(B).parse({ key1: true, key2: true })).toEqual({ key1: true, key2: true });
|
|
333
|
+
expect(A.and(B).safeParse({ key1: true, key2: false }).success).toBe(false);
|
|
334
|
+
});
|