nitro-nightly 4.0.0-20251030-091344-d4418b98 → 4.0.0-20251030-121649-98b56dfe

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 +747 -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 +56 -52
  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,213 +1,252 @@
1
+ // @ts-nocheck
2
+ // =============================================================================
3
+ // gracefully shuts downs http server
4
+ // can be used with http, express, koa, ...
5
+ // (c) 2023 Sebastian Hildebrandt
6
+ // License: MIT
7
+ // https://github.com/sebhildebrandt/http-graceful-shutdown/blob/master/LICENSE
8
+ // https://github.com/sebhildebrandt/http-graceful-shutdown/blob/master/lib/index.js
9
+ // =============================================================================
1
10
  import http from "node:http";
2
- const debug = (...args) => {
3
- };
11
+ const debug = (...args) => {};
12
+ /**
13
+ * Gracefully shuts down `server` when the process receives
14
+ * the passed signals
15
+ *
16
+ * @param {http.Server} server
17
+ * @param {object} opts
18
+ * signals: string (each signal separated by SPACE)
19
+ * timeout: timeout value for forceful shutdown in ms
20
+ * forceExit: force process.exit() - otherwise just let event loop clear
21
+ * development: boolean value (if true, no graceful shutdown to speed up development
22
+ * preShutdown: optional function. Needs to return a promise. - HTTP sockets are still available and untouched
23
+ * onShutdown: optional function. Needs to return a promise.
24
+ * finally: optional function, handled at the end of the shutdown.
25
+ */
4
26
  function GracefulShutdown(server, opts) {
5
- opts = opts || {};
6
- const options = Object.assign(
7
- {
8
- signals: "SIGINT SIGTERM",
9
- timeout: 3e4,
10
- development: false,
11
- forceExit: true,
12
- onShutdown: (signal) => Promise.resolve(signal),
13
- preShutdown: (signal) => Promise.resolve(signal)
14
- },
15
- opts
16
- );
17
- let isShuttingDown = false;
18
- const connections = {};
19
- let connectionCounter = 0;
20
- const secureConnections = {};
21
- let secureConnectionCounter = 0;
22
- let failed = false;
23
- let finalRun = false;
24
- function onceFactory() {
25
- let called = false;
26
- return (emitter, events, callback) => {
27
- function call() {
28
- if (!called) {
29
- called = true;
30
- return Reflect.apply(callback, this, arguments);
31
- }
32
- }
33
- for (const e of events) {
34
- emitter.on(e, call);
35
- }
36
- };
37
- }
38
- const signals = options.signals.split(" ").map((s) => s.trim()).filter((s) => s.length > 0);
39
- const once = onceFactory();
40
- once(process, signals, (signal) => {
41
- debug("received shut down signal", signal);
42
- shutdown(signal).then(() => {
43
- if (options.forceExit) {
44
- process.exit(failed ? 1 : 0);
45
- }
46
- }).catch((error) => {
47
- debug("server shut down error occurred", error);
48
- process.exit(1);
49
- });
50
- });
51
- function isFunction(functionToCheck) {
52
- const getType = Object.prototype.toString.call(functionToCheck);
53
- return /^\[object\s([A-Za-z]+)?Function]$/.test(getType);
54
- }
55
- function destroy(socket, force = false) {
56
- if (socket._isIdle && isShuttingDown || force) {
57
- socket.destroy();
58
- if (socket.server instanceof http.Server) {
59
- delete connections[socket._connectionId];
60
- } else {
61
- delete secureConnections[socket._connectionId];
62
- }
63
- }
64
- }
65
- function destroyAllConnections(force = false) {
66
- debug("Destroy Connections : " + (force ? "forced close" : "close"));
67
- let counter = 0;
68
- let secureCounter = 0;
69
- for (const key of Object.keys(connections)) {
70
- const socket = connections[key];
71
- const serverResponse = socket._httpMessage;
72
- if (serverResponse && !force) {
73
- if (!serverResponse.headersSent) {
74
- serverResponse.setHeader("connection", "close");
75
- }
76
- } else {
77
- counter++;
78
- destroy(socket);
79
- }
80
- }
81
- debug("Connections destroyed : " + counter);
82
- debug("Connection Counter : " + connectionCounter);
83
- for (const key of Object.keys(secureConnections)) {
84
- const socket = secureConnections[key];
85
- const serverResponse = socket._httpMessage;
86
- if (serverResponse && !force) {
87
- if (!serverResponse.headersSent) {
88
- serverResponse.setHeader("connection", "close");
89
- }
90
- } else {
91
- secureCounter++;
92
- destroy(socket);
93
- }
94
- }
95
- debug("Secure Connections destroyed : " + secureCounter);
96
- debug("Secure Connection Counter : " + secureConnectionCounter);
97
- }
98
- server.on("request", (req, res) => {
99
- req.socket._isIdle = false;
100
- if (isShuttingDown && !res.headersSent) {
101
- res.setHeader("connection", "close");
102
- }
103
- res.on("finish", () => {
104
- req.socket._isIdle = true;
105
- destroy(req.socket);
106
- });
107
- });
108
- server.on("connection", (socket) => {
109
- if (isShuttingDown) {
110
- socket.destroy();
111
- } else {
112
- const id = connectionCounter++;
113
- socket._isIdle = true;
114
- socket._connectionId = id;
115
- connections[id] = socket;
116
- socket.once("close", () => {
117
- delete connections[socket._connectionId];
118
- });
119
- }
120
- });
121
- server.on("secureConnection", (socket) => {
122
- if (isShuttingDown) {
123
- socket.destroy();
124
- } else {
125
- const id = secureConnectionCounter++;
126
- socket._isIdle = true;
127
- socket._connectionId = id;
128
- secureConnections[id] = socket;
129
- socket.once("close", () => {
130
- delete secureConnections[socket._connectionId];
131
- });
132
- }
133
- });
134
- process.on("close", () => {
135
- debug("closed");
136
- });
137
- function shutdown(sig) {
138
- function cleanupHttp() {
139
- destroyAllConnections();
140
- debug("Close http server");
141
- return new Promise((resolve, reject) => {
142
- server.close((err) => {
143
- if (err) {
144
- return reject(err);
145
- }
146
- return resolve(true);
147
- });
148
- });
149
- }
150
- debug("shutdown signal - " + sig);
151
- if (options.development) {
152
- debug("DEV-Mode - immediate forceful shutdown");
153
- return process.exit(0);
154
- }
155
- function finalHandler() {
156
- if (!finalRun) {
157
- finalRun = true;
158
- if (options.finally && isFunction(options.finally)) {
159
- debug("executing finally()");
160
- options.finally();
161
- }
162
- }
163
- return Promise.resolve();
164
- }
165
- function waitForReadyToShutDown(totalNumInterval) {
166
- debug(`waitForReadyToShutDown... ${totalNumInterval}`);
167
- if (totalNumInterval === 0) {
168
- debug(
169
- `Could not close connections in time (${options.timeout}ms), will forcefully shut down`
170
- );
171
- return Promise.resolve(true);
172
- }
173
- const allConnectionsClosed = Object.keys(connections).length === 0 && Object.keys(secureConnections).length === 0;
174
- if (allConnectionsClosed) {
175
- debug("All connections closed. Continue to shutting down");
176
- return Promise.resolve(false);
177
- }
178
- debug("Schedule the next waitForReadyToShutdown");
179
- return new Promise((resolve) => {
180
- setTimeout(() => {
181
- resolve(waitForReadyToShutDown(totalNumInterval - 1));
182
- }, 250);
183
- });
184
- }
185
- if (isShuttingDown) {
186
- return Promise.resolve();
187
- }
188
- debug("shutting down");
189
- return options.preShutdown(sig).then(() => {
190
- isShuttingDown = true;
191
- cleanupHttp();
192
- }).then(() => {
193
- const pollIterations = options.timeout ? Math.round(options.timeout / 250) : 0;
194
- return waitForReadyToShutDown(pollIterations);
195
- }).then((force) => {
196
- debug("Do onShutdown now");
197
- if (force) {
198
- destroyAllConnections(force);
199
- }
200
- return options.onShutdown(sig);
201
- }).then(finalHandler).catch((error) => {
202
- const errString = typeof error === "string" ? error : JSON.stringify(error);
203
- debug(errString);
204
- failed = true;
205
- throw errString;
206
- });
207
- }
208
- function shutdownManual() {
209
- return shutdown("manual");
210
- }
211
- return shutdownManual;
27
+ // option handling
28
+ // ----------------------------------
29
+ opts = opts || {};
30
+ // merge opts with default options
31
+ const options = Object.assign({
32
+ signals: "SIGINT SIGTERM",
33
+ timeout: 3e4,
34
+ development: false,
35
+ forceExit: true,
36
+ onShutdown: (signal) => Promise.resolve(signal),
37
+ preShutdown: (signal) => Promise.resolve(signal)
38
+ }, opts);
39
+ let isShuttingDown = false;
40
+ const connections = {};
41
+ let connectionCounter = 0;
42
+ const secureConnections = {};
43
+ let secureConnectionCounter = 0;
44
+ let failed = false;
45
+ let finalRun = false;
46
+ function onceFactory() {
47
+ let called = false;
48
+ return (emitter, events, callback) => {
49
+ function call() {
50
+ if (!called) {
51
+ called = true;
52
+ // eslint-disable-next-line prefer-rest-params
53
+ return Reflect.apply(callback, this, arguments);
54
+ }
55
+ }
56
+ for (const e of events) {
57
+ emitter.on(e, call);
58
+ }
59
+ };
60
+ }
61
+ const signals = options.signals.split(" ").map((s) => s.trim()).filter((s) => s.length > 0);
62
+ const once = onceFactory();
63
+ once(process, signals, (signal) => {
64
+ debug("received shut down signal", signal);
65
+ shutdown(signal).then(() => {
66
+ if (options.forceExit) {
67
+ // eslint-disable-next-line unicorn/no-process-exit
68
+ process.exit(failed ? 1 : 0);
69
+ }
70
+ }).catch((error) => {
71
+ debug("server shut down error occurred", error);
72
+ // eslint-disable-next-line unicorn/no-process-exit
73
+ process.exit(1);
74
+ });
75
+ });
76
+ // helper function
77
+ // ----------------------------------
78
+ function isFunction(functionToCheck) {
79
+ const getType = Object.prototype.toString.call(functionToCheck);
80
+ return /^\[object\s([A-Za-z]+)?Function]$/.test(getType);
81
+ }
82
+ function destroy(socket, force = false) {
83
+ if (socket._isIdle && isShuttingDown || force) {
84
+ socket.destroy();
85
+ if (socket.server instanceof http.Server) {
86
+ delete connections[socket._connectionId];
87
+ } else {
88
+ delete secureConnections[socket._connectionId];
89
+ }
90
+ }
91
+ }
92
+ function destroyAllConnections(force = false) {
93
+ // destroy empty and idle connections / all connections (if force = true)
94
+ debug("Destroy Connections : " + (force ? "forced close" : "close"));
95
+ let counter = 0;
96
+ let secureCounter = 0;
97
+ for (const key of Object.keys(connections)) {
98
+ const socket = connections[key];
99
+ const serverResponse = socket._httpMessage;
100
+ // send connection close header to open connections
101
+ if (serverResponse && !force) {
102
+ if (!serverResponse.headersSent) {
103
+ serverResponse.setHeader("connection", "close");
104
+ }
105
+ } else {
106
+ counter++;
107
+ destroy(socket);
108
+ }
109
+ }
110
+ debug("Connections destroyed : " + counter);
111
+ debug("Connection Counter : " + connectionCounter);
112
+ for (const key of Object.keys(secureConnections)) {
113
+ const socket = secureConnections[key];
114
+ const serverResponse = socket._httpMessage;
115
+ // send connection close header to open connections
116
+ if (serverResponse && !force) {
117
+ if (!serverResponse.headersSent) {
118
+ serverResponse.setHeader("connection", "close");
119
+ }
120
+ } else {
121
+ secureCounter++;
122
+ destroy(socket);
123
+ }
124
+ }
125
+ debug("Secure Connections destroyed : " + secureCounter);
126
+ debug("Secure Connection Counter : " + secureConnectionCounter);
127
+ }
128
+ // set up server/process events
129
+ // ----------------------------------
130
+ server.on("request", (req, res) => {
131
+ req.socket._isIdle = false;
132
+ if (isShuttingDown && !res.headersSent) {
133
+ res.setHeader("connection", "close");
134
+ }
135
+ res.on("finish", () => {
136
+ req.socket._isIdle = true;
137
+ destroy(req.socket);
138
+ });
139
+ });
140
+ server.on("connection", (socket) => {
141
+ if (isShuttingDown) {
142
+ socket.destroy();
143
+ } else {
144
+ const id = connectionCounter++;
145
+ socket._isIdle = true;
146
+ socket._connectionId = id;
147
+ connections[id] = socket;
148
+ socket.once("close", () => {
149
+ delete connections[socket._connectionId];
150
+ });
151
+ }
152
+ });
153
+ server.on("secureConnection", (socket) => {
154
+ if (isShuttingDown) {
155
+ socket.destroy();
156
+ } else {
157
+ const id = secureConnectionCounter++;
158
+ socket._isIdle = true;
159
+ socket._connectionId = id;
160
+ secureConnections[id] = socket;
161
+ socket.once("close", () => {
162
+ delete secureConnections[socket._connectionId];
163
+ });
164
+ }
165
+ });
166
+ process.on("close", () => {
167
+ debug("closed");
168
+ });
169
+ // shutdown event (per signal)
170
+ // ----------------------------------
171
+ function shutdown(sig) {
172
+ function cleanupHttp() {
173
+ destroyAllConnections();
174
+ debug("Close http server");
175
+ return new Promise((resolve, reject) => {
176
+ server.close((err) => {
177
+ if (err) {
178
+ return reject(err);
179
+ }
180
+ return resolve(true);
181
+ });
182
+ });
183
+ }
184
+ debug("shutdown signal - " + sig);
185
+ // Don't bother with graceful shutdown on development to speed up round trip
186
+ if (options.development) {
187
+ debug("DEV-Mode - immediate forceful shutdown");
188
+ // eslint-disable-next-line unicorn/no-process-exit
189
+ return process.exit(0);
190
+ }
191
+ function finalHandler() {
192
+ if (!finalRun) {
193
+ finalRun = true;
194
+ if (options.finally && isFunction(options.finally)) {
195
+ debug("executing finally()");
196
+ options.finally();
197
+ }
198
+ }
199
+ return Promise.resolve();
200
+ }
201
+ // returns true if should force shut down. returns false for shut down without force
202
+ function waitForReadyToShutDown(totalNumInterval) {
203
+ debug(`waitForReadyToShutDown... ${totalNumInterval}`);
204
+ if (totalNumInterval === 0) {
205
+ // timeout reached
206
+ debug(`Could not close connections in time (${options.timeout}ms), will forcefully shut down`);
207
+ return Promise.resolve(true);
208
+ }
209
+ // test all connections closed already?
210
+ const allConnectionsClosed = Object.keys(connections).length === 0 && Object.keys(secureConnections).length === 0;
211
+ if (allConnectionsClosed) {
212
+ debug("All connections closed. Continue to shutting down");
213
+ return Promise.resolve(false);
214
+ }
215
+ debug("Schedule the next waitForReadyToShutdown");
216
+ return new Promise((resolve) => {
217
+ setTimeout(() => {
218
+ resolve(waitForReadyToShutDown(totalNumInterval - 1));
219
+ }, 250);
220
+ });
221
+ }
222
+ if (isShuttingDown) {
223
+ return Promise.resolve();
224
+ }
225
+ debug("shutting down");
226
+ return options.preShutdown(sig).then(() => {
227
+ isShuttingDown = true;
228
+ cleanupHttp();
229
+ }).then(() => {
230
+ const pollIterations = options.timeout ? Math.round(options.timeout / 250) : 0;
231
+ return waitForReadyToShutDown(pollIterations);
232
+ }).then((force) => {
233
+ debug("Do onShutdown now");
234
+ // if after waiting for connections to drain within timeout period
235
+ // or if timeout has reached, we forcefully disconnect all sockets
236
+ if (force) {
237
+ destroyAllConnections(force);
238
+ }
239
+ return options.onShutdown(sig);
240
+ }).then(finalHandler).catch((error) => {
241
+ const errString = typeof error === "string" ? error : JSON.stringify(error);
242
+ debug(errString);
243
+ failed = true;
244
+ throw errString;
245
+ });
246
+ }
247
+ function shutdownManual() {
248
+ return shutdown("manual");
249
+ }
250
+ return shutdownManual;
212
251
  }
213
252
  export default GracefulShutdown;
@@ -1,2 +1,2 @@
1
1
  import type { NitroRouteMeta } from "nitro/types";
2
- export declare function defineRouteMeta(meta: NitroRouteMeta): NitroRouteMeta;
2
+ export declare function defineRouteMeta(meta: NitroRouteMeta);
@@ -1,3 +1,3 @@
1
1
  export function defineRouteMeta(meta) {
2
- return meta;
2
+ return meta;
3
3
  }
@@ -1,3 +1,3 @@
1
1
  import type { NitroAppPlugin } from "nitro/types";
2
- export declare function defineNitroPlugin(def: NitroAppPlugin): NitroAppPlugin;
3
- export declare const nitroPlugin: typeof defineNitroPlugin;
2
+ export declare function defineNitroPlugin(def: NitroAppPlugin);
3
+ export declare const nitroPlugin: unknown;
@@ -1,4 +1,4 @@
1
1
  export function defineNitroPlugin(def) {
2
- return def;
2
+ return def;
3
3
  }
4
4
  export const nitroPlugin = defineNitroPlugin;
@@ -2,35 +2,43 @@ import { defineHandler } from "h3";
2
2
  import { useNitroHooks } from "./app.mjs";
3
3
  import { useRuntimeConfig } from "./runtime-config.mjs";
4
4
  export function defineRenderHandler(render) {
5
- const runtimeConfig = useRuntimeConfig();
6
- return defineHandler(async (event) => {
7
- const nitroHooks = useNitroHooks();
8
- const ctx = { event, render, response: void 0 };
9
- await nitroHooks.callHook("render:before", ctx);
10
- if (!ctx.response) {
11
- if (event.url.pathname === `${runtimeConfig.app.baseURL}favicon.ico`) {
12
- event.res.headers.set("Content-Type", "image/x-icon");
13
- return "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
14
- }
15
- ctx.response = await ctx.render(event);
16
- if (!ctx.response) {
17
- const _currentStatus = event.res.status;
18
- event.res.statusText = String(
19
- _currentStatus === 200 ? 500 : _currentStatus
20
- );
21
- return "No response returned from render handler: " + event.url.pathname;
22
- }
23
- }
24
- await nitroHooks.callHook("render:response", ctx.response, ctx);
25
- if (ctx.response.headers) {
26
- for (const [key, value] of Object.entries(ctx.response.headers)) {
27
- event.res.headers.set(key, value);
28
- }
29
- }
30
- if (ctx.response.status || ctx.response.statusText) {
31
- event.res.status = ctx.response.status;
32
- event.res.statusText = ctx.response.statusText;
33
- }
34
- return ctx.response.body;
35
- });
5
+ const runtimeConfig = useRuntimeConfig();
6
+ return defineHandler(async (event) => {
7
+ const nitroHooks = useNitroHooks();
8
+ // Create shared context for hooks
9
+ const ctx = {
10
+ event,
11
+ render,
12
+ response: undefined
13
+ };
14
+ // Call initial hook to prepare and optionally custom render
15
+ await nitroHooks.callHook("render:before", ctx);
16
+ if (!ctx.response) {
17
+ // TODO: Use serve-placeholder
18
+ if (event.url.pathname === `${runtimeConfig.app.baseURL}favicon.ico`) {
19
+ event.res.headers.set("Content-Type", "image/x-icon");
20
+ return "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
21
+ }
22
+ ctx.response = await ctx.render(event);
23
+ if (!ctx.response) {
24
+ const _currentStatus = event.res.status;
25
+ event.res.statusText = String(_currentStatus === 200 ? 500 : _currentStatus);
26
+ return "No response returned from render handler: " + event.url.pathname;
27
+ }
28
+ }
29
+ // Allow modifying response
30
+ await nitroHooks.callHook("render:response", ctx.response, ctx);
31
+ // Send headers
32
+ if (ctx.response.headers) {
33
+ for (const [key, value] of Object.entries(ctx.response.headers)) {
34
+ event.res.headers.set(key, value);
35
+ }
36
+ }
37
+ if (ctx.response.status || ctx.response.statusText) {
38
+ event.res.status = ctx.response.status;
39
+ event.res.statusText = ctx.response.statusText;
40
+ }
41
+ // Send response body
42
+ return ctx.response.body;
43
+ });
36
44
  }
@@ -1,8 +1,8 @@
1
- import type { Middleware } from "h3";
2
- import type { MatchedRouteRule, NitroRouteRules } from "nitro/types";
3
- type RouteRuleCtor<T extends keyof NitroRouteRules> = (m: MatchedRouteRule<T>) => Middleware;
4
- export declare const headers: RouteRuleCtor<"headers">;
5
- export declare const redirect: RouteRuleCtor<"redirect">;
6
- export declare const proxy: RouteRuleCtor<"proxy">;
7
- export declare const cache: RouteRuleCtor<"cache">;
8
- export {};
1
+ // Headers route rule
2
+ export declare const headers: unknown;
3
+ // Redirect route rule
4
+ export declare const redirect: unknown;
5
+ // Proxy route rule
6
+ export declare const proxy: unknown;
7
+ // Cache route rule
8
+ export declare const cache: unknown;