nitro-nightly 4.0.0-20251030-091344-d4418b98 → 4.0.0-20251030-122334-09c1a7a8

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 (334) hide show
  1. package/dist/_build/common.mjs +763 -0
  2. package/dist/_build/rolldown.mjs +216 -0
  3. package/dist/_build/rollup.mjs +359 -0
  4. package/dist/_build/vite.build.mjs +67 -0
  5. package/dist/_build/vite.plugin.mjs +762 -0
  6. package/dist/_chunks/B-7HiF0V.mjs +1303 -0
  7. package/dist/_chunks/B3asVbT4.mjs +151 -0
  8. package/dist/_chunks/B5ooyfLk.mjs +372 -0
  9. package/dist/_chunks/DXMHy5ca.mjs +43 -0
  10. package/dist/_dev.d.mts +12 -0
  11. package/dist/_dev.mjs +675 -0
  12. package/dist/_libs/acorn.mjs +5034 -0
  13. package/dist/_libs/c12.mjs +2798 -0
  14. package/dist/_libs/chokidar.mjs +1560 -0
  15. package/dist/_libs/citty.mjs +333 -0
  16. package/dist/_libs/commondir.mjs +22 -0
  17. package/dist/_libs/compatx.mjs +46 -0
  18. package/dist/_libs/confbox.mjs +2920 -0
  19. package/dist/_libs/debug.mjs +848 -0
  20. package/dist/_libs/deepmerge.mjs +86 -0
  21. package/dist/_libs/depd.mjs +314 -0
  22. package/dist/_libs/dot-prop.mjs +138 -0
  23. package/dist/_libs/duplexer.mjs +71 -0
  24. package/dist/_libs/ee-first.mjs +68 -0
  25. package/dist/_libs/encodeurl.mjs +49 -0
  26. package/dist/_libs/escape-html.mjs +58 -0
  27. package/dist/_libs/escape-string-regexp.mjs +8 -0
  28. package/dist/_libs/estree-walker.mjs +330 -0
  29. package/dist/_libs/etag.mjs +75 -0
  30. package/dist/{_chunks/_deps → _libs}/fdir.mjs +49 -104
  31. package/dist/_libs/fresh.mjs +85 -0
  32. package/dist/_libs/function-bind.mjs +63 -0
  33. package/dist/_libs/gen-mapping.mjs +612 -0
  34. package/dist/_libs/giget.mjs +19076 -0
  35. package/dist/_libs/gzip-size.mjs +21 -0
  36. package/dist/_libs/hasown.mjs +14 -0
  37. package/dist/_libs/http-errors.mjs +436 -0
  38. package/dist/_libs/httpxy.mjs +410 -0
  39. package/dist/_libs/is-core-module.mjs +220 -0
  40. package/dist/_libs/is-module.mjs +13 -0
  41. package/dist/_libs/is-reference.mjs +32 -0
  42. package/dist/{_chunks/_deps → _libs}/js-tokens.mjs +83 -112
  43. package/dist/_libs/klona.mjs +90 -0
  44. package/dist/_libs/knitwork.mjs +124 -0
  45. package/dist/_libs/local-pkg.mjs +1686 -0
  46. package/dist/{_chunks/_deps → _libs}/magic-string.mjs +272 -629
  47. package/dist/_libs/mime-db.mjs +7642 -0
  48. package/dist/_libs/mime-types.mjs +162 -0
  49. package/dist/_libs/mime.mjs +1391 -0
  50. package/dist/_libs/node-fetch-native.mjs +173 -0
  51. package/dist/_libs/on-finished.mjs +170 -0
  52. package/dist/_libs/parseurl.mjs +103 -0
  53. package/dist/_libs/path-parse.mjs +47 -0
  54. package/dist/_libs/pathe.mjs +41 -0
  55. package/dist/_libs/picomatch.mjs +1673 -0
  56. package/dist/_libs/plugin-alias.mjs +64 -0
  57. package/dist/_libs/plugin-commonjs.mjs +1489 -0
  58. package/dist/_libs/plugin-inject.mjs +135 -0
  59. package/dist/_libs/plugin-json.mjs +36 -0
  60. package/dist/_libs/plugin-node-resolve.mjs +1553 -0
  61. package/dist/_libs/plugin-replace.mjs +104 -0
  62. package/dist/_libs/pretty-bytes.mjs +116 -0
  63. package/dist/_libs/range-parser.mjs +102 -0
  64. package/dist/_libs/remapping.mjs +117 -0
  65. package/dist/{_chunks/_deps → _libs}/rou3.mjs +7 -22
  66. package/dist/_libs/send.mjs +857 -0
  67. package/dist/_libs/serve-static.mjs +124 -0
  68. package/dist/_libs/std-env.mjs +158 -0
  69. package/dist/_libs/strip-literal.mjs +51 -0
  70. package/dist/{_chunks/_deps → _libs}/tinyglobby.mjs +32 -33
  71. package/dist/_libs/ultrahtml.mjs +138 -0
  72. package/dist/_libs/unimport.mjs +3520 -0
  73. package/dist/_libs/untyped.mjs +271 -0
  74. package/dist/_libs/unwasm.mjs +5825 -0
  75. package/dist/{_chunks/_deps/@pi0 → _libs}/vite-plugin-fullstack.mjs +28 -42
  76. package/dist/_presets.mjs +1723 -0
  77. package/dist/builder.d.mts +37 -35
  78. package/dist/builder.mjs +45 -117
  79. package/dist/cli/_chunks/build.mjs +43 -0
  80. package/dist/cli/_chunks/common.mjs +15 -0
  81. package/dist/cli/_chunks/detect-acorn.mjs +12 -0
  82. package/dist/cli/_chunks/dev.mjs +79 -0
  83. package/dist/cli/_chunks/dist.mjs +3 -0
  84. package/dist/cli/_chunks/dist2.mjs +4 -0
  85. package/dist/cli/_chunks/esm.mjs +3 -0
  86. package/dist/cli/_chunks/json5.mjs +4 -0
  87. package/dist/cli/_chunks/jsonc.mjs +4 -0
  88. package/dist/cli/_chunks/list.mjs +27 -0
  89. package/dist/cli/_chunks/multipart-parser.mjs +6 -0
  90. package/dist/cli/_chunks/prepare.mjs +19 -0
  91. package/dist/cli/_chunks/run.mjs +55 -0
  92. package/dist/cli/_chunks/task.mjs +16 -0
  93. package/dist/cli/_chunks/toml.mjs +4 -0
  94. package/dist/cli/_chunks/yaml.mjs +4 -0
  95. package/dist/cli/index.d.mts +1 -1
  96. package/dist/cli/index.mjs +19 -18
  97. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
  98. package/dist/presets/_nitro/runtime/nitro-dev.mjs +42 -33
  99. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +2 -2
  100. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +4 -8
  101. package/dist/presets/_nitro/runtime/service-worker.d.mts +1 -0
  102. package/dist/presets/_nitro/runtime/service-worker.mjs +14 -11
  103. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +1 -0
  104. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +6 -5
  105. package/dist/presets/aws-lambda/runtime/_utils.d.mts +8 -13
  106. package/dist/presets/aws-lambda/runtime/_utils.mjs +95 -81
  107. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +1 -2
  108. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +25 -27
  109. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +7 -7
  110. package/dist/presets/azure/runtime/_utils.mjs +43 -43
  111. package/dist/presets/azure/runtime/azure-swa.d.mts +2 -2
  112. package/dist/presets/azure/runtime/azure-swa.mjs +22 -21
  113. package/dist/presets/bun/runtime/bun.d.mts +1 -0
  114. package/dist/presets/bun/runtime/bun.mjs +18 -17
  115. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +10 -7
  116. package/dist/presets/cloudflare/runtime/_module-handler.mjs +78 -87
  117. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +6 -14
  118. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +53 -58
  119. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +1 -7
  120. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +12 -14
  121. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +12 -12
  122. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +35 -39
  123. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +2 -2
  124. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +86 -76
  125. package/dist/presets/deno/runtime/deno-deploy.d.mts +1 -0
  126. package/dist/presets/deno/runtime/deno-deploy.mjs +12 -11
  127. package/dist/presets/deno/runtime/deno-server.d.mts +2 -1
  128. package/dist/presets/deno/runtime/deno-server.mjs +31 -39
  129. package/dist/presets/netlify/runtime/netlify-edge.d.mts +2 -1
  130. package/dist/presets/netlify/runtime/netlify-edge.mjs +14 -11
  131. package/dist/presets/netlify/runtime/netlify.mjs +11 -17
  132. package/dist/presets/node/runtime/node-cluster.mjs +49 -48
  133. package/dist/presets/node/runtime/node-middleware.d.mts +3 -2
  134. package/dist/presets/node/runtime/node-middleware.mjs +7 -6
  135. package/dist/presets/node/runtime/node-server.mjs +33 -23
  136. package/dist/presets/standard/runtime/server.d.mts +1 -3
  137. package/dist/presets/standard/runtime/server.mjs +1 -3
  138. package/dist/presets/stormkit/runtime/stormkit.d.mts +13 -13
  139. package/dist/presets/stormkit/runtime/stormkit.mjs +20 -20
  140. package/dist/presets/vercel/runtime/vercel.d.mts +3 -3
  141. package/dist/presets/vercel/runtime/vercel.mjs +15 -14
  142. package/dist/presets/winterjs/runtime/winterjs.d.mts +2 -0
  143. package/dist/presets/winterjs/runtime/winterjs.mjs +72 -68
  144. package/dist/presets/zeabur/runtime/zeabur.d.mts +1 -1
  145. package/dist/runtime/index.d.mts +12 -1
  146. package/dist/runtime/index.mjs +12 -7
  147. package/dist/runtime/internal/app.mjs +175 -162
  148. package/dist/runtime/internal/cache.d.mts +10 -4
  149. package/dist/runtime/internal/cache.mjs +247 -216
  150. package/dist/runtime/internal/context.d.mts +9 -9
  151. package/dist/runtime/internal/context.mjs +17 -10
  152. package/dist/runtime/internal/database.mjs +8 -10
  153. package/dist/runtime/internal/error/dev.d.mts +5 -4
  154. package/dist/runtime/internal/error/dev.mjs +106 -105
  155. package/dist/runtime/internal/error/prod.d.mts +2 -2
  156. package/dist/runtime/internal/error/prod.mjs +48 -52
  157. package/dist/runtime/internal/error/utils.d.mts +4 -4
  158. package/dist/runtime/internal/error/utils.mjs +1 -1
  159. package/dist/runtime/internal/index.d.mts +2 -0
  160. package/dist/runtime/internal/index.mjs +2 -0
  161. package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +14 -14
  162. package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +248 -209
  163. package/dist/runtime/internal/meta.d.mts +1 -1
  164. package/dist/runtime/internal/meta.mjs +1 -1
  165. package/dist/runtime/internal/plugin.d.mts +2 -2
  166. package/dist/runtime/internal/plugin.mjs +1 -1
  167. package/dist/runtime/internal/renderer.mjs +39 -31
  168. package/dist/runtime/internal/route-rules.d.mts +8 -8
  169. package/dist/runtime/internal/route-rules.mjs +53 -51
  170. package/dist/runtime/internal/routes/dev-tasks.d.mts +1 -30
  171. package/dist/runtime/internal/routes/dev-tasks.mjs +15 -17
  172. package/dist/runtime/internal/routes/openapi.d.mts +1 -0
  173. package/dist/runtime/internal/routes/openapi.mjs +81 -87
  174. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  175. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +1 -2
  176. package/dist/runtime/internal/routes/renderer-template.dev.mjs +10 -17
  177. package/dist/runtime/internal/routes/renderer-template.mjs +1 -1
  178. package/dist/runtime/internal/routes/scalar.d.mts +1 -0
  179. package/dist/runtime/internal/routes/scalar.mjs +22 -23
  180. package/dist/runtime/internal/routes/swagger.d.mts +1 -0
  181. package/dist/runtime/internal/routes/swagger.mjs +9 -11
  182. package/dist/runtime/internal/runtime-config.d.mts +4 -4
  183. package/dist/runtime/internal/runtime-config.mjs +40 -35
  184. package/dist/runtime/internal/shutdown.d.mts +2 -7
  185. package/dist/runtime/internal/shutdown.mjs +30 -29
  186. package/dist/runtime/internal/static.mjs +63 -74
  187. package/dist/runtime/internal/storage.mjs +2 -2
  188. package/dist/runtime/internal/task.d.mts +6 -6
  189. package/dist/runtime/internal/task.mjs +56 -59
  190. package/dist/runtime/internal/utils.d.mts +1 -1
  191. package/dist/runtime/internal/utils.mjs +4 -10
  192. package/dist/types/index.d.mts +2566 -3851
  193. package/dist/types/index.mjs +1 -1
  194. package/dist/vite.d.mts +61 -51
  195. package/dist/vite.mjs +55 -132
  196. package/package.json +10 -10
  197. package/dist/_build/build.mjs +0 -368
  198. package/dist/_build/build2.mjs +0 -556
  199. package/dist/_build/info.mjs +0 -1002
  200. package/dist/_build/prepare.mjs +0 -1511
  201. package/dist/_build/snapshot.mjs +0 -185
  202. package/dist/_build/vite.mjs +0 -959
  203. package/dist/_build/vite2.mjs +0 -149
  204. package/dist/_chunks/_deps/@jridgewell/gen-mapping.mjs +0 -189
  205. package/dist/_chunks/_deps/@jridgewell/remapping.mjs +0 -137
  206. package/dist/_chunks/_deps/@jridgewell/resolve-uri.mjs +0 -231
  207. package/dist/_chunks/_deps/@jridgewell/sourcemap-codec.mjs +0 -173
  208. package/dist/_chunks/_deps/@jridgewell/trace-mapping.mjs +0 -170
  209. package/dist/_chunks/_deps/@rollup/plugin-alias.mjs +0 -89
  210. package/dist/_chunks/_deps/@rollup/plugin-commonjs.mjs +0 -2376
  211. package/dist/_chunks/_deps/@rollup/plugin-inject.mjs +0 -212
  212. package/dist/_chunks/_deps/@rollup/plugin-json.mjs +0 -37
  213. package/dist/_chunks/_deps/@rollup/plugin-node-resolve.mjs +0 -1386
  214. package/dist/_chunks/_deps/@rollup/plugin-replace.mjs +0 -133
  215. package/dist/_chunks/_deps/@rollup/pluginutils.mjs +0 -346
  216. package/dist/_chunks/_deps/acorn.mjs +0 -6225
  217. package/dist/_chunks/_deps/c12.mjs +0 -510
  218. package/dist/_chunks/_deps/chokidar.mjs +0 -1428
  219. package/dist/_chunks/_deps/citty.mjs +0 -460
  220. package/dist/_chunks/_deps/commondir.mjs +0 -77
  221. package/dist/_chunks/_deps/compatx.mjs +0 -76
  222. package/dist/_chunks/_deps/confbox.mjs +0 -300
  223. package/dist/_chunks/_deps/debug.mjs +0 -885
  224. package/dist/_chunks/_deps/deepmerge.mjs +0 -147
  225. package/dist/_chunks/_deps/depd.mjs +0 -550
  226. package/dist/_chunks/_deps/dot-prop.mjs +0 -282
  227. package/dist/_chunks/_deps/dotenv.mjs +0 -555
  228. package/dist/_chunks/_deps/duplexer.mjs +0 -1
  229. package/dist/_chunks/_deps/ee-first.mjs +0 -104
  230. package/dist/_chunks/_deps/encodeurl.mjs +0 -69
  231. package/dist/_chunks/_deps/escape-html.mjs +0 -87
  232. package/dist/_chunks/_deps/escape-string-regexp.mjs +0 -13
  233. package/dist/_chunks/_deps/estree-walker.mjs +0 -433
  234. package/dist/_chunks/_deps/etag.mjs +0 -147
  235. package/dist/_chunks/_deps/exsolve.mjs +0 -1416
  236. package/dist/_chunks/_deps/fresh.mjs +0 -145
  237. package/dist/_chunks/_deps/function-bind.mjs +0 -106
  238. package/dist/_chunks/_deps/giget.mjs +0 -451
  239. package/dist/_chunks/_deps/gzip-size.mjs +0 -19
  240. package/dist/_chunks/_deps/hasown.mjs +0 -19
  241. package/dist/_chunks/_deps/http-errors.mjs +0 -307
  242. package/dist/_chunks/_deps/httpxy.mjs +0 -580
  243. package/dist/_chunks/_deps/inherits.mjs +0 -57
  244. package/dist/_chunks/_deps/is-core-module.mjs +0 -596
  245. package/dist/_chunks/_deps/is-module.mjs +0 -25
  246. package/dist/_chunks/_deps/is-reference.mjs +0 -31
  247. package/dist/_chunks/_deps/klona.mjs +0 -137
  248. package/dist/_chunks/_deps/knitwork.mjs +0 -172
  249. package/dist/_chunks/_deps/local-pkg.mjs +0 -163
  250. package/dist/_chunks/_deps/mime-db.mjs +0 -11685
  251. package/dist/_chunks/_deps/mime-types.mjs +0 -287
  252. package/dist/_chunks/_deps/mime.mjs +0 -1172
  253. package/dist/_chunks/_deps/mlly.mjs +0 -2413
  254. package/dist/_chunks/_deps/ms.mjs +0 -172
  255. package/dist/_chunks/_deps/node-fetch-native.mjs +0 -3
  256. package/dist/_chunks/_deps/nypm.mjs +0 -219
  257. package/dist/_chunks/_deps/on-finished.mjs +0 -246
  258. package/dist/_chunks/_deps/parseurl.mjs +0 -168
  259. package/dist/_chunks/_deps/path-parse.mjs +0 -85
  260. package/dist/_chunks/_deps/pathe.mjs +0 -251
  261. package/dist/_chunks/_deps/perfect-debounce.mjs +0 -88
  262. package/dist/_chunks/_deps/picomatch.mjs +0 -2144
  263. package/dist/_chunks/_deps/pkg-types.mjs +0 -247
  264. package/dist/_chunks/_deps/pretty-bytes.mjs +0 -180
  265. package/dist/_chunks/_deps/quansync.mjs +0 -99
  266. package/dist/_chunks/_deps/range-parser.mjs +0 -171
  267. package/dist/_chunks/_deps/rc9.mjs +0 -219
  268. package/dist/_chunks/_deps/readdirp.mjs +0 -245
  269. package/dist/_chunks/_deps/resolve.mjs +0 -1260
  270. package/dist/_chunks/_deps/send.mjs +0 -1022
  271. package/dist/_chunks/_deps/serve-static.mjs +0 -228
  272. package/dist/_chunks/_deps/setprototypeof.mjs +0 -26
  273. package/dist/_chunks/_deps/statuses.mjs +0 -457
  274. package/dist/_chunks/_deps/std-env.mjs +0 -3
  275. package/dist/_chunks/_deps/strip-literal.mjs +0 -67
  276. package/dist/_chunks/_deps/supports-color.mjs +0 -44
  277. package/dist/_chunks/_deps/tinyexec.mjs +0 -552
  278. package/dist/_chunks/_deps/toidentifier.mjs +0 -41
  279. package/dist/_chunks/_deps/ultrahtml.mjs +0 -3
  280. package/dist/_chunks/_deps/unimport.mjs +0 -2267
  281. package/dist/_chunks/_deps/unplugin-utils.mjs +0 -65
  282. package/dist/_chunks/_deps/unplugin.mjs +0 -1294
  283. package/dist/_chunks/_deps/untyped.mjs +0 -375
  284. package/dist/_chunks/_deps/unwasm.mjs +0 -6959
  285. package/dist/_chunks/_deps/webpack-virtual-modules.mjs +0 -360
  286. package/dist/_chunks/_presets/_all.mjs +0 -59
  287. package/dist/_chunks/_presets/_nitro.mjs +0 -74
  288. package/dist/_chunks/_presets/_resolve.mjs +0 -64
  289. package/dist/_chunks/_presets/_static.mjs +0 -69
  290. package/dist/_chunks/_presets/_types.mjs +0 -3
  291. package/dist/_chunks/_presets/_utils.mjs +0 -31
  292. package/dist/_chunks/_presets/alwaysdata.mjs +0 -17
  293. package/dist/_chunks/_presets/aws-amplify.mjs +0 -111
  294. package/dist/_chunks/_presets/aws-lambda.mjs +0 -23
  295. package/dist/_chunks/_presets/azure.mjs +0 -162
  296. package/dist/_chunks/_presets/bun.mjs +0 -19
  297. package/dist/_chunks/_presets/cleavr.mjs +0 -15
  298. package/dist/_chunks/_presets/cloudflare.mjs +0 -608
  299. package/dist/_chunks/_presets/deno.mjs +0 -196
  300. package/dist/_chunks/_presets/digitalocean.mjs +0 -14
  301. package/dist/_chunks/_presets/firebase.mjs +0 -47
  302. package/dist/_chunks/_presets/flightcontrol.mjs +0 -14
  303. package/dist/_chunks/_presets/genezio.mjs +0 -13
  304. package/dist/_chunks/_presets/heroku.mjs +0 -14
  305. package/dist/_chunks/_presets/iis.mjs +0 -194
  306. package/dist/_chunks/_presets/index.mjs +0 -62
  307. package/dist/_chunks/_presets/koyeb.mjs +0 -14
  308. package/dist/_chunks/_presets/netlify.mjs +0 -241
  309. package/dist/_chunks/_presets/node.mjs +0 -54
  310. package/dist/_chunks/_presets/platform.mjs +0 -14
  311. package/dist/_chunks/_presets/render.mjs +0 -14
  312. package/dist/_chunks/_presets/standard.mjs +0 -23
  313. package/dist/_chunks/_presets/stormkit.mjs +0 -18
  314. package/dist/_chunks/_presets/vercel.mjs +0 -375
  315. package/dist/_chunks/_presets/winterjs.mjs +0 -22
  316. package/dist/_chunks/_presets/zeabur.mjs +0 -69
  317. package/dist/_chunks/_presets/zerops.mjs +0 -27
  318. package/dist/_chunks/app.mjs +0 -600
  319. package/dist/_chunks/builder.mjs +0 -648
  320. package/dist/_chunks/server.mjs +0 -256
  321. package/dist/_cli/build.mjs +0 -49
  322. package/dist/_cli/common.mjs +0 -13
  323. package/dist/_cli/dev.mjs +0 -121
  324. package/dist/_cli/index.mjs +0 -16
  325. package/dist/_cli/list.mjs +0 -33
  326. package/dist/_cli/prepare.mjs +0 -23
  327. package/dist/_cli/run.mjs +0 -59
  328. package/dist/presets/cloudflare/runtime/shims/workers.dev.d.mts +0 -21
  329. package/dist/runtime/internal/empty.d.mts +0 -0
  330. package/dist/runtime/internal/vite/dev-entry.d.mts +0 -1
  331. package/dist/runtime/internal/vite/dev-worker.d.mts +0 -1
  332. package/dist/runtime/internal/vite/prod-setup.d.mts +0 -4
  333. package/dist/runtime/internal/vite/ssr-renderer.d.mts +0 -4
  334. /package/lib/{indexd.mts → index.d.mts} +0 -0
@@ -1,1022 +0,0 @@
1
- import { r as requireHttpErrors } from './http-errors.mjs';
2
- import { r as requireSrc } from './debug.mjs';
3
- import { r as requireEncodeurl } from './encodeurl.mjs';
4
- import { r as requireEscapeHtml } from './escape-html.mjs';
5
- import { r as requireEtag } from './etag.mjs';
6
- import { r as requireFresh } from './fresh.mjs';
7
- import V__default from 'fs';
8
- import { r as requireMimeTypes } from './mime-types.mjs';
9
- import { r as requireMs } from './ms.mjs';
10
- import { r as requireOnFinished } from './on-finished.mjs';
11
- import { r as requireRangeParser } from './range-parser.mjs';
12
- import sysPath__default from 'path';
13
- import { a as requireStatuses } from './statuses.mjs';
14
- import ot from 'stream';
15
- import require$$1 from 'util';
16
-
17
- /*!
18
- * send
19
- * Copyright(c) 2012 TJ Holowaychuk
20
- * Copyright(c) 2014-2022 Douglas Christopher Wilson
21
- * MIT Licensed
22
- */
23
-
24
- var send_1;
25
- var hasRequiredSend;
26
-
27
- function requireSend () {
28
- if (hasRequiredSend) return send_1;
29
- hasRequiredSend = 1;
30
-
31
- /**
32
- * Module dependencies.
33
- * @private
34
- */
35
-
36
- var createError = requireHttpErrors();
37
- var debug = requireSrc()('send');
38
- var encodeUrl = requireEncodeurl();
39
- var escapeHtml = requireEscapeHtml();
40
- var etag = requireEtag();
41
- var fresh = requireFresh();
42
- var fs = V__default;
43
- var mime = requireMimeTypes();
44
- var ms = requireMs();
45
- var onFinished = requireOnFinished();
46
- var parseRange = requireRangeParser();
47
- var path = sysPath__default;
48
- var statuses = requireStatuses();
49
- var Stream = ot;
50
- var util = require$$1;
51
-
52
- /**
53
- * Path function references.
54
- * @private
55
- */
56
-
57
- var extname = path.extname;
58
- var join = path.join;
59
- var normalize = path.normalize;
60
- var resolve = path.resolve;
61
- var sep = path.sep;
62
-
63
- /**
64
- * Regular expression for identifying a bytes Range header.
65
- * @private
66
- */
67
-
68
- var BYTES_RANGE_REGEXP = /^ *bytes=/;
69
-
70
- /**
71
- * Maximum value allowed for the max age.
72
- * @private
73
- */
74
-
75
- var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000; // 1 year
76
-
77
- /**
78
- * Regular expression to match a path with a directory up component.
79
- * @private
80
- */
81
-
82
- var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/;
83
-
84
- /**
85
- * Module exports.
86
- * @public
87
- */
88
-
89
- send_1 = send;
90
-
91
- /**
92
- * Return a `SendStream` for `req` and `path`.
93
- *
94
- * @param {object} req
95
- * @param {string} path
96
- * @param {object} [options]
97
- * @return {SendStream}
98
- * @public
99
- */
100
-
101
- function send (req, path, options) {
102
- return new SendStream(req, path, options)
103
- }
104
-
105
- /**
106
- * Initialize a `SendStream` with the given `path`.
107
- *
108
- * @param {Request} req
109
- * @param {String} path
110
- * @param {object} [options]
111
- * @private
112
- */
113
-
114
- function SendStream (req, path, options) {
115
- Stream.call(this);
116
-
117
- var opts = options || {};
118
-
119
- this.options = opts;
120
- this.path = path;
121
- this.req = req;
122
-
123
- this._acceptRanges = opts.acceptRanges !== undefined
124
- ? Boolean(opts.acceptRanges)
125
- : true;
126
-
127
- this._cacheControl = opts.cacheControl !== undefined
128
- ? Boolean(opts.cacheControl)
129
- : true;
130
-
131
- this._etag = opts.etag !== undefined
132
- ? Boolean(opts.etag)
133
- : true;
134
-
135
- this._dotfiles = opts.dotfiles !== undefined
136
- ? opts.dotfiles
137
- : 'ignore';
138
-
139
- if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {
140
- throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"')
141
- }
142
-
143
- this._extensions = opts.extensions !== undefined
144
- ? normalizeList(opts.extensions, 'extensions option')
145
- : [];
146
-
147
- this._immutable = opts.immutable !== undefined
148
- ? Boolean(opts.immutable)
149
- : false;
150
-
151
- this._index = opts.index !== undefined
152
- ? normalizeList(opts.index, 'index option')
153
- : ['index.html'];
154
-
155
- this._lastModified = opts.lastModified !== undefined
156
- ? Boolean(opts.lastModified)
157
- : true;
158
-
159
- this._maxage = opts.maxAge || opts.maxage;
160
- this._maxage = typeof this._maxage === 'string'
161
- ? ms(this._maxage)
162
- : Number(this._maxage);
163
- this._maxage = !isNaN(this._maxage)
164
- ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)
165
- : 0;
166
-
167
- this._root = opts.root
168
- ? resolve(opts.root)
169
- : null;
170
- }
171
-
172
- /**
173
- * Inherits from `Stream`.
174
- */
175
-
176
- util.inherits(SendStream, Stream);
177
-
178
- /**
179
- * Emit error with `status`.
180
- *
181
- * @param {number} status
182
- * @param {Error} [err]
183
- * @private
184
- */
185
-
186
- SendStream.prototype.error = function error (status, err) {
187
- // emit if listeners instead of responding
188
- if (hasListeners(this, 'error')) {
189
- return this.emit('error', createHttpError(status, err))
190
- }
191
-
192
- var res = this.res;
193
- var msg = statuses.message[status] || String(status);
194
- var doc = createHtmlDocument('Error', escapeHtml(msg));
195
-
196
- // clear existing headers
197
- clearHeaders(res);
198
-
199
- // add error headers
200
- if (err && err.headers) {
201
- setHeaders(res, err.headers);
202
- }
203
-
204
- // send basic response
205
- res.statusCode = status;
206
- res.setHeader('Content-Type', 'text/html; charset=UTF-8');
207
- res.setHeader('Content-Length', Buffer.byteLength(doc));
208
- res.setHeader('Content-Security-Policy', "default-src 'none'");
209
- res.setHeader('X-Content-Type-Options', 'nosniff');
210
- res.end(doc);
211
- };
212
-
213
- /**
214
- * Check if the pathname ends with "/".
215
- *
216
- * @return {boolean}
217
- * @private
218
- */
219
-
220
- SendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {
221
- return this.path[this.path.length - 1] === '/'
222
- };
223
-
224
- /**
225
- * Check if this is a conditional GET request.
226
- *
227
- * @return {Boolean}
228
- * @api private
229
- */
230
-
231
- SendStream.prototype.isConditionalGET = function isConditionalGET () {
232
- return this.req.headers['if-match'] ||
233
- this.req.headers['if-unmodified-since'] ||
234
- this.req.headers['if-none-match'] ||
235
- this.req.headers['if-modified-since']
236
- };
237
-
238
- /**
239
- * Check if the request preconditions failed.
240
- *
241
- * @return {boolean}
242
- * @private
243
- */
244
-
245
- SendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {
246
- var req = this.req;
247
- var res = this.res;
248
-
249
- // if-match
250
- var match = req.headers['if-match'];
251
- if (match) {
252
- var etag = res.getHeader('ETag');
253
- return !etag || (match !== '*' && parseTokenList(match).every(function (match) {
254
- return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag
255
- }))
256
- }
257
-
258
- // if-unmodified-since
259
- var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since']);
260
- if (!isNaN(unmodifiedSince)) {
261
- var lastModified = parseHttpDate(res.getHeader('Last-Modified'));
262
- return isNaN(lastModified) || lastModified > unmodifiedSince
263
- }
264
-
265
- return false
266
- };
267
-
268
- /**
269
- * Strip various content header fields for a change in entity.
270
- *
271
- * @private
272
- */
273
-
274
- SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {
275
- var res = this.res;
276
-
277
- res.removeHeader('Content-Encoding');
278
- res.removeHeader('Content-Language');
279
- res.removeHeader('Content-Length');
280
- res.removeHeader('Content-Range');
281
- res.removeHeader('Content-Type');
282
- };
283
-
284
- /**
285
- * Respond with 304 not modified.
286
- *
287
- * @api private
288
- */
289
-
290
- SendStream.prototype.notModified = function notModified () {
291
- var res = this.res;
292
- debug('not modified');
293
- this.removeContentHeaderFields();
294
- res.statusCode = 304;
295
- res.end();
296
- };
297
-
298
- /**
299
- * Raise error that headers already sent.
300
- *
301
- * @api private
302
- */
303
-
304
- SendStream.prototype.headersAlreadySent = function headersAlreadySent () {
305
- var err = new Error('Can\'t set headers after they are sent.');
306
- debug('headers already sent');
307
- this.error(500, err);
308
- };
309
-
310
- /**
311
- * Check if the request is cacheable, aka
312
- * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).
313
- *
314
- * @return {Boolean}
315
- * @api private
316
- */
317
-
318
- SendStream.prototype.isCachable = function isCachable () {
319
- var statusCode = this.res.statusCode;
320
- return (statusCode >= 200 && statusCode < 300) ||
321
- statusCode === 304
322
- };
323
-
324
- /**
325
- * Handle stat() error.
326
- *
327
- * @param {Error} error
328
- * @private
329
- */
330
-
331
- SendStream.prototype.onStatError = function onStatError (error) {
332
- switch (error.code) {
333
- case 'ENAMETOOLONG':
334
- case 'ENOENT':
335
- case 'ENOTDIR':
336
- this.error(404, error);
337
- break
338
- default:
339
- this.error(500, error);
340
- break
341
- }
342
- };
343
-
344
- /**
345
- * Check if the cache is fresh.
346
- *
347
- * @return {Boolean}
348
- * @api private
349
- */
350
-
351
- SendStream.prototype.isFresh = function isFresh () {
352
- return fresh(this.req.headers, {
353
- etag: this.res.getHeader('ETag'),
354
- 'last-modified': this.res.getHeader('Last-Modified')
355
- })
356
- };
357
-
358
- /**
359
- * Check if the range is fresh.
360
- *
361
- * @return {Boolean}
362
- * @api private
363
- */
364
-
365
- SendStream.prototype.isRangeFresh = function isRangeFresh () {
366
- var ifRange = this.req.headers['if-range'];
367
-
368
- if (!ifRange) {
369
- return true
370
- }
371
-
372
- // if-range as etag
373
- if (ifRange.indexOf('"') !== -1) {
374
- var etag = this.res.getHeader('ETag');
375
- return Boolean(etag && ifRange.indexOf(etag) !== -1)
376
- }
377
-
378
- // if-range as modified date
379
- var lastModified = this.res.getHeader('Last-Modified');
380
- return parseHttpDate(lastModified) <= parseHttpDate(ifRange)
381
- };
382
-
383
- /**
384
- * Redirect to path.
385
- *
386
- * @param {string} path
387
- * @private
388
- */
389
-
390
- SendStream.prototype.redirect = function redirect (path) {
391
- var res = this.res;
392
-
393
- if (hasListeners(this, 'directory')) {
394
- this.emit('directory', res, path);
395
- return
396
- }
397
-
398
- if (this.hasTrailingSlash()) {
399
- this.error(403);
400
- return
401
- }
402
-
403
- var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'));
404
- var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc));
405
-
406
- // redirect
407
- res.statusCode = 301;
408
- res.setHeader('Content-Type', 'text/html; charset=UTF-8');
409
- res.setHeader('Content-Length', Buffer.byteLength(doc));
410
- res.setHeader('Content-Security-Policy', "default-src 'none'");
411
- res.setHeader('X-Content-Type-Options', 'nosniff');
412
- res.setHeader('Location', loc);
413
- res.end(doc);
414
- };
415
-
416
- /**
417
- * Pipe to `res.
418
- *
419
- * @param {Stream} res
420
- * @return {Stream} res
421
- * @api public
422
- */
423
-
424
- SendStream.prototype.pipe = function pipe (res) {
425
- // root path
426
- var root = this._root;
427
-
428
- // references
429
- this.res = res;
430
-
431
- // decode the path
432
- var path = decode(this.path);
433
- if (path === -1) {
434
- this.error(400);
435
- return res
436
- }
437
-
438
- // null byte(s)
439
- if (~path.indexOf('\0')) {
440
- this.error(400);
441
- return res
442
- }
443
-
444
- var parts;
445
- if (root !== null) {
446
- // normalize
447
- if (path) {
448
- path = normalize('.' + sep + path);
449
- }
450
-
451
- // malicious path
452
- if (UP_PATH_REGEXP.test(path)) {
453
- debug('malicious path "%s"', path);
454
- this.error(403);
455
- return res
456
- }
457
-
458
- // explode path parts
459
- parts = path.split(sep);
460
-
461
- // join / normalize from optional root dir
462
- path = normalize(join(root, path));
463
- } else {
464
- // ".." is malicious without "root"
465
- if (UP_PATH_REGEXP.test(path)) {
466
- debug('malicious path "%s"', path);
467
- this.error(403);
468
- return res
469
- }
470
-
471
- // explode path parts
472
- parts = normalize(path).split(sep);
473
-
474
- // resolve the path
475
- path = resolve(path);
476
- }
477
-
478
- // dotfile handling
479
- if (containsDotFile(parts)) {
480
- debug('%s dotfile "%s"', this._dotfiles, path);
481
- switch (this._dotfiles) {
482
- case 'allow':
483
- break
484
- case 'deny':
485
- this.error(403);
486
- return res
487
- case 'ignore':
488
- default:
489
- this.error(404);
490
- return res
491
- }
492
- }
493
-
494
- // index file support
495
- if (this._index.length && this.hasTrailingSlash()) {
496
- this.sendIndex(path);
497
- return res
498
- }
499
-
500
- this.sendFile(path);
501
- return res
502
- };
503
-
504
- /**
505
- * Transfer `path`.
506
- *
507
- * @param {String} path
508
- * @api public
509
- */
510
-
511
- SendStream.prototype.send = function send (path, stat) {
512
- var len = stat.size;
513
- var options = this.options;
514
- var opts = {};
515
- var res = this.res;
516
- var req = this.req;
517
- var ranges = req.headers.range;
518
- var offset = options.start || 0;
519
-
520
- if (res.headersSent) {
521
- // impossible to send now
522
- this.headersAlreadySent();
523
- return
524
- }
525
-
526
- debug('pipe "%s"', path);
527
-
528
- // set header fields
529
- this.setHeader(path, stat);
530
-
531
- // set content-type
532
- this.type(path);
533
-
534
- // conditional GET support
535
- if (this.isConditionalGET()) {
536
- if (this.isPreconditionFailure()) {
537
- this.error(412);
538
- return
539
- }
540
-
541
- if (this.isCachable() && this.isFresh()) {
542
- this.notModified();
543
- return
544
- }
545
- }
546
-
547
- // adjust len to start/end options
548
- len = Math.max(0, len - offset);
549
- if (options.end !== undefined) {
550
- var bytes = options.end - offset + 1;
551
- if (len > bytes) len = bytes;
552
- }
553
-
554
- // Range support
555
- if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {
556
- // parse
557
- ranges = parseRange(len, ranges, {
558
- combine: true
559
- });
560
-
561
- // If-Range support
562
- if (!this.isRangeFresh()) {
563
- debug('range stale');
564
- ranges = -2;
565
- }
566
-
567
- // unsatisfiable
568
- if (ranges === -1) {
569
- debug('range unsatisfiable');
570
-
571
- // Content-Range
572
- res.setHeader('Content-Range', contentRange('bytes', len));
573
-
574
- // 416 Requested Range Not Satisfiable
575
- return this.error(416, {
576
- headers: { 'Content-Range': res.getHeader('Content-Range') }
577
- })
578
- }
579
-
580
- // valid (syntactically invalid/multiple ranges are treated as a regular response)
581
- if (ranges !== -2 && ranges.length === 1) {
582
- debug('range %j', ranges);
583
-
584
- // Content-Range
585
- res.statusCode = 206;
586
- res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]));
587
-
588
- // adjust for requested range
589
- offset += ranges[0].start;
590
- len = ranges[0].end - ranges[0].start + 1;
591
- }
592
- }
593
-
594
- // clone options
595
- for (var prop in options) {
596
- opts[prop] = options[prop];
597
- }
598
-
599
- // set read options
600
- opts.start = offset;
601
- opts.end = Math.max(offset, offset + len - 1);
602
-
603
- // content-length
604
- res.setHeader('Content-Length', len);
605
-
606
- // HEAD support
607
- if (req.method === 'HEAD') {
608
- res.end();
609
- return
610
- }
611
-
612
- this.stream(path, opts);
613
- };
614
-
615
- /**
616
- * Transfer file for `path`.
617
- *
618
- * @param {String} path
619
- * @api private
620
- */
621
- SendStream.prototype.sendFile = function sendFile (path) {
622
- var i = 0;
623
- var self = this;
624
-
625
- debug('stat "%s"', path);
626
- fs.stat(path, function onstat (err, stat) {
627
- var pathEndsWithSep = path[path.length - 1] === sep;
628
- if (err && err.code === 'ENOENT' && !extname(path) && !pathEndsWithSep) {
629
- // not found, check extensions
630
- return next(err)
631
- }
632
- if (err) return self.onStatError(err)
633
- if (stat.isDirectory()) return self.redirect(path)
634
- if (pathEndsWithSep) return self.error(404)
635
- self.emit('file', path, stat);
636
- self.send(path, stat);
637
- });
638
-
639
- function next (err) {
640
- if (self._extensions.length <= i) {
641
- return err
642
- ? self.onStatError(err)
643
- : self.error(404)
644
- }
645
-
646
- var p = path + '.' + self._extensions[i++];
647
-
648
- debug('stat "%s"', p);
649
- fs.stat(p, function (err, stat) {
650
- if (err) return next(err)
651
- if (stat.isDirectory()) return next()
652
- self.emit('file', p, stat);
653
- self.send(p, stat);
654
- });
655
- }
656
- };
657
-
658
- /**
659
- * Transfer index for `path`.
660
- *
661
- * @param {String} path
662
- * @api private
663
- */
664
- SendStream.prototype.sendIndex = function sendIndex (path) {
665
- var i = -1;
666
- var self = this;
667
-
668
- function next (err) {
669
- if (++i >= self._index.length) {
670
- if (err) return self.onStatError(err)
671
- return self.error(404)
672
- }
673
-
674
- var p = join(path, self._index[i]);
675
-
676
- debug('stat "%s"', p);
677
- fs.stat(p, function (err, stat) {
678
- if (err) return next(err)
679
- if (stat.isDirectory()) return next()
680
- self.emit('file', p, stat);
681
- self.send(p, stat);
682
- });
683
- }
684
-
685
- next();
686
- };
687
-
688
- /**
689
- * Stream `path` to the response.
690
- *
691
- * @param {String} path
692
- * @param {Object} options
693
- * @api private
694
- */
695
-
696
- SendStream.prototype.stream = function stream (path, options) {
697
- var self = this;
698
- var res = this.res;
699
-
700
- // pipe
701
- var stream = fs.createReadStream(path, options);
702
- this.emit('stream', stream);
703
- stream.pipe(res);
704
-
705
- // cleanup
706
- function cleanup () {
707
- stream.destroy();
708
- }
709
-
710
- // response finished, cleanup
711
- onFinished(res, cleanup);
712
-
713
- // error handling
714
- stream.on('error', function onerror (err) {
715
- // clean up stream early
716
- cleanup();
717
-
718
- // error
719
- self.onStatError(err);
720
- });
721
-
722
- // end
723
- stream.on('end', function onend () {
724
- self.emit('end');
725
- });
726
- };
727
-
728
- /**
729
- * Set content-type based on `path`
730
- * if it hasn't been explicitly set.
731
- *
732
- * @param {String} path
733
- * @api private
734
- */
735
-
736
- SendStream.prototype.type = function type (path) {
737
- var res = this.res;
738
-
739
- if (res.getHeader('Content-Type')) return
740
-
741
- var ext = extname(path);
742
- var type = mime.contentType(ext) || 'application/octet-stream';
743
-
744
- debug('content-type %s', type);
745
- res.setHeader('Content-Type', type);
746
- };
747
-
748
- /**
749
- * Set response header fields, most
750
- * fields may be pre-defined.
751
- *
752
- * @param {String} path
753
- * @param {Object} stat
754
- * @api private
755
- */
756
-
757
- SendStream.prototype.setHeader = function setHeader (path, stat) {
758
- var res = this.res;
759
-
760
- this.emit('headers', res, path, stat);
761
-
762
- if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {
763
- debug('accept ranges');
764
- res.setHeader('Accept-Ranges', 'bytes');
765
- }
766
-
767
- if (this._cacheControl && !res.getHeader('Cache-Control')) {
768
- var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000);
769
-
770
- if (this._immutable) {
771
- cacheControl += ', immutable';
772
- }
773
-
774
- debug('cache-control %s', cacheControl);
775
- res.setHeader('Cache-Control', cacheControl);
776
- }
777
-
778
- if (this._lastModified && !res.getHeader('Last-Modified')) {
779
- var modified = stat.mtime.toUTCString();
780
- debug('modified %s', modified);
781
- res.setHeader('Last-Modified', modified);
782
- }
783
-
784
- if (this._etag && !res.getHeader('ETag')) {
785
- var val = etag(stat);
786
- debug('etag %s', val);
787
- res.setHeader('ETag', val);
788
- }
789
- };
790
-
791
- /**
792
- * Clear all headers from a response.
793
- *
794
- * @param {object} res
795
- * @private
796
- */
797
-
798
- function clearHeaders (res) {
799
- for (const header of res.getHeaderNames()) {
800
- res.removeHeader(header);
801
- }
802
- }
803
-
804
- /**
805
- * Collapse all leading slashes into a single slash
806
- *
807
- * @param {string} str
808
- * @private
809
- */
810
- function collapseLeadingSlashes (str) {
811
- for (var i = 0; i < str.length; i++) {
812
- if (str[i] !== '/') {
813
- break
814
- }
815
- }
816
-
817
- return i > 1
818
- ? '/' + str.substr(i)
819
- : str
820
- }
821
-
822
- /**
823
- * Determine if path parts contain a dotfile.
824
- *
825
- * @api private
826
- */
827
-
828
- function containsDotFile (parts) {
829
- for (var i = 0; i < parts.length; i++) {
830
- var part = parts[i];
831
- if (part.length > 1 && part[0] === '.') {
832
- return true
833
- }
834
- }
835
-
836
- return false
837
- }
838
-
839
- /**
840
- * Create a Content-Range header.
841
- *
842
- * @param {string} type
843
- * @param {number} size
844
- * @param {array} [range]
845
- */
846
-
847
- function contentRange (type, size, range) {
848
- return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size
849
- }
850
-
851
- /**
852
- * Create a minimal HTML document.
853
- *
854
- * @param {string} title
855
- * @param {string} body
856
- * @private
857
- */
858
-
859
- function createHtmlDocument (title, body) {
860
- return '<!DOCTYPE html>\n' +
861
- '<html lang="en">\n' +
862
- '<head>\n' +
863
- '<meta charset="utf-8">\n' +
864
- '<title>' + title + '</title>\n' +
865
- '</head>\n' +
866
- '<body>\n' +
867
- '<pre>' + body + '</pre>\n' +
868
- '</body>\n' +
869
- '</html>\n'
870
- }
871
-
872
- /**
873
- * Create a HttpError object from simple arguments.
874
- *
875
- * @param {number} status
876
- * @param {Error|object} err
877
- * @private
878
- */
879
-
880
- function createHttpError (status, err) {
881
- if (!err) {
882
- return createError(status)
883
- }
884
-
885
- return err instanceof Error
886
- ? createError(status, err, { expose: false })
887
- : createError(status, err)
888
- }
889
-
890
- /**
891
- * decodeURIComponent.
892
- *
893
- * Allows V8 to only deoptimize this fn instead of all
894
- * of send().
895
- *
896
- * @param {String} path
897
- * @api private
898
- */
899
-
900
- function decode (path) {
901
- try {
902
- return decodeURIComponent(path)
903
- } catch (err) {
904
- return -1
905
- }
906
- }
907
-
908
- /**
909
- * Determine if emitter has listeners of a given type.
910
- *
911
- * The way to do this check is done three different ways in Node.js >= 0.10
912
- * so this consolidates them into a minimal set using instance methods.
913
- *
914
- * @param {EventEmitter} emitter
915
- * @param {string} type
916
- * @returns {boolean}
917
- * @private
918
- */
919
-
920
- function hasListeners (emitter, type) {
921
- var count = typeof emitter.listenerCount !== 'function'
922
- ? emitter.listeners(type).length
923
- : emitter.listenerCount(type);
924
-
925
- return count > 0
926
- }
927
-
928
- /**
929
- * Normalize the index option into an array.
930
- *
931
- * @param {boolean|string|array} val
932
- * @param {string} name
933
- * @private
934
- */
935
-
936
- function normalizeList (val, name) {
937
- var list = [].concat(val || []);
938
-
939
- for (var i = 0; i < list.length; i++) {
940
- if (typeof list[i] !== 'string') {
941
- throw new TypeError(name + ' must be array of strings or false')
942
- }
943
- }
944
-
945
- return list
946
- }
947
-
948
- /**
949
- * Parse an HTTP Date into a number.
950
- *
951
- * @param {string} date
952
- * @private
953
- */
954
-
955
- function parseHttpDate (date) {
956
- var timestamp = date && Date.parse(date);
957
-
958
- return typeof timestamp === 'number'
959
- ? timestamp
960
- : NaN
961
- }
962
-
963
- /**
964
- * Parse a HTTP token list.
965
- *
966
- * @param {string} str
967
- * @private
968
- */
969
-
970
- function parseTokenList (str) {
971
- var end = 0;
972
- var list = [];
973
- var start = 0;
974
-
975
- // gather tokens
976
- for (var i = 0, len = str.length; i < len; i++) {
977
- switch (str.charCodeAt(i)) {
978
- case 0x20: /* */
979
- if (start === end) {
980
- start = end = i + 1;
981
- }
982
- break
983
- case 0x2c: /* , */
984
- if (start !== end) {
985
- list.push(str.substring(start, end));
986
- }
987
- start = end = i + 1;
988
- break
989
- default:
990
- end = i + 1;
991
- break
992
- }
993
- }
994
-
995
- // final token
996
- if (start !== end) {
997
- list.push(str.substring(start, end));
998
- }
999
-
1000
- return list
1001
- }
1002
-
1003
- /**
1004
- * Set an object of headers on a response.
1005
- *
1006
- * @param {object} res
1007
- * @param {object} headers
1008
- * @private
1009
- */
1010
-
1011
- function setHeaders (res, headers) {
1012
- var keys = Object.keys(headers);
1013
-
1014
- for (var i = 0; i < keys.length; i++) {
1015
- var key = keys[i];
1016
- res.setHeader(key, headers[key]);
1017
- }
1018
- }
1019
- return send_1;
1020
- }
1021
-
1022
- export { requireSend as r };