@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.
Files changed (595) hide show
  1. package/node_modules/@aws-sdk/core/dist-cjs/submodules/util/index.js +5 -0
  2. package/node_modules/@aws-sdk/core/dist-es/submodules/util/hasOwn.js +3 -0
  3. package/node_modules/@aws-sdk/core/dist-es/submodules/util/index.js +1 -0
  4. package/node_modules/@aws-sdk/core/dist-types/submodules/util/hasOwn.d.ts +4 -0
  5. package/node_modules/@aws-sdk/core/dist-types/submodules/util/index.d.ts +1 -0
  6. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/hasOwn.d.ts +1 -0
  7. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +1 -0
  8. package/node_modules/@aws-sdk/core/package.json +1 -1
  9. package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  10. package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
  11. package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
  12. package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
  13. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  14. package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  15. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +3 -3
  16. package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  17. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  18. package/node_modules/@aws-sdk/middleware-websocket/package.json +2 -2
  19. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  20. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  21. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  22. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  23. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  24. package/node_modules/@aws-sdk/nested-clients/package.json +2 -2
  25. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-PBNSMEG7.js → chunk-BRL3MDQL.js} +10 -10
  26. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js +1 -1
  27. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/index.js +1 -1
  28. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/rpc-entry.js +1 -1
  29. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/model-selector.js +79 -32
  30. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Client.md +25 -8
  31. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
  32. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/EventSource.md +4 -0
  33. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
  34. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
  35. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/api/readable.js +33 -43
  36. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
  37. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/core/connect.js +16 -2
  38. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/core/symbols.js +3 -0
  39. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/agent.js +7 -2
  40. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
  41. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client-h1.js +9 -1
  42. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client-h2.js +221 -12
  43. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/client.js +76 -30
  44. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
  45. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
  46. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
  47. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +37 -8
  48. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
  49. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
  50. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
  51. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +106 -22
  52. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/cache-handler.js +29 -5
  53. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/decorator-handler.js +7 -1
  54. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
  55. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/redirect-handler.js +21 -4
  56. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/handler/retry-handler.js +155 -32
  57. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/cache.js +65 -9
  58. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/decompress.js +115 -13
  59. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
  60. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/dns.js +7 -0
  61. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/interceptor/dump.js +10 -23
  62. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/mock/mock-agent.js +13 -1
  63. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/mock/mock-utils.js +217 -27
  64. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/util/cache.js +43 -3
  65. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/cookies/parse.js +150 -147
  66. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
  67. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
  68. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/index.js +6 -0
  69. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/request.js +2 -3
  70. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/fetch/util.js +6 -1
  71. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/webidl/index.js +3 -3
  72. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/connection.js +1 -1
  73. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  74. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  75. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/lib/web/websocket/websocket.js +22 -0
  76. package/node_modules/@earendil-works/pi-coding-agent/node_modules/undici/package.json +3 -3
  77. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +4 -4
  78. package/node_modules/@earendil-works/pi-coding-agent/package.json +1 -1
  79. package/node_modules/@smithy/core/dist-cjs/submodules/errors/index.js +20 -0
  80. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.browser.js +11 -10
  81. package/node_modules/@smithy/core/dist-cjs/submodules/retry/index.js +11 -10
  82. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.browser.js +2 -0
  83. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.js +25 -8
  84. package/node_modules/@smithy/core/dist-cjs/submodules/serde/index.native.js +2 -0
  85. package/node_modules/@smithy/core/dist-es/submodules/errors/errors.js +18 -0
  86. package/node_modules/@smithy/core/dist-es/submodules/errors/index.js +1 -0
  87. package/node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/service-error-classification.js +11 -10
  88. package/node_modules/@smithy/core/dist-es/submodules/serde/util-stream/getAwsChunkedEncodingStream.browser.js +2 -0
  89. package/node_modules/@smithy/core/dist-es/submodules/serde/util-stream/getAwsChunkedEncodingStream.js +23 -8
  90. package/node_modules/@smithy/core/dist-types/submodules/errors/errors.d.ts +44 -0
  91. package/node_modules/@smithy/core/dist-types/submodules/errors/index.d.ts +1 -0
  92. package/node_modules/@smithy/core/dist-types/submodules/retry/service-error-classification/service-error-classification.d.ts +4 -0
  93. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/errors/errors.d.ts +44 -0
  94. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/errors/index.d.ts +1 -0
  95. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/retry/service-error-classification/service-error-classification.d.ts +4 -0
  96. package/node_modules/@smithy/core/errors.d.ts +5 -0
  97. package/node_modules/@smithy/core/errors.js +5 -0
  98. package/node_modules/@smithy/core/package.json +11 -2
  99. package/node_modules/@types/node/README.md +1 -1
  100. package/node_modules/@types/node/buffer.d.ts +1 -0
  101. package/node_modules/@types/node/diagnostics_channel.d.ts +4 -4
  102. package/node_modules/@types/node/http.d.ts +1 -1
  103. package/node_modules/@types/node/package.json +3 -3
  104. package/node_modules/@types/node/perf_hooks.d.ts +31 -19
  105. package/node_modules/@types/node/quic.d.ts +6 -4
  106. package/node_modules/@types/node/stream/web.d.ts +20 -0
  107. package/node_modules/@types/node/tls.d.ts +26 -15
  108. package/node_modules/@types/node/vfs.d.ts +7 -6
  109. package/node_modules/@types/node/web-globals/streams.d.ts +4 -0
  110. package/node_modules/@types/node/zlib.d.ts +17 -0
  111. package/node_modules/hono/dist/cjs/client/client.js +4 -4
  112. package/node_modules/hono/dist/cjs/hono-base.js +7 -6
  113. package/node_modules/hono/dist/cjs/jsx/base.js +18 -1
  114. package/node_modules/hono/dist/cjs/jsx/components.js +25 -26
  115. package/node_modules/hono/dist/cjs/jsx/context.js +5 -5
  116. package/node_modules/hono/dist/cjs/jsx/dom/server.js +5 -1
  117. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +2 -2
  118. package/node_modules/hono/dist/cjs/jsx/streaming.js +4 -5
  119. package/node_modules/hono/dist/client/client.js +4 -4
  120. package/node_modules/hono/dist/hono-base.js +7 -6
  121. package/node_modules/hono/dist/jsx/base.js +15 -1
  122. package/node_modules/hono/dist/jsx/components.js +26 -27
  123. package/node_modules/hono/dist/jsx/context.js +6 -6
  124. package/node_modules/hono/dist/jsx/dom/server.js +5 -1
  125. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +3 -3
  126. package/node_modules/hono/dist/jsx/streaming.js +5 -6
  127. package/node_modules/hono/dist/types/context.d.ts +2 -2
  128. package/node_modules/hono/dist/types/jsx/base.d.ts +3 -0
  129. package/node_modules/hono/package.json +2 -2
  130. package/node_modules/jose/dist/types/index.d.ts +1 -2
  131. package/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +7 -11
  132. package/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +13 -16
  133. package/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +7 -11
  134. package/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +16 -19
  135. package/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +10 -16
  136. package/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +18 -21
  137. package/node_modules/jose/dist/types/jwk/embedded.d.ts +3 -1
  138. package/node_modules/jose/dist/types/jwk/thumbprint.d.ts +4 -6
  139. package/node_modules/jose/dist/types/jwks/local.d.ts +5 -4
  140. package/node_modules/jose/dist/types/jwks/remote.d.ts +20 -21
  141. package/node_modules/jose/dist/types/jws/compact/sign.d.ts +4 -4
  142. package/node_modules/jose/dist/types/jws/compact/verify.d.ts +8 -11
  143. package/node_modules/jose/dist/types/jws/flattened/sign.d.ts +5 -5
  144. package/node_modules/jose/dist/types/jws/flattened/verify.d.ts +8 -11
  145. package/node_modules/jose/dist/types/jws/general/sign.d.ts +10 -14
  146. package/node_modules/jose/dist/types/jws/general/verify.d.ts +11 -17
  147. package/node_modules/jose/dist/types/jwt/decrypt.d.ts +14 -11
  148. package/node_modules/jose/dist/types/jwt/encrypt.d.ts +24 -22
  149. package/node_modules/jose/dist/types/jwt/sign.d.ts +3 -7
  150. package/node_modules/jose/dist/types/jwt/unsecured.d.ts +2 -6
  151. package/node_modules/jose/dist/types/jwt/verify.d.ts +13 -6
  152. package/node_modules/jose/dist/types/key/export.d.ts +6 -6
  153. package/node_modules/jose/dist/types/key/generate_key_pair.d.ts +9 -14
  154. package/node_modules/jose/dist/types/key/generate_secret.d.ts +10 -10
  155. package/node_modules/jose/dist/types/key/import.d.ts +19 -18
  156. package/node_modules/jose/dist/types/types.d.ts +152 -247
  157. package/node_modules/jose/dist/types/util/base64url.d.ts +7 -7
  158. package/node_modules/jose/dist/types/util/decode_jwt.d.ts +6 -1
  159. package/node_modules/jose/dist/types/util/decode_protected_header.d.ts +4 -3
  160. package/node_modules/jose/dist/types/util/errors.d.ts +29 -40
  161. package/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +1 -2
  162. package/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +9 -26
  163. package/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +3 -3
  164. package/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +11 -30
  165. package/node_modules/jose/dist/webapi/jwe/general/decrypt.js +6 -6
  166. package/node_modules/jose/dist/webapi/jwe/general/encrypt.js +33 -57
  167. package/node_modules/jose/dist/webapi/jwk/embedded.js +3 -4
  168. package/node_modules/jose/dist/webapi/jwk/thumbprint.js +3 -6
  169. package/node_modules/jose/dist/webapi/jwks/local.js +16 -10
  170. package/node_modules/jose/dist/webapi/jwks/remote.js +2 -2
  171. package/node_modules/jose/dist/webapi/jws/compact/sign.js +2 -4
  172. package/node_modules/jose/dist/webapi/jws/compact/verify.js +2 -2
  173. package/node_modules/jose/dist/webapi/jws/flattened/sign.js +8 -15
  174. package/node_modules/jose/dist/webapi/jws/flattened/verify.js +4 -14
  175. package/node_modules/jose/dist/webapi/jws/general/sign.js +4 -11
  176. package/node_modules/jose/dist/webapi/jws/general/verify.js +5 -7
  177. package/node_modules/jose/dist/webapi/jwt/decrypt.js +2 -3
  178. package/node_modules/jose/dist/webapi/jwt/encrypt.js +11 -25
  179. package/node_modules/jose/dist/webapi/jwt/sign.js +1 -1
  180. package/node_modules/jose/dist/webapi/jwt/unsecured.js +1 -2
  181. package/node_modules/jose/dist/webapi/jwt/verify.js +4 -4
  182. package/node_modules/jose/dist/webapi/key/export.js +12 -16
  183. package/node_modules/jose/dist/webapi/key/generate_key_pair.js +4 -13
  184. package/node_modules/jose/dist/webapi/key/generate_secret.js +1 -1
  185. package/node_modules/jose/dist/webapi/key/import.js +5 -9
  186. package/node_modules/jose/dist/webapi/lib/asn1.js +2 -4
  187. package/node_modules/jose/dist/webapi/lib/buffer_utils.js +35 -0
  188. package/node_modules/jose/dist/webapi/lib/content_encryption.js +21 -29
  189. package/node_modules/jose/dist/webapi/lib/deflate.js +9 -19
  190. package/node_modules/jose/dist/webapi/lib/jwe_algorithms.js +0 -4
  191. package/node_modules/jose/dist/webapi/lib/jwe_decrypt.js +21 -54
  192. package/node_modules/jose/dist/webapi/lib/jwe_encrypt.js +26 -59
  193. package/node_modules/jose/dist/webapi/lib/jws_sign.js +29 -43
  194. package/node_modules/jose/dist/webapi/lib/jws_verify.js +37 -45
  195. package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +1 -1
  196. package/node_modules/jose/dist/webapi/lib/key.js +119 -59
  197. package/node_modules/jose/dist/webapi/lib/key_management.js +45 -80
  198. package/node_modules/jose/dist/webapi/lib/{options.js → validate.js} +64 -3
  199. package/node_modules/jose/dist/webapi/util/base64url.js +5 -19
  200. package/node_modules/jose/dist/webapi/util/decode_jwt.js +1 -1
  201. package/node_modules/jose/dist/webapi/util/decode_protected_header.js +1 -1
  202. package/node_modules/jose/package.json +1 -1
  203. package/node_modules/undici/lib/dispatcher/balanced-pool.js +4 -2
  204. package/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
  205. package/node_modules/undici/lib/dispatcher/client-h2.js +70 -14
  206. package/node_modules/undici/lib/dispatcher/client.js +6 -2
  207. package/node_modules/undici/lib/handler/cache-handler.js +21 -5
  208. package/node_modules/undici/lib/handler/retry-handler.js +42 -7
  209. package/node_modules/undici/lib/interceptor/cache.js +20 -1
  210. package/node_modules/undici/lib/interceptor/decompress.js +146 -14
  211. package/node_modules/undici/lib/interceptor/dump.js +10 -23
  212. package/node_modules/undici/lib/web/eventsource/eventsource-stream.js +245 -150
  213. package/node_modules/undici/lib/web/websocket/connection.js +1 -1
  214. package/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  215. package/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  216. package/node_modules/undici/package.json +1 -1
  217. package/node_modules/undici/types/interceptors.d.ts +2 -0
  218. package/node_modules/undici-types/client.d.ts +8 -3
  219. package/node_modules/undici-types/connector.d.ts +1 -0
  220. package/node_modules/undici-types/cookies.d.ts +1 -1
  221. package/node_modules/undici-types/dispatcher.d.ts +3 -3
  222. package/node_modules/undici-types/errors.d.ts +10 -0
  223. package/node_modules/undici-types/fetch.d.ts +5 -1
  224. package/node_modules/undici-types/handlers.d.ts +2 -0
  225. package/node_modules/undici-types/interceptors.d.ts +1 -1
  226. package/node_modules/undici-types/mock-interceptor.d.ts +5 -1
  227. package/node_modules/undici-types/package.json +1 -1
  228. package/node_modules/undici-types/proxy-agent.d.ts +7 -0
  229. package/node_modules/zod/README.md +2 -2
  230. package/node_modules/zod/compile.cjs +19 -0
  231. package/node_modules/zod/index.cjs +19 -0
  232. package/node_modules/zod/locales/index.cjs +19 -0
  233. package/node_modules/zod/mini/index.cjs +19 -0
  234. package/node_modules/zod/package.json +8 -7
  235. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  236. package/node_modules/zod/src/v4/classic/external.ts +2 -0
  237. package/node_modules/zod/src/v4/classic/from-json-schema.ts +248 -25
  238. package/node_modules/zod/src/v4/classic/schemas.ts +243 -168
  239. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +60 -9
  240. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +6 -0
  241. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  242. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +265 -0
  243. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
  244. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +9 -0
  245. package/node_modules/zod/src/v4/classic/tests/error.test.ts +130 -1
  246. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +157 -0
  247. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  248. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +40 -2
  249. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +27 -7
  250. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +88 -56
  251. package/node_modules/zod/src/v4/classic/tests/number.test.ts +39 -0
  252. package/node_modules/zod/src/v4/classic/tests/object.test.ts +56 -0
  253. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +3 -2
  254. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  255. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  256. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +46 -1
  257. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  258. package/node_modules/zod/src/v4/classic/tests/string.test.ts +95 -1
  259. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +33 -1
  260. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +234 -38
  261. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +569 -0
  262. package/node_modules/zod/src/v4/core/api.ts +44 -28
  263. package/node_modules/zod/src/v4/core/checks.ts +62 -102
  264. package/node_modules/zod/src/v4/core/compile.ts +218 -93
  265. package/node_modules/zod/src/v4/core/core.ts +1 -3
  266. package/node_modules/zod/src/v4/core/doc.ts +6 -2
  267. package/node_modules/zod/src/v4/core/errors.ts +3 -6
  268. package/node_modules/zod/src/v4/core/json-schema-generator.ts +2 -2
  269. package/node_modules/zod/src/v4/core/json-schema-processors.ts +185 -81
  270. package/node_modules/zod/src/v4/core/memoizer.ts +75 -28
  271. package/node_modules/zod/src/v4/core/parse.ts +37 -16
  272. package/node_modules/zod/src/v4/core/regexes.ts +14 -4
  273. package/node_modules/zod/src/v4/core/schemas.ts +296 -132
  274. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  275. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +35 -0
  276. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  277. package/node_modules/zod/src/v4/core/tests/compile.test.ts +399 -2
  278. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  279. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  280. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  281. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +118 -16
  282. package/node_modules/zod/src/v4/core/to-json-schema.ts +9 -7
  283. package/node_modules/zod/src/v4/core/util.ts +218 -147
  284. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  285. package/node_modules/zod/src/v4/locales/ar.ts +2 -0
  286. package/node_modules/zod/src/v4/locales/az.ts +2 -0
  287. package/node_modules/zod/src/v4/locales/be.ts +2 -0
  288. package/node_modules/zod/src/v4/locales/bg.ts +2 -0
  289. package/node_modules/zod/src/v4/locales/bn.ts +2 -0
  290. package/node_modules/zod/src/v4/locales/ca.ts +2 -0
  291. package/node_modules/zod/src/v4/locales/ckb.ts +2 -0
  292. package/node_modules/zod/src/v4/locales/cs.ts +2 -0
  293. package/node_modules/zod/src/v4/locales/da.ts +2 -0
  294. package/node_modules/zod/src/v4/locales/de.ts +2 -0
  295. package/node_modules/zod/src/v4/locales/el.ts +2 -0
  296. package/node_modules/zod/src/v4/locales/en.ts +2 -0
  297. package/node_modules/zod/src/v4/locales/eo.ts +2 -0
  298. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  299. package/node_modules/zod/src/v4/locales/fa.ts +2 -0
  300. package/node_modules/zod/src/v4/locales/fi.ts +2 -0
  301. package/node_modules/zod/src/v4/locales/fr-CA.ts +2 -0
  302. package/node_modules/zod/src/v4/locales/fr.ts +2 -0
  303. package/node_modules/zod/src/v4/locales/gu.ts +2 -0
  304. package/node_modules/zod/src/v4/locales/he.ts +2 -0
  305. package/node_modules/zod/src/v4/locales/hi.ts +2 -0
  306. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  307. package/node_modules/zod/src/v4/locales/hu.ts +2 -0
  308. package/node_modules/zod/src/v4/locales/hy.ts +2 -0
  309. package/node_modules/zod/src/v4/locales/id.ts +2 -0
  310. package/node_modules/zod/src/v4/locales/index.ts +1 -0
  311. package/node_modules/zod/src/v4/locales/is.ts +2 -0
  312. package/node_modules/zod/src/v4/locales/it.ts +2 -0
  313. package/node_modules/zod/src/v4/locales/ja.ts +2 -0
  314. package/node_modules/zod/src/v4/locales/ka.ts +2 -0
  315. package/node_modules/zod/src/v4/locales/km.ts +2 -0
  316. package/node_modules/zod/src/v4/locales/kn.ts +2 -0
  317. package/node_modules/zod/src/v4/locales/ko.ts +2 -0
  318. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  319. package/node_modules/zod/src/v4/locales/mk.ts +2 -0
  320. package/node_modules/zod/src/v4/locales/ms.ts +2 -0
  321. package/node_modules/zod/src/v4/locales/ne.ts +2 -0
  322. package/node_modules/zod/src/v4/locales/nl.ts +2 -0
  323. package/node_modules/zod/src/v4/locales/nn.ts +2 -0
  324. package/node_modules/zod/src/v4/locales/no.ts +2 -0
  325. package/node_modules/zod/src/v4/locales/ota.ts +2 -0
  326. package/node_modules/zod/src/v4/locales/pl.ts +2 -0
  327. package/node_modules/zod/src/v4/locales/ps.ts +2 -0
  328. package/node_modules/zod/src/v4/locales/pt-BR.ts +2 -0
  329. package/node_modules/zod/src/v4/locales/pt.ts +2 -0
  330. package/node_modules/zod/src/v4/locales/ro.ts +2 -0
  331. package/node_modules/zod/src/v4/locales/ru.ts +2 -0
  332. package/node_modules/zod/src/v4/locales/sk.ts +2 -0
  333. package/node_modules/zod/src/v4/locales/sl.ts +2 -0
  334. package/node_modules/zod/src/v4/locales/sv.ts +2 -0
  335. package/node_modules/zod/src/v4/locales/ta.ts +2 -0
  336. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  337. package/node_modules/zod/src/v4/locales/th.ts +2 -0
  338. package/node_modules/zod/src/v4/locales/tk.ts +2 -0
  339. package/node_modules/zod/src/v4/locales/tr.ts +2 -0
  340. package/node_modules/zod/src/v4/locales/uk.ts +2 -0
  341. package/node_modules/zod/src/v4/locales/ur.ts +2 -0
  342. package/node_modules/zod/src/v4/locales/uz.ts +2 -0
  343. package/node_modules/zod/src/v4/locales/vi.ts +2 -0
  344. package/node_modules/zod/src/v4/locales/yo.ts +2 -0
  345. package/node_modules/zod/src/v4/locales/zh-CN.ts +2 -0
  346. package/node_modules/zod/src/v4/locales/zh-TW.ts +2 -0
  347. package/node_modules/zod/src/v4/mini/external.ts +2 -0
  348. package/node_modules/zod/src/v4/mini/schemas.ts +32 -7
  349. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +1 -1
  350. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  351. package/node_modules/zod/src/v4/mini/tests/index.test.ts +86 -0
  352. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  353. package/node_modules/zod/src/v4/mini/tests/string.test.ts +23 -0
  354. package/node_modules/zod/v3/ZodError.cjs +19 -0
  355. package/node_modules/zod/v3/errors.cjs +19 -0
  356. package/node_modules/zod/v3/external.cjs +19 -0
  357. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  358. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  359. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  360. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  361. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  362. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  363. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  364. package/node_modules/zod/v3/index.cjs +19 -0
  365. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  366. package/node_modules/zod/v3/types.cjs +19 -0
  367. package/node_modules/zod/v4/classic/checks.cjs +19 -0
  368. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  369. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  370. package/node_modules/zod/v4/classic/deep-partial.cjs +19 -0
  371. package/node_modules/zod/v4/classic/errors.cjs +19 -0
  372. package/node_modules/zod/v4/classic/external.cjs +22 -1
  373. package/node_modules/zod/v4/classic/external.d.cts +1 -1
  374. package/node_modules/zod/v4/classic/external.d.ts +1 -1
  375. package/node_modules/zod/v4/classic/external.js +1 -1
  376. package/node_modules/zod/v4/classic/from-json-schema.cjs +264 -24
  377. package/node_modules/zod/v4/classic/from-json-schema.js +245 -24
  378. package/node_modules/zod/v4/classic/in-out.cjs +19 -0
  379. package/node_modules/zod/v4/classic/index.cjs +19 -0
  380. package/node_modules/zod/v4/classic/iso.cjs +19 -0
  381. package/node_modules/zod/v4/classic/parse.cjs +19 -0
  382. package/node_modules/zod/v4/classic/schemas.cjs +100 -35
  383. package/node_modules/zod/v4/classic/schemas.d.cts +15 -1
  384. package/node_modules/zod/v4/classic/schemas.d.ts +15 -1
  385. package/node_modules/zod/v4/classic/schemas.js +77 -33
  386. package/node_modules/zod/v4/core/api.cjs +45 -22
  387. package/node_modules/zod/v4/core/api.d.cts +12 -6
  388. package/node_modules/zod/v4/core/api.d.ts +12 -6
  389. package/node_modules/zod/v4/core/api.js +25 -22
  390. package/node_modules/zod/v4/core/checks.cjs +51 -97
  391. package/node_modules/zod/v4/core/checks.d.cts +17 -1
  392. package/node_modules/zod/v4/core/checks.d.ts +17 -1
  393. package/node_modules/zod/v4/core/checks.js +31 -96
  394. package/node_modules/zod/v4/core/compile.cjs +173 -78
  395. package/node_modules/zod/v4/core/compile.d.cts +18 -4
  396. package/node_modules/zod/v4/core/compile.d.ts +18 -4
  397. package/node_modules/zod/v4/core/compile.js +154 -79
  398. package/node_modules/zod/v4/core/core.cjs +20 -1
  399. package/node_modules/zod/v4/core/core.js +1 -1
  400. package/node_modules/zod/v4/core/doc.cjs +26 -2
  401. package/node_modules/zod/v4/core/doc.js +7 -2
  402. package/node_modules/zod/v4/core/errors.cjs +21 -5
  403. package/node_modules/zod/v4/core/errors.js +2 -5
  404. package/node_modules/zod/v4/core/index.cjs +19 -0
  405. package/node_modules/zod/v4/core/json-schema-generator.cjs +20 -1
  406. package/node_modules/zod/v4/core/json-schema-generator.js +2 -2
  407. package/node_modules/zod/v4/core/json-schema-processors.cjs +188 -72
  408. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  409. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  410. package/node_modules/zod/v4/core/json-schema-processors.js +170 -74
  411. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  412. package/node_modules/zod/v4/core/memoizer.cjs +111 -23
  413. package/node_modules/zod/v4/core/memoizer.js +69 -23
  414. package/node_modules/zod/v4/core/parse.cjs +56 -16
  415. package/node_modules/zod/v4/core/parse.js +37 -16
  416. package/node_modules/zod/v4/core/regexes.cjs +31 -6
  417. package/node_modules/zod/v4/core/regexes.d.cts +3 -0
  418. package/node_modules/zod/v4/core/regexes.d.ts +3 -0
  419. package/node_modules/zod/v4/core/regexes.js +10 -4
  420. package/node_modules/zod/v4/core/registries.cjs +19 -0
  421. package/node_modules/zod/v4/core/schemas.cjs +302 -114
  422. package/node_modules/zod/v4/core/schemas.d.cts +28 -8
  423. package/node_modules/zod/v4/core/schemas.d.ts +28 -8
  424. package/node_modules/zod/v4/core/schemas.js +279 -113
  425. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  426. package/node_modules/zod/v4/core/to-json-schema.cjs +28 -7
  427. package/node_modules/zod/v4/core/to-json-schema.d.cts +4 -3
  428. package/node_modules/zod/v4/core/to-json-schema.d.ts +4 -3
  429. package/node_modules/zod/v4/core/to-json-schema.js +7 -6
  430. package/node_modules/zod/v4/core/util.cjs +177 -143
  431. package/node_modules/zod/v4/core/util.d.cts +25 -4
  432. package/node_modules/zod/v4/core/util.d.ts +25 -4
  433. package/node_modules/zod/v4/core/util.js +156 -143
  434. package/node_modules/zod/v4/core/versions.cjs +21 -2
  435. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  436. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  437. package/node_modules/zod/v4/core/versions.js +2 -2
  438. package/node_modules/zod/v4/core/visit.cjs +19 -0
  439. package/node_modules/zod/v4/index.cjs +19 -0
  440. package/node_modules/zod/v4/locales/ar.cjs +2 -0
  441. package/node_modules/zod/v4/locales/ar.js +2 -0
  442. package/node_modules/zod/v4/locales/az.cjs +2 -0
  443. package/node_modules/zod/v4/locales/az.js +2 -0
  444. package/node_modules/zod/v4/locales/be.cjs +2 -0
  445. package/node_modules/zod/v4/locales/be.js +2 -0
  446. package/node_modules/zod/v4/locales/bg.cjs +2 -0
  447. package/node_modules/zod/v4/locales/bg.js +2 -0
  448. package/node_modules/zod/v4/locales/bn.cjs +2 -0
  449. package/node_modules/zod/v4/locales/bn.js +2 -0
  450. package/node_modules/zod/v4/locales/ca.cjs +2 -0
  451. package/node_modules/zod/v4/locales/ca.js +2 -0
  452. package/node_modules/zod/v4/locales/ckb.cjs +2 -0
  453. package/node_modules/zod/v4/locales/ckb.js +2 -0
  454. package/node_modules/zod/v4/locales/cs.cjs +2 -0
  455. package/node_modules/zod/v4/locales/cs.js +2 -0
  456. package/node_modules/zod/v4/locales/da.cjs +2 -0
  457. package/node_modules/zod/v4/locales/da.js +2 -0
  458. package/node_modules/zod/v4/locales/de.cjs +2 -0
  459. package/node_modules/zod/v4/locales/de.js +2 -0
  460. package/node_modules/zod/v4/locales/el.cjs +2 -0
  461. package/node_modules/zod/v4/locales/el.js +2 -0
  462. package/node_modules/zod/v4/locales/en.cjs +2 -0
  463. package/node_modules/zod/v4/locales/en.js +2 -0
  464. package/node_modules/zod/v4/locales/eo.cjs +2 -0
  465. package/node_modules/zod/v4/locales/eo.js +2 -0
  466. package/node_modules/zod/v4/locales/es.cjs +2 -0
  467. package/node_modules/zod/v4/locales/es.js +2 -0
  468. package/node_modules/zod/v4/locales/fa.cjs +2 -0
  469. package/node_modules/zod/v4/locales/fa.js +2 -0
  470. package/node_modules/zod/v4/locales/fi.cjs +2 -0
  471. package/node_modules/zod/v4/locales/fi.js +2 -0
  472. package/node_modules/zod/v4/locales/fr-CA.cjs +2 -0
  473. package/node_modules/zod/v4/locales/fr-CA.js +2 -0
  474. package/node_modules/zod/v4/locales/fr.cjs +2 -0
  475. package/node_modules/zod/v4/locales/fr.js +2 -0
  476. package/node_modules/zod/v4/locales/gu.cjs +2 -0
  477. package/node_modules/zod/v4/locales/gu.js +2 -0
  478. package/node_modules/zod/v4/locales/he.cjs +2 -0
  479. package/node_modules/zod/v4/locales/he.js +2 -0
  480. package/node_modules/zod/v4/locales/hi.cjs +2 -0
  481. package/node_modules/zod/v4/locales/hi.js +2 -0
  482. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  483. package/node_modules/zod/v4/locales/hr.js +2 -0
  484. package/node_modules/zod/v4/locales/hu.cjs +2 -0
  485. package/node_modules/zod/v4/locales/hu.js +2 -0
  486. package/node_modules/zod/v4/locales/hy.cjs +2 -0
  487. package/node_modules/zod/v4/locales/hy.js +2 -0
  488. package/node_modules/zod/v4/locales/id.cjs +2 -0
  489. package/node_modules/zod/v4/locales/id.js +2 -0
  490. package/node_modules/zod/v4/locales/index.cjs +22 -1
  491. package/node_modules/zod/v4/locales/index.d.cts +1 -0
  492. package/node_modules/zod/v4/locales/index.d.ts +1 -0
  493. package/node_modules/zod/v4/locales/index.js +1 -0
  494. package/node_modules/zod/v4/locales/is.cjs +2 -0
  495. package/node_modules/zod/v4/locales/is.js +2 -0
  496. package/node_modules/zod/v4/locales/it.cjs +2 -0
  497. package/node_modules/zod/v4/locales/it.js +2 -0
  498. package/node_modules/zod/v4/locales/ja.cjs +2 -0
  499. package/node_modules/zod/v4/locales/ja.js +2 -0
  500. package/node_modules/zod/v4/locales/ka.cjs +2 -0
  501. package/node_modules/zod/v4/locales/ka.js +2 -0
  502. package/node_modules/zod/v4/locales/km.cjs +2 -0
  503. package/node_modules/zod/v4/locales/km.js +2 -0
  504. package/node_modules/zod/v4/locales/kn.cjs +2 -0
  505. package/node_modules/zod/v4/locales/kn.js +2 -0
  506. package/node_modules/zod/v4/locales/ko.cjs +2 -0
  507. package/node_modules/zod/v4/locales/ko.js +2 -0
  508. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  509. package/node_modules/zod/v4/locales/lt.js +2 -0
  510. package/node_modules/zod/v4/locales/mk.cjs +2 -0
  511. package/node_modules/zod/v4/locales/mk.js +2 -0
  512. package/node_modules/zod/v4/locales/ms.cjs +2 -0
  513. package/node_modules/zod/v4/locales/ms.js +2 -0
  514. package/node_modules/zod/v4/locales/ne.cjs +2 -0
  515. package/node_modules/zod/v4/locales/ne.js +2 -0
  516. package/node_modules/zod/v4/locales/nl.cjs +2 -0
  517. package/node_modules/zod/v4/locales/nl.js +2 -0
  518. package/node_modules/zod/v4/locales/nn.cjs +2 -0
  519. package/node_modules/zod/v4/locales/nn.js +2 -0
  520. package/node_modules/zod/v4/locales/no.cjs +2 -0
  521. package/node_modules/zod/v4/locales/no.js +2 -0
  522. package/node_modules/zod/v4/locales/ota.cjs +2 -0
  523. package/node_modules/zod/v4/locales/ota.js +2 -0
  524. package/node_modules/zod/v4/locales/pl.cjs +2 -0
  525. package/node_modules/zod/v4/locales/pl.js +2 -0
  526. package/node_modules/zod/v4/locales/ps.cjs +2 -0
  527. package/node_modules/zod/v4/locales/ps.js +2 -0
  528. package/node_modules/zod/v4/locales/pt-BR.cjs +2 -0
  529. package/node_modules/zod/v4/locales/pt-BR.js +2 -0
  530. package/node_modules/zod/v4/locales/pt.cjs +2 -0
  531. package/node_modules/zod/v4/locales/pt.js +2 -0
  532. package/node_modules/zod/v4/locales/ro.cjs +2 -0
  533. package/node_modules/zod/v4/locales/ro.js +2 -0
  534. package/node_modules/zod/v4/locales/ru.cjs +2 -0
  535. package/node_modules/zod/v4/locales/ru.js +2 -0
  536. package/node_modules/zod/v4/locales/sk.cjs +2 -0
  537. package/node_modules/zod/v4/locales/sk.js +2 -0
  538. package/node_modules/zod/v4/locales/sl.cjs +2 -0
  539. package/node_modules/zod/v4/locales/sl.js +2 -0
  540. package/node_modules/zod/v4/locales/sv.cjs +2 -0
  541. package/node_modules/zod/v4/locales/sv.js +2 -0
  542. package/node_modules/zod/v4/locales/ta.cjs +2 -0
  543. package/node_modules/zod/v4/locales/ta.js +2 -0
  544. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  545. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  546. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  547. package/node_modules/zod/v4/locales/tg.js +117 -0
  548. package/node_modules/zod/v4/locales/th.cjs +2 -0
  549. package/node_modules/zod/v4/locales/th.js +2 -0
  550. package/node_modules/zod/v4/locales/tk.cjs +2 -0
  551. package/node_modules/zod/v4/locales/tk.js +2 -0
  552. package/node_modules/zod/v4/locales/tr.cjs +2 -0
  553. package/node_modules/zod/v4/locales/tr.js +2 -0
  554. package/node_modules/zod/v4/locales/uk.cjs +2 -0
  555. package/node_modules/zod/v4/locales/uk.js +2 -0
  556. package/node_modules/zod/v4/locales/ur.cjs +2 -0
  557. package/node_modules/zod/v4/locales/ur.js +2 -0
  558. package/node_modules/zod/v4/locales/uz.cjs +2 -0
  559. package/node_modules/zod/v4/locales/uz.js +2 -0
  560. package/node_modules/zod/v4/locales/vi.cjs +2 -0
  561. package/node_modules/zod/v4/locales/vi.js +2 -0
  562. package/node_modules/zod/v4/locales/yo.cjs +2 -0
  563. package/node_modules/zod/v4/locales/yo.js +2 -0
  564. package/node_modules/zod/v4/locales/zh-CN.cjs +2 -0
  565. package/node_modules/zod/v4/locales/zh-CN.js +2 -0
  566. package/node_modules/zod/v4/locales/zh-TW.cjs +2 -0
  567. package/node_modules/zod/v4/locales/zh-TW.js +2 -0
  568. package/node_modules/zod/v4/mini/checks.cjs +19 -0
  569. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  570. package/node_modules/zod/v4/mini/deep-partial.cjs +19 -0
  571. package/node_modules/zod/v4/mini/external.cjs +22 -1
  572. package/node_modules/zod/v4/mini/external.d.cts +1 -1
  573. package/node_modules/zod/v4/mini/external.d.ts +1 -1
  574. package/node_modules/zod/v4/mini/external.js +1 -1
  575. package/node_modules/zod/v4/mini/in-out.cjs +19 -0
  576. package/node_modules/zod/v4/mini/index.cjs +19 -0
  577. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  578. package/node_modules/zod/v4/mini/parse.cjs +19 -0
  579. package/node_modules/zod/v4/mini/schemas.cjs +44 -8
  580. package/node_modules/zod/v4/mini/schemas.d.cts +6 -1
  581. package/node_modules/zod/v4/mini/schemas.d.ts +6 -1
  582. package/node_modules/zod/v4/mini/schemas.js +21 -6
  583. package/node_modules/zod/v4-mini/index.cjs +19 -0
  584. package/package.json +2 -2
  585. package/slingshot/index.js +201 -198
  586. package/node_modules/jose/dist/webapi/lib/base64.js +0 -20
  587. package/node_modules/jose/dist/webapi/lib/crypto_key.js +0 -27
  588. package/node_modules/jose/dist/webapi/lib/helpers.js +0 -45
  589. package/node_modules/jose/dist/webapi/lib/invalid_key_input.js +0 -12
  590. package/node_modules/jose/dist/webapi/lib/is_key_like.js +0 -19
  591. package/node_modules/jose/dist/webapi/lib/jwk_metadata.js +0 -19
  592. package/node_modules/jose/dist/webapi/lib/jwk_to_key.js +0 -10
  593. package/node_modules/jose/dist/webapi/lib/key_options.js +0 -8
  594. package/node_modules/jose/dist/webapi/lib/signing.js +0 -22
  595. package/node_modules/jose/dist/webapi/lib/type_checks.js +0 -30
@@ -2,7 +2,7 @@
2
2
  const assert = require('node:assert')
3
3
 
4
4
  const { kRetryHandlerDefaultRetry } = require('../core/symbols')
5
- const { RequestRetryError } = require('../core/errors')
5
+ const { RequestRetryError, RequestAbortedError } = require('../core/errors')
6
6
  const {
7
7
  isDisturbed,
8
8
  parseRangeHeader,
@@ -41,19 +41,42 @@ function validatePartialResponseContentLength (headers, range, statusCode, retry
41
41
  // new one: backpressure pauses the new connection's controller, but the
42
42
  // consumer's resume() targets the old one, so the resumed body stalls forever.
43
43
  // The proxy always forwards to the controller of the currently active connection.
44
+ // An abort is additionally reported to the handler so it can cancel a pending
45
+ // retry backoff instead of letting the request hang until the backoff elapses.
46
+ // The notification is a private callback the handler hands over on construction,
47
+ // so nothing outside the handler can trigger it.
44
48
  class RetryController {
45
- constructor () {
49
+ #onAbort
50
+
51
+ constructor (onAbort) {
52
+ this.#onAbort = onAbort
46
53
  this.target = null
47
54
  }
48
55
 
49
56
  pause () { this.target?.pause() }
50
57
  resume () { this.target?.resume() }
51
- abort (reason) { this.target?.abort(reason) }
58
+
59
+ abort (reason) {
60
+ this.target?.abort(reason)
61
+ this.#onAbort(reason)
62
+ }
63
+
52
64
  get paused () { return this.target?.paused ?? false }
53
65
  get aborted () { return this.target?.aborted ?? false }
54
66
  get reason () { return this.target?.reason ?? null }
55
67
  get rawHeaders () { return this.target?.rawHeaders ?? null }
68
+ set rawHeaders (value) {
69
+ if (this.target) {
70
+ this.target.rawHeaders = value
71
+ }
72
+ }
73
+
56
74
  get rawTrailers () { return this.target?.rawTrailers ?? null }
75
+ set rawTrailers (value) {
76
+ if (this.target) {
77
+ this.target.rawTrailers = value
78
+ }
79
+ }
57
80
  }
58
81
 
59
82
  class RetryHandler {
@@ -112,15 +135,32 @@ class RetryHandler {
112
135
  this.etag = null
113
136
  this.statusCode = null
114
137
  this.headers = null
115
- this.controllerProxy = new RetryController()
138
+ this.controllerProxy = new RetryController(reason => this.#onAbort(reason))
139
+ // A retry decision is in flight (the policy may be holding a backoff
140
+ // timer). While pending, a consumer abort cancels the wait.
141
+ this.retryPending = false
142
+ // Backoff timer returned by the retry policy, so #onAbort can cancel it.
143
+ // Null for custom policies that do not return their timer.
144
+ this.retryTimer = null
145
+ // Set once an abort during the backoff delivered the terminal error
146
+ // downstream; late policy callbacks and connection errors are then moot.
147
+ this.aborted = false
116
148
  }
117
149
 
118
150
  onResponseStartWithRetry (controller, statusCode, headers, statusMessage, err) {
119
151
  if (this.retryOpts.throwOnError) {
120
152
  // Preserve old behavior for status codes that are not eligible for retry
121
153
  if (this.retryOpts.statusCodes.includes(statusCode) === false) {
122
- this.headersSent = true
123
- this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage)
154
+ if (this.headersSent) {
155
+ // The downstream handler already received the response from an
156
+ // earlier attempt. Forwarding this response would replace the
157
+ // downstream body and leave the original body pending forever.
158
+ this.handler.onResponseError?.(this.controllerProxy, err)
159
+ } else {
160
+ this.headersSent = true
161
+ this.checkpointResponseEnd(headers)
162
+ this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage)
163
+ }
124
164
  } else {
125
165
  this.error = err
126
166
  }
@@ -130,14 +170,30 @@ class RetryHandler {
130
170
 
131
171
  if (isDisturbed(this.opts.body)) {
132
172
  this.headersSent = true
173
+ this.checkpointResponseEnd(headers)
133
174
  this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage)
134
175
  return
135
176
  }
136
177
 
137
178
  function shouldRetry (passedErr) {
179
+ if (this.aborted) {
180
+ // Aborted while the policy was deciding; the decision is moot.
181
+ return
182
+ }
183
+ this.retryPending = false
184
+ this.retryTimer = null
185
+
138
186
  if (passedErr) {
139
- this.headersSent = true
140
- this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage)
187
+ if (this.headersSent) {
188
+ // The downstream handler already received the response from an
189
+ // earlier attempt. Forwarding this response would replace the
190
+ // downstream body and leave the original body pending forever.
191
+ this.handler.onResponseError?.(this.controllerProxy, passedErr)
192
+ } else {
193
+ this.headersSent = true
194
+ this.checkpointResponseEnd(headers)
195
+ this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage)
196
+ }
141
197
  controller.resume()
142
198
  return
143
199
  }
@@ -154,14 +210,31 @@ class RetryHandler {
154
210
  // between, leaving this one paused forever -- the very stall the proxy exists
155
211
  // to prevent.
156
212
  controller.pause()
157
- this.retryOpts.retry(
213
+ // The default policy returns its backoff timer so an abort can cancel it;
214
+ // a custom policy may return anything (or nothing), which is ignored.
215
+ this.retryPending = true
216
+ this.retryTimer = this.retryOpts.retry(
158
217
  err,
159
218
  {
160
219
  state: { counter: this.retryCount },
161
220
  opts: { retryOptions: this.retryOpts, ...this.opts }
162
221
  },
163
222
  shouldRetry.bind(this)
164
- )
223
+ ) ?? null
224
+ }
225
+
226
+ checkpointResponseEnd (headers) {
227
+ if (this.end == null && this.opts.method !== 'HEAD') {
228
+ const contentLength = headers['content-length']
229
+ this.end = contentLength != null ? Number(contentLength) - 1 : null
230
+
231
+ assert(
232
+ this.end == null || Number.isFinite(this.end),
233
+ 'invalid content-length'
234
+ )
235
+
236
+ this.resume = this.end != null
237
+ }
165
238
  }
166
239
 
167
240
  onRequestStart (controller, context) {
@@ -176,6 +249,14 @@ class RetryHandler {
176
249
  }
177
250
  }
178
251
 
252
+ onBodySent (chunk) {
253
+ this.handler.onBodySent?.(chunk)
254
+ }
255
+
256
+ onRequestSent () {
257
+ this.handler.onRequestSent?.()
258
+ }
259
+
179
260
  onRequestUpgrade (_controller, statusCode, headers, socket) {
180
261
  this.handler.onRequestUpgrade?.(this.controllerProxy, statusCode, headers, socket)
181
262
  }
@@ -190,7 +271,8 @@ class RetryHandler {
190
271
  timeoutFactor,
191
272
  statusCodes,
192
273
  errorCodes,
193
- methods
274
+ methods,
275
+ retryAfter
194
276
  } = retryOptions
195
277
  const { counter } = state
196
278
 
@@ -222,7 +304,7 @@ class RetryHandler {
222
304
  return
223
305
  }
224
306
 
225
- let retryAfterHeader = headers?.['retry-after']
307
+ let retryAfterHeader = retryAfter === false ? undefined : headers?.['retry-after']
226
308
  if (retryAfterHeader) {
227
309
  retryAfterHeader = Number(retryAfterHeader)
228
310
  retryAfterHeader = Number.isNaN(retryAfterHeader)
@@ -237,27 +319,22 @@ class RetryHandler {
237
319
  ? Math.min(retryAfterHeader, maxTimeout)
238
320
  : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout)
239
321
 
240
- setTimeout(() => cb(null), retryTimeout)
322
+ // Return the backoff timer so the handler can cancel it when the
323
+ // consumer aborts while the retry decision is pending.
324
+ return setTimeout(() => cb(null), retryTimeout)
241
325
  }
242
326
 
243
327
  onResponseStart (controller, statusCode, headers, statusMessage) {
328
+ if (statusCode < 200) {
329
+ this.handler.onResponseStart?.(this.controllerProxy, statusCode, headers, statusMessage)
330
+ return
331
+ }
332
+
244
333
  this.error = null
245
334
  this.retryCount += 1
246
335
  this.statusCode = statusCode
247
336
  this.headers = headers
248
337
 
249
- if (statusCode >= 300) {
250
- const err = new RequestRetryError('Request failed', statusCode, {
251
- headers,
252
- data: {
253
- count: this.retryCount
254
- }
255
- })
256
-
257
- this.onResponseStartWithRetry(controller, statusCode, headers, statusMessage, err)
258
- return
259
- }
260
-
261
338
  // Checkpoint for resume from where we left it
262
339
  if (this.headersSent) {
263
340
  // Only Partial Content 206 supposed to provide Content-Range,
@@ -294,18 +371,34 @@ class RetryHandler {
294
371
 
295
372
  const { start, size, end = size ? size - 1 : null } = contentRange
296
373
 
297
- assert(this.start === start, 'content-range mismatch')
298
- assert(this.end == null || this.end === end, 'content-range mismatch')
374
+ if (this.start !== start || (this.end != null && this.end !== end)) {
375
+ throw new RequestRetryError('Content-Range mismatch', statusCode, {
376
+ headers,
377
+ data: { count: this.retryCount }
378
+ })
379
+ }
299
380
 
300
381
  return
301
382
  }
302
383
 
384
+ if (statusCode >= 300) {
385
+ const err = new RequestRetryError('Request failed', statusCode, {
386
+ headers,
387
+ data: {
388
+ count: this.retryCount
389
+ }
390
+ })
391
+
392
+ this.onResponseStartWithRetry(controller, statusCode, headers, statusMessage, err)
393
+ return
394
+ }
395
+
303
396
  if (this.end == null) {
304
397
  if (statusCode === 206) {
305
398
  // First time we receive 206
306
399
  const range = parseRangeHeader(headers['content-range'])
307
400
 
308
- if (range == null) {
401
+ if (range == null || range.end == null) {
309
402
  this.headersSent = true
310
403
  this.handler.onResponseStart?.(
311
404
  this.controllerProxy,
@@ -330,7 +423,7 @@ class RetryHandler {
330
423
  }
331
424
 
332
425
  // We make our best to checkpoint the body for further range headers
333
- if (this.end == null) {
426
+ if (this.end == null && this.opts.method !== 'HEAD') {
334
427
  const contentLength = headers['content-length']
335
428
  this.end = contentLength != null ? Number(contentLength) - 1 : null
336
429
  }
@@ -430,14 +523,27 @@ class RetryHandler {
430
523
  }
431
524
 
432
525
  onResponseError (controller, err) {
526
+ if (this.aborted) {
527
+ // #onAbort already delivered the terminal error downstream; the late
528
+ // error of the torn-down connection must not be forwarded twice.
529
+ return
530
+ }
531
+
433
532
  // controller is THIS failed connection (not the proxy): we inspect whether
434
533
  // the consumer aborted it to decide retry-vs-propagate.
435
- if (controller?.aborted || isDisturbed(this.opts.body)) {
534
+ if (controller?.aborted || isDisturbed(this.opts.body) || (this.headersSent && !this.resume)) {
436
535
  this.handler.onResponseError?.(this.controllerProxy, err)
437
536
  return
438
537
  }
439
538
 
440
539
  function shouldRetry (returnedErr) {
540
+ if (this.aborted) {
541
+ // Aborted while the policy was deciding; the decision is moot.
542
+ return
543
+ }
544
+ this.retryPending = false
545
+ this.retryTimer = null
546
+
441
547
  if (!returnedErr) {
442
548
  this.retry()
443
549
  return
@@ -457,14 +563,31 @@ class RetryHandler {
457
563
  this.retryCount += 1
458
564
  }
459
565
 
460
- this.retryOpts.retry(
566
+ this.retryPending = true
567
+ this.retryTimer = this.retryOpts.retry(
461
568
  err,
462
569
  {
463
570
  state: { counter: this.retryCount },
464
571
  opts: { retryOptions: this.retryOpts, ...this.opts }
465
572
  },
466
573
  shouldRetry.bind(this)
467
- )
574
+ ) ?? null
575
+ }
576
+
577
+ #onAbort (reason) {
578
+ // A consumer abort lands on the controller proxy. If the retry policy is
579
+ // still deciding (typically holding a backoff timer), cancel the wait and
580
+ // surface the abort immediately instead of letting the request hang until
581
+ // the backoff elapses.
582
+ if (!this.retryPending) {
583
+ return
584
+ }
585
+
586
+ this.aborted = true
587
+ this.retryPending = false
588
+ clearTimeout(this.retryTimer)
589
+ this.retryTimer = null
590
+ this.handler.onResponseError?.(this.controllerProxy, reason ?? new RequestAbortedError())
468
591
  }
469
592
  }
470
593
 
@@ -6,7 +6,16 @@ const util = require('../core/util')
6
6
  const CacheHandler = require('../handler/cache-handler')
7
7
  const MemoryCacheStore = require('../cache/memory-cache-store')
8
8
  const CacheRevalidationHandler = require('../handler/cache-revalidation-handler')
9
- const { assertCacheStore, assertCacheMethods, makeCacheKey, normalizeHeaders, parseCacheControlHeader, isInvalidOrWildcardVaryHeader } = require('../util/cache.js')
9
+ const {
10
+ assertCacheStore,
11
+ assertCacheMethods,
12
+ getInterceptorOrigin,
13
+ makeCacheKey,
14
+ normalizeHeaders,
15
+ parseCacheControlHeader,
16
+ isInvalidOrWildcardVaryHeader,
17
+ parseVaryHeader
18
+ } = require('../util/cache.js')
10
19
  const { AbortError } = require('../core/errors.js')
11
20
  const { parseHttpDate } = require('../util/date.js')
12
21
 
@@ -117,7 +126,10 @@ function staleResponseRequiresRevalidation (result, cacheType) {
117
126
  * @returns {boolean}
118
127
  */
119
128
  function revalidationResponseDisallowsCachedReuse (cacheType, headers) {
120
- if (headers.vary && isInvalidOrWildcardVaryHeader(headers.vary)) {
129
+ if (
130
+ (headers.vary && isInvalidOrWildcardVaryHeader(headers.vary)) ||
131
+ (cacheType === 'shared' && Object.hasOwn(headers, 'set-cookie'))
132
+ ) {
121
133
  return true
122
134
  }
123
135
 
@@ -135,6 +147,25 @@ function revalidationResponseUpdatesCacheControl (headers) {
135
147
  return headers['cache-control'] !== undefined
136
148
  }
137
149
 
150
+ /**
151
+ * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result
152
+ * @param {Record<string, string | string[] | null> | undefined} varyDirectives
153
+ * @returns {boolean}
154
+ */
155
+ function revalidationResponseAddsVary (result, varyDirectives) {
156
+ if (!varyDirectives) {
157
+ return false
158
+ }
159
+
160
+ for (const key in varyDirectives) {
161
+ if (result.vary == null || !Object.hasOwn(result.vary, key)) {
162
+ return true
163
+ }
164
+ }
165
+
166
+ return false
167
+ }
168
+
138
169
  function deleteCachedValue (store, cacheKey) {
139
170
  try {
140
171
  store.delete(cacheKey)?.catch?.(nop)
@@ -389,6 +420,17 @@ function handleResult (
389
420
  return handleUncachedResponse(dispatch, globalOpts, cacheKey, handler, opts, reqCacheControl)
390
421
  }
391
422
 
423
+ // Shared stores may outlive the Undici version that wrote them. Do not
424
+ // re-serve a Set-Cookie header from an existing shared-cache entry.
425
+ if (globalOpts.type === 'shared' && Object.hasOwn(result.headers, 'set-cookie')) {
426
+ if (util.isStream(result.body)) {
427
+ result.body.on('error', nop).destroy()
428
+ }
429
+
430
+ deleteCachedValue(globalOpts.store, cacheKey)
431
+ return handleUncachedResponse(dispatch, globalOpts, cacheKey, handler, opts, reqCacheControl)
432
+ }
433
+
392
434
  const now = Date.now()
393
435
  if (now > result.deleteAt) {
394
436
  // Response is expired, cache store shouldn't have given this to us
@@ -471,6 +513,13 @@ function handleResult (
471
513
 
472
514
  if (revalidationResponseUpdatesCacheControl(headers)) {
473
515
  deleteCachedValue(globalOpts.store, cacheKey)
516
+ } else if (revalidationResponseAddsVary(result, headers.vary ? parseVaryHeader(headers.vary, opts.headers) : undefined)) {
517
+ if (util.isStream(result.body)) {
518
+ result.body.on('error', nop).destroy()
519
+ }
520
+
521
+ deleteCachedValue(globalOpts.store, cacheKey)
522
+ return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))
474
523
  }
475
524
  }
476
525
 
@@ -538,26 +587,28 @@ module.exports = (opts = {}) => {
538
587
  }
539
588
  }
540
589
 
541
- return dispatch => {
590
+ return (dispatch, interceptorOrigin) => {
542
591
  return (opts, handler) => {
543
- if (!opts.origin || arrayIncludes(safeMethodsToNotCache, opts.method)) {
544
- // Not a method we want to cache or we don't have the origin, skip
592
+ const requestOrigin = getInterceptorOrigin(opts, interceptorOrigin)
593
+ if (!requestOrigin || arrayIncludes(safeMethodsToNotCache, opts.method)) {
594
+ // We cannot safely cache without an authoritative origin, or this is
595
+ // not a method we want to cache.
545
596
  return dispatch(opts, handler)
546
597
  }
547
598
 
548
599
  // Check if origin is in whitelist
549
600
  if (origins !== undefined) {
550
- const requestOrigin = opts.origin.toString().toLowerCase()
601
+ const normalizedRequestOrigin = requestOrigin.toString().toLowerCase()
551
602
  let isAllowed = false
552
603
 
553
604
  for (let i = 0; i < origins.length; i++) {
554
605
  const allowed = origins[i]
555
606
  if (typeof allowed === 'string') {
556
- if (allowed.toLowerCase() === requestOrigin) {
607
+ if (allowed.toLowerCase() === normalizedRequestOrigin) {
557
608
  isAllowed = true
558
609
  break
559
610
  }
560
- } else if (allowed.test(requestOrigin)) {
611
+ } else if (allowed.test(normalizedRequestOrigin)) {
561
612
  isAllowed = true
562
613
  break
563
614
  }
@@ -586,7 +637,12 @@ module.exports = (opts = {}) => {
586
637
  /**
587
638
  * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}
588
639
  */
589
- const cacheKey = makeCacheKey(opts)
640
+ const cacheKey = makeCacheKey(opts, requestOrigin)
641
+
642
+ if (!arrayIncludes(util.safeHTTPMethods, opts.method)) {
643
+ return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))
644
+ }
645
+
590
646
  const result = store.get(cacheKey)
591
647
 
592
648
  if (result && typeof result.then === 'function') {
@@ -1,7 +1,8 @@
1
1
  'use strict'
2
2
 
3
3
  const { createInflate, createGunzip, createBrotliDecompress, createZstdDecompress } = require('node:zlib')
4
- const { pipeline } = require('node:stream')
4
+ const { pipeline, Transform: TransformStream } = require('node:stream')
5
+ const { InvalidArgumentError, ResponseExceededMaxSizeError } = require('../core/errors')
5
6
  const DecoratorHandler = require('../handler/decorator-handler')
6
7
 
7
8
  /** @typedef {import('node:stream').Transform} Transform */
@@ -20,6 +21,31 @@ const supportedEncodings = {
20
21
  }
21
22
 
22
23
  const defaultSkipStatusCodes = /** @type {const} */ ([204, 304])
24
+ const defaultMaxSize = 64 * 1024 * 1024
25
+
26
+ /**
27
+ * Limits the output of one stage in a decompression chain.
28
+ * @param {number} maxSize - Maximum output size in bytes
29
+ * @returns {Transform}
30
+ */
31
+ function createMaxSizeLimiter (maxSize) {
32
+ let size = 0
33
+
34
+ return new TransformStream({
35
+ transform (chunk, _encoding, callback) {
36
+ const decompressedSize = size + chunk.length
37
+ if (decompressedSize > maxSize) {
38
+ callback(new ResponseExceededMaxSizeError(
39
+ `Decompressed response size (${decompressedSize}) exceeded maxSize (${maxSize})`
40
+ ))
41
+ return
42
+ }
43
+
44
+ size = decompressedSize
45
+ callback(null, chunk)
46
+ }
47
+ })
48
+ }
23
49
 
24
50
  let warningEmitted = /** @type {boolean} */ (false)
25
51
 
@@ -27,6 +53,7 @@ let warningEmitted = /** @type {boolean} */ (false)
27
53
  * @typedef {Object} DecompressHandlerOptions
28
54
  * @property {number[]|Readonly<number[]>} [skipStatusCodes=[204, 304]] - List of status codes to skip decompression for
29
55
  * @property {boolean} [skipErrorResponses] - Whether to skip decompression for error responses (status codes >= 400)
56
+ * @property {number} [maxSize=67108864] - Maximum decompressed response size in bytes
30
57
  */
31
58
 
32
59
  class DecompressHandler extends DecoratorHandler {
@@ -38,11 +65,24 @@ class DecompressHandler extends DecoratorHandler {
38
65
  #skipStatusCodes
39
66
  /** @type {boolean} */
40
67
  #skipErrorResponses
68
+ /** @type {number} */
69
+ #maxSize
70
+ /** @type {number} */
71
+ #decompressedSize = 0
72
+ /** @type {boolean} */
73
+ #terminated = false
74
+ /** @type {boolean} */
75
+ #inputEnded = false
76
+
77
+ constructor (handler, { skipStatusCodes = defaultSkipStatusCodes, skipErrorResponses = true, maxSize = defaultMaxSize } = {}) {
78
+ if (!Number.isSafeInteger(maxSize) || maxSize < 1) {
79
+ throw new InvalidArgumentError('maxSize must be a positive integer')
80
+ }
41
81
 
42
- constructor (handler, { skipStatusCodes = defaultSkipStatusCodes, skipErrorResponses = true } = {}) {
43
82
  super(handler)
44
83
  this.#skipStatusCodes = skipStatusCodes
45
84
  this.#skipErrorResponses = skipErrorResponses
85
+ this.#maxSize = maxSize
46
86
  }
47
87
 
48
88
  /**
@@ -62,7 +102,7 @@ class DecompressHandler extends DecoratorHandler {
62
102
  * Creates a chain of decompressors for multiple content encodings
63
103
  *
64
104
  * @param {string} encodings - Comma-separated list of content encodings
65
- * @returns {Array<DecompressorStream>} - Array of decompressor streams
105
+ * @returns {Array<Transform>} - Array of decompressor and limiting streams
66
106
  * @throws {Error} - If the number of content-encodings exceeds the maximum allowed
67
107
  */
68
108
  #createDecompressionChain (encodings) {
@@ -90,7 +130,40 @@ class DecompressHandler extends DecoratorHandler {
90
130
  decompressors.push(supportedEncodings[encoding]())
91
131
  }
92
132
 
93
- return decompressors
133
+ if (decompressors.length < 2) {
134
+ return decompressors
135
+ }
136
+
137
+ /** @type {Transform[]} */
138
+ const streams = []
139
+ for (let i = 0; i < decompressors.length; i++) {
140
+ streams.push(decompressors[i])
141
+ if (i < decompressors.length - 1) {
142
+ streams.push(createMaxSizeLimiter(this.#maxSize))
143
+ }
144
+ }
145
+
146
+ return streams
147
+ }
148
+
149
+ /**
150
+ * Stops decompression and reports an error.
151
+ * @param {Controller} controller - The controller to coordinate with
152
+ * @param {Error} error - The decompression error
153
+ * @returns {void}
154
+ */
155
+ #fail (controller, error) {
156
+ if (this.#terminated) {
157
+ return
158
+ }
159
+
160
+ if (this.#inputEnded) {
161
+ // The request is already marked complete once the compressed input ends,
162
+ // so controller.abort() can no longer propagate decoder flush errors.
163
+ this.onResponseError(controller, error)
164
+ } else {
165
+ controller.abort(error)
166
+ }
94
167
  }
95
168
 
96
169
  /**
@@ -101,8 +174,21 @@ class DecompressHandler extends DecoratorHandler {
101
174
  */
102
175
  #setupDecompressorEvents (decompressor, controller) {
103
176
  decompressor.on('readable', () => {
177
+ if (this.#terminated) {
178
+ return
179
+ }
180
+
104
181
  let chunk
105
182
  while ((chunk = decompressor.read()) !== null) {
183
+ const decompressedSize = this.#decompressedSize + chunk.length
184
+ if (decompressedSize > this.#maxSize) {
185
+ this.#fail(controller, new ResponseExceededMaxSizeError(
186
+ `Decompressed response size (${decompressedSize}) exceeded maxSize (${this.#maxSize})`
187
+ ))
188
+ return
189
+ }
190
+
191
+ this.#decompressedSize = decompressedSize
106
192
  const result = super.onResponseData(controller, chunk)
107
193
  if (result === false) {
108
194
  break
@@ -111,7 +197,7 @@ class DecompressHandler extends DecoratorHandler {
111
197
  })
112
198
 
113
199
  decompressor.on('error', (error) => {
114
- super.onResponseError(controller, error)
200
+ this.#fail(controller, error)
115
201
  })
116
202
  }
117
203
 
@@ -125,6 +211,12 @@ class DecompressHandler extends DecoratorHandler {
125
211
  this.#setupDecompressorEvents(decompressor, controller)
126
212
 
127
213
  decompressor.on('end', () => {
214
+ if (this.#terminated) {
215
+ return
216
+ }
217
+
218
+ this.#terminated = true
219
+ this.#cleanupDecompressors()
128
220
  super.onResponseEnd(controller, this.#trailers)
129
221
  })
130
222
  }
@@ -139,10 +231,17 @@ class DecompressHandler extends DecoratorHandler {
139
231
  this.#setupDecompressorEvents(lastDecompressor, controller)
140
232
 
141
233
  pipeline(this.#decompressors, (err) => {
234
+ if (this.#terminated) {
235
+ return
236
+ }
237
+
142
238
  if (err) {
143
- super.onResponseError(controller, err)
239
+ this.#fail(controller, err)
144
240
  return
145
241
  }
242
+
243
+ this.#terminated = true
244
+ this.#cleanupDecompressors()
146
245
  super.onResponseEnd(controller, this.#trailers)
147
246
  })
148
247
  }
@@ -198,7 +297,7 @@ class DecompressHandler extends DecoratorHandler {
198
297
 
199
298
  filteredHeaders.push(rawHeaders[i], rawHeaders[i + 1])
200
299
  }
201
- controller.rawHeaders = filteredHeaders
300
+ rawHeaders.splice(0, rawHeaders.length, ...filteredHeaders)
202
301
  } else if (typeof rawHeaders === 'object') {
203
302
  for (const name of Object.keys(rawHeaders)) {
204
303
  const lowerName = name.toLowerCase()
@@ -238,9 +337,9 @@ class DecompressHandler extends DecoratorHandler {
238
337
  */
239
338
  onResponseEnd (controller, trailers) {
240
339
  if (this.#decompressors.length > 0) {
340
+ this.#inputEnded = true
241
341
  this.#trailers = trailers
242
342
  this.#decompressors[0].end()
243
- this.#cleanupDecompressors()
244
343
  return
245
344
  }
246
345
  super.onResponseEnd(controller, trailers)
@@ -252,12 +351,15 @@ class DecompressHandler extends DecoratorHandler {
252
351
  * @returns {void}
253
352
  */
254
353
  onResponseError (controller, err) {
255
- if (this.#decompressors.length > 0) {
256
- for (const decompressor of this.#decompressors) {
257
- decompressor.destroy(err)
258
- }
259
- this.#cleanupDecompressors()
354
+ if (this.#terminated) {
355
+ return
356
+ }
357
+
358
+ this.#terminated = true
359
+ for (const decompressor of this.#decompressors) {
360
+ decompressor.destroy()
260
361
  }
362
+ this.#cleanupDecompressors()
261
363
  super.onResponseError(controller, err)
262
364
  }
263
365
  }