@psnext/slingcli 3.1.20260904-1 → 3.3.20260914-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/util/index.js +5 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/util/hasOwn.js +3 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/util/index.js +1 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/util/hasOwn.d.ts +4 -0
- package/node_modules/@aws-sdk/core/dist-types/submodules/util/index.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/hasOwn.d.ts +1 -0
- package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +1 -0
- package/node_modules/@aws-sdk/core/package.json +1 -1
- package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
- package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
- package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +3 -3
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
- package/node_modules/@aws-sdk/middleware-websocket/package.json +2 -2
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
- package/node_modules/@aws-sdk/nested-clients/package.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-PBNSMEG7.js → chunk-BRL3MDQL.js} +10 -10
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/index.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/rpc-entry.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.js +79 -32
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Client.md +25 -8
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/EventSource.md +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/api/readable.js +33 -43
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/core/connect.js +16 -2
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/core/symbols.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/agent.js +7 -2
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client-h1.js +9 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client-h2.js +221 -12
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client.js +76 -30
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +106 -22
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/cache-handler.js +29 -5
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/decorator-handler.js +7 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/redirect-handler.js +21 -4
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/retry-handler.js +155 -32
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/cache.js +65 -9
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/decompress.js +115 -13
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/dns.js +7 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/dump.js +10 -23
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/mock/mock-agent.js +13 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/mock/mock-utils.js +217 -27
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/util/cache.js +43 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/cookies/parse.js +150 -147
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/index.js +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/request.js +2 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/util.js +6 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/webidl/index.js +3 -3
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/connection.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/websocket.js +22 -0
- package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/package.json +3 -3
- package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +4 -4
- package/node_modules/@earendil-works/pi-coding-agent/package.json +1 -1
- package/node_modules/@smithy/core/dist-cjs/submodules/errors/index.js +20 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +11 -10
- package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +11 -10
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.browser.js +2 -0
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.js +25 -8
- package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.native.js +2 -0
- package/node_modules/@smithy/core/dist-es/submodules/errors/errors.js +18 -0
- package/node_modules/@smithy/core/dist-es/submodules/errors/index.js +1 -0
- package/node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/service-error-classification.js +11 -10
- package/node_modules/@smithy/core/dist-es/submodules/serde/util-stream/getAwsChunkedEncodingStream.browser.js +2 -0
- package/node_modules/@smithy/core/dist-es/submodules/serde/util-stream/getAwsChunkedEncodingStream.js +23 -8
- package/node_modules/@smithy/core/dist-types/submodules/errors/errors.d.ts +44 -0
- package/node_modules/@smithy/core/dist-types/submodules/errors/index.d.ts +1 -0
- package/node_modules/@smithy/core/dist-types/submodules/retry/service-error-classification/service-error-classification.d.ts +4 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/errors/errors.d.ts +44 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/errors/index.d.ts +1 -0
- package/node_modules/@smithy/core/dist-types/ts3.4/submodules/retry/service-error-classification/service-error-classification.d.ts +4 -0
- package/node_modules/@smithy/core/errors.d.ts +5 -0
- package/node_modules/@smithy/core/errors.js +5 -0
- package/node_modules/@smithy/core/package.json +11 -2
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/buffer.d.ts +1 -0
- package/node_modules/@types/node/diagnostics_channel.d.ts +4 -4
- package/node_modules/@types/node/http.d.ts +1 -1
- package/node_modules/@types/node/package.json +3 -3
- package/node_modules/@types/node/perf_hooks.d.ts +31 -19
- package/node_modules/@types/node/quic.d.ts +6 -4
- package/node_modules/@types/node/stream/web.d.ts +20 -0
- package/node_modules/@types/node/tls.d.ts +26 -15
- package/node_modules/@types/node/vfs.d.ts +7 -6
- package/node_modules/@types/node/web-globals/streams.d.ts +4 -0
- package/node_modules/@types/node/zlib.d.ts +17 -0
- package/node_modules/hono/dist/cjs/client/client.js +4 -4
- package/node_modules/hono/dist/cjs/hono-base.js +7 -6
- package/node_modules/hono/dist/cjs/jsx/base.js +18 -1
- package/node_modules/hono/dist/cjs/jsx/components.js +25 -26
- package/node_modules/hono/dist/cjs/jsx/context.js +5 -5
- package/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +2 -2
- package/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
- package/node_modules/hono/dist/client/client.js +4 -4
- package/node_modules/hono/dist/hono-base.js +7 -6
- package/node_modules/hono/dist/jsx/base.js +15 -1
- package/node_modules/hono/dist/jsx/components.js +26 -27
- package/node_modules/hono/dist/jsx/context.js +6 -6
- package/node_modules/hono/dist/jsx/dom/server.js +5 -1
- package/node_modules/hono/dist/jsx/intrinsic-element/components.js +3 -3
- package/node_modules/hono/dist/jsx/streaming.js +5 -6
- package/node_modules/hono/dist/types/context.d.ts +2 -2
- package/node_modules/hono/dist/types/jsx/base.d.ts +3 -0
- package/node_modules/hono/package.json +2 -2
- package/node_modules/jose/dist/types/index.d.ts +1 -2
- package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -11
- package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +13 -16
- package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -11
- package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +16 -19
- package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +10 -16
- package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +18 -21
- package/node_modules/jose/dist/types/jwk/embedded.d.ts +3 -1
- package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +4 -6
- package/node_modules/jose/dist/types/jwks/local.d.ts +5 -4
- package/node_modules/jose/dist/types/jwks/remote.d.ts +20 -21
- package/node_modules/jose/dist/types/jws/compact/sign.d.ts +4 -4
- package/node_modules/jose/dist/types/jws/compact/verify.d.ts +8 -11
- package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +5 -5
- package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +8 -11
- package/node_modules/jose/dist/types/jws/general/sign.d.ts +10 -14
- package/node_modules/jose/dist/types/jws/general/verify.d.ts +11 -17
- package/node_modules/jose/dist/types/jwt/decrypt.d.ts +14 -11
- package/node_modules/jose/dist/types/jwt/encrypt.d.ts +24 -22
- package/node_modules/jose/dist/types/jwt/sign.d.ts +3 -7
- package/node_modules/jose/dist/types/jwt/unsecured.d.ts +2 -6
- package/node_modules/jose/dist/types/jwt/verify.d.ts +13 -6
- package/node_modules/jose/dist/types/key/export.d.ts +6 -6
- package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +9 -14
- package/node_modules/jose/dist/types/key/generate_secret.d.ts +10 -10
- package/node_modules/jose/dist/types/key/import.d.ts +19 -18
- package/node_modules/jose/dist/types/types.d.ts +152 -247
- package/node_modules/jose/dist/types/util/base64url.d.ts +7 -7
- package/node_modules/jose/dist/types/util/decode_jwt.d.ts +6 -1
- package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +4 -3
- package/node_modules/jose/dist/types/util/errors.d.ts +29 -40
- package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +1 -2
- package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +9 -26
- package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +3 -3
- package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +11 -30
- package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +6 -6
- package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +33 -57
- package/node_modules/jose/dist/webapi/jwk/embedded.js +3 -4
- package/node_modules/jose/dist/webapi/jwk/thumbprint.js +3 -6
- package/node_modules/jose/dist/webapi/jwks/local.js +16 -10
- package/node_modules/jose/dist/webapi/jwks/remote.js +2 -2
- package/node_modules/jose/dist/webapi/jws/compact/sign.js +2 -4
- package/node_modules/jose/dist/webapi/jws/compact/verify.js +2 -2
- package/node_modules/jose/dist/webapi/jws/flattened/sign.js +8 -15
- package/node_modules/jose/dist/webapi/jws/flattened/verify.js +4 -14
- package/node_modules/jose/dist/webapi/jws/general/sign.js +4 -11
- package/node_modules/jose/dist/webapi/jws/general/verify.js +5 -7
- package/node_modules/jose/dist/webapi/jwt/decrypt.js +2 -3
- package/node_modules/jose/dist/webapi/jwt/encrypt.js +11 -25
- package/node_modules/jose/dist/webapi/jwt/sign.js +1 -1
- package/node_modules/jose/dist/webapi/jwt/unsecured.js +1 -2
- package/node_modules/jose/dist/webapi/jwt/verify.js +4 -4
- package/node_modules/jose/dist/webapi/key/export.js +12 -16
- package/node_modules/jose/dist/webapi/key/generate_key_pair.js +4 -13
- package/node_modules/jose/dist/webapi/key/generate_secret.js +1 -1
- package/node_modules/jose/dist/webapi/key/import.js +5 -9
- package/node_modules/jose/dist/webapi/lib/asn1.js +2 -4
- package/node_modules/jose/dist/webapi/lib/buffer_utils.js +35 -0
- package/node_modules/jose/dist/webapi/lib/content_encryption.js +21 -29
- package/node_modules/jose/dist/webapi/lib/deflate.js +9 -19
- package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +0 -4
- package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +21 -54
- package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +26 -59
- package/node_modules/jose/dist/webapi/lib/jws_sign.js +29 -43
- package/node_modules/jose/dist/webapi/lib/jws_verify.js +37 -45
- package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +1 -1
- package/node_modules/jose/dist/webapi/lib/key.js +119 -59
- package/node_modules/jose/dist/webapi/lib/key_management.js +45 -80
- package/node_modules/jose/dist/webapi/lib/{options.js → validate.js} +64 -3
- package/node_modules/jose/dist/webapi/util/base64url.js +5 -19
- package/node_modules/jose/dist/webapi/util/decode_jwt.js +1 -1
- package/node_modules/jose/dist/webapi/util/decode_protected_header.js +1 -1
- package/node_modules/jose/package.json +1 -1
- package/node_modules/undici/lib/dispatcher/balanced-pool.js +4 -2
- package/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
- package/node_modules/undici/lib/dispatcher/client-h2.js +70 -14
- package/node_modules/undici/lib/dispatcher/client.js +6 -2
- package/node_modules/undici/lib/handler/cache-handler.js +21 -5
- package/node_modules/undici/lib/handler/retry-handler.js +42 -7
- package/node_modules/undici/lib/interceptor/cache.js +20 -1
- package/node_modules/undici/lib/interceptor/decompress.js +146 -14
- package/node_modules/undici/lib/interceptor/dump.js +10 -23
- package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +245 -150
- package/node_modules/undici/lib/web/websocket/connection.js +1 -1
- package/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
- package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
- package/node_modules/undici/package.json +1 -1
- package/node_modules/undici/types/interceptors.d.ts +2 -0
- package/node_modules/undici-types/client.d.ts +8 -3
- package/node_modules/undici-types/connector.d.ts +1 -0
- package/node_modules/undici-types/cookies.d.ts +1 -1
- package/node_modules/undici-types/dispatcher.d.ts +3 -3
- package/node_modules/undici-types/errors.d.ts +10 -0
- package/node_modules/undici-types/fetch.d.ts +5 -1
- package/node_modules/undici-types/handlers.d.ts +2 -0
- package/node_modules/undici-types/interceptors.d.ts +1 -1
- package/node_modules/undici-types/mock-interceptor.d.ts +5 -1
- package/node_modules/undici-types/package.json +1 -1
- package/node_modules/undici-types/proxy-agent.d.ts +7 -0
- package/node_modules/zod/README.md +2 -2
- package/node_modules/zod/compile.cjs +19 -0
- package/node_modules/zod/index.cjs +19 -0
- package/node_modules/zod/locales/index.cjs +19 -0
- package/node_modules/zod/mini/index.cjs +19 -0
- package/node_modules/zod/package.json +8 -7
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
- package/node_modules/zod/src/v4/classic/external.ts +2 -0
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
- package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
- package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
- package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
- package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
- package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
- package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
- package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
- package/node_modules/zod/src/v4/core/api.ts +44 -28
- package/node_modules/zod/src/v4/core/checks.ts +62 -102
- package/node_modules/zod/src/v4/core/compile.ts +218 -93
- package/node_modules/zod/src/v4/core/core.ts +1 -3
- package/node_modules/zod/src/v4/core/doc.ts +6 -2
- package/node_modules/zod/src/v4/core/errors.ts +3 -6
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
- package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
- package/node_modules/zod/src/v4/core/parse.ts +37 -16
- package/node_modules/zod/src/v4/core/regexes.ts +14 -4
- package/node_modules/zod/src/v4/core/schemas.ts +296 -132
- package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
- package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
- package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
- package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
- package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
- package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
- package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
- package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
- package/node_modules/zod/src/v4/core/util.ts +218 -147
- package/node_modules/zod/src/v4/core/versions.ts +2 -2
- package/node_modules/zod/src/v4/locales/ar.ts +2 -0
- package/node_modules/zod/src/v4/locales/az.ts +2 -0
- package/node_modules/zod/src/v4/locales/be.ts +2 -0
- package/node_modules/zod/src/v4/locales/bg.ts +2 -0
- package/node_modules/zod/src/v4/locales/bn.ts +2 -0
- package/node_modules/zod/src/v4/locales/ca.ts +2 -0
- package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
- package/node_modules/zod/src/v4/locales/cs.ts +2 -0
- package/node_modules/zod/src/v4/locales/da.ts +2 -0
- package/node_modules/zod/src/v4/locales/de.ts +2 -0
- package/node_modules/zod/src/v4/locales/el.ts +2 -0
- package/node_modules/zod/src/v4/locales/en.ts +2 -0
- package/node_modules/zod/src/v4/locales/eo.ts +2 -0
- package/node_modules/zod/src/v4/locales/es.ts +2 -0
- package/node_modules/zod/src/v4/locales/fa.ts +2 -0
- package/node_modules/zod/src/v4/locales/fi.ts +2 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
- package/node_modules/zod/src/v4/locales/fr.ts +2 -0
- package/node_modules/zod/src/v4/locales/gu.ts +2 -0
- package/node_modules/zod/src/v4/locales/he.ts +2 -0
- package/node_modules/zod/src/v4/locales/hi.ts +2 -0
- package/node_modules/zod/src/v4/locales/hr.ts +2 -0
- package/node_modules/zod/src/v4/locales/hu.ts +2 -0
- package/node_modules/zod/src/v4/locales/hy.ts +2 -0
- package/node_modules/zod/src/v4/locales/id.ts +2 -0
- package/node_modules/zod/src/v4/locales/index.ts +1 -0
- package/node_modules/zod/src/v4/locales/is.ts +2 -0
- package/node_modules/zod/src/v4/locales/it.ts +2 -0
- package/node_modules/zod/src/v4/locales/ja.ts +2 -0
- package/node_modules/zod/src/v4/locales/ka.ts +2 -0
- package/node_modules/zod/src/v4/locales/km.ts +2 -0
- package/node_modules/zod/src/v4/locales/kn.ts +2 -0
- package/node_modules/zod/src/v4/locales/ko.ts +2 -0
- package/node_modules/zod/src/v4/locales/lt.ts +2 -0
- package/node_modules/zod/src/v4/locales/mk.ts +2 -0
- package/node_modules/zod/src/v4/locales/ms.ts +2 -0
- package/node_modules/zod/src/v4/locales/ne.ts +2 -0
- package/node_modules/zod/src/v4/locales/nl.ts +2 -0
- package/node_modules/zod/src/v4/locales/nn.ts +2 -0
- package/node_modules/zod/src/v4/locales/no.ts +2 -0
- package/node_modules/zod/src/v4/locales/ota.ts +2 -0
- package/node_modules/zod/src/v4/locales/pl.ts +2 -0
- package/node_modules/zod/src/v4/locales/ps.ts +2 -0
- package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
- package/node_modules/zod/src/v4/locales/pt.ts +2 -0
- package/node_modules/zod/src/v4/locales/ro.ts +2 -0
- package/node_modules/zod/src/v4/locales/ru.ts +2 -0
- package/node_modules/zod/src/v4/locales/sk.ts +2 -0
- package/node_modules/zod/src/v4/locales/sl.ts +2 -0
- package/node_modules/zod/src/v4/locales/sv.ts +2 -0
- package/node_modules/zod/src/v4/locales/ta.ts +2 -0
- package/node_modules/zod/src/v4/locales/tg.ts +135 -0
- package/node_modules/zod/src/v4/locales/th.ts +2 -0
- package/node_modules/zod/src/v4/locales/tk.ts +2 -0
- package/node_modules/zod/src/v4/locales/tr.ts +2 -0
- package/node_modules/zod/src/v4/locales/uk.ts +2 -0
- package/node_modules/zod/src/v4/locales/ur.ts +2 -0
- package/node_modules/zod/src/v4/locales/uz.ts +2 -0
- package/node_modules/zod/src/v4/locales/vi.ts +2 -0
- package/node_modules/zod/src/v4/locales/yo.ts +2 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
- package/node_modules/zod/src/v4/mini/external.ts +2 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
- package/node_modules/zod/v3/ZodError.cjs +19 -0
- package/node_modules/zod/v3/errors.cjs +19 -0
- package/node_modules/zod/v3/external.cjs +19 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
- package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
- package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
- package/node_modules/zod/v3/helpers/util.cjs +19 -0
- package/node_modules/zod/v3/index.cjs +19 -0
- package/node_modules/zod/v3/standard-schema.cjs +19 -0
- package/node_modules/zod/v3/types.cjs +19 -0
- package/node_modules/zod/v4/classic/checks.cjs +19 -0
- package/node_modules/zod/v4/classic/coerce.cjs +19 -0
- package/node_modules/zod/v4/classic/compat.cjs +19 -0
- package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
- package/node_modules/zod/v4/classic/errors.cjs +19 -0
- package/node_modules/zod/v4/classic/external.cjs +22 -1
- package/node_modules/zod/v4/classic/external.d.cts +1 -1
- package/node_modules/zod/v4/classic/external.d.ts +1 -1
- package/node_modules/zod/v4/classic/external.js +1 -1
- package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
- package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
- package/node_modules/zod/v4/classic/in-out.cjs +19 -0
- package/node_modules/zod/v4/classic/index.cjs +19 -0
- package/node_modules/zod/v4/classic/iso.cjs +19 -0
- package/node_modules/zod/v4/classic/parse.cjs +19 -0
- package/node_modules/zod/v4/classic/schemas.cjs +100 -35
- package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
- package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
- package/node_modules/zod/v4/classic/schemas.js +77 -33
- package/node_modules/zod/v4/core/api.cjs +45 -22
- package/node_modules/zod/v4/core/api.d.cts +12 -6
- package/node_modules/zod/v4/core/api.d.ts +12 -6
- package/node_modules/zod/v4/core/api.js +25 -22
- package/node_modules/zod/v4/core/checks.cjs +51 -97
- package/node_modules/zod/v4/core/checks.d.cts +17 -1
- package/node_modules/zod/v4/core/checks.d.ts +17 -1
- package/node_modules/zod/v4/core/checks.js +31 -96
- package/node_modules/zod/v4/core/compile.cjs +173 -78
- package/node_modules/zod/v4/core/compile.d.cts +18 -4
- package/node_modules/zod/v4/core/compile.d.ts +18 -4
- package/node_modules/zod/v4/core/compile.js +154 -79
- package/node_modules/zod/v4/core/core.cjs +20 -1
- package/node_modules/zod/v4/core/core.js +1 -1
- package/node_modules/zod/v4/core/doc.cjs +26 -2
- package/node_modules/zod/v4/core/doc.js +7 -2
- package/node_modules/zod/v4/core/errors.cjs +21 -5
- package/node_modules/zod/v4/core/errors.js +2 -5
- package/node_modules/zod/v4/core/index.cjs +19 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
- package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
- package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
- package/node_modules/zod/v4/core/json-schema.cjs +19 -0
- package/node_modules/zod/v4/core/memoizer.cjs +111 -23
- package/node_modules/zod/v4/core/memoizer.js +69 -23
- package/node_modules/zod/v4/core/parse.cjs +56 -16
- package/node_modules/zod/v4/core/parse.js +37 -16
- package/node_modules/zod/v4/core/regexes.cjs +31 -6
- package/node_modules/zod/v4/core/regexes.d.cts +3 -0
- package/node_modules/zod/v4/core/regexes.d.ts +3 -0
- package/node_modules/zod/v4/core/regexes.js +10 -4
- package/node_modules/zod/v4/core/registries.cjs +19 -0
- package/node_modules/zod/v4/core/schemas.cjs +302 -114
- package/node_modules/zod/v4/core/schemas.d.cts +28 -8
- package/node_modules/zod/v4/core/schemas.d.ts +28 -8
- package/node_modules/zod/v4/core/schemas.js +279 -113
- package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
- package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
- package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
- package/node_modules/zod/v4/core/to-json-schema.js +7 -6
- package/node_modules/zod/v4/core/util.cjs +177 -143
- package/node_modules/zod/v4/core/util.d.cts +25 -4
- package/node_modules/zod/v4/core/util.d.ts +25 -4
- package/node_modules/zod/v4/core/util.js +156 -143
- package/node_modules/zod/v4/core/versions.cjs +21 -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 +19 -0
- package/node_modules/zod/v4/index.cjs +19 -0
- package/node_modules/zod/v4/locales/ar.cjs +2 -0
- package/node_modules/zod/v4/locales/ar.js +2 -0
- package/node_modules/zod/v4/locales/az.cjs +2 -0
- package/node_modules/zod/v4/locales/az.js +2 -0
- package/node_modules/zod/v4/locales/be.cjs +2 -0
- package/node_modules/zod/v4/locales/be.js +2 -0
- package/node_modules/zod/v4/locales/bg.cjs +2 -0
- package/node_modules/zod/v4/locales/bg.js +2 -0
- package/node_modules/zod/v4/locales/bn.cjs +2 -0
- package/node_modules/zod/v4/locales/bn.js +2 -0
- package/node_modules/zod/v4/locales/ca.cjs +2 -0
- package/node_modules/zod/v4/locales/ca.js +2 -0
- package/node_modules/zod/v4/locales/ckb.cjs +2 -0
- package/node_modules/zod/v4/locales/ckb.js +2 -0
- package/node_modules/zod/v4/locales/cs.cjs +2 -0
- package/node_modules/zod/v4/locales/cs.js +2 -0
- package/node_modules/zod/v4/locales/da.cjs +2 -0
- package/node_modules/zod/v4/locales/da.js +2 -0
- package/node_modules/zod/v4/locales/de.cjs +2 -0
- package/node_modules/zod/v4/locales/de.js +2 -0
- package/node_modules/zod/v4/locales/el.cjs +2 -0
- package/node_modules/zod/v4/locales/el.js +2 -0
- package/node_modules/zod/v4/locales/en.cjs +2 -0
- package/node_modules/zod/v4/locales/en.js +2 -0
- package/node_modules/zod/v4/locales/eo.cjs +2 -0
- package/node_modules/zod/v4/locales/eo.js +2 -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 +2 -0
- package/node_modules/zod/v4/locales/fa.js +2 -0
- package/node_modules/zod/v4/locales/fi.cjs +2 -0
- package/node_modules/zod/v4/locales/fi.js +2 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
- package/node_modules/zod/v4/locales/fr-CA.js +2 -0
- package/node_modules/zod/v4/locales/fr.cjs +2 -0
- package/node_modules/zod/v4/locales/fr.js +2 -0
- package/node_modules/zod/v4/locales/gu.cjs +2 -0
- package/node_modules/zod/v4/locales/gu.js +2 -0
- package/node_modules/zod/v4/locales/he.cjs +2 -0
- package/node_modules/zod/v4/locales/he.js +2 -0
- package/node_modules/zod/v4/locales/hi.cjs +2 -0
- package/node_modules/zod/v4/locales/hi.js +2 -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 +2 -0
- package/node_modules/zod/v4/locales/hu.js +2 -0
- package/node_modules/zod/v4/locales/hy.cjs +2 -0
- package/node_modules/zod/v4/locales/hy.js +2 -0
- package/node_modules/zod/v4/locales/id.cjs +2 -0
- package/node_modules/zod/v4/locales/id.js +2 -0
- package/node_modules/zod/v4/locales/index.cjs +22 -1
- package/node_modules/zod/v4/locales/index.d.cts +1 -0
- package/node_modules/zod/v4/locales/index.d.ts +1 -0
- package/node_modules/zod/v4/locales/index.js +1 -0
- package/node_modules/zod/v4/locales/is.cjs +2 -0
- package/node_modules/zod/v4/locales/is.js +2 -0
- package/node_modules/zod/v4/locales/it.cjs +2 -0
- package/node_modules/zod/v4/locales/it.js +2 -0
- package/node_modules/zod/v4/locales/ja.cjs +2 -0
- package/node_modules/zod/v4/locales/ja.js +2 -0
- package/node_modules/zod/v4/locales/ka.cjs +2 -0
- package/node_modules/zod/v4/locales/ka.js +2 -0
- package/node_modules/zod/v4/locales/km.cjs +2 -0
- package/node_modules/zod/v4/locales/km.js +2 -0
- package/node_modules/zod/v4/locales/kn.cjs +2 -0
- package/node_modules/zod/v4/locales/kn.js +2 -0
- package/node_modules/zod/v4/locales/ko.cjs +2 -0
- package/node_modules/zod/v4/locales/ko.js +2 -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 +2 -0
- package/node_modules/zod/v4/locales/mk.js +2 -0
- package/node_modules/zod/v4/locales/ms.cjs +2 -0
- package/node_modules/zod/v4/locales/ms.js +2 -0
- package/node_modules/zod/v4/locales/ne.cjs +2 -0
- package/node_modules/zod/v4/locales/ne.js +2 -0
- package/node_modules/zod/v4/locales/nl.cjs +2 -0
- package/node_modules/zod/v4/locales/nl.js +2 -0
- package/node_modules/zod/v4/locales/nn.cjs +2 -0
- package/node_modules/zod/v4/locales/nn.js +2 -0
- package/node_modules/zod/v4/locales/no.cjs +2 -0
- package/node_modules/zod/v4/locales/no.js +2 -0
- package/node_modules/zod/v4/locales/ota.cjs +2 -0
- package/node_modules/zod/v4/locales/ota.js +2 -0
- package/node_modules/zod/v4/locales/pl.cjs +2 -0
- package/node_modules/zod/v4/locales/pl.js +2 -0
- package/node_modules/zod/v4/locales/ps.cjs +2 -0
- package/node_modules/zod/v4/locales/ps.js +2 -0
- package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
- package/node_modules/zod/v4/locales/pt-BR.js +2 -0
- package/node_modules/zod/v4/locales/pt.cjs +2 -0
- package/node_modules/zod/v4/locales/pt.js +2 -0
- package/node_modules/zod/v4/locales/ro.cjs +2 -0
- package/node_modules/zod/v4/locales/ro.js +2 -0
- package/node_modules/zod/v4/locales/ru.cjs +2 -0
- package/node_modules/zod/v4/locales/ru.js +2 -0
- package/node_modules/zod/v4/locales/sk.cjs +2 -0
- package/node_modules/zod/v4/locales/sk.js +2 -0
- package/node_modules/zod/v4/locales/sl.cjs +2 -0
- package/node_modules/zod/v4/locales/sl.js +2 -0
- package/node_modules/zod/v4/locales/sv.cjs +2 -0
- package/node_modules/zod/v4/locales/sv.js +2 -0
- package/node_modules/zod/v4/locales/ta.cjs +2 -0
- package/node_modules/zod/v4/locales/ta.js +2 -0
- package/node_modules/zod/v4/locales/tg.cjs +144 -0
- package/node_modules/zod/v4/locales/tg.d.cts +5 -0
- package/node_modules/zod/v4/locales/tg.d.ts +4 -0
- package/node_modules/zod/v4/locales/tg.js +117 -0
- package/node_modules/zod/v4/locales/th.cjs +2 -0
- package/node_modules/zod/v4/locales/th.js +2 -0
- package/node_modules/zod/v4/locales/tk.cjs +2 -0
- package/node_modules/zod/v4/locales/tk.js +2 -0
- package/node_modules/zod/v4/locales/tr.cjs +2 -0
- package/node_modules/zod/v4/locales/tr.js +2 -0
- package/node_modules/zod/v4/locales/uk.cjs +2 -0
- package/node_modules/zod/v4/locales/uk.js +2 -0
- package/node_modules/zod/v4/locales/ur.cjs +2 -0
- package/node_modules/zod/v4/locales/ur.js +2 -0
- package/node_modules/zod/v4/locales/uz.cjs +2 -0
- package/node_modules/zod/v4/locales/uz.js +2 -0
- package/node_modules/zod/v4/locales/vi.cjs +2 -0
- package/node_modules/zod/v4/locales/vi.js +2 -0
- package/node_modules/zod/v4/locales/yo.cjs +2 -0
- package/node_modules/zod/v4/locales/yo.js +2 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
- package/node_modules/zod/v4/locales/zh-CN.js +2 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
- package/node_modules/zod/v4/locales/zh-TW.js +2 -0
- package/node_modules/zod/v4/mini/checks.cjs +19 -0
- package/node_modules/zod/v4/mini/coerce.cjs +19 -0
- package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
- package/node_modules/zod/v4/mini/external.cjs +22 -1
- package/node_modules/zod/v4/mini/external.d.cts +1 -1
- package/node_modules/zod/v4/mini/external.d.ts +1 -1
- package/node_modules/zod/v4/mini/external.js +1 -1
- package/node_modules/zod/v4/mini/in-out.cjs +19 -0
- package/node_modules/zod/v4/mini/index.cjs +19 -0
- package/node_modules/zod/v4/mini/iso.cjs +19 -0
- package/node_modules/zod/v4/mini/parse.cjs +19 -0
- package/node_modules/zod/v4/mini/schemas.cjs +44 -8
- package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
- package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
- package/node_modules/zod/v4/mini/schemas.js +21 -6
- package/node_modules/zod/v4-mini/index.cjs +19 -0
- package/package.json +2 -2
- package/slingshot/index.js +201 -198
- package/node_modules/jose/dist/webapi/lib/base64.js +0 -20
- package/node_modules/jose/dist/webapi/lib/crypto_key.js +0 -27
- package/node_modules/jose/dist/webapi/lib/helpers.js +0 -45
- package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +0 -12
- package/node_modules/jose/dist/webapi/lib/is_key_like.js +0 -19
- package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +0 -19
- package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +0 -10
- package/node_modules/jose/dist/webapi/lib/key_options.js +0 -8
- package/node_modules/jose/dist/webapi/lib/signing.js +0 -22
- package/node_modules/jose/dist/webapi/lib/type_checks.js +0 -30
|
@@ -9,19 +9,21 @@ import {
|
|
|
9
9
|
isValidBase64URL,
|
|
10
10
|
isValidCIDRv6,
|
|
11
11
|
isValidCreditCard,
|
|
12
|
+
isValidIBAN,
|
|
12
13
|
isValidIPv6,
|
|
13
14
|
isValidJWT,
|
|
14
15
|
mergeValues,
|
|
15
|
-
parseURLObject,
|
|
16
16
|
stripTabAndNewline,
|
|
17
17
|
urlHostnameOk,
|
|
18
18
|
urlProtocolOk,
|
|
19
|
+
validateURL,
|
|
19
20
|
} from "./schemas.js";
|
|
20
21
|
import type { ParseContextInternal, ParsePayload, SomeType } from "./schemas.js";
|
|
21
22
|
import * as util from "./util.js";
|
|
22
23
|
|
|
23
|
-
/** Sentinel
|
|
24
|
+
/** @internal Sentinel the compiled fast path returns when validation fails. */
|
|
24
25
|
export const INVALID: unique symbol = Symbol.for("zod.compile.invalid");
|
|
26
|
+
/** @internal */
|
|
25
27
|
export type INVALID = typeof INVALID;
|
|
26
28
|
|
|
27
29
|
// Set on the parse ctx when a compiled wrapper falls back to the runtime, so nested compiled wrappers skip their fast paths for the rest of that parse.
|
|
@@ -33,7 +35,11 @@ interface CompileFnOptions {
|
|
|
33
35
|
assertOnly?: boolean | undefined;
|
|
34
36
|
}
|
|
35
37
|
|
|
36
|
-
type CompiledFn<T> = ((input: unknown) => T | INVALID) & {
|
|
38
|
+
type CompiledFn<T> = ((input: unknown) => T | INVALID) & {
|
|
39
|
+
code?: string | undefined;
|
|
40
|
+
/** False when this function's INVALID does not strictly mean "the runtime would reject". */
|
|
41
|
+
definite?: boolean | undefined;
|
|
42
|
+
};
|
|
37
43
|
|
|
38
44
|
/** Raised when the schema contains async refinements or transforms. Surfaces only under `compile(schema, { strict: true })`. */
|
|
39
45
|
export class ZodCompileAsyncError extends Error {
|
|
@@ -64,6 +70,8 @@ interface CompileContext {
|
|
|
64
70
|
constants: Map<string, unknown>;
|
|
65
71
|
constantCounter: number;
|
|
66
72
|
varCounter: number;
|
|
73
|
+
/** Cleared when a construct can return INVALID for something the interpreter throws on, so `validate` keeps its fallback. */
|
|
74
|
+
definite: boolean;
|
|
67
75
|
}
|
|
68
76
|
|
|
69
77
|
// Union of all check types we support in AOT compilation
|
|
@@ -81,6 +89,7 @@ type SupportedCheck =
|
|
|
81
89
|
| checks.$ZodCheckLengthEquals
|
|
82
90
|
| checks.$ZodCheckStringFormat
|
|
83
91
|
| checks.$ZodCheckProperty
|
|
92
|
+
| checks.$ZodCheckProperties
|
|
84
93
|
| checks.$ZodCheckMimeType
|
|
85
94
|
| checks.$ZodCheckOverwrite
|
|
86
95
|
| { _zod: { def: { check: "custom"; fn?: (value: unknown) => boolean }; check?: (payload: unknown) => unknown } };
|
|
@@ -90,9 +99,9 @@ type SupportedCheck =
|
|
|
90
99
|
* dropped. A schema the flag cannot express reuses the parser, which still answers correctly — it
|
|
91
100
|
* just builds a value nothing reads.
|
|
92
101
|
*/
|
|
93
|
-
function compileValidator(schema: SomeType, parser:
|
|
102
|
+
function compileValidator(schema: SomeType, parser: CompiledFn<unknown>): CompiledFn<unknown> {
|
|
94
103
|
try {
|
|
95
|
-
return compileFn(schema, { assertOnly: true }) as
|
|
104
|
+
return compileFn(schema, { assertOnly: true }) as CompiledFn<unknown>;
|
|
96
105
|
} catch {
|
|
97
106
|
return parser;
|
|
98
107
|
}
|
|
@@ -117,53 +126,9 @@ export interface CompileOptions {
|
|
|
117
126
|
export function compile<T extends SomeType>(schema: T, options?: CompileOptions): T {
|
|
118
127
|
try {
|
|
119
128
|
const parser = compileFn(schema);
|
|
120
|
-
const clone =
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
const liveRun = schema._zod.run as ((p: ParsePayload, c: ParseContextInternal) => any) & {
|
|
124
|
-
__originalRun?: (p: ParsePayload, c: ParseContextInternal) => any;
|
|
125
|
-
};
|
|
126
|
-
const originalRun = liveRun.__originalRun ?? liveRun;
|
|
127
|
-
|
|
128
|
-
// Delegate to the *original* schema's run on bypass/fallback (not the
|
|
129
|
-
// clone's). The original closed over its own `inst` at construction time;
|
|
130
|
-
// issue payloads use that reference to derive things like the class name
|
|
131
|
-
// for `z.instanceof(Test)`. Calling the clone's freshly-initialized run
|
|
132
|
-
// would push issues with `inst === clone`, producing diverging error
|
|
133
|
-
// messages from the original schema.
|
|
134
|
-
const wrapped = (payload: ParsePayload, ctx: ParseContextInternal): any => {
|
|
135
|
-
if (
|
|
136
|
-
ctx?.async ||
|
|
137
|
-
ctx?.direction === "backward" ||
|
|
138
|
-
ctx?.skipChecks ||
|
|
139
|
-
(ctx as Record<symbol, unknown> | undefined)?.[FALLBACK_FLAG]
|
|
140
|
-
) {
|
|
141
|
-
return originalRun(payload, ctx);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// A memoized back-edge: only the runtime can close a reference cycle, and a transform on one must raise $ZodCyclicError from its own parse.
|
|
145
|
-
if (ctx && isBackEdge(ctx, payload.value)) {
|
|
146
|
-
return originalRun(payload, ctx);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const out = parser(payload.value);
|
|
150
|
-
if (out !== INVALID) {
|
|
151
|
-
payload.value = out;
|
|
152
|
-
return payload;
|
|
153
|
-
}
|
|
154
|
-
// Mark this parse as runtime-driven: under global mode every nested schema carries its own compiled wrapper, and without the flag the parent's runtime fallback re-enters each child's fast path, running user callbacks a third time on invalid input.
|
|
155
|
-
if (ctx) (ctx as Record<symbol, unknown>)[FALLBACK_FLAG] = true;
|
|
156
|
-
return originalRun(payload, ctx);
|
|
157
|
-
};
|
|
158
|
-
// Let later compiles of (or through) this run unwrap to the true runtime — both the global shim and repeated z.compile calls rely on this. The bag also carries the parser and the validator, so the standalone validate can skip the payload and wrapper on the happy path.
|
|
159
|
-
(wrapped as { __originalRun?: typeof originalRun }).__originalRun = originalRun;
|
|
160
|
-
clone._zod.bag.fallbackRun = originalRun;
|
|
161
|
-
clone._zod.bag.validator = compileValidator(schema, parser as (input: unknown) => unknown);
|
|
162
|
-
clone._zod.run = wrapped;
|
|
163
|
-
|
|
164
|
-
// The fast parse/safeParse closures fall back through the source schema's methods. If the source is shim- or wrapper-managed, those methods route into a compiled run and would execute user callbacks a third time on invalid input — the plain method → wrapper path is exactly 2x, so skip.
|
|
165
|
-
if (!liveRun.__originalRun) installCompiledUserMethods(clone, schema, parser);
|
|
166
|
-
|
|
129
|
+
const clone = withParser(schema, parser);
|
|
130
|
+
// withParser leaves the parser as its own validator; the generated assert-only variant is better when we have one
|
|
131
|
+
clone._zod.bag.validator = compileValidator(schema, parser as CompiledFn<unknown>);
|
|
167
132
|
return clone;
|
|
168
133
|
} catch (err) {
|
|
169
134
|
if (options?.strict) throw err;
|
|
@@ -172,6 +137,68 @@ export function compile<T extends SomeType>(schema: T, options?: CompileOptions)
|
|
|
172
137
|
}
|
|
173
138
|
}
|
|
174
139
|
|
|
140
|
+
/**
|
|
141
|
+
* Install an already-generated parser as a schema's fast path. Returns a clone; the original is
|
|
142
|
+
* unchanged.
|
|
143
|
+
*
|
|
144
|
+
* The parser takes the input and returns the parsed value, or `INVALID` to hand the parse to the
|
|
145
|
+
* runtime. It must be synchronous and forward-direction, and it must build fresh output rather than
|
|
146
|
+
* return its input — Zod cannot check either, and a wrong *success* is returned to the caller as-is.
|
|
147
|
+
*
|
|
148
|
+
* `compile()` is the ordinary entry point. This is for a build-time or native compiler that produces
|
|
149
|
+
* a parser where `new Function` is unavailable.
|
|
150
|
+
*/
|
|
151
|
+
export function withParser<T extends SomeType>(schema: T, parser: (input: unknown) => core.output<T> | INVALID): T {
|
|
152
|
+
// generated code never receives the parse context, so only the runtime can close a reference cycle; compileFn refuses these too
|
|
153
|
+
if (isRecursiveSchema(schema as any)) {
|
|
154
|
+
throw new ZodCompileUnsupportedError("a schema whose subtree contains a reference cycle");
|
|
155
|
+
}
|
|
156
|
+
const clone = util.clone(schema as any) as T;
|
|
157
|
+
|
|
158
|
+
// Capture the source-of-truth runtime eagerly. If schema._zod.run is itself a shim installed by global-mode (`__originalRun` set), unwrap past it. Otherwise capturing the live property lazily would let a later self- replacement of schema._zod.run feed our wrapper back into itself.
|
|
159
|
+
const liveRun = schema._zod.run as ((p: ParsePayload, c: ParseContextInternal) => any) & {
|
|
160
|
+
__originalRun?: (p: ParsePayload, c: ParseContextInternal) => any;
|
|
161
|
+
};
|
|
162
|
+
const originalRun = liveRun.__originalRun ?? liveRun;
|
|
163
|
+
|
|
164
|
+
// Delegate to the *original* schema's run on bypass/fallback, not the clone's. The original closed over its own `inst` at construction time, and issue payloads use that reference to derive things like the class name for `z.instanceof(Test)`; calling the clone's freshly-initialized run would push issues with `inst === clone` and diverge from the original schema's error messages.
|
|
165
|
+
const wrapped = (payload: ParsePayload, ctx: ParseContextInternal): any => {
|
|
166
|
+
if (
|
|
167
|
+
ctx?.async ||
|
|
168
|
+
ctx?.direction === "backward" ||
|
|
169
|
+
ctx?.skipChecks ||
|
|
170
|
+
(ctx as Record<symbol, unknown> | undefined)?.[FALLBACK_FLAG]
|
|
171
|
+
) {
|
|
172
|
+
return originalRun(payload, ctx);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// A memoized back-edge: only the runtime can close a reference cycle, and a transform on one must raise $ZodCyclicError from its own parse.
|
|
176
|
+
if (ctx && isBackEdge(ctx, payload.value)) {
|
|
177
|
+
return originalRun(payload, ctx);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const out = parser(payload.value);
|
|
181
|
+
if (out !== INVALID) {
|
|
182
|
+
payload.value = out;
|
|
183
|
+
return payload;
|
|
184
|
+
}
|
|
185
|
+
// Mark this parse as runtime-driven: under global mode every nested schema carries its own compiled wrapper, and without the flag the parent's runtime fallback re-enters each child's fast path, running user callbacks a third time on invalid input.
|
|
186
|
+
if (ctx) (ctx as Record<symbol, unknown>)[FALLBACK_FLAG] = true;
|
|
187
|
+
return originalRun(payload, ctx);
|
|
188
|
+
};
|
|
189
|
+
// Let later compiles of (or through) this run unwrap to the true runtime — both the global shim and repeated z.compile calls rely on this. The bag also carries the parser and the validator, so the standalone validate can skip the payload and wrapper on the happy path.
|
|
190
|
+
(wrapped as { __originalRun?: typeof originalRun }).__originalRun = originalRun;
|
|
191
|
+
clone._zod.bag.fallbackRun = originalRun;
|
|
192
|
+
// a supplied parser answers `validate` too: one implementation means parse and validate cannot disagree, and its undefined `definite` keeps the runtime re-parse on every rejection
|
|
193
|
+
clone._zod.bag.validator = parser as CompiledFn<unknown>;
|
|
194
|
+
clone._zod.run = wrapped;
|
|
195
|
+
|
|
196
|
+
// The fast parse/safeParse closures fall back through the source schema's methods. If the source is shim- or wrapper-managed, those methods route into a compiled run and would execute user callbacks a third time on invalid input — the plain method → wrapper path is exactly 2x, so skip.
|
|
197
|
+
if (!liveRun.__originalRun) installCompiledUserMethods(clone, schema, parser as CompiledFn<core.output<T>>);
|
|
198
|
+
|
|
199
|
+
return clone;
|
|
200
|
+
}
|
|
201
|
+
|
|
175
202
|
function installCompiledUserMethods<T extends SomeType>(
|
|
176
203
|
target: T,
|
|
177
204
|
source: T,
|
|
@@ -204,9 +231,8 @@ function installCompiledUserMethods<T extends SomeType>(
|
|
|
204
231
|
}
|
|
205
232
|
|
|
206
233
|
/**
|
|
207
|
-
* Generate the standalone compiled function: a parser by default, a validator under
|
|
208
|
-
* `assertOnly`. Returns
|
|
209
|
-
* or the `INVALID` sentinel. Internal — consumers should use `compile()`.
|
|
234
|
+
* @internal Generate the standalone compiled function: a parser by default, a validator under
|
|
235
|
+
* `assertOnly`. Returns the parsed value, `true` where nothing reads the output, or `INVALID`. Consumers use `compile()`.
|
|
210
236
|
*/
|
|
211
237
|
export function compileFn<T extends SomeType>(schema: T, options?: CompileFnOptions): CompiledFn<core.output<T>> {
|
|
212
238
|
// Cycle-breaking is keyed on the parse context, which generated code never receives. `shape` can be a getter that throws (z.pick() with an unrecognized mask key), so treat "can't tell" as recursive.
|
|
@@ -222,6 +248,7 @@ export function compileFn<T extends SomeType>(schema: T, options?: CompileFnOpti
|
|
|
222
248
|
constants: new Map(),
|
|
223
249
|
constantCounter: 0,
|
|
224
250
|
varCounter: 0,
|
|
251
|
+
definite: true,
|
|
225
252
|
};
|
|
226
253
|
|
|
227
254
|
const doc = new Doc(["input"]);
|
|
@@ -253,6 +280,7 @@ export function compileFn<T extends SomeType>(schema: T, options?: CompileFnOpti
|
|
|
253
280
|
if (options?.debug) {
|
|
254
281
|
fn.code = fullCode;
|
|
255
282
|
}
|
|
283
|
+
fn.definite = ctx.definite;
|
|
256
284
|
return fn;
|
|
257
285
|
}
|
|
258
286
|
|
|
@@ -266,6 +294,12 @@ function addConstant(ctx: CompileContext, value: unknown): string {
|
|
|
266
294
|
return name;
|
|
267
295
|
}
|
|
268
296
|
|
|
297
|
+
/** Hoists a user-supplied callback. Anything the schema's author wrote can throw, and generated code can reject an earlier sibling before ever reaching it, so this clears `definite` — a rejection is then no longer proof that the interpreter would have rejected rather than thrown. */
|
|
298
|
+
function addUserConstant(ctx: CompileContext, fn: unknown): string {
|
|
299
|
+
ctx.definite = false;
|
|
300
|
+
return addConstant(ctx, fn);
|
|
301
|
+
}
|
|
302
|
+
|
|
269
303
|
function newVar(ctx: CompileContext): string {
|
|
270
304
|
return `v${ctx.varCounter++}`;
|
|
271
305
|
}
|
|
@@ -322,6 +356,8 @@ function compileChild(
|
|
|
322
356
|
}
|
|
323
357
|
|
|
324
358
|
function emitRuntimeIsland(doc: Doc, ctx: CompileContext, schema: SomeType, accessor: string): string {
|
|
359
|
+
// an islanded child answers INVALID for an async run too, which the interpreter throws for
|
|
360
|
+
ctx.definite = false;
|
|
325
361
|
const schemaConst = addConstant(ctx, schema);
|
|
326
362
|
const runConst = addConstant(ctx, runtimeRun);
|
|
327
363
|
const outVar = newVar(ctx);
|
|
@@ -418,6 +454,9 @@ function generateChecks(doc: Doc, ctx: CompileContext, schema: SomeType, accesso
|
|
|
418
454
|
case "property":
|
|
419
455
|
generatePropertyCheck(doc, ctx, def, currentAccessor);
|
|
420
456
|
break;
|
|
457
|
+
case "properties":
|
|
458
|
+
generatePropertiesChecks(doc, ctx, def, currentAccessor);
|
|
459
|
+
break;
|
|
421
460
|
case "overwrite": {
|
|
422
461
|
// Overwrite transforms the value - create new variable for transformed result
|
|
423
462
|
const newAccessor = newVar(ctx);
|
|
@@ -573,6 +612,30 @@ function generateMimeTypeCheck(
|
|
|
573
612
|
}
|
|
574
613
|
}
|
|
575
614
|
|
|
615
|
+
// asserts each named property in place; children compile assert-only because z.properties never rebuilds its input
|
|
616
|
+
function generatePropertiesChecks(
|
|
617
|
+
doc: Doc,
|
|
618
|
+
ctx: CompileContext,
|
|
619
|
+
def: checks.$ZodCheckPropertiesDef,
|
|
620
|
+
accessor: string
|
|
621
|
+
): void {
|
|
622
|
+
// a custom `when` gates the assertion at runtime; inside a union a wrongly-run branch is absorbed as a branch failure rather than falling back, so refuse at codegen
|
|
623
|
+
if (def.when) {
|
|
624
|
+
throw new ZodCompileUnsupportedError(`check with a custom "when" condition`);
|
|
625
|
+
}
|
|
626
|
+
// matches the runtime gate: the base schema already typed the value, so only a nullish one is rejected
|
|
627
|
+
doc.write(`if (${accessor} == null) return INVALID;`);
|
|
628
|
+
const shape = def.shape as Record<string | symbol, SomeType>;
|
|
629
|
+
for (const key of Reflect.ownKeys(shape)) {
|
|
630
|
+
// a symbol has no source literal, so it is hoisted as a constant
|
|
631
|
+
const keyExpr = typeof key === "symbol" ? addConstant(ctx, key) : util.esc(key);
|
|
632
|
+
// cache the property read so a getter runs exactly once, matching the runtime
|
|
633
|
+
const inputVar = newVar(ctx);
|
|
634
|
+
doc.write(`const ${inputVar} = ${accessor}[${keyExpr}];`);
|
|
635
|
+
compileChild(doc, ctx, shape[key]!, inputVar, false);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
576
639
|
function generatePropertyCheck(
|
|
577
640
|
doc: Doc,
|
|
578
641
|
ctx: CompileContext,
|
|
@@ -626,7 +689,7 @@ function generateCustomRefineCheck(doc: Doc, ctx: CompileContext, check: CustomC
|
|
|
626
689
|
if (isAsyncFunction(def.fn)) {
|
|
627
690
|
throw new ZodCompileAsyncError("z.compile: async .refine() predicates are not supported");
|
|
628
691
|
}
|
|
629
|
-
const fnConst =
|
|
692
|
+
const fnConst = addUserConstant(ctx, def.fn);
|
|
630
693
|
const throwAsyncConst = addConstant(ctx, throwAsync);
|
|
631
694
|
const resVar = newVar(ctx);
|
|
632
695
|
doc.write(`const ${resVar} = ${fnConst}(${accessor});`);
|
|
@@ -653,7 +716,7 @@ function generateCustomRefineCheck(doc: Doc, ctx: CompileContext, check: CustomC
|
|
|
653
716
|
if (result instanceof Promise) throwAsync();
|
|
654
717
|
return fakePayload.issues.length === 0 ? fakePayload.value : INVALID;
|
|
655
718
|
};
|
|
656
|
-
const helperConst =
|
|
719
|
+
const helperConst = addUserConstant(ctx, helperFn);
|
|
657
720
|
const outVar = newVar(ctx);
|
|
658
721
|
doc.write(`const ${outVar} = ${helperConst}(${accessor});`);
|
|
659
722
|
doc.write(`if (${outVar} === INVALID) return INVALID;`);
|
|
@@ -709,7 +772,21 @@ const PATTERN_IS_COMPLETE: Set<string> = new Set([
|
|
|
709
772
|
]);
|
|
710
773
|
|
|
711
774
|
// Returns the accessor holding the (possibly normalized) value after the check — url/normalize formats produce a new value like overwrite does. Never assigns to the incoming accessor: it may be a `const` or a property expression on user input.
|
|
712
|
-
function generateStringFormatCheck(doc: Doc, ctx: CompileContext, def: StringFormatDef, accessor: string): string
|
|
775
|
+
function generateStringFormatCheck(doc: Doc, ctx: CompileContext, def: StringFormatDef, accessor: string): string;
|
|
776
|
+
function generateStringFormatCheck(
|
|
777
|
+
doc: Doc,
|
|
778
|
+
ctx: CompileContext,
|
|
779
|
+
def: StringFormatDef,
|
|
780
|
+
accessor: string,
|
|
781
|
+
needsValue: boolean
|
|
782
|
+
): string | null;
|
|
783
|
+
function generateStringFormatCheck(
|
|
784
|
+
doc: Doc,
|
|
785
|
+
ctx: CompileContext,
|
|
786
|
+
def: StringFormatDef,
|
|
787
|
+
accessor: string,
|
|
788
|
+
needsValue = true
|
|
789
|
+
): string | null {
|
|
713
790
|
// Some string formats do runtime validation beyond their advertised pattern. For cheap pure utility checks, hoist the runtime function and call it so the fast path stays correct without cloning the utility logic into codegen.
|
|
714
791
|
const fmt = def.format;
|
|
715
792
|
if (fmt === "base64") {
|
|
@@ -743,6 +820,11 @@ function generateStringFormatCheck(doc: Doc, ctx: CompileContext, def: StringFor
|
|
|
743
820
|
doc.write(`if (!${validator}(${accessor})) return INVALID;`);
|
|
744
821
|
return accessor;
|
|
745
822
|
}
|
|
823
|
+
if (fmt === "iban") {
|
|
824
|
+
const validator = addConstant(ctx, isValidIBAN);
|
|
825
|
+
doc.write(`if (!${validator}(${accessor})) return INVALID;`);
|
|
826
|
+
return accessor;
|
|
827
|
+
}
|
|
746
828
|
const formatDef = def as unknown as { normalize?: boolean; hostname?: unknown; protocol?: unknown };
|
|
747
829
|
if (
|
|
748
830
|
fmt === "url" ||
|
|
@@ -752,7 +834,7 @@ function generateStringFormatCheck(doc: Doc, ctx: CompileContext, def: StringFor
|
|
|
752
834
|
formatDef.protocol !== undefined
|
|
753
835
|
) {
|
|
754
836
|
// Same three predicates the runtime calls, in the same order, so there is no second URL implementation to drift. Which options exist is known now, so the calls the runtime makes conditionally are emitted conditionally instead.
|
|
755
|
-
const parseConst = addConstant(ctx,
|
|
837
|
+
const parseConst = addConstant(ctx, validateURL);
|
|
756
838
|
const defConst = addConstant(ctx, def);
|
|
757
839
|
const trimVar = newVar(ctx);
|
|
758
840
|
const urlVar = newVar(ctx);
|
|
@@ -767,6 +849,7 @@ function generateStringFormatCheck(doc: Doc, ctx: CompileContext, def: StringFor
|
|
|
767
849
|
const protocolConst = addConstant(ctx, urlProtocolOk);
|
|
768
850
|
doc.write(`if (!${protocolConst}(${urlVar}, ${defConst}.protocol)) return INVALID;`);
|
|
769
851
|
}
|
|
852
|
+
if (!needsValue) return null;
|
|
770
853
|
const outputVar = newVar(ctx);
|
|
771
854
|
const outputExpr = formatDef.normalize ? `${urlVar}.href` : `${addConstant(ctx, stripTabAndNewline)}(${trimVar})`;
|
|
772
855
|
doc.write(`const ${outputVar} = ${outputExpr};`);
|
|
@@ -893,7 +976,7 @@ function generateCheck(
|
|
|
893
976
|
|
|
894
977
|
switch (type) {
|
|
895
978
|
case "string":
|
|
896
|
-
typeAccessor = generateStringCheck(doc, ctx, schema, accessor);
|
|
979
|
+
typeAccessor = generateStringCheck(doc, ctx, schema, accessor, buildsValue);
|
|
897
980
|
break;
|
|
898
981
|
case "number":
|
|
899
982
|
typeAccessor = generateNumberCheck(doc, schema, accessor);
|
|
@@ -1024,13 +1107,19 @@ function generateCheck(
|
|
|
1024
1107
|
return generateChecks(doc, ctx, schema, typeAccessor);
|
|
1025
1108
|
}
|
|
1026
1109
|
|
|
1027
|
-
function generateStringCheck(
|
|
1110
|
+
function generateStringCheck(
|
|
1111
|
+
doc: Doc,
|
|
1112
|
+
ctx: CompileContext,
|
|
1113
|
+
schema: SomeType,
|
|
1114
|
+
accessor: string,
|
|
1115
|
+
needsValue = true
|
|
1116
|
+
): string | null {
|
|
1028
1117
|
doc.write(`if (typeof ${accessor} !== "string") return INVALID;`);
|
|
1029
1118
|
|
|
1030
1119
|
// z.email() carries its format on the def, z.string().email() in def.checks; both route here so the format table has no second copy to drift from.
|
|
1031
1120
|
const def = schema._zod.def as unknown as StringFormatDef & { format?: string };
|
|
1032
1121
|
if (def.format === undefined) return accessor;
|
|
1033
|
-
return generateStringFormatCheck(doc, ctx, def, accessor);
|
|
1122
|
+
return generateStringFormatCheck(doc, ctx, def, accessor, needsValue);
|
|
1034
1123
|
}
|
|
1035
1124
|
|
|
1036
1125
|
function generateNumberCheck(doc: Doc, schema: SomeType, accessor: string): string {
|
|
@@ -1192,9 +1281,9 @@ function generateObjectCheck(
|
|
|
1192
1281
|
}
|
|
1193
1282
|
// else: strip mode (no catchall) - unknown keys ignored, only include known keys
|
|
1194
1283
|
|
|
1195
|
-
//
|
|
1284
|
+
// defaulted required outputs keep their keys even when undefined
|
|
1196
1285
|
const outputVar = newVar(ctx);
|
|
1197
|
-
const hasConditionalKeys = allKeys.some((k) =>
|
|
1286
|
+
const hasConditionalKeys = allKeys.some((k) => mayOmitUndefined(propShape[k]!) || dropsWhenAbsent(propShape[k]!));
|
|
1198
1287
|
|
|
1199
1288
|
// Assert mode: every declared key is validated above, so the output literal and the unknown-key copy are pure waste. A `never` catchall already emitted its rejection loop; a schema catchall still has to validate the values it would otherwise have stored.
|
|
1200
1289
|
if (!buildsValue) {
|
|
@@ -1223,7 +1312,7 @@ function generateObjectCheck(
|
|
|
1223
1312
|
const out = propOutputs.get(k);
|
|
1224
1313
|
if (dropsWhenAbsent(propShape[k]!)) {
|
|
1225
1314
|
doc.write(`if (${kx} in ${accessor}) ${outputVar}[${kx}] = ${out};`);
|
|
1226
|
-
} else if (
|
|
1315
|
+
} else if (mayOmitUndefined(propShape[k]!)) {
|
|
1227
1316
|
doc.write(`if (${out} !== undefined || ${kx} in ${accessor}) ${outputVar}[${kx}] = ${out};`);
|
|
1228
1317
|
} else {
|
|
1229
1318
|
doc.write(`${outputVar}[${kx}] = ${out};`);
|
|
@@ -1386,9 +1475,11 @@ function dropsWhenAbsent(schema: SomeType): boolean {
|
|
|
1386
1475
|
return schema._zod.optin === "optional" && schema._zod.optout === "optional";
|
|
1387
1476
|
}
|
|
1388
1477
|
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1478
|
+
function mayOmitUndefined(schema: SomeType): boolean {
|
|
1479
|
+
return (schema._zod.optin !== "defaulted" || schema._zod.optout === "optional") && mayOutputUndefined(schema);
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
// whether a schema's success-path output can be undefined
|
|
1392
1483
|
function mayOutputUndefined(schema: SomeType): boolean {
|
|
1393
1484
|
const def = schema._zod.def as {
|
|
1394
1485
|
type: string;
|
|
@@ -1791,7 +1882,7 @@ function generateDiscriminatedUnionCheck(
|
|
|
1791
1882
|
throw new ZodCompileUnsupportedError("discriminated union option without static discriminator values");
|
|
1792
1883
|
}
|
|
1793
1884
|
|
|
1794
|
-
//
|
|
1885
|
+
// let the interpreter handle collisions instead of compiling first-match dispatch
|
|
1795
1886
|
for (const value of values) {
|
|
1796
1887
|
if (claimed.has(value)) {
|
|
1797
1888
|
throw new ZodCompileUnsupportedError(`duplicate discriminator value ${String(value)}`);
|
|
@@ -1833,6 +1924,8 @@ function literalEquality(ctx: CompileContext, accessor: string, value: unknown):
|
|
|
1833
1924
|
|
|
1834
1925
|
function generateIntersectionCheck(doc: Doc, ctx: CompileContext, schema: SomeType, accessor: string): string {
|
|
1835
1926
|
const def = schema._zod.def as unknown as { left: SomeType; right: SomeType };
|
|
1927
|
+
// An unmergeable merge, and a child failing before the merge is even reached, both return INVALID for a case the interpreter answers with a throw.
|
|
1928
|
+
ctx.definite = false;
|
|
1836
1929
|
const leftOutput = compileChild(doc, ctx, def.left, accessor);
|
|
1837
1930
|
const rightOutput = compileChild(doc, ctx, def.right, accessor);
|
|
1838
1931
|
|
|
@@ -1912,15 +2005,15 @@ function generateRecordCheck(doc: Doc, ctx: CompileContext, schema: SomeType, ac
|
|
|
1912
2005
|
// The runtime runs it against each own enumerable key and writes the value
|
|
1913
2006
|
// under the key it produced, so compile it once and call it per key.
|
|
1914
2007
|
const isLoose = (def as { mode?: string }).mode === "loose";
|
|
1915
|
-
|
|
2008
|
+
// the key compiles in its own context, so carry its verdict out: a key schema that can answer INVALID undecidably makes this validator undecidable too
|
|
2009
|
+
const keyFn = compileFn(def.keyType);
|
|
2010
|
+
if (keyFn.definite === false) ctx.definite = false;
|
|
2011
|
+
const keyFast = addConstant(ctx, keyFn);
|
|
1916
2012
|
const numericConst = addConstant(ctx, regexes.number);
|
|
1917
|
-
const propIsEnumerableConst = addConstant(ctx, Object.prototype.propertyIsEnumerable);
|
|
1918
2013
|
const outKeyVar = newVar(ctx);
|
|
1919
2014
|
|
|
1920
|
-
|
|
1921
|
-
doc
|
|
1922
|
-
d.write(`if (${kVar} === "__proto__") continue;`);
|
|
1923
|
-
d.write(`if (!${propIsEnumerableConst}.call(${accessor}, ${kVar})) continue;`);
|
|
2015
|
+
// the body runs once per string key and once per symbol key, since a key schema can accept symbols
|
|
2016
|
+
emitOwnKeys(doc, ctx, accessor, kVar, (d) => {
|
|
1924
2017
|
d.write(`let ${outKeyVar} = ${keyFast}(${kVar});`);
|
|
1925
2018
|
// Numeric-string retry, mirroring the runtime: a key the schema rejects as a string is tried again as a number, so z.record(z.number(), …) matches the numeric keys JavaScript stringified on the way in.
|
|
1926
2019
|
d.write(
|
|
@@ -1940,24 +2033,56 @@ function generateRecordCheck(doc: Doc, ctx: CompileContext, schema: SomeType, ac
|
|
|
1940
2033
|
const valOutput = compileChild(d, ctx, def.valueType, valueVar);
|
|
1941
2034
|
d.write(`${outputVar}[${outKeyVar}] = ${valOutput};`);
|
|
1942
2035
|
});
|
|
1943
|
-
doc.write(`}`);
|
|
1944
2036
|
return outputVar;
|
|
1945
2037
|
}
|
|
1946
2038
|
|
|
1947
|
-
// Plain z.string() keys:
|
|
1948
|
-
|
|
1949
|
-
|
|
2039
|
+
// Plain z.string() keys: every own enumerable string key's value is validated, and an own enumerable symbol key fails the string key schema, as it does in the runtime's Reflect.ownKeys walk.
|
|
2040
|
+
emitOwnKeys(
|
|
2041
|
+
doc,
|
|
2042
|
+
ctx,
|
|
2043
|
+
accessor,
|
|
2044
|
+
kVar,
|
|
2045
|
+
(d) => {
|
|
2046
|
+
d.write(`const ${valVar} = ${accessor}[${kVar}];`);
|
|
2047
|
+
const valOutput = compileChild(d, ctx, def.valueType, valVar);
|
|
2048
|
+
d.write(`${outputVar}[${kVar}] = ${valOutput};`);
|
|
2049
|
+
},
|
|
2050
|
+
`return INVALID;`
|
|
2051
|
+
);
|
|
2052
|
+
|
|
2053
|
+
return outputVar;
|
|
2054
|
+
}
|
|
2055
|
+
|
|
2056
|
+
// Walks the own enumerable keys of a plain object in Reflect.ownKeys order — strings from getOwnPropertyNames, then symbols — instead of Reflect.ownKeys, whose accumulator made that walk 3–6x the cost of the loop it fed. Both snapshots are taken before any value is read and every key is rechecked with propertyIsEnumerable when visited, exactly the runtime's walk, so a getter that adds, deletes, hides or reveals a key mid-walk sees the runtime's verdict; for-in and Object.keys were no faster and each lost a case (for-in enumerates the prototype chain after the own keys, Object.keys drops a key that is non-enumerable at snapshot time). `body` is written once for the string loop and once for the symbol loop unless `onSymbol` replaces the latter.
|
|
2057
|
+
function emitOwnKeys(
|
|
2058
|
+
doc: Doc,
|
|
2059
|
+
ctx: CompileContext,
|
|
2060
|
+
accessor: string,
|
|
2061
|
+
kVar: string,
|
|
2062
|
+
body: (d: Doc) => void,
|
|
2063
|
+
onSymbol?: string
|
|
2064
|
+
): void {
|
|
2065
|
+
const propIsEnumerableConst = addConstant(ctx, Object.prototype.propertyIsEnumerable);
|
|
2066
|
+
const symsVar = newVar(ctx);
|
|
2067
|
+
const keysVar = newVar(ctx);
|
|
2068
|
+
const iVar = newVar(ctx);
|
|
2069
|
+
doc.write(`const ${symsVar} = Object.getOwnPropertySymbols(${accessor});`);
|
|
2070
|
+
doc.write(`const ${keysVar} = Object.getOwnPropertyNames(${accessor});`);
|
|
2071
|
+
doc.write(`for (let ${iVar} = 0; ${iVar} < ${keysVar}.length; ${iVar}++) {`);
|
|
1950
2072
|
doc.indented((d) => {
|
|
1951
|
-
d.write(`
|
|
1952
|
-
d.write(`if (!${
|
|
1953
|
-
d
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
2073
|
+
d.write(`const ${kVar} = ${keysVar}[${iVar}];`);
|
|
2074
|
+
d.write(`if (${kVar} === "__proto__" || !${propIsEnumerableConst}.call(${accessor}, ${kVar})) continue;`);
|
|
2075
|
+
body(d);
|
|
2076
|
+
});
|
|
2077
|
+
doc.write(`}`);
|
|
2078
|
+
doc.write(`for (let ${iVar} = 0; ${iVar} < ${symsVar}.length; ${iVar}++) {`);
|
|
2079
|
+
doc.indented((d) => {
|
|
2080
|
+
d.write(`const ${kVar} = ${symsVar}[${iVar}];`);
|
|
2081
|
+
d.write(`if (!${propIsEnumerableConst}.call(${accessor}, ${kVar})) continue;`);
|
|
2082
|
+
if (onSymbol) d.write(onSymbol);
|
|
2083
|
+
else body(d);
|
|
1957
2084
|
});
|
|
1958
2085
|
doc.write(`}`);
|
|
1959
|
-
|
|
1960
|
-
return outputVar;
|
|
1961
2086
|
}
|
|
1962
2087
|
|
|
1963
2088
|
function literalPropertyKey(ctx: CompileContext, key: string | symbol): string {
|
|
@@ -2027,7 +2152,7 @@ function generateTemplateLiteralCheck(doc: Doc, ctx: CompileContext, schema: Som
|
|
|
2027
2152
|
function generateLazyCheck(doc: Doc, ctx: CompileContext, schema: SomeType, accessor: string): string {
|
|
2028
2153
|
// For lazy schemas, we use a cached parser that falls back to runtime Zod parsing This handles recursive schemas correctly by avoiding infinite compilation loops
|
|
2029
2154
|
const def = schema._zod.def as unknown as { getter: () => SomeType };
|
|
2030
|
-
const getterConst =
|
|
2155
|
+
const getterConst = addUserConstant(ctx, def.getter);
|
|
2031
2156
|
const cacheConst = addConstant(ctx, { parser: null as ((input: unknown) => unknown) | null });
|
|
2032
2157
|
|
|
2033
2158
|
doc.write(`if (!${cacheConst}.parser) {`);
|
|
@@ -2060,7 +2185,7 @@ function generatePipeCheck(doc: Doc, ctx: CompileContext, schema: SomeType, acce
|
|
|
2060
2185
|
const inputOutput = generateCheck(doc, ctx, def.in, accessor);
|
|
2061
2186
|
|
|
2062
2187
|
if (def.transform) {
|
|
2063
|
-
// Apply transform and validate output. The transform may read its second `payload` argument (codec transforms like z.stringbool() push issues there) so wrap the call in a helper that spoofs a payload. Pushed issues signal INVALID and the wrapper falls back to the runtime.
|
|
2188
|
+
// Apply transform and validate output. The transform may read its second `payload` argument (codec transforms like z.stringbool() push issues there) so wrap the call in a helper that spoofs a payload. Pushed issues signal INVALID and the wrapper falls back to the runtime, and a plain function handing back a promise answers INVALID too — union parity, but not a decidable rejection at the top level.
|
|
2064
2189
|
if (isAsyncFunction(def.transform)) {
|
|
2065
2190
|
throw new ZodCompileAsyncError("z.compile: async transforms in pipes are not supported");
|
|
2066
2191
|
}
|
|
@@ -2073,7 +2198,7 @@ function generatePipeCheck(doc: Doc, ctx: CompileContext, schema: SomeType, acce
|
|
|
2073
2198
|
if (result instanceof Promise) return INVALID;
|
|
2074
2199
|
return fakePayload.issues.length === 0 ? result : INVALID;
|
|
2075
2200
|
};
|
|
2076
|
-
const helperConst =
|
|
2201
|
+
const helperConst = addUserConstant(ctx, helperFn);
|
|
2077
2202
|
const transformedVar = newVar(ctx);
|
|
2078
2203
|
doc.write(`const ${transformedVar} = ${helperConst}(${inputOutput});`);
|
|
2079
2204
|
doc.write(`if (${transformedVar} === INVALID) return INVALID;`);
|
|
@@ -2101,7 +2226,7 @@ function generateCustomCheck(doc: Doc, ctx: CompileContext, schema: SomeType, ac
|
|
|
2101
2226
|
throw new ZodCompileAsyncError("z.compile: async custom predicates are not supported");
|
|
2102
2227
|
}
|
|
2103
2228
|
// Custom schema with a predicate function (e.g. z.instanceof). `isAsyncFunction` above is syntactic, so a plain function returning a promise reaches here, and a promise is truthy — it would read as a pass where the interpreter throws.
|
|
2104
|
-
const fnConst =
|
|
2229
|
+
const fnConst = addUserConstant(ctx, def.fn);
|
|
2105
2230
|
const throwAsyncConst = addConstant(ctx, throwAsync);
|
|
2106
2231
|
const resVar = newVar(ctx);
|
|
2107
2232
|
doc.write(`const ${resVar} = ${fnConst}(${accessor});`);
|
|
@@ -2146,7 +2271,7 @@ function generateCatchCheck(doc: Doc, ctx: CompileContext, schema: SomeType, acc
|
|
|
2146
2271
|
doc.write(`})();`);
|
|
2147
2272
|
|
|
2148
2273
|
const innerConst = addConstant(ctx, def.innerType);
|
|
2149
|
-
const catchConst =
|
|
2274
|
+
const catchConst = addUserConstant(ctx, def.catchValue);
|
|
2150
2275
|
const catchHelperConst = addConstant(ctx, runtimeCatch);
|
|
2151
2276
|
doc.write(`if (${outputVar} === INVALID) {`);
|
|
2152
2277
|
doc.indented((d) => {
|
|
@@ -2177,7 +2302,7 @@ function generateTransformCheck(doc: Doc, ctx: CompileContext, schema: SomeType,
|
|
|
2177
2302
|
if (result instanceof Promise) return INVALID;
|
|
2178
2303
|
return fakePayload.issues.length === 0 ? result : INVALID;
|
|
2179
2304
|
};
|
|
2180
|
-
const helperConst =
|
|
2305
|
+
const helperConst = addUserConstant(ctx, helperFn);
|
|
2181
2306
|
const outputVar = newVar(ctx);
|
|
2182
2307
|
doc.write(`const ${outputVar} = ${helperConst}(${accessor});`);
|
|
2183
2308
|
doc.write(`if (${outputVar} === INVALID) return INVALID;`);
|
|
@@ -79,9 +79,7 @@ export /*@__NO_SIDE_EFFECTS__*/ function $constructor<T extends ZodTrait, D = T[
|
|
|
79
79
|
// Cleared even on throw, so the shared descriptor never leaks one instance's internals into the next.
|
|
80
80
|
_zodDesc.value = undefined;
|
|
81
81
|
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if (inst._zod.traits.has(name)) {
|
|
82
|
+
} else if (inst._zod.traits.has(name)) {
|
|
85
83
|
return;
|
|
86
84
|
}
|
|
87
85
|
|
|
@@ -12,10 +12,14 @@ export class Doc {
|
|
|
12
12
|
this.closed = closed;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
// the compiler catches a child's throw and keeps writing into this doc, so the indent has to unwind with it
|
|
15
16
|
indented(fn: (doc: Doc) => void) {
|
|
16
17
|
this.indent += 1;
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
try {
|
|
19
|
+
fn(this);
|
|
20
|
+
} finally {
|
|
21
|
+
this.indent -= 1;
|
|
22
|
+
}
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
write(fn: ModeWriter): void;
|
|
@@ -213,7 +213,7 @@ type RawIssue<T extends $ZodIssueBase> = T extends any
|
|
|
213
213
|
export type $ZodRawIssue<T extends $ZodIssueBase = $ZodIssue> = $ZodInternalIssue<T>;
|
|
214
214
|
|
|
215
215
|
export interface $ZodErrorMap<T extends $ZodIssueBase = $ZodIssue> {
|
|
216
|
-
// biome-ignore lint:
|
|
216
|
+
// biome-ignore lint/style/useShorthandFunctionType: interface form is public API
|
|
217
217
|
(issue: $ZodRawIssue<T>): { message: string } | string | undefined | null;
|
|
218
218
|
}
|
|
219
219
|
|
|
@@ -251,7 +251,6 @@ const _messageDesc: PropertyDescriptor = {
|
|
|
251
251
|
enumerable: true,
|
|
252
252
|
configurable: true,
|
|
253
253
|
};
|
|
254
|
-
const _zodDesc: PropertyDescriptor = { value: undefined, enumerable: false };
|
|
255
254
|
const _issuesDesc: PropertyDescriptor = { value: undefined, enumerable: false };
|
|
256
255
|
|
|
257
256
|
/* Prototypes that already carry the lazy `toString`. Seeded with the
|
|
@@ -261,12 +260,10 @@ const _installedToString = /* @__PURE__ */ new WeakSet<object>([Object.prototype
|
|
|
261
260
|
|
|
262
261
|
const initializer = (inst: $ZodError, def: $ZodIssue[]): void => {
|
|
263
262
|
inst.name = "$ZodError";
|
|
264
|
-
|
|
265
|
-
Object.defineProperty(inst, "_zod", _zodDesc);
|
|
263
|
+
// `_zod` is already non-enumerable: $constructor's init defined it with this same descriptor
|
|
266
264
|
_issuesDesc.value = def;
|
|
267
265
|
Object.defineProperty(inst, "issues", _issuesDesc);
|
|
268
|
-
// Clear the shared
|
|
269
|
-
_zodDesc.value = undefined;
|
|
266
|
+
// Clear the shared slot; a retained `value` pins the last error's issues.
|
|
270
267
|
_issuesDesc.value = undefined;
|
|
271
268
|
Object.defineProperty(inst, "message", _messageDesc);
|
|
272
269
|
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
extractDefs,
|
|
11
11
|
finalize,
|
|
12
12
|
initializeContext,
|
|
13
|
-
|
|
13
|
+
processSchema,
|
|
14
14
|
} from "./to-json-schema.js";
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -102,7 +102,7 @@ export class JSONSchemaGenerator {
|
|
|
102
102
|
* This must be called before emit().
|
|
103
103
|
*/
|
|
104
104
|
process(schema: schemas.$ZodType, _params: ProcessParams = { path: [], schemaPath: [] }): JSONSchema.BaseSchema {
|
|
105
|
-
return
|
|
105
|
+
return processSchema(schema, this.ctx, _params);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
/**
|