@zuplo/cli 7.8.18 → 7.8.20

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 (727) hide show
  1. package/dist/__tests__/integration/delete.integration.test.js +101 -1
  2. package/dist/__tests__/integration/delete.integration.test.js.map +1 -1
  3. package/dist/__tests__/integration/deploy.integration.test.js +117 -1
  4. package/dist/__tests__/integration/deploy.integration.test.js.map +1 -1
  5. package/dist/cmds/delete.d.ts.map +1 -1
  6. package/dist/cmds/delete.js +10 -5
  7. package/dist/cmds/delete.js.map +1 -1
  8. package/dist/cmds/deploy.d.ts.map +1 -1
  9. package/dist/cmds/deploy.js +11 -6
  10. package/dist/cmds/deploy.js.map +1 -1
  11. package/dist/common/middleware/get-environment-param.d.ts +7 -0
  12. package/dist/common/middleware/get-environment-param.d.ts.map +1 -1
  13. package/dist/common/middleware/get-environment-param.js +16 -2
  14. package/dist/common/middleware/get-environment-param.js.map +1 -1
  15. package/dist/common/middleware/get-environment-param.test.js +25 -1
  16. package/dist/common/middleware/get-environment-param.test.js.map +1 -1
  17. package/node_modules/@hono/node-server/README.md +21 -10
  18. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  19. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  20. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  21. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  22. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  23. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  24. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  25. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  26. package/node_modules/@hono/node-server/package.json +3 -2
  27. package/node_modules/@modelcontextprotocol/client/dist/{index-CEk3qkZM.d.cts → index-D_CiY-T3.d.cts} +3 -1
  28. package/node_modules/@modelcontextprotocol/client/dist/index-D_CiY-T3.d.cts.map +1 -0
  29. package/node_modules/@modelcontextprotocol/client/dist/{index-BCtJi0p5.d.mts → index-D_QDtbiv.d.mts} +3 -1
  30. package/node_modules/@modelcontextprotocol/client/dist/index-D_QDtbiv.d.mts.map +1 -0
  31. package/node_modules/@modelcontextprotocol/client/dist/index.cjs +100 -55
  32. package/node_modules/@modelcontextprotocol/client/dist/index.cjs.map +1 -1
  33. package/node_modules/@modelcontextprotocol/client/dist/index.d.cts +157 -30
  34. package/node_modules/@modelcontextprotocol/client/dist/index.d.cts.map +1 -1
  35. package/node_modules/@modelcontextprotocol/client/dist/index.d.mts +157 -30
  36. package/node_modules/@modelcontextprotocol/client/dist/index.d.mts.map +1 -1
  37. package/node_modules/@modelcontextprotocol/client/dist/index.mjs +100 -55
  38. package/node_modules/@modelcontextprotocol/client/dist/index.mjs.map +1 -1
  39. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.cjs +1 -1
  40. package/node_modules/@modelcontextprotocol/client/dist/shimsWorkerd.mjs +1 -1
  41. package/node_modules/@modelcontextprotocol/client/dist/{src-D0qEN74R.cjs → src-oZBjf3U1.cjs} +21 -4
  42. package/node_modules/@modelcontextprotocol/client/dist/src-oZBjf3U1.cjs.map +1 -0
  43. package/node_modules/@modelcontextprotocol/client/dist/{src-DDAAhLnO.mjs → src-xKF0PJN-.mjs} +16 -5
  44. package/node_modules/@modelcontextprotocol/client/dist/src-xKF0PJN-.mjs.map +1 -0
  45. package/node_modules/@modelcontextprotocol/client/dist/stdio.cjs +1 -1
  46. package/node_modules/@modelcontextprotocol/client/dist/stdio.d.cts +1 -1
  47. package/node_modules/@modelcontextprotocol/client/dist/stdio.d.mts +1 -1
  48. package/node_modules/@modelcontextprotocol/client/dist/stdio.mjs +1 -1
  49. package/node_modules/@modelcontextprotocol/client/package.json +3 -3
  50. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
  51. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-Anm-lwWi.d.mts.map} +1 -1
  52. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
  53. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
  54. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
  55. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
  56. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
  57. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-V9XJSCfa.d.cts.map} +1 -1
  58. package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
  59. package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
  60. package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
  61. package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
  62. package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
  63. package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
  64. package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
  65. package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
  66. package/node_modules/@modelcontextprotocol/core/package.json +1 -1
  67. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts +43 -2
  68. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.d.ts.map +1 -1
  69. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js +26 -5
  70. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth-extensions.js.map +1 -1
  71. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts +11 -0
  72. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.d.ts.map +1 -1
  73. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js +96 -14
  74. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/client/auth.js.map +1 -1
  75. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts +1 -0
  76. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.d.ts.map +1 -1
  77. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js +11 -2
  78. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/client/simpleClientCredentials.js.map +1 -1
  79. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  80. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  81. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -1
  82. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js +6 -3
  83. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -1
  84. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts +3 -0
  85. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.d.ts.map +1 -1
  86. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js +12 -2
  87. package/node_modules/@modelcontextprotocol/sdk/dist/cjs/shared/auth.js.map +1 -1
  88. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts +43 -2
  89. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.d.ts.map +1 -1
  90. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js +26 -5
  91. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth-extensions.js.map +1 -1
  92. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts +11 -0
  93. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.d.ts.map +1 -1
  94. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js +96 -14
  95. package/node_modules/@modelcontextprotocol/sdk/dist/esm/client/auth.js.map +1 -1
  96. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts +1 -0
  97. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.d.ts.map +1 -1
  98. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js +11 -2
  99. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/client/simpleClientCredentials.js.map +1 -1
  100. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts +2 -0
  101. package/node_modules/@modelcontextprotocol/sdk/dist/esm/examples/server/demoInMemoryOAuthProvider.d.ts.map +1 -1
  102. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -1
  103. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js +6 -3
  104. package/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/providers/proxyProvider.js.map +1 -1
  105. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts +3 -0
  106. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.d.ts.map +1 -1
  107. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js +12 -2
  108. package/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js.map +1 -1
  109. package/node_modules/@modelcontextprotocol/sdk/package.json +1 -1
  110. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-CfX6zgs1.d.mts} +3 -1
  111. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CfX6zgs1.d.mts.map +1 -0
  112. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-LSKhyqpU.d.cts} +3 -1
  113. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts.map → createMcpHandler-LSKhyqpU.d.cts.map} +1 -1
  114. package/node_modules/@modelcontextprotocol/server/dist/index.cjs +5 -3
  115. package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
  116. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +1 -1
  117. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +1 -1
  118. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
  119. package/node_modules/@modelcontextprotocol/server/dist/index.mjs +5 -3
  120. package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
  121. package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DYuW2ZSs.mjs} +6 -2
  122. package/node_modules/@modelcontextprotocol/server/dist/mcp-DYuW2ZSs.mjs.map +1 -0
  123. package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-TfXCpFsH.cjs} +6 -2
  124. package/node_modules/@modelcontextprotocol/server/dist/mcp-TfXCpFsH.cjs.map +1 -0
  125. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
  126. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
  127. package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-BHSMhZ_W.mjs} +8 -4
  128. package/node_modules/@modelcontextprotocol/server/dist/src-BHSMhZ_W.mjs.map +1 -0
  129. package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BtQ5YSyq.cjs} +8 -4
  130. package/node_modules/@modelcontextprotocol/server/dist/src-BtQ5YSyq.cjs.map +1 -0
  131. package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
  132. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
  133. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
  134. package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
  135. package/node_modules/@modelcontextprotocol/server/package.json +3 -3
  136. package/node_modules/@posthog/types/dist/posthog.d.ts +14 -0
  137. package/node_modules/@posthog/types/dist/posthog.d.ts.map +1 -1
  138. package/node_modules/@posthog/types/package.json +1 -1
  139. package/node_modules/@posthog/types/src/posthog.ts +14 -0
  140. package/node_modules/@zuplo/core/package.json +1 -1
  141. package/node_modules/@zuplo/graphql/package.json +1 -1
  142. package/node_modules/@zuplo/openapi-tools/package.json +1 -1
  143. package/node_modules/@zuplo/otel/package.json +1 -1
  144. package/node_modules/@zuplo/runtime/out/esm/{chunk-N3MU52FH.js → chunk-I5ENAL3B.js} +35 -35
  145. package/node_modules/@zuplo/runtime/out/esm/chunk-I5ENAL3B.js.map +1 -0
  146. package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
  147. package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +1 -1
  148. package/node_modules/@zuplo/runtime/out/esm/mocks/index.js +1 -1
  149. package/node_modules/@zuplo/runtime/package.json +1 -1
  150. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  151. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  152. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  153. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  154. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  155. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  156. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  157. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  158. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  159. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  160. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  161. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  162. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  163. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  164. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  165. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  166. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  167. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  168. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  169. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  170. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  171. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  172. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  173. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  174. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  175. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  176. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  177. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  178. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  179. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  180. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  181. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  182. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  183. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  184. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  185. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  186. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  187. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  188. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  189. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  190. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  191. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  192. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  193. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  194. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  195. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  196. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  197. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  198. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  199. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  200. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  201. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  202. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  203. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  204. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  205. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  206. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  207. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  208. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  209. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  210. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  211. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  212. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  213. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  214. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  215. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  216. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  217. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  218. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  219. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  220. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  221. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  222. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  223. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  224. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  225. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  226. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  227. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  228. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  229. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  230. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  231. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  232. package/node_modules/hono/dist/cjs/compose.js +49 -66
  233. package/node_modules/hono/dist/cjs/context.js +379 -450
  234. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  235. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  236. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  237. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  238. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  239. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  240. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  241. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  242. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  243. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  244. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  245. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  246. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  247. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  248. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  249. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  250. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  251. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  252. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  253. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  254. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  255. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  256. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  257. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  258. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  259. package/node_modules/hono/dist/cjs/hono-base.js +345 -403
  260. package/node_modules/hono/dist/cjs/hono.js +28 -42
  261. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  262. package/node_modules/hono/dist/cjs/index.js +22 -30
  263. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  264. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  265. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  266. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  267. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  268. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  269. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  270. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  271. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  272. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  273. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  274. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  275. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  276. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  277. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  278. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  279. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  280. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  281. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  282. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  283. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  284. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  285. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  286. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  287. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  288. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  289. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  290. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  291. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  292. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  293. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  294. package/node_modules/hono/dist/cjs/middleware/combine/index.js +133 -95
  295. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  296. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  297. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  298. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  299. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  300. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  301. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  302. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  303. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  304. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  305. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  306. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  307. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  308. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  309. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  310. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  311. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  312. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  313. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  314. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  315. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  316. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  317. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  318. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  319. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  320. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  321. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  322. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  323. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  324. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  325. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  326. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  327. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  328. package/node_modules/hono/dist/cjs/request.js +334 -346
  329. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  330. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  331. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  332. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  333. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  334. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  335. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  336. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  337. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  338. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  339. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  340. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  341. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  342. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  343. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  344. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  345. package/node_modules/hono/dist/cjs/router.js +37 -37
  346. package/node_modules/hono/dist/cjs/types.js +5 -28
  347. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  348. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  349. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  350. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  351. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  352. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  353. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  354. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  355. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  356. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  357. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  358. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  359. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  360. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  361. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  362. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  363. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  364. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  365. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  366. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  367. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  368. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  369. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  370. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  371. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  372. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  373. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  374. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  375. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  376. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  377. package/node_modules/hono/dist/client/client.js +138 -197
  378. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  379. package/node_modules/hono/dist/client/index.js +3 -7
  380. package/node_modules/hono/dist/client/types.js +1 -0
  381. package/node_modules/hono/dist/client/utils.js +51 -68
  382. package/node_modules/hono/dist/compose.js +49 -45
  383. package/node_modules/hono/dist/context.js +376 -426
  384. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  385. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  386. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  387. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  388. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  389. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  390. package/node_modules/hono/dist/helper/css/common.js +167 -225
  391. package/node_modules/hono/dist/helper/css/index.js +132 -137
  392. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  393. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  394. package/node_modules/hono/dist/helper/html/index.js +30 -39
  395. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  396. package/node_modules/hono/dist/helper/route/index.js +121 -43
  397. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  398. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  399. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  400. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  401. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  402. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  403. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  404. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  405. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  406. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  407. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  408. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  409. package/node_modules/hono/dist/hono-base.js +342 -379
  410. package/node_modules/hono/dist/hono.js +27 -20
  411. package/node_modules/hono/dist/http-exception.js +53 -33
  412. package/node_modules/hono/dist/index.js +19 -6
  413. package/node_modules/hono/dist/jsx/base.js +231 -340
  414. package/node_modules/hono/dist/jsx/children.js +16 -20
  415. package/node_modules/hono/dist/jsx/components.js +118 -170
  416. package/node_modules/hono/dist/jsx/constants.js +9 -15
  417. package/node_modules/hono/dist/jsx/context.js +153 -150
  418. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  419. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  420. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  421. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  422. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  423. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  424. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  425. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  426. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  427. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  428. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  429. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  430. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  431. package/node_modules/hono/dist/jsx/index.js +45 -98
  432. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  433. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  434. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  435. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  436. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  437. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  438. package/node_modules/hono/dist/jsx/types.js +1 -0
  439. package/node_modules/hono/dist/jsx/utils.js +105 -168
  440. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  441. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  442. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  443. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  444. package/node_modules/hono/dist/middleware/combine/index.js +132 -73
  445. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  446. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  447. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  448. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  449. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  450. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  451. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  452. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  453. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  454. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  455. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  456. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  457. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  458. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  459. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  460. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  461. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  462. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  463. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  464. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  465. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  466. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  467. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  468. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  469. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  470. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  471. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  472. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  473. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  474. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  475. package/node_modules/hono/dist/preset/quick.js +17 -15
  476. package/node_modules/hono/dist/preset/tiny.js +14 -11
  477. package/node_modules/hono/dist/request/constants.js +4 -5
  478. package/node_modules/hono/dist/request.js +328 -319
  479. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  480. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  481. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  482. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  483. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  484. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  485. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  486. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  487. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  488. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  489. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  490. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  491. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  492. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  493. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  494. package/node_modules/hono/dist/router/utils.js +4 -5
  495. package/node_modules/hono/dist/router.js +35 -14
  496. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  497. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -105
  498. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  499. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -123
  500. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  501. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  502. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  503. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  504. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  505. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -17
  506. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  507. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -18
  508. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  509. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  510. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  511. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -3
  512. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  513. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  514. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  515. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  516. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  517. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  518. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  519. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  520. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  521. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  522. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -58
  523. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  524. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  525. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  526. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  527. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  528. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -8
  529. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +6 -9
  530. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -8
  531. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  532. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  533. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  534. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  535. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  536. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  537. package/node_modules/hono/dist/types/client/types.d.ts +134 -160
  538. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  539. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  540. package/node_modules/hono/dist/types/context.d.ts +335 -336
  541. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  542. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  543. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  544. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  545. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  546. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -13
  547. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -10
  548. package/node_modules/hono/dist/types/helper/css/index.d.ts +25 -28
  549. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -13
  550. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -74
  551. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  552. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -22
  553. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  554. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  555. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -7
  556. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  557. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  558. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -4
  559. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  560. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  561. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  562. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  563. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  564. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -10
  565. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  566. package/node_modules/hono/dist/types/hono-base.d.ts +208 -211
  567. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  568. package/node_modules/hono/dist/types/http-exception.d.ts +20 -23
  569. package/node_modules/hono/dist/types/index.d.ts +6 -37
  570. package/node_modules/hono/dist/types/jsx/base.d.ts +36 -35
  571. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  572. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  573. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  574. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -7
  575. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +8 -10
  576. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  577. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  578. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +26 -30
  579. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -13
  580. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +78 -83
  581. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  582. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  583. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  584. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -51
  585. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +86 -85
  586. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  587. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -17
  588. package/node_modules/hono/dist/types/jsx/index.d.ts +70 -73
  589. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  590. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  591. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  592. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  593. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  594. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  595. package/node_modules/hono/dist/types/jsx/types.d.ts +11 -13
  596. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  597. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -20
  598. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -49
  599. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -9
  600. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  601. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -7
  602. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +8 -10
  603. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  604. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -13
  605. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -9
  606. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  607. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -9
  608. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -13
  609. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -12
  610. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  611. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  612. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +6 -6
  613. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  614. package/node_modules/hono/dist/types/middleware/language/index.d.ts +5 -5
  615. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  616. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -6
  617. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -10
  618. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -17
  619. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -11
  620. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -21
  621. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +5 -5
  622. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  623. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +5 -6
  624. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -1
  625. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -58
  626. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  627. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  628. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  629. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +5 -5
  630. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -21
  631. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -38
  632. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  633. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  634. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  635. package/node_modules/hono/dist/types/request.d.ts +288 -287
  636. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  637. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  638. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  639. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  640. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  641. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  642. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  643. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -11
  644. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  645. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  646. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  647. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  648. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  649. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  650. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  651. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  652. package/node_modules/hono/dist/types/router.d.ts +23 -22
  653. package/node_modules/hono/dist/types/types.d.ts +146 -506
  654. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  655. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  656. package/node_modules/hono/dist/types/utils/body.d.ts +46 -51
  657. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -6
  658. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  659. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  660. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  661. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  662. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -19
  663. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -8
  664. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  665. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -4
  666. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  667. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  668. package/node_modules/hono/dist/types/utils/html.d.ts +11 -10
  669. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  670. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  671. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  672. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  673. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  674. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  675. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  676. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  677. package/node_modules/hono/dist/types/utils/mime.d.ts +59 -57
  678. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  679. package/node_modules/hono/dist/types/utils/types.d.ts +14 -27
  680. package/node_modules/hono/dist/types/utils/url.d.ts +2 -1
  681. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  682. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -9
  683. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -10
  684. package/node_modules/hono/dist/types.js +4 -6
  685. package/node_modules/hono/dist/utils/accept.js +185 -212
  686. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  687. package/node_modules/hono/dist/utils/body.js +87 -92
  688. package/node_modules/hono/dist/utils/buffer.js +44 -71
  689. package/node_modules/hono/dist/utils/color.js +33 -21
  690. package/node_modules/hono/dist/utils/compress.js +11 -5
  691. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  692. package/node_modules/hono/dist/utils/constants.js +7 -5
  693. package/node_modules/hono/dist/utils/cookie.js +114 -163
  694. package/node_modules/hono/dist/utils/crypto.js +30 -40
  695. package/node_modules/hono/dist/utils/encode.js +30 -26
  696. package/node_modules/hono/dist/utils/filepath.js +23 -33
  697. package/node_modules/hono/dist/utils/handler.js +10 -11
  698. package/node_modules/hono/dist/utils/headers.js +1 -0
  699. package/node_modules/hono/dist/utils/html.js +97 -117
  700. package/node_modules/hono/dist/utils/http-status.js +1 -0
  701. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  702. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  703. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  704. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  705. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  706. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  707. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  708. package/node_modules/hono/dist/utils/mime.js +74 -79
  709. package/node_modules/hono/dist/utils/stream.js +86 -88
  710. package/node_modules/hono/dist/utils/types.js +1 -0
  711. package/node_modules/hono/dist/utils/url.js +187 -215
  712. package/node_modules/hono/dist/validator/index.js +1 -4
  713. package/node_modules/hono/dist/validator/utils.js +1 -0
  714. package/node_modules/hono/dist/validator/validator.js +61 -83
  715. package/node_modules/hono/package.json +27 -27
  716. package/package.json +11 -11
  717. package/node_modules/@modelcontextprotocol/client/dist/index-BCtJi0p5.d.mts.map +0 -1
  718. package/node_modules/@modelcontextprotocol/client/dist/index-CEk3qkZM.d.cts.map +0 -1
  719. package/node_modules/@modelcontextprotocol/client/dist/src-D0qEN74R.cjs.map +0 -1
  720. package/node_modules/@modelcontextprotocol/client/dist/src-DDAAhLnO.mjs.map +0 -1
  721. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
  722. package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
  723. package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
  724. package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
  725. package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
  726. package/node_modules/@zuplo/runtime/out/esm/chunk-N3MU52FH.js.map +0 -1
  727. /package/node_modules/@zuplo/runtime/out/esm/{chunk-N3MU52FH.js.LEGAL.txt → chunk-I5ENAL3B.js.LEGAL.txt} +0 -0
@@ -2,16 +2,17 @@ import { captureEvent } from "../common/analytics/lib.js";
2
2
  import { authenticate } from "../common/middleware/authentication.js";
3
3
  import { confirmLinkedConfig } from "../common/middleware/confirm-linked-config.js";
4
4
  import { fetchAccount } from "../common/middleware/get-account-param.js";
5
+ import { hasBranchFlag } from "../common/middleware/get-environment-param.js";
5
6
  import { fetchProject } from "../common/middleware/get-project-param.js";
6
7
  import { configure } from "../common/middleware/user-configuration.js";
7
8
  import { identify } from "../common/middleware/user-identification.js";
8
9
  import { deleteZup } from "../delete/handler.js";
9
10
  export default {
10
- desc: "Deletes the Zuplo API by URL",
11
+ desc: "Deletes a deployed Zuplo environment by URL or branch name",
11
12
  command: "delete",
12
13
  builder: (yargs) => {
13
14
  return yargs
14
- .usage("$0 delete --url <url> [options]")
15
+ .usage("$0 delete (--url <url> | --branch <branch>) [options]")
15
16
  .option("api-key", {
16
17
  type: "string",
17
18
  describe: "The API Key from Zuplo",
@@ -24,8 +25,7 @@ export default {
24
25
  })
25
26
  .option("branch", {
26
27
  type: "string",
27
- describe: "The branch name to delete deployments for",
28
- hidden: true,
28
+ describe: "The branch name of the environment to delete (the value passed to `zuplo deploy --branch`)",
29
29
  })
30
30
  .option("project", {
31
31
  type: "string",
@@ -45,7 +45,8 @@ export default {
45
45
  })
46
46
  .boolean("wait")
47
47
  .check((argv) => {
48
- if (!argv.url && !argv.branch) {
48
+ const branch = hasBranchFlag(process.argv) ? argv.branch : undefined;
49
+ if (!argv.url && !branch) {
49
50
  throw new Error("--url is required");
50
51
  }
51
52
  if (argv.url && argv.branch) {
@@ -58,6 +59,10 @@ export default {
58
59
  "$0 delete --url https://my-api-dev-123abc.zuplo.app",
59
60
  "Delete a deployed environment by its URL",
60
61
  ],
62
+ [
63
+ "$0 delete --branch my-feature",
64
+ "Delete the environment deployed from the my-feature branch",
65
+ ],
61
66
  [
62
67
  "$0 delete --url https://my-api-dev-123abc.zuplo.app --wait",
63
68
  "Delete an environment and wait until the deletion is complete",
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/cmds/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AACvE,OAAO,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAe;IACb,IAAI,EAAE,8BAA8B;IACpC,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,KAAK,CAAC,iCAAiC,CAAC;aACxC,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,QAAQ;SAChB,CAAC;aACD,MAAM,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,oCAAoC;SAC/C,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,2CAA2C;YACrD,MAAM,EAAE,IAAI;SACb,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;aACD,MAAM,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,oDAAoD;SAC/D,CAAC;aACD,MAAM,CAAC,sBAAsB,EAAE;YAC9B,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,uDAAuD;SAClE,CAAC;aACD,OAAO,CAAC,MAAM,CAAC;aACf,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YAEd,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,OAAO,CAAC;YACP;gBACE,qDAAqD;gBACrD,0CAA0C;aAC3C;YACD;gBACE,4DAA4D;gBAC5D,+DAA+D;aAChE;SACF,CAAC;aACD,UAAU,CAAC;YACV,YAAY;YACZ,SAAS;YACT,mBAAmB;YACnB,YAAY;YACZ,YAAY;YACZ,QAAQ;SACT,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACpD,MAAM,SAAS,CAAC,IAAiB,CAAC,CAAC;IACrC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { authenticate } from \"../common/middleware/authentication.js\";\nimport { confirmLinkedConfig } from \"../common/middleware/confirm-linked-config.js\";\nimport { fetchAccount } from \"../common/middleware/get-account-param.js\";\nimport { fetchProject } from \"../common/middleware/get-project-param.js\";\nimport { configure } from \"../common/middleware/user-configuration.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport { Arguments, deleteZup } from \"../delete/handler.js\";\n\nexport default {\n desc: \"Deletes the Zuplo API by URL\",\n command: \"delete\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 delete --url <url> [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .option(\"url\", {\n type: \"string\",\n describe: \"The URL of the Zuplo API to delete\",\n })\n .option(\"branch\", {\n type: \"string\",\n describe: \"The branch name to delete deployments for\",\n hidden: true,\n })\n .option(\"project\", {\n type: \"string\",\n describe: \"The project name\",\n })\n .option(\"account\", {\n type: \"string\",\n describe: \"The account name\",\n })\n .option(\"wait\", {\n type: \"boolean\",\n describe: \"Should the CLI wait until the Zuplo API is deleted\",\n })\n .option(\"self-hosted-endpoint\", {\n type: \"string\",\n describe: \"The endpoint of your self-hosted service to deploy to\",\n })\n .boolean(\"wait\")\n .check((argv) => {\n // Branch option is hidden for testing, but still works internally\n if (!argv.url && !argv.branch) {\n throw new Error(\"--url is required\");\n }\n if (argv.url && argv.branch) {\n throw new Error(\"Cannot specify both --url and --branch\");\n }\n return true;\n })\n .example([\n [\n \"$0 delete --url https://my-api-dev-123abc.zuplo.app\",\n \"Delete a deployed environment by its URL\",\n ],\n [\n \"$0 delete --url https://my-api-dev-123abc.zuplo.app --wait\",\n \"Delete an environment and wait until the deletion is complete\",\n ],\n ])\n .middleware([\n authenticate,\n configure,\n confirmLinkedConfig,\n fetchAccount,\n fetchProject,\n identify,\n ]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo delete\" });\n await deleteZup(argv as Arguments);\n },\n};\n"]}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/cmds/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AACvE,OAAO,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAe;IACb,IAAI,EAAE,4DAA4D;IAClE,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,KAAK,CAAC,uDAAuD,CAAC;aAC9D,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,QAAQ;SAChB,CAAC;aACD,MAAM,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,oCAAoC;SAC/C,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,4FAA4F;SAC/F,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;aACD,MAAM,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,oDAAoD;SAC/D,CAAC;aACD,MAAM,CAAC,sBAAsB,EAAE;YAC9B,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,uDAAuD;SAClE,CAAC;aACD,OAAO,CAAC,MAAM,CAAC;aACf,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YAGd,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,OAAO,CAAC;YACP;gBACE,qDAAqD;gBACrD,0CAA0C;aAC3C;YACD;gBACE,+BAA+B;gBAC/B,4DAA4D;aAC7D;YACD;gBACE,4DAA4D;gBAC5D,+DAA+D;aAChE;SACF,CAAC;aACD,UAAU,CAAC;YACV,YAAY;YACZ,SAAS;YACT,mBAAmB;YACnB,YAAY;YACZ,YAAY;YACZ,QAAQ;SACT,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACpD,MAAM,SAAS,CAAC,IAAiB,CAAC,CAAC;IACrC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { authenticate } from \"../common/middleware/authentication.js\";\nimport { confirmLinkedConfig } from \"../common/middleware/confirm-linked-config.js\";\nimport { fetchAccount } from \"../common/middleware/get-account-param.js\";\nimport { hasBranchFlag } from \"../common/middleware/get-environment-param.js\";\nimport { fetchProject } from \"../common/middleware/get-project-param.js\";\nimport { configure } from \"../common/middleware/user-configuration.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport { Arguments, deleteZup } from \"../delete/handler.js\";\n\nexport default {\n desc: \"Deletes a deployed Zuplo environment by URL or branch name\",\n command: \"delete\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 delete (--url <url> | --branch <branch>) [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .option(\"url\", {\n type: \"string\",\n describe: \"The URL of the Zuplo API to delete\",\n })\n .option(\"branch\", {\n type: \"string\",\n describe:\n \"The branch name of the environment to delete (the value passed to `zuplo deploy --branch`)\",\n })\n .option(\"project\", {\n type: \"string\",\n describe: \"The project name\",\n })\n .option(\"account\", {\n type: \"string\",\n describe: \"The account name\",\n })\n .option(\"wait\", {\n type: \"boolean\",\n describe: \"Should the CLI wait until the Zuplo API is deleted\",\n })\n .option(\"self-hosted-endpoint\", {\n type: \"string\",\n describe: \"The endpoint of your self-hosted service to deploy to\",\n })\n .boolean(\"wait\")\n .check((argv) => {\n // An exported ZUPLO_BRANCH (bound by `.env(\"ZUPLO\")`) must not\n // silently pick the environment to delete; require the flag itself.\n const branch = hasBranchFlag(process.argv) ? argv.branch : undefined;\n if (!argv.url && !branch) {\n throw new Error(\"--url is required\");\n }\n if (argv.url && argv.branch) {\n throw new Error(\"Cannot specify both --url and --branch\");\n }\n return true;\n })\n .example([\n [\n \"$0 delete --url https://my-api-dev-123abc.zuplo.app\",\n \"Delete a deployed environment by its URL\",\n ],\n [\n \"$0 delete --branch my-feature\",\n \"Delete the environment deployed from the my-feature branch\",\n ],\n [\n \"$0 delete --url https://my-api-dev-123abc.zuplo.app --wait\",\n \"Delete an environment and wait until the deletion is complete\",\n ],\n ])\n .middleware([\n authenticate,\n configure,\n confirmLinkedConfig,\n fetchAccount,\n fetchProject,\n identify,\n ]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo delete\" });\n await deleteZup(argv as Arguments);\n },\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAkBV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAuFf,OAAO;;AA1F/B,wBA8FE"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAmBV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBA6Ff,OAAO;;AAhG/B,wBAoGE"}
@@ -3,7 +3,7 @@ import { authenticate } from "../common/middleware/authentication.js";
3
3
  import { confirmLinkedConfig } from "../common/middleware/confirm-linked-config.js";
4
4
  import { confirmProductionDeploy } from "../common/middleware/confirm-production-deploy.js";
5
5
  import { fetchAccount } from "../common/middleware/get-account-param.js";
6
- import { fetchEnvironment, recordEnvironmentExplicit, } from "../common/middleware/get-environment-param.js";
6
+ import { applyBranchFlag, fetchEnvironment, recordEnvironmentExplicit, } from "../common/middleware/get-environment-param.js";
7
7
  import { fetchProject } from "../common/middleware/get-project-param.js";
8
8
  import { configure } from "../common/middleware/user-configuration.js";
9
9
  import { identify } from "../common/middleware/user-identification.js";
@@ -41,10 +41,14 @@ export default {
41
41
  type: "boolean",
42
42
  describe: "Verify that this Git repository matches the one configured on Zuplo. Use --no-verify-remote to disable.",
43
43
  default: false,
44
+ })
45
+ .option("branch", {
46
+ type: "string",
47
+ describe: "The branch name to deploy the environment as, instead of the current git branch. Overrides --environment",
44
48
  })
45
49
  .option("environment", {
46
50
  type: "string",
47
- describe: "The value to use for environment name, instead of the current branch name",
51
+ describe: "The value to use for environment name, instead of the current branch name (deprecated: use --branch)",
48
52
  })
49
53
  .option("self-hosted-endpoint", {
50
54
  type: "string",
@@ -74,15 +78,16 @@ export default {
74
78
  "Deploy the current Git branch using the branch name as the environment name",
75
79
  ],
76
80
  [
77
- "$0 deploy --environment my-env",
78
- "Override the environment name instead of using the Git branch name",
81
+ "$0 deploy --branch my-feature",
82
+ "Deploy as the my-feature branch, e.g. from a CI job; delete it later with `zuplo delete --branch my-feature`",
79
83
  ],
80
84
  [
81
- "$0 deploy --account my-account --project my-project --environment my-env",
82
- "Explicitly specify the account, project, and environment",
85
+ "$0 deploy --account my-account --project my-project --branch my-feature",
86
+ "Explicitly specify the account, project, and branch",
83
87
  ],
84
88
  ])
85
89
  .middleware([
90
+ (argv) => applyBranchFlag(argv, process.argv),
86
91
  authenticate,
87
92
  configure,
88
93
  confirmLinkedConfig,
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { authenticate } from \"../common/middleware/authentication.js\";\nimport { confirmLinkedConfig } from \"../common/middleware/confirm-linked-config.js\";\nimport { confirmProductionDeploy } from \"../common/middleware/confirm-production-deploy.js\";\nimport { fetchAccount } from \"../common/middleware/get-account-param.js\";\nimport {\n fetchEnvironment,\n recordEnvironmentExplicit,\n} from \"../common/middleware/get-environment-param.js\";\nimport { fetchProject } from \"../common/middleware/get-project-param.js\";\nimport { configure } from \"../common/middleware/user-configuration.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport { Arguments, deploy } from \"../deploy/handler.js\";\n\nexport default {\n desc: \"Deploys current Git branch of the current directory\",\n command: \"deploy\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 deploy [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .option(\"project\", {\n type: \"string\",\n hidden: true,\n describe: \"The project name\",\n })\n .option(\"account\", {\n type: \"string\",\n describe: \"The account name\",\n })\n .option(\"dir\", {\n type: \"string\",\n describe: \"The directory containing your Zuplo API\",\n default: \".\",\n normalize: true,\n hidden: true,\n })\n .option(\"verify-remote\", {\n deprecated: true,\n type: \"boolean\",\n describe:\n \"Verify that this Git repository matches the one configured on Zuplo. Use --no-verify-remote to disable.\",\n default: false,\n })\n .option(\"environment\", {\n type: \"string\",\n describe:\n \"The value to use for environment name, instead of the current branch name\",\n })\n .option(\"self-hosted-endpoint\", {\n type: \"string\",\n describe: \"The endpoint of your self-hosted service to deploy to\",\n })\n .option(\"override-repo-url\", {\n type: \"string\",\n describe: \"Override the repo url reference\",\n default: undefined,\n hidden: true,\n })\n .option(\"fetch-environments\", {\n type: \"boolean\",\n describe:\n \"Fetch the environments for your project from Zuplo. If this is false, then the environment will automatically be detected from the git branch.\",\n default: false,\n })\n .option(\"mtls-certificates-dir\", {\n type: \"string\",\n describe:\n \"Directory containing mtls certificates to use for the deployment, in the hierarchy that you want them to appear in the runtime. Ex: <cert-name>/tls.crt and <cert-name>/tls.key\" +\n \"All certificates must be in pem format. Only for use for self-hosted deployments.\",\n hidden: true,\n })\n .boolean(\"verify-remote\")\n .example([\n [\n \"$0 deploy\",\n \"Deploy the current Git branch using the branch name as the environment name\",\n ],\n [\n \"$0 deploy --environment my-env\",\n \"Override the environment name instead of using the Git branch name\",\n ],\n [\n \"$0 deploy --account my-account --project my-project --environment my-env\",\n \"Explicitly specify the account, project, and environment\",\n ],\n ])\n .middleware([\n authenticate,\n configure,\n confirmLinkedConfig,\n fetchAccount,\n fetchProject,\n recordEnvironmentExplicit,\n fetchEnvironment,\n confirmProductionDeploy,\n identify,\n ]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo deploy\" });\n await deploy(argv as Arguments);\n },\n};\n"]}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { authenticate } from \"../common/middleware/authentication.js\";\nimport { confirmLinkedConfig } from \"../common/middleware/confirm-linked-config.js\";\nimport { confirmProductionDeploy } from \"../common/middleware/confirm-production-deploy.js\";\nimport { fetchAccount } from \"../common/middleware/get-account-param.js\";\nimport {\n applyBranchFlag,\n fetchEnvironment,\n recordEnvironmentExplicit,\n} from \"../common/middleware/get-environment-param.js\";\nimport { fetchProject } from \"../common/middleware/get-project-param.js\";\nimport { configure } from \"../common/middleware/user-configuration.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport { Arguments, deploy } from \"../deploy/handler.js\";\n\nexport default {\n desc: \"Deploys current Git branch of the current directory\",\n command: \"deploy\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 deploy [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .option(\"project\", {\n type: \"string\",\n hidden: true,\n describe: \"The project name\",\n })\n .option(\"account\", {\n type: \"string\",\n describe: \"The account name\",\n })\n .option(\"dir\", {\n type: \"string\",\n describe: \"The directory containing your Zuplo API\",\n default: \".\",\n normalize: true,\n hidden: true,\n })\n .option(\"verify-remote\", {\n deprecated: true,\n type: \"boolean\",\n describe:\n \"Verify that this Git repository matches the one configured on Zuplo. Use --no-verify-remote to disable.\",\n default: false,\n })\n .option(\"branch\", {\n type: \"string\",\n describe:\n \"The branch name to deploy the environment as, instead of the current git branch. Overrides --environment\",\n })\n .option(\"environment\", {\n type: \"string\",\n describe:\n \"The value to use for environment name, instead of the current branch name (deprecated: use --branch)\",\n })\n .option(\"self-hosted-endpoint\", {\n type: \"string\",\n describe: \"The endpoint of your self-hosted service to deploy to\",\n })\n .option(\"override-repo-url\", {\n type: \"string\",\n describe: \"Override the repo url reference\",\n default: undefined,\n hidden: true,\n })\n .option(\"fetch-environments\", {\n type: \"boolean\",\n describe:\n \"Fetch the environments for your project from Zuplo. If this is false, then the environment will automatically be detected from the git branch.\",\n default: false,\n })\n .option(\"mtls-certificates-dir\", {\n type: \"string\",\n describe:\n \"Directory containing mtls certificates to use for the deployment, in the hierarchy that you want them to appear in the runtime. Ex: <cert-name>/tls.crt and <cert-name>/tls.key\" +\n \"All certificates must be in pem format. Only for use for self-hosted deployments.\",\n hidden: true,\n })\n .boolean(\"verify-remote\")\n .example([\n [\n \"$0 deploy\",\n \"Deploy the current Git branch using the branch name as the environment name\",\n ],\n [\n \"$0 deploy --branch my-feature\",\n \"Deploy as the my-feature branch, e.g. from a CI job; delete it later with `zuplo delete --branch my-feature`\",\n ],\n [\n \"$0 deploy --account my-account --project my-project --branch my-feature\",\n \"Explicitly specify the account, project, and branch\",\n ],\n ])\n .middleware([\n (argv) => applyBranchFlag(argv, process.argv),\n authenticate,\n configure,\n confirmLinkedConfig,\n fetchAccount,\n fetchProject,\n recordEnvironmentExplicit,\n fetchEnvironment,\n confirmProductionDeploy,\n identify,\n ]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo deploy\" });\n await deploy(argv as Arguments);\n },\n};\n"]}
@@ -4,6 +4,13 @@ export declare function recordEnvironmentExplicit(argv: {
4
4
  [key: string]: unknown;
5
5
  }): void;
6
6
  export declare function hasEnvironmentFlag(args: readonly string[]): boolean;
7
+ export declare function hasBranchFlag(args: readonly string[]): boolean;
8
+ export declare function applyBranchFlag(
9
+ argv: {
10
+ [key: string]: unknown;
11
+ },
12
+ args: readonly string[]
13
+ ): void;
7
14
  export declare function fetchEnvironment(argv: {
8
15
  [key: string]: unknown;
9
16
  }): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"get-environment-param.d.ts","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAmB9D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,QAEzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CASnE;AAMD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,iBA4LtE"}
1
+ {"version":3,"file":"get-environment-param.d.ts","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAoB9D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,QAEzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAWnE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAI9D;AAOD,wBAAgB,eAAe,CAC7B,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAChC,IAAI,EAAE,SAAS,MAAM,EAAE,QAOxB;AAMD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,iBA4LtE"}
@@ -13,12 +13,26 @@ export function recordEnvironmentExplicit(argv) {
13
13
  export function hasEnvironmentFlag(args) {
14
14
  for (let i = 2; i < args.length; i++) {
15
15
  const arg = args[i];
16
- if (arg === "--environment" || arg.startsWith("--environment=")) {
17
- return true;
16
+ for (const flag of ["--environment", "--branch"]) {
17
+ if (arg === flag || arg.startsWith(`${flag}=`)) {
18
+ return true;
19
+ }
18
20
  }
19
21
  }
20
22
  return false;
21
23
  }
24
+ export function hasBranchFlag(args) {
25
+ return args
26
+ .slice(2)
27
+ .some((arg) => arg === "--branch" || arg.startsWith("--branch="));
28
+ }
29
+ export function applyBranchFlag(argv, args) {
30
+ if (!hasBranchFlag(args)) {
31
+ return;
32
+ }
33
+ const branch = argv.branch;
34
+ argv.environment = Array.isArray(branch) ? branch.at(-1) : branch;
35
+ }
22
36
  export async function fetchEnvironment(argv) {
23
37
  if (argv.environment && typeof argv.environment === "string") {
24
38
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"get-environment-param.js","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.ts"],"names":[],"mappings":"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","sourcesContent":["import { select } from \"@inquirer/prompts\";\nimport { simpleGit } from \"simple-git\";\nimport { Environment } from \"../api/lib.js\";\nimport { logger } from \"../logger.js\";\nimport { printCriticalFailureToConsoleAndExit, textOrJson } from \"../output.js\";\nimport settings from \"../settings.js\";\nimport { isInteractiveTerminal } from \"../terminal.js\";\nimport { buildEnvironmentPromptChoices } from \"../utils/build-environment-prompt-choices.js\";\n\nexport const ENVIRONMENT_EXPLICIT_KEY = \"environmentExplicit\";\nexport const FETCHED_ENVIRONMENTS_KEY = \"fetchedEnvironments\";\n\n/**\n * Records whether `--environment` was passed on the command line. Must run\n * before `fetchEnvironment`, which mutates `argv.environment` to the\n * inferred branch and erases the distinction. Downstream middlewares (e.g.\n * the production deploy confirmation) treat an explicit flag as the user's\n * opt-in to deploy to whatever environment they named.\n *\n * We deliberately read `process.argv` rather than `argv.environment` so\n * that `ZUPLO_ENVIRONMENT=...` (picked up by yargs `.env(\"ZUPLO\")`) does\n * NOT count as explicit. A sticky shell export shouldn't silently bypass\n * the production-deploy confirmation; the flag should.\n *\n * Only the long form `--environment` is detected because `cmds/deploy.ts`\n * doesn't declare a short alias. Adding a `-e` check here without a yargs\n * alias would let `-e foo` bypass the prompt while not actually setting\n * the environment — accepting the bypass without the side effect.\n */\nexport function recordEnvironmentExplicit(argv: { [key: string]: unknown }) {\n argv[ENVIRONMENT_EXPLICIT_KEY] = hasEnvironmentFlag(process.argv);\n}\n\nexport function hasEnvironmentFlag(args: readonly string[]): boolean {\n // Skip node + script path; flags only appear after.\n for (let i = 2; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--environment\" || arg.startsWith(\"--environment=\")) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Middleware that ensures a environment is provided in argv. If not, prompts the user.\n * Note: must be called after get account param and get project param.\n */\nexport async function fetchEnvironment(argv: { [key: string]: unknown }) {\n if (argv.environment && typeof argv.environment === \"string\") {\n return;\n }\n\n if (!argv.account || typeof argv.account !== \"string\") {\n throw new Error(\"Invalid state: account is not set.\");\n }\n if (!argv.project || typeof argv.project !== \"string\") {\n throw new Error(\"Invalid state: project is not set.\");\n }\n\n // 1. Check if the dir argument is set and if we are in a git repository\n // If we are, get the current branch and use that as the environment name.\n const branch = await getGitBranch(argv);\n\n if (branch && !argv[\"fetch-environments\"]) {\n // If the branch is set, use that as the environment name\n argv.environment = branch;\n } else {\n // In non-interactive environments, --environment must be passed explicitly.\n // We check here, before the API calls, to avoid unnecessary network round-trips.\n if (!isInteractiveTerminal()) {\n await printCriticalFailureToConsoleAndExit(\n \"Error: --environment is required in non-interactive environments (e.g. CI/CD).\\nUse the --environment flag to specify an environment name.\"\n );\n return;\n }\n\n const baseUrl = `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments`;\n\n const queryParams: Record<string, string> = {\n // This is safe because of the previous middleware where we set the account and project.\n accountName: argv.account!,\n projectName: argv.project!,\n };\n\n // Create the query string using URLSearchParams\n const url = new URL(baseUrl);\n url.search = new URLSearchParams(queryParams).toString();\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (response.ok) {\n const environmentJsonFromDeveloperAPI = (await response.json()) as {\n data: Environment[];\n };\n\n // Also fetch working-copy deployments, which are not returned by the\n // /v1/environments endpoint (it only returns self-managed and deployer-owned environments).\n const deploymentsUrl = new URL(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${argv.account}/projects/${argv.project}/deployments`\n );\n const deploymentsResponse = await fetch(deploymentsUrl, {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (deploymentsResponse.ok) {\n const { data: deployments } = (await deploymentsResponse.json()) as {\n data: Array<{\n name: string;\n accountName: string;\n projectName: string;\n branchName: string;\n environmentType: string;\n createdOn: string;\n }>;\n };\n\n const workingCopies: Environment[] = deployments\n .filter((d) => d.environmentType === \"WORKING_COPY\")\n .map((d) => ({\n name: d.name,\n accountName: d.accountName,\n projectName: d.projectName,\n branchName: d.branchName,\n environmentType: \"working_copy\",\n createdOn: new Date(d.createdOn),\n }));\n\n environmentJsonFromDeveloperAPI.data.push(...workingCopies);\n } else {\n logger.debug(\n {\n status: deploymentsResponse.status,\n statusText: deploymentsResponse.statusText,\n },\n \"Failed to fetch working-copy deployments for project\"\n );\n }\n\n if (environmentJsonFromDeveloperAPI.data.length === 0) {\n await printCriticalFailureToConsoleAndExit(\n \"Error: You don't have any environments for this project to link against. First, deploy this project using zuplo deploy and then link against that.\"\n );\n }\n\n argv[FETCHED_ENVIRONMENTS_KEY] = environmentJsonFromDeveloperAPI.data;\n\n // TODO: This logic doesn't work for working copies anymore due to\n // https://github.com/zuplo/core/blob/main/apps/tenant-api/prisma/migrations/v2_20250711155424_add-working-copy-main-check/migration.sql\n // and https://github.com/zuplo/core/blob/6595268b9d2e5edfb3a20cbb086ccd363cf115f9/apps/tenant-api/src/routes/managed-dedicated/environments.ts#L96-L102\n // Leaving this logic commented out for now since we may want to bring it back.\n // let numDevelopmentEnvironments =\n // environmentJsonFromDeveloperAPI.data.filter((env) => {\n // return env.environmentType === \"development\";\n // }).length;\n\n // if (numDevelopmentEnvironments <= 0) {\n // // Create one on-the-fly\n // const createDevelopmenEnvironmentResponse = await fetch(`${baseUrl}`, {\n // method: \"POST\",\n // headers: {\n // authorization: `Bearer ${argv.authToken}`,\n // \"Content-Type\": \"application/json\",\n // },\n // body: JSON.stringify({\n // accountName: argv.account,\n // projectName: argv.project,\n // environmentType: \"development\",\n // }),\n // });\n\n // if (!createDevelopmenEnvironmentResponse.ok) {\n // console.log(await createDevelopmenEnvironmentResponse.json());\n // logger.debug(\n // {\n // status: createDevelopmenEnvironmentResponse.status,\n // statusText: createDevelopmenEnvironmentResponse.statusText,\n // },\n // \"Failed to create a new instance of development environment\"\n // );\n // await printCriticalFailureToConsoleAndExit(\n // \"Failed to create a new development environment. Please try again later.\"\n // );\n // }\n\n // numDevelopmentEnvironments++;\n\n // // Re-fetch\n // const updatedResponse = await fetch(url, {\n // headers: {\n // authorization: `Bearer ${argv.authToken}`,\n // },\n // });\n\n // environmentJsonFromDeveloperAPI = (await updatedResponse.json()) as {\n // data: Environment[];\n // };\n // }\n\n try {\n argv.environment = await select({\n message: \"Select the environment\",\n choices: buildEnvironmentPromptChoices(\n environmentJsonFromDeveloperAPI.data\n ),\n });\n } catch (error) {\n if (error.isTtyError || error.name === \"ExitPromptError\") {\n process.exit(1);\n }\n logger.trace(\"Failed to select environment\", error);\n process.exit(1);\n }\n } else {\n logger.trace(\n {\n status: response.status,\n statusText: response.statusText,\n response: textOrJson(await response.text()),\n },\n \"Failed to request environments for project\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to request environments for the project.\"\n );\n }\n }\n}\nasync function getGitBranch(argv: { [key: string]: unknown }) {\n let branch: string | undefined;\n const dir = argv.dir;\n if (dir && typeof dir === \"string\") {\n const git = simpleGit({ baseDir: dir });\n const isGitRepo = await git.checkIsRepo();\n if (isGitRepo) {\n // Get the current branch from Git\n const status = await git.status();\n if (!status.current) {\n throw new Error(\"Invalid state: Directory is in detached head state.\");\n }\n branch = status.current.trim();\n\n // @NOTE - gitlab returns HEAD as the current branch when running git.status()\n // https://forum.gitlab.com/t/why-i-cant-get-the-branch-name/72462/6\n if (branch === \"HEAD\") {\n // Fetch remote branches to ensure the latest information. This is\n // best-effort: a fetch failure (offline, no credentials for the\n // remote, or a tracking ref that moved since the clone and so\n // cannot be locked) must not abort the command. The lookup below\n // already tolerates finding no matching remote branch, in which\n // case we fall through with `branch` still set to \"HEAD\".\n try {\n await git.fetch([\"--all\"]);\n } catch (error) {\n logger.debug(error, \"Failed to fetch remote branches\");\n }\n\n const branchCommit = await git.branch([\"-a\"]);\n const branchRef = await git.branch([\n \"-r\",\n \"--contains\",\n branchCommit.current,\n ]);\n if (branchRef?.all?.[0]) {\n const originBranch = branchRef.all[0];\n const cleanOriginBranch = originBranch.replace(/^origin\\//, \"\");\n if (!cleanOriginBranch) {\n throw new Error(\n \"Invalid state: Directory is in detached head state.\"\n );\n }\n branch = cleanOriginBranch.trim();\n }\n }\n }\n }\n return branch;\n}\n"]}
1
+ {"version":3,"file":"get-environment-param.js","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.ts"],"names":[],"mappings":"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","sourcesContent":["import { select } from \"@inquirer/prompts\";\nimport { simpleGit } from \"simple-git\";\nimport { Environment } from \"../api/lib.js\";\nimport { logger } from \"../logger.js\";\nimport { printCriticalFailureToConsoleAndExit, textOrJson } from \"../output.js\";\nimport settings from \"../settings.js\";\nimport { isInteractiveTerminal } from \"../terminal.js\";\nimport { buildEnvironmentPromptChoices } from \"../utils/build-environment-prompt-choices.js\";\n\nexport const ENVIRONMENT_EXPLICIT_KEY = \"environmentExplicit\";\nexport const FETCHED_ENVIRONMENTS_KEY = \"fetchedEnvironments\";\n\n/**\n * Records whether `--environment` was passed on the command line. Must run\n * before `fetchEnvironment`, which mutates `argv.environment` to the\n * inferred branch and erases the distinction. Downstream middlewares (e.g.\n * the production deploy confirmation) treat an explicit flag as the user's\n * opt-in to deploy to whatever environment they named.\n *\n * We deliberately read `process.argv` rather than `argv.environment` so\n * that `ZUPLO_ENVIRONMENT=...` (picked up by yargs `.env(\"ZUPLO\")`) does\n * NOT count as explicit. A sticky shell export shouldn't silently bypass\n * the production-deploy confirmation; the flag should.\n *\n * Only the long forms `--branch` and its deprecated `--environment` alias\n * are detected because `cmds/deploy.ts` doesn't declare a short alias. Adding a `-e` check\n * here without a yargs alias would let `-e foo` bypass the prompt while not\n * actually setting the environment — accepting the bypass without the side\n * effect.\n */\nexport function recordEnvironmentExplicit(argv: { [key: string]: unknown }) {\n argv[ENVIRONMENT_EXPLICIT_KEY] = hasEnvironmentFlag(process.argv);\n}\n\nexport function hasEnvironmentFlag(args: readonly string[]): boolean {\n // Skip node + script path; flags only appear after.\n for (let i = 2; i < args.length; i++) {\n const arg = args[i];\n for (const flag of [\"--environment\", \"--branch\"]) {\n if (arg === flag || arg.startsWith(`${flag}=`)) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function hasBranchFlag(args: readonly string[]): boolean {\n return args\n .slice(2)\n .some((arg) => arg === \"--branch\" || arg.startsWith(\"--branch=\"));\n}\n\n/**\n * `zuplo deploy --branch` overrides `--environment`. Only a typed flag counts:\n * yargs' `.env(\"ZUPLO\")` (and the `.env` file loaded by dotenv) also fill\n * `argv.branch` from an exported ZUPLO_BRANCH, which deploy has always ignored.\n */\nexport function applyBranchFlag(\n argv: { [key: string]: unknown },\n args: readonly string[]\n) {\n if (!hasBranchFlag(args)) {\n return;\n }\n const branch = argv.branch;\n argv.environment = Array.isArray(branch) ? branch.at(-1) : branch;\n}\n\n/**\n * Middleware that ensures a environment is provided in argv. If not, prompts the user.\n * Note: must be called after get account param and get project param.\n */\nexport async function fetchEnvironment(argv: { [key: string]: unknown }) {\n if (argv.environment && typeof argv.environment === \"string\") {\n return;\n }\n\n if (!argv.account || typeof argv.account !== \"string\") {\n throw new Error(\"Invalid state: account is not set.\");\n }\n if (!argv.project || typeof argv.project !== \"string\") {\n throw new Error(\"Invalid state: project is not set.\");\n }\n\n // 1. Check if the dir argument is set and if we are in a git repository\n // If we are, get the current branch and use that as the environment name.\n const branch = await getGitBranch(argv);\n\n if (branch && !argv[\"fetch-environments\"]) {\n // If the branch is set, use that as the environment name\n argv.environment = branch;\n } else {\n // In non-interactive environments, --environment must be passed explicitly.\n // We check here, before the API calls, to avoid unnecessary network round-trips.\n if (!isInteractiveTerminal()) {\n await printCriticalFailureToConsoleAndExit(\n \"Error: --environment is required in non-interactive environments (e.g. CI/CD).\\nUse the --environment flag to specify an environment name.\"\n );\n return;\n }\n\n const baseUrl = `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/environments`;\n\n const queryParams: Record<string, string> = {\n // This is safe because of the previous middleware where we set the account and project.\n accountName: argv.account!,\n projectName: argv.project!,\n };\n\n // Create the query string using URLSearchParams\n const url = new URL(baseUrl);\n url.search = new URLSearchParams(queryParams).toString();\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (response.ok) {\n const environmentJsonFromDeveloperAPI = (await response.json()) as {\n data: Environment[];\n };\n\n // Also fetch working-copy deployments, which are not returned by the\n // /v1/environments endpoint (it only returns self-managed and deployer-owned environments).\n const deploymentsUrl = new URL(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${argv.account}/projects/${argv.project}/deployments`\n );\n const deploymentsResponse = await fetch(deploymentsUrl, {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (deploymentsResponse.ok) {\n const { data: deployments } = (await deploymentsResponse.json()) as {\n data: Array<{\n name: string;\n accountName: string;\n projectName: string;\n branchName: string;\n environmentType: string;\n createdOn: string;\n }>;\n };\n\n const workingCopies: Environment[] = deployments\n .filter((d) => d.environmentType === \"WORKING_COPY\")\n .map((d) => ({\n name: d.name,\n accountName: d.accountName,\n projectName: d.projectName,\n branchName: d.branchName,\n environmentType: \"working_copy\",\n createdOn: new Date(d.createdOn),\n }));\n\n environmentJsonFromDeveloperAPI.data.push(...workingCopies);\n } else {\n logger.debug(\n {\n status: deploymentsResponse.status,\n statusText: deploymentsResponse.statusText,\n },\n \"Failed to fetch working-copy deployments for project\"\n );\n }\n\n if (environmentJsonFromDeveloperAPI.data.length === 0) {\n await printCriticalFailureToConsoleAndExit(\n \"Error: You don't have any environments for this project to link against. First, deploy this project using zuplo deploy and then link against that.\"\n );\n }\n\n argv[FETCHED_ENVIRONMENTS_KEY] = environmentJsonFromDeveloperAPI.data;\n\n // TODO: This logic doesn't work for working copies anymore due to\n // https://github.com/zuplo/core/blob/main/apps/tenant-api/prisma/migrations/v2_20250711155424_add-working-copy-main-check/migration.sql\n // and https://github.com/zuplo/core/blob/6595268b9d2e5edfb3a20cbb086ccd363cf115f9/apps/tenant-api/src/routes/managed-dedicated/environments.ts#L96-L102\n // Leaving this logic commented out for now since we may want to bring it back.\n // let numDevelopmentEnvironments =\n // environmentJsonFromDeveloperAPI.data.filter((env) => {\n // return env.environmentType === \"development\";\n // }).length;\n\n // if (numDevelopmentEnvironments <= 0) {\n // // Create one on-the-fly\n // const createDevelopmenEnvironmentResponse = await fetch(`${baseUrl}`, {\n // method: \"POST\",\n // headers: {\n // authorization: `Bearer ${argv.authToken}`,\n // \"Content-Type\": \"application/json\",\n // },\n // body: JSON.stringify({\n // accountName: argv.account,\n // projectName: argv.project,\n // environmentType: \"development\",\n // }),\n // });\n\n // if (!createDevelopmenEnvironmentResponse.ok) {\n // console.log(await createDevelopmenEnvironmentResponse.json());\n // logger.debug(\n // {\n // status: createDevelopmenEnvironmentResponse.status,\n // statusText: createDevelopmenEnvironmentResponse.statusText,\n // },\n // \"Failed to create a new instance of development environment\"\n // );\n // await printCriticalFailureToConsoleAndExit(\n // \"Failed to create a new development environment. Please try again later.\"\n // );\n // }\n\n // numDevelopmentEnvironments++;\n\n // // Re-fetch\n // const updatedResponse = await fetch(url, {\n // headers: {\n // authorization: `Bearer ${argv.authToken}`,\n // },\n // });\n\n // environmentJsonFromDeveloperAPI = (await updatedResponse.json()) as {\n // data: Environment[];\n // };\n // }\n\n try {\n argv.environment = await select({\n message: \"Select the environment\",\n choices: buildEnvironmentPromptChoices(\n environmentJsonFromDeveloperAPI.data\n ),\n });\n } catch (error) {\n if (error.isTtyError || error.name === \"ExitPromptError\") {\n process.exit(1);\n }\n logger.trace(\"Failed to select environment\", error);\n process.exit(1);\n }\n } else {\n logger.trace(\n {\n status: response.status,\n statusText: response.statusText,\n response: textOrJson(await response.text()),\n },\n \"Failed to request environments for project\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to request environments for the project.\"\n );\n }\n }\n}\nasync function getGitBranch(argv: { [key: string]: unknown }) {\n let branch: string | undefined;\n const dir = argv.dir;\n if (dir && typeof dir === \"string\") {\n const git = simpleGit({ baseDir: dir });\n const isGitRepo = await git.checkIsRepo();\n if (isGitRepo) {\n // Get the current branch from Git\n const status = await git.status();\n if (!status.current) {\n throw new Error(\"Invalid state: Directory is in detached head state.\");\n }\n branch = status.current.trim();\n\n // @NOTE - gitlab returns HEAD as the current branch when running git.status()\n // https://forum.gitlab.com/t/why-i-cant-get-the-branch-name/72462/6\n if (branch === \"HEAD\") {\n // Fetch remote branches to ensure the latest information. This is\n // best-effort: a fetch failure (offline, no credentials for the\n // remote, or a tracking ref that moved since the clone and so\n // cannot be locked) must not abort the command. The lookup below\n // already tolerates finding no matching remote branch, in which\n // case we fall through with `branch` still set to \"HEAD\".\n try {\n await git.fetch([\"--all\"]);\n } catch (error) {\n logger.debug(error, \"Failed to fetch remote branches\");\n }\n\n const branchCommit = await git.branch([\"-a\"]);\n const branchRef = await git.branch([\n \"-r\",\n \"--contains\",\n branchCommit.current,\n ]);\n if (branchRef?.all?.[0]) {\n const originBranch = branchRef.all[0];\n const cleanOriginBranch = originBranch.replace(/^origin\\//, \"\");\n if (!cleanOriginBranch) {\n throw new Error(\n \"Invalid state: Directory is in detached head state.\"\n );\n }\n branch = cleanOriginBranch.trim();\n }\n }\n }\n }\n return branch;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import assert from "node:assert";
2
2
  import { describe, it } from "node:test";
3
- import { hasEnvironmentFlag } from "./get-environment-param.js";
3
+ import { applyBranchFlag, hasEnvironmentFlag, } from "./get-environment-param.js";
4
4
  function argv(...userArgs) {
5
5
  return ["node", "/path/to/zup.js", ...userArgs];
6
6
  }
@@ -14,6 +14,13 @@ describe("hasEnvironmentFlag", () => {
14
14
  it("returns false for `-e main` because deploy doesn't declare a short alias", () => {
15
15
  assert.strictEqual(hasEnvironmentFlag(argv("deploy", "-e", "main")), false);
16
16
  });
17
+ it("returns true for the `--branch` alias", () => {
18
+ assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--branch", "main")), true);
19
+ assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--branch=main")), true);
20
+ });
21
+ it("does not match `--branch-other`", () => {
22
+ assert.strictEqual(hasEnvironmentFlag(argv("deploy", "--branch-other", "x")), false);
23
+ });
17
24
  it("returns false when no environment flag is present", () => {
18
25
  assert.strictEqual(hasEnvironmentFlag(argv("deploy")), false);
19
26
  });
@@ -30,4 +37,21 @@ describe("hasEnvironmentFlag", () => {
30
37
  assert.strictEqual(hasEnvironmentFlag(["--environment", "x", "deploy"]), false);
31
38
  });
32
39
  });
40
+ describe("applyBranchFlag", () => {
41
+ it("lets a typed --branch override --environment", () => {
42
+ const a = { environment: "from-environment", branch: "from-branch" };
43
+ applyBranchFlag(a, argv("deploy", "--branch", "from-branch", "--environment", "from-environment"));
44
+ assert.strictEqual(a.environment, "from-branch");
45
+ });
46
+ it("takes the last value when --branch is repeated", () => {
47
+ const a = { environment: undefined, branch: ["first", "last"] };
48
+ applyBranchFlag(a, argv("deploy", "--branch=first", "--branch=last"));
49
+ assert.strictEqual(a.environment, "last");
50
+ });
51
+ it("ignores a branch that came only from ZUPLO_BRANCH", () => {
52
+ const a = { environment: "from-environment", branch: "from-branch-var" };
53
+ applyBranchFlag(a, argv("deploy"));
54
+ assert.strictEqual(a.environment, "from-environment");
55
+ });
56
+ });
33
57
  //# sourceMappingURL=get-environment-param.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-environment-param.test.js","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE,SAAS,IAAI,CAAC,GAAG,QAAkB;IACjC,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,WAAW,CAChB,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,EAC3D,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,WAAW,CAChB,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,EACxD,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAGlF,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,WAAW,CAChB,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,EACrE,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2GAA2G,EAAE,GAAG,EAAE;QAGnH,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,WAAW,CAChB,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC,EAC9D,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAKxE,MAAM,CAAC,WAAW,CAChB,kBAAkB,CAAC,CAAC,eAAe,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,EACpD,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import assert from \"node:assert\";\nimport { describe, it } from \"node:test\";\nimport { hasEnvironmentFlag } from \"./get-environment-param.js\";\n\n// process.argv layout: [node, script, ...userArgs]. Helper builds that shape.\nfunction argv(...userArgs: string[]): string[] {\n return [\"node\", \"/path/to/zup.js\", ...userArgs];\n}\n\ndescribe(\"hasEnvironmentFlag\", () => {\n it(\"returns true for `--environment main`\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment\", \"main\")),\n true\n );\n });\n\n it(\"returns true for `--environment=main`\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment=main\")),\n true\n );\n });\n\n it(\"returns false for `-e main` because deploy doesn't declare a short alias\", () => {\n // If deploy's yargs option ever adds `alias: \\\"e\\\"`, this test should be\n // updated to expect true and the helper extended to match.\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\", \"-e\", \"main\")), false);\n });\n\n it(\"returns false when no environment flag is present\", () => {\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\")), false);\n });\n\n it(\"returns false when only unrelated flags are present\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--no-prompt\", \"--account\", \"foo\")),\n false\n );\n });\n\n it(\"returns false for env-var only (no flag in argv) — this is the case the production prompt must not bypass\", () => {\n // Simulates `ZUPLO_ENVIRONMENT=main npx zuplo deploy`: yargs picks up the\n // env var into argv.environment but the flag is absent from process.argv.\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\")), false);\n });\n\n it(\"does not match flags that share a prefix (e.g. `--environment-other`)\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment-other\", \"x\")),\n false\n );\n });\n\n it(\"ignores `--environment` if it appears in node/script positions\", () => {\n // Defensive: the loop intentionally starts at index 2 so an args array\n // that happens to put `--environment` at index 0 or 1 is not treated\n // as an explicit flag. (Not a realistic process.argv shape, but guards\n // the contract.)\n assert.strictEqual(\n hasEnvironmentFlag([\"--environment\", \"x\", \"deploy\"]),\n false\n );\n });\n});\n"]}
1
+ {"version":3,"file":"get-environment-param.test.js","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert\";\nimport { describe, it } from \"node:test\";\nimport {\n applyBranchFlag,\n hasEnvironmentFlag,\n} from \"./get-environment-param.js\";\n\n// process.argv layout: [node, script, ...userArgs]. Helper builds that shape.\nfunction argv(...userArgs: string[]): string[] {\n return [\"node\", \"/path/to/zup.js\", ...userArgs];\n}\n\ndescribe(\"hasEnvironmentFlag\", () => {\n it(\"returns true for `--environment main`\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment\", \"main\")),\n true\n );\n });\n\n it(\"returns true for `--environment=main`\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment=main\")),\n true\n );\n });\n\n it(\"returns false for `-e main` because deploy doesn't declare a short alias\", () => {\n // If deploy's yargs option ever adds `alias: \\\"e\\\"`, this test should be\n // updated to expect true and the helper extended to match.\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\", \"-e\", \"main\")), false);\n });\n\n it(\"returns true for the `--branch` alias\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--branch\", \"main\")),\n true\n );\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--branch=main\")),\n true\n );\n });\n\n it(\"does not match `--branch-other`\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--branch-other\", \"x\")),\n false\n );\n });\n\n it(\"returns false when no environment flag is present\", () => {\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\")), false);\n });\n\n it(\"returns false when only unrelated flags are present\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--no-prompt\", \"--account\", \"foo\")),\n false\n );\n });\n\n it(\"returns false for env-var only (no flag in argv) — this is the case the production prompt must not bypass\", () => {\n // Simulates `ZUPLO_ENVIRONMENT=main npx zuplo deploy`: yargs picks up the\n // env var into argv.environment but the flag is absent from process.argv.\n assert.strictEqual(hasEnvironmentFlag(argv(\"deploy\")), false);\n });\n\n it(\"does not match flags that share a prefix (e.g. `--environment-other`)\", () => {\n assert.strictEqual(\n hasEnvironmentFlag(argv(\"deploy\", \"--environment-other\", \"x\")),\n false\n );\n });\n\n it(\"ignores `--environment` if it appears in node/script positions\", () => {\n // Defensive: the loop intentionally starts at index 2 so an args array\n // that happens to put `--environment` at index 0 or 1 is not treated\n // as an explicit flag. (Not a realistic process.argv shape, but guards\n // the contract.)\n assert.strictEqual(\n hasEnvironmentFlag([\"--environment\", \"x\", \"deploy\"]),\n false\n );\n });\n});\n\ndescribe(\"applyBranchFlag\", () => {\n it(\"lets a typed --branch override --environment\", () => {\n const a = { environment: \"from-environment\", branch: \"from-branch\" };\n applyBranchFlag(\n a,\n argv(\n \"deploy\",\n \"--branch\",\n \"from-branch\",\n \"--environment\",\n \"from-environment\"\n )\n );\n assert.strictEqual(a.environment, \"from-branch\");\n });\n\n it(\"takes the last value when --branch is repeated\", () => {\n const a = { environment: undefined, branch: [\"first\", \"last\"] };\n applyBranchFlag(a, argv(\"deploy\", \"--branch=first\", \"--branch=last\"));\n assert.strictEqual(a.environment, \"last\");\n });\n\n it(\"ignores a branch that came only from ZUPLO_BRANCH\", () => {\n const a = { environment: \"from-environment\", branch: \"from-branch-var\" };\n applyBranchFlag(a, argv(\"deploy\"));\n assert.strictEqual(a.environment, \"from-environment\");\n });\n});\n"]}
@@ -5,20 +5,20 @@ Initially, Hono wasn't designed for Node.js, but with this adapter, you can now
5
5
 
6
6
  ## Benchmarks
7
7
 
8
- Hono is 4.1 times faster than Express.
8
+ Hono is 3.1 times faster than Express.
9
9
 
10
- Express:
10
+ Express v5:
11
11
 
12
12
  ```txt
13
13
  $ bombardier -d 10s --fasthttp http://localhost:3000/
14
14
 
15
15
  Statistics Avg Stdev Max
16
- Reqs/sec 20803.37 1713.06 24910.85
17
- Latency 6.01ms 5.21ms 451.37ms
16
+ Reqs/sec 24380.41 1409.74 26604.88
17
+ Latency 5.12ms 2.95ms 305.21ms
18
18
  HTTP codes:
19
- 1xx - 0, 2xx - 208131, 3xx - 0, 4xx - 0, 5xx - 0
19
+ 1xx - 0, 2xx - 243915, 3xx - 0, 4xx - 0, 5xx - 0
20
20
  others - 0
21
- Throughput: 5.75MB/s
21
+ Throughput: 6.98MB/s
22
22
  ```
23
23
 
24
24
  Hono + `@hono/node-server`:
@@ -27,12 +27,12 @@ Hono + `@hono/node-server`:
27
27
  $ bombardier -d 10s --fasthttp http://localhost:3000/
28
28
 
29
29
  Statistics Avg Stdev Max
30
- Reqs/sec 85405.51 7250.65 102658.51
31
- Latency 1.46ms 1.00ms 149.95ms
30
+ Reqs/sec 74428.96 3815.27 88228.32
31
+ Latency 1.68ms 621.25us 106.20ms
32
32
  HTTP codes:
33
- 1xx - 0, 2xx - 854120, 3xx - 0, 4xx - 0, 5xx - 0
33
+ 1xx - 0, 2xx - 744378, 3xx - 0, 4xx - 0, 5xx - 0
34
34
  others - 0
35
- Throughput: 18.49MB/s
35
+ Throughput: 16.82MB/s
36
36
  ```
37
37
 
38
38
  ## Requirements
@@ -226,6 +226,17 @@ Notice that `root` here is not relative to `src/index.ts`, rather to `my-hono-pr
226
226
 
227
227
  ### Options
228
228
 
229
+ #### `allowPercentInPath`
230
+
231
+ By default, `serveStatic` skips request paths that still contain `%` after routing. This prevents a second decoding step from serving a file under a different path than the one checked by route middleware. Set `allowPercentInPath: true` to keep the previous behavior when serving files whose names contain percent signs.
232
+
233
+ If you restrict access to only some paths under `root` (for example, `/static/admin/*`), enabling this option may let requests bypass those restrictions. Apply access control to the same route pattern as `serveStatic` (for example, `/static/*`), before the static middleware:
234
+
235
+ ```ts
236
+ app.use('/static/*', authMiddleware)
237
+ app.use('/static/*', serveStatic({ root: './static', allowPercentInPath: true }))
238
+ ```
239
+
229
240
  #### `rewriteRequestPath`
230
241
 
231
242
  If you want to serve files in `./.foojs` with the request path `/__foo/*`, you can write like the following.
@@ -15,7 +15,7 @@ const earlyHints = (options) => {
15
15
  const dest = c.req.header("Sec-Fetch-Dest");
16
16
  if (mode && mode !== "navigate" || dest && dest !== "document") return next();
17
17
  const env = c.env || {};
18
- const outgoing = (env.server ? env.server : env)?.outgoing;
18
+ const outgoing = ("server" in env ? env.server : env)?.outgoing;
19
19
  if (typeof outgoing?.writeEarlyHints !== "function") {
20
20
  if (!warned) {
21
21
  console.warn("Early Hints Middleware is not supported because writeEarlyHints is not defined.");
@@ -13,7 +13,7 @@ const earlyHints = (options) => {
13
13
  const dest = c.req.header("Sec-Fetch-Dest");
14
14
  if (mode && mode !== "navigate" || dest && dest !== "document") return next();
15
15
  const env = c.env || {};
16
- const outgoing = (env.server ? env.server : env)?.outgoing;
16
+ const outgoing = ("server" in env ? env.server : env)?.outgoing;
17
17
  if (typeof outgoing?.writeEarlyHints !== "function") {
18
18
  if (!warned) {
19
19
  console.warn("Early Hints Middleware is not supported because writeEarlyHints is not defined.");
@@ -868,7 +868,10 @@ const handleResponseError = (e, outgoing) => {
868
868
  if (err.code === "ERR_STREAM_PREMATURE_CLOSE") console.info("The user aborted a request.");
869
869
  else {
870
870
  console.error(e);
871
- if (!outgoing.headersSent) outgoing.writeHead(500, { "Content-Type": "text/plain" });
871
+ if (!outgoing.headersSent) {
872
+ if (outgoing instanceof node_http.ServerResponse) outgoing._contentLength = null;
873
+ outgoing.writeHead(500, { "Content-Type": "text/plain" });
874
+ }
872
875
  outgoing.end(`Error: ${err.message}`);
873
876
  outgoing.destroy(err);
874
877
  }
@@ -876,6 +879,21 @@ const handleResponseError = (e, outgoing) => {
876
879
  const flushHeaders = (outgoing) => {
877
880
  if ("flushHeaders" in outgoing && outgoing.writable) outgoing.flushHeaders();
878
881
  };
882
+ const trySetContentLength = (outgoing, status, length) => {
883
+ const http1 = outgoing;
884
+ if (http1._contentLength === null && http1._hasBody && http1.useChunkedEncodingByDefault && !http1._removedContLen && status >= 200 && status !== 204 && status !== 304 && !outgoing.hasHeader("content-length") && !outgoing.hasHeader("transfer-encoding") && !outgoing.hasHeader("trailer")) {
885
+ http1._contentLength = length;
886
+ return true;
887
+ }
888
+ return false;
889
+ };
890
+ const writeDefaultHeaders = (outgoing, status, length) => {
891
+ if (trySetContentLength(outgoing, status, length)) outgoing.writeHead(status, { "Content-Type": defaultContentType });
892
+ else outgoing.writeHead(status, {
893
+ "Content-Type": defaultContentType,
894
+ "Content-Length": length
895
+ });
896
+ };
879
897
  const responseViaCache = async (res, outgoing) => {
880
898
  let [status, body, header] = res[cacheKey];
881
899
  if (!header) {
@@ -883,22 +901,13 @@ const responseViaCache = async (res, outgoing) => {
883
901
  outgoing.writeHead(status);
884
902
  outgoing.end();
885
903
  } else if (typeof body === "string") {
886
- outgoing.writeHead(status, {
887
- "Content-Type": defaultContentType,
888
- "Content-Length": Buffer.byteLength(body)
889
- });
904
+ writeDefaultHeaders(outgoing, status, Buffer.byteLength(body));
890
905
  outgoing.end(body);
891
906
  } else if (body instanceof Uint8Array) {
892
- outgoing.writeHead(status, {
893
- "Content-Type": defaultContentType,
894
- "Content-Length": body.byteLength
895
- });
907
+ writeDefaultHeaders(outgoing, status, body.byteLength);
896
908
  outgoing.end(body);
897
909
  } else if (body instanceof Blob) {
898
- outgoing.writeHead(status, {
899
- "Content-Type": defaultContentType,
900
- "Content-Length": body.size
901
- });
910
+ writeDefaultHeaders(outgoing, status, body.size);
902
911
  outgoing.end(new Uint8Array(await body.arrayBuffer()));
903
912
  } else {
904
913
  outgoing.writeHead(status, { "Content-Type": defaultContentType });
@@ -909,6 +918,8 @@ const responseViaCache = async (res, outgoing) => {
909
918
  return;
910
919
  }
911
920
  let hasContentLength = false;
921
+ let plainHeaders = false;
922
+ let canAutoLength = true;
912
923
  if (header instanceof Headers) {
913
924
  hasContentLength = header.has("content-length");
914
925
  header = buildOutgoingHttpHeaders(header, body === null ? void 0 : defaultContentType);
@@ -916,14 +927,25 @@ const responseViaCache = async (res, outgoing) => {
916
927
  const headerObj = new Headers(header);
917
928
  hasContentLength = headerObj.has("content-length");
918
929
  header = buildOutgoingHttpHeaders(headerObj, body === null ? void 0 : defaultContentType);
919
- } else for (const key in header) if (key.length === 14 && key.toLowerCase() === "content-length") {
920
- hasContentLength = true;
921
- break;
930
+ } else {
931
+ plainHeaders = true;
932
+ for (const key in header) {
933
+ if (key.length === 14 && key.toLowerCase() === "content-length") {
934
+ hasContentLength = true;
935
+ break;
936
+ }
937
+ if (key.length === 17 && key.toLowerCase() === "transfer-encoding" || key.length === 7 && key.toLowerCase() === "trailer") canAutoLength = false;
938
+ }
922
939
  }
923
940
  if (!hasContentLength) {
924
- if (typeof body === "string") header["Content-Length"] = Buffer.byteLength(body);
925
- else if (body instanceof Uint8Array) header["Content-Length"] = body.byteLength;
926
- else if (body instanceof Blob) header["Content-Length"] = body.size;
941
+ let length;
942
+ if (typeof body === "string") length = Buffer.byteLength(body);
943
+ else if (body instanceof Uint8Array) length = body.byteLength;
944
+ else if (body instanceof Blob) length = body.size;
945
+ if (length !== void 0 && (!plainHeaders || !canAutoLength || !trySetContentLength(outgoing, status, length))) {
946
+ if (plainHeaders) header = { ...header };
947
+ header["Content-Length"] = length;
948
+ }
927
949
  }
928
950
  outgoing.writeHead(status, header);
929
951
  if (body == null) outgoing.end();