bantou 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. package/.output/nitro.json +13 -0
  2. package/.output/public/_nuxt/BmGsA4i2.js +1 -0
  3. package/.output/public/_nuxt/D_G6gzEa.js +1 -0
  4. package/.output/public/_nuxt/builds/latest.json +1 -0
  5. package/.output/public/_nuxt/builds/meta/1a8fc623-6671-445b-bdd3-c3d073520a3a.json +1 -0
  6. package/.output/public/_nuxt/entry.CZSvzYhH.css +1 -0
  7. package/.output/public/_nuxt/error-404.C3wqHTJz.css +1 -0
  8. package/.output/public/_nuxt/error-500.D6rBzoDj.css +1 -0
  9. package/.output/public/_nuxt/pdFQkwM_.js +4 -0
  10. package/.output/server/chunks/_/error-500.mjs +20 -0
  11. package/.output/server/chunks/_/error-500.mjs.map +1 -0
  12. package/.output/server/chunks/nitro/nitro.mjs +5870 -0
  13. package/.output/server/chunks/nitro/nitro.mjs.map +1 -0
  14. package/.output/server/chunks/routes/mcp.mjs +22 -0
  15. package/.output/server/chunks/routes/mcp.mjs.map +1 -0
  16. package/.output/server/chunks/routes/renderer.mjs +462 -0
  17. package/.output/server/chunks/routes/renderer.mjs.map +1 -0
  18. package/.output/server/chunks/virtual/_virtual_spa-template.mjs +4 -0
  19. package/.output/server/chunks/virtual/_virtual_spa-template.mjs.map +1 -0
  20. package/.output/server/chunks/virtual/precomputed.mjs +4 -0
  21. package/.output/server/chunks/virtual/precomputed.mjs.map +1 -0
  22. package/.output/server/index.mjs +18 -0
  23. package/.output/server/index.mjs.map +1 -0
  24. package/.output/server/node_modules/@babel/parser/lib/index.js +14657 -0
  25. package/.output/server/node_modules/@babel/parser/package.json +50 -0
  26. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js +64 -0
  27. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js +16 -0
  28. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.js +32 -0
  29. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js +246 -0
  30. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/package.json +1 -0
  31. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +41 -0
  32. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +429 -0
  33. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +971 -0
  34. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/requestBody.js +58 -0
  35. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/sseKeepAlive.js +13 -0
  36. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/webStandardStreamableHttp.js +961 -0
  37. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +228 -0
  38. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +51 -0
  39. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.js +57 -0
  40. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +1137 -0
  41. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/toolNameValidation.js +92 -0
  42. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/uriTemplate.js +239 -0
  43. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +2065 -0
  44. package/.output/server/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +87 -0
  45. package/.output/server/node_modules/@modelcontextprotocol/sdk/package.json +165 -0
  46. package/.output/server/node_modules/@parcel/watcher-wasm/index.mjs +349 -0
  47. package/.output/server/node_modules/@parcel/watcher-wasm/package.json +44 -0
  48. package/.output/server/node_modules/@parcel/watcher-wasm/watcher.wasm +0 -0
  49. package/.output/server/node_modules/@parcel/watcher-wasm/wrapper.js +88 -0
  50. package/.output/server/node_modules/@unagents/messenger-broker/dist/index.mjs +12 -0
  51. package/.output/server/node_modules/@unagents/messenger-broker/dist/shared/messenger-broker.B8W77sqB.mjs +1177 -0
  52. package/.output/server/node_modules/@unagents/messenger-broker/package.json +37 -0
  53. package/.output/server/node_modules/@unagents/messenger-client/dist/index.mjs +9 -0
  54. package/.output/server/node_modules/@unagents/messenger-client/dist/shared/messenger-client.CfQVmH_Z.mjs +975 -0
  55. package/.output/server/node_modules/@unagents/messenger-client/dist/shared/messenger-client.CoDKzubj.mjs +1000 -0
  56. package/.output/server/node_modules/@unagents/messenger-client/package.json +37 -0
  57. package/.output/server/node_modules/@unagents/messenger-protocol/dist/index.mjs +103 -0
  58. package/.output/server/node_modules/@unagents/messenger-protocol/package.json +29 -0
  59. package/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6802 -0
  60. package/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
  61. package/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +729 -0
  62. package/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
  63. package/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1420 -0
  64. package/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
  65. package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1933 -0
  66. package/.output/server/node_modules/@vue/reactivity/package.json +55 -0
  67. package/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +7085 -0
  68. package/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
  69. package/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1917 -0
  70. package/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
  71. package/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +951 -0
  72. package/.output/server/node_modules/@vue/server-renderer/package.json +53 -0
  73. package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +655 -0
  74. package/.output/server/node_modules/@vue/shared/package.json +47 -0
  75. package/.output/server/node_modules/ajv/dist/ajv.js +50 -0
  76. package/.output/server/node_modules/ajv/dist/compile/codegen/code.js +156 -0
  77. package/.output/server/node_modules/ajv/dist/compile/codegen/index.js +697 -0
  78. package/.output/server/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
  79. package/.output/server/node_modules/ajv/dist/compile/errors.js +123 -0
  80. package/.output/server/node_modules/ajv/dist/compile/index.js +242 -0
  81. package/.output/server/node_modules/ajv/dist/compile/names.js +28 -0
  82. package/.output/server/node_modules/ajv/dist/compile/ref_error.js +12 -0
  83. package/.output/server/node_modules/ajv/dist/compile/resolve.js +155 -0
  84. package/.output/server/node_modules/ajv/dist/compile/rules.js +26 -0
  85. package/.output/server/node_modules/ajv/dist/compile/util.js +178 -0
  86. package/.output/server/node_modules/ajv/dist/compile/validate/applicability.js +19 -0
  87. package/.output/server/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
  88. package/.output/server/node_modules/ajv/dist/compile/validate/dataType.js +203 -0
  89. package/.output/server/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
  90. package/.output/server/node_modules/ajv/dist/compile/validate/index.js +520 -0
  91. package/.output/server/node_modules/ajv/dist/compile/validate/keyword.js +124 -0
  92. package/.output/server/node_modules/ajv/dist/compile/validate/subschema.js +81 -0
  93. package/.output/server/node_modules/ajv/dist/core.js +618 -0
  94. package/.output/server/node_modules/ajv/dist/refs/data.json +13 -0
  95. package/.output/server/node_modules/ajv/dist/refs/json-schema-draft-07.json +151 -0
  96. package/.output/server/node_modules/ajv/dist/runtime/equal.js +7 -0
  97. package/.output/server/node_modules/ajv/dist/runtime/ucs2length.js +24 -0
  98. package/.output/server/node_modules/ajv/dist/runtime/uri.js +6 -0
  99. package/.output/server/node_modules/ajv/dist/runtime/validation_error.js +11 -0
  100. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +49 -0
  101. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +106 -0
  102. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/allOf.js +23 -0
  103. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +12 -0
  104. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/contains.js +95 -0
  105. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +85 -0
  106. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
  107. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/index.js +44 -0
  108. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/items.js +52 -0
  109. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/items2020.js +30 -0
  110. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/not.js +26 -0
  111. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +60 -0
  112. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +75 -0
  113. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +12 -0
  114. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
  115. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +38 -0
  116. package/.output/server/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +13 -0
  117. package/.output/server/node_modules/ajv/dist/vocabularies/code.js +131 -0
  118. package/.output/server/node_modules/ajv/dist/vocabularies/core/id.js +10 -0
  119. package/.output/server/node_modules/ajv/dist/vocabularies/core/index.js +16 -0
  120. package/.output/server/node_modules/ajv/dist/vocabularies/core/ref.js +122 -0
  121. package/.output/server/node_modules/ajv/dist/vocabularies/discriminator/index.js +104 -0
  122. package/.output/server/node_modules/ajv/dist/vocabularies/discriminator/types.js +9 -0
  123. package/.output/server/node_modules/ajv/dist/vocabularies/draft7.js +17 -0
  124. package/.output/server/node_modules/ajv/dist/vocabularies/format/format.js +92 -0
  125. package/.output/server/node_modules/ajv/dist/vocabularies/format/index.js +6 -0
  126. package/.output/server/node_modules/ajv/dist/vocabularies/metadata.js +18 -0
  127. package/.output/server/node_modules/ajv/dist/vocabularies/validation/const.js +25 -0
  128. package/.output/server/node_modules/ajv/dist/vocabularies/validation/enum.js +48 -0
  129. package/.output/server/node_modules/ajv/dist/vocabularies/validation/index.js +33 -0
  130. package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitItems.js +24 -0
  131. package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitLength.js +27 -0
  132. package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +27 -0
  133. package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +24 -0
  134. package/.output/server/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +26 -0
  135. package/.output/server/node_modules/ajv/dist/vocabularies/validation/pattern.js +33 -0
  136. package/.output/server/node_modules/ajv/dist/vocabularies/validation/required.js +79 -0
  137. package/.output/server/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +64 -0
  138. package/.output/server/node_modules/ajv/package.json +126 -0
  139. package/.output/server/node_modules/ajv-formats/dist/formats.js +208 -0
  140. package/.output/server/node_modules/ajv-formats/dist/index.js +37 -0
  141. package/.output/server/node_modules/ajv-formats/dist/limit.js +69 -0
  142. package/.output/server/node_modules/ajv-formats/package.json +74 -0
  143. package/.output/server/node_modules/consola/dist/chunks/prompt.mjs +280 -0
  144. package/.output/server/node_modules/consola/dist/core.mjs +512 -0
  145. package/.output/server/node_modules/consola/dist/index.mjs +651 -0
  146. package/.output/server/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +72 -0
  147. package/.output/server/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +288 -0
  148. package/.output/server/node_modules/consola/dist/utils.mjs +54 -0
  149. package/.output/server/node_modules/consola/package.json +136 -0
  150. package/.output/server/node_modules/content-type/index.js +225 -0
  151. package/.output/server/node_modules/content-type/package.json +42 -0
  152. package/.output/server/node_modules/cookie-es/dist/index.mjs +268 -0
  153. package/.output/server/node_modules/cookie-es/package.json +46 -0
  154. package/.output/server/node_modules/crossws/dist/_chunks/_request.mjs +83 -0
  155. package/.output/server/node_modules/crossws/dist/_chunks/adapter.mjs +234 -0
  156. package/.output/server/node_modules/crossws/dist/_chunks/error.mjs +7 -0
  157. package/.output/server/node_modules/crossws/dist/_chunks/libs/ws.mjs +6 -0
  158. package/.output/server/node_modules/crossws/dist/_chunks/node.mjs +220 -0
  159. package/.output/server/node_modules/crossws/dist/_chunks/peer.mjs +208 -0
  160. package/.output/server/node_modules/crossws/dist/adapters/node.mjs +1 -0
  161. package/.output/server/node_modules/crossws/package.json +115 -0
  162. package/.output/server/node_modules/defu/dist/defu.mjs +69 -0
  163. package/.output/server/node_modules/defu/package.json +48 -0
  164. package/.output/server/node_modules/destr/dist/index.mjs +72 -0
  165. package/.output/server/node_modules/destr/package.json +47 -0
  166. package/.output/server/node_modules/devalue/index.js +17 -0
  167. package/.output/server/node_modules/devalue/package.json +39 -0
  168. package/.output/server/node_modules/devalue/src/base64.js +60 -0
  169. package/.output/server/node_modules/devalue/src/constants.js +12 -0
  170. package/.output/server/node_modules/devalue/src/operations.js +221 -0
  171. package/.output/server/node_modules/devalue/src/parse.js +279 -0
  172. package/.output/server/node_modules/devalue/src/stringify.js +433 -0
  173. package/.output/server/node_modules/devalue/src/uneval.js +698 -0
  174. package/.output/server/node_modules/devalue/src/utils.js +190 -0
  175. package/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
  176. package/.output/server/node_modules/entities/dist/commonjs/decode.js +568 -0
  177. package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
  178. package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
  179. package/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
  180. package/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
  181. package/.output/server/node_modules/entities/dist/commonjs/package.json +3 -0
  182. package/.output/server/node_modules/entities/package.json +120 -0
  183. package/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
  184. package/.output/server/node_modules/estree-walker/package.json +37 -0
  185. package/.output/server/node_modules/fast-deep-equal/index.js +46 -0
  186. package/.output/server/node_modules/fast-deep-equal/package.json +61 -0
  187. package/.output/server/node_modules/fast-uri/index.js +711 -0
  188. package/.output/server/node_modules/fast-uri/lib/schemes.js +272 -0
  189. package/.output/server/node_modules/fast-uri/lib/utils.js +799 -0
  190. package/.output/server/node_modules/fast-uri/package.json +68 -0
  191. package/.output/server/node_modules/get-port-please/dist/index.mjs +430 -0
  192. package/.output/server/node_modules/get-port-please/package.json +39 -0
  193. package/.output/server/node_modules/h3/dist/index.mjs +2498 -0
  194. package/.output/server/node_modules/h3/package.json +75 -0
  195. package/.output/server/node_modules/hookable/dist/index.mjs +257 -0
  196. package/.output/server/node_modules/hookable/package.json +54 -0
  197. package/.output/server/node_modules/http-shutdown/index.js +85 -0
  198. package/.output/server/node_modules/http-shutdown/package.json +32 -0
  199. package/.output/server/node_modules/iron-webcrypto/dist/index.js +298 -0
  200. package/.output/server/node_modules/iron-webcrypto/package.json +72 -0
  201. package/.output/server/node_modules/is-extglob/index.js +20 -0
  202. package/.output/server/node_modules/is-extglob/package.json +69 -0
  203. package/.output/server/node_modules/is-glob/index.js +150 -0
  204. package/.output/server/node_modules/is-glob/package.json +81 -0
  205. package/.output/server/node_modules/jiti/dist/jiti.cjs +1 -0
  206. package/.output/server/node_modules/jiti/lib/jiti.mjs +29 -0
  207. package/.output/server/node_modules/jiti/package.json +146 -0
  208. package/.output/server/node_modules/json-schema-traverse/index.js +93 -0
  209. package/.output/server/node_modules/json-schema-traverse/package.json +43 -0
  210. package/.output/server/node_modules/listhen/dist/chunks/xdg-open.mjs +1069 -0
  211. package/.output/server/node_modules/listhen/dist/index.mjs +19 -0
  212. package/.output/server/node_modules/listhen/dist/shared/listhen.tqe5I1Rl.mjs +1040 -0
  213. package/.output/server/node_modules/listhen/package.json +84 -0
  214. package/.output/server/node_modules/napi-wasm/index.mjs +1371 -0
  215. package/.output/server/node_modules/napi-wasm/package.json +33 -0
  216. package/.output/server/node_modules/node-forge/lib/aes.js +1091 -0
  217. package/.output/server/node_modules/node-forge/lib/aesCipherSuites.js +282 -0
  218. package/.output/server/node_modules/node-forge/lib/asn1-validator.js +91 -0
  219. package/.output/server/node_modules/node-forge/lib/asn1.js +1522 -0
  220. package/.output/server/node_modules/node-forge/lib/baseN.js +186 -0
  221. package/.output/server/node_modules/node-forge/lib/cipher.js +230 -0
  222. package/.output/server/node_modules/node-forge/lib/cipherModes.js +1027 -0
  223. package/.output/server/node_modules/node-forge/lib/des.js +496 -0
  224. package/.output/server/node_modules/node-forge/lib/ed25519.js +1091 -0
  225. package/.output/server/node_modules/node-forge/lib/forge.js +13 -0
  226. package/.output/server/node_modules/node-forge/lib/hmac.js +146 -0
  227. package/.output/server/node_modules/node-forge/lib/index.js +33 -0
  228. package/.output/server/node_modules/node-forge/lib/jsbn.js +1294 -0
  229. package/.output/server/node_modules/node-forge/lib/kem.js +168 -0
  230. package/.output/server/node_modules/node-forge/lib/log.js +319 -0
  231. package/.output/server/node_modules/node-forge/lib/md.all.js +13 -0
  232. package/.output/server/node_modules/node-forge/lib/md.js +11 -0
  233. package/.output/server/node_modules/node-forge/lib/md5.js +289 -0
  234. package/.output/server/node_modules/node-forge/lib/mgf.js +12 -0
  235. package/.output/server/node_modules/node-forge/lib/mgf1.js +57 -0
  236. package/.output/server/node_modules/node-forge/lib/oids.js +180 -0
  237. package/.output/server/node_modules/node-forge/lib/pbe.js +1029 -0
  238. package/.output/server/node_modules/node-forge/lib/pbkdf2.js +211 -0
  239. package/.output/server/node_modules/node-forge/lib/pem.js +413 -0
  240. package/.output/server/node_modules/node-forge/lib/pkcs1.js +276 -0
  241. package/.output/server/node_modules/node-forge/lib/pkcs12.js +1081 -0
  242. package/.output/server/node_modules/node-forge/lib/pkcs7.js +1260 -0
  243. package/.output/server/node_modules/node-forge/lib/pkcs7asn1.js +410 -0
  244. package/.output/server/node_modules/node-forge/lib/pki.js +102 -0
  245. package/.output/server/node_modules/node-forge/lib/prime.js +297 -0
  246. package/.output/server/node_modules/node-forge/lib/prng.js +419 -0
  247. package/.output/server/node_modules/node-forge/lib/pss.js +241 -0
  248. package/.output/server/node_modules/node-forge/lib/random.js +191 -0
  249. package/.output/server/node_modules/node-forge/lib/rc2.js +410 -0
  250. package/.output/server/node_modules/node-forge/lib/rsa.js +2014 -0
  251. package/.output/server/node_modules/node-forge/lib/sha1.js +319 -0
  252. package/.output/server/node_modules/node-forge/lib/sha256.js +327 -0
  253. package/.output/server/node_modules/node-forge/lib/sha512.js +561 -0
  254. package/.output/server/node_modules/node-forge/lib/ssh.js +236 -0
  255. package/.output/server/node_modules/node-forge/lib/tls.js +4334 -0
  256. package/.output/server/node_modules/node-forge/lib/util.js +2652 -0
  257. package/.output/server/node_modules/node-forge/lib/x509.js +3257 -0
  258. package/.output/server/node_modules/node-forge/package.json +123 -0
  259. package/.output/server/node_modules/node-mock-http/dist/_polyfill/buffer/node.mjs +1 -0
  260. package/.output/server/node_modules/node-mock-http/dist/_polyfill/events/node.mjs +1 -0
  261. package/.output/server/node_modules/node-mock-http/dist/index.mjs +1 -0
  262. package/.output/server/node_modules/node-mock-http/package.json +63 -0
  263. package/.output/server/node_modules/nostics/dist/formatters/ansi.mjs +19 -0
  264. package/.output/server/node_modules/nostics/dist/index.mjs +194 -0
  265. package/.output/server/node_modules/nostics/package.json +126 -0
  266. package/.output/server/node_modules/pathe/dist/index.mjs +19 -0
  267. package/.output/server/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs +249 -0
  268. package/.output/server/node_modules/pathe/package.json +61 -0
  269. package/.output/server/node_modules/picomatch/index.js +17 -0
  270. package/.output/server/node_modules/picomatch/lib/constants.js +184 -0
  271. package/.output/server/node_modules/picomatch/lib/parse.js +1425 -0
  272. package/.output/server/node_modules/picomatch/lib/picomatch.js +361 -0
  273. package/.output/server/node_modules/picomatch/lib/scan.js +403 -0
  274. package/.output/server/node_modules/picomatch/lib/utils.js +72 -0
  275. package/.output/server/node_modules/picomatch/package.json +83 -0
  276. package/.output/server/node_modules/radix3/dist/index.mjs +262 -0
  277. package/.output/server/node_modules/radix3/package.json +52 -0
  278. package/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
  279. package/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  280. package/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
  281. package/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
  282. package/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
  283. package/.output/server/node_modules/source-map-js/lib/quick-sort.js +141 -0
  284. package/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1236 -0
  285. package/.output/server/node_modules/source-map-js/lib/source-map-generator.js +446 -0
  286. package/.output/server/node_modules/source-map-js/lib/source-node.js +420 -0
  287. package/.output/server/node_modules/source-map-js/lib/util.js +594 -0
  288. package/.output/server/node_modules/source-map-js/package.json +71 -0
  289. package/.output/server/node_modules/source-map-js/source-map.js +8 -0
  290. package/.output/server/node_modules/std-env/dist/index.mjs +1 -0
  291. package/.output/server/node_modules/std-env/package.json +43 -0
  292. package/.output/server/node_modules/tinyclip/dist/index.js +143 -0
  293. package/.output/server/node_modules/tinyclip/package.json +48 -0
  294. package/.output/server/node_modules/ufo/dist/index.mjs +645 -0
  295. package/.output/server/node_modules/ufo/package.json +48 -0
  296. package/.output/server/node_modules/uncrypto/dist/crypto.node.mjs +16 -0
  297. package/.output/server/node_modules/uncrypto/package.json +60 -0
  298. package/.output/server/node_modules/unhead/dist/client.mjs +22 -0
  299. package/.output/server/node_modules/unhead/dist/legacy.mjs +33 -0
  300. package/.output/server/node_modules/unhead/dist/minify.mjs +183 -0
  301. package/.output/server/node_modules/unhead/dist/parser.mjs +518 -0
  302. package/.output/server/node_modules/unhead/dist/plugins.mjs +782 -0
  303. package/.output/server/node_modules/unhead/dist/server.mjs +99 -0
  304. package/.output/server/node_modules/unhead/dist/shared/unhead.BEmVMkeA.mjs +673 -0
  305. package/.output/server/node_modules/unhead/dist/shared/unhead.Bf_fPVYA.mjs +6 -0
  306. package/.output/server/node_modules/unhead/dist/shared/unhead.Bm4Y6XQI.mjs +17 -0
  307. package/.output/server/node_modules/unhead/dist/shared/unhead.C5Bksi2B.mjs +49 -0
  308. package/.output/server/node_modules/unhead/dist/shared/unhead.CGPOfp5O.mjs +32 -0
  309. package/.output/server/node_modules/unhead/dist/shared/unhead.CHEy9ana.mjs +7 -0
  310. package/.output/server/node_modules/unhead/dist/shared/unhead.C_7zwq8E.mjs +11 -0
  311. package/.output/server/node_modules/unhead/dist/shared/unhead.CaeaMM5q.mjs +19 -0
  312. package/.output/server/node_modules/unhead/dist/shared/unhead.D7HkBzZn.mjs +59 -0
  313. package/.output/server/node_modules/unhead/dist/shared/unhead.D9VfQWNo.mjs +240 -0
  314. package/.output/server/node_modules/unhead/dist/shared/unhead.DD4N5B4k.mjs +224 -0
  315. package/.output/server/node_modules/unhead/dist/shared/unhead.DGl9jcjg.mjs +196 -0
  316. package/.output/server/node_modules/unhead/dist/shared/unhead.DJuZwX9c.mjs +400 -0
  317. package/.output/server/node_modules/unhead/dist/shared/unhead.DkxnqlHC.mjs +264 -0
  318. package/.output/server/node_modules/unhead/dist/shared/unhead.DspMpm6y.mjs +48 -0
  319. package/.output/server/node_modules/unhead/dist/shared/unhead.o8j9utSy.mjs +208 -0
  320. package/.output/server/node_modules/unhead/dist/stream/client.mjs +33 -0
  321. package/.output/server/node_modules/unhead/dist/stream/iife.mjs +2 -0
  322. package/.output/server/node_modules/unhead/dist/stream/server.mjs +446 -0
  323. package/.output/server/node_modules/unhead/dist/utils.mjs +7 -0
  324. package/.output/server/node_modules/unhead/package.json +179 -0
  325. package/.output/server/node_modules/untun/dist/_chunks/cloudflared.mjs +179 -0
  326. package/.output/server/node_modules/untun/dist/_chunks/log.mjs +27 -0
  327. package/.output/server/node_modules/untun/dist/index.mjs +47 -0
  328. package/.output/server/node_modules/untun/package.json +44 -0
  329. package/.output/server/node_modules/uqr/dist/index.mjs +739 -0
  330. package/.output/server/node_modules/uqr/package.json +69 -0
  331. package/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
  332. package/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
  333. package/.output/server/node_modules/vue/index.js +7 -0
  334. package/.output/server/node_modules/vue/index.mjs +1 -0
  335. package/.output/server/node_modules/vue/package.json +112 -0
  336. package/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
  337. package/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +687 -0
  338. package/.output/server/node_modules/vue-bundle-renderer/package.json +66 -0
  339. package/.output/server/node_modules/zod/index.js +7 -0
  340. package/.output/server/node_modules/zod/package.json +147 -0
  341. package/.output/server/node_modules/zod/v3/ZodError.js +143 -0
  342. package/.output/server/node_modules/zod/v3/errors.js +9 -0
  343. package/.output/server/node_modules/zod/v3/external.js +6 -0
  344. package/.output/server/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  345. package/.output/server/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  346. package/.output/server/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  347. package/.output/server/node_modules/zod/v3/helpers/util.js +133 -0
  348. package/.output/server/node_modules/zod/v3/index.js +4 -0
  349. package/.output/server/node_modules/zod/v3/locales/en.js +109 -0
  350. package/.output/server/node_modules/zod/v3/package.json +7 -0
  351. package/.output/server/node_modules/zod/v3/types.js +3697 -0
  352. package/.output/server/node_modules/zod/v4/classic/checks.js +1 -0
  353. package/.output/server/node_modules/zod/v4/classic/coerce.js +17 -0
  354. package/.output/server/node_modules/zod/v4/classic/compat.js +31 -0
  355. package/.output/server/node_modules/zod/v4/classic/deep-partial.js +13 -0
  356. package/.output/server/node_modules/zod/v4/classic/errors.js +57 -0
  357. package/.output/server/node_modules/zod/v4/classic/external.js +17 -0
  358. package/.output/server/node_modules/zod/v4/classic/from-json-schema.js +881 -0
  359. package/.output/server/node_modules/zod/v4/classic/in-out.js +36 -0
  360. package/.output/server/node_modules/zod/v4/classic/index.js +4 -0
  361. package/.output/server/node_modules/zod/v4/classic/iso.js +15 -0
  362. package/.output/server/node_modules/zod/v4/classic/package.json +7 -0
  363. package/.output/server/node_modules/zod/v4/classic/parse.js +16 -0
  364. package/.output/server/node_modules/zod/v4/classic/schemas.js +1535 -0
  365. package/.output/server/node_modules/zod/v4/core/api.js +1107 -0
  366. package/.output/server/node_modules/zod/v4/core/checks.js +516 -0
  367. package/.output/server/node_modules/zod/v4/core/compile.js +1866 -0
  368. package/.output/server/node_modules/zod/v4/core/core.js +141 -0
  369. package/.output/server/node_modules/zod/v4/core/doc.js +38 -0
  370. package/.output/server/node_modules/zod/v4/core/errors.js +267 -0
  371. package/.output/server/node_modules/zod/v4/core/index.js +19 -0
  372. package/.output/server/node_modules/zod/v4/core/json-schema-generator.js +99 -0
  373. package/.output/server/node_modules/zod/v4/core/json-schema-processors.js +843 -0
  374. package/.output/server/node_modules/zod/v4/core/json-schema.js +1 -0
  375. package/.output/server/node_modules/zod/v4/core/memoizer.js +311 -0
  376. package/.output/server/node_modules/zod/v4/core/package.json +7 -0
  377. package/.output/server/node_modules/zod/v4/core/parse.js +175 -0
  378. package/.output/server/node_modules/zod/v4/core/regexes.js +156 -0
  379. package/.output/server/node_modules/zod/v4/core/registries.js +51 -0
  380. package/.output/server/node_modules/zod/v4/core/schemas.js +2636 -0
  381. package/.output/server/node_modules/zod/v4/core/to-json-schema.js +651 -0
  382. package/.output/server/node_modules/zod/v4/core/util.js +873 -0
  383. package/.output/server/node_modules/zod/v4/core/versions.js +5 -0
  384. package/.output/server/node_modules/zod/v4/core/visit.js +169 -0
  385. package/.output/server/node_modules/zod/v4/index.js +4 -0
  386. package/.output/server/node_modules/zod/v4/locales/ar.js +111 -0
  387. package/.output/server/node_modules/zod/v4/locales/az.js +110 -0
  388. package/.output/server/node_modules/zod/v4/locales/be.js +168 -0
  389. package/.output/server/node_modules/zod/v4/locales/bg.js +125 -0
  390. package/.output/server/node_modules/zod/v4/locales/bn.js +113 -0
  391. package/.output/server/node_modules/zod/v4/locales/ca.js +112 -0
  392. package/.output/server/node_modules/zod/v4/locales/ckb.js +133 -0
  393. package/.output/server/node_modules/zod/v4/locales/cs.js +116 -0
  394. package/.output/server/node_modules/zod/v4/locales/da.js +120 -0
  395. package/.output/server/node_modules/zod/v4/locales/de.js +113 -0
  396. package/.output/server/node_modules/zod/v4/locales/el.js +112 -0
  397. package/.output/server/node_modules/zod/v4/locales/en.js +125 -0
  398. package/.output/server/node_modules/zod/v4/locales/eo.js +114 -0
  399. package/.output/server/node_modules/zod/v4/locales/es.js +136 -0
  400. package/.output/server/node_modules/zod/v4/locales/fa.js +119 -0
  401. package/.output/server/node_modules/zod/v4/locales/fi.js +117 -0
  402. package/.output/server/node_modules/zod/v4/locales/fr-CA.js +112 -0
  403. package/.output/server/node_modules/zod/v4/locales/fr.js +129 -0
  404. package/.output/server/node_modules/zod/v4/locales/gu.js +113 -0
  405. package/.output/server/node_modules/zod/v4/locales/he.js +221 -0
  406. package/.output/server/node_modules/zod/v4/locales/hi.js +111 -0
  407. package/.output/server/node_modules/zod/v4/locales/hr.js +126 -0
  408. package/.output/server/node_modules/zod/v4/locales/hu.js +113 -0
  409. package/.output/server/node_modules/zod/v4/locales/hy.js +158 -0
  410. package/.output/server/node_modules/zod/v4/locales/id.js +111 -0
  411. package/.output/server/node_modules/zod/v4/locales/index.js +63 -0
  412. package/.output/server/node_modules/zod/v4/locales/is.js +114 -0
  413. package/.output/server/node_modules/zod/v4/locales/it.js +113 -0
  414. package/.output/server/node_modules/zod/v4/locales/ja.js +112 -0
  415. package/.output/server/node_modules/zod/v4/locales/ka.js +117 -0
  416. package/.output/server/node_modules/zod/v4/locales/kh.js +5 -0
  417. package/.output/server/node_modules/zod/v4/locales/km.js +115 -0
  418. package/.output/server/node_modules/zod/v4/locales/kn.js +116 -0
  419. package/.output/server/node_modules/zod/v4/locales/ko.js +116 -0
  420. package/.output/server/node_modules/zod/v4/locales/lt.js +207 -0
  421. package/.output/server/node_modules/zod/v4/locales/mk.js +114 -0
  422. package/.output/server/node_modules/zod/v4/locales/ms.js +112 -0
  423. package/.output/server/node_modules/zod/v4/locales/ne.js +111 -0
  424. package/.output/server/node_modules/zod/v4/locales/nl.js +115 -0
  425. package/.output/server/node_modules/zod/v4/locales/nn.js +113 -0
  426. package/.output/server/node_modules/zod/v4/locales/no.js +113 -0
  427. package/.output/server/node_modules/zod/v4/locales/ota.js +114 -0
  428. package/.output/server/node_modules/zod/v4/locales/package.json +7 -0
  429. package/.output/server/node_modules/zod/v4/locales/pl.js +114 -0
  430. package/.output/server/node_modules/zod/v4/locales/ps.js +119 -0
  431. package/.output/server/node_modules/zod/v4/locales/pt-BR.js +143 -0
  432. package/.output/server/node_modules/zod/v4/locales/pt.js +142 -0
  433. package/.output/server/node_modules/zod/v4/locales/ro.js +122 -0
  434. package/.output/server/node_modules/zod/v4/locales/ru.js +168 -0
  435. package/.output/server/node_modules/zod/v4/locales/sk.js +116 -0
  436. package/.output/server/node_modules/zod/v4/locales/sl.js +114 -0
  437. package/.output/server/node_modules/zod/v4/locales/sv.js +115 -0
  438. package/.output/server/node_modules/zod/v4/locales/ta.js +115 -0
  439. package/.output/server/node_modules/zod/v4/locales/tg.js +117 -0
  440. package/.output/server/node_modules/zod/v4/locales/th.js +115 -0
  441. package/.output/server/node_modules/zod/v4/locales/tk.js +107 -0
  442. package/.output/server/node_modules/zod/v4/locales/tr.js +110 -0
  443. package/.output/server/node_modules/zod/v4/locales/ua.js +5 -0
  444. package/.output/server/node_modules/zod/v4/locales/uk.js +113 -0
  445. package/.output/server/node_modules/zod/v4/locales/ur.js +115 -0
  446. package/.output/server/node_modules/zod/v4/locales/uz.js +113 -0
  447. package/.output/server/node_modules/zod/v4/locales/vi.js +113 -0
  448. package/.output/server/node_modules/zod/v4/locales/yo.js +112 -0
  449. package/.output/server/node_modules/zod/v4/locales/zh-CN.js +114 -0
  450. package/.output/server/node_modules/zod/v4/locales/zh-TW.js +112 -0
  451. package/.output/server/node_modules/zod/v4/mini/checks.js +1 -0
  452. package/.output/server/node_modules/zod/v4/mini/coerce.js +22 -0
  453. package/.output/server/node_modules/zod/v4/mini/deep-partial.js +13 -0
  454. package/.output/server/node_modules/zod/v4/mini/external.js +16 -0
  455. package/.output/server/node_modules/zod/v4/mini/in-out.js +36 -0
  456. package/.output/server/node_modules/zod/v4/mini/iso.js +34 -0
  457. package/.output/server/node_modules/zod/v4/mini/package.json +7 -0
  458. package/.output/server/node_modules/zod/v4/mini/parse.js +1 -0
  459. package/.output/server/node_modules/zod/v4/mini/schemas.js +1002 -0
  460. package/.output/server/node_modules/zod/v4/package.json +7 -0
  461. package/.output/server/node_modules/zod/v4-mini/index.js +3 -0
  462. package/.output/server/node_modules/zod/v4-mini/package.json +7 -0
  463. package/.output/server/node_modules/zod-to-json-schema/dist/esm/Options.js +46 -0
  464. package/.output/server/node_modules/zod-to-json-schema/dist/esm/Refs.js +22 -0
  465. package/.output/server/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +14 -0
  466. package/.output/server/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +8 -0
  467. package/.output/server/node_modules/zod-to-json-schema/dist/esm/index.js +40 -0
  468. package/.output/server/node_modules/zod-to-json-schema/dist/esm/package.json +1 -0
  469. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parseDef.js +62 -0
  470. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parseTypes.js +1 -0
  471. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +17 -0
  472. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +26 -0
  473. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +49 -0
  474. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +5 -0
  475. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +4 -0
  476. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +4 -0
  477. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +46 -0
  478. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +7 -0
  479. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +7 -0
  480. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +6 -0
  481. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +52 -0
  482. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +21 -0
  483. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +26 -0
  484. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +16 -0
  485. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +11 -0
  486. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +10 -0
  487. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +33 -0
  488. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +52 -0
  489. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +72 -0
  490. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +21 -0
  491. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +20 -0
  492. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +4 -0
  493. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +4 -0
  494. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +61 -0
  495. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +20 -0
  496. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +352 -0
  497. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +32 -0
  498. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +6 -0
  499. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +80 -0
  500. package/.output/server/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +4 -0
  501. package/.output/server/node_modules/zod-to-json-schema/dist/esm/selectParser.js +105 -0
  502. package/.output/server/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +87 -0
  503. package/.output/server/node_modules/zod-to-json-schema/package.json +85 -0
  504. package/.output/server/package.json +64 -0
  505. package/README.md +226 -23
  506. package/bin/bantou.mjs +33 -0
  507. package/package.json +18 -8
  508. package/protocol/PROTOCOL.md +26 -0
  509. package/protocol/protocol.json +92 -0
  510. package/dist/cap.js +0 -7
  511. package/dist/cli.js +0 -27
  512. package/dist/config.js +0 -23
  513. package/dist/daemon.js +0 -23
  514. package/dist/session.js +0 -7
  515. package/dist/workspace.js +0 -8
@@ -0,0 +1,2498 @@
1
+ import { withoutTrailingSlash, withoutBase, getQuery as getQuery$1, decode, withLeadingSlash, parseURL, joinURL, decodePath } from 'ufo';
2
+ import { parse as parse$1, serialize, parseSetCookie } from 'cookie-es';
3
+ import { createRouter as createRouter$1, toRouteMatcher } from 'radix3';
4
+ import { defu } from 'defu';
5
+ import destr from 'destr';
6
+ import crypto from 'uncrypto';
7
+ import { seal, defaults, unseal } from 'iron-webcrypto';
8
+ import { IncomingMessage, ServerResponse } from 'node-mock-http';
9
+
10
+ function useBase(base, handler) {
11
+ base = withoutTrailingSlash(base);
12
+ if (!base || base === "/") {
13
+ return handler;
14
+ }
15
+ return eventHandler(async (event) => {
16
+ event.node.req.originalUrl = event.node.req.originalUrl || event.node.req.url || "/";
17
+ const _path = event._path || event.node.req.url || "/";
18
+ event._path = withoutBase(event.path || "/", base);
19
+ event.node.req.url = event._path;
20
+ try {
21
+ return await handler(event);
22
+ } finally {
23
+ event._path = event.node.req.url = _path;
24
+ }
25
+ });
26
+ }
27
+
28
+ function hasProp(obj, prop) {
29
+ try {
30
+ return prop in obj;
31
+ } catch {
32
+ return false;
33
+ }
34
+ }
35
+
36
+ class H3Error extends Error {
37
+ static __h3_error__ = true;
38
+ statusCode = 500;
39
+ fatal = false;
40
+ unhandled = false;
41
+ statusMessage;
42
+ data;
43
+ cause;
44
+ constructor(message, opts = {}) {
45
+ super(message, opts);
46
+ if (opts.cause && !this.cause) {
47
+ this.cause = opts.cause;
48
+ }
49
+ }
50
+ toJSON() {
51
+ const obj = {
52
+ message: this.message,
53
+ statusCode: sanitizeStatusCode(this.statusCode, 500)
54
+ };
55
+ if (this.statusMessage) {
56
+ obj.statusMessage = sanitizeStatusMessage(this.statusMessage);
57
+ }
58
+ if (this.data !== void 0) {
59
+ obj.data = this.data;
60
+ }
61
+ return obj;
62
+ }
63
+ }
64
+ function createError(input) {
65
+ if (typeof input === "string") {
66
+ return new H3Error(input);
67
+ }
68
+ if (isError(input)) {
69
+ return input;
70
+ }
71
+ const err = new H3Error(input.message ?? input.statusMessage ?? "", {
72
+ cause: input.cause || input
73
+ });
74
+ if (hasProp(input, "stack")) {
75
+ try {
76
+ Object.defineProperty(err, "stack", {
77
+ get() {
78
+ return input.stack;
79
+ }
80
+ });
81
+ } catch {
82
+ try {
83
+ err.stack = input.stack;
84
+ } catch {
85
+ }
86
+ }
87
+ }
88
+ if (input.data) {
89
+ err.data = input.data;
90
+ }
91
+ if (input.statusCode) {
92
+ err.statusCode = sanitizeStatusCode(input.statusCode, err.statusCode);
93
+ } else if (input.status) {
94
+ err.statusCode = sanitizeStatusCode(input.status, err.statusCode);
95
+ }
96
+ if (input.statusMessage) {
97
+ err.statusMessage = input.statusMessage;
98
+ } else if (input.statusText) {
99
+ err.statusMessage = input.statusText;
100
+ }
101
+ if (err.statusMessage) {
102
+ const originalMessage = err.statusMessage;
103
+ const sanitizedMessage = sanitizeStatusMessage(err.statusMessage);
104
+ if (sanitizedMessage !== originalMessage) {
105
+ console.warn(
106
+ "[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default."
107
+ );
108
+ }
109
+ }
110
+ if (input.fatal !== void 0) {
111
+ err.fatal = input.fatal;
112
+ }
113
+ if (input.unhandled !== void 0) {
114
+ err.unhandled = input.unhandled;
115
+ }
116
+ return err;
117
+ }
118
+ function sendError(event, error, debug) {
119
+ if (event.handled) {
120
+ return;
121
+ }
122
+ const h3Error = isError(error) ? error : createError(error);
123
+ const responseBody = {
124
+ statusCode: h3Error.statusCode,
125
+ statusMessage: h3Error.statusMessage,
126
+ stack: [],
127
+ data: h3Error.data
128
+ };
129
+ if (debug) {
130
+ responseBody.stack = (h3Error.stack || "").split("\n").map((l) => l.trim());
131
+ }
132
+ if (event.handled) {
133
+ return;
134
+ }
135
+ const _code = Number.parseInt(h3Error.statusCode);
136
+ setResponseStatus(event, _code, h3Error.statusMessage);
137
+ event.node.res.setHeader("content-type", MIMES.json);
138
+ event.node.res.end(JSON.stringify(responseBody, void 0, 2));
139
+ }
140
+ function isError(input) {
141
+ return input?.constructor?.__h3_error__ === true;
142
+ }
143
+
144
+ function parse(multipartBodyBuffer, boundary) {
145
+ let lastline = "";
146
+ let state = 0 /* INIT */;
147
+ let buffer = [];
148
+ const allParts = [];
149
+ let currentPartHeaders = [];
150
+ for (let i = 0; i < multipartBodyBuffer.length; i++) {
151
+ const prevByte = i > 0 ? multipartBodyBuffer[i - 1] : null;
152
+ const currByte = multipartBodyBuffer[i];
153
+ const newLineChar = currByte === 10 || currByte === 13;
154
+ if (!newLineChar) {
155
+ lastline += String.fromCodePoint(currByte);
156
+ }
157
+ const newLineDetected = currByte === 10 && prevByte === 13;
158
+ if (0 /* INIT */ === state && newLineDetected) {
159
+ if ("--" + boundary === lastline) {
160
+ state = 1 /* READING_HEADERS */;
161
+ }
162
+ lastline = "";
163
+ } else if (1 /* READING_HEADERS */ === state && newLineDetected) {
164
+ if (lastline.length > 0) {
165
+ const i2 = lastline.indexOf(":");
166
+ if (i2 > 0) {
167
+ const name = lastline.slice(0, i2).toLowerCase();
168
+ const value = lastline.slice(i2 + 1).trim();
169
+ currentPartHeaders.push([name, value]);
170
+ }
171
+ } else {
172
+ state = 2 /* READING_DATA */;
173
+ buffer = [];
174
+ }
175
+ lastline = "";
176
+ } else if (2 /* READING_DATA */ === state) {
177
+ if (lastline.length > boundary.length + 4) {
178
+ lastline = "";
179
+ }
180
+ if ("--" + boundary === lastline) {
181
+ const j = buffer.length - lastline.length;
182
+ const part = buffer.slice(0, j - 1);
183
+ allParts.push(process(part, currentPartHeaders));
184
+ buffer = [];
185
+ currentPartHeaders = [];
186
+ lastline = "";
187
+ state = 3 /* READING_PART_SEPARATOR */;
188
+ } else {
189
+ buffer.push(currByte);
190
+ }
191
+ if (newLineDetected) {
192
+ lastline = "";
193
+ }
194
+ } else if (3 /* READING_PART_SEPARATOR */ === state && newLineDetected) {
195
+ state = 1 /* READING_HEADERS */;
196
+ }
197
+ }
198
+ return allParts;
199
+ }
200
+ function process(data, headers) {
201
+ const dataObj = {};
202
+ const contentDispositionHeader = headers.find((h) => h[0] === "content-disposition")?.[1] || "";
203
+ for (const i of contentDispositionHeader.split(";")) {
204
+ const s = i.split("=");
205
+ if (s.length !== 2) {
206
+ continue;
207
+ }
208
+ const key = (s[0] || "").trim();
209
+ if (key === "name" || key === "filename") {
210
+ const _value = (s[1] || "").trim().replace(/"/g, "");
211
+ dataObj[key] = Buffer.from(_value, "latin1").toString("utf8");
212
+ }
213
+ }
214
+ const contentType = headers.find((h) => h[0] === "content-type")?.[1] || "";
215
+ if (contentType) {
216
+ dataObj.type = contentType;
217
+ }
218
+ dataObj.data = Buffer.from(data);
219
+ return dataObj;
220
+ }
221
+
222
+ async function validateData(data, fn) {
223
+ try {
224
+ const res = await fn(data);
225
+ if (res === false) {
226
+ throw createValidationError();
227
+ }
228
+ if (res === true) {
229
+ return data;
230
+ }
231
+ return res ?? data;
232
+ } catch (error) {
233
+ throw createValidationError(error);
234
+ }
235
+ }
236
+ function createValidationError(validateError) {
237
+ throw createError({
238
+ status: 400,
239
+ statusMessage: "Validation Error",
240
+ message: validateError?.message || "Validation Error",
241
+ data: validateError
242
+ });
243
+ }
244
+
245
+ function getQuery(event) {
246
+ return getQuery$1(event.path || "");
247
+ }
248
+ function getValidatedQuery(event, validate) {
249
+ const query = getQuery(event);
250
+ return validateData(query, validate);
251
+ }
252
+ function getRouterParams(event, opts = {}) {
253
+ let params = event.context.params || {};
254
+ if (opts.decode) {
255
+ params = { ...params };
256
+ for (const key in params) {
257
+ params[key] = decode(params[key]);
258
+ }
259
+ }
260
+ return params;
261
+ }
262
+ function getValidatedRouterParams(event, validate, opts = {}) {
263
+ const routerParams = getRouterParams(event, opts);
264
+ return validateData(routerParams, validate);
265
+ }
266
+ function getRouterParam(event, name, opts = {}) {
267
+ const params = getRouterParams(event, opts);
268
+ return params[name];
269
+ }
270
+ function getMethod(event, defaultMethod = "GET") {
271
+ return (event.node.req.method || defaultMethod).toUpperCase();
272
+ }
273
+ function isMethod(event, expected, allowHead) {
274
+ if (allowHead && event.method === "HEAD") {
275
+ return true;
276
+ }
277
+ if (typeof expected === "string") {
278
+ if (event.method === expected) {
279
+ return true;
280
+ }
281
+ } else if (expected.includes(event.method)) {
282
+ return true;
283
+ }
284
+ return false;
285
+ }
286
+ function assertMethod(event, expected, allowHead) {
287
+ if (!isMethod(event, expected, allowHead)) {
288
+ throw createError({
289
+ statusCode: 405,
290
+ statusMessage: "HTTP method is not allowed."
291
+ });
292
+ }
293
+ }
294
+ function getRequestHeaders(event) {
295
+ const _headers = {};
296
+ for (const key in event.node.req.headers) {
297
+ const val = event.node.req.headers[key];
298
+ _headers[key] = Array.isArray(val) ? val.filter(Boolean).join(", ") : val;
299
+ }
300
+ return _headers;
301
+ }
302
+ const getHeaders = getRequestHeaders;
303
+ function getRequestHeader(event, name) {
304
+ const headers = getRequestHeaders(event);
305
+ const value = headers[name.toLowerCase()];
306
+ return value;
307
+ }
308
+ const getHeader = getRequestHeader;
309
+ function getRequestHost(event, opts = {}) {
310
+ if (opts.xForwardedHost) {
311
+ const _header = event.node.req.headers["x-forwarded-host"];
312
+ const xForwardedHost = (_header || "").split(",").shift()?.trim();
313
+ if (xForwardedHost) {
314
+ return xForwardedHost;
315
+ }
316
+ }
317
+ return event.node.req.headers.host || "localhost";
318
+ }
319
+ function getRequestProtocol(event, opts = {}) {
320
+ if (opts.xForwardedProto !== false && event.node.req.headers["x-forwarded-proto"] === "https") {
321
+ return "https";
322
+ }
323
+ return event.node.req.connection?.encrypted ? "https" : "http";
324
+ }
325
+ const DOUBLE_SLASH_RE = /[/\\]{2,}/g;
326
+ function getRequestPath(event) {
327
+ const path = (event.node.req.url || "/").replace(DOUBLE_SLASH_RE, "/");
328
+ return path;
329
+ }
330
+ function getRequestURL(event, opts = {}) {
331
+ const host = getRequestHost(event, opts);
332
+ const protocol = getRequestProtocol(event, opts);
333
+ const path = (event.node.req.originalUrl || event.path).replace(
334
+ /^[/\\]+/g,
335
+ "/"
336
+ );
337
+ return new URL(path, `${protocol}://${host}`);
338
+ }
339
+ function toWebRequest(event) {
340
+ return event.web?.request || new Request(getRequestURL(event), {
341
+ // @ts-ignore Undici option
342
+ duplex: "half",
343
+ method: event.method,
344
+ headers: event.headers,
345
+ body: getRequestWebStream(event)
346
+ });
347
+ }
348
+ function getRequestIP(event, opts = {}) {
349
+ if (event.context.clientAddress) {
350
+ return event.context.clientAddress;
351
+ }
352
+ if (opts.xForwardedFor) {
353
+ const xForwardedFor = getRequestHeader(event, "x-forwarded-for")?.split(",").shift()?.trim();
354
+ if (xForwardedFor) {
355
+ return xForwardedFor;
356
+ }
357
+ }
358
+ if (event.node.req.socket.remoteAddress) {
359
+ return event.node.req.socket.remoteAddress;
360
+ }
361
+ }
362
+
363
+ const RawBodySymbol = Symbol.for("h3RawBody");
364
+ const ParsedBodySymbol = Symbol.for("h3ParsedBody");
365
+ const PayloadMethods$1 = ["PATCH", "POST", "PUT", "DELETE"];
366
+ function readRawBody(event, encoding = "utf8") {
367
+ assertMethod(event, PayloadMethods$1);
368
+ const _rawBody = event._requestBody || event.web?.request?.body || event.node.req[RawBodySymbol] || event.node.req.rawBody || event.node.req.body;
369
+ if (_rawBody) {
370
+ const promise2 = Promise.resolve(_rawBody).then((_resolved) => {
371
+ if (Buffer.isBuffer(_resolved)) {
372
+ return _resolved;
373
+ }
374
+ if (typeof _resolved.pipeTo === "function") {
375
+ return new Promise((resolve, reject) => {
376
+ const chunks = [];
377
+ _resolved.pipeTo(
378
+ new WritableStream({
379
+ write(chunk) {
380
+ chunks.push(chunk);
381
+ },
382
+ close() {
383
+ resolve(Buffer.concat(chunks));
384
+ },
385
+ abort(reason) {
386
+ reject(reason);
387
+ }
388
+ })
389
+ ).catch(reject);
390
+ });
391
+ } else if (typeof _resolved.pipe === "function") {
392
+ return new Promise((resolve, reject) => {
393
+ const chunks = [];
394
+ _resolved.on("data", (chunk) => {
395
+ chunks.push(chunk);
396
+ }).on("end", () => {
397
+ resolve(Buffer.concat(chunks));
398
+ }).on("error", reject);
399
+ });
400
+ }
401
+ if (_resolved.constructor === Object) {
402
+ return Buffer.from(JSON.stringify(_resolved));
403
+ }
404
+ if (_resolved instanceof URLSearchParams) {
405
+ return Buffer.from(_resolved.toString());
406
+ }
407
+ if (_resolved instanceof FormData) {
408
+ return new Response(_resolved).bytes().then((uint8arr) => Buffer.from(uint8arr));
409
+ }
410
+ return Buffer.from(_resolved);
411
+ });
412
+ return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;
413
+ }
414
+ if (!Number.parseInt(event.node.req.headers["content-length"] || "") && !/\bchunked\b/i.test(
415
+ String(event.node.req.headers["transfer-encoding"] ?? "")
416
+ )) {
417
+ return Promise.resolve(void 0);
418
+ }
419
+ const promise = event.node.req[RawBodySymbol] = new Promise(
420
+ (resolve, reject) => {
421
+ const bodyData = [];
422
+ event.node.req.on("error", (err) => {
423
+ reject(err);
424
+ }).on("data", (chunk) => {
425
+ bodyData.push(chunk);
426
+ }).on("end", () => {
427
+ resolve(Buffer.concat(bodyData));
428
+ });
429
+ }
430
+ );
431
+ const result = encoding ? promise.then((buff) => buff.toString(encoding)) : promise;
432
+ return result;
433
+ }
434
+ async function readBody(event, options = {}) {
435
+ const request = event.node.req;
436
+ if (hasProp(request, ParsedBodySymbol)) {
437
+ return request[ParsedBodySymbol];
438
+ }
439
+ const contentType = request.headers["content-type"] || "";
440
+ const body = await readRawBody(event);
441
+ let parsed;
442
+ if (contentType === "application/json") {
443
+ parsed = _parseJSON(body, options.strict ?? true);
444
+ } else if (contentType.startsWith("application/x-www-form-urlencoded")) {
445
+ parsed = _parseURLEncodedBody(body);
446
+ } else if (contentType.startsWith("text/")) {
447
+ parsed = body;
448
+ } else {
449
+ parsed = _parseJSON(body, options.strict ?? false);
450
+ }
451
+ request[ParsedBodySymbol] = parsed;
452
+ return parsed;
453
+ }
454
+ async function readValidatedBody(event, validate) {
455
+ const _body = await readBody(event, { strict: true });
456
+ return validateData(_body, validate);
457
+ }
458
+ async function readMultipartFormData(event) {
459
+ const contentType = getRequestHeader(event, "content-type");
460
+ if (!contentType || !contentType.startsWith("multipart/form-data")) {
461
+ return;
462
+ }
463
+ const boundary = contentType.match(/boundary=([^;]*)(;|$)/i)?.[1];
464
+ if (!boundary) {
465
+ return;
466
+ }
467
+ const body = await readRawBody(event, false);
468
+ if (!body) {
469
+ return;
470
+ }
471
+ return parse(body, boundary);
472
+ }
473
+ async function readFormData(event) {
474
+ return await toWebRequest(event).formData();
475
+ }
476
+ function getRequestWebStream(event) {
477
+ if (!PayloadMethods$1.includes(event.method)) {
478
+ return;
479
+ }
480
+ const bodyStream = event.web?.request?.body || event._requestBody;
481
+ if (bodyStream) {
482
+ return bodyStream;
483
+ }
484
+ const _hasRawBody = RawBodySymbol in event.node.req || "rawBody" in event.node.req || "body" in event.node.req || "__unenv__" in event.node.req;
485
+ if (_hasRawBody) {
486
+ return new ReadableStream({
487
+ async start(controller) {
488
+ const _rawBody = await readRawBody(event, false);
489
+ if (_rawBody) {
490
+ controller.enqueue(_rawBody);
491
+ }
492
+ controller.close();
493
+ }
494
+ });
495
+ }
496
+ return new ReadableStream({
497
+ start: (controller) => {
498
+ event.node.req.on("data", (chunk) => {
499
+ controller.enqueue(chunk);
500
+ });
501
+ event.node.req.on("end", () => {
502
+ controller.close();
503
+ });
504
+ event.node.req.on("error", (err) => {
505
+ controller.error(err);
506
+ });
507
+ }
508
+ });
509
+ }
510
+ function _parseJSON(body = "", strict) {
511
+ if (!body) {
512
+ return void 0;
513
+ }
514
+ try {
515
+ return destr(body, { strict });
516
+ } catch {
517
+ throw createError({
518
+ statusCode: 400,
519
+ statusMessage: "Bad Request",
520
+ message: "Invalid JSON body"
521
+ });
522
+ }
523
+ }
524
+ function _parseURLEncodedBody(body) {
525
+ const form = new URLSearchParams(body);
526
+ const parsedForm = /* @__PURE__ */ Object.create(null);
527
+ for (const [key, value] of form.entries()) {
528
+ if (hasProp(parsedForm, key)) {
529
+ if (!Array.isArray(parsedForm[key])) {
530
+ parsedForm[key] = [parsedForm[key]];
531
+ }
532
+ parsedForm[key].push(value);
533
+ } else {
534
+ parsedForm[key] = value;
535
+ }
536
+ }
537
+ return parsedForm;
538
+ }
539
+
540
+ function handleCacheHeaders(event, opts) {
541
+ const cacheControls = ["public", ...opts.cacheControls || []];
542
+ let cacheMatched = false;
543
+ if (opts.maxAge !== void 0) {
544
+ cacheControls.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);
545
+ }
546
+ if (opts.modifiedTime) {
547
+ const modifiedTime = new Date(opts.modifiedTime);
548
+ const ifModifiedSince = event.node.req.headers["if-modified-since"];
549
+ event.node.res.setHeader("last-modified", modifiedTime.toUTCString());
550
+ if (ifModifiedSince && new Date(ifModifiedSince) >= modifiedTime) {
551
+ cacheMatched = true;
552
+ }
553
+ }
554
+ if (opts.etag) {
555
+ event.node.res.setHeader("etag", opts.etag);
556
+ const ifNonMatch = event.node.req.headers["if-none-match"];
557
+ if (ifNonMatch === opts.etag) {
558
+ cacheMatched = true;
559
+ }
560
+ }
561
+ event.node.res.setHeader("cache-control", cacheControls.join(", "));
562
+ if (cacheMatched) {
563
+ event.node.res.statusCode = 304;
564
+ if (!event.handled) {
565
+ event.node.res.end();
566
+ }
567
+ return true;
568
+ }
569
+ return false;
570
+ }
571
+
572
+ const MIMES = {
573
+ html: "text/html",
574
+ json: "application/json"
575
+ };
576
+
577
+ const DISALLOWED_STATUS_CHARS = /[^\u0009\u0020-\u007E]/g;
578
+ function sanitizeStatusMessage(statusMessage = "") {
579
+ return statusMessage.replace(DISALLOWED_STATUS_CHARS, "");
580
+ }
581
+ function sanitizeStatusCode(statusCode, defaultStatusCode = 200) {
582
+ if (!statusCode) {
583
+ return defaultStatusCode;
584
+ }
585
+ if (typeof statusCode === "string") {
586
+ statusCode = Number.parseInt(statusCode, 10);
587
+ }
588
+ if (statusCode < 100 || statusCode > 999) {
589
+ return defaultStatusCode;
590
+ }
591
+ return statusCode;
592
+ }
593
+
594
+ function getDistinctCookieKey(name, opts) {
595
+ return [name, opts.domain || "", opts.path || "/"].join(";");
596
+ }
597
+
598
+ function parseCookies(event) {
599
+ return parse$1(event.node.req.headers.cookie || "");
600
+ }
601
+ function getCookie(event, name) {
602
+ return parseCookies(event)[name];
603
+ }
604
+ function setCookie(event, name, value, serializeOptions = {}) {
605
+ if (!serializeOptions.path) {
606
+ serializeOptions = { path: "/", ...serializeOptions };
607
+ }
608
+ const newCookie = serialize(name, value, serializeOptions);
609
+ const currentCookies = splitCookiesString(
610
+ event.node.res.getHeader("set-cookie")
611
+ );
612
+ if (currentCookies.length === 0) {
613
+ event.node.res.setHeader("set-cookie", newCookie);
614
+ return;
615
+ }
616
+ const newCookieKey = getDistinctCookieKey(name, serializeOptions);
617
+ event.node.res.removeHeader("set-cookie");
618
+ for (const cookie of currentCookies) {
619
+ const parsed = parseSetCookie(cookie);
620
+ const key = getDistinctCookieKey(parsed.name, parsed);
621
+ if (key === newCookieKey) {
622
+ continue;
623
+ }
624
+ event.node.res.appendHeader("set-cookie", cookie);
625
+ }
626
+ event.node.res.appendHeader("set-cookie", newCookie);
627
+ }
628
+ function deleteCookie(event, name, serializeOptions) {
629
+ setCookie(event, name, "", {
630
+ ...serializeOptions,
631
+ maxAge: 0
632
+ });
633
+ }
634
+ function splitCookiesString(cookiesString) {
635
+ if (Array.isArray(cookiesString)) {
636
+ return cookiesString.flatMap((c) => splitCookiesString(c));
637
+ }
638
+ if (typeof cookiesString !== "string") {
639
+ return [];
640
+ }
641
+ const cookiesStrings = [];
642
+ let pos = 0;
643
+ let start;
644
+ let ch;
645
+ let lastComma;
646
+ let nextStart;
647
+ let cookiesSeparatorFound;
648
+ const skipWhitespace = () => {
649
+ while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) {
650
+ pos += 1;
651
+ }
652
+ return pos < cookiesString.length;
653
+ };
654
+ const notSpecialChar = () => {
655
+ ch = cookiesString.charAt(pos);
656
+ return ch !== "=" && ch !== ";" && ch !== ",";
657
+ };
658
+ while (pos < cookiesString.length) {
659
+ start = pos;
660
+ cookiesSeparatorFound = false;
661
+ while (skipWhitespace()) {
662
+ ch = cookiesString.charAt(pos);
663
+ if (ch === ",") {
664
+ lastComma = pos;
665
+ pos += 1;
666
+ skipWhitespace();
667
+ nextStart = pos;
668
+ while (pos < cookiesString.length && notSpecialChar()) {
669
+ pos += 1;
670
+ }
671
+ if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
672
+ cookiesSeparatorFound = true;
673
+ pos = nextStart;
674
+ cookiesStrings.push(cookiesString.slice(start, lastComma));
675
+ start = pos;
676
+ } else {
677
+ pos = lastComma + 1;
678
+ }
679
+ } else {
680
+ pos += 1;
681
+ }
682
+ }
683
+ if (!cookiesSeparatorFound || pos >= cookiesString.length) {
684
+ cookiesStrings.push(cookiesString.slice(start));
685
+ }
686
+ }
687
+ return cookiesStrings;
688
+ }
689
+
690
+ function serializeIterableValue(value) {
691
+ switch (typeof value) {
692
+ case "string": {
693
+ return value;
694
+ }
695
+ case "boolean":
696
+ case "number":
697
+ case "bigint":
698
+ case "symbol": {
699
+ return value.toString();
700
+ }
701
+ case "function":
702
+ case "undefined": {
703
+ return void 0;
704
+ }
705
+ case "object": {
706
+ if (value instanceof Uint8Array) {
707
+ return value;
708
+ }
709
+ return JSON.stringify(value);
710
+ }
711
+ }
712
+ }
713
+ function coerceIterable(iterable) {
714
+ if (typeof iterable === "function") {
715
+ iterable = iterable();
716
+ }
717
+ if (Symbol.iterator in iterable) {
718
+ return iterable[Symbol.iterator]();
719
+ }
720
+ if (Symbol.asyncIterator in iterable) {
721
+ return iterable[Symbol.asyncIterator]();
722
+ }
723
+ return iterable;
724
+ }
725
+
726
+ const defer = typeof setImmediate === "undefined" ? (fn) => fn() : setImmediate;
727
+ function send(event, data, type) {
728
+ if (type) {
729
+ defaultContentType(event, type);
730
+ }
731
+ return new Promise((resolve) => {
732
+ defer(() => {
733
+ if (!event.handled) {
734
+ event.node.res.end(data);
735
+ }
736
+ resolve();
737
+ });
738
+ });
739
+ }
740
+ function sendNoContent(event, code) {
741
+ if (event.handled) {
742
+ return;
743
+ }
744
+ if (!code && event.node.res.statusCode !== 200) {
745
+ code = event.node.res.statusCode;
746
+ }
747
+ const _code = sanitizeStatusCode(code, 204);
748
+ if (_code === 204) {
749
+ event.node.res.removeHeader("content-length");
750
+ }
751
+ event.node.res.writeHead(_code);
752
+ event.node.res.end();
753
+ }
754
+ function setResponseStatus(event, code, text) {
755
+ if (code) {
756
+ event.node.res.statusCode = sanitizeStatusCode(
757
+ code,
758
+ event.node.res.statusCode
759
+ );
760
+ }
761
+ if (text) {
762
+ event.node.res.statusMessage = sanitizeStatusMessage(text);
763
+ }
764
+ }
765
+ function getResponseStatus(event) {
766
+ return event.node.res.statusCode;
767
+ }
768
+ function getResponseStatusText(event) {
769
+ return event.node.res.statusMessage;
770
+ }
771
+ function defaultContentType(event, type) {
772
+ if (type && event.node.res.statusCode !== 304 && !event.node.res.getHeader("content-type")) {
773
+ event.node.res.setHeader("content-type", type);
774
+ }
775
+ }
776
+ function sendRedirect(event, location, code = 302) {
777
+ event.node.res.statusCode = sanitizeStatusCode(
778
+ code,
779
+ event.node.res.statusCode
780
+ );
781
+ event.node.res.setHeader("location", location);
782
+ const encodedLoc = location.replace(/"/g, "%22");
783
+ const html = `<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=${encodedLoc}"></head></html>`;
784
+ return send(event, html, MIMES.html);
785
+ }
786
+ function getResponseHeaders(event) {
787
+ return event.node.res.getHeaders();
788
+ }
789
+ function getResponseHeader(event, name) {
790
+ return event.node.res.getHeader(name);
791
+ }
792
+ function setResponseHeaders(event, headers) {
793
+ for (const [name, value] of Object.entries(headers)) {
794
+ event.node.res.setHeader(
795
+ name,
796
+ value
797
+ );
798
+ }
799
+ }
800
+ const setHeaders = setResponseHeaders;
801
+ function setResponseHeader(event, name, value) {
802
+ event.node.res.setHeader(name, value);
803
+ }
804
+ const setHeader = setResponseHeader;
805
+ function appendResponseHeaders(event, headers) {
806
+ for (const [name, value] of Object.entries(headers)) {
807
+ appendResponseHeader(event, name, value);
808
+ }
809
+ }
810
+ const appendHeaders = appendResponseHeaders;
811
+ function appendResponseHeader(event, name, value) {
812
+ let current = event.node.res.getHeader(name);
813
+ if (!current) {
814
+ event.node.res.setHeader(name, value);
815
+ return;
816
+ }
817
+ if (!Array.isArray(current)) {
818
+ current = [current.toString()];
819
+ }
820
+ event.node.res.setHeader(name, [...current, value]);
821
+ }
822
+ const appendHeader = appendResponseHeader;
823
+ function clearResponseHeaders(event, headerNames) {
824
+ if (headerNames && headerNames.length > 0) {
825
+ for (const name of headerNames) {
826
+ removeResponseHeader(event, name);
827
+ }
828
+ } else {
829
+ for (const [name] of Object.entries(getResponseHeaders(event))) {
830
+ removeResponseHeader(event, name);
831
+ }
832
+ }
833
+ }
834
+ function removeResponseHeader(event, name) {
835
+ return event.node.res.removeHeader(name);
836
+ }
837
+ function isStream(data) {
838
+ if (!data || typeof data !== "object") {
839
+ return false;
840
+ }
841
+ if (typeof data.pipe === "function") {
842
+ if (typeof data._read === "function") {
843
+ return true;
844
+ }
845
+ if (typeof data.abort === "function") {
846
+ return true;
847
+ }
848
+ }
849
+ if (typeof data.pipeTo === "function") {
850
+ return true;
851
+ }
852
+ return false;
853
+ }
854
+ function isWebResponse(data) {
855
+ return typeof Response !== "undefined" && data instanceof Response;
856
+ }
857
+ function sendStream(event, stream) {
858
+ if (!stream || typeof stream !== "object") {
859
+ throw new Error("[h3] Invalid stream provided.");
860
+ }
861
+ event.node.res._data = stream;
862
+ if (!event.node.res.socket) {
863
+ event._handled = true;
864
+ return Promise.resolve();
865
+ }
866
+ if (hasProp(stream, "pipeTo") && typeof stream.pipeTo === "function") {
867
+ return stream.pipeTo(
868
+ new WritableStream({
869
+ write(chunk) {
870
+ event.node.res.write(chunk);
871
+ }
872
+ })
873
+ ).then(() => {
874
+ event.node.res.end();
875
+ });
876
+ }
877
+ if (hasProp(stream, "pipe") && typeof stream.pipe === "function") {
878
+ return new Promise((resolve, reject) => {
879
+ stream.pipe(event.node.res);
880
+ if (stream.on) {
881
+ stream.on("end", () => {
882
+ event.node.res.end();
883
+ resolve();
884
+ });
885
+ stream.on("error", (error) => {
886
+ reject(error);
887
+ });
888
+ }
889
+ event.node.res.on("close", () => {
890
+ if (stream.abort) {
891
+ stream.abort();
892
+ }
893
+ });
894
+ });
895
+ }
896
+ throw new Error("[h3] Invalid or incompatible stream provided.");
897
+ }
898
+ const noop = () => {
899
+ };
900
+ function writeEarlyHints(event, hints, cb = noop) {
901
+ if (!event.node.res.socket) {
902
+ cb();
903
+ return;
904
+ }
905
+ if (typeof hints === "string" || Array.isArray(hints)) {
906
+ hints = { link: hints };
907
+ }
908
+ if (hints.link) {
909
+ hints.link = Array.isArray(hints.link) ? hints.link : hints.link.split(",");
910
+ }
911
+ const headers = Object.entries(hints).map(
912
+ (e) => [e[0].toLowerCase(), e[1]]
913
+ );
914
+ if (headers.length === 0) {
915
+ cb();
916
+ return;
917
+ }
918
+ let hint = "HTTP/1.1 103 Early Hints";
919
+ if (hints.link) {
920
+ hint += `\r
921
+ Link: ${hints.link.join(", ")}`;
922
+ }
923
+ for (const [header, value] of headers) {
924
+ if (header === "link") {
925
+ continue;
926
+ }
927
+ hint += `\r
928
+ ${header}: ${value}`;
929
+ }
930
+ if (event.node.res.socket) {
931
+ event.node.res.socket.write(
932
+ `${hint}\r
933
+ \r
934
+ `,
935
+ "utf8",
936
+ cb
937
+ );
938
+ } else {
939
+ cb();
940
+ }
941
+ }
942
+ function sendWebResponse(event, response) {
943
+ for (const [key, value] of response.headers) {
944
+ if (key === "set-cookie") {
945
+ event.node.res.appendHeader(key, splitCookiesString(value));
946
+ } else {
947
+ event.node.res.setHeader(key, value);
948
+ }
949
+ }
950
+ if (response.status) {
951
+ event.node.res.statusCode = sanitizeStatusCode(
952
+ response.status,
953
+ event.node.res.statusCode
954
+ );
955
+ }
956
+ if (response.statusText) {
957
+ event.node.res.statusMessage = sanitizeStatusMessage(response.statusText);
958
+ }
959
+ if (response.redirected) {
960
+ event.node.res.setHeader("location", response.url);
961
+ }
962
+ if (!response.body) {
963
+ event.node.res.end();
964
+ return;
965
+ }
966
+ return sendStream(event, response.body);
967
+ }
968
+ function sendIterable(event, iterable, options) {
969
+ const serializer = options?.serializer ?? serializeIterableValue;
970
+ const iterator = coerceIterable(iterable);
971
+ return sendStream(
972
+ event,
973
+ new ReadableStream({
974
+ async pull(controller) {
975
+ const { value, done } = await iterator.next();
976
+ if (value !== void 0) {
977
+ const chunk = serializer(value);
978
+ if (chunk !== void 0) {
979
+ controller.enqueue(chunk);
980
+ }
981
+ }
982
+ if (done) {
983
+ controller.close();
984
+ }
985
+ },
986
+ cancel() {
987
+ iterator.return?.();
988
+ }
989
+ })
990
+ );
991
+ }
992
+
993
+ function resolveCorsOptions(options = {}) {
994
+ const defaultOptions = {
995
+ origin: "*",
996
+ methods: "*",
997
+ allowHeaders: "*",
998
+ exposeHeaders: "*",
999
+ credentials: false,
1000
+ maxAge: false,
1001
+ preflight: {
1002
+ statusCode: 204
1003
+ }
1004
+ };
1005
+ return defu(options, defaultOptions);
1006
+ }
1007
+ function isPreflightRequest(event) {
1008
+ const origin = getRequestHeader(event, "origin");
1009
+ const accessControlRequestMethod = getRequestHeader(
1010
+ event,
1011
+ "access-control-request-method"
1012
+ );
1013
+ return event.method === "OPTIONS" && !!origin && !!accessControlRequestMethod;
1014
+ }
1015
+ function isCorsOriginAllowed(origin, options) {
1016
+ const { origin: originOption } = options;
1017
+ if (!origin || !originOption || originOption === "*" || originOption === "null") {
1018
+ return true;
1019
+ }
1020
+ if (Array.isArray(originOption)) {
1021
+ return originOption.some((_origin) => {
1022
+ if (_origin instanceof RegExp) {
1023
+ return _origin.test(origin);
1024
+ }
1025
+ return origin === _origin;
1026
+ });
1027
+ }
1028
+ return originOption(origin);
1029
+ }
1030
+ function createOriginHeaders(event, options) {
1031
+ const { origin: originOption } = options;
1032
+ const origin = getRequestHeader(event, "origin");
1033
+ if (!origin || !originOption || originOption === "*") {
1034
+ return { "access-control-allow-origin": "*" };
1035
+ }
1036
+ if (typeof originOption === "string") {
1037
+ return { "access-control-allow-origin": originOption, vary: "origin" };
1038
+ }
1039
+ return isCorsOriginAllowed(origin, options) ? { "access-control-allow-origin": origin, vary: "origin" } : {};
1040
+ }
1041
+ function createMethodsHeaders(options) {
1042
+ const { methods } = options;
1043
+ if (!methods) {
1044
+ return {};
1045
+ }
1046
+ if (methods === "*") {
1047
+ return { "access-control-allow-methods": "*" };
1048
+ }
1049
+ return methods.length > 0 ? { "access-control-allow-methods": methods.join(",") } : {};
1050
+ }
1051
+ function createCredentialsHeaders(options) {
1052
+ const { credentials } = options;
1053
+ if (credentials) {
1054
+ return { "access-control-allow-credentials": "true" };
1055
+ }
1056
+ return {};
1057
+ }
1058
+ function createAllowHeaderHeaders(event, options) {
1059
+ const { allowHeaders } = options;
1060
+ if (!allowHeaders || allowHeaders === "*" || allowHeaders.length === 0) {
1061
+ const header = getRequestHeader(event, "access-control-request-headers");
1062
+ return header ? {
1063
+ "access-control-allow-headers": header,
1064
+ vary: "access-control-request-headers"
1065
+ } : {};
1066
+ }
1067
+ return {
1068
+ "access-control-allow-headers": allowHeaders.join(","),
1069
+ vary: "access-control-request-headers"
1070
+ };
1071
+ }
1072
+ function createExposeHeaders(options) {
1073
+ const { exposeHeaders } = options;
1074
+ if (!exposeHeaders) {
1075
+ return {};
1076
+ }
1077
+ if (exposeHeaders === "*") {
1078
+ return { "access-control-expose-headers": exposeHeaders };
1079
+ }
1080
+ return { "access-control-expose-headers": exposeHeaders.join(",") };
1081
+ }
1082
+ function appendCorsPreflightHeaders(event, options) {
1083
+ appendHeaders(event, createOriginHeaders(event, options));
1084
+ appendHeaders(event, createCredentialsHeaders(options));
1085
+ appendHeaders(event, createExposeHeaders(options));
1086
+ appendHeaders(event, createMethodsHeaders(options));
1087
+ appendHeaders(event, createAllowHeaderHeaders(event, options));
1088
+ }
1089
+ function appendCorsHeaders(event, options) {
1090
+ appendHeaders(event, createOriginHeaders(event, options));
1091
+ appendHeaders(event, createCredentialsHeaders(options));
1092
+ appendHeaders(event, createExposeHeaders(options));
1093
+ }
1094
+
1095
+ function handleCors(event, options) {
1096
+ const _options = resolveCorsOptions(options);
1097
+ if (isPreflightRequest(event)) {
1098
+ appendCorsPreflightHeaders(event, options);
1099
+ sendNoContent(event, _options.preflight.statusCode);
1100
+ return true;
1101
+ }
1102
+ appendCorsHeaders(event, options);
1103
+ return false;
1104
+ }
1105
+
1106
+ async function getRequestFingerprint(event, opts = {}) {
1107
+ const fingerprint = [];
1108
+ if (opts.ip !== false) {
1109
+ fingerprint.push(
1110
+ getRequestIP(event, { xForwardedFor: opts.xForwardedFor })
1111
+ );
1112
+ }
1113
+ if (opts.method === true) {
1114
+ fingerprint.push(event.method);
1115
+ }
1116
+ if (opts.path === true) {
1117
+ fingerprint.push(event.path);
1118
+ }
1119
+ if (opts.userAgent === true) {
1120
+ fingerprint.push(getRequestHeader(event, "user-agent"));
1121
+ }
1122
+ const fingerprintString = fingerprint.filter(Boolean).join("|");
1123
+ if (!fingerprintString) {
1124
+ return null;
1125
+ }
1126
+ if (opts.hash === false) {
1127
+ return fingerprintString;
1128
+ }
1129
+ const buffer = await crypto.subtle.digest(
1130
+ opts.hash || "SHA-1",
1131
+ new TextEncoder().encode(fingerprintString)
1132
+ );
1133
+ const hash = [...new Uint8Array(buffer)].map((b) => b.toString(16).padStart(2, "0")).join("");
1134
+ return hash;
1135
+ }
1136
+
1137
+ const PayloadMethods = /* @__PURE__ */ new Set(["PATCH", "POST", "PUT", "DELETE"]);
1138
+ const ignoredHeaders = /* @__PURE__ */ new Set([
1139
+ "transfer-encoding",
1140
+ "accept-encoding",
1141
+ "connection",
1142
+ "keep-alive",
1143
+ "upgrade",
1144
+ "expect",
1145
+ "host",
1146
+ "accept"
1147
+ ]);
1148
+ async function proxyRequest(event, target, opts = {}) {
1149
+ let body;
1150
+ let duplex;
1151
+ if (PayloadMethods.has(event.method)) {
1152
+ if (opts.streamRequest) {
1153
+ body = getRequestWebStream(event);
1154
+ duplex = "half";
1155
+ } else {
1156
+ body = await readRawBody(event, false).catch(() => void 0);
1157
+ }
1158
+ }
1159
+ const method = opts.fetchOptions?.method || event.method;
1160
+ const fetchHeaders = mergeHeaders(
1161
+ getProxyRequestHeaders(event, { host: target.startsWith("/") }),
1162
+ opts.fetchOptions?.headers,
1163
+ opts.headers
1164
+ );
1165
+ return sendProxy(event, target, {
1166
+ ...opts,
1167
+ fetchOptions: {
1168
+ method,
1169
+ body,
1170
+ duplex,
1171
+ ...opts.fetchOptions,
1172
+ headers: fetchHeaders
1173
+ }
1174
+ });
1175
+ }
1176
+ async function sendProxy(event, target, opts = {}) {
1177
+ let response;
1178
+ try {
1179
+ response = await _getFetch(opts.fetch)(target, {
1180
+ headers: opts.headers,
1181
+ ignoreResponseError: true,
1182
+ // make $ofetch.raw transparent
1183
+ ...opts.fetchOptions
1184
+ });
1185
+ } catch (error) {
1186
+ throw createError({
1187
+ status: 502,
1188
+ statusMessage: "Bad Gateway",
1189
+ cause: error
1190
+ });
1191
+ }
1192
+ event.node.res.statusCode = sanitizeStatusCode(
1193
+ response.status,
1194
+ event.node.res.statusCode
1195
+ );
1196
+ event.node.res.statusMessage = sanitizeStatusMessage(response.statusText);
1197
+ const cookies = [];
1198
+ for (const [key, value] of response.headers.entries()) {
1199
+ if (key === "content-encoding") {
1200
+ continue;
1201
+ }
1202
+ if (key === "content-length") {
1203
+ continue;
1204
+ }
1205
+ if (key === "set-cookie") {
1206
+ cookies.push(...splitCookiesString(value));
1207
+ continue;
1208
+ }
1209
+ event.node.res.setHeader(key, value);
1210
+ }
1211
+ if (cookies.length > 0) {
1212
+ event.node.res.setHeader(
1213
+ "set-cookie",
1214
+ cookies.map((cookie) => {
1215
+ if (opts.cookieDomainRewrite) {
1216
+ cookie = rewriteCookieProperty(
1217
+ cookie,
1218
+ opts.cookieDomainRewrite,
1219
+ "domain"
1220
+ );
1221
+ }
1222
+ if (opts.cookiePathRewrite) {
1223
+ cookie = rewriteCookieProperty(
1224
+ cookie,
1225
+ opts.cookiePathRewrite,
1226
+ "path"
1227
+ );
1228
+ }
1229
+ return cookie;
1230
+ })
1231
+ );
1232
+ }
1233
+ if (opts.onResponse) {
1234
+ await opts.onResponse(event, response);
1235
+ }
1236
+ if (response._data !== void 0) {
1237
+ return response._data;
1238
+ }
1239
+ if (event.handled) {
1240
+ return;
1241
+ }
1242
+ if (opts.sendStream === false) {
1243
+ const data = new Uint8Array(await response.arrayBuffer());
1244
+ return event.node.res.end(data);
1245
+ }
1246
+ if (response.body) {
1247
+ for await (const chunk of response.body) {
1248
+ event.node.res.write(chunk);
1249
+ }
1250
+ }
1251
+ return event.node.res.end();
1252
+ }
1253
+ function getProxyRequestHeaders(event, opts) {
1254
+ const headers = /* @__PURE__ */ Object.create(null);
1255
+ const reqHeaders = getRequestHeaders(event);
1256
+ for (const name in reqHeaders) {
1257
+ if (!ignoredHeaders.has(name) || name === "host" && opts?.host) {
1258
+ headers[name] = reqHeaders[name];
1259
+ }
1260
+ }
1261
+ return headers;
1262
+ }
1263
+ function fetchWithEvent(event, req, init, options) {
1264
+ return _getFetch(options?.fetch)(req, {
1265
+ ...init,
1266
+ context: init?.context || event.context,
1267
+ headers: {
1268
+ ...getProxyRequestHeaders(event, {
1269
+ host: typeof req === "string" && req.startsWith("/")
1270
+ }),
1271
+ ...init?.headers
1272
+ }
1273
+ });
1274
+ }
1275
+ function _getFetch(_fetch) {
1276
+ if (_fetch) {
1277
+ return _fetch;
1278
+ }
1279
+ if (globalThis.fetch) {
1280
+ return globalThis.fetch;
1281
+ }
1282
+ throw new Error(
1283
+ "fetch is not available. Try importing `node-fetch-native/polyfill` for Node.js."
1284
+ );
1285
+ }
1286
+ function rewriteCookieProperty(header, map, property) {
1287
+ const _map = typeof map === "string" ? { "*": map } : map;
1288
+ return header.replace(
1289
+ new RegExp(`(;\\s*${property}=)([^;]+)`, "gi"),
1290
+ (match, prefix, previousValue) => {
1291
+ let newValue;
1292
+ if (previousValue in _map) {
1293
+ newValue = _map[previousValue];
1294
+ } else if ("*" in _map) {
1295
+ newValue = _map["*"];
1296
+ } else {
1297
+ return match;
1298
+ }
1299
+ return newValue ? prefix + newValue : "";
1300
+ }
1301
+ );
1302
+ }
1303
+ function mergeHeaders(defaults, ...inputs) {
1304
+ const _inputs = inputs.filter(Boolean);
1305
+ if (_inputs.length === 0) {
1306
+ return defaults;
1307
+ }
1308
+ const merged = new Headers(defaults);
1309
+ for (const input of _inputs) {
1310
+ const entries = Array.isArray(input) ? input : typeof input.entries === "function" ? input.entries() : Object.entries(input);
1311
+ for (const [key, value] of entries) {
1312
+ if (value !== void 0) {
1313
+ merged.set(key, value);
1314
+ }
1315
+ }
1316
+ }
1317
+ return merged;
1318
+ }
1319
+
1320
+ const getSessionPromise = Symbol("getSession");
1321
+ const DEFAULT_NAME = "h3";
1322
+ const DEFAULT_COOKIE = {
1323
+ path: "/",
1324
+ secure: true,
1325
+ httpOnly: true
1326
+ };
1327
+ async function useSession(event, config) {
1328
+ const sessionName = config.name || DEFAULT_NAME;
1329
+ await getSession(event, config);
1330
+ const sessionManager = {
1331
+ get id() {
1332
+ return event.context.sessions?.[sessionName]?.id;
1333
+ },
1334
+ get data() {
1335
+ return event.context.sessions?.[sessionName]?.data || {};
1336
+ },
1337
+ update: async (update) => {
1338
+ if (!isEvent(event)) {
1339
+ throw new Error("[h3] Cannot update read-only session.");
1340
+ }
1341
+ await updateSession(event, config, update);
1342
+ return sessionManager;
1343
+ },
1344
+ clear: () => {
1345
+ if (!isEvent(event)) {
1346
+ throw new Error("[h3] Cannot clear read-only session.");
1347
+ }
1348
+ clearSession(event, config);
1349
+ return Promise.resolve(sessionManager);
1350
+ }
1351
+ };
1352
+ return sessionManager;
1353
+ }
1354
+ async function getSession(event, config) {
1355
+ const sessionName = config.name || DEFAULT_NAME;
1356
+ if (!event.context.sessions) {
1357
+ event.context.sessions = /* @__PURE__ */ Object.create(null);
1358
+ }
1359
+ const existingSession = event.context.sessions[sessionName];
1360
+ if (existingSession) {
1361
+ return existingSession[getSessionPromise] || existingSession;
1362
+ }
1363
+ const session = {
1364
+ id: "",
1365
+ createdAt: 0,
1366
+ data: /* @__PURE__ */ Object.create(null)
1367
+ };
1368
+ event.context.sessions[sessionName] = session;
1369
+ let sealedSession;
1370
+ if (config.sessionHeader !== false) {
1371
+ const headerName = typeof config.sessionHeader === "string" ? config.sessionHeader.toLowerCase() : `x-${sessionName.toLowerCase()}-session`;
1372
+ const headerValue = _getReqHeader(event, headerName);
1373
+ if (typeof headerValue === "string") {
1374
+ sealedSession = headerValue;
1375
+ }
1376
+ }
1377
+ if (!sealedSession) {
1378
+ const cookieHeader = _getReqHeader(event, "cookie");
1379
+ if (cookieHeader) {
1380
+ sealedSession = parse$1(cookieHeader + "")[sessionName];
1381
+ }
1382
+ }
1383
+ if (sealedSession) {
1384
+ const promise = unsealSession(event, config, sealedSession).catch(() => {
1385
+ }).then((unsealed) => {
1386
+ Object.assign(session, unsealed);
1387
+ delete event.context.sessions[sessionName][getSessionPromise];
1388
+ return session;
1389
+ });
1390
+ event.context.sessions[sessionName][getSessionPromise] = promise;
1391
+ await promise;
1392
+ }
1393
+ if (!session.id) {
1394
+ if (!isEvent(event)) {
1395
+ throw new Error(
1396
+ "Cannot initialize a new session. Make sure using `useSession(event)` in main handler."
1397
+ );
1398
+ }
1399
+ session.id = config.generateId?.() ?? (config.crypto || crypto).randomUUID();
1400
+ session.createdAt = Date.now();
1401
+ await updateSession(event, config);
1402
+ }
1403
+ return session;
1404
+ }
1405
+ function _getReqHeader(event, name) {
1406
+ if (event.node) {
1407
+ return event.node?.req.headers[name];
1408
+ }
1409
+ if (event.request) {
1410
+ return event.request.headers?.get(name);
1411
+ }
1412
+ if (event.headers) {
1413
+ return event.headers.get(name);
1414
+ }
1415
+ }
1416
+ async function updateSession(event, config, update) {
1417
+ const sessionName = config.name || DEFAULT_NAME;
1418
+ const session = event.context.sessions?.[sessionName] || await getSession(event, config);
1419
+ if (typeof update === "function") {
1420
+ update = update(session.data);
1421
+ }
1422
+ if (update) {
1423
+ Object.assign(session.data, update);
1424
+ }
1425
+ if (config.cookie !== false) {
1426
+ const sealed = await sealSession(event, config);
1427
+ setCookie(event, sessionName, sealed, {
1428
+ ...DEFAULT_COOKIE,
1429
+ expires: config.maxAge ? new Date(session.createdAt + config.maxAge * 1e3) : void 0,
1430
+ ...config.cookie
1431
+ });
1432
+ }
1433
+ return session;
1434
+ }
1435
+ async function sealSession(event, config) {
1436
+ const sessionName = config.name || DEFAULT_NAME;
1437
+ const session = event.context.sessions?.[sessionName] || await getSession(event, config);
1438
+ const sealed = await seal(
1439
+ config.crypto || crypto,
1440
+ session,
1441
+ config.password,
1442
+ {
1443
+ ...defaults,
1444
+ ttl: config.maxAge ? config.maxAge * 1e3 : 0,
1445
+ ...config.seal
1446
+ }
1447
+ );
1448
+ return sealed;
1449
+ }
1450
+ async function unsealSession(_event, config, sealed) {
1451
+ const unsealed = await unseal(
1452
+ config.crypto || crypto,
1453
+ sealed,
1454
+ config.password,
1455
+ {
1456
+ ...defaults,
1457
+ ttl: config.maxAge ? config.maxAge * 1e3 : 0,
1458
+ ...config.seal
1459
+ }
1460
+ );
1461
+ if (config.maxAge) {
1462
+ const age = Date.now() - (unsealed.createdAt || Number.NEGATIVE_INFINITY);
1463
+ if (age > config.maxAge * 1e3) {
1464
+ throw new Error("Session expired!");
1465
+ }
1466
+ }
1467
+ return unsealed;
1468
+ }
1469
+ function clearSession(event, config) {
1470
+ const sessionName = config.name || DEFAULT_NAME;
1471
+ if (event.context.sessions?.[sessionName]) {
1472
+ delete event.context.sessions[sessionName];
1473
+ }
1474
+ setCookie(event, sessionName, "", {
1475
+ ...DEFAULT_COOKIE,
1476
+ ...config.cookie
1477
+ });
1478
+ return Promise.resolve();
1479
+ }
1480
+
1481
+ function formatEventStreamMessage(message) {
1482
+ let result = "";
1483
+ if (message.id) {
1484
+ result += `id: ${_sanitizeSingleLine(message.id)}
1485
+ `;
1486
+ }
1487
+ if (message.event) {
1488
+ result += `event: ${_sanitizeSingleLine(message.event)}
1489
+ `;
1490
+ }
1491
+ if (typeof message.retry === "number" && Number.isInteger(message.retry)) {
1492
+ result += `retry: ${message.retry}
1493
+ `;
1494
+ }
1495
+ const data = typeof message.data === "string" ? message.data : "";
1496
+ for (const line of data.split(/\r\n|\r|\n/)) {
1497
+ result += `data: ${line}
1498
+ `;
1499
+ }
1500
+ result += "\n";
1501
+ return result;
1502
+ }
1503
+ function _sanitizeSingleLine(value) {
1504
+ return value.replace(/[\n\r]/g, "");
1505
+ }
1506
+ function formatEventStreamMessages(messages) {
1507
+ let result = "";
1508
+ for (const msg of messages) {
1509
+ result += formatEventStreamMessage(msg);
1510
+ }
1511
+ return result;
1512
+ }
1513
+ function setEventStreamHeaders(event) {
1514
+ const headers = {
1515
+ "Content-Type": "text/event-stream",
1516
+ "Cache-Control": "private, no-cache, no-store, no-transform, must-revalidate, max-age=0",
1517
+ "X-Accel-Buffering": "no"
1518
+ // prevent nginx from buffering the response
1519
+ };
1520
+ if (!isHttp2Request(event)) {
1521
+ headers.Connection = "keep-alive";
1522
+ }
1523
+ setResponseHeaders(event, headers);
1524
+ }
1525
+ function isHttp2Request(event) {
1526
+ return getHeader(event, ":path") !== void 0 && getHeader(event, ":method") !== void 0;
1527
+ }
1528
+
1529
+ class EventStream {
1530
+ _h3Event;
1531
+ _transformStream = new TransformStream();
1532
+ _writer;
1533
+ _encoder = new TextEncoder();
1534
+ _writerIsClosed = false;
1535
+ _paused = false;
1536
+ _unsentData;
1537
+ _disposed = false;
1538
+ _handled = false;
1539
+ constructor(event, opts = {}) {
1540
+ this._h3Event = event;
1541
+ this._writer = this._transformStream.writable.getWriter();
1542
+ this._writer.closed.then(() => {
1543
+ this._writerIsClosed = true;
1544
+ });
1545
+ if (opts.autoclose !== false) {
1546
+ this._h3Event.node.req.on("close", () => this.close());
1547
+ }
1548
+ }
1549
+ async push(message) {
1550
+ if (typeof message === "string") {
1551
+ await this._sendEvent({ data: message });
1552
+ return;
1553
+ }
1554
+ if (Array.isArray(message)) {
1555
+ if (message.length === 0) {
1556
+ return;
1557
+ }
1558
+ if (typeof message[0] === "string") {
1559
+ const msgs = [];
1560
+ for (const item of message) {
1561
+ msgs.push({ data: item });
1562
+ }
1563
+ await this._sendEvents(msgs);
1564
+ return;
1565
+ }
1566
+ await this._sendEvents(message);
1567
+ return;
1568
+ }
1569
+ await this._sendEvent(message);
1570
+ }
1571
+ async _sendEvent(message) {
1572
+ if (this._writerIsClosed) {
1573
+ return;
1574
+ }
1575
+ if (this._paused && !this._unsentData) {
1576
+ this._unsentData = formatEventStreamMessage(message);
1577
+ return;
1578
+ }
1579
+ if (this._paused) {
1580
+ this._unsentData += formatEventStreamMessage(message);
1581
+ return;
1582
+ }
1583
+ await this._writer.write(this._encoder.encode(formatEventStreamMessage(message))).catch();
1584
+ }
1585
+ async _sendEvents(messages) {
1586
+ if (this._writerIsClosed) {
1587
+ return;
1588
+ }
1589
+ const payload = formatEventStreamMessages(messages);
1590
+ if (this._paused && !this._unsentData) {
1591
+ this._unsentData = payload;
1592
+ return;
1593
+ }
1594
+ if (this._paused) {
1595
+ this._unsentData += payload;
1596
+ return;
1597
+ }
1598
+ await this._writer.write(this._encoder.encode(payload)).catch();
1599
+ }
1600
+ pause() {
1601
+ this._paused = true;
1602
+ }
1603
+ get isPaused() {
1604
+ return this._paused;
1605
+ }
1606
+ async resume() {
1607
+ this._paused = false;
1608
+ await this.flush();
1609
+ }
1610
+ async flush() {
1611
+ if (this._writerIsClosed) {
1612
+ return;
1613
+ }
1614
+ if (this._unsentData?.length) {
1615
+ await this._writer.write(this._encoder.encode(this._unsentData));
1616
+ this._unsentData = void 0;
1617
+ }
1618
+ }
1619
+ /**
1620
+ * Close the stream and the connection if the stream is being sent to the client
1621
+ */
1622
+ async close() {
1623
+ if (this._disposed) {
1624
+ return;
1625
+ }
1626
+ if (!this._writerIsClosed) {
1627
+ try {
1628
+ await this._writer.close();
1629
+ } catch {
1630
+ }
1631
+ }
1632
+ if (this._h3Event._handled && this._handled && !this._h3Event.node.res.closed) {
1633
+ this._h3Event.node.res.end();
1634
+ }
1635
+ this._disposed = true;
1636
+ }
1637
+ /**
1638
+ * Triggers callback when the writable stream is closed.
1639
+ * It is also triggered after calling the `close()` method.
1640
+ */
1641
+ onClosed(cb) {
1642
+ this._writer.closed.then(cb);
1643
+ }
1644
+ async send() {
1645
+ setEventStreamHeaders(this._h3Event);
1646
+ setResponseStatus(this._h3Event, 200);
1647
+ this._h3Event._handled = true;
1648
+ this._handled = true;
1649
+ await sendStream(this._h3Event, this._transformStream.readable);
1650
+ }
1651
+ }
1652
+
1653
+ function createEventStream(event, opts) {
1654
+ return new EventStream(event, opts);
1655
+ }
1656
+
1657
+ async function serveStatic(event, options) {
1658
+ if (event.method !== "GET" && event.method !== "HEAD") {
1659
+ if (!options.fallthrough) {
1660
+ throw createError({
1661
+ statusMessage: "Method Not Allowed",
1662
+ statusCode: 405
1663
+ });
1664
+ }
1665
+ return false;
1666
+ }
1667
+ const originalId = withLeadingSlash(
1668
+ withoutTrailingSlash(parseURL(event.path).pathname)
1669
+ );
1670
+ if (/(^|[\\/])(\.\.|%2e%2e|%2e\.|\.%2e)($|[\\/])/i.test(originalId)) {
1671
+ if (!options.fallthrough) {
1672
+ throw createError({ statusCode: 404 });
1673
+ }
1674
+ return false;
1675
+ }
1676
+ const acceptEncodings = parseAcceptEncoding(
1677
+ getRequestHeader(event, "accept-encoding"),
1678
+ options.encodings
1679
+ );
1680
+ if (acceptEncodings.length > 1) {
1681
+ setResponseHeader(event, "vary", "accept-encoding");
1682
+ }
1683
+ let id = originalId;
1684
+ let meta;
1685
+ const _ids = idSearchPaths(
1686
+ originalId,
1687
+ acceptEncodings,
1688
+ options.indexNames || ["/index.html"]
1689
+ );
1690
+ for (const _id of _ids) {
1691
+ const _meta = await options.getMeta(_id);
1692
+ if (_meta) {
1693
+ meta = _meta;
1694
+ id = _id;
1695
+ break;
1696
+ }
1697
+ }
1698
+ if (!meta) {
1699
+ if (!options.fallthrough) {
1700
+ throw createError({ statusCode: 404 });
1701
+ }
1702
+ return false;
1703
+ }
1704
+ if (meta.etag && !getResponseHeader(event, "etag")) {
1705
+ setResponseHeader(event, "etag", meta.etag);
1706
+ }
1707
+ const ifNotMatch = meta.etag && getRequestHeader(event, "if-none-match") === meta.etag;
1708
+ if (ifNotMatch) {
1709
+ setResponseStatus(event, 304, "Not Modified");
1710
+ return send(event, "");
1711
+ }
1712
+ if (meta.mtime) {
1713
+ const mtimeDate = new Date(meta.mtime);
1714
+ const ifModifiedSinceH = getRequestHeader(event, "if-modified-since");
1715
+ if (ifModifiedSinceH && new Date(ifModifiedSinceH) >= mtimeDate) {
1716
+ setResponseStatus(event, 304, "Not Modified");
1717
+ return send(event, null);
1718
+ }
1719
+ if (!getResponseHeader(event, "last-modified")) {
1720
+ setResponseHeader(event, "last-modified", mtimeDate.toUTCString());
1721
+ }
1722
+ }
1723
+ if (meta.type && !getResponseHeader(event, "content-type")) {
1724
+ setResponseHeader(event, "content-type", meta.type);
1725
+ }
1726
+ if (meta.encoding && !getResponseHeader(event, "content-encoding")) {
1727
+ setResponseHeader(event, "content-encoding", meta.encoding);
1728
+ }
1729
+ if (meta.size !== void 0 && meta.size > 0 && !getResponseHeader(event, "content-length")) {
1730
+ setResponseHeader(event, "content-length", meta.size);
1731
+ }
1732
+ if (event.method === "HEAD") {
1733
+ return send(event, null);
1734
+ }
1735
+ const contents = await options.getContents(id);
1736
+ return isStream(contents) ? sendStream(event, contents) : send(event, contents);
1737
+ }
1738
+ function parseAcceptEncoding(header, encodingMap) {
1739
+ if (!encodingMap || !header) {
1740
+ return [];
1741
+ }
1742
+ return String(header || "").split(",").map((e) => encodingMap[e.trim()]).filter(Boolean);
1743
+ }
1744
+ function idSearchPaths(id, encodings, indexNames) {
1745
+ const ids = [];
1746
+ for (const suffix of ["", ...indexNames]) {
1747
+ for (const encoding of [...encodings, ""]) {
1748
+ ids.push(`${id}${suffix}${encoding}`);
1749
+ }
1750
+ }
1751
+ return ids;
1752
+ }
1753
+
1754
+ function defineWebSocket(hooks) {
1755
+ return hooks;
1756
+ }
1757
+ function defineWebSocketHandler(hooks) {
1758
+ return defineEventHandler({
1759
+ handler() {
1760
+ throw createError({
1761
+ statusCode: 426,
1762
+ statusMessage: "Upgrade Required"
1763
+ });
1764
+ },
1765
+ websocket: hooks
1766
+ });
1767
+ }
1768
+
1769
+ class H3Event {
1770
+ "__is_event__" = true;
1771
+ // Context
1772
+ node;
1773
+ // Node
1774
+ web;
1775
+ // Web
1776
+ context = {};
1777
+ // Shared
1778
+ // Request
1779
+ _method;
1780
+ _path;
1781
+ _headers;
1782
+ _requestBody;
1783
+ // Response
1784
+ _handled = false;
1785
+ // Hooks
1786
+ _onBeforeResponseCalled;
1787
+ _onAfterResponseCalled;
1788
+ constructor(req, res) {
1789
+ this.node = { req, res };
1790
+ }
1791
+ // --- Request ---
1792
+ get method() {
1793
+ if (!this._method) {
1794
+ this._method = (this.node.req.method || "GET").toUpperCase();
1795
+ }
1796
+ return this._method;
1797
+ }
1798
+ get path() {
1799
+ return this._path || this.node.req.url || "/";
1800
+ }
1801
+ get headers() {
1802
+ if (!this._headers) {
1803
+ this._headers = _normalizeNodeHeaders(this.node.req.headers);
1804
+ }
1805
+ return this._headers;
1806
+ }
1807
+ // --- Respoonse ---
1808
+ get handled() {
1809
+ return this._handled || this.node.res.writableEnded || this.node.res.headersSent;
1810
+ }
1811
+ respondWith(response) {
1812
+ return Promise.resolve(response).then(
1813
+ (_response) => sendWebResponse(this, _response)
1814
+ );
1815
+ }
1816
+ // --- Utils ---
1817
+ toString() {
1818
+ return `[${this.method}] ${this.path}`;
1819
+ }
1820
+ toJSON() {
1821
+ return this.toString();
1822
+ }
1823
+ // --- Deprecated ---
1824
+ /** @deprecated Please use `event.node.req` instead. */
1825
+ get req() {
1826
+ return this.node.req;
1827
+ }
1828
+ /** @deprecated Please use `event.node.res` instead. */
1829
+ get res() {
1830
+ return this.node.res;
1831
+ }
1832
+ }
1833
+ function isEvent(input) {
1834
+ return hasProp(input, "__is_event__");
1835
+ }
1836
+ function createEvent(req, res) {
1837
+ return new H3Event(req, res);
1838
+ }
1839
+ function _normalizeNodeHeaders(nodeHeaders) {
1840
+ const headers = new Headers();
1841
+ for (const [name, value] of Object.entries(nodeHeaders)) {
1842
+ if (Array.isArray(value)) {
1843
+ for (const item of value) {
1844
+ headers.append(name, item);
1845
+ }
1846
+ } else if (value) {
1847
+ headers.set(name, value);
1848
+ }
1849
+ }
1850
+ return headers;
1851
+ }
1852
+
1853
+ function defineEventHandler(handler) {
1854
+ if (typeof handler === "function") {
1855
+ handler.__is_handler__ = true;
1856
+ return handler;
1857
+ }
1858
+ const _hooks = {
1859
+ onRequest: _normalizeArray(handler.onRequest),
1860
+ onBeforeResponse: _normalizeArray(handler.onBeforeResponse)
1861
+ };
1862
+ const _handler = (event) => {
1863
+ return _callHandler(event, handler.handler, _hooks);
1864
+ };
1865
+ _handler.__is_handler__ = true;
1866
+ _handler.__resolve__ = handler.handler.__resolve__;
1867
+ _handler.__websocket__ = handler.websocket;
1868
+ return _handler;
1869
+ }
1870
+ function _normalizeArray(input) {
1871
+ return input ? Array.isArray(input) ? input : [input] : void 0;
1872
+ }
1873
+ async function _callHandler(event, handler, hooks) {
1874
+ if (hooks.onRequest) {
1875
+ for (const hook of hooks.onRequest) {
1876
+ await hook(event);
1877
+ if (event.handled) {
1878
+ return;
1879
+ }
1880
+ }
1881
+ }
1882
+ const body = await handler(event);
1883
+ const response = { body };
1884
+ if (hooks.onBeforeResponse) {
1885
+ for (const hook of hooks.onBeforeResponse) {
1886
+ await hook(event, response);
1887
+ }
1888
+ }
1889
+ return response.body;
1890
+ }
1891
+ const eventHandler = defineEventHandler;
1892
+ function defineRequestMiddleware(fn) {
1893
+ return fn;
1894
+ }
1895
+ function defineResponseMiddleware(fn) {
1896
+ return fn;
1897
+ }
1898
+ function isEventHandler(input) {
1899
+ return hasProp(input, "__is_handler__");
1900
+ }
1901
+ function toEventHandler(input, _, _route) {
1902
+ return input;
1903
+ }
1904
+ function dynamicEventHandler(initial) {
1905
+ let current = initial;
1906
+ const wrapper = eventHandler((event) => {
1907
+ if (current) {
1908
+ return current(event);
1909
+ }
1910
+ });
1911
+ wrapper.set = (handler) => {
1912
+ current = handler;
1913
+ };
1914
+ return wrapper;
1915
+ }
1916
+ function defineLazyEventHandler(factory) {
1917
+ let _promise;
1918
+ let _resolved;
1919
+ const resolveHandler = () => {
1920
+ if (_resolved) {
1921
+ return Promise.resolve(_resolved);
1922
+ }
1923
+ if (!_promise) {
1924
+ _promise = Promise.resolve(factory()).then((r) => {
1925
+ const handler2 = r.default || r;
1926
+ if (typeof handler2 !== "function") {
1927
+ throw new TypeError(
1928
+ "Invalid lazy handler result. It should be a function:",
1929
+ handler2
1930
+ );
1931
+ }
1932
+ _resolved = { handler: toEventHandler(r.default || r) };
1933
+ return _resolved;
1934
+ });
1935
+ }
1936
+ return _promise;
1937
+ };
1938
+ const handler = eventHandler((event) => {
1939
+ if (_resolved) {
1940
+ return _resolved.handler(event);
1941
+ }
1942
+ return resolveHandler().then((r) => r.handler(event));
1943
+ });
1944
+ handler.__resolve__ = resolveHandler;
1945
+ return handler;
1946
+ }
1947
+ const lazyEventHandler = defineLazyEventHandler;
1948
+
1949
+ const H3Headers = globalThis.Headers;
1950
+ const H3Response = globalThis.Response;
1951
+
1952
+ function createApp(options = {}) {
1953
+ const stack = [];
1954
+ const handler = createAppEventHandler(stack, options);
1955
+ const resolve = createResolver(stack);
1956
+ handler.__resolve__ = resolve;
1957
+ const getWebsocket = cachedFn(() => websocketOptions(resolve, options));
1958
+ const app = {
1959
+ // @ts-expect-error
1960
+ use: (arg1, arg2, arg3) => use(app, arg1, arg2, arg3),
1961
+ resolve,
1962
+ handler,
1963
+ stack,
1964
+ options,
1965
+ get websocket() {
1966
+ return getWebsocket();
1967
+ }
1968
+ };
1969
+ return app;
1970
+ }
1971
+ function use(app, arg1, arg2, arg3) {
1972
+ if (Array.isArray(arg1)) {
1973
+ for (const i of arg1) {
1974
+ use(app, i, arg2, arg3);
1975
+ }
1976
+ } else if (Array.isArray(arg2)) {
1977
+ for (const i of arg2) {
1978
+ use(app, arg1, i, arg3);
1979
+ }
1980
+ } else if (typeof arg1 === "string") {
1981
+ app.stack.push(
1982
+ normalizeLayer({ ...arg3, route: arg1, handler: arg2 })
1983
+ );
1984
+ } else if (typeof arg1 === "function") {
1985
+ app.stack.push(normalizeLayer({ ...arg2, handler: arg1 }));
1986
+ } else {
1987
+ app.stack.push(normalizeLayer({ ...arg1 }));
1988
+ }
1989
+ return app;
1990
+ }
1991
+ function createAppEventHandler(stack, options) {
1992
+ const spacing = options.debug ? 2 : void 0;
1993
+ return eventHandler(async (event) => {
1994
+ event.node.req.originalUrl = event.node.req.originalUrl || event.node.req.url || "/";
1995
+ const _rawReqUrl = event.node.req.url || "/";
1996
+ const _reqPath = _decodePath(event._path || _rawReqUrl);
1997
+ event._path = _reqPath;
1998
+ const _needsRawUrl = _reqPath !== _rawReqUrl;
1999
+ let _layerPath;
2000
+ if (options.onRequest) {
2001
+ await options.onRequest(event);
2002
+ }
2003
+ for (const layer of stack) {
2004
+ if (layer.route.length > 1) {
2005
+ if (!_reqPath.startsWith(layer.route)) {
2006
+ continue;
2007
+ }
2008
+ _layerPath = _reqPath.slice(layer.route.length) || "/";
2009
+ } else {
2010
+ _layerPath = _reqPath;
2011
+ }
2012
+ if (layer.match && !layer.match(_layerPath, event)) {
2013
+ continue;
2014
+ }
2015
+ event._path = _layerPath;
2016
+ event.node.req.url = _needsRawUrl ? layer.route.length > 1 ? _rawReqUrl.slice(layer.route.length) || "/" : _rawReqUrl : _layerPath;
2017
+ const val = await layer.handler(event);
2018
+ const _body = val === void 0 ? void 0 : await val;
2019
+ if (_body !== void 0) {
2020
+ const _response = { body: _body };
2021
+ if (options.onBeforeResponse) {
2022
+ event._onBeforeResponseCalled = true;
2023
+ await options.onBeforeResponse(event, _response);
2024
+ }
2025
+ await handleHandlerResponse(event, _response.body, spacing);
2026
+ if (options.onAfterResponse) {
2027
+ event._onAfterResponseCalled = true;
2028
+ await options.onAfterResponse(event, _response);
2029
+ }
2030
+ return;
2031
+ }
2032
+ if (event.handled) {
2033
+ if (options.onAfterResponse) {
2034
+ event._onAfterResponseCalled = true;
2035
+ await options.onAfterResponse(event, void 0);
2036
+ }
2037
+ return;
2038
+ }
2039
+ }
2040
+ if (!event.handled) {
2041
+ throw createError({
2042
+ statusCode: 404,
2043
+ statusMessage: `Cannot find any path matching ${event.path || "/"}.`
2044
+ });
2045
+ }
2046
+ if (options.onAfterResponse) {
2047
+ event._onAfterResponseCalled = true;
2048
+ await options.onAfterResponse(event, void 0);
2049
+ }
2050
+ });
2051
+ }
2052
+ function createResolver(stack) {
2053
+ return async (path) => {
2054
+ let _layerPath;
2055
+ for (const layer of stack) {
2056
+ if (layer.route === "/" && !layer.handler.__resolve__) {
2057
+ continue;
2058
+ }
2059
+ if (!path.startsWith(layer.route)) {
2060
+ continue;
2061
+ }
2062
+ _layerPath = path.slice(layer.route.length) || "/";
2063
+ if (layer.match && !layer.match(_layerPath, void 0)) {
2064
+ continue;
2065
+ }
2066
+ let res = { route: layer.route, handler: layer.handler };
2067
+ if (res.handler.__resolve__) {
2068
+ const _res = await res.handler.__resolve__(_layerPath);
2069
+ if (!_res) {
2070
+ continue;
2071
+ }
2072
+ res = {
2073
+ ...res,
2074
+ ..._res,
2075
+ route: joinURL(res.route || "/", _res.route || "/")
2076
+ };
2077
+ }
2078
+ return res;
2079
+ }
2080
+ };
2081
+ }
2082
+ function normalizeLayer(input) {
2083
+ let handler = input.handler;
2084
+ if (handler.handler) {
2085
+ handler = handler.handler;
2086
+ }
2087
+ if (input.lazy) {
2088
+ handler = lazyEventHandler(handler);
2089
+ } else if (!isEventHandler(handler)) {
2090
+ handler = toEventHandler(handler, void 0, input.route);
2091
+ }
2092
+ return {
2093
+ route: withoutTrailingSlash(input.route),
2094
+ match: input.match,
2095
+ handler
2096
+ };
2097
+ }
2098
+ function handleHandlerResponse(event, val, jsonSpace) {
2099
+ if (val === null) {
2100
+ return sendNoContent(event);
2101
+ }
2102
+ if (val) {
2103
+ if (isWebResponse(val)) {
2104
+ return sendWebResponse(event, val);
2105
+ }
2106
+ if (isStream(val)) {
2107
+ return sendStream(event, val);
2108
+ }
2109
+ if (val.buffer) {
2110
+ return send(event, val);
2111
+ }
2112
+ if (val.arrayBuffer && typeof val.arrayBuffer === "function") {
2113
+ return val.arrayBuffer().then((arrayBuffer) => {
2114
+ return send(event, Buffer.from(arrayBuffer), val.type);
2115
+ });
2116
+ }
2117
+ if (val instanceof Error) {
2118
+ throw createError(val);
2119
+ }
2120
+ if (typeof val.end === "function") {
2121
+ return true;
2122
+ }
2123
+ }
2124
+ const valType = typeof val;
2125
+ if (valType === "string") {
2126
+ return send(event, val, MIMES.html);
2127
+ }
2128
+ if (valType === "object" || valType === "boolean" || valType === "number") {
2129
+ return send(event, JSON.stringify(val, void 0, jsonSpace), MIMES.json);
2130
+ }
2131
+ if (valType === "bigint") {
2132
+ return send(event, val.toString(), MIMES.json);
2133
+ }
2134
+ throw createError({
2135
+ statusCode: 500,
2136
+ statusMessage: `[h3] Cannot send ${valType} as response.`
2137
+ });
2138
+ }
2139
+ function cachedFn(fn) {
2140
+ let cache;
2141
+ return () => {
2142
+ if (!cache) {
2143
+ cache = fn();
2144
+ }
2145
+ return cache;
2146
+ };
2147
+ }
2148
+ function _decodePath(url) {
2149
+ const qIndex = url.indexOf("?");
2150
+ const path = qIndex === -1 ? url : url.slice(0, qIndex);
2151
+ const query = qIndex === -1 ? "" : url.slice(qIndex);
2152
+ const decodedPath = path.includes("%25") ? decodePath(path.replace(/%25/g, "%2525")) : decodePath(path);
2153
+ return decodedPath + query;
2154
+ }
2155
+ function websocketOptions(evResolver, appOptions) {
2156
+ return {
2157
+ ...appOptions.websocket,
2158
+ async resolve(info) {
2159
+ const url = info.request?.url || info.url || "/";
2160
+ const { pathname } = typeof url === "string" ? parseURL(url) : url;
2161
+ const resolved = await evResolver(pathname);
2162
+ return resolved?.handler?.__websocket__ || {};
2163
+ }
2164
+ };
2165
+ }
2166
+
2167
+ const RouterMethods = [
2168
+ "connect",
2169
+ "delete",
2170
+ "get",
2171
+ "head",
2172
+ "options",
2173
+ "post",
2174
+ "put",
2175
+ "trace",
2176
+ "patch"
2177
+ ];
2178
+ function createRouter(opts = {}) {
2179
+ const _router = createRouter$1({});
2180
+ const routes = {};
2181
+ let _matcher;
2182
+ const router = {};
2183
+ const addRoute = (path, handler, method) => {
2184
+ let route = routes[path];
2185
+ if (!route) {
2186
+ routes[path] = route = { path, handlers: {} };
2187
+ _router.insert(path, route);
2188
+ }
2189
+ if (Array.isArray(method)) {
2190
+ for (const m of method) {
2191
+ addRoute(path, handler, m);
2192
+ }
2193
+ } else {
2194
+ route.handlers[method] = toEventHandler(handler);
2195
+ }
2196
+ return router;
2197
+ };
2198
+ router.use = router.add = (path, handler, method) => addRoute(path, handler, method || "all");
2199
+ for (const method of RouterMethods) {
2200
+ router[method] = (path, handle) => router.add(path, handle, method);
2201
+ }
2202
+ const matchHandler = (path = "/", method = "get") => {
2203
+ const qIndex = path.indexOf("?");
2204
+ if (qIndex !== -1) {
2205
+ path = path.slice(0, Math.max(0, qIndex));
2206
+ }
2207
+ const matched = _router.lookup(path);
2208
+ if (!matched || !matched.handlers) {
2209
+ return {
2210
+ error: createError({
2211
+ statusCode: 404,
2212
+ name: "Not Found",
2213
+ statusMessage: `Cannot find any route matching ${path || "/"}.`
2214
+ })
2215
+ };
2216
+ }
2217
+ let handler = matched.handlers[method] || matched.handlers.all;
2218
+ if (!handler) {
2219
+ if (!_matcher) {
2220
+ _matcher = toRouteMatcher(_router);
2221
+ }
2222
+ const _matches = _matcher.matchAll(path).reverse();
2223
+ for (const _match of _matches) {
2224
+ if (_match.handlers[method]) {
2225
+ handler = _match.handlers[method];
2226
+ matched.handlers[method] = matched.handlers[method] || handler;
2227
+ break;
2228
+ }
2229
+ if (_match.handlers.all) {
2230
+ handler = _match.handlers.all;
2231
+ matched.handlers.all = matched.handlers.all || handler;
2232
+ break;
2233
+ }
2234
+ }
2235
+ }
2236
+ if (!handler) {
2237
+ return {
2238
+ error: createError({
2239
+ statusCode: 405,
2240
+ name: "Method Not Allowed",
2241
+ statusMessage: `Method ${method} is not allowed on this route.`
2242
+ })
2243
+ };
2244
+ }
2245
+ return { matched, handler };
2246
+ };
2247
+ const isPreemptive = opts.preemptive || opts.preemtive;
2248
+ router.handler = eventHandler((event) => {
2249
+ const match = matchHandler(
2250
+ event.path,
2251
+ event.method.toLowerCase()
2252
+ );
2253
+ if ("error" in match) {
2254
+ if (isPreemptive) {
2255
+ throw match.error;
2256
+ } else {
2257
+ return;
2258
+ }
2259
+ }
2260
+ event.context.matchedRoute = match.matched;
2261
+ const params = match.matched.params || {};
2262
+ event.context.params = params;
2263
+ return Promise.resolve(match.handler(event)).then((res) => {
2264
+ if (res === void 0 && isPreemptive) {
2265
+ return null;
2266
+ }
2267
+ return res;
2268
+ });
2269
+ });
2270
+ router.handler.__resolve__ = async (path) => {
2271
+ path = withLeadingSlash(path);
2272
+ const match = matchHandler(path);
2273
+ if ("error" in match) {
2274
+ return;
2275
+ }
2276
+ let res = {
2277
+ route: match.matched.path,
2278
+ handler: match.handler
2279
+ };
2280
+ if (match.handler.__resolve__) {
2281
+ const _res = await match.handler.__resolve__(path);
2282
+ if (!_res) {
2283
+ return;
2284
+ }
2285
+ res = { ...res, ..._res };
2286
+ }
2287
+ return res;
2288
+ };
2289
+ return router;
2290
+ }
2291
+
2292
+ const defineNodeListener = (handler) => handler;
2293
+ const defineNodeMiddleware = (middleware) => middleware;
2294
+ function fromNodeMiddleware(handler) {
2295
+ if (isEventHandler(handler)) {
2296
+ return handler;
2297
+ }
2298
+ if (typeof handler !== "function") {
2299
+ throw new TypeError(
2300
+ "Invalid handler. It should be a function:",
2301
+ handler
2302
+ );
2303
+ }
2304
+ return eventHandler((event) => {
2305
+ return callNodeListener(
2306
+ handler,
2307
+ event.node.req,
2308
+ event.node.res
2309
+ );
2310
+ });
2311
+ }
2312
+ function toNodeListener(app) {
2313
+ const toNodeHandle = async function(req, res) {
2314
+ const event = createEvent(req, res);
2315
+ try {
2316
+ await app.handler(event);
2317
+ } catch (_error) {
2318
+ const error = createError(_error);
2319
+ if (!isError(_error)) {
2320
+ error.unhandled = true;
2321
+ }
2322
+ setResponseStatus(event, error.statusCode, error.statusMessage);
2323
+ if (app.options.onError) {
2324
+ await app.options.onError(error, event);
2325
+ }
2326
+ if (event.handled) {
2327
+ return;
2328
+ }
2329
+ if (error.unhandled || error.fatal) {
2330
+ console.error("[h3]", error.fatal ? "[fatal]" : "[unhandled]", error);
2331
+ }
2332
+ if (app.options.onBeforeResponse && !event._onBeforeResponseCalled) {
2333
+ await app.options.onBeforeResponse(event, { body: error });
2334
+ }
2335
+ await sendError(event, error, !!app.options.debug);
2336
+ if (app.options.onAfterResponse && !event._onAfterResponseCalled) {
2337
+ await app.options.onAfterResponse(event, { body: error });
2338
+ }
2339
+ }
2340
+ };
2341
+ return toNodeHandle;
2342
+ }
2343
+ function promisifyNodeListener(handler) {
2344
+ return function(req, res) {
2345
+ return callNodeListener(handler, req, res);
2346
+ };
2347
+ }
2348
+ function callNodeListener(handler, req, res) {
2349
+ const isMiddleware = handler.length > 2;
2350
+ return new Promise((resolve, reject) => {
2351
+ const next = (err) => {
2352
+ if (isMiddleware) {
2353
+ res.off("close", next);
2354
+ res.off("error", next);
2355
+ }
2356
+ return err ? reject(createError(err)) : resolve(void 0);
2357
+ };
2358
+ try {
2359
+ const returned = handler(req, res, next);
2360
+ if (isMiddleware && returned === void 0) {
2361
+ res.once("close", next);
2362
+ res.once("error", next);
2363
+ } else {
2364
+ resolve(returned);
2365
+ }
2366
+ } catch (error) {
2367
+ next(error);
2368
+ }
2369
+ });
2370
+ }
2371
+
2372
+ function toPlainHandler(app) {
2373
+ const handler = (request) => {
2374
+ return _handlePlainRequest(app, request);
2375
+ };
2376
+ return handler;
2377
+ }
2378
+ function fromPlainHandler(handler) {
2379
+ return eventHandler(async (event) => {
2380
+ const res = await handler({
2381
+ method: event.method,
2382
+ path: event.path,
2383
+ headers: Object.fromEntries(event.headers.entries()),
2384
+ body: getRequestWebStream(event),
2385
+ context: event.context
2386
+ });
2387
+ setResponseStatus(event, res.status, res.statusText);
2388
+ for (const [key, value] of res.headers) {
2389
+ setResponseHeader(event, key, value);
2390
+ }
2391
+ return res.body;
2392
+ });
2393
+ }
2394
+ async function _handlePlainRequest(app, request) {
2395
+ const path = request.path;
2396
+ const method = (request.method || "GET").toUpperCase();
2397
+ const headers = new Headers(request.headers);
2398
+ const nodeReq = new IncomingMessage();
2399
+ const nodeRes = new ServerResponse(nodeReq);
2400
+ nodeReq.method = method;
2401
+ nodeReq.url = path;
2402
+ nodeReq.headers = Object.fromEntries(headers.entries());
2403
+ const event = createEvent(nodeReq, nodeRes);
2404
+ event._method = method;
2405
+ event._path = path;
2406
+ event._headers = headers;
2407
+ if (request.body) {
2408
+ event._requestBody = request.body;
2409
+ }
2410
+ if (request._eventOverrides) {
2411
+ Object.assign(event, request._eventOverrides);
2412
+ }
2413
+ if (request.context) {
2414
+ Object.assign(event.context, request.context);
2415
+ }
2416
+ try {
2417
+ await app.handler(event);
2418
+ } catch (_error) {
2419
+ const error = createError(_error);
2420
+ if (!isError(_error)) {
2421
+ error.unhandled = true;
2422
+ }
2423
+ if (app.options.onError) {
2424
+ await app.options.onError(error, event);
2425
+ }
2426
+ if (!event.handled) {
2427
+ if (error.unhandled || error.fatal) {
2428
+ console.error("[h3]", error.fatal ? "[fatal]" : "[unhandled]", error);
2429
+ }
2430
+ await sendError(event, error, !!app.options.debug);
2431
+ }
2432
+ }
2433
+ return {
2434
+ status: nodeRes.statusCode,
2435
+ statusText: nodeRes.statusMessage,
2436
+ headers: _normalizeUnenvHeaders(nodeRes._headers),
2437
+ body: nodeRes._data
2438
+ };
2439
+ }
2440
+ function _normalizeUnenvHeaders(input) {
2441
+ const headers = [];
2442
+ const cookies = [];
2443
+ for (const _key in input) {
2444
+ const key = _key.toLowerCase();
2445
+ if (key === "set-cookie") {
2446
+ cookies.push(
2447
+ ...splitCookiesString(input["set-cookie"])
2448
+ );
2449
+ continue;
2450
+ }
2451
+ const value = input[key];
2452
+ if (Array.isArray(value)) {
2453
+ for (const _value of value) {
2454
+ headers.push([key, _value]);
2455
+ }
2456
+ } else if (value !== void 0) {
2457
+ headers.push([key, String(value)]);
2458
+ }
2459
+ }
2460
+ if (cookies.length > 0) {
2461
+ for (const cookie of cookies) {
2462
+ headers.push(["set-cookie", cookie]);
2463
+ }
2464
+ }
2465
+ return headers;
2466
+ }
2467
+
2468
+ function toWebHandler(app) {
2469
+ const webHandler = (request, context) => {
2470
+ return _handleWebRequest(app, request, context);
2471
+ };
2472
+ return webHandler;
2473
+ }
2474
+ function fromWebHandler(handler) {
2475
+ return eventHandler((event) => handler(toWebRequest(event), event.context));
2476
+ }
2477
+ const nullBodyResponses = /* @__PURE__ */ new Set([101, 204, 205, 304]);
2478
+ async function _handleWebRequest(app, request, context) {
2479
+ const url = new URL(request.url);
2480
+ const res = await _handlePlainRequest(app, {
2481
+ _eventOverrides: {
2482
+ web: { request, url }
2483
+ },
2484
+ context,
2485
+ method: request.method,
2486
+ path: url.pathname + url.search,
2487
+ headers: request.headers,
2488
+ body: request.body
2489
+ });
2490
+ const body = nullBodyResponses.has(res.status) || request.method === "HEAD" ? null : res.body;
2491
+ return new Response(body, {
2492
+ status: res.status,
2493
+ statusText: res.statusText,
2494
+ headers: res.headers
2495
+ });
2496
+ }
2497
+
2498
+ export { H3Error, H3Event, H3Headers, H3Response, MIMES, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, callNodeListener, clearResponseHeaders, clearSession, createApp, createAppEventHandler, createError, createEvent, createEventStream, createRouter, defaultContentType, defineEventHandler, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, defineWebSocket, defineWebSocketHandler, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeMiddleware, fromPlainHandler, fromWebHandler, getCookie, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, isCorsOriginAllowed, isError, isEvent, isEventHandler, isMethod, isPreflightRequest, isStream, isWebResponse, lazyEventHandler, parseCookies, promisifyNodeListener, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, sanitizeStatusCode, sanitizeStatusMessage, sealSession, send, sendError, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, toWebRequest, unsealSession, updateSession, use, useBase, useSession, writeEarlyHints };