@suveren/gateway 0.39.0 → 0.41.0

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 (1039) hide show
  1. package/dist/control-plane/index.mjs +182 -37
  2. package/dist/mcp-server/http.mjs +356 -72
  3. package/dist/ui/assets/index-CO-dj98E.js +123 -0
  4. package/dist/ui/assets/index-DM9WXky8.css +1 -0
  5. package/dist/ui/index.html +2 -2
  6. package/node_modules/@hap/core/README.md +3 -3
  7. package/node_modules/@hap/core/dist/index.d.mts +567 -123
  8. package/node_modules/@hap/core/dist/index.d.ts +567 -123
  9. package/node_modules/@hap/core/dist/index.js +869 -23
  10. package/node_modules/@hap/core/dist/index.mjs +829 -22
  11. package/node_modules/@hap/core/node_modules/@hpke/core/LICENSE +21 -0
  12. package/node_modules/@hap/core/node_modules/@hpke/core/README.md +263 -0
  13. package/node_modules/@hap/core/node_modules/@hpke/core/esm/mod.d.ts +11 -0
  14. package/node_modules/@hap/core/node_modules/@hpke/core/esm/mod.d.ts.map +1 -0
  15. package/node_modules/@hap/core/node_modules/@hpke/core/esm/mod.js +6 -0
  16. package/node_modules/@hap/core/node_modules/@hpke/core/esm/package.json +3 -0
  17. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/aesGcm.d.ts +80 -0
  18. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/aesGcm.d.ts.map +1 -0
  19. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/aesGcm.js +167 -0
  20. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/exportOnly.d.ts +34 -0
  21. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/exportOnly.d.ts.map +1 -0
  22. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/aeads/exportOnly.js +56 -0
  23. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/cipherSuiteNative.d.ts +145 -0
  24. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/cipherSuiteNative.d.ts.map +1 -0
  25. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/cipherSuiteNative.js +326 -0
  26. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/encryptionContext.d.ts +15 -0
  27. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/encryptionContext.d.ts.map +1 -0
  28. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/encryptionContext.js +68 -0
  29. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/exporterContext.d.ts +19 -0
  30. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/exporterContext.d.ts.map +1 -0
  31. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/exporterContext.js +62 -0
  32. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/aeadParams.d.ts +17 -0
  33. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/aeadParams.d.ts.map +1 -0
  34. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/aeadParams.js +1 -0
  35. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/cipherSuiteParams.d.ts +13 -0
  36. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/cipherSuiteParams.d.ts.map +1 -0
  37. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/cipherSuiteParams.js +1 -0
  38. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encapsulator.d.ts +8 -0
  39. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encapsulator.d.ts.map +1 -0
  40. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encapsulator.js +1 -0
  41. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encryptionContext.d.ts +40 -0
  42. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encryptionContext.d.ts.map +1 -0
  43. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/encryptionContext.js +1 -0
  44. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/exporter.d.ts +17 -0
  45. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/exporter.d.ts.map +1 -0
  46. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/exporter.js +1 -0
  47. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/keyInfo.d.ts +7 -0
  48. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/keyInfo.d.ts.map +1 -0
  49. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/keyInfo.js +1 -0
  50. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/responses.d.ts +10 -0
  51. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/responses.d.ts.map +1 -0
  52. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/interfaces/responses.js +1 -0
  53. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemNative.d.ts +26 -0
  54. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemNative.d.ts.map +1 -0
  55. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemNative.js +112 -0
  56. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.d.ts +24 -0
  57. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.d.ts.map +1 -0
  58. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.js +214 -0
  59. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.d.ts +24 -0
  60. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.d.ts.map +1 -0
  61. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.js +214 -0
  62. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX25519.d.ts +38 -0
  63. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX25519.d.ts.map +1 -0
  64. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX25519.js +66 -0
  65. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX448.d.ts +38 -0
  66. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX448.d.ts.map +1 -0
  67. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/kems/dhkemX448.js +66 -0
  68. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/mutex.d.ts +5 -0
  69. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/mutex.d.ts.map +1 -0
  70. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/mutex.js +28 -0
  71. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/native.d.ts +236 -0
  72. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/native.d.ts.map +1 -0
  73. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/native.js +235 -0
  74. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/recipientContext.d.ts +6 -0
  75. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/recipientContext.d.ts.map +1 -0
  76. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/recipientContext.js +38 -0
  77. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/senderContext.d.ts +11 -0
  78. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/senderContext.d.ts.map +1 -0
  79. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/senderContext.js +45 -0
  80. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/utils/emitNotSupported.d.ts +2 -0
  81. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/utils/emitNotSupported.d.ts.map +1 -0
  82. package/node_modules/@hap/core/node_modules/@hpke/core/esm/src/utils/emitNotSupported.js +6 -0
  83. package/node_modules/@hap/core/node_modules/@hpke/core/package.json +46 -0
  84. package/node_modules/@hap/core/node_modules/@hpke/core/script/mod.d.ts +11 -0
  85. package/node_modules/@hap/core/node_modules/@hpke/core/script/mod.d.ts.map +1 -0
  86. package/node_modules/@hap/core/node_modules/@hpke/core/script/mod.js +47 -0
  87. package/node_modules/@hap/core/node_modules/@hpke/core/script/package.json +3 -0
  88. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/aesGcm.d.ts +80 -0
  89. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/aesGcm.d.ts.map +1 -0
  90. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/aesGcm.js +183 -0
  91. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/exportOnly.d.ts +34 -0
  92. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/exportOnly.d.ts.map +1 -0
  93. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/aeads/exportOnly.js +70 -0
  94. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/cipherSuiteNative.d.ts +145 -0
  95. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/cipherSuiteNative.d.ts.map +1 -0
  96. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/cipherSuiteNative.js +340 -0
  97. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/encryptionContext.d.ts +15 -0
  98. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/encryptionContext.d.ts.map +1 -0
  99. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/encryptionContext.js +82 -0
  100. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/exporterContext.d.ts +19 -0
  101. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/exporterContext.d.ts.map +1 -0
  102. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/exporterContext.js +78 -0
  103. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/aeadParams.d.ts +17 -0
  104. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/aeadParams.d.ts.map +1 -0
  105. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/aeadParams.js +12 -0
  106. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/cipherSuiteParams.d.ts +13 -0
  107. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/cipherSuiteParams.d.ts.map +1 -0
  108. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/cipherSuiteParams.js +12 -0
  109. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encapsulator.d.ts +8 -0
  110. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encapsulator.d.ts.map +1 -0
  111. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encapsulator.js +12 -0
  112. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encryptionContext.d.ts +40 -0
  113. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encryptionContext.d.ts.map +1 -0
  114. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/encryptionContext.js +12 -0
  115. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/exporter.d.ts +17 -0
  116. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/exporter.d.ts.map +1 -0
  117. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/exporter.js +12 -0
  118. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/keyInfo.d.ts +7 -0
  119. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/keyInfo.d.ts.map +1 -0
  120. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/keyInfo.js +12 -0
  121. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/responses.d.ts +10 -0
  122. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/responses.d.ts.map +1 -0
  123. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/interfaces/responses.js +12 -0
  124. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemNative.d.ts +26 -0
  125. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemNative.d.ts.map +1 -0
  126. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemNative.js +128 -0
  127. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.d.ts +24 -0
  128. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.d.ts.map +1 -0
  129. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.js +228 -0
  130. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.d.ts +24 -0
  131. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.d.ts.map +1 -0
  132. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.js +228 -0
  133. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX25519.d.ts +38 -0
  134. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX25519.d.ts.map +1 -0
  135. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX25519.js +80 -0
  136. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX448.d.ts +38 -0
  137. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX448.d.ts.map +1 -0
  138. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/kems/dhkemX448.js +80 -0
  139. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/mutex.d.ts +5 -0
  140. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/mutex.d.ts.map +1 -0
  141. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/mutex.js +42 -0
  142. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/native.d.ts +236 -0
  143. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/native.d.ts.map +1 -0
  144. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/native.js +255 -0
  145. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/recipientContext.d.ts +6 -0
  146. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/recipientContext.d.ts.map +1 -0
  147. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/recipientContext.js +52 -0
  148. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/senderContext.d.ts +11 -0
  149. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/senderContext.d.ts.map +1 -0
  150. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/senderContext.js +59 -0
  151. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/utils/emitNotSupported.d.ts +2 -0
  152. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/utils/emitNotSupported.d.ts.map +1 -0
  153. package/node_modules/@hap/core/node_modules/@hpke/core/script/src/utils/emitNotSupported.js +19 -0
  154. package/node_modules/@hap/core/package.json +2 -1
  155. package/node_modules/@hap/core/src/canonicalize.ts +9 -0
  156. package/node_modules/@hap/core/src/commitment-modes.ts +21 -9
  157. package/node_modules/@hap/core/src/errors.ts +24 -8
  158. package/node_modules/@hap/core/src/gatekeeper.ts +52 -8
  159. package/node_modules/@hap/core/src/index.ts +5 -1
  160. package/node_modules/@hap/core/src/issuance.ts +250 -0
  161. package/node_modules/@hap/core/src/mandate.ts +52 -14
  162. package/node_modules/@hap/core/src/owner-signature.ts +86 -39
  163. package/node_modules/@hap/core/src/profile.ts +45 -0
  164. package/node_modules/@hap/core/src/proposal-content.ts +219 -0
  165. package/node_modules/@hap/core/src/ticket-projection.ts +167 -0
  166. package/node_modules/@hap/core/src/ticket.ts +254 -20
  167. package/node_modules/@hap/core/src/types.ts +33 -5
  168. package/node_modules/@hap/core/src/verifier-policy.ts +178 -0
  169. package/node_modules/@hap/core/src/versions.ts +50 -19
  170. package/node_modules/@hono/node-server/dist/index.cjs +31 -6
  171. package/node_modules/@hono/node-server/dist/index.mjs +31 -6
  172. package/node_modules/@hono/node-server/package.json +1 -1
  173. package/node_modules/@hpke/common/esm/package.json +5 -1
  174. package/node_modules/@hpke/common/esm/src/curve/montgomery.d.ts +2 -2
  175. package/node_modules/@hpke/common/esm/src/curve/montgomery.d.ts.map +1 -1
  176. package/node_modules/@hpke/common/esm/src/curve/montgomery.js +41 -26
  177. package/node_modules/@hpke/common/esm/src/hash/sha3.d.ts.map +1 -1
  178. package/node_modules/@hpke/common/esm/src/hash/sha3.js +0 -15
  179. package/node_modules/@hpke/common/esm/src/kdfs/hkdf.d.ts +2 -1
  180. package/node_modules/@hpke/common/esm/src/kdfs/hkdf.d.ts.map +1 -1
  181. package/node_modules/@hpke/common/esm/src/kdfs/hkdf.js +12 -2
  182. package/node_modules/@hpke/common/esm/src/kems/dhkemPrimitives/xCurve.d.ts.map +1 -1
  183. package/node_modules/@hpke/common/esm/src/kems/dhkemPrimitives/xCurve.js +14 -3
  184. package/node_modules/@hpke/common/esm/src/utils/misc.d.ts +6 -0
  185. package/node_modules/@hpke/common/esm/src/utils/misc.d.ts.map +1 -1
  186. package/node_modules/@hpke/common/esm/src/utils/misc.js +43 -10
  187. package/node_modules/@hpke/common/esm/src/utils/noble.d.ts +1 -1
  188. package/node_modules/@hpke/common/esm/src/utils/noble.d.ts.map +1 -1
  189. package/node_modules/@hpke/common/esm/src/utils/noble.js +21 -10
  190. package/node_modules/@hpke/common/package.json +5 -1
  191. package/node_modules/@hpke/common/script/src/curve/montgomery.d.ts +2 -2
  192. package/node_modules/@hpke/common/script/src/curve/montgomery.d.ts.map +1 -1
  193. package/node_modules/@hpke/common/script/src/curve/montgomery.js +40 -25
  194. package/node_modules/@hpke/common/script/src/hash/sha3.d.ts.map +1 -1
  195. package/node_modules/@hpke/common/script/src/hash/sha3.js +0 -15
  196. package/node_modules/@hpke/common/script/src/kdfs/hkdf.d.ts +2 -1
  197. package/node_modules/@hpke/common/script/src/kdfs/hkdf.d.ts.map +1 -1
  198. package/node_modules/@hpke/common/script/src/kdfs/hkdf.js +12 -2
  199. package/node_modules/@hpke/common/script/src/kems/dhkemPrimitives/xCurve.d.ts.map +1 -1
  200. package/node_modules/@hpke/common/script/src/kems/dhkemPrimitives/xCurve.js +13 -2
  201. package/node_modules/@hpke/common/script/src/utils/misc.d.ts +6 -0
  202. package/node_modules/@hpke/common/script/src/utils/misc.d.ts.map +1 -1
  203. package/node_modules/@hpke/common/script/src/utils/misc.js +43 -9
  204. package/node_modules/@hpke/common/script/src/utils/noble.d.ts +1 -1
  205. package/node_modules/@hpke/common/script/src/utils/noble.d.ts.map +1 -1
  206. package/node_modules/@hpke/common/script/src/utils/noble.js +22 -11
  207. package/node_modules/@hpke/core/README.md +56 -56
  208. package/node_modules/@hpke/core/esm/package.json +2 -1
  209. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.d.ts +3 -21
  210. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.d.ts.map +1 -1
  211. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x25519.js +3 -201
  212. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.d.ts +3 -21
  213. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.d.ts.map +1 -1
  214. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/x448.js +3 -201
  215. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/xCurveNative.d.ts +26 -0
  216. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/xCurveNative.d.ts.map +1 -0
  217. package/node_modules/@hpke/core/esm/src/kems/dhkemPrimitives/xCurveNative.js +216 -0
  218. package/node_modules/@hpke/core/package.json +6 -2
  219. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.d.ts +3 -21
  220. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.d.ts.map +1 -1
  221. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x25519.js +4 -202
  222. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.d.ts +3 -21
  223. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.d.ts.map +1 -1
  224. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/x448.js +4 -202
  225. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/xCurveNative.d.ts +26 -0
  226. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/xCurveNative.d.ts.map +1 -0
  227. package/node_modules/@hpke/core/script/src/kems/dhkemPrimitives/xCurveNative.js +230 -0
  228. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/mcp.d.ts.map +1 -1
  229. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/mcp.js +10 -0
  230. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/mcp.js.map +1 -1
  231. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/transport.d.ts +8 -8
  232. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/transport.d.ts.map +1 -1
  233. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.d.ts.map +1 -1
  234. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +10 -0
  235. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +1 -1
  236. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts +8 -8
  237. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts.map +1 -1
  238. package/node_modules/@modelcontextprotocol/sdk/package.json +1 -1
  239. package/node_modules/@types/node/README.md +1 -1
  240. package/node_modules/@types/node/package.json +2 -2
  241. package/node_modules/@types/node/zlib.d.ts +752 -0
  242. package/node_modules/encodeurl/README.md +14 -0
  243. package/node_modules/encodeurl/index.js +5 -10
  244. package/node_modules/encodeurl/package.json +10 -6
  245. package/node_modules/express-rate-limit/dist/index.cjs +7 -3
  246. package/node_modules/express-rate-limit/dist/index.mjs +7 -3
  247. package/node_modules/express-rate-limit/package.json +10 -10
  248. package/node_modules/follow-redirects/README.md +27 -1
  249. package/node_modules/follow-redirects/index.js +1 -5
  250. package/node_modules/follow-redirects/package.json +1 -1
  251. package/node_modules/hono/README.md +2 -3
  252. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +1 -1
  253. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +1 -1
  254. package/node_modules/hono/dist/cjs/context.js +1 -1
  255. package/node_modules/hono/dist/cjs/helper/css/common.js +11 -8
  256. package/node_modules/hono/dist/cjs/helper/css/index.js +1 -1
  257. package/node_modules/hono/dist/cjs/helper/route/index.js +3 -1
  258. package/node_modules/hono/dist/cjs/hono-base.js +4 -10
  259. package/node_modules/hono/dist/cjs/hono.js +0 -1
  260. package/node_modules/hono/dist/cjs/jsx/base.js +1 -1
  261. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +1 -1
  262. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +9 -1
  263. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +2 -2
  264. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +2 -2
  265. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +2 -2
  266. package/node_modules/hono/dist/cjs/middleware/mount/index.js +4 -4
  267. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +3 -1
  268. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +13 -11
  269. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +4 -4
  270. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +39 -51
  271. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +15 -5
  272. package/node_modules/hono/dist/cjs/router/trie-router/node.js +2 -2
  273. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +2 -1
  274. package/node_modules/hono/dist/cjs/utils/mount.js +35 -0
  275. package/node_modules/hono/dist/cjs/utils/url.js +21 -6
  276. package/node_modules/hono/dist/cjs/validator/validator.js +1 -1
  277. package/node_modules/hono/dist/context.js +1 -1
  278. package/node_modules/hono/dist/helper/css/common.js +11 -8
  279. package/node_modules/hono/dist/helper/css/index.js +1 -1
  280. package/node_modules/hono/dist/helper/route/index.js +3 -1
  281. package/node_modules/hono/dist/hono-base.js +4 -10
  282. package/node_modules/hono/dist/hono.js +0 -1
  283. package/node_modules/hono/dist/jsx/base.js +1 -1
  284. package/node_modules/hono/dist/middleware/basic-auth/index.js +1 -1
  285. package/node_modules/hono/dist/middleware/bearer-auth/index.js +9 -1
  286. package/node_modules/hono/dist/middleware/csrf/index.js +2 -2
  287. package/node_modules/hono/dist/middleware/jwk/jwk.js +2 -2
  288. package/node_modules/hono/dist/middleware/jwt/jwt.js +2 -2
  289. package/node_modules/hono/dist/middleware/language/language.js +1 -1
  290. package/node_modules/hono/dist/middleware/mount/index.js +4 -4
  291. package/node_modules/hono/dist/middleware/serve-static/index.js +3 -1
  292. package/node_modules/hono/dist/router/reg-exp-router/node.js +13 -11
  293. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +5 -5
  294. package/node_modules/hono/dist/router/reg-exp-router/router.js +40 -52
  295. package/node_modules/hono/dist/router/reg-exp-router/trie.js +15 -5
  296. package/node_modules/hono/dist/router/trie-router/node.js +2 -2
  297. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +1 -1
  298. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +1 -1
  299. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +1 -1
  300. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +1 -1
  301. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +1 -1
  302. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +1 -1
  303. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +1 -1
  304. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +1 -1
  305. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +1 -1
  306. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +1 -1
  307. package/node_modules/hono/dist/types/helper/testing/index.d.ts +2 -1
  308. package/node_modules/hono/dist/types/hono-base.d.ts +21 -9
  309. package/node_modules/hono/dist/types/index.d.ts +1 -1
  310. package/node_modules/hono/dist/types/jsx/components.d.ts +2 -2
  311. package/node_modules/hono/dist/types/jsx/context.d.ts +2 -2
  312. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +2 -2
  313. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +2 -2
  314. package/node_modules/hono/dist/types/jsx/streaming.d.ts +4 -3
  315. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +2 -1
  316. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +3 -3
  317. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +3 -3
  318. package/node_modules/hono/dist/types/middleware/mount/index.d.ts +1 -0
  319. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +3 -3
  320. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +1 -1
  321. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +1 -1
  322. package/node_modules/hono/dist/types/utils/mount.d.ts +4 -0
  323. package/node_modules/hono/dist/types/utils/url.d.ts +1 -0
  324. package/node_modules/hono/dist/utils/jwt/jwt.js +2 -1
  325. package/node_modules/hono/dist/utils/mount.js +34 -0
  326. package/node_modules/hono/dist/utils/url.js +21 -7
  327. package/node_modules/hono/dist/validator/validator.js +1 -1
  328. package/node_modules/hono/package.json +1 -1
  329. package/node_modules/http-proxy-middleware/dist/handlers/fix-request-body.js +2 -2
  330. package/node_modules/http-proxy-middleware/package.json +1 -1
  331. package/node_modules/ip-address/README.md +39 -39
  332. package/node_modules/ip-address/dist/common.js +2 -2
  333. package/node_modules/ip-address/dist/common.js.map +1 -1
  334. package/node_modules/ip-address/dist/ipv6.js +1 -1
  335. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  336. package/node_modules/ip-address/package.json +2 -2
  337. package/node_modules/jose/dist/types/jwt/decrypt.d.ts +3 -0
  338. package/node_modules/jose/dist/types/jwt/unsecured.d.ts +2 -0
  339. package/node_modules/jose/dist/types/jwt/verify.d.ts +3 -0
  340. package/node_modules/jose/dist/types/types.d.ts +8 -0
  341. package/node_modules/jose/dist/types/util/decode_jwt.d.ts +1 -0
  342. package/node_modules/jose/dist/webapi/jwks/remote.js +3 -1
  343. package/node_modules/jose/dist/webapi/lib/deflate.js +2 -1
  344. package/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +2 -1
  345. package/node_modules/jose/package.json +1 -1
  346. package/node_modules/postcss/lib/input.js +1 -1
  347. package/node_modules/postcss/lib/lazy-result.js +1 -1
  348. package/node_modules/postcss/lib/no-work-result.js +1 -1
  349. package/node_modules/postcss/lib/node.js +2 -2
  350. package/node_modules/postcss/lib/processor.js +1 -1
  351. package/node_modules/postcss/lib/warning.js +1 -0
  352. package/node_modules/postcss/package.json +1 -1
  353. package/node_modules/qs/CHANGELOG.md +29 -22
  354. package/node_modules/qs/dist/qs.js +14 -14
  355. package/node_modules/qs/eslint.config.mjs +6 -0
  356. package/node_modules/qs/lib/stringify.js +1 -1
  357. package/node_modules/qs/package.json +5 -5
  358. package/node_modules/qs/test/stringify.js +74 -0
  359. package/node_modules/zod/README.md +34 -24
  360. package/node_modules/zod/compile.cjs +96 -0
  361. package/node_modules/zod/compile.d.cts +1 -0
  362. package/node_modules/zod/compile.d.ts +1 -0
  363. package/node_modules/zod/compile.js +52 -0
  364. package/node_modules/zod/index.cjs +22 -3
  365. package/node_modules/zod/index.d.cts +3 -4
  366. package/node_modules/zod/index.d.ts +3 -4
  367. package/node_modules/zod/index.js +7 -4
  368. package/node_modules/zod/locales/index.cjs +36 -0
  369. package/node_modules/zod/locales/index.d.cts +1 -0
  370. package/node_modules/zod/locales/index.d.ts +1 -0
  371. package/node_modules/zod/locales/index.js +1 -0
  372. package/node_modules/zod/locales/package.json +7 -0
  373. package/node_modules/zod/mini/index.cjs +51 -0
  374. package/node_modules/zod/mini/index.d.cts +3 -0
  375. package/node_modules/zod/mini/index.d.ts +3 -0
  376. package/node_modules/zod/mini/index.js +3 -0
  377. package/node_modules/zod/mini/package.json +7 -0
  378. package/node_modules/zod/package.json +44 -15
  379. package/node_modules/zod/src/compile.ts +56 -0
  380. package/node_modules/zod/src/index.ts +7 -4
  381. package/node_modules/zod/src/locales/index.ts +1 -0
  382. package/node_modules/zod/src/mini/index.ts +3 -0
  383. package/node_modules/zod/src/v3/ZodError.ts +23 -13
  384. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  385. package/node_modules/zod/src/v3/tests/all-errors.test.ts +3 -3
  386. package/node_modules/zod/src/v3/tests/complex.test.ts +17 -3
  387. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  388. package/node_modules/zod/src/v3/tests/function.test.ts +7 -3
  389. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  390. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  391. package/node_modules/zod/src/v3/tests/nan.test.ts +5 -2
  392. package/node_modules/zod/src/v3/tests/object.test.ts +10 -13
  393. package/node_modules/zod/src/v3/tests/partials.test.ts +3 -3
  394. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  395. package/node_modules/zod/src/v3/tests/string.test.ts +8 -2
  396. package/node_modules/zod/src/v3/types.ts +8 -6
  397. package/node_modules/zod/src/v4/classic/checks.ts +3 -0
  398. package/node_modules/zod/src/v4/classic/compat.ts +30 -18
  399. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  400. package/node_modules/zod/src/v4/classic/errors.ts +61 -39
  401. package/node_modules/zod/src/v4/classic/external.ts +18 -11
  402. package/node_modules/zod/src/v4/classic/from-json-schema.ts +944 -0
  403. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  404. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  405. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  406. package/node_modules/zod/src/v4/classic/parse.ts +57 -2
  407. package/node_modules/zod/src/v4/classic/schemas.ts +1258 -375
  408. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +86 -0
  409. package/node_modules/zod/src/v4/classic/tests/array.test.ts +35 -8
  410. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +192 -0
  411. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  412. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +43 -0
  413. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +357 -5
  414. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +572 -0
  415. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +704 -0
  416. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +27 -5
  417. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  418. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  419. package/node_modules/zod/src/v4/classic/tests/date.test.ts +67 -6
  420. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +37 -17
  421. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  422. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  423. package/node_modules/zod/src/v4/classic/tests/default.test.ts +142 -0
  424. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  425. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +221 -0
  426. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +333 -10
  427. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  428. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +394 -4
  429. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  430. package/node_modules/zod/src/v4/classic/tests/file.test.ts +9 -4
  431. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +4 -0
  432. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  433. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +1467 -0
  434. package/node_modules/zod/src/v4/classic/tests/function.test.ts +160 -37
  435. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +32 -0
  436. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +67 -0
  437. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  438. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  439. package/node_modules/zod/src/v4/classic/tests/index.test.ts +134 -5
  440. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  441. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +93 -0
  442. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +168 -5
  443. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  444. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +39 -0
  445. package/node_modules/zod/src/v4/classic/tests/json.test.ts +4 -3
  446. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  447. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +37 -1
  448. package/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
  449. package/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
  450. package/node_modules/zod/src/v4/classic/tests/map.test.ts +153 -0
  451. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +15 -0
  452. package/node_modules/zod/src/v4/classic/tests/number.test.ts +161 -7
  453. package/node_modules/zod/src/v4/classic/tests/object.test.ts +457 -14
  454. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  455. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +255 -12
  456. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +350 -0
  457. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +89 -5
  458. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +25 -5
  459. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +107 -0
  460. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +44 -0
  461. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +74 -21
  462. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +1 -1
  463. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  464. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +1 -69
  465. package/node_modules/zod/src/v4/classic/tests/record.test.ts +553 -10
  466. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +352 -1
  467. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  468. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +229 -68
  469. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +40 -1
  470. package/node_modules/zod/src/v4/classic/tests/set.test.ts +20 -3
  471. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +96 -0
  472. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +16 -0
  473. package/node_modules/zod/src/v4/classic/tests/string.test.ts +568 -9
  474. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +58 -0
  475. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +70 -16
  476. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  477. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +3409 -990
  478. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +128 -0
  479. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +353 -5
  480. package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -3
  481. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  482. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  483. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  484. package/node_modules/zod/src/v4/core/api.ts +442 -161
  485. package/node_modules/zod/src/v4/core/checks.ts +134 -151
  486. package/node_modules/zod/src/v4/core/compile.ts +2322 -0
  487. package/node_modules/zod/src/v4/core/core.ts +146 -50
  488. package/node_modules/zod/src/v4/core/doc.ts +18 -10
  489. package/node_modules/zod/src/v4/core/errors.ts +221 -102
  490. package/node_modules/zod/src/v4/core/index.ts +5 -1
  491. package/node_modules/zod/src/v4/core/json-schema-generator.ts +131 -0
  492. package/node_modules/zod/src/v4/core/json-schema-processors.ts +934 -0
  493. package/node_modules/zod/src/v4/core/json-schema.ts +9 -4
  494. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  495. package/node_modules/zod/src/v4/core/parse.ts +252 -37
  496. package/node_modules/zod/src/v4/core/regexes.ts +112 -30
  497. package/node_modules/zod/src/v4/core/registries.ts +19 -10
  498. package/node_modules/zod/src/v4/core/schemas.ts +1972 -588
  499. package/node_modules/zod/src/v4/core/standard-schema.ts +114 -19
  500. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  501. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  502. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  503. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  504. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  505. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  506. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  507. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  508. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  509. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +214 -0
  510. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +1 -1
  511. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +180 -0
  512. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
  513. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  514. package/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
  515. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  516. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  517. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  518. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  519. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +2 -2
  520. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +105 -0
  521. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  522. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +125 -0
  523. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  524. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  525. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  526. package/node_modules/zod/src/v4/core/to-json-schema.ts +706 -826
  527. package/node_modules/zod/src/v4/core/util.ts +675 -157
  528. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  529. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  530. package/node_modules/zod/src/v4/index.ts +3 -3
  531. package/node_modules/zod/src/v4/locales/ar.ts +22 -27
  532. package/node_modules/zod/src/v4/locales/az.ts +22 -27
  533. package/node_modules/zod/src/v4/locales/be.ts +31 -27
  534. package/node_modules/zod/src/v4/locales/bg.ts +133 -0
  535. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  536. package/node_modules/zod/src/v4/locales/ca.ts +22 -28
  537. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  538. package/node_modules/zod/src/v4/locales/cs.ts +26 -45
  539. package/node_modules/zod/src/v4/locales/da.ts +128 -0
  540. package/node_modules/zod/src/v4/locales/de.ts +24 -27
  541. package/node_modules/zod/src/v4/locales/el.ts +124 -0
  542. package/node_modules/zod/src/v4/locales/en.ts +38 -29
  543. package/node_modules/zod/src/v4/locales/eo.ts +25 -27
  544. package/node_modules/zod/src/v4/locales/es.ts +53 -33
  545. package/node_modules/zod/src/v4/locales/fa.ts +24 -27
  546. package/node_modules/zod/src/v4/locales/fi.ts +22 -27
  547. package/node_modules/zod/src/v4/locales/fr-CA.ts +22 -27
  548. package/node_modules/zod/src/v4/locales/fr.ts +58 -43
  549. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  550. package/node_modules/zod/src/v4/locales/he.ts +208 -80
  551. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  552. package/node_modules/zod/src/v4/locales/hr.ts +135 -0
  553. package/node_modules/zod/src/v4/locales/hu.ts +24 -28
  554. package/node_modules/zod/src/v4/locales/hy.ts +175 -0
  555. package/node_modules/zod/src/v4/locales/id.ts +22 -27
  556. package/node_modules/zod/src/v4/locales/index.ts +24 -0
  557. package/node_modules/zod/src/v4/locales/is.ts +124 -0
  558. package/node_modules/zod/src/v4/locales/it.ts +24 -28
  559. package/node_modules/zod/src/v4/locales/ja.ts +24 -27
  560. package/node_modules/zod/src/v4/locales/ka.ts +128 -0
  561. package/node_modules/zod/src/v4/locales/kh.ts +3 -122
  562. package/node_modules/zod/src/v4/locales/km.ts +124 -0
  563. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  564. package/node_modules/zod/src/v4/locales/ko.ts +22 -27
  565. package/node_modules/zod/src/v4/locales/lt.ts +243 -0
  566. package/node_modules/zod/src/v4/locales/mk.ts +24 -28
  567. package/node_modules/zod/src/v4/locales/ms.ts +23 -27
  568. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  569. package/node_modules/zod/src/v4/locales/nl.ts +37 -37
  570. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  571. package/node_modules/zod/src/v4/locales/no.ts +26 -29
  572. package/node_modules/zod/src/v4/locales/ota.ts +25 -28
  573. package/node_modules/zod/src/v4/locales/pl.ts +24 -27
  574. package/node_modules/zod/src/v4/locales/ps.ts +24 -26
  575. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  576. package/node_modules/zod/src/v4/locales/pt.ts +107 -71
  577. package/node_modules/zod/src/v4/locales/ro.ts +132 -0
  578. package/node_modules/zod/src/v4/locales/ru.ts +31 -27
  579. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  580. package/node_modules/zod/src/v4/locales/sl.ts +24 -27
  581. package/node_modules/zod/src/v4/locales/sv.ts +26 -29
  582. package/node_modules/zod/src/v4/locales/ta.ts +25 -27
  583. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  584. package/node_modules/zod/src/v4/locales/th.ts +25 -27
  585. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  586. package/node_modules/zod/src/v4/locales/tr.ts +22 -27
  587. package/node_modules/zod/src/v4/locales/ua.ts +3 -122
  588. package/node_modules/zod/src/v4/locales/uk.ts +122 -0
  589. package/node_modules/zod/src/v4/locales/ur.ts +25 -27
  590. package/node_modules/zod/src/v4/locales/uz.ts +120 -0
  591. package/node_modules/zod/src/v4/locales/vi.ts +24 -27
  592. package/node_modules/zod/src/v4/locales/yo.ts +129 -0
  593. package/node_modules/zod/src/v4/locales/zh-CN.ts +25 -27
  594. package/node_modules/zod/src/v4/locales/zh-TW.ts +22 -27
  595. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  596. package/node_modules/zod/src/v4/mini/coerce.ts +5 -0
  597. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  598. package/node_modules/zod/src/v4/mini/external.ts +15 -3
  599. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  600. package/node_modules/zod/src/v4/mini/iso.ts +8 -4
  601. package/node_modules/zod/src/v4/mini/parse.ts +16 -1
  602. package/node_modules/zod/src/v4/mini/schemas.ts +586 -114
  603. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +57 -0
  604. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +63 -2
  605. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +43 -0
  606. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  607. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +582 -0
  608. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +12 -18
  609. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  610. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  611. package/node_modules/zod/src/v4/mini/tests/error.test.ts +24 -5
  612. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +7 -36
  613. package/node_modules/zod/src/v4/mini/tests/index.test.ts +281 -6
  614. package/node_modules/zod/src/v4/mini/tests/number.test.ts +15 -1
  615. package/node_modules/zod/src/v4/mini/tests/object.test.ts +116 -9
  616. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +1 -1
  617. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +68 -2
  618. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  619. package/node_modules/zod/src/v4/mini/tests/string.test.ts +98 -1
  620. package/node_modules/zod/src/v4-mini/index.ts +3 -1
  621. package/node_modules/zod/v3/ZodError.cjs +42 -13
  622. package/node_modules/zod/v3/ZodError.d.cts +6 -6
  623. package/node_modules/zod/v3/ZodError.d.ts +6 -6
  624. package/node_modules/zod/v3/ZodError.js +23 -13
  625. package/node_modules/zod/v3/errors.cjs +19 -0
  626. package/node_modules/zod/v3/external.cjs +19 -0
  627. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  628. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  629. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  630. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  631. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  632. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  633. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  634. package/node_modules/zod/v3/index.cjs +19 -0
  635. package/node_modules/zod/v3/locales/en.cjs +1 -0
  636. package/node_modules/zod/v3/locales/en.d.cts +1 -1
  637. package/node_modules/zod/v3/package.json +7 -0
  638. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  639. package/node_modules/zod/v3/types.cjs +28 -5
  640. package/node_modules/zod/v3/types.d.cts +4 -1
  641. package/node_modules/zod/v3/types.d.ts +4 -1
  642. package/node_modules/zod/v3/types.js +9 -5
  643. package/node_modules/zod/v4/classic/checks.cjs +22 -1
  644. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  645. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  646. package/node_modules/zod/v4/classic/checks.js +1 -1
  647. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  648. package/node_modules/zod/v4/classic/compat.cjs +24 -1
  649. package/node_modules/zod/v4/classic/compat.d.cts +13 -11
  650. package/node_modules/zod/v4/classic/compat.d.ts +13 -11
  651. package/node_modules/zod/v4/classic/compat.js +4 -0
  652. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  653. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  654. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  655. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  656. package/node_modules/zod/v4/classic/errors.cjs +63 -28
  657. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  658. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  659. package/node_modules/zod/v4/classic/errors.js +45 -29
  660. package/node_modules/zod/v4/classic/external.cjs +55 -28
  661. package/node_modules/zod/v4/classic/external.d.cts +8 -2
  662. package/node_modules/zod/v4/classic/external.d.ts +8 -2
  663. package/node_modules/zod/v4/classic/external.js +7 -8
  664. package/node_modules/zod/v4/classic/from-json-schema.cjs +926 -0
  665. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  666. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  667. package/node_modules/zod/v4/classic/from-json-schema.js +881 -0
  668. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  669. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  670. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  671. package/node_modules/zod/v4/classic/in-out.js +36 -0
  672. package/node_modules/zod/v4/classic/index.cjs +21 -2
  673. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  674. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  675. package/node_modules/zod/v4/classic/index.js +2 -2
  676. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  677. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  678. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  679. package/node_modules/zod/v4/classic/iso.js +2 -17
  680. package/node_modules/zod/v4/classic/package.json +7 -0
  681. package/node_modules/zod/v4/classic/parse.cjs +32 -1
  682. package/node_modules/zod/v4/classic/parse.d.cts +21 -0
  683. package/node_modules/zod/v4/classic/parse.d.ts +21 -0
  684. package/node_modules/zod/v4/classic/parse.js +10 -0
  685. package/node_modules/zod/v4/classic/schemas.cjs +805 -238
  686. package/node_modules/zod/v4/classic/schemas.d.cts +241 -55
  687. package/node_modules/zod/v4/classic/schemas.d.ts +241 -55
  688. package/node_modules/zod/v4/classic/schemas.js +766 -237
  689. package/node_modules/zod/v4/core/api.cjs +284 -54
  690. package/node_modules/zod/v4/core/api.d.cts +133 -82
  691. package/node_modules/zod/v4/core/api.d.ts +133 -82
  692. package/node_modules/zod/v4/core/api.js +255 -54
  693. package/node_modules/zod/v4/core/checks.cjs +100 -130
  694. package/node_modules/zod/v4/core/checks.d.cts +32 -16
  695. package/node_modules/zod/v4/core/checks.d.ts +32 -16
  696. package/node_modules/zod/v4/core/checks.js +80 -129
  697. package/node_modules/zod/v4/core/compile.cjs +1916 -0
  698. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  699. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  700. package/node_modules/zod/v4/core/compile.js +1866 -0
  701. package/node_modules/zod/v4/core/core.cjs +120 -20
  702. package/node_modules/zod/v4/core/core.d.cts +40 -7
  703. package/node_modules/zod/v4/core/core.d.ts +40 -7
  704. package/node_modules/zod/v4/core/core.js +101 -21
  705. package/node_modules/zod/v4/core/doc.cjs +31 -9
  706. package/node_modules/zod/v4/core/doc.d.cts +4 -2
  707. package/node_modules/zod/v4/core/doc.d.ts +4 -2
  708. package/node_modules/zod/v4/core/doc.js +12 -9
  709. package/node_modules/zod/v4/core/errors.cjs +151 -60
  710. package/node_modules/zod/v4/core/errors.d.cts +41 -24
  711. package/node_modules/zod/v4/core/errors.d.ts +41 -24
  712. package/node_modules/zod/v4/core/errors.js +132 -60
  713. package/node_modules/zod/v4/core/index.cjs +28 -2
  714. package/node_modules/zod/v4/core/index.d.cts +5 -1
  715. package/node_modules/zod/v4/core/index.d.ts +5 -1
  716. package/node_modules/zod/v4/core/index.js +5 -1
  717. package/node_modules/zod/v4/core/json-schema-generator.cjs +122 -0
  718. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  719. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  720. package/node_modules/zod/v4/core/json-schema-generator.js +99 -0
  721. package/node_modules/zod/v4/core/json-schema-processors.cjs +929 -0
  722. package/node_modules/zod/v4/core/json-schema-processors.d.cts +65 -0
  723. package/node_modules/zod/v4/core/json-schema-processors.d.ts +65 -0
  724. package/node_modules/zod/v4/core/json-schema-processors.js +843 -0
  725. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  726. package/node_modules/zod/v4/core/json-schema.d.cts +6 -4
  727. package/node_modules/zod/v4/core/json-schema.d.ts +6 -4
  728. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  729. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  730. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  731. package/node_modules/zod/v4/core/memoizer.js +311 -0
  732. package/node_modules/zod/v4/core/package.json +7 -0
  733. package/node_modules/zod/v4/core/parse.cjs +183 -37
  734. package/node_modules/zod/v4/core/parse.d.cts +34 -7
  735. package/node_modules/zod/v4/core/parse.d.ts +34 -7
  736. package/node_modules/zod/v4/core/parse.js +154 -36
  737. package/node_modules/zod/v4/core/regexes.cjs +137 -31
  738. package/node_modules/zod/v4/core/regexes.d.cts +30 -2
  739. package/node_modules/zod/v4/core/regexes.d.ts +30 -2
  740. package/node_modules/zod/v4/core/regexes.js +90 -29
  741. package/node_modules/zod/v4/core/registries.cjs +26 -7
  742. package/node_modules/zod/v4/core/registries.d.cts +2 -2
  743. package/node_modules/zod/v4/core/registries.d.ts +2 -2
  744. package/node_modules/zod/v4/core/registries.js +9 -9
  745. package/node_modules/zod/v4/core/schemas.cjs +1373 -422
  746. package/node_modules/zod/v4/core/schemas.d.cts +276 -42
  747. package/node_modules/zod/v4/core/schemas.d.ts +276 -42
  748. package/node_modules/zod/v4/core/schemas.js +1341 -422
  749. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  750. package/node_modules/zod/v4/core/standard-schema.d.cts +90 -19
  751. package/node_modules/zod/v4/core/standard-schema.d.ts +90 -19
  752. package/node_modules/zod/v4/core/to-json-schema.cjs +628 -801
  753. package/node_modules/zod/v4/core/to-json-schema.d.cts +103 -37
  754. package/node_modules/zod/v4/core/to-json-schema.d.ts +103 -37
  755. package/node_modules/zod/v4/core/to-json-schema.js +602 -800
  756. package/node_modules/zod/v4/core/util.cjs +580 -155
  757. package/node_modules/zod/v4/core/util.d.cts +98 -1
  758. package/node_modules/zod/v4/core/util.d.ts +98 -1
  759. package/node_modules/zod/v4/core/util.js +536 -156
  760. package/node_modules/zod/v4/core/versions.cjs +21 -2
  761. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  762. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  763. package/node_modules/zod/v4/core/versions.js +2 -2
  764. package/node_modules/zod/v4/core/visit.cjs +214 -0
  765. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  766. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  767. package/node_modules/zod/v4/core/visit.js +169 -0
  768. package/node_modules/zod/v4/index.cjs +34 -5
  769. package/node_modules/zod/v4/index.d.cts +2 -2
  770. package/node_modules/zod/v4/index.d.ts +2 -2
  771. package/node_modules/zod/v4/index.js +3 -2
  772. package/node_modules/zod/v4/locales/ar.cjs +20 -24
  773. package/node_modules/zod/v4/locales/ar.d.cts +2 -1
  774. package/node_modules/zod/v4/locales/ar.js +19 -24
  775. package/node_modules/zod/v4/locales/az.cjs +20 -24
  776. package/node_modules/zod/v4/locales/az.d.cts +2 -1
  777. package/node_modules/zod/v4/locales/az.js +19 -24
  778. package/node_modules/zod/v4/locales/be.cjs +29 -24
  779. package/node_modules/zod/v4/locales/be.d.cts +2 -1
  780. package/node_modules/zod/v4/locales/be.js +28 -24
  781. package/node_modules/zod/v4/locales/bg.cjs +152 -0
  782. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  783. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  784. package/node_modules/zod/v4/locales/bg.js +125 -0
  785. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  786. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  787. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  788. package/node_modules/zod/v4/locales/bn.js +113 -0
  789. package/node_modules/zod/v4/locales/ca.cjs +20 -25
  790. package/node_modules/zod/v4/locales/ca.d.cts +2 -1
  791. package/node_modules/zod/v4/locales/ca.js +19 -25
  792. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  793. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  794. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  795. package/node_modules/zod/v4/locales/ckb.js +133 -0
  796. package/node_modules/zod/v4/locales/cs.cjs +24 -42
  797. package/node_modules/zod/v4/locales/cs.d.cts +2 -1
  798. package/node_modules/zod/v4/locales/cs.js +23 -42
  799. package/node_modules/zod/v4/locales/da.cjs +147 -0
  800. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  801. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  802. package/node_modules/zod/v4/locales/da.js +120 -0
  803. package/node_modules/zod/v4/locales/de.cjs +22 -24
  804. package/node_modules/zod/v4/locales/de.d.cts +2 -1
  805. package/node_modules/zod/v4/locales/de.js +21 -24
  806. package/node_modules/zod/v4/locales/el.cjs +139 -0
  807. package/node_modules/zod/v4/locales/el.d.cts +5 -0
  808. package/node_modules/zod/v4/locales/el.d.ts +4 -0
  809. package/node_modules/zod/v4/locales/el.js +112 -0
  810. package/node_modules/zod/v4/locales/en.cjs +35 -28
  811. package/node_modules/zod/v4/locales/en.d.cts +2 -2
  812. package/node_modules/zod/v4/locales/en.d.ts +0 -1
  813. package/node_modules/zod/v4/locales/en.js +34 -26
  814. package/node_modules/zod/v4/locales/eo.cjs +23 -26
  815. package/node_modules/zod/v4/locales/eo.d.cts +2 -2
  816. package/node_modules/zod/v4/locales/eo.d.ts +0 -1
  817. package/node_modules/zod/v4/locales/eo.js +22 -24
  818. package/node_modules/zod/v4/locales/es.cjs +51 -31
  819. package/node_modules/zod/v4/locales/es.d.cts +2 -1
  820. package/node_modules/zod/v4/locales/es.js +50 -31
  821. package/node_modules/zod/v4/locales/fa.cjs +22 -24
  822. package/node_modules/zod/v4/locales/fa.d.cts +2 -1
  823. package/node_modules/zod/v4/locales/fa.js +21 -24
  824. package/node_modules/zod/v4/locales/fi.cjs +20 -24
  825. package/node_modules/zod/v4/locales/fi.d.cts +2 -1
  826. package/node_modules/zod/v4/locales/fi.js +19 -24
  827. package/node_modules/zod/v4/locales/fr-CA.cjs +20 -24
  828. package/node_modules/zod/v4/locales/fr-CA.d.cts +2 -1
  829. package/node_modules/zod/v4/locales/fr-CA.js +19 -24
  830. package/node_modules/zod/v4/locales/fr.cjs +53 -39
  831. package/node_modules/zod/v4/locales/fr.d.cts +2 -1
  832. package/node_modules/zod/v4/locales/fr.js +52 -39
  833. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  834. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  835. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  836. package/node_modules/zod/v4/locales/gu.js +113 -0
  837. package/node_modules/zod/v4/locales/he.cjs +183 -78
  838. package/node_modules/zod/v4/locales/he.d.cts +2 -1
  839. package/node_modules/zod/v4/locales/he.js +182 -78
  840. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  841. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  842. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  843. package/node_modules/zod/v4/locales/hi.js +111 -0
  844. package/node_modules/zod/v4/locales/hr.cjs +153 -0
  845. package/node_modules/zod/v4/locales/hr.d.cts +5 -0
  846. package/node_modules/zod/v4/locales/hr.d.ts +4 -0
  847. package/node_modules/zod/v4/locales/hr.js +126 -0
  848. package/node_modules/zod/v4/locales/hu.cjs +22 -25
  849. package/node_modules/zod/v4/locales/hu.d.cts +2 -1
  850. package/node_modules/zod/v4/locales/hu.js +21 -25
  851. package/node_modules/zod/v4/locales/hy.cjs +185 -0
  852. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  853. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  854. package/node_modules/zod/v4/locales/hy.js +158 -0
  855. package/node_modules/zod/v4/locales/id.cjs +20 -24
  856. package/node_modules/zod/v4/locales/id.d.cts +2 -1
  857. package/node_modules/zod/v4/locales/id.js +19 -24
  858. package/node_modules/zod/v4/locales/index.cjs +69 -1
  859. package/node_modules/zod/v4/locales/index.d.cts +24 -0
  860. package/node_modules/zod/v4/locales/index.d.ts +24 -0
  861. package/node_modules/zod/v4/locales/index.js +24 -0
  862. package/node_modules/zod/v4/locales/is.cjs +141 -0
  863. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  864. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  865. package/node_modules/zod/v4/locales/is.js +114 -0
  866. package/node_modules/zod/v4/locales/it.cjs +22 -25
  867. package/node_modules/zod/v4/locales/it.d.cts +2 -1
  868. package/node_modules/zod/v4/locales/it.js +21 -25
  869. package/node_modules/zod/v4/locales/ja.cjs +22 -24
  870. package/node_modules/zod/v4/locales/ja.d.cts +2 -1
  871. package/node_modules/zod/v4/locales/ja.js +21 -24
  872. package/node_modules/zod/v4/locales/ka.cjs +144 -0
  873. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  874. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  875. package/node_modules/zod/v4/locales/ka.js +117 -0
  876. package/node_modules/zod/v4/locales/kh.cjs +6 -137
  877. package/node_modules/zod/v4/locales/kh.d.cts +2 -1
  878. package/node_modules/zod/v4/locales/kh.d.ts +1 -0
  879. package/node_modules/zod/v4/locales/kh.js +3 -115
  880. package/node_modules/zod/v4/locales/km.cjs +142 -0
  881. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  882. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  883. package/node_modules/zod/v4/locales/km.js +115 -0
  884. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  885. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  886. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  887. package/node_modules/zod/v4/locales/kn.js +116 -0
  888. package/node_modules/zod/v4/locales/ko.cjs +20 -24
  889. package/node_modules/zod/v4/locales/ko.d.cts +2 -1
  890. package/node_modules/zod/v4/locales/ko.js +19 -24
  891. package/node_modules/zod/v4/locales/lt.cjs +234 -0
  892. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  893. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  894. package/node_modules/zod/v4/locales/lt.js +207 -0
  895. package/node_modules/zod/v4/locales/mk.cjs +22 -25
  896. package/node_modules/zod/v4/locales/mk.d.cts +2 -1
  897. package/node_modules/zod/v4/locales/mk.js +21 -25
  898. package/node_modules/zod/v4/locales/ms.cjs +21 -24
  899. package/node_modules/zod/v4/locales/ms.d.cts +2 -1
  900. package/node_modules/zod/v4/locales/ms.js +20 -24
  901. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  902. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  903. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  904. package/node_modules/zod/v4/locales/ne.js +111 -0
  905. package/node_modules/zod/v4/locales/nl.cjs +31 -32
  906. package/node_modules/zod/v4/locales/nl.d.cts +2 -1
  907. package/node_modules/zod/v4/locales/nl.js +30 -32
  908. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  909. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  910. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  911. package/node_modules/zod/v4/locales/nn.js +113 -0
  912. package/node_modules/zod/v4/locales/no.cjs +24 -26
  913. package/node_modules/zod/v4/locales/no.d.cts +2 -1
  914. package/node_modules/zod/v4/locales/no.js +23 -26
  915. package/node_modules/zod/v4/locales/ota.cjs +23 -25
  916. package/node_modules/zod/v4/locales/ota.d.cts +2 -1
  917. package/node_modules/zod/v4/locales/ota.js +22 -25
  918. package/node_modules/zod/v4/locales/package.json +7 -0
  919. package/node_modules/zod/v4/locales/pl.cjs +22 -24
  920. package/node_modules/zod/v4/locales/pl.d.cts +2 -1
  921. package/node_modules/zod/v4/locales/pl.js +21 -24
  922. package/node_modules/zod/v4/locales/ps.cjs +22 -24
  923. package/node_modules/zod/v4/locales/ps.d.cts +2 -1
  924. package/node_modules/zod/v4/locales/ps.js +21 -24
  925. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  926. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  927. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  928. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  929. package/node_modules/zod/v4/locales/pt.cjs +95 -68
  930. package/node_modules/zod/v4/locales/pt.d.cts +2 -1
  931. package/node_modules/zod/v4/locales/pt.js +94 -68
  932. package/node_modules/zod/v4/locales/ro.cjs +149 -0
  933. package/node_modules/zod/v4/locales/ro.d.cts +5 -0
  934. package/node_modules/zod/v4/locales/ro.d.ts +4 -0
  935. package/node_modules/zod/v4/locales/ro.js +122 -0
  936. package/node_modules/zod/v4/locales/ru.cjs +29 -24
  937. package/node_modules/zod/v4/locales/ru.d.cts +2 -1
  938. package/node_modules/zod/v4/locales/ru.js +28 -24
  939. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  940. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  941. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  942. package/node_modules/zod/v4/locales/sk.js +116 -0
  943. package/node_modules/zod/v4/locales/sl.cjs +22 -24
  944. package/node_modules/zod/v4/locales/sl.d.cts +2 -1
  945. package/node_modules/zod/v4/locales/sl.js +21 -24
  946. package/node_modules/zod/v4/locales/sv.cjs +24 -26
  947. package/node_modules/zod/v4/locales/sv.d.cts +2 -1
  948. package/node_modules/zod/v4/locales/sv.js +23 -26
  949. package/node_modules/zod/v4/locales/ta.cjs +23 -24
  950. package/node_modules/zod/v4/locales/ta.d.cts +2 -1
  951. package/node_modules/zod/v4/locales/ta.js +22 -24
  952. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  953. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  954. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  955. package/node_modules/zod/v4/locales/tg.js +117 -0
  956. package/node_modules/zod/v4/locales/th.cjs +23 -24
  957. package/node_modules/zod/v4/locales/th.d.cts +2 -1
  958. package/node_modules/zod/v4/locales/th.js +22 -24
  959. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  960. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  961. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  962. package/node_modules/zod/v4/locales/tk.js +107 -0
  963. package/node_modules/zod/v4/locales/tr.cjs +20 -26
  964. package/node_modules/zod/v4/locales/tr.d.cts +2 -2
  965. package/node_modules/zod/v4/locales/tr.d.ts +0 -1
  966. package/node_modules/zod/v4/locales/tr.js +19 -24
  967. package/node_modules/zod/v4/locales/ua.cjs +6 -137
  968. package/node_modules/zod/v4/locales/ua.d.cts +2 -1
  969. package/node_modules/zod/v4/locales/ua.d.ts +1 -0
  970. package/node_modules/zod/v4/locales/ua.js +3 -115
  971. package/node_modules/zod/v4/locales/uk.cjs +140 -0
  972. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  973. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  974. package/node_modules/zod/v4/locales/uk.js +113 -0
  975. package/node_modules/zod/v4/locales/ur.cjs +23 -24
  976. package/node_modules/zod/v4/locales/ur.d.cts +2 -1
  977. package/node_modules/zod/v4/locales/ur.js +22 -24
  978. package/node_modules/zod/v4/locales/uz.cjs +140 -0
  979. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  980. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  981. package/node_modules/zod/v4/locales/uz.js +113 -0
  982. package/node_modules/zod/v4/locales/vi.cjs +22 -24
  983. package/node_modules/zod/v4/locales/vi.d.cts +2 -1
  984. package/node_modules/zod/v4/locales/vi.js +21 -24
  985. package/node_modules/zod/v4/locales/yo.cjs +139 -0
  986. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  987. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  988. package/node_modules/zod/v4/locales/yo.js +112 -0
  989. package/node_modules/zod/v4/locales/zh-CN.cjs +23 -24
  990. package/node_modules/zod/v4/locales/zh-CN.d.cts +2 -1
  991. package/node_modules/zod/v4/locales/zh-CN.js +22 -24
  992. package/node_modules/zod/v4/locales/zh-TW.cjs +20 -24
  993. package/node_modules/zod/v4/locales/zh-TW.d.cts +2 -1
  994. package/node_modules/zod/v4/locales/zh-TW.js +19 -24
  995. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  996. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  997. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  998. package/node_modules/zod/v4/mini/checks.js +1 -1
  999. package/node_modules/zod/v4/mini/coerce.cjs +24 -0
  1000. package/node_modules/zod/v4/mini/coerce.js +5 -0
  1001. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  1002. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  1003. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  1004. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  1005. package/node_modules/zod/v4/mini/external.cjs +36 -3
  1006. package/node_modules/zod/v4/mini/external.d.cts +7 -2
  1007. package/node_modules/zod/v4/mini/external.d.ts +7 -2
  1008. package/node_modules/zod/v4/mini/external.js +4 -1
  1009. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  1010. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  1011. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  1012. package/node_modules/zod/v4/mini/in-out.js +36 -0
  1013. package/node_modules/zod/v4/mini/index.cjs +19 -0
  1014. package/node_modules/zod/v4/mini/iso.cjs +27 -4
  1015. package/node_modules/zod/v4/mini/iso.js +8 -4
  1016. package/node_modules/zod/v4/mini/package.json +7 -0
  1017. package/node_modules/zod/v4/mini/parse.cjs +30 -1
  1018. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  1019. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  1020. package/node_modules/zod/v4/mini/parse.js +1 -1
  1021. package/node_modules/zod/v4/mini/schemas.cjs +390 -82
  1022. package/node_modules/zod/v4/mini/schemas.d.cts +156 -32
  1023. package/node_modules/zod/v4/mini/schemas.d.ts +156 -32
  1024. package/node_modules/zod/v4/mini/schemas.js +329 -59
  1025. package/node_modules/zod/v4/package.json +7 -0
  1026. package/node_modules/zod/v4-mini/index.cjs +35 -1
  1027. package/node_modules/zod/v4-mini/index.d.cts +3 -1
  1028. package/node_modules/zod/v4-mini/index.d.ts +3 -1
  1029. package/node_modules/zod/v4-mini/index.js +3 -1
  1030. package/node_modules/zod/v4-mini/package.json +7 -0
  1031. package/package.json +4 -4
  1032. package/dist/ui/assets/index-DNNXeRpZ.js +0 -123
  1033. package/dist/ui/assets/index-Osk4E49r.css +0 -1
  1034. package/node_modules/zod/src/v4/core/config.ts +0 -15
  1035. package/node_modules/zod/src/v4/core/function.ts +0 -176
  1036. package/node_modules/zod/v4/core/function.cjs +0 -102
  1037. package/node_modules/zod/v4/core/function.d.cts +0 -52
  1038. package/node_modules/zod/v4/core/function.d.ts +0 -52
  1039. package/node_modules/zod/v4/core/function.js +0 -75
@@ -1,5 +1,5 @@
1
1
  import { randomBytes } from "node:crypto";
2
- import { expect, test } from "vitest";
2
+ import { expect, expectTypeOf, test } from "vitest";
3
3
 
4
4
  import * as z from "zod/v4";
5
5
 
@@ -12,6 +12,63 @@ const includesFromIndex2 = z.string().includes("includes", { position: 2 });
12
12
  const startsWith = z.string().startsWith("startsWith");
13
13
  const endsWith = z.string().endsWith("endsWith");
14
14
 
15
+ test("string factory checks", async () => {
16
+ const schema = z.string({ checks: [z.minLength(1), z.maxLength(3)] as const });
17
+ const chained = z.string().min(1).max(3);
18
+ expectTypeOf<z.output<typeof schema>>().toEqualTypeOf<string>();
19
+ for (const value of ["", "ab", "abcd", 1, undefined]) {
20
+ expect(z.validate(schema, value)).toBe(z.validate(chained, value));
21
+ expect(schema.safeParse(value)).toEqual(chained.safeParse(value));
22
+ }
23
+ expect(z.toJSONSchema(schema)).toEqual(z.toJSONSchema(chained));
24
+ expect(schema.minLength).toBe(1);
25
+ expect(schema.maxLength).toBe(3);
26
+ expect(schema._zod.parent).toBeUndefined();
27
+ expect([...schema._zod.traits]).toEqual([...chained._zod.traits]);
28
+ const extended = schema.max(2);
29
+ expect(extended._zod.parent).toBe(schema);
30
+ expect(z.validate(schema, "abc")).toBe(true);
31
+ expect(z.validate(extended, "abc")).toBe(false);
32
+ const coerce = z.coerce.string({ checks: [z.minLength(2)] });
33
+ expect(coerce.parse(12)).toBe("12");
34
+ expect(z.validate(coerce, 1)).toBe(false);
35
+ const asyncSchema = z.string({
36
+ checks: [
37
+ z.check<string>(async (ctx) => {
38
+ if (ctx.value !== "ok") ctx.issues.push({ code: "custom", input: ctx.value });
39
+ }),
40
+ ],
41
+ });
42
+ expect(await asyncSchema.safeParseAsync("ok")).toEqual({ success: true, data: "ok" });
43
+ expect((await asyncSchema.safeParseAsync("bad")).success).toBe(false);
44
+ // @ts-expect-error numeric checks cannot validate strings
45
+ z.string({ checks: [z.gte(1)] });
46
+ });
47
+
48
+ test("factory checks snapshot caller arrays", () => {
49
+ for (const factory of [z.string, z.coerce.string]) {
50
+ for (const initial of [[], [z.minLength(1)]]) {
51
+ const schema = factory({ checks: initial });
52
+ let reads = 0;
53
+ const getterSchema = factory({
54
+ get checks() {
55
+ if (++reads > 1) throw new Error("checks read twice");
56
+ return initial;
57
+ },
58
+ });
59
+ expect(reads).toBe(1);
60
+ expect(z.validate(getterSchema, "long")).toBe(true);
61
+ const before = z.toJSONSchema(schema);
62
+ initial.push(z.minLength(10));
63
+ expect(schema._zod.def.checks).not.toBe(initial);
64
+ expect(z.validate(schema, "long")).toBe(true);
65
+ expect(z.validate(z.compile(schema), "long")).toBe(true);
66
+ expect(z.toJSONSchema(schema)).toEqual(before);
67
+ expect(z.validate(schema.check(z.minLength(2)), "long")).toBe(true);
68
+ }
69
+ }
70
+ });
71
+
15
72
  test("length checks", () => {
16
73
  minFive.parse("12345");
17
74
  minFive.parse("123456");
@@ -35,6 +92,27 @@ test("includes", () => {
35
92
  expect(() => includesFromIndex2.parse("XincludesXX")).toThrow();
36
93
  });
37
94
 
95
+ test("includes with string error message", () => {
96
+ const schema = z.string().includes("test", "must contain test");
97
+ schema.parse("this is a test");
98
+
99
+ expect(schema.safeParse("this is invalid")).toMatchInlineSnapshot(`
100
+ {
101
+ "error": [ZodError: [
102
+ {
103
+ "origin": "string",
104
+ "code": "invalid_format",
105
+ "format": "includes",
106
+ "includes": "test",
107
+ "path": [],
108
+ "message": "must contain test"
109
+ }
110
+ ]],
111
+ "success": false,
112
+ }
113
+ `);
114
+ });
115
+
38
116
  test("startswith/endswith", () => {
39
117
  startsWith.parse("startsWithX");
40
118
  endsWith.parse("XendsWith");
@@ -196,6 +274,14 @@ test("base64 validations", () => {
196
274
  "?QmFzZTY0IGVuY29kaW5nIGlzIGZ1bg==", // Invalid character '?'
197
275
  ".MTIzND2Nzg5MC4=", // Invalid character '.'
198
276
  "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo", // Missing padding
277
+ // Whitespace is not part of canonical base64 (RFC 4648 §3.3) — atob() strips whitespace internally before validating, so the length check alone would accept "123 " etc.
278
+ "123 ", // bypasses length-mod-4 via trailing whitespace
279
+ "SGVsbG8gV29ybGQ= ", // trailing space
280
+ " SGVsbG8gV29ybGQ=", // leading space
281
+ "SGVsbG8gV29ybGQ=\n", // trailing newline
282
+ "SGVs bG8gV29ybGQ=", // internal space
283
+ "SGVs\nbG8gV29ybGQ=", // internal newline
284
+ "SGVs\tbG8gV29ybGQ=", // internal tab
199
285
  ];
200
286
 
201
287
  for (const str of invalidBase64Strings) {
@@ -235,6 +321,7 @@ test("base64url validations", () => {
235
321
 
236
322
  const invalidBase64URLStrings = [
237
323
  "w7/Dv8O+w74K", // Has + and / characters (is base64)
324
+ "A", // Invalid length (1 mod 4 carries no whole byte)
238
325
  "12345", // Invalid length (not a multiple of 4 characters when adding allowed number of padding characters)
239
326
  "12345===", // Not padded correctly
240
327
  "!UGF0aWVuY2UgaXMgdGhlIGtleSB0byBzdWNjZXNz", // Invalid character '!'
@@ -262,6 +349,18 @@ test("big base64 and base64url", () => {
262
349
  z.base64().parse(bigbase64);
263
350
  const bigbase64url = randomBytes(1024 * 1024 * 10).toString("base64url");
264
351
  z.base64url().parse(bigbase64url);
352
+
353
+ // template literals compose def.pattern and test it on every parse; the quantified block forms overflowed the regex stack here
354
+ expect(z.templateLiteral(["id-", z.base64()]).safeParse(`id-${bigbase64}`).success).toBe(true);
355
+ expect(z.templateLiteral(["id-", z.base64url()]).safeParse(`id-${bigbase64url}`).success).toBe(true);
356
+ });
357
+
358
+ test("template literal composes base64 without alternation leaks", () => {
359
+ // the ^$| alternation in regexes.base64 used to leak: "AAAA" matched with the prefix dropped and "id-AAAA" was rejected
360
+ const tl = z.templateLiteral(["id-", z.base64()]);
361
+ expect(tl.safeParse("id-AAAA").success).toBe(true);
362
+ expect(tl.safeParse("id-").success).toBe(true);
363
+ expect(tl.safeParse("AAAA").success).toBe(false);
265
364
  });
266
365
 
267
366
  function makeJwt(header: object, payload: object) {
@@ -318,11 +417,126 @@ test("url validations", () => {
318
417
  expect(() => url.parse("https://")).toThrow();
319
418
  });
320
419
 
420
+ test("url preserves original input", () => {
421
+ const url = z.string().url();
422
+
423
+ // Test the specific case from the user report
424
+ const input = "https://example.com?key=NUXOmHqWNVTapJkJJHw8BfD155AuqhH_qju_5fNmQ4ZHV7u8";
425
+ const output = url.parse(input);
426
+ expect(output).toBe(input); // Should preserve the original input exactly
427
+
428
+ // Test other cases where URL constructor would normalize
429
+ expect(url.parse("https://example.com?foo=bar")).toBe("https://example.com?foo=bar");
430
+ expect(url.parse("http://example.com?test=123")).toBe("http://example.com?test=123");
431
+ expect(url.parse("https://sub.example.com?param=value&other=data")).toBe(
432
+ "https://sub.example.com?param=value&other=data"
433
+ );
434
+
435
+ // Test cases with trailing slashes are preserved
436
+ expect(url.parse("https://example.com/")).toBe("https://example.com/");
437
+ expect(url.parse("https://example.com/path/")).toBe("https://example.com/path/");
438
+
439
+ // Test cases with paths and query parameters
440
+ expect(url.parse("https://example.com/path?query=param")).toBe("https://example.com/path?query=param");
441
+ });
442
+
443
+ test("url trims whitespace", () => {
444
+ const url = z.string().url();
445
+
446
+ // Test trimming whitespace from URLs
447
+ expect(url.parse(" https://example.com ")).toBe("https://example.com");
448
+ expect(url.parse(" https://example.com/path?query=param ")).toBe("https://example.com/path?query=param");
449
+ expect(url.parse("\t\nhttps://example.com\t\n")).toBe("https://example.com");
450
+ expect(url.parse(" https://example.com?key=value ")).toBe("https://example.com?key=value");
451
+
452
+ // Test that URLs without extra whitespace are unchanged
453
+ expect(url.parse("https://example.com")).toBe("https://example.com");
454
+ expect(url.parse("https://example.com/path")).toBe("https://example.com/path");
455
+ });
456
+
457
+ test("url returns the string the parser validated", () => {
458
+ // The URL parser deletes ASCII tab, LF and CR instead of failing, so `new URL()` reports on a string that is not the one it was given. The host is the consequential case: this validated example.com and used to hand back a URL naming a different host.
459
+ expect(z.url().parse("https://exa\nmple.com")).toBe("https://example.com");
460
+ expect(z.url().parse("https://exa\tmple.com")).toBe("https://example.com");
461
+ expect(z.url().parse("https://exa\rmple.com")).toBe("https://example.com");
462
+ expect(z.httpUrl().parse("https://exa\nmple.com")).toBe("https://example.com");
463
+ expect(z.url({ hostname: /^a\.com$/ }).parse("https://a\n.com")).toBe("https://a.com");
464
+ expect(z.url().parse("https://example.com/a\nb?c=\td#e")).toBe("https://example.com/ab?c=d#e");
465
+
466
+ // Nothing that parsed before stops parsing, and normalize still wins where it applies.
467
+ expect(z.url().parse("https://example.com/path")).toBe("https://example.com/path");
468
+ expect(z.url({ normalize: true }).parse("https://exa\nmple.com")).toBe("https://example.com/");
469
+ });
470
+
471
+ test("ipv6 and cidrv6 reject anything outside the address alphabet", () => {
472
+ // `new URL("http://[...]")` parses an authority rather than an address, so a delimiter re-splits it and the parser validates something else entirely.
473
+ expect(z.ipv6().safeParse("::@1\\").success).toBe(false); // used to validate against the host 0.0.0.1
474
+ expect(z.ipv6().safeParse("::]/1").success).toBe(false);
475
+ expect(z.ipv6().safeParse("@[::1").success).toBe(false);
476
+ expect(z.cidrv6().safeParse("::@1\\/64").success).toBe(false);
477
+
478
+ for (const c of ["\t", "\n", "\r"]) {
479
+ expect(z.ipv6().safeParse(`2001:db8::${c}1`).success).toBe(false);
480
+ expect(z.ipv6().safeParse(`::1${c}`).success).toBe(false);
481
+ expect(z.cidrv6().safeParse(`::1${c}/64`).success).toBe(false);
482
+ }
483
+
484
+ // A rejection has to surface as an issue, not just success: false.
485
+ const result = z.ipv6().safeParse("::1\n");
486
+ expect(result.success).toBe(false);
487
+ expect(result.error!.issues[0]).toMatchObject({ code: "invalid_format", format: "ipv6" });
488
+
489
+ expect(z.ipv6().parse("2001:db8::1")).toBe("2001:db8::1");
490
+ expect(z.ipv6().parse("::ffff:192.0.2.1")).toBe("::ffff:192.0.2.1");
491
+ expect(z.ipv6().parse("2001:DB8::1")).toBe("2001:DB8::1");
492
+ expect(z.cidrv6().parse("::ffff:192.0.2.1/96")).toBe("::ffff:192.0.2.1/96");
493
+ });
494
+
495
+ test("url normalize flag", () => {
496
+ const normalizeUrl = z.url({ normalize: true });
497
+ const preserveUrl = z.url(); // normalize: false/undefined by default
498
+
499
+ // Test that normalize flag causes URL normalization
500
+ expect(normalizeUrl.parse("https://example.com?key=value")).toBe("https://example.com/?key=value");
501
+ expect(normalizeUrl.parse("http://example.com?test=123")).toBe("http://example.com/?test=123");
502
+
503
+ // Test with already normalized URLs
504
+ expect(normalizeUrl.parse("https://example.com/")).toBe("https://example.com/");
505
+ expect(normalizeUrl.parse("https://example.com/path?query=param")).toBe("https://example.com/path?query=param");
506
+
507
+ // Test complex URLs with normalization
508
+ expect(normalizeUrl.parse("https://example.com/../?key=value")).toBe("https://example.com/?key=value");
509
+ expect(normalizeUrl.parse("https://example.com/./path?key=value")).toBe("https://example.com/path?key=value");
510
+
511
+ // Compare with non-normalize behavior
512
+ expect(preserveUrl.parse("https://example.com?key=value")).toBe("https://example.com?key=value");
513
+ expect(preserveUrl.parse("http://example.com?test=123")).toBe("http://example.com?test=123");
514
+
515
+ // Test trimming with normalize
516
+ expect(normalizeUrl.parse(" https://example.com?key=value ")).toBe("https://example.com/?key=value");
517
+ expect(preserveUrl.parse(" https://example.com?key=value ")).toBe("https://example.com?key=value");
518
+ });
519
+
520
+ test("url normalize with hostname and protocol constraints", () => {
521
+ const constrainedNormalizeUrl = z.url({
522
+ normalize: true,
523
+ protocol: /^https$/,
524
+ hostname: /^example\.com$/,
525
+ });
526
+
527
+ // Test that normalization works with constraints
528
+ expect(constrainedNormalizeUrl.parse("https://example.com?key=value")).toBe("https://example.com/?key=value");
529
+
530
+ // Test that constraints are still enforced
531
+ expect(() => constrainedNormalizeUrl.parse("http://example.com?key=value")).toThrow();
532
+ expect(() => constrainedNormalizeUrl.parse("https://other.com?key=value")).toThrow();
533
+ });
534
+
321
535
  test("httpurl", () => {
322
536
  const httpUrl = z.url({
323
537
  protocol: /^https?$/,
324
538
  hostname: z.regexes.domain,
325
- // /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/
539
+ // /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,63}$/
326
540
  });
327
541
 
328
542
  httpUrl.parse("https://example.com");
@@ -356,6 +570,22 @@ test("httpurl", () => {
356
570
  ).toThrow();
357
571
  expect(() => httpUrl.parse("http://asdf.c")).toThrow();
358
572
  expect(() => httpUrl.parse("mailto:asdf@lckj.com")).toThrow();
573
+ // total host length over the RFC 1035 limit of 253 chars (built from valid-length labels)
574
+ const longHost = `${`${"a".repeat(50)}.`.repeat(5)}com`; // 5 * 51 + 3 = 258 chars
575
+ expect(longHost.length).toBeGreaterThan(253);
576
+ expect(() => httpUrl.parse(`http://${longHost}`)).toThrow();
577
+ // TLD over the 63-char label limit
578
+ expect(() => httpUrl.parse(`http://example.${"a".repeat(64)}`)).toThrow();
579
+ // a host at exactly the 253-char limit is still accepted, one char more is not
580
+ const maxHost = `${`${"a".repeat(61)}.`.repeat(4)}aaaaa`; // 4 * 62 + 5 = 253 chars
581
+ httpUrl.parse(`http://${maxHost}`);
582
+ expect(() => httpUrl.parse(`http://${maxHost}a`)).toThrow();
583
+ // missing // after protocol
584
+ expect(() => httpUrl.parse("http:example.com")).toThrow();
585
+ expect(() => httpUrl.parse("https:example.com")).toThrow();
586
+ // missing one /
587
+ expect(() => httpUrl.parse("https:/www.google.com")).toThrow();
588
+ expect(() => httpUrl.parse("http:/example.com")).toThrow();
359
589
  });
360
590
 
361
591
  test("url error overrides", () => {
@@ -379,6 +609,7 @@ test("url error overrides", () => {
379
609
  test("emoji validations", () => {
380
610
  const emoji = z.string().emoji();
381
611
 
612
+ emoji.parse("🦰🦱🦲🦳"); // both Extended_Pictographic and Emoji_Component
382
613
  emoji.parse("👋👋👋👋");
383
614
  emoji.parse("🍺👩‍🚀🫡");
384
615
  emoji.parse("💚💙💜💛❤️");
@@ -391,6 +622,18 @@ test("emoji validations", () => {
391
622
  expect(() => emoji.parse("😀 is an emoji")).toThrow();
392
623
  expect(() => emoji.parse("😀stuff")).toThrow();
393
624
  expect(() => emoji.parse("stuff😀")).toThrow();
625
+
626
+ emoji.parse("1\u{FE0F}\u{20E3}"); // keycap sequences stay valid
627
+ emoji.parse("#\u{FE0F}\u{20E3}");
628
+
629
+ // `\p{Emoji_Component}` alone covers ASCII digits, "#", "*", ZWJ, variation selectors and skin tone modifiers; none is an emoji without a base, so a component-only string is not one either
630
+ expect(() => emoji.parse("123")).toThrow();
631
+ expect(() => emoji.parse("#")).toThrow();
632
+ expect(() => emoji.parse("*")).toThrow();
633
+ expect(() => emoji.parse("\u{200D}")).toThrow();
634
+ expect(() => emoji.parse("\u{FE0F}")).toThrow();
635
+ expect(() => emoji.parse("\u{1F3FD}")).toThrow();
636
+ expect(() => emoji.parse("1\u{FE0F}")).toThrow();
394
637
  });
395
638
 
396
639
  test("nanoid", () => {
@@ -450,6 +693,7 @@ test("good uuid", () => {
450
693
  "9491d710-3185-5e06-8ea0-6a2f275345e0",
451
694
  "9491d710-3185-5e06-9ea0-6a2f275345e0",
452
695
  "00000000-0000-0000-0000-000000000000",
696
+ "ffffffff-ffff-ffff-ffff-ffffffffffff",
453
697
  ];
454
698
 
455
699
  for (const goodUuid of goodUuids) {
@@ -464,11 +708,10 @@ test(`bad uuid`, () => {
464
708
  "9491d710-3185-0e06-bea0-6a2f275345e0",
465
709
  "9491d710-3185-5e06-0ea0-6a2f275345e0",
466
710
  "d89e7b01-7598-ed11-9d7a-0022489382fd", // new sequential id
467
- "b3ce60f8-e8b9-40f5-1150-172ede56ff74", // Variant 0 - RFC 4122: Reserved, NCS backward compatibility
468
- "92e76bf9-28b3-4730-cd7f-cb6bc51f8c09", // Variant 2 - RFC 4122: Reserved, Microsoft Corporation backward compatibility
711
+ "b3ce60f8-e8b9-40f5-1150-172ede56ff74", // Variant 0 - RFC 9562/4122: Reserved, NCS backward compatibility
712
+ "92e76bf9-28b3-4730-cd7f-cb6bc51f8c09", // Variant 2 - RFC 9562/4122: Reserved, Microsoft Corporation backward compatibility
469
713
  "invalid uuid",
470
714
  "9491d710-3185-4e06-bea0-6a2f275345e0X",
471
- "ffffffff-ffff-ffff-ffff-ffffffffffff",
472
715
  ]) {
473
716
  const result = uuid.safeParse(badUuid);
474
717
  expect(result).toMatchObject({ success: false });
@@ -481,8 +724,8 @@ test("good guid", () => {
481
724
  for (const goodGuid of [
482
725
  "9491d710-3185-4e06-bea0-6a2f275345e0",
483
726
  "d89e7b01-7598-ed11-9d7a-0022489382fd", // new sequential id
484
- "b3ce60f8-e8b9-40f5-1150-172ede56ff74", // Variant 0 - RFC 4122: Reserved, NCS backward compatibility
485
- "92e76bf9-28b3-4730-cd7f-cb6bc51f8c09", // Variant 2 - RFC 4122: Reserved, Microsoft Corporation backward compatibility
727
+ "b3ce60f8-e8b9-40f5-1150-172ede56ff74", // Variant 0 - RFC 9562/4122: Reserved, NCS backward compatibility
728
+ "92e76bf9-28b3-4730-cd7f-cb6bc51f8c09", // Variant 2 - RFC 9562/4122: Reserved, Microsoft Corporation backward compatibility
486
729
  "00000000-0000-0000-0000-000000000000",
487
730
  "ffffffff-ffff-ffff-ffff-ffffffffffff",
488
731
  ]) {
@@ -500,6 +743,26 @@ test("bad guid", () => {
500
743
  }
501
744
  });
502
745
 
746
+ test("nanoid custom length", () => {
747
+ const nanoid64 = z.nanoid({ length: 64 });
748
+ nanoid64.parse("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_");
749
+ expect(nanoid64.safeParse("lfNZluvAxMkf7Q8C5H-QS")).toMatchObject({ success: false });
750
+
751
+ // the deprecated method and the default length both still work
752
+ expect(z.string().nanoid({ length: 10 }).safeParse("IRFa-VaY2b")).toMatchObject({ success: true });
753
+ expect(z.nanoid().safeParse("lfNZluvAxMkf7Q8C5H-QS")).toMatchObject({ success: true });
754
+
755
+ expect(z.nanoid({ length: 64, error: "custom error" }).safeParse("abc").error!.issues[0].message).toEqual(
756
+ "custom error"
757
+ );
758
+ });
759
+
760
+ test("nanoid rejects a length that is not a positive integer", () => {
761
+ expect(() => z.nanoid({ length: 0 })).toThrow("Invalid nanoid length: 0");
762
+ expect(() => z.nanoid({ length: -1 })).toThrow("Invalid nanoid length: -1");
763
+ expect(() => z.nanoid({ length: 1.5 })).toThrow("Invalid nanoid length: 1.5");
764
+ });
765
+
503
766
  test("cuid", () => {
504
767
  const cuid = z.string().cuid();
505
768
  cuid.parse("ckopqwooh000001la8mbi2im9");
@@ -513,12 +776,26 @@ test("cuid", () => {
513
776
  "origin": "string",
514
777
  "code": "invalid_format",
515
778
  "format": "cuid",
516
- "pattern": "/^[cC][^\\\\s-]{8,}$/",
779
+ "pattern": "/^[cC][0-9a-z]{6,}$/",
517
780
  "path": [],
518
781
  "message": "Invalid cuid"
519
782
  }
520
783
  ]]
521
784
  `);
785
+
786
+ // Strings containing non-base36 characters that the old denylist regex
787
+ // (/^[cC][^\s-]{8,}$/) accepted. The new regex restricts the body to
788
+ // [0-9a-z], matching the actual CUID v1 base36 format. See #3621.
789
+ const previouslyAcceptedNonCuids = [
790
+ "cly63t164000245zw008pggon';select1;", // SQLi-shaped (no whitespace, no hyphen)
791
+ "c<script>alert(1)</script>aaaaaa", // XSS-shaped
792
+ "c{};alert(1)//", // bracket / curly chars
793
+ "C0123_45678", // underscore is not base36
794
+ "cAAAAAAAAA", // uppercase letters in body are not base36 (CUIDs are lowercase)
795
+ ];
796
+ for (const s of previouslyAcceptedNonCuids) {
797
+ expect(cuid.safeParse(s).success).toBe(false);
798
+ }
522
799
  });
523
800
 
524
801
  test("cuid2", () => {
@@ -555,6 +832,12 @@ test("ulid", () => {
555
832
  const caseInsensitive = ulid.safeParse("01arZ3nDeKTsV4RRffQ69G5FAV");
556
833
  expect(caseInsensitive.success).toEqual(true);
557
834
 
835
+ // first char is capped at 7: the spec's largest ULID is 7ZZZZZZZZZZZZZZZZZZZZZZZZZ, so 8-9 and every letter overflow 2^48-1
836
+ expect(ulid.safeParse("7ZZZZZZZZZZZZZZZZZZZZZZZZZ").success).toEqual(true);
837
+ for (const first of ["8", "9", "A", "Z", "z"]) {
838
+ expect(ulid.safeParse(`${first}AAAAAAAAAAAAAAAAAAAAAAAAA`).success).toEqual(false);
839
+ }
840
+
558
841
  expect(result.error!.issues[0].message).toEqual("Invalid ULID");
559
842
  expect(result.error).toMatchInlineSnapshot(`
560
843
  [ZodError: [
@@ -562,7 +845,7 @@ test("ulid", () => {
562
845
  "origin": "string",
563
846
  "code": "invalid_format",
564
847
  "format": "ulid",
565
- "pattern": "/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/",
848
+ "pattern": "/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/",
566
849
  "path": [],
567
850
  "message": "Invalid ULID"
568
851
  }
@@ -698,6 +981,8 @@ test("format", () => {
698
981
  expect(z.string().date().format).toEqual("date");
699
982
  expect(z.string().time().format).toEqual("time");
700
983
  expect(z.string().duration().format).toEqual("duration");
984
+
985
+ expect(z.mac().format).toEqual("mac");
701
986
  });
702
987
 
703
988
  test("min max getters", () => {
@@ -711,6 +996,66 @@ test("min max getters", () => {
711
996
  expect(z.string().maxLength).toEqual(null);
712
997
  });
713
998
 
999
+ test("boundary cases with zero length", () => {
1000
+ // Test length(0) - only empty string should pass
1001
+ const lengthZero = z.string().length(0);
1002
+ expect(lengthZero.parse("")).toEqual("");
1003
+ expect(() => lengthZero.parse("a")).toThrow();
1004
+
1005
+ // Test min(0) - all strings including empty should pass
1006
+ const minZero = z.string().min(0);
1007
+ expect(minZero.parse("")).toEqual("");
1008
+ expect(minZero.parse("a")).toEqual("a");
1009
+ expect(minZero.parse("hello")).toEqual("hello");
1010
+
1011
+ // Test max(0) - only empty string should pass
1012
+ const maxZero = z.string().max(0);
1013
+ expect(maxZero.parse("")).toEqual("");
1014
+ expect(() => maxZero.parse("a")).toThrow();
1015
+ expect(() => maxZero.parse("hello")).toThrow();
1016
+ });
1017
+
1018
+ test("length checks count Unicode code points, not UTF-16 code units", () => {
1019
+ // "\u{1F600}" is one code point but two UTF-16 code units
1020
+ const five = "\u{1F600}\u{1F600}\u{1F600}\u{1F600}\u{1F600}";
1021
+ expect(z.string().max(5).safeParse(five).success).toBe(true);
1022
+ expect(
1023
+ z
1024
+ .string()
1025
+ .max(5)
1026
+ .safeParse(five + "\u{1F600}").success
1027
+ ).toBe(false);
1028
+ expect(z.string().min(5).safeParse(five).success).toBe(true);
1029
+ expect(z.string().min(5).safeParse("\u{1F600}\u{1F600}\u{1F600}\u{1F600}").success).toBe(false);
1030
+ expect(z.string().length(5).safeParse(five).success).toBe(true);
1031
+ expect(z.string().length(1).safeParse("\u{1F600}").success).toBe(true);
1032
+ expect(z.string().nonempty().safeParse("\u{1F600}").success).toBe(true);
1033
+
1034
+ // code points, not graphemes: a combining mark and a ZWJ sequence each stay several
1035
+ expect(z.string().length(2).safeParse("e\u0301").success).toBe(true);
1036
+ expect(z.string().length(3).safeParse("\u{1F9D1}\u200D\u{1F37C}").success).toBe(true);
1037
+
1038
+ // an unpaired surrogate is its own code point
1039
+ expect(z.string().length(1).safeParse("\uD83D").success).toBe(true);
1040
+ expect(z.string().length(2).safeParse("\uDE00\uD83D").success).toBe(true);
1041
+
1042
+ // the reported bound is still the declared one
1043
+ expect(
1044
+ z
1045
+ .string()
1046
+ .max(5)
1047
+ .safeParse(five + "\u{1F600}").error!.issues[0]
1048
+ ).toMatchObject({
1049
+ code: "too_big",
1050
+ maximum: 5,
1051
+ origin: "string",
1052
+ });
1053
+
1054
+ // other lengthables keep counting elements
1055
+ expect(z.array(z.string()).max(2).safeParse(["a", "b", "c"]).success).toBe(false);
1056
+ expect(z.array(z.string()).length(2).safeParse(["\u{1F600}", "\u{1F600}"]).success).toBe(true);
1057
+ });
1058
+
714
1059
  test("trim", () => {
715
1060
  expect(z.string().trim().min(2).parse(" 12 ")).toEqual("12");
716
1061
 
@@ -724,6 +1069,24 @@ test("lowerCase", () => {
724
1069
  expect(z.string().toUpperCase().parse("asdf")).toEqual("ASDF");
725
1070
  });
726
1071
 
1072
+ test("slugify", () => {
1073
+ expect(z.string().slugify().parse("Hello World")).toEqual("hello-world");
1074
+ expect(z.string().slugify().parse(" Hello World ")).toEqual("hello-world");
1075
+ expect(z.string().slugify().parse("Hello@World#123")).toEqual("helloworld123");
1076
+ expect(z.string().slugify().parse("Hello-World")).toEqual("hello-world");
1077
+ expect(z.string().slugify().parse("Hello_World")).toEqual("hello-world");
1078
+ expect(z.string().slugify().parse("---Hello---World---")).toEqual("hello-world");
1079
+ expect(z.string().slugify().parse("Hello World")).toEqual("hello-world");
1080
+ expect(z.string().slugify().parse("Hello!@#$%^&*()World")).toEqual("helloworld");
1081
+
1082
+ // can be used with check
1083
+ expect(z.string().check(z.slugify()).parse("Hello World")).toEqual("hello-world");
1084
+
1085
+ // can be chained with other methods
1086
+ expect(z.string().slugify().min(5).parse("Hello World")).toEqual("hello-world");
1087
+ expect(() => z.string().slugify().min(20).parse("Hello World")).toThrow();
1088
+ });
1089
+
727
1090
  // test("IP validation", () => {
728
1091
  // const ipSchema = z.string().ip();
729
1092
 
@@ -808,6 +1171,58 @@ test("IPv6 validation", () => {
808
1171
  expect(() => ipv6.parse("254.164.77.1")).toThrow();
809
1172
  });
810
1173
 
1174
+ test("MAC validation", () => {
1175
+ const mac = z.mac();
1176
+
1177
+ // Valid MAC addresses
1178
+ expect(mac.safeParse("00:1A:2B:3C:4D:5E").success).toBe(true);
1179
+ expect(mac.safeParse("FF:FF:FF:FF:FF:FF").success).toBe(true);
1180
+ expect(mac.safeParse("00:11:22:33:44:55").success).toBe(true);
1181
+ expect(mac.safeParse("A1:B2:C3:D4:E5:F6").success).toBe(true);
1182
+ expect(mac.safeParse("10:20:30:40:50:60").success).toBe(true);
1183
+ expect(mac.safeParse("0a:1b:2c:3d:4e:5f").success).toBe(true);
1184
+ expect(mac.safeParse("12:34:56:78:9A:BC").success).toBe(true);
1185
+
1186
+ // Invalid MAC addresses
1187
+ expect(mac.safeParse("00:1A-2B:3C-4D:5E").success).toBe(false);
1188
+ expect(mac.safeParse("00:1A:2B:3C:4D").success).toBe(false);
1189
+ expect(mac.safeParse("00:1A:2B:3C:4D").success).toBe(false);
1190
+ expect(mac.safeParse("00-1A-2B-3C-4D").success).toBe(false);
1191
+ expect(mac.safeParse("01-23-45-67-89-AB").success).toBe(false); // Dash delimiter not accepted by default
1192
+ expect(mac.safeParse("AA-BB-CC-DD-EE-FF").success).toBe(false); // Dash delimiter not accepted by default
1193
+ expect(mac.safeParse("DE-AD-BE-EF-00-01").success).toBe(false); // Dash delimiter not accepted by default
1194
+ expect(mac.safeParse("98-76-54-32-10-FF").success).toBe(false); // Dash delimiter not accepted by default
1195
+ expect(mac.safeParse("00:1A:2B:3C:4D:GZ").success).toBe(false);
1196
+ expect(mac.safeParse("00:1A:2B:3C:4D:5E:GG").success).toBe(false);
1197
+ expect(mac.safeParse("123:45:67:89:AB:CD").success).toBe(false);
1198
+ expect(mac.safeParse("00--1A:2B:3C:4D:5E").success).toBe(false);
1199
+ expect(mac.safeParse("00:1A::2B:3C:4D:5E").success).toBe(false);
1200
+ expect(mac.safeParse("00:1A:2B:3C:3C:2B:1A:00").success).toBe(false); // Disallow EUI-64
1201
+ expect(mac.safeParse("00:1a:2B:3c:4D:5e").success).toBe(false); // Disallow mixed-case
1202
+
1203
+ // MAC formats that are nonstandard but occassionally referenced, ex. https://www.postgresql.org/docs/17/datatype-net-types.html#DATATYPE-MACADDR
1204
+ expect(mac.safeParse("00:1A:2B:3C:4D:5E:FF").success).toBe(false);
1205
+ expect(mac.safeParse("001A2B:3C4D5E").success).toBe(false);
1206
+ expect(mac.safeParse("001A:2B3C:4D5E").success).toBe(false);
1207
+ expect(mac.safeParse("001A.2B3C.4D5E").success).toBe(false);
1208
+ expect(mac.safeParse("001A2B3C4D5E").success).toBe(false);
1209
+ expect(mac.safeParse("00.1A.2B.3C.4D.5E").success).toBe(false);
1210
+ });
1211
+
1212
+ test("MAC validation with custom delimiter", () => {
1213
+ const colonMac = z.mac({ delimiter: ":" });
1214
+ expect(colonMac.safeParse("00:1A:2B:3C:4D:5E").success).toBe(true);
1215
+ expect(colonMac.safeParse("00-1A-2B-3C-4D-5E").success).toBe(false);
1216
+
1217
+ const dashMac = z.mac({ delimiter: "-" });
1218
+ expect(dashMac.safeParse("00-1A-2B-3C-4D-5E").success).toBe(true);
1219
+ expect(dashMac.safeParse("00:1A:2B:3C:4D:5E").success).toBe(false);
1220
+
1221
+ const colonOnlyMac = z.mac({ delimiter: ":" });
1222
+ expect(colonOnlyMac.safeParse("00:1A:2B:3C:4D:5E").success).toBe(true);
1223
+ expect(colonOnlyMac.safeParse("00-1A-2B-3C-4D-5E").success).toBe(false);
1224
+ });
1225
+
811
1226
  test("CIDR v4 validation", () => {
812
1227
  const cidrV4 = z.string().cidrv4();
813
1228
 
@@ -835,6 +1250,14 @@ test("CIDR v6 validation", () => {
835
1250
  expect(cidrV6.safeParse("fe80::/10").success).toBe(true);
836
1251
  expect(cidrV6.safeParse("::1/128").success).toBe(true);
837
1252
  expect(cidrV6.safeParse("2001:0db8:85a3::/64").success).toBe(true);
1253
+ expect(cidrV6.safeParse("2001:db8:1::/48").success).toBe(true);
1254
+ expect(cidrV6.safeParse("2001:db8:85a3::8a2e:370:7334/64").success).toBe(true);
1255
+ expect(cidrV6.safeParse("2001:db8:85a3:0:0:8a2e:370:7334/64").success).toBe(true);
1256
+
1257
+ const pattern = new RegExp(z.toJSONSchema(cidrV6).pattern as string);
1258
+ for (const input of ["2001:db8::/32", "2001:db8:1::/48", "2001:0db8:85a3::/64", "fe80::/10", "::/0"]) {
1259
+ expect(pattern.test(input)).toBe(true);
1260
+ }
838
1261
 
839
1262
  // Invalid CIDR v6 addresses
840
1263
  expect(cidrV6.safeParse("2001:db8::").success).toBe(false); // Missing prefix
@@ -842,6 +1265,9 @@ test("CIDR v6 validation", () => {
842
1265
  expect(cidrV6.safeParse("2001:db8::/abc").success).toBe(false); // Invalid prefix format
843
1266
  expect(cidrV6.safeParse("not a cidr").success).toBe(false); // Invalid format
844
1267
  expect(cidrV6.safeParse("192.168.0.0/24").success).toBe(false); // IPv4 CIDR in v6 validation
1268
+ expect(cidrV6.safeParse("2001:0db8:85a3::/64/whatever-after").success).toBe(false);
1269
+ expect(cidrV6.safeParse("22d9:f4a8:6a90:f3bf:dcaa:2beb:5fba:0000/112").success).toBe(true);
1270
+ expect(cidrV6.safeParse("22d9:f4a8:6a90:f3bf:dcaa:2beb:5fba:0000/112/268").success).toBe(false);
845
1271
  });
846
1272
 
847
1273
  test("E.164 validation", () => {
@@ -871,6 +1297,8 @@ test("E.164 validation", () => {
871
1297
  "+1 555 555 555", // space after plus sign
872
1298
  "+1555 555 555", // space between numbers
873
1299
  "+1555+555", // multiple plus signs
1300
+ "+0000000", // leading zero country code
1301
+ "+0123456789", // leading zero with more digits
874
1302
  "+1555555555555555", // too long
875
1303
  "+115abc55", // non numeric characters in number part
876
1304
  "+1555555 ", // space after number
@@ -879,3 +1307,134 @@ test("E.164 validation", () => {
879
1307
  expect(validE164Numbers.every((number) => e164Number.safeParse(number).success)).toBe(true);
880
1308
  expect(invalidE164Numbers.every((number) => e164Number.safeParse(number).success === false)).toBe(true);
881
1309
  });
1310
+
1311
+ test("hostname", () => {
1312
+ const hostname = z.hostname();
1313
+
1314
+ // Valid hostnames
1315
+ hostname.parse("localhost");
1316
+ hostname.parse("example.com");
1317
+ hostname.parse("sub.example.com");
1318
+ hostname.parse("a-b-c.example.com");
1319
+ hostname.parse("123.example.com");
1320
+ hostname.parse("example-123.com");
1321
+ hostname.parse("example-123.1234");
1322
+ hostname.parse("developer.mozilla.org");
1323
+ hostname.parse("hello.world.example.com");
1324
+ hostname.parse("www.google.com");
1325
+ hostname.parse("192.168.1.1");
1326
+ hostname.parse("xn--d1acj3b.com");
1327
+ hostname.parse("xn--d1acj3b.org");
1328
+ hostname.parse("xn--d1acj3b");
1329
+
1330
+ // Invalid hostnames
1331
+ expect(() => hostname.parse("")).toThrow();
1332
+ expect(() => hostname.parse("example..com")).toThrow();
1333
+ expect(() => hostname.parse("example-.com")).toThrow();
1334
+ expect(() => hostname.parse("-example.com")).toThrow();
1335
+ expect(() => hostname.parse("example.com-")).toThrow();
1336
+ expect(() => hostname.parse("example_com")).toThrow();
1337
+ expect(() => hostname.parse("example.com:8080")).toThrow();
1338
+ expect(() => hostname.parse("http://example.com")).toThrow();
1339
+ expect(() => hostname.parse("ht!tp://invalid.com")).toThrow();
1340
+
1341
+ expect(() => hostname.parse("xn--d1acj3b..com")).toThrow();
1342
+ expect(() => hostname.parse("ex@mple.com")).toThrow();
1343
+ expect(() => hostname.parse("[2001:db8::zzzz]")).toThrow();
1344
+ expect(() => hostname.parse("exa mple.com")).toThrow();
1345
+ expect(() => hostname.parse("-example.com")).toThrow();
1346
+ expect(() => hostname.parse("example..com")).toThrow();
1347
+ });
1348
+
1349
+ test("currency code", () => {
1350
+ const currency = z.currencyCode();
1351
+ for (const code of ["USD", "EUR", "XXX", "XCG", "XAD"]) expect(currency.parse(code)).toBe(code);
1352
+ for (const input of ["", "usd", "US", "USDX", " USD", "ANG", "BGN"])
1353
+ expect(currency.safeParse(input).success).toBe(false);
1354
+ expect(currency.safeParse("usd").error!.issues[0]).toMatchObject({
1355
+ code: "invalid_format",
1356
+ format: "currency_code",
1357
+ message: "Invalid currency code",
1358
+ });
1359
+ });
1360
+
1361
+ test("hash validation", () => {
1362
+ // MD5 tests
1363
+ const md5hex = z.hash("md5");
1364
+ const md5base64 = z.hash("md5", { enc: "base64" });
1365
+ const md5base64url = z.hash("md5", { enc: "base64url" });
1366
+
1367
+ // Valid MD5 hashes
1368
+ expect(md5hex.parse("5d41402abc4b2a76b9719d911017c592")).toBe("5d41402abc4b2a76b9719d911017c592");
1369
+ expect(md5hex.parse("5D41402ABC4B2A76B9719D911017C592")).toBe("5D41402ABC4B2A76B9719D911017C592"); // uppercase
1370
+ expect(md5base64.parse("XUFAKrxLKna5cZ2REBfFkg==")).toBe("XUFAKrxLKna5cZ2REBfFkg==");
1371
+ expect(md5base64url.parse("XUFAKrxLKna5cZ2REBfFkg")).toBe("XUFAKrxLKna5cZ2REBfFkg");
1372
+
1373
+ // Invalid MD5 hashes
1374
+ expect(() => md5hex.parse("5d41402abc4b2a76b9719d911017c59")).toThrow(); // too short
1375
+ expect(() => md5hex.parse("5d41402abc4b2a76b9719d911017c592x")).toThrow(); // too long
1376
+ expect(() => md5base64.parse("XUFAKrxLKna5cZ2REBfFkg=")).toThrow(); // wrong padding
1377
+ expect(() => md5base64url.parse("XUFAKrxLKna5cZ2REBfFkg=")).toThrow(); // has padding
1378
+
1379
+ // SHA1 tests
1380
+ const sha1hex = z.hash("sha1");
1381
+ const sha1base64 = z.hash("sha1", { enc: "base64" });
1382
+ const sha1base64url = z.hash("sha1", { enc: "base64url" });
1383
+
1384
+ // Valid SHA1 hashes
1385
+ expect(sha1hex.parse("aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d")).toBe("aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d");
1386
+ expect(sha1base64.parse("qvTGHdzF6KLavt4PO0gs2a6pQ00=")).toBe("qvTGHdzF6KLavt4PO0gs2a6pQ00=");
1387
+ expect(sha1base64url.parse("qvTGHdzF6KLavt4PO0gs2a6pQ00")).toBe("qvTGHdzF6KLavt4PO0gs2a6pQ00");
1388
+
1389
+ // SHA256 tests
1390
+ const sha256hex = z.hash("sha256");
1391
+ const sha256base64 = z.hash("sha256", { enc: "base64" });
1392
+ const sha256base64url = z.hash("sha256", { enc: "base64url" });
1393
+
1394
+ // Valid SHA256 hashes
1395
+ expect(sha256hex.parse("2cf24dba4f21d4288094c4a2e2c2d6c6b0c3e0c8f0e0c8f0e0c8f0e0c8f0e0c8")).toBe(
1396
+ "2cf24dba4f21d4288094c4a2e2c2d6c6b0c3e0c8f0e0c8f0e0c8f0e0c8f0e0c8"
1397
+ );
1398
+ expect(sha256base64.parse("LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=")).toBe(
1399
+ "LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ="
1400
+ );
1401
+ expect(sha256base64url.parse("LPJNul-wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ")).toBe(
1402
+ "LPJNul-wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ"
1403
+ );
1404
+
1405
+ // SHA384 tests (no padding in base64)
1406
+ const sha384hex = z.hash("sha384");
1407
+ const sha384base64 = z.hash("sha384", { enc: "base64" });
1408
+
1409
+ expect(
1410
+ sha384hex.parse("59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f")
1411
+ ).toBe("59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f");
1412
+ expect(sha384base64.parse("WeF0h3dEjGneawDXozO7+5/xtGPkQ1TDVTvNucZm+pASWjx5+QOXvfX2oT3oKGhP")).toBe(
1413
+ "WeF0h3dEjGneawDXozO7+5/xtGPkQ1TDVTvNucZm+pASWjx5+QOXvfX2oT3oKGhP"
1414
+ );
1415
+
1416
+ // SHA512 tests
1417
+ const sha512hex = z.hash("sha512");
1418
+ const sha512base64 = z.hash("sha512", { enc: "base64" });
1419
+
1420
+ expect(
1421
+ sha512hex.parse(
1422
+ "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043"
1423
+ )
1424
+ ).toBe(
1425
+ "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043"
1426
+ );
1427
+ expect(
1428
+ sha512base64.parse("m3HSJL1i83hdltRq0+o9czGb+8KJDKra4t/3JRlnPKcjI8PZm6XBHXx6zG4UuMXaDEZjR1wuXDre9G9zvN7AQw==")
1429
+ ).toBe("m3HSJL1i83hdltRq0+o9czGb+8KJDKra4t/3JRlnPKcjI8PZm6XBHXx6zG4UuMXaDEZjR1wuXDre9G9zvN7AQw==");
1430
+
1431
+ // Test default encoding (hex)
1432
+ const defaultHash = z.hash("sha256");
1433
+ expect(defaultHash.parse("2cf24dba4f21d4288094c4a2e2c2d6c6b0c3e0c8f0e0c8f0e0c8f0e0c8f0e0c8")).toBe(
1434
+ "2cf24dba4f21d4288094c4a2e2c2d6c6b0c3e0c8f0e0c8f0e0c8f0e0c8f0e0c8"
1435
+ );
1436
+
1437
+ // Test with custom error message
1438
+ const hashWithMessage = z.hash("md5", { message: "Invalid MD5 hash" });
1439
+ expect(() => hashWithMessage.parse("invalid")).toThrow("Invalid MD5 hash");
1440
+ });