@psnext/slingcli 3.3.20260924-1 → 3.3.20261002-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (652) hide show
  1. package/node_modules/@hono/node-server/README.md +21 -10
  2. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  3. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  4. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  5. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  6. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  7. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  8. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  9. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  10. package/node_modules/@hono/node-server/package.json +3 -2
  11. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts +43 -2
  12. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts.map +1 -1
  13. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js +26 -5
  14. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js.map +1 -1
  15. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts +11 -0
  16. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts.map +1 -1
  17. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js +96 -14
  18. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js.map +1 -1
  19. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts +1 -0
  20. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts.map +1 -1
  21. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js +11 -2
  22. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js.map +1 -1
  23. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  24. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  25. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -1
  26. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js +6 -3
  27. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -1
  28. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts +3 -0
  29. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts.map +1 -1
  30. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js +12 -2
  31. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js.map +1 -1
  32. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts +43 -2
  33. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts.map +1 -1
  34. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js +26 -5
  35. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js.map +1 -1
  36. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts +11 -0
  37. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts.map +1 -1
  38. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js +96 -14
  39. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js.map +1 -1
  40. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts +1 -0
  41. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts.map +1 -1
  42. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js +11 -2
  43. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js.map +1 -1
  44. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  45. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  46. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -1
  47. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js +6 -3
  48. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js.map +1 -1
  49. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts +3 -0
  50. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts.map +1 -1
  51. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js +12 -2
  52. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js.map +1 -1
  53. package/node_modules/@modelcontextprotocol/sdk/package.json +1 -1
  54. package/node_modules/@smithy/core/dist-cjs/submodules/client/index.js +33 -11
  55. package/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js +3 -0
  56. package/node_modules/@smithy/core/dist-es/submodules/client/smithy-client/exceptions.js +33 -11
  57. package/node_modules/@smithy/core/dist-es/submodules/schema/TypeRegistry.js +3 -0
  58. package/node_modules/@smithy/core/dist-types/submodules/client/smithy-client/exceptions.d.ts +1 -0
  59. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/client/smithy-client/exceptions.d.ts +1 -0
  60. package/node_modules/@smithy/core/package.json +1 -1
  61. package/node_modules/@smithy/signature-v4/dist-cjs/index.js +4 -1
  62. package/node_modules/@smithy/signature-v4/dist-es/getCanonicalHeaders.js +4 -1
  63. package/node_modules/@smithy/signature-v4/package.json +3 -3
  64. package/node_modules/@types/node/README.md +1 -1
  65. package/node_modules/@types/node/crypto.d.ts +2 -2
  66. package/node_modules/@types/node/dgram.d.ts +1 -1
  67. package/node_modules/@types/node/package.json +2 -2
  68. package/node_modules/@types/node/zlib.d.ts +6 -0
  69. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  70. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  71. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  72. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  73. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  74. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  75. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  76. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  77. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  78. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  79. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  80. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  81. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  82. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  83. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  84. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  85. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  86. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  87. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  88. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  89. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  90. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  91. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  92. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  93. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  94. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  95. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  96. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  97. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  98. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  99. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  100. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  101. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  102. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  103. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  104. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  105. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  106. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  107. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  108. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  109. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  110. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  111. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  112. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  113. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  114. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  115. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  116. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  117. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  118. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  119. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  120. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  121. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  122. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  123. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  124. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  125. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  126. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  127. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  128. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  129. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  130. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  131. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  132. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  133. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  134. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  135. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  136. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  137. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  138. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  139. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  140. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  141. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  142. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  143. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  144. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  145. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  146. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  147. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  148. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  149. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  150. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  151. package/node_modules/hono/dist/cjs/compose.js +49 -66
  152. package/node_modules/hono/dist/cjs/context.js +379 -450
  153. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  154. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  155. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  156. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  157. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  158. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  159. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  160. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  161. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  162. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  163. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  164. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  165. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  166. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  167. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  168. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  169. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  170. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  171. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  172. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  173. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  174. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  175. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  176. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  177. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  178. package/node_modules/hono/dist/cjs/hono-base.js +345 -403
  179. package/node_modules/hono/dist/cjs/hono.js +28 -42
  180. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  181. package/node_modules/hono/dist/cjs/index.js +22 -30
  182. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  183. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  184. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  185. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  186. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  187. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  188. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  189. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  190. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  191. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  192. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  193. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  194. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  195. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  196. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  197. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  198. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  199. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  200. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  201. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  202. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  203. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  204. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  205. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  206. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  207. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  208. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  209. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  210. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  211. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  212. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  213. package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
  214. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  215. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  216. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  217. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  218. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  219. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  220. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  221. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  222. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  223. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  224. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  225. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  226. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  227. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  228. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  229. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  230. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  231. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  232. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  233. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  234. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  235. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  236. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  237. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  238. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  239. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  240. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  241. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  242. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  243. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  244. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  245. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  246. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  247. package/node_modules/hono/dist/cjs/request.js +334 -346
  248. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  249. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  250. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  251. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  252. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  253. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  254. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  255. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  256. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  257. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  258. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  259. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  260. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  261. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  262. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  263. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  264. package/node_modules/hono/dist/cjs/router.js +37 -37
  265. package/node_modules/hono/dist/cjs/types.js +5 -28
  266. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  267. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  268. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  269. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  270. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  271. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  272. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  273. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  274. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  275. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  276. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  277. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  278. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  279. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  280. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  281. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  282. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  283. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  284. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  285. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  286. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  287. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  288. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  289. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  290. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  291. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  292. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  293. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  294. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  295. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  296. package/node_modules/hono/dist/client/client.js +138 -197
  297. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  298. package/node_modules/hono/dist/client/index.js +3 -7
  299. package/node_modules/hono/dist/client/types.js +1 -0
  300. package/node_modules/hono/dist/client/utils.js +51 -68
  301. package/node_modules/hono/dist/compose.js +49 -45
  302. package/node_modules/hono/dist/context.js +376 -426
  303. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  304. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  305. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  306. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  307. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  308. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  309. package/node_modules/hono/dist/helper/css/common.js +167 -225
  310. package/node_modules/hono/dist/helper/css/index.js +132 -137
  311. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  312. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  313. package/node_modules/hono/dist/helper/html/index.js +30 -39
  314. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  315. package/node_modules/hono/dist/helper/route/index.js +121 -43
  316. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  317. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  318. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  319. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  320. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  321. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  322. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  323. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  324. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  325. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  326. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  327. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  328. package/node_modules/hono/dist/hono-base.js +342 -379
  329. package/node_modules/hono/dist/hono.js +27 -20
  330. package/node_modules/hono/dist/http-exception.js +53 -33
  331. package/node_modules/hono/dist/index.js +19 -6
  332. package/node_modules/hono/dist/jsx/base.js +231 -340
  333. package/node_modules/hono/dist/jsx/children.js +16 -20
  334. package/node_modules/hono/dist/jsx/components.js +118 -170
  335. package/node_modules/hono/dist/jsx/constants.js +9 -15
  336. package/node_modules/hono/dist/jsx/context.js +153 -150
  337. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  338. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  339. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  340. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  341. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  342. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  343. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  344. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  345. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  346. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  347. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  348. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  349. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  350. package/node_modules/hono/dist/jsx/index.js +45 -98
  351. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  352. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  353. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  354. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  355. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  356. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  357. package/node_modules/hono/dist/jsx/types.js +1 -0
  358. package/node_modules/hono/dist/jsx/utils.js +105 -168
  359. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  360. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  361. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  362. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  363. package/node_modules/hono/dist/middleware/combine/index.js +134 -73
  364. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  365. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  366. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  367. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  368. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  369. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  370. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  371. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  372. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  373. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  374. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  375. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  376. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  377. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  378. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  379. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  380. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  381. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  382. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  383. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  384. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  385. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  386. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  387. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  388. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  389. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  390. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  391. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  392. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  393. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  394. package/node_modules/hono/dist/preset/quick.js +17 -15
  395. package/node_modules/hono/dist/preset/tiny.js +14 -11
  396. package/node_modules/hono/dist/request/constants.js +4 -5
  397. package/node_modules/hono/dist/request.js +328 -319
  398. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  399. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  400. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  401. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  402. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  403. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  404. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  405. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  406. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  407. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  408. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  409. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  410. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  411. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  412. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  413. package/node_modules/hono/dist/router/utils.js +4 -5
  414. package/node_modules/hono/dist/router.js +35 -14
  415. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  416. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
  417. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  418. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
  419. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  420. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  421. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  422. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  423. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  424. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
  425. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  426. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
  427. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  428. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  429. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  430. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
  431. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  432. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  433. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  434. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  435. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  436. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  437. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  438. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  439. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  440. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  441. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
  442. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  443. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  444. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  445. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  446. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  447. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
  448. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
  449. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
  450. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  451. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  452. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  453. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  454. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  455. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  456. package/node_modules/hono/dist/types/client/types.d.ts +134 -159
  457. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  458. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  459. package/node_modules/hono/dist/types/context.d.ts +335 -335
  460. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  461. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  462. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  463. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  464. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  465. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
  466. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
  467. package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
  468. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
  469. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
  470. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  471. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
  472. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  473. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  474. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
  475. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  476. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  477. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
  478. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  479. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  480. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  481. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  482. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  483. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
  484. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  485. package/node_modules/hono/dist/types/hono-base.d.ts +208 -210
  486. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  487. package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
  488. package/node_modules/hono/dist/types/index.d.ts +6 -37
  489. package/node_modules/hono/dist/types/jsx/base.d.ts +36 -34
  490. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  491. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  492. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  493. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
  494. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
  495. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  496. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  497. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
  498. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
  499. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
  500. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  501. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  502. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  503. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
  504. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
  505. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  506. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
  507. package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
  508. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  509. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  510. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  511. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  512. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  513. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  514. package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
  515. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  516. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
  517. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
  518. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
  519. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  520. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
  521. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
  522. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  523. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
  524. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
  525. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  526. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
  527. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
  528. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
  529. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  530. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  531. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
  532. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  533. package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
  534. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  535. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
  536. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
  537. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
  538. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
  539. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
  540. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
  541. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  542. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
  543. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
  544. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
  545. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  546. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  547. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  548. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
  549. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
  550. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
  551. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  552. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  553. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  554. package/node_modules/hono/dist/types/request.d.ts +288 -286
  555. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  556. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  557. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  558. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  559. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  560. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  561. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  562. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
  563. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  564. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  565. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  566. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  567. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  568. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  569. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  570. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  571. package/node_modules/hono/dist/types/router.d.ts +23 -22
  572. package/node_modules/hono/dist/types/types.d.ts +146 -505
  573. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  574. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  575. package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
  576. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
  577. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  578. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  579. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  580. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  581. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
  582. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
  583. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  584. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
  585. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  586. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  587. package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
  588. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  589. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  590. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  591. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  592. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  593. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  594. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  595. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  596. package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
  597. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  598. package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
  599. package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
  600. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  601. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
  602. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
  603. package/node_modules/hono/dist/types.js +4 -6
  604. package/node_modules/hono/dist/utils/accept.js +185 -212
  605. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  606. package/node_modules/hono/dist/utils/body.js +87 -92
  607. package/node_modules/hono/dist/utils/buffer.js +44 -71
  608. package/node_modules/hono/dist/utils/color.js +33 -21
  609. package/node_modules/hono/dist/utils/compress.js +11 -5
  610. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  611. package/node_modules/hono/dist/utils/constants.js +7 -5
  612. package/node_modules/hono/dist/utils/cookie.js +114 -163
  613. package/node_modules/hono/dist/utils/crypto.js +30 -40
  614. package/node_modules/hono/dist/utils/encode.js +30 -26
  615. package/node_modules/hono/dist/utils/filepath.js +23 -33
  616. package/node_modules/hono/dist/utils/handler.js +10 -11
  617. package/node_modules/hono/dist/utils/headers.js +1 -0
  618. package/node_modules/hono/dist/utils/html.js +97 -117
  619. package/node_modules/hono/dist/utils/http-status.js +1 -0
  620. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  621. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  622. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  623. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  624. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  625. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  626. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  627. package/node_modules/hono/dist/utils/mime.js +74 -79
  628. package/node_modules/hono/dist/utils/stream.js +86 -88
  629. package/node_modules/hono/dist/utils/types.js +1 -0
  630. package/node_modules/hono/dist/utils/url.js +187 -215
  631. package/node_modules/hono/dist/validator/index.js +1 -4
  632. package/node_modules/hono/dist/validator/utils.js +1 -0
  633. package/node_modules/hono/dist/validator/validator.js +61 -83
  634. package/node_modules/hono/package.json +27 -27
  635. package/node_modules/ip-address/README.md +34 -34
  636. package/node_modules/ip-address/dist/ipv4.js +7 -0
  637. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  638. package/node_modules/ip-address/package.json +1 -1
  639. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +3 -1
  640. package/node_modules/undici/docs/docs/api/Dispatcher.md +1 -0
  641. package/node_modules/undici/lib/core/request.js +23 -2
  642. package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
  643. package/node_modules/undici/lib/dispatcher/client-h2.js +14 -5
  644. package/node_modules/undici/lib/handler/retry-handler.js +71 -20
  645. package/node_modules/undici/lib/interceptor/decompress.js +228 -68
  646. package/node_modules/undici/lib/web/websocket/connection.js +18 -8
  647. package/node_modules/undici/package.json +1 -1
  648. package/node_modules/undici/types/interceptors.d.ts +1 -1
  649. package/node_modules/ws/lib/websocket.js +17 -3
  650. package/node_modules/ws/package.json +1 -1
  651. package/package.json +2 -2
  652. package/slingshot/index.js +256 -256
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hono",
3
- "version": "4.13.9",
3
+ "version": "4.13.12",
4
4
  "description": "Web framework built on Web Standards",
5
5
  "main": "dist/cjs/index.js",
6
6
  "type": "module",
@@ -11,29 +11,31 @@
11
11
  "!dist/**/*.tsbuildinfo"
12
12
  ],
13
13
  "scripts": {
14
- "test": "tsc -p tsconfig.spec.json && vitest --run",
15
- "test:watch": "vitest --watch",
14
+ "test": "tsc -p tsconfig.spec.json && vp test --run",
15
+ "test:watch": "vp test --watch",
16
16
  "test:deno": "deno test --allow-read --allow-env --allow-write --allow-net -c runtime-tests/deno/deno.json runtime-tests/deno && deno test --no-lock -c runtime-tests/deno-jsx/deno.precompile.json runtime-tests/deno-jsx && deno test --no-lock -c runtime-tests/deno-jsx/deno.react-jsx.json runtime-tests/deno-jsx",
17
- "test:bun": "bun test --jsx-import-source ../../src/jsx runtime-tests/bun/*",
18
- "test:fastly": "vitest --run --project fastly",
19
- "test:node": "vitest --run --project node",
20
- "test:workerd": "vitest --run --project workerd",
21
- "test:lambda": "vitest --run --project lambda",
22
- "test:lambda-edge": "vitest --run --project lambda-edge",
23
- "test:all": "bun run test && bun test:deno && bun test:bun",
24
- "lint": "eslint src runtime-tests build perf-measures benchmarks",
25
- "lint:fix": "eslint src runtime-tests build perf-measures benchmarks --fix",
26
- "format": "prettier --check --cache \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\" \"build/**/*.{js,ts,tsx}\" \"perf-measures/**/*.{js,ts,tsx}\" \"benchmarks/**/*.{js,ts,tsx}\"",
27
- "format:fix": "prettier --write --cache --cache-strategy metadata \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\" \"build/**/*.{js,ts,tsx}\" \"perf-measures/**/*.{js,ts,tsx}\" \"benchmarks/**/*.{js,ts,tsx}\"",
17
+ "test:bun": "bun test --jsx-import-source ../../src/jsx runtime-tests/bun",
18
+ "test:fastly": "vp test --run --project fastly",
19
+ "test:node": "vp test --run --project node",
20
+ "test:workerd": "vp test --run --project workerd",
21
+ "test:all": "pnpm run test && pnpm run test:deno && pnpm run test:bun",
22
+ "check": "vp check",
23
+ "check:fix": "vp check --fix",
24
+ "lint": "vp lint src runtime-tests build perf-measures benchmarks adapters",
25
+ "lint:fix": "vp lint --fix src runtime-tests build perf-measures benchmarks adapters",
26
+ "format": "vp fmt --check \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\" \"build/**/*.{js,ts,tsx}\" \"perf-measures/**/*.{js,ts,tsx}\" \"benchmarks/**/*.{js,ts,tsx}\" \"adapters/**/*.{js,ts,tsx}\"",
27
+ "format:fix": "vp fmt \"src/**/*.{js,ts,tsx}\" \"runtime-tests/**/*.{js,ts,tsx}\" \"build/**/*.{js,ts,tsx}\" \"perf-measures/**/*.{js,ts,tsx}\" \"benchmarks/**/*.{js,ts,tsx}\" \"adapters/**/*.{js,ts,tsx}\"",
28
28
  "editorconfig-checker": "editorconfig-checker",
29
29
  "copy:package.cjs.json": "cp ./package.cjs.json ./dist/cjs/package.json && cp ./package.cjs.json ./dist/types/package.json",
30
- "build": "bun run --shell bun remove-dist && bun ./build/build.ts && bun run copy:package.cjs.json",
31
- "postbuild": "publint",
32
- "watch": "bun run --shell bun remove-dist && bun ./build/build.ts --watch && bun run copy:package.cjs.json",
33
- "coverage": "vitest --run --coverage",
34
- "prerelease": "bun test:deno && bun run build",
30
+ "build": "pnpm run remove-dist && vp pack && pnpm run copy:package.cjs.json && publint",
31
+ "watch": "pnpm run remove-dist && vp pack --watch && pnpm run copy:package.cjs.json",
32
+ "coverage": "vp test --run --coverage",
33
+ "prerelease": "pnpm run test:deno && pnpm run build",
35
34
  "release": "np --no-publish",
36
- "remove-dist": "rm -rf dist"
35
+ "remove-dist": "rm -rf dist",
36
+ "build:adapters": "pnpm -r --filter \"./adapters/*\" run build",
37
+ "test:adapters": "pnpm -r --filter \"./adapters/*\" run test",
38
+ "release:adapter": "node ./build/release-adapter.ts"
37
39
  },
38
40
  "exports": {
39
41
  ".": {
@@ -674,32 +676,30 @@
674
676
  "nodejs"
675
677
  ],
676
678
  "devDependencies": {
677
- "@hono/eslint-config": "^2.1.1",
678
679
  "@hono/node-server": "^2.0.12",
679
680
  "@types/jsdom": "^21.1.7",
680
681
  "@types/node": "^24.3.0",
681
682
  "@types/ws": "^8.18.1",
682
683
  "@typescript/native-preview": "7.0.0-dev.20260210.1",
683
- "@vitest/coverage-v8": "^4.1.7",
684
+ "@vitest/coverage-v8": "5.0.1",
684
685
  "bun-types": "^1.2.20",
685
686
  "editorconfig-checker": "6.2.0",
686
687
  "esbuild": "^0.27.1",
687
- "eslint": "^9.39.3",
688
688
  "jsdom": "22.1.0",
689
689
  "msw": "^2.6.0",
690
690
  "np": "11.2.1",
691
- "oxc-parser": "^0.96.0",
692
691
  "pkg-pr-new": "^0.0.53",
693
- "prettier": "3.7.4",
694
692
  "publint": "0.3.15",
693
+ "rolldown": "^1.2.10",
695
694
  "typescript": "^6.0.3",
696
695
  "vite-plugin-fastly-js-compute": "^0.4.2",
697
- "vitest": "^4.1.9",
696
+ "vite-plus": "1.0.0",
697
+ "vitest": "5.0.1",
698
698
  "wrangler": "4.107.0",
699
699
  "ws": "^8.21.0",
700
700
  "zod": "^3.23.8"
701
701
  },
702
- "packageManager": "bun@1.2.20",
702
+ "packageManager": "pnpm@12.6.0",
703
703
  "engines": {
704
704
  "node": ">=16.9.0"
705
705
  }
@@ -115,43 +115,43 @@ A few terms used throughout the API can be confusing if you haven't worked deepl
115
115
  - `static fromHex(hex: string): Address4` — Converts a hex string to an IPv4 address object. Accepts 8 hex digits with optional `:` separators (e.g. `'7f000001'` or `'7f:00:00:01'`). Throws `AddressError` for any other length or for non-hex characters. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L189)
116
116
  - `static fromInteger(integer: number): Address4` — Converts an integer into a IPv4 address object. The integer must be a non-negative safe integer in the range `[0, 2**32 - 1]`; otherwise `AddressError` is thrown. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L212)
117
117
  - `static fromArpa(arpaFormAddress: string): Address4` — Return an address from in-addr.arpa form: the four octets reversed, with or without the `.in-addr.arpa` suffix and root dot, in any case. Throws `AddressError` unless the reversed labels form a valid IPv4 address, so `fromArpa(x.reverseForm())` round-trips reverseForm. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L231)
118
- - `static fromBigInt(bigInt: bigint): Address4` — Converts a BigInt to a v4 address object. The value must be in the range `[0, 2**32 - 1]`; otherwise `AddressError` is thrown. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L413)
119
- - `static fromByteArray(bytes: number[]): Address4` — Convert a byte array to an Address4 object. Throws `AddressError` unless given exactly 4 integers from 0 to 255. Signed bytes are rejected, so this differs from `Address6.fromByteArray`, which folds them; the two contracts converge on this stricter form in the next major version. To convert from a Node.js `Buffer`, spread it: `Address4.fromByteArray([...buf])`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L431)
120
- - `static fromUnsignedByteArray(bytes: number[]): Address4` — Convert an unsigned byte array to an Address4 object. Throws `AddressError` unless given exactly 4 bytes, and rejects values outside 0 to 255 when parsing the resulting address. To convert from a Node.js `Buffer`, spread it: `Address4.fromUnsignedByteArray([...buf])`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L447)
118
+ - `static fromBigInt(bigInt: bigint): Address4` — Converts a BigInt to a v4 address object. The value must be in the range `[0, 2**32 - 1]`; otherwise `AddressError` is thrown. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L422)
119
+ - `static fromByteArray(bytes: number[]): Address4` — Convert a byte array to an Address4 object. Throws `AddressError` unless given exactly 4 integers from 0 to 255. Signed bytes are rejected, so this differs from `Address6.fromByteArray`, which folds them; the two contracts converge on this stricter form in the next major version. To convert from a Node.js `Buffer`, spread it: `Address4.fromByteArray([...buf])`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L440)
120
+ - `static fromUnsignedByteArray(bytes: number[]): Address4` — Convert an unsigned byte array to an Address4 object. Throws `AddressError` unless given exactly 4 bytes, and rejects values outside 0 to 255 when parsing the resulting address. To convert from a Node.js `Buffer`, spread it: `Address4.fromUnsignedByteArray([...buf])`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L456)
121
121
 
122
122
  **Instance methods**
123
123
 
124
124
  - `parse(address: string): string[]` — Parses an IPv4 address string into its four octet groups and stores the result on `this.parsedAddress`. Called automatically by the constructor; you typically don't need to call it directly. Throws `AddressError` if the input is not a valid IPv4 address. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L79)
125
125
  - `correctForm(): string` — Returns the address in correct form: octets joined with `.` and any leading zeros stripped (e.g. `192.168.1.1`). For IPv4 this matches the canonical dotted-decimal representation. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L100)
126
- - `toHex(): string` — Converts an IPv4 address object to a hex string [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L245)
127
- - `toArray(): number[]` — Converts an IPv4 address object to an array of bytes. To get a Node.js `Buffer`, wrap the result: `Buffer.from(address.toArray())`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L255)
128
- - `toGroup6(): string` — Converts an IPv4 address object to an IPv6 address group [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L263)
129
- - `bigInt(): bigint` — Returns the address as a `bigint` [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L282)
130
- - `startAddress(): Address4` — The first address in the range given by this address' subnet. Often referred to as the Network Address. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L299)
131
- - `startAddressExclusive(): Address4` — The first host address in the range given by this address's subnet ie the first address after the Network Address [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L308)
132
- - `offset(n: number | bigint): Address4` — Returns the address `n` addresses after this one (or before, when `n` is negative), keeping this address's subnet mask. Throws `AddressError` when the result would fall outside the IPv4 address space or `n` is not an integer. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L323)
133
- - `nextNetwork(): Address4` — Returns the network that follows this address's network: the address after endAddress, with the same subnet mask. Throws `AddressError` when this network is the last one in the address space. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L337)
134
- - `endAddress(): Address4` — The last address in the range given by this address' subnet Often referred to as the Broadcast [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L360)
135
- - `endAddressExclusive(): Address4` — The last host address in the range given by this address's subnet ie the last address prior to the Broadcast Address [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L369)
136
- - `subnetMaskAddress(): Address4` — The dotted-decimal form of the subnet mask, e.g. `255.255.240.0` for a `/20`. Returns an `Address4`; call `.correctForm()` for the string. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L379)
137
- - `wildcardMask(): Address4` — The Cisco-style wildcard mask, e.g. `0.0.0.255` for a `/24`. This is the bitwise inverse of `subnetMaskAddress()`. Returns an `Address4`; call `.correctForm()` for the string. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L391)
138
- - `networkForm(): string` — The network address in CIDR string form, e.g. `192.168.1.0/24` for `192.168.1.5/24`. For an address with no explicit subnet the prefix is `/32`, e.g. `networkForm()` on `192.168.1.5` returns `192.168.1.5/32`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L403)
139
- - `mask(mask?: number): string` — Returns the first n bits of the address, defaulting to the subnet mask [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L461)
140
- - `getBitsBase2(start: number, end: number): string` — Returns the bits in the given range as a base-2 string [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L473)
141
- - `reverseForm(options?: ReverseFormOptions): string` — Return the reversed in-addr.arpa form of the address, e.g. `42.2.0.192.in-addr.arpa.` for `192.0.2.42`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L484)
142
- - `isMulticast(): boolean` — Returns true if the given address is a multicast address [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L522)
143
- - `isPrivate(): boolean` — Returns true if the address is in one of the [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private address ranges (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L530)
144
- - `isLoopback(): boolean` — Returns true if the address is in the loopback range `127.0.0.0/8` ([RFC 1122](https://datatracker.ietf.org/doc/html/rfc1122)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L538)
145
- - `isLinkLocal(): boolean` — Returns true if the address is in the link-local range `169.254.0.0/16` ([RFC 3927](https://datatracker.ietf.org/doc/html/rfc3927)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L546)
146
- - `isUnspecified(): boolean` — Returns true if the address is the unspecified address `0.0.0.0`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L554)
147
- - `isBroadcast(): boolean` — Returns true if the address is the limited broadcast address `255.255.255.255` ([RFC 919](https://datatracker.ietf.org/doc/html/rfc919)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L562)
148
- - `isCGNAT(): boolean` — Returns true if the address is in the carrier-grade NAT range `100.64.0.0/10` ([RFC 6598](https://datatracker.ietf.org/doc/html/rfc6598)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L570)
149
- - `isDocumentation(): boolean` — Returns true if the address is in one of the documentation ranges `192.0.2.0/24`, `198.51.100.0/24`, or `203.0.113.0/24` ([RFC 5737](https://datatracker.ietf.org/doc/html/rfc5737)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L579)
150
- - `isBenchmarking(): boolean` — Returns true if the address is in the benchmarking range `198.18.0.0/15` ([RFC 2544](https://datatracker.ietf.org/doc/html/rfc2544)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L587)
151
- - `isReserved(): boolean` — Returns true if the address is in the reserved range `240.0.0.0/4` ([RFC 1112](https://datatracker.ietf.org/doc/html/rfc1112)), which includes the limited broadcast address. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L596)
152
- - `isGlobal(): boolean` — Returns true if the address is globally reachable: not multicast, and not in any block the [IANA IPv4 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv4-special-registry/) marks as not globally reachable. That covers everything the individual classifiers name (private, loopback, link-local, CGNAT, unspecified, broadcast, documentation, benchmarking, reserved) and the blocks they do not, such as `0.0.0.0/8` and the IETF protocol assignments in `192.0.0.0/24`. This is the single predicate to use where a request must not reach an internal or special-purpose destination; see SECURITY.md. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L611)
153
- - `binaryZeroPad(): string` — Returns a zero-padded base-2 string representation of the address [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L619)
154
- - `groupForV6(): string` — Groups an IPv4 address for inclusion at the end of an IPv6 address. Returns an HTML fragment: each half of the address is wrapped in a `<span>` carrying the group classes an address-inspector UI hovers on. The address content is HTML-escaped; anything you concatenate around it is your responsibility. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L635)
126
+ - `toHex(): string` — Converts an IPv4 address object to a hex string [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L254)
127
+ - `toArray(): number[]` — Converts an IPv4 address object to an array of bytes. To get a Node.js `Buffer`, wrap the result: `Buffer.from(address.toArray())`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L264)
128
+ - `toGroup6(): string` — Converts an IPv4 address object to an IPv6 address group [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L272)
129
+ - `bigInt(): bigint` — Returns the address as a `bigint` [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L291)
130
+ - `startAddress(): Address4` — The first address in the range given by this address' subnet. Often referred to as the Network Address. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L308)
131
+ - `startAddressExclusive(): Address4` — The first host address in the range given by this address's subnet ie the first address after the Network Address [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L317)
132
+ - `offset(n: number | bigint): Address4` — Returns the address `n` addresses after this one (or before, when `n` is negative), keeping this address's subnet mask. Throws `AddressError` when the result would fall outside the IPv4 address space or `n` is not an integer. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L332)
133
+ - `nextNetwork(): Address4` — Returns the network that follows this address's network: the address after endAddress, with the same subnet mask. Throws `AddressError` when this network is the last one in the address space. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L346)
134
+ - `endAddress(): Address4` — The last address in the range given by this address' subnet Often referred to as the Broadcast [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L369)
135
+ - `endAddressExclusive(): Address4` — The last host address in the range given by this address's subnet ie the last address prior to the Broadcast Address [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L378)
136
+ - `subnetMaskAddress(): Address4` — The dotted-decimal form of the subnet mask, e.g. `255.255.240.0` for a `/20`. Returns an `Address4`; call `.correctForm()` for the string. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L388)
137
+ - `wildcardMask(): Address4` — The Cisco-style wildcard mask, e.g. `0.0.0.255` for a `/24`. This is the bitwise inverse of `subnetMaskAddress()`. Returns an `Address4`; call `.correctForm()` for the string. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L400)
138
+ - `networkForm(): string` — The network address in CIDR string form, e.g. `192.168.1.0/24` for `192.168.1.5/24`. For an address with no explicit subnet the prefix is `/32`, e.g. `networkForm()` on `192.168.1.5` returns `192.168.1.5/32`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L412)
139
+ - `mask(mask?: number): string` — Returns the first n bits of the address, defaulting to the subnet mask [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L470)
140
+ - `getBitsBase2(start: number, end: number): string` — Returns the bits in the given range as a base-2 string [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L482)
141
+ - `reverseForm(options?: ReverseFormOptions): string` — Return the reversed in-addr.arpa form of the address, e.g. `42.2.0.192.in-addr.arpa.` for `192.0.2.42`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L493)
142
+ - `isMulticast(): boolean` — Returns true if the given address is a multicast address [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L531)
143
+ - `isPrivate(): boolean` — Returns true if the address is in one of the [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private address ranges (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L539)
144
+ - `isLoopback(): boolean` — Returns true if the address is in the loopback range `127.0.0.0/8` ([RFC 1122](https://datatracker.ietf.org/doc/html/rfc1122)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L547)
145
+ - `isLinkLocal(): boolean` — Returns true if the address is in the link-local range `169.254.0.0/16` ([RFC 3927](https://datatracker.ietf.org/doc/html/rfc3927)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L555)
146
+ - `isUnspecified(): boolean` — Returns true if the address is the unspecified address `0.0.0.0`. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L563)
147
+ - `isBroadcast(): boolean` — Returns true if the address is the limited broadcast address `255.255.255.255` ([RFC 919](https://datatracker.ietf.org/doc/html/rfc919)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L571)
148
+ - `isCGNAT(): boolean` — Returns true if the address is in the carrier-grade NAT range `100.64.0.0/10` ([RFC 6598](https://datatracker.ietf.org/doc/html/rfc6598)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L579)
149
+ - `isDocumentation(): boolean` — Returns true if the address is in one of the documentation ranges `192.0.2.0/24`, `198.51.100.0/24`, or `203.0.113.0/24` ([RFC 5737](https://datatracker.ietf.org/doc/html/rfc5737)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L588)
150
+ - `isBenchmarking(): boolean` — Returns true if the address is in the benchmarking range `198.18.0.0/15` ([RFC 2544](https://datatracker.ietf.org/doc/html/rfc2544)). [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L596)
151
+ - `isReserved(): boolean` — Returns true if the address is in the reserved range `240.0.0.0/4` ([RFC 1112](https://datatracker.ietf.org/doc/html/rfc1112)), which includes the limited broadcast address. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L605)
152
+ - `isGlobal(): boolean` — Returns true if the address is globally reachable: not multicast, and not in any block the [IANA IPv4 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv4-special-registry/) marks as not globally reachable. That covers everything the individual classifiers name (private, loopback, link-local, CGNAT, unspecified, broadcast, documentation, benchmarking, reserved) and the blocks they do not, such as `0.0.0.0/8` and the IETF protocol assignments in `192.0.0.0/24`. This is the single predicate to use where a request must not reach an internal or special-purpose destination; see SECURITY.md. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L620)
153
+ - `binaryZeroPad(): string` — Returns a zero-padded base-2 string representation of the address [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L628)
154
+ - `groupForV6(): string` — Groups an IPv4 address for inclusion at the end of an IPv6 address. Returns an HTML fragment: each half of the address is wrapped in a `<span>` carrying the group classes an address-inspector UI hovers on. The address content is HTML-escaped; anything you concatenate around it is your responsibility. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L644)
155
155
 
156
156
  **Properties**
157
157
 
@@ -164,8 +164,8 @@ A few terms used throughout the API can be confusing if you haven't worked deepl
164
164
  - `subnetMask: number` — [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L20)
165
165
  - `v4: boolean` — [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L21)
166
166
  - `isCorrect: () => boolean` — Returns true if the address is correct, false otherwise [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L108)
167
- - `isInSubnet: (address: Address4 | Address6) => boolean` — Returns true if the given address is in the subnet of the current address. An `Address6` is never in the subnet of an `Address4`; convert with `to4()` or `Address6.fromAddress4()` to compare across families. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L504)
168
- - `isHostInSubnet: (address: Address4 | Address6) => boolean` — Returns true if this address's host bits fall inside the given subnet, ignoring this address's own subnet mask. Prefer this over `isInSubnet` when classifying a single address, so the answer doesn't change with the CIDR suffix the caller happened to write — notably when the address came from untrusted input and the result backs a trust-boundary decision. An `Address6` is never in the subnet of an `Address4`; convert with `to4()` or `Address6.fromAddress4()` to compare across families. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L516)
167
+ - `isInSubnet: (address: Address4 | Address6) => boolean` — Returns true if the given address is in the subnet of the current address. An `Address6` is never in the subnet of an `Address4`; convert with `to4()` or `Address6.fromAddress4()` to compare across families. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L513)
168
+ - `isHostInSubnet: (address: Address4 | Address6) => boolean` — Returns true if this address's host bits fall inside the given subnet, ignoring this address's own subnet mask. Prefer this over `isInSubnet` when classifying a single address, so the answer doesn't change with the CIDR suffix the caller happened to write — notably when the address came from untrusted input and the result backs a trust-boundary decision. An `Address6` is never in the subnet of an `Address4`; convert with `to4()` or `Address6.fromAddress4()` to compare across families. [src](https://github.com/beaugunderson/ip-address/blob/main/src/ipv4.ts#L525)
169
169
 
170
170
  </details>
171
171
 
@@ -235,6 +235,13 @@ class Address4 {
235
235
  * address.correctForm(); // '192.0.2.42'
236
236
  */
237
237
  static fromArpa(arpaFormAddress) {
238
+ // A 15-character address, a "/32" prefix length and ".in-addr.arpa.": the
239
+ // longest name is 32 characters. Longer input is rejected before its
240
+ // labels are split, as the constructor does at its own limit.
241
+ const longest = constants.GROUPS * 4 - 1 + '/32'.length + '.in-addr.arpa.'.length;
242
+ if (arpaFormAddress.length > longest) {
243
+ throw new address_error_1.AddressError(`in-addr.arpa names are at most ${longest} characters.`);
244
+ }
238
245
  // remove an ending ".in-addr.arpa", in any case and with or without the
239
246
  // root dot, as Address6.fromArpa does for ".ip6.arpa"
240
247
  const leader = arpaFormAddress.replace(/(\.in-addr\.arpa)?\.?$/i, '');
@@ -1 +1 @@
1
- {"version":3,"file":"ipv4.js","sourceRoot":"","sources":["../src/ipv4.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-param-reassign */\n\nimport * as common from './common';\nimport * as constants from './v4/constants';\nimport { AddressError } from './address-error';\n\nconst isCorrect4 = common.isCorrect(constants.BITS);\n\n/**\n * Represents an IPv4 address\n * @param {string} address - An IPv4 address string\n */\nexport class Address4 {\n address: string;\n addressMinusSuffix: string = '';\n groups: number = constants.GROUPS;\n parsedAddress: string[] = [];\n parsedSubnet: string = '';\n subnet: string = '/32';\n subnetMask: number = 32;\n v4: boolean = true;\n private _binaryZeroPad?: string;\n\n constructor(address: string) {\n this.address = address;\n\n const subnet = constants.RE_SUBNET_STRING.exec(address);\n\n if (subnet) {\n this.parsedSubnet = subnet[0].replace('/', '');\n this.subnetMask = parseInt(this.parsedSubnet, 10);\n this.subnet = `/${this.subnetMask}`;\n\n if (this.subnetMask < 0 || this.subnetMask > constants.BITS) {\n throw new AddressError('Invalid subnet mask.');\n }\n\n address = address.replace(constants.RE_SUBNET_STRING, '');\n }\n\n // Four three-digit octets and three dots: the longest well-formed address\n // is 15 characters. Longer input is rejected before parsing, as Address6\n // does at its own limit.\n const longest = constants.GROUPS * 4 - 1;\n\n if (address.length > longest) {\n throw new AddressError(`IPv4 addresses are at most ${longest} characters.`);\n }\n\n this.addressMinusSuffix = address;\n\n this.parsedAddress = this.parse(address);\n }\n\n /**\n * Returns true if the given string is a valid IPv4 address (with optional\n * CIDR subnet), false otherwise. Host bits in the subnet portion are\n * allowed (e.g. `192.168.1.5/24` is valid); for strict network-address\n * validation compare `correctForm()` to `startAddress().correctForm()`,\n * or use `networkForm()`.\n */\n static isValid(address: string): boolean {\n try {\n // eslint-disable-next-line no-new\n new Address4(address);\n\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Parses an IPv4 address string into its four octet groups and stores the\n * result on `this.parsedAddress`. Called automatically by the constructor;\n * you typically don't need to call it directly. Throws `AddressError` if\n * the input is not a valid IPv4 address.\n */\n parse(address: string) {\n const groups = address.split('.');\n\n // Checked before the general match so the error names the actual problem.\n // Address6 rejects the same notation on its v4-in-v6 path.\n if (groups.some((group) => /^0\\d/.test(group))) {\n throw new AddressError(\"IPv4 addresses can't have leading zeroes.\");\n }\n\n if (!address.match(constants.RE_ADDRESS)) {\n throw new AddressError('Invalid IPv4 address.');\n }\n\n return groups;\n }\n\n /**\n * Returns the address in correct form: octets joined with `.` and any\n * leading zeros stripped (e.g. `192.168.1.1`). For IPv4 this matches the\n * canonical dotted-decimal representation.\n */\n correctForm(): string {\n return this.parsedAddress.map((part) => parseInt(part, 10)).join('.');\n }\n\n /**\n * Returns true if the address is correct, false otherwise\n * @returns {Boolean}\n */\n isCorrect = isCorrect4;\n\n /**\n * Construct an `Address4` from an address and a dotted-decimal subnet\n * mask given as separate strings (e.g. as returned by Node's\n * `os.networkInterfaces()`). Throws `AddressError` if the mask is\n * non-contiguous (e.g. `255.0.255.0`).\n * @example\n * var address = Address4.fromAddressAndMask('192.168.1.1', '255.255.255.0');\n * address.subnetMask; // 24\n */\n static fromAddressAndMask(address: string, mask: string): Address4 {\n const bits = common.prefixLengthFromMask(new Address4(mask).bigInt(), constants.BITS);\n return new Address4(`${address}/${bits}`);\n }\n\n /**\n * Construct an `Address4` from an address and a Cisco-style wildcard mask\n * given as separate strings (e.g. `0.0.0.255` for a `/24`). The wildcard\n * mask is the bitwise inverse of the subnet mask. Throws `AddressError`\n * if the mask is non-contiguous (e.g. `0.255.0.255`).\n * @example\n * var address = Address4.fromAddressAndWildcardMask('10.0.0.1', '0.0.0.255');\n * address.subnetMask; // 24\n */\n static fromAddressAndWildcardMask(address: string, wildcardMask: string): Address4 {\n const wildcard = new Address4(wildcardMask).bigInt();\n const allOnes = (BigInt(1) << BigInt(constants.BITS)) - BigInt(1);\n const mask = wildcard ^ allOnes;\n const bits = common.prefixLengthFromMask(mask, constants.BITS);\n return new Address4(`${address}/${bits}`);\n }\n\n /**\n * Construct an `Address4` from a wildcard pattern with trailing `*`\n * octets. The number of trailing wildcards determines the prefix\n * length: each `*` represents 8 bits.\n *\n * Only trailing whole-octet wildcards are supported. Partial-octet\n * wildcards (e.g. `192.168.0.1*`) and interior wildcards (e.g.\n * `192.*.0.1`) throw `AddressError`.\n * @example\n * Address4.fromWildcard('192.168.0.*').subnet; // '/24'\n * Address4.fromWildcard('192.168.*.*').subnet; // '/16'\n * Address4.fromWildcard('*.*.*.*').subnet; // '/0'\n */\n static fromWildcard(input: string): Address4 {\n const groups = input.split('.');\n\n if (groups.length !== constants.GROUPS) {\n throw new AddressError('Wildcard pattern must have 4 octets');\n }\n\n let firstWildcard = -1;\n\n for (let i = 0; i < groups.length; i++) {\n if (groups[i] === '*') {\n if (firstWildcard === -1) {\n firstWildcard = i;\n }\n } else if (firstWildcard !== -1) {\n throw new AddressError(\n 'Wildcard `*` must only appear in trailing octets (e.g. `192.168.0.*`)',\n );\n }\n }\n\n const trailing = firstWildcard === -1 ? 0 : groups.length - firstWildcard;\n const replaced = groups.map((g) => (g === '*' ? '0' : g));\n const subnetBits = constants.BITS - trailing * 8;\n\n return new Address4(`${replaced.join('.')}/${subnetBits}`);\n }\n\n /**\n * Converts a hex string to an IPv4 address object. Accepts 8 hex digits\n * with optional `:` separators (e.g. `'7f000001'` or `'7f:00:00:01'`).\n * Throws `AddressError` for any other length or for non-hex characters.\n * @param {string} hex - a hex string to convert\n * @returns {Address4}\n */\n static fromHex(hex: string): Address4 {\n const stripped = hex.replace(/:/g, '');\n\n if (!/^[0-9a-fA-F]{8}$/.test(stripped)) {\n throw new AddressError('IPv4 hex must be exactly 8 hex digits');\n }\n\n const groups = [];\n\n for (let i = 0; i < 8; i += 2) {\n groups.push(parseInt(stripped.slice(i, i + 2), 16));\n }\n\n return new Address4(groups.join('.'));\n }\n\n /**\n * Converts an integer into a IPv4 address object. The integer must be a\n * non-negative safe integer in the range `[0, 2**32 - 1]`; otherwise\n * `AddressError` is thrown.\n * @param {integer} integer - a number to convert\n * @returns {Address4}\n */\n static fromInteger(integer: number): Address4 {\n if (!Number.isInteger(integer) || integer < 0 || integer > 0xffffffff) {\n throw new AddressError('IPv4 integer must be in the range 0 to 2**32 - 1');\n }\n\n return Address4.fromHex(integer.toString(16).padStart(8, '0'));\n }\n\n /**\n * Return an address from in-addr.arpa form: the four octets reversed, with\n * or without the `.in-addr.arpa` suffix and root dot, in any case. Throws\n * `AddressError` unless the reversed labels form a valid IPv4 address, so\n * `fromArpa(x.reverseForm())` round-trips {@link reverseForm}.\n * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address\n * @returns {Adress4}\n * @example\n * var address = Address4.fromArpa('42.2.0.192.in-addr.arpa.')\n * address.correctForm(); // '192.0.2.42'\n */\n static fromArpa(arpaFormAddress: string): Address4 {\n // remove an ending \".in-addr.arpa\", in any case and with or without the\n // root dot, as Address6.fromArpa does for \".ip6.arpa\"\n const leader = arpaFormAddress.replace(/(\\.in-addr\\.arpa)?\\.?$/i, '');\n\n const address = leader.split('.').reverse().join('.');\n\n return new Address4(address);\n }\n\n /**\n * Converts an IPv4 address object to a hex string\n * @returns {String}\n */\n toHex(): string {\n return this.parsedAddress.map((part) => common.stringToPaddedHex(part)).join(':');\n }\n\n /**\n * Converts an IPv4 address object to an array of bytes.\n *\n * To get a Node.js `Buffer`, wrap the result: `Buffer.from(address.toArray())`.\n * @returns {Array}\n */\n toArray(): number[] {\n return this.parsedAddress.map((part) => parseInt(part, 10));\n }\n\n /**\n * Converts an IPv4 address object to an IPv6 address group\n * @returns {String}\n */\n toGroup6(): string {\n const output = [];\n let i;\n\n for (i = 0; i < constants.GROUPS; i += 2) {\n output.push(\n `${common.stringToPaddedHex(this.parsedAddress[i])}${common.stringToPaddedHex(\n this.parsedAddress[i + 1],\n )}`,\n );\n }\n\n return output.join(':');\n }\n\n /**\n * Returns the address as a `bigint`\n * @returns {bigint}\n */\n bigInt(): bigint {\n return BigInt(`0x${this.parsedAddress.map((n) => common.stringToPaddedHex(n)).join('')}`);\n }\n\n /**\n * Helper function getting start address.\n * @returns {bigint}\n */\n _startAddress(): bigint {\n return BigInt(`0b${this.mask() + '0'.repeat(constants.BITS - this.subnetMask)}`);\n }\n\n /**\n * The first address in the range given by this address' subnet.\n * Often referred to as the Network Address.\n * @returns {Address4}\n */\n startAddress(): Address4 {\n return Address4.fromBigInt(this._startAddress());\n }\n\n /**\n * The first host address in the range given by this address's subnet ie\n * the first address after the Network Address\n * @returns {Address4}\n */\n startAddressExclusive(): Address4 {\n const adjust = BigInt('1');\n return Address4.fromBigInt(this._startAddress() + adjust);\n }\n\n /**\n * Returns the address `n` addresses after this one (or before, when `n` is\n * negative), keeping this address's subnet mask. Throws `AddressError` when\n * the result would fall outside the IPv4 address space or `n` is not an\n * integer.\n * @param {number | bigint} n\n * @returns {Address4}\n * @example\n * new Address4('10.0.0.0/24').offset(1).correctForm(); // '10.0.0.1'\n */\n offset(n: number | bigint): Address4 {\n return Address4.fromBigInt(\n common.offsetBigInt(this.bigInt(), n, constants.BITS, 'IPv4'),\n ).withSubnetMask(this.subnetMask);\n }\n\n /**\n * Returns the network that follows this address's network: the address after\n * {@link endAddress}, with the same subnet mask. Throws `AddressError` when\n * this network is the last one in the address space.\n * @returns {Address4}\n * @example\n * new Address4('10.0.0.0/24').nextNetwork().networkForm(); // '10.0.1.0/24'\n */\n nextNetwork(): Address4 {\n return Address4.fromBigInt(\n common.offsetBigInt(this._endAddress(), 1, constants.BITS, 'IPv4'),\n ).withSubnetMask(this.subnetMask);\n }\n\n private withSubnetMask(subnetMask: number): Address4 {\n return new Address4(`${this.correctForm()}/${subnetMask}`);\n }\n\n /**\n * Helper function getting end address.\n * @returns {bigint}\n */\n _endAddress(): bigint {\n return BigInt(`0b${this.mask() + '1'.repeat(constants.BITS - this.subnetMask)}`);\n }\n\n /**\n * The last address in the range given by this address' subnet\n * Often referred to as the Broadcast\n * @returns {Address4}\n */\n endAddress(): Address4 {\n return Address4.fromBigInt(this._endAddress());\n }\n\n /**\n * The last host address in the range given by this address's subnet ie\n * the last address prior to the Broadcast Address\n * @returns {Address4}\n */\n endAddressExclusive(): Address4 {\n const adjust = BigInt('1');\n return Address4.fromBigInt(this._endAddress() - adjust);\n }\n\n /**\n * The dotted-decimal form of the subnet mask, e.g. `255.255.240.0` for\n * a `/20`. Returns an `Address4`; call `.correctForm()` for the string.\n * @returns {Address4}\n */\n subnetMaskAddress(): Address4 {\n return Address4.fromBigInt(\n BigInt(`0b${'1'.repeat(this.subnetMask)}${'0'.repeat(constants.BITS - this.subnetMask)}`),\n );\n }\n\n /**\n * The Cisco-style wildcard mask, e.g. `0.0.0.255` for a `/24`. This is\n * the bitwise inverse of `subnetMaskAddress()`. Returns an `Address4`;\n * call `.correctForm()` for the string.\n * @returns {Address4}\n */\n wildcardMask(): Address4 {\n return Address4.fromBigInt(\n BigInt(`0b${'0'.repeat(this.subnetMask)}${'1'.repeat(constants.BITS - this.subnetMask)}`),\n );\n }\n\n /**\n * The network address in CIDR string form, e.g. `192.168.1.0/24` for\n * `192.168.1.5/24`. For an address with no explicit subnet the prefix is\n * `/32`, e.g. `networkForm()` on `192.168.1.5` returns `192.168.1.5/32`.\n * @returns {string}\n */\n networkForm(): string {\n return `${this.startAddress().correctForm()}/${this.subnetMask}`;\n }\n\n /**\n * Converts a BigInt to a v4 address object. The value must be in the\n * range `[0, 2**32 - 1]`; otherwise `AddressError` is thrown.\n * @param {bigint} bigInt - a BigInt to convert\n * @returns {Address4}\n */\n static fromBigInt(bigInt: bigint): Address4 {\n if (bigInt < BigInt(0) || bigInt > BigInt(0xffffffff)) {\n throw new AddressError('IPv4 BigInt must be in the range 0 to 2**32 - 1');\n }\n\n return Address4.fromHex(bigInt.toString(16).padStart(8, '0'));\n }\n\n /**\n * Convert a byte array to an Address4 object. Throws `AddressError` unless\n * given exactly 4 integers from 0 to 255. Signed bytes are rejected, so\n * this differs from `Address6.fromByteArray`, which folds them; the two\n * contracts converge on this stricter form in the next major version.\n *\n * To convert from a Node.js `Buffer`, spread it: `Address4.fromByteArray([...buf])`.\n * @param {Array<number>} bytes - an array of 4 bytes (0-255)\n * @returns {Address4}\n */\n static fromByteArray(bytes: Array<number>): Address4 {\n common.assertByteArray(bytes, 4, 'IPv4', 0);\n\n return this.fromUnsignedByteArray(bytes);\n }\n\n /**\n * Convert an unsigned byte array to an Address4 object. Throws\n * `AddressError` unless given exactly 4 bytes, and rejects values outside\n * 0 to 255 when parsing the resulting address.\n *\n * To convert from a Node.js `Buffer`, spread it:\n * `Address4.fromUnsignedByteArray([...buf])`.\n * @param {Array<number>} bytes - an array of 4 unsigned bytes (0-255)\n * @returns {Address4}\n */\n static fromUnsignedByteArray(bytes: Array<number>): Address4 {\n if (bytes.length !== 4) {\n throw new AddressError('IPv4 addresses require exactly 4 bytes');\n }\n\n const address = bytes.join('.');\n return new Address4(address);\n }\n\n /**\n * Returns the first n bits of the address, defaulting to the\n * subnet mask\n * @returns {String}\n */\n mask(mask?: number): string {\n if (mask === undefined) {\n mask = this.subnetMask;\n }\n\n return this.getBitsBase2(0, mask);\n }\n\n /**\n * Returns the bits in the given range as a base-2 string\n * @returns {string}\n */\n getBitsBase2(start: number, end: number): string {\n return this.binaryZeroPad().slice(start, end);\n }\n\n /**\n * Return the reversed in-addr.arpa form of the address, e.g.\n * `42.2.0.192.in-addr.arpa.` for `192.0.2.42`.\n * @param {Object} options\n * @param {boolean} options.omitSuffix - omit the \"in-addr.arpa\" suffix\n * @returns {String}\n */\n reverseForm(options?: common.ReverseFormOptions): string {\n if (!options) {\n options = {};\n }\n\n const reversed = this.correctForm().split('.').reverse().join('.');\n\n if (options.omitSuffix) {\n return reversed;\n }\n\n return `${reversed}.in-addr.arpa.`;\n }\n\n /**\n * Returns true if the given address is in the subnet of the current address.\n * An `Address6` is never in the subnet of an `Address4`; convert with\n * `to4()` or `Address6.fromAddress4()` to compare across families.\n * @returns {boolean}\n */\n isInSubnet = common.isInSubnet;\n\n /**\n * Returns true if this address's host bits fall inside the given subnet,\n * ignoring this address's own subnet mask. Prefer this over `isInSubnet`\n * when classifying a single address, so the answer doesn't change with the\n * CIDR suffix the caller happened to write — notably when the address came\n * from untrusted input and the result backs a trust-boundary decision.\n * An `Address6` is never in the subnet of an `Address4`; convert with\n * `to4()` or `Address6.fromAddress4()` to compare across families.\n * @returns {boolean}\n */\n isHostInSubnet = common.isHostInSubnet;\n\n /**\n * Returns true if the given address is a multicast address\n * @returns {boolean}\n */\n isMulticast(): boolean {\n return this.isHostInSubnet(MULTICAST_V4);\n }\n\n /**\n * Returns true if the address is in one of the [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private address ranges (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`).\n * @returns {boolean}\n */\n isPrivate(): boolean {\n return PRIVATE_V4.some((subnet) => this.isHostInSubnet(subnet));\n }\n\n /**\n * Returns true if the address is in the loopback range `127.0.0.0/8` ([RFC 1122](https://datatracker.ietf.org/doc/html/rfc1122)).\n * @returns {boolean}\n */\n isLoopback(): boolean {\n return this.isHostInSubnet(LOOPBACK_V4);\n }\n\n /**\n * Returns true if the address is in the link-local range `169.254.0.0/16` ([RFC 3927](https://datatracker.ietf.org/doc/html/rfc3927)).\n * @returns {boolean}\n */\n isLinkLocal(): boolean {\n return this.isHostInSubnet(LINK_LOCAL_V4);\n }\n\n /**\n * Returns true if the address is the unspecified address `0.0.0.0`.\n * @returns {boolean}\n */\n isUnspecified(): boolean {\n return this.isHostInSubnet(UNSPECIFIED_V4);\n }\n\n /**\n * Returns true if the address is the limited broadcast address `255.255.255.255` ([RFC 919](https://datatracker.ietf.org/doc/html/rfc919)).\n * @returns {boolean}\n */\n isBroadcast(): boolean {\n return this.isHostInSubnet(BROADCAST_V4);\n }\n\n /**\n * Returns true if the address is in the carrier-grade NAT range `100.64.0.0/10` ([RFC 6598](https://datatracker.ietf.org/doc/html/rfc6598)).\n * @returns {boolean}\n */\n isCGNAT(): boolean {\n return this.isHostInSubnet(CGNAT_V4);\n }\n\n /**\n * Returns true if the address is in one of the documentation ranges\n * `192.0.2.0/24`, `198.51.100.0/24`, or `203.0.113.0/24` ([RFC 5737](https://datatracker.ietf.org/doc/html/rfc5737)).\n * @returns {boolean}\n */\n isDocumentation(): boolean {\n return DOCUMENTATION_V4.some((subnet) => this.isHostInSubnet(subnet));\n }\n\n /**\n * Returns true if the address is in the benchmarking range `198.18.0.0/15` ([RFC 2544](https://datatracker.ietf.org/doc/html/rfc2544)).\n * @returns {boolean}\n */\n isBenchmarking(): boolean {\n return this.isHostInSubnet(BENCHMARKING_V4);\n }\n\n /**\n * Returns true if the address is in the reserved range `240.0.0.0/4` ([RFC 1112](https://datatracker.ietf.org/doc/html/rfc1112)),\n * which includes the limited broadcast address.\n * @returns {boolean}\n */\n isReserved(): boolean {\n return this.isHostInSubnet(RESERVED_V4);\n }\n\n /**\n * Returns true if the address is globally reachable: not multicast, and not\n * in any block the [IANA IPv4 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv4-special-registry/)\n * marks as not globally reachable. That covers everything the individual\n * classifiers name (private, loopback, link-local, CGNAT, unspecified,\n * broadcast, documentation, benchmarking, reserved) and the blocks they do\n * not, such as `0.0.0.0/8` and the IETF protocol assignments in\n * `192.0.0.0/24`. This is the single predicate to use where a request must\n * not reach an internal or special-purpose destination; see SECURITY.md.\n * @returns {boolean}\n */\n isGlobal(): boolean {\n return !this.isMulticast() && common.isGloballyReachable.call(this, SPECIAL_PURPOSE_V4);\n }\n\n /**\n * Returns a zero-padded base-2 string representation of the address\n * @returns {string}\n */\n binaryZeroPad(): string {\n if (this._binaryZeroPad === undefined) {\n this._binaryZeroPad = this.bigInt().toString(2).padStart(constants.BITS, '0');\n }\n return this._binaryZeroPad;\n }\n\n /**\n * Groups an IPv4 address for inclusion at the end of an IPv6 address.\n *\n * Returns an HTML fragment: each half of the address is wrapped in a\n * `<span>` carrying the group classes an address-inspector UI hovers on.\n * The address content is HTML-escaped; anything you concatenate around it\n * is your responsibility.\n * @returns {String}\n */\n groupForV6(): string {\n const segments = this.parsedAddress;\n\n return this.correctForm().replace(\n constants.RE_ADDRESS,\n `<span class=\"hover-group group-v4 group-6\">${segments\n .slice(0, 2)\n .join('.')}</span>.<span class=\"hover-group group-v4 group-7\">${segments\n .slice(2, 4)\n .join('.')}</span>`,\n );\n }\n}\n\nconst MULTICAST_V4 = new Address4('224.0.0.0/4');\nconst PRIVATE_V4 = [\n new Address4('10.0.0.0/8'),\n new Address4('172.16.0.0/12'),\n new Address4('192.168.0.0/16'),\n];\nconst LOOPBACK_V4 = new Address4('127.0.0.0/8');\nconst LINK_LOCAL_V4 = new Address4('169.254.0.0/16');\nconst UNSPECIFIED_V4 = new Address4('0.0.0.0/32');\nconst BROADCAST_V4 = new Address4('255.255.255.255/32');\nconst CGNAT_V4 = new Address4('100.64.0.0/10');\nconst DOCUMENTATION_V4 = [\n new Address4('192.0.2.0/24'),\n new Address4('198.51.100.0/24'),\n new Address4('203.0.113.0/24'),\n];\nconst BENCHMARKING_V4 = new Address4('198.18.0.0/15');\nconst RESERVED_V4 = new Address4('240.0.0.0/4');\nconst SPECIAL_PURPOSE_V4 = constants.SPECIAL_PURPOSE.map(([cidr, , reachable]) => ({\n subnet: new Address4(cidr),\n reachable,\n}));\n"]}
1
+ {"version":3,"file":"ipv4.js","sourceRoot":"","sources":["../src/ipv4.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-param-reassign */\n\nimport * as common from './common';\nimport * as constants from './v4/constants';\nimport { AddressError } from './address-error';\n\nconst isCorrect4 = common.isCorrect(constants.BITS);\n\n/**\n * Represents an IPv4 address\n * @param {string} address - An IPv4 address string\n */\nexport class Address4 {\n address: string;\n addressMinusSuffix: string = '';\n groups: number = constants.GROUPS;\n parsedAddress: string[] = [];\n parsedSubnet: string = '';\n subnet: string = '/32';\n subnetMask: number = 32;\n v4: boolean = true;\n private _binaryZeroPad?: string;\n\n constructor(address: string) {\n this.address = address;\n\n const subnet = constants.RE_SUBNET_STRING.exec(address);\n\n if (subnet) {\n this.parsedSubnet = subnet[0].replace('/', '');\n this.subnetMask = parseInt(this.parsedSubnet, 10);\n this.subnet = `/${this.subnetMask}`;\n\n if (this.subnetMask < 0 || this.subnetMask > constants.BITS) {\n throw new AddressError('Invalid subnet mask.');\n }\n\n address = address.replace(constants.RE_SUBNET_STRING, '');\n }\n\n // Four three-digit octets and three dots: the longest well-formed address\n // is 15 characters. Longer input is rejected before parsing, as Address6\n // does at its own limit.\n const longest = constants.GROUPS * 4 - 1;\n\n if (address.length > longest) {\n throw new AddressError(`IPv4 addresses are at most ${longest} characters.`);\n }\n\n this.addressMinusSuffix = address;\n\n this.parsedAddress = this.parse(address);\n }\n\n /**\n * Returns true if the given string is a valid IPv4 address (with optional\n * CIDR subnet), false otherwise. Host bits in the subnet portion are\n * allowed (e.g. `192.168.1.5/24` is valid); for strict network-address\n * validation compare `correctForm()` to `startAddress().correctForm()`,\n * or use `networkForm()`.\n */\n static isValid(address: string): boolean {\n try {\n // eslint-disable-next-line no-new\n new Address4(address);\n\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Parses an IPv4 address string into its four octet groups and stores the\n * result on `this.parsedAddress`. Called automatically by the constructor;\n * you typically don't need to call it directly. Throws `AddressError` if\n * the input is not a valid IPv4 address.\n */\n parse(address: string) {\n const groups = address.split('.');\n\n // Checked before the general match so the error names the actual problem.\n // Address6 rejects the same notation on its v4-in-v6 path.\n if (groups.some((group) => /^0\\d/.test(group))) {\n throw new AddressError(\"IPv4 addresses can't have leading zeroes.\");\n }\n\n if (!address.match(constants.RE_ADDRESS)) {\n throw new AddressError('Invalid IPv4 address.');\n }\n\n return groups;\n }\n\n /**\n * Returns the address in correct form: octets joined with `.` and any\n * leading zeros stripped (e.g. `192.168.1.1`). For IPv4 this matches the\n * canonical dotted-decimal representation.\n */\n correctForm(): string {\n return this.parsedAddress.map((part) => parseInt(part, 10)).join('.');\n }\n\n /**\n * Returns true if the address is correct, false otherwise\n * @returns {Boolean}\n */\n isCorrect = isCorrect4;\n\n /**\n * Construct an `Address4` from an address and a dotted-decimal subnet\n * mask given as separate strings (e.g. as returned by Node's\n * `os.networkInterfaces()`). Throws `AddressError` if the mask is\n * non-contiguous (e.g. `255.0.255.0`).\n * @example\n * var address = Address4.fromAddressAndMask('192.168.1.1', '255.255.255.0');\n * address.subnetMask; // 24\n */\n static fromAddressAndMask(address: string, mask: string): Address4 {\n const bits = common.prefixLengthFromMask(new Address4(mask).bigInt(), constants.BITS);\n return new Address4(`${address}/${bits}`);\n }\n\n /**\n * Construct an `Address4` from an address and a Cisco-style wildcard mask\n * given as separate strings (e.g. `0.0.0.255` for a `/24`). The wildcard\n * mask is the bitwise inverse of the subnet mask. Throws `AddressError`\n * if the mask is non-contiguous (e.g. `0.255.0.255`).\n * @example\n * var address = Address4.fromAddressAndWildcardMask('10.0.0.1', '0.0.0.255');\n * address.subnetMask; // 24\n */\n static fromAddressAndWildcardMask(address: string, wildcardMask: string): Address4 {\n const wildcard = new Address4(wildcardMask).bigInt();\n const allOnes = (BigInt(1) << BigInt(constants.BITS)) - BigInt(1);\n const mask = wildcard ^ allOnes;\n const bits = common.prefixLengthFromMask(mask, constants.BITS);\n return new Address4(`${address}/${bits}`);\n }\n\n /**\n * Construct an `Address4` from a wildcard pattern with trailing `*`\n * octets. The number of trailing wildcards determines the prefix\n * length: each `*` represents 8 bits.\n *\n * Only trailing whole-octet wildcards are supported. Partial-octet\n * wildcards (e.g. `192.168.0.1*`) and interior wildcards (e.g.\n * `192.*.0.1`) throw `AddressError`.\n * @example\n * Address4.fromWildcard('192.168.0.*').subnet; // '/24'\n * Address4.fromWildcard('192.168.*.*').subnet; // '/16'\n * Address4.fromWildcard('*.*.*.*').subnet; // '/0'\n */\n static fromWildcard(input: string): Address4 {\n const groups = input.split('.');\n\n if (groups.length !== constants.GROUPS) {\n throw new AddressError('Wildcard pattern must have 4 octets');\n }\n\n let firstWildcard = -1;\n\n for (let i = 0; i < groups.length; i++) {\n if (groups[i] === '*') {\n if (firstWildcard === -1) {\n firstWildcard = i;\n }\n } else if (firstWildcard !== -1) {\n throw new AddressError(\n 'Wildcard `*` must only appear in trailing octets (e.g. `192.168.0.*`)',\n );\n }\n }\n\n const trailing = firstWildcard === -1 ? 0 : groups.length - firstWildcard;\n const replaced = groups.map((g) => (g === '*' ? '0' : g));\n const subnetBits = constants.BITS - trailing * 8;\n\n return new Address4(`${replaced.join('.')}/${subnetBits}`);\n }\n\n /**\n * Converts a hex string to an IPv4 address object. Accepts 8 hex digits\n * with optional `:` separators (e.g. `'7f000001'` or `'7f:00:00:01'`).\n * Throws `AddressError` for any other length or for non-hex characters.\n * @param {string} hex - a hex string to convert\n * @returns {Address4}\n */\n static fromHex(hex: string): Address4 {\n const stripped = hex.replace(/:/g, '');\n\n if (!/^[0-9a-fA-F]{8}$/.test(stripped)) {\n throw new AddressError('IPv4 hex must be exactly 8 hex digits');\n }\n\n const groups = [];\n\n for (let i = 0; i < 8; i += 2) {\n groups.push(parseInt(stripped.slice(i, i + 2), 16));\n }\n\n return new Address4(groups.join('.'));\n }\n\n /**\n * Converts an integer into a IPv4 address object. The integer must be a\n * non-negative safe integer in the range `[0, 2**32 - 1]`; otherwise\n * `AddressError` is thrown.\n * @param {integer} integer - a number to convert\n * @returns {Address4}\n */\n static fromInteger(integer: number): Address4 {\n if (!Number.isInteger(integer) || integer < 0 || integer > 0xffffffff) {\n throw new AddressError('IPv4 integer must be in the range 0 to 2**32 - 1');\n }\n\n return Address4.fromHex(integer.toString(16).padStart(8, '0'));\n }\n\n /**\n * Return an address from in-addr.arpa form: the four octets reversed, with\n * or without the `.in-addr.arpa` suffix and root dot, in any case. Throws\n * `AddressError` unless the reversed labels form a valid IPv4 address, so\n * `fromArpa(x.reverseForm())` round-trips {@link reverseForm}.\n * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address\n * @returns {Adress4}\n * @example\n * var address = Address4.fromArpa('42.2.0.192.in-addr.arpa.')\n * address.correctForm(); // '192.0.2.42'\n */\n static fromArpa(arpaFormAddress: string): Address4 {\n // A 15-character address, a \"/32\" prefix length and \".in-addr.arpa.\": the\n // longest name is 32 characters. Longer input is rejected before its\n // labels are split, as the constructor does at its own limit.\n const longest = constants.GROUPS * 4 - 1 + '/32'.length + '.in-addr.arpa.'.length;\n\n if (arpaFormAddress.length > longest) {\n throw new AddressError(`in-addr.arpa names are at most ${longest} characters.`);\n }\n\n // remove an ending \".in-addr.arpa\", in any case and with or without the\n // root dot, as Address6.fromArpa does for \".ip6.arpa\"\n const leader = arpaFormAddress.replace(/(\\.in-addr\\.arpa)?\\.?$/i, '');\n\n const address = leader.split('.').reverse().join('.');\n\n return new Address4(address);\n }\n\n /**\n * Converts an IPv4 address object to a hex string\n * @returns {String}\n */\n toHex(): string {\n return this.parsedAddress.map((part) => common.stringToPaddedHex(part)).join(':');\n }\n\n /**\n * Converts an IPv4 address object to an array of bytes.\n *\n * To get a Node.js `Buffer`, wrap the result: `Buffer.from(address.toArray())`.\n * @returns {Array}\n */\n toArray(): number[] {\n return this.parsedAddress.map((part) => parseInt(part, 10));\n }\n\n /**\n * Converts an IPv4 address object to an IPv6 address group\n * @returns {String}\n */\n toGroup6(): string {\n const output = [];\n let i;\n\n for (i = 0; i < constants.GROUPS; i += 2) {\n output.push(\n `${common.stringToPaddedHex(this.parsedAddress[i])}${common.stringToPaddedHex(\n this.parsedAddress[i + 1],\n )}`,\n );\n }\n\n return output.join(':');\n }\n\n /**\n * Returns the address as a `bigint`\n * @returns {bigint}\n */\n bigInt(): bigint {\n return BigInt(`0x${this.parsedAddress.map((n) => common.stringToPaddedHex(n)).join('')}`);\n }\n\n /**\n * Helper function getting start address.\n * @returns {bigint}\n */\n _startAddress(): bigint {\n return BigInt(`0b${this.mask() + '0'.repeat(constants.BITS - this.subnetMask)}`);\n }\n\n /**\n * The first address in the range given by this address' subnet.\n * Often referred to as the Network Address.\n * @returns {Address4}\n */\n startAddress(): Address4 {\n return Address4.fromBigInt(this._startAddress());\n }\n\n /**\n * The first host address in the range given by this address's subnet ie\n * the first address after the Network Address\n * @returns {Address4}\n */\n startAddressExclusive(): Address4 {\n const adjust = BigInt('1');\n return Address4.fromBigInt(this._startAddress() + adjust);\n }\n\n /**\n * Returns the address `n` addresses after this one (or before, when `n` is\n * negative), keeping this address's subnet mask. Throws `AddressError` when\n * the result would fall outside the IPv4 address space or `n` is not an\n * integer.\n * @param {number | bigint} n\n * @returns {Address4}\n * @example\n * new Address4('10.0.0.0/24').offset(1).correctForm(); // '10.0.0.1'\n */\n offset(n: number | bigint): Address4 {\n return Address4.fromBigInt(\n common.offsetBigInt(this.bigInt(), n, constants.BITS, 'IPv4'),\n ).withSubnetMask(this.subnetMask);\n }\n\n /**\n * Returns the network that follows this address's network: the address after\n * {@link endAddress}, with the same subnet mask. Throws `AddressError` when\n * this network is the last one in the address space.\n * @returns {Address4}\n * @example\n * new Address4('10.0.0.0/24').nextNetwork().networkForm(); // '10.0.1.0/24'\n */\n nextNetwork(): Address4 {\n return Address4.fromBigInt(\n common.offsetBigInt(this._endAddress(), 1, constants.BITS, 'IPv4'),\n ).withSubnetMask(this.subnetMask);\n }\n\n private withSubnetMask(subnetMask: number): Address4 {\n return new Address4(`${this.correctForm()}/${subnetMask}`);\n }\n\n /**\n * Helper function getting end address.\n * @returns {bigint}\n */\n _endAddress(): bigint {\n return BigInt(`0b${this.mask() + '1'.repeat(constants.BITS - this.subnetMask)}`);\n }\n\n /**\n * The last address in the range given by this address' subnet\n * Often referred to as the Broadcast\n * @returns {Address4}\n */\n endAddress(): Address4 {\n return Address4.fromBigInt(this._endAddress());\n }\n\n /**\n * The last host address in the range given by this address's subnet ie\n * the last address prior to the Broadcast Address\n * @returns {Address4}\n */\n endAddressExclusive(): Address4 {\n const adjust = BigInt('1');\n return Address4.fromBigInt(this._endAddress() - adjust);\n }\n\n /**\n * The dotted-decimal form of the subnet mask, e.g. `255.255.240.0` for\n * a `/20`. Returns an `Address4`; call `.correctForm()` for the string.\n * @returns {Address4}\n */\n subnetMaskAddress(): Address4 {\n return Address4.fromBigInt(\n BigInt(`0b${'1'.repeat(this.subnetMask)}${'0'.repeat(constants.BITS - this.subnetMask)}`),\n );\n }\n\n /**\n * The Cisco-style wildcard mask, e.g. `0.0.0.255` for a `/24`. This is\n * the bitwise inverse of `subnetMaskAddress()`. Returns an `Address4`;\n * call `.correctForm()` for the string.\n * @returns {Address4}\n */\n wildcardMask(): Address4 {\n return Address4.fromBigInt(\n BigInt(`0b${'0'.repeat(this.subnetMask)}${'1'.repeat(constants.BITS - this.subnetMask)}`),\n );\n }\n\n /**\n * The network address in CIDR string form, e.g. `192.168.1.0/24` for\n * `192.168.1.5/24`. For an address with no explicit subnet the prefix is\n * `/32`, e.g. `networkForm()` on `192.168.1.5` returns `192.168.1.5/32`.\n * @returns {string}\n */\n networkForm(): string {\n return `${this.startAddress().correctForm()}/${this.subnetMask}`;\n }\n\n /**\n * Converts a BigInt to a v4 address object. The value must be in the\n * range `[0, 2**32 - 1]`; otherwise `AddressError` is thrown.\n * @param {bigint} bigInt - a BigInt to convert\n * @returns {Address4}\n */\n static fromBigInt(bigInt: bigint): Address4 {\n if (bigInt < BigInt(0) || bigInt > BigInt(0xffffffff)) {\n throw new AddressError('IPv4 BigInt must be in the range 0 to 2**32 - 1');\n }\n\n return Address4.fromHex(bigInt.toString(16).padStart(8, '0'));\n }\n\n /**\n * Convert a byte array to an Address4 object. Throws `AddressError` unless\n * given exactly 4 integers from 0 to 255. Signed bytes are rejected, so\n * this differs from `Address6.fromByteArray`, which folds them; the two\n * contracts converge on this stricter form in the next major version.\n *\n * To convert from a Node.js `Buffer`, spread it: `Address4.fromByteArray([...buf])`.\n * @param {Array<number>} bytes - an array of 4 bytes (0-255)\n * @returns {Address4}\n */\n static fromByteArray(bytes: Array<number>): Address4 {\n common.assertByteArray(bytes, 4, 'IPv4', 0);\n\n return this.fromUnsignedByteArray(bytes);\n }\n\n /**\n * Convert an unsigned byte array to an Address4 object. Throws\n * `AddressError` unless given exactly 4 bytes, and rejects values outside\n * 0 to 255 when parsing the resulting address.\n *\n * To convert from a Node.js `Buffer`, spread it:\n * `Address4.fromUnsignedByteArray([...buf])`.\n * @param {Array<number>} bytes - an array of 4 unsigned bytes (0-255)\n * @returns {Address4}\n */\n static fromUnsignedByteArray(bytes: Array<number>): Address4 {\n if (bytes.length !== 4) {\n throw new AddressError('IPv4 addresses require exactly 4 bytes');\n }\n\n const address = bytes.join('.');\n return new Address4(address);\n }\n\n /**\n * Returns the first n bits of the address, defaulting to the\n * subnet mask\n * @returns {String}\n */\n mask(mask?: number): string {\n if (mask === undefined) {\n mask = this.subnetMask;\n }\n\n return this.getBitsBase2(0, mask);\n }\n\n /**\n * Returns the bits in the given range as a base-2 string\n * @returns {string}\n */\n getBitsBase2(start: number, end: number): string {\n return this.binaryZeroPad().slice(start, end);\n }\n\n /**\n * Return the reversed in-addr.arpa form of the address, e.g.\n * `42.2.0.192.in-addr.arpa.` for `192.0.2.42`.\n * @param {Object} options\n * @param {boolean} options.omitSuffix - omit the \"in-addr.arpa\" suffix\n * @returns {String}\n */\n reverseForm(options?: common.ReverseFormOptions): string {\n if (!options) {\n options = {};\n }\n\n const reversed = this.correctForm().split('.').reverse().join('.');\n\n if (options.omitSuffix) {\n return reversed;\n }\n\n return `${reversed}.in-addr.arpa.`;\n }\n\n /**\n * Returns true if the given address is in the subnet of the current address.\n * An `Address6` is never in the subnet of an `Address4`; convert with\n * `to4()` or `Address6.fromAddress4()` to compare across families.\n * @returns {boolean}\n */\n isInSubnet = common.isInSubnet;\n\n /**\n * Returns true if this address's host bits fall inside the given subnet,\n * ignoring this address's own subnet mask. Prefer this over `isInSubnet`\n * when classifying a single address, so the answer doesn't change with the\n * CIDR suffix the caller happened to write — notably when the address came\n * from untrusted input and the result backs a trust-boundary decision.\n * An `Address6` is never in the subnet of an `Address4`; convert with\n * `to4()` or `Address6.fromAddress4()` to compare across families.\n * @returns {boolean}\n */\n isHostInSubnet = common.isHostInSubnet;\n\n /**\n * Returns true if the given address is a multicast address\n * @returns {boolean}\n */\n isMulticast(): boolean {\n return this.isHostInSubnet(MULTICAST_V4);\n }\n\n /**\n * Returns true if the address is in one of the [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private address ranges (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`).\n * @returns {boolean}\n */\n isPrivate(): boolean {\n return PRIVATE_V4.some((subnet) => this.isHostInSubnet(subnet));\n }\n\n /**\n * Returns true if the address is in the loopback range `127.0.0.0/8` ([RFC 1122](https://datatracker.ietf.org/doc/html/rfc1122)).\n * @returns {boolean}\n */\n isLoopback(): boolean {\n return this.isHostInSubnet(LOOPBACK_V4);\n }\n\n /**\n * Returns true if the address is in the link-local range `169.254.0.0/16` ([RFC 3927](https://datatracker.ietf.org/doc/html/rfc3927)).\n * @returns {boolean}\n */\n isLinkLocal(): boolean {\n return this.isHostInSubnet(LINK_LOCAL_V4);\n }\n\n /**\n * Returns true if the address is the unspecified address `0.0.0.0`.\n * @returns {boolean}\n */\n isUnspecified(): boolean {\n return this.isHostInSubnet(UNSPECIFIED_V4);\n }\n\n /**\n * Returns true if the address is the limited broadcast address `255.255.255.255` ([RFC 919](https://datatracker.ietf.org/doc/html/rfc919)).\n * @returns {boolean}\n */\n isBroadcast(): boolean {\n return this.isHostInSubnet(BROADCAST_V4);\n }\n\n /**\n * Returns true if the address is in the carrier-grade NAT range `100.64.0.0/10` ([RFC 6598](https://datatracker.ietf.org/doc/html/rfc6598)).\n * @returns {boolean}\n */\n isCGNAT(): boolean {\n return this.isHostInSubnet(CGNAT_V4);\n }\n\n /**\n * Returns true if the address is in one of the documentation ranges\n * `192.0.2.0/24`, `198.51.100.0/24`, or `203.0.113.0/24` ([RFC 5737](https://datatracker.ietf.org/doc/html/rfc5737)).\n * @returns {boolean}\n */\n isDocumentation(): boolean {\n return DOCUMENTATION_V4.some((subnet) => this.isHostInSubnet(subnet));\n }\n\n /**\n * Returns true if the address is in the benchmarking range `198.18.0.0/15` ([RFC 2544](https://datatracker.ietf.org/doc/html/rfc2544)).\n * @returns {boolean}\n */\n isBenchmarking(): boolean {\n return this.isHostInSubnet(BENCHMARKING_V4);\n }\n\n /**\n * Returns true if the address is in the reserved range `240.0.0.0/4` ([RFC 1112](https://datatracker.ietf.org/doc/html/rfc1112)),\n * which includes the limited broadcast address.\n * @returns {boolean}\n */\n isReserved(): boolean {\n return this.isHostInSubnet(RESERVED_V4);\n }\n\n /**\n * Returns true if the address is globally reachable: not multicast, and not\n * in any block the [IANA IPv4 Special-Purpose Address Registry](https://www.iana.org/assignments/iana-ipv4-special-registry/)\n * marks as not globally reachable. That covers everything the individual\n * classifiers name (private, loopback, link-local, CGNAT, unspecified,\n * broadcast, documentation, benchmarking, reserved) and the blocks they do\n * not, such as `0.0.0.0/8` and the IETF protocol assignments in\n * `192.0.0.0/24`. This is the single predicate to use where a request must\n * not reach an internal or special-purpose destination; see SECURITY.md.\n * @returns {boolean}\n */\n isGlobal(): boolean {\n return !this.isMulticast() && common.isGloballyReachable.call(this, SPECIAL_PURPOSE_V4);\n }\n\n /**\n * Returns a zero-padded base-2 string representation of the address\n * @returns {string}\n */\n binaryZeroPad(): string {\n if (this._binaryZeroPad === undefined) {\n this._binaryZeroPad = this.bigInt().toString(2).padStart(constants.BITS, '0');\n }\n return this._binaryZeroPad;\n }\n\n /**\n * Groups an IPv4 address for inclusion at the end of an IPv6 address.\n *\n * Returns an HTML fragment: each half of the address is wrapped in a\n * `<span>` carrying the group classes an address-inspector UI hovers on.\n * The address content is HTML-escaped; anything you concatenate around it\n * is your responsibility.\n * @returns {String}\n */\n groupForV6(): string {\n const segments = this.parsedAddress;\n\n return this.correctForm().replace(\n constants.RE_ADDRESS,\n `<span class=\"hover-group group-v4 group-6\">${segments\n .slice(0, 2)\n .join('.')}</span>.<span class=\"hover-group group-v4 group-7\">${segments\n .slice(2, 4)\n .join('.')}</span>`,\n );\n }\n}\n\nconst MULTICAST_V4 = new Address4('224.0.0.0/4');\nconst PRIVATE_V4 = [\n new Address4('10.0.0.0/8'),\n new Address4('172.16.0.0/12'),\n new Address4('192.168.0.0/16'),\n];\nconst LOOPBACK_V4 = new Address4('127.0.0.0/8');\nconst LINK_LOCAL_V4 = new Address4('169.254.0.0/16');\nconst UNSPECIFIED_V4 = new Address4('0.0.0.0/32');\nconst BROADCAST_V4 = new Address4('255.255.255.255/32');\nconst CGNAT_V4 = new Address4('100.64.0.0/10');\nconst DOCUMENTATION_V4 = [\n new Address4('192.0.2.0/24'),\n new Address4('198.51.100.0/24'),\n new Address4('203.0.113.0/24'),\n];\nconst BENCHMARKING_V4 = new Address4('198.18.0.0/15');\nconst RESERVED_V4 = new Address4('240.0.0.0/4');\nconst SPECIAL_PURPOSE_V4 = constants.SPECIAL_PURPOSE.map(([cidr, , reachable]) => ({\n subnet: new Address4(cidr),\n reachable,\n}));\n"]}
@@ -16,7 +16,7 @@
16
16
  "bigint",
17
17
  "browser"
18
18
  ],
19
- "version": "10.7.2",
19
+ "version": "10.7.3",
20
20
  "author": "Beau Gunderson <beau@beaugunderson.com> (https://beaugunderson.com/)",
21
21
  "license": "MIT",
22
22
  "main": "dist/ip-address.js",
@@ -53,7 +53,8 @@ diagnosticsChannel.channel('undici:request:bodySent').subscribe(({ request }) =>
53
53
 
54
54
  ## `undici:request:headers`
55
55
 
56
- This message is published after the response headers have been received.
56
+ This message is published after the response headers have been received. This includes a successful CONNECT or
57
+ protocol upgrade response.
57
58
 
58
59
  ```js
59
60
  import diagnosticsChannel from 'diagnostics_channel'
@@ -82,6 +83,7 @@ diagnosticsChannel.channel('undici:request:bodyChunkReceived').subscribe(({ requ
82
83
  ## `undici:request:trailers`
83
84
 
84
85
  This message is published after the response body and trailers have been received, i.e. the response has been completed.
86
+ After an upgraded socket is passed to the request handler, this message is published with an empty `trailers` array.
85
87
 
86
88
  ```js
87
89
  import diagnosticsChannel from 'diagnostics_channel'
@@ -1153,6 +1153,7 @@ The `decompress` interceptor automatically decompresses response bodies that are
1153
1153
 
1154
1154
  - `skipErrorResponses` - Whether to skip decompression for error responses (status codes >= 400). Default: `true`.
1155
1155
  - `skipStatusCodes` - Array of status codes to skip decompression for. Default: `[204, 304]`.
1156
+ - `maxSize` - Maximum decompressed response size in bytes for each decompression stage. Set to `0` to disable the limit. Default: `0`.
1156
1157
 
1157
1158
  **Example - Basic Decompress Interceptor**
1158
1159
 
@@ -302,11 +302,32 @@ class Request {
302
302
  }
303
303
  }
304
304
 
305
- onUpgrade (statusCode, headers, socket) {
305
+ /**
306
+ * @param {number} statusCode
307
+ * @param {Buffer[]|string[]} headers
308
+ * @param {import('node:stream').Duplex} socket
309
+ * @param {string} [statusText]
310
+ */
311
+ onUpgrade (statusCode, headers, socket, statusText = '') {
312
+ this.onFinally()
313
+
306
314
  assert(!this.aborted)
307
315
  assert(!this.completed)
308
316
 
309
- return this[kHandler].onUpgrade(statusCode, headers, socket)
317
+ if (channels.headers.hasSubscribers) {
318
+ channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })
319
+ }
320
+
321
+ const result = this[kHandler].onUpgrade(statusCode, headers, socket)
322
+
323
+ if (!this.aborted) {
324
+ this.completed = true
325
+ if (channels.trailers.hasSubscribers) {
326
+ channels.trailers.publish({ request: this, trailers: [] })
327
+ }
328
+ }
329
+
330
+ return result
310
331
  }
311
332
 
312
333
  onComplete (trailers) {
@@ -69,8 +69,14 @@ function lazyllhttp () {
69
69
 
70
70
  let mod
71
71
 
72
- // We disable wasm SIMD on ppc64 as it seems to be broken on Power 9 architectures.
73
- let useWasmSIMD = process.arch !== 'ppc64'
72
+ // We disable wasm SIMD on older versions of Node.js on ppc64 that are broken on Power >=9 architectures.
73
+ let useWasmSIMD = true
74
+ if (process.arch === 'ppc64') {
75
+ const [major, minor] = process.versions.node.split('.').map(n => parseInt(n, 10))
76
+ if (major < 24 || (major === 24 && minor < 12)) {
77
+ useWasmSIMD = false
78
+ }
79
+ }
74
80
  // The Env Variable UNDICI_NO_WASM_SIMD allows explicitly overriding the default behavior
75
81
  if (process.env.UNDICI_NO_WASM_SIMD === '1') {
76
82
  useWasmSIMD = false
@@ -521,7 +527,7 @@ class Parser {
521
527
  * @param {Buffer} head
522
528
  */
523
529
  onUpgrade (head) {
524
- const { upgrade, client, socket, headers, statusCode } = this
530
+ const { upgrade, client, socket, headers, statusCode, statusText } = this
525
531
 
526
532
  assert(upgrade)
527
533
  assert(client[kSocket] === socket)
@@ -556,8 +562,9 @@ class Parser {
556
562
  client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade'))
557
563
 
558
564
  try {
559
- request.onUpgrade(statusCode, headers, socket)
565
+ request.onUpgrade(statusCode, headers, socket, statusText)
560
566
  } catch (err) {
567
+ util.errorRequest(client, request, err)
561
568
  util.destroy(socket, err)
562
569
  }
563
570
 
@@ -575,13 +575,17 @@ function writeH2 (client, request) {
575
575
 
576
576
  stream = session.request(headers, { endStream: false, signal })
577
577
  stream[kHTTP2Stream] = true
578
+ ++session[kOpenStreams]
578
579
 
579
580
  stream.once('response', (headers, _flags) => {
580
581
  const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers
581
582
 
582
- request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)
583
-
584
- ++session[kOpenStreams]
583
+ try {
584
+ request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)
585
+ } catch (err) {
586
+ abort(err)
587
+ return
588
+ }
585
589
  completeRequest(client, request)
586
590
  })
587
591
 
@@ -610,11 +614,16 @@ function writeH2 (client, request) {
610
614
  // We disabled endStream to allow the user to write to the stream
611
615
  stream = session.request(headers, { endStream: false, signal })
612
616
  stream[kHTTP2Stream] = true
617
+ ++session[kOpenStreams]
613
618
  stream.on('response', headers => {
614
619
  const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers
615
620
 
616
- request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)
617
- ++session[kOpenStreams]
621
+ try {
622
+ request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)
623
+ } catch (err) {
624
+ abort(err)
625
+ return
626
+ }
618
627
  completeRequest(client, request)
619
628
  })
620
629
  stream.on('error', abort)