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.
- package/dist/_build/common.mjs +763 -0
- package/dist/_build/rolldown.mjs +216 -0
- package/dist/_build/rollup.mjs +359 -0
- package/dist/_build/vite.build.mjs +67 -0
- package/dist/_build/vite.plugin.mjs +762 -0
- package/dist/_chunks/B-7HiF0V.mjs +1303 -0
- package/dist/_chunks/B3asVbT4.mjs +151 -0
- package/dist/_chunks/B5ooyfLk.mjs +372 -0
- package/dist/_chunks/DXMHy5ca.mjs +43 -0
- package/dist/_dev.d.mts +12 -0
- package/dist/_dev.mjs +675 -0
- package/dist/_libs/acorn.mjs +5034 -0
- package/dist/_libs/c12.mjs +2798 -0
- package/dist/_libs/chokidar.mjs +1560 -0
- package/dist/_libs/citty.mjs +333 -0
- package/dist/_libs/commondir.mjs +22 -0
- package/dist/_libs/compatx.mjs +46 -0
- package/dist/_libs/confbox.mjs +2920 -0
- package/dist/_libs/debug.mjs +848 -0
- package/dist/_libs/deepmerge.mjs +86 -0
- package/dist/_libs/depd.mjs +314 -0
- package/dist/_libs/dot-prop.mjs +138 -0
- package/dist/_libs/duplexer.mjs +71 -0
- package/dist/_libs/ee-first.mjs +68 -0
- package/dist/_libs/encodeurl.mjs +49 -0
- package/dist/_libs/escape-html.mjs +58 -0
- package/dist/_libs/escape-string-regexp.mjs +8 -0
- package/dist/_libs/estree-walker.mjs +330 -0
- package/dist/_libs/etag.mjs +75 -0
- package/dist/{_chunks/_deps → _libs}/fdir.mjs +49 -104
- package/dist/_libs/fresh.mjs +85 -0
- package/dist/_libs/function-bind.mjs +63 -0
- package/dist/_libs/gen-mapping.mjs +612 -0
- package/dist/_libs/giget.mjs +19076 -0
- package/dist/_libs/gzip-size.mjs +21 -0
- package/dist/_libs/hasown.mjs +14 -0
- package/dist/_libs/http-errors.mjs +436 -0
- package/dist/_libs/httpxy.mjs +410 -0
- package/dist/_libs/is-core-module.mjs +220 -0
- package/dist/_libs/is-module.mjs +13 -0
- package/dist/_libs/is-reference.mjs +32 -0
- package/dist/{_chunks/_deps → _libs}/js-tokens.mjs +83 -112
- package/dist/_libs/klona.mjs +90 -0
- package/dist/_libs/knitwork.mjs +124 -0
- package/dist/_libs/local-pkg.mjs +1686 -0
- package/dist/{_chunks/_deps → _libs}/magic-string.mjs +272 -629
- package/dist/_libs/mime-db.mjs +7642 -0
- package/dist/_libs/mime-types.mjs +162 -0
- package/dist/_libs/mime.mjs +1391 -0
- package/dist/_libs/node-fetch-native.mjs +173 -0
- package/dist/_libs/on-finished.mjs +170 -0
- package/dist/_libs/parseurl.mjs +103 -0
- package/dist/_libs/path-parse.mjs +47 -0
- package/dist/_libs/pathe.mjs +41 -0
- package/dist/_libs/picomatch.mjs +1673 -0
- package/dist/_libs/plugin-alias.mjs +64 -0
- package/dist/_libs/plugin-commonjs.mjs +1489 -0
- package/dist/_libs/plugin-inject.mjs +135 -0
- package/dist/_libs/plugin-json.mjs +36 -0
- package/dist/_libs/plugin-node-resolve.mjs +1553 -0
- package/dist/_libs/plugin-replace.mjs +104 -0
- package/dist/_libs/pretty-bytes.mjs +116 -0
- package/dist/_libs/range-parser.mjs +102 -0
- package/dist/_libs/remapping.mjs +117 -0
- package/dist/{_chunks/_deps → _libs}/rou3.mjs +7 -22
- package/dist/_libs/send.mjs +857 -0
- package/dist/_libs/serve-static.mjs +124 -0
- package/dist/_libs/std-env.mjs +158 -0
- package/dist/_libs/strip-literal.mjs +51 -0
- package/dist/{_chunks/_deps → _libs}/tinyglobby.mjs +32 -33
- package/dist/_libs/ultrahtml.mjs +138 -0
- package/dist/_libs/unimport.mjs +3520 -0
- package/dist/_libs/untyped.mjs +271 -0
- package/dist/_libs/unwasm.mjs +5825 -0
- package/dist/{_chunks/_deps/@pi0 → _libs}/vite-plugin-fullstack.mjs +28 -42
- package/dist/_presets.mjs +1723 -0
- package/dist/builder.d.mts +37 -35
- package/dist/builder.mjs +45 -117
- package/dist/cli/_chunks/build.mjs +43 -0
- package/dist/cli/_chunks/common.mjs +15 -0
- package/dist/cli/_chunks/detect-acorn.mjs +12 -0
- package/dist/cli/_chunks/dev.mjs +79 -0
- package/dist/cli/_chunks/dist.mjs +3 -0
- package/dist/cli/_chunks/dist2.mjs +4 -0
- package/dist/cli/_chunks/esm.mjs +3 -0
- package/dist/cli/_chunks/json5.mjs +4 -0
- package/dist/cli/_chunks/jsonc.mjs +4 -0
- package/dist/cli/_chunks/list.mjs +27 -0
- package/dist/cli/_chunks/multipart-parser.mjs +6 -0
- package/dist/cli/_chunks/prepare.mjs +19 -0
- package/dist/cli/_chunks/run.mjs +55 -0
- package/dist/cli/_chunks/task.mjs +16 -0
- package/dist/cli/_chunks/toml.mjs +4 -0
- package/dist/cli/_chunks/yaml.mjs +4 -0
- package/dist/cli/index.d.mts +1 -1
- package/dist/cli/index.mjs +19 -18
- package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
- package/dist/presets/_nitro/runtime/nitro-dev.mjs +42 -33
- package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +2 -2
- package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +4 -8
- package/dist/presets/_nitro/runtime/service-worker.d.mts +1 -0
- package/dist/presets/_nitro/runtime/service-worker.mjs +14 -11
- package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +1 -0
- package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +6 -5
- package/dist/presets/aws-lambda/runtime/_utils.d.mts +8 -13
- package/dist/presets/aws-lambda/runtime/_utils.mjs +95 -81
- package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +1 -2
- package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +25 -27
- package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +7 -7
- package/dist/presets/azure/runtime/_utils.mjs +43 -43
- package/dist/presets/azure/runtime/azure-swa.d.mts +2 -2
- package/dist/presets/azure/runtime/azure-swa.mjs +22 -21
- package/dist/presets/bun/runtime/bun.d.mts +1 -0
- package/dist/presets/bun/runtime/bun.mjs +18 -17
- package/dist/presets/cloudflare/runtime/_module-handler.d.mts +10 -7
- package/dist/presets/cloudflare/runtime/_module-handler.mjs +78 -87
- package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +6 -14
- package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +53 -58
- package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +1 -7
- package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +12 -14
- package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +12 -12
- package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +35 -39
- package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +2 -2
- package/dist/presets/cloudflare/runtime/plugin.dev.mjs +86 -76
- package/dist/presets/deno/runtime/deno-deploy.d.mts +1 -0
- package/dist/presets/deno/runtime/deno-deploy.mjs +12 -11
- package/dist/presets/deno/runtime/deno-server.d.mts +2 -1
- package/dist/presets/deno/runtime/deno-server.mjs +31 -39
- package/dist/presets/netlify/runtime/netlify-edge.d.mts +2 -1
- package/dist/presets/netlify/runtime/netlify-edge.mjs +14 -11
- package/dist/presets/netlify/runtime/netlify.mjs +11 -17
- package/dist/presets/node/runtime/node-cluster.mjs +49 -48
- package/dist/presets/node/runtime/node-middleware.d.mts +3 -2
- package/dist/presets/node/runtime/node-middleware.mjs +7 -6
- package/dist/presets/node/runtime/node-server.mjs +33 -23
- package/dist/presets/standard/runtime/server.d.mts +1 -3
- package/dist/presets/standard/runtime/server.mjs +1 -3
- package/dist/presets/stormkit/runtime/stormkit.d.mts +13 -13
- package/dist/presets/stormkit/runtime/stormkit.mjs +20 -20
- package/dist/presets/vercel/runtime/vercel.d.mts +3 -3
- package/dist/presets/vercel/runtime/vercel.mjs +15 -14
- package/dist/presets/winterjs/runtime/winterjs.d.mts +2 -0
- package/dist/presets/winterjs/runtime/winterjs.mjs +72 -68
- package/dist/presets/zeabur/runtime/zeabur.d.mts +1 -1
- package/dist/runtime/index.d.mts +12 -1
- package/dist/runtime/index.mjs +12 -7
- package/dist/runtime/internal/app.mjs +175 -162
- package/dist/runtime/internal/cache.d.mts +10 -4
- package/dist/runtime/internal/cache.mjs +247 -216
- package/dist/runtime/internal/context.d.mts +9 -9
- package/dist/runtime/internal/context.mjs +17 -10
- package/dist/runtime/internal/database.mjs +8 -10
- package/dist/runtime/internal/error/dev.d.mts +5 -4
- package/dist/runtime/internal/error/dev.mjs +106 -105
- package/dist/runtime/internal/error/prod.d.mts +2 -2
- package/dist/runtime/internal/error/prod.mjs +48 -52
- package/dist/runtime/internal/error/utils.d.mts +4 -4
- package/dist/runtime/internal/error/utils.mjs +1 -1
- package/dist/runtime/internal/index.d.mts +2 -0
- package/dist/runtime/internal/index.mjs +2 -0
- package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +14 -14
- package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +248 -209
- package/dist/runtime/internal/meta.d.mts +1 -1
- package/dist/runtime/internal/meta.mjs +1 -1
- package/dist/runtime/internal/plugin.d.mts +2 -2
- package/dist/runtime/internal/plugin.mjs +1 -1
- package/dist/runtime/internal/renderer.mjs +39 -31
- package/dist/runtime/internal/route-rules.d.mts +8 -8
- package/dist/runtime/internal/route-rules.mjs +53 -51
- package/dist/runtime/internal/routes/dev-tasks.d.mts +1 -30
- package/dist/runtime/internal/routes/dev-tasks.mjs +15 -17
- package/dist/runtime/internal/routes/openapi.d.mts +1 -0
- package/dist/runtime/internal/routes/openapi.mjs +81 -87
- package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
- package/dist/runtime/internal/routes/renderer-template.dev.d.mts +1 -2
- package/dist/runtime/internal/routes/renderer-template.dev.mjs +10 -17
- package/dist/runtime/internal/routes/renderer-template.mjs +1 -1
- package/dist/runtime/internal/routes/scalar.d.mts +1 -0
- package/dist/runtime/internal/routes/scalar.mjs +22 -23
- package/dist/runtime/internal/routes/swagger.d.mts +1 -0
- package/dist/runtime/internal/routes/swagger.mjs +9 -11
- package/dist/runtime/internal/runtime-config.d.mts +4 -4
- package/dist/runtime/internal/runtime-config.mjs +40 -35
- package/dist/runtime/internal/shutdown.d.mts +2 -7
- package/dist/runtime/internal/shutdown.mjs +30 -29
- package/dist/runtime/internal/static.mjs +63 -74
- package/dist/runtime/internal/storage.mjs +2 -2
- package/dist/runtime/internal/task.d.mts +6 -6
- package/dist/runtime/internal/task.mjs +56 -59
- package/dist/runtime/internal/utils.d.mts +1 -1
- package/dist/runtime/internal/utils.mjs +4 -10
- package/dist/types/index.d.mts +2566 -3851
- package/dist/types/index.mjs +1 -1
- package/dist/vite.d.mts +61 -51
- package/dist/vite.mjs +55 -132
- package/package.json +10 -10
- package/dist/_build/build.mjs +0 -368
- package/dist/_build/build2.mjs +0 -556
- package/dist/_build/info.mjs +0 -1002
- package/dist/_build/prepare.mjs +0 -1511
- package/dist/_build/snapshot.mjs +0 -185
- package/dist/_build/vite.mjs +0 -959
- package/dist/_build/vite2.mjs +0 -149
- package/dist/_chunks/_deps/@jridgewell/gen-mapping.mjs +0 -189
- package/dist/_chunks/_deps/@jridgewell/remapping.mjs +0 -137
- package/dist/_chunks/_deps/@jridgewell/resolve-uri.mjs +0 -231
- package/dist/_chunks/_deps/@jridgewell/sourcemap-codec.mjs +0 -173
- package/dist/_chunks/_deps/@jridgewell/trace-mapping.mjs +0 -170
- package/dist/_chunks/_deps/@rollup/plugin-alias.mjs +0 -89
- package/dist/_chunks/_deps/@rollup/plugin-commonjs.mjs +0 -2376
- package/dist/_chunks/_deps/@rollup/plugin-inject.mjs +0 -212
- package/dist/_chunks/_deps/@rollup/plugin-json.mjs +0 -37
- package/dist/_chunks/_deps/@rollup/plugin-node-resolve.mjs +0 -1386
- package/dist/_chunks/_deps/@rollup/plugin-replace.mjs +0 -133
- package/dist/_chunks/_deps/@rollup/pluginutils.mjs +0 -346
- package/dist/_chunks/_deps/acorn.mjs +0 -6225
- package/dist/_chunks/_deps/c12.mjs +0 -510
- package/dist/_chunks/_deps/chokidar.mjs +0 -1428
- package/dist/_chunks/_deps/citty.mjs +0 -460
- package/dist/_chunks/_deps/commondir.mjs +0 -77
- package/dist/_chunks/_deps/compatx.mjs +0 -76
- package/dist/_chunks/_deps/confbox.mjs +0 -300
- package/dist/_chunks/_deps/debug.mjs +0 -885
- package/dist/_chunks/_deps/deepmerge.mjs +0 -147
- package/dist/_chunks/_deps/depd.mjs +0 -550
- package/dist/_chunks/_deps/dot-prop.mjs +0 -282
- package/dist/_chunks/_deps/dotenv.mjs +0 -555
- package/dist/_chunks/_deps/duplexer.mjs +0 -1
- package/dist/_chunks/_deps/ee-first.mjs +0 -104
- package/dist/_chunks/_deps/encodeurl.mjs +0 -69
- package/dist/_chunks/_deps/escape-html.mjs +0 -87
- package/dist/_chunks/_deps/escape-string-regexp.mjs +0 -13
- package/dist/_chunks/_deps/estree-walker.mjs +0 -433
- package/dist/_chunks/_deps/etag.mjs +0 -147
- package/dist/_chunks/_deps/exsolve.mjs +0 -1416
- package/dist/_chunks/_deps/fresh.mjs +0 -145
- package/dist/_chunks/_deps/function-bind.mjs +0 -106
- package/dist/_chunks/_deps/giget.mjs +0 -451
- package/dist/_chunks/_deps/gzip-size.mjs +0 -19
- package/dist/_chunks/_deps/hasown.mjs +0 -19
- package/dist/_chunks/_deps/http-errors.mjs +0 -307
- package/dist/_chunks/_deps/httpxy.mjs +0 -580
- package/dist/_chunks/_deps/inherits.mjs +0 -57
- package/dist/_chunks/_deps/is-core-module.mjs +0 -596
- package/dist/_chunks/_deps/is-module.mjs +0 -25
- package/dist/_chunks/_deps/is-reference.mjs +0 -31
- package/dist/_chunks/_deps/klona.mjs +0 -137
- package/dist/_chunks/_deps/knitwork.mjs +0 -172
- package/dist/_chunks/_deps/local-pkg.mjs +0 -163
- package/dist/_chunks/_deps/mime-db.mjs +0 -11685
- package/dist/_chunks/_deps/mime-types.mjs +0 -287
- package/dist/_chunks/_deps/mime.mjs +0 -1172
- package/dist/_chunks/_deps/mlly.mjs +0 -2413
- package/dist/_chunks/_deps/ms.mjs +0 -172
- package/dist/_chunks/_deps/node-fetch-native.mjs +0 -3
- package/dist/_chunks/_deps/nypm.mjs +0 -219
- package/dist/_chunks/_deps/on-finished.mjs +0 -246
- package/dist/_chunks/_deps/parseurl.mjs +0 -168
- package/dist/_chunks/_deps/path-parse.mjs +0 -85
- package/dist/_chunks/_deps/pathe.mjs +0 -251
- package/dist/_chunks/_deps/perfect-debounce.mjs +0 -88
- package/dist/_chunks/_deps/picomatch.mjs +0 -2144
- package/dist/_chunks/_deps/pkg-types.mjs +0 -247
- package/dist/_chunks/_deps/pretty-bytes.mjs +0 -180
- package/dist/_chunks/_deps/quansync.mjs +0 -99
- package/dist/_chunks/_deps/range-parser.mjs +0 -171
- package/dist/_chunks/_deps/rc9.mjs +0 -219
- package/dist/_chunks/_deps/readdirp.mjs +0 -245
- package/dist/_chunks/_deps/resolve.mjs +0 -1260
- package/dist/_chunks/_deps/send.mjs +0 -1022
- package/dist/_chunks/_deps/serve-static.mjs +0 -228
- package/dist/_chunks/_deps/setprototypeof.mjs +0 -26
- package/dist/_chunks/_deps/statuses.mjs +0 -457
- package/dist/_chunks/_deps/std-env.mjs +0 -3
- package/dist/_chunks/_deps/strip-literal.mjs +0 -67
- package/dist/_chunks/_deps/supports-color.mjs +0 -44
- package/dist/_chunks/_deps/tinyexec.mjs +0 -552
- package/dist/_chunks/_deps/toidentifier.mjs +0 -41
- package/dist/_chunks/_deps/ultrahtml.mjs +0 -3
- package/dist/_chunks/_deps/unimport.mjs +0 -2267
- package/dist/_chunks/_deps/unplugin-utils.mjs +0 -65
- package/dist/_chunks/_deps/unplugin.mjs +0 -1294
- package/dist/_chunks/_deps/untyped.mjs +0 -375
- package/dist/_chunks/_deps/unwasm.mjs +0 -6959
- package/dist/_chunks/_deps/webpack-virtual-modules.mjs +0 -360
- package/dist/_chunks/_presets/_all.mjs +0 -59
- package/dist/_chunks/_presets/_nitro.mjs +0 -74
- package/dist/_chunks/_presets/_resolve.mjs +0 -64
- package/dist/_chunks/_presets/_static.mjs +0 -69
- package/dist/_chunks/_presets/_types.mjs +0 -3
- package/dist/_chunks/_presets/_utils.mjs +0 -31
- package/dist/_chunks/_presets/alwaysdata.mjs +0 -17
- package/dist/_chunks/_presets/aws-amplify.mjs +0 -111
- package/dist/_chunks/_presets/aws-lambda.mjs +0 -23
- package/dist/_chunks/_presets/azure.mjs +0 -162
- package/dist/_chunks/_presets/bun.mjs +0 -19
- package/dist/_chunks/_presets/cleavr.mjs +0 -15
- package/dist/_chunks/_presets/cloudflare.mjs +0 -608
- package/dist/_chunks/_presets/deno.mjs +0 -196
- package/dist/_chunks/_presets/digitalocean.mjs +0 -14
- package/dist/_chunks/_presets/firebase.mjs +0 -47
- package/dist/_chunks/_presets/flightcontrol.mjs +0 -14
- package/dist/_chunks/_presets/genezio.mjs +0 -13
- package/dist/_chunks/_presets/heroku.mjs +0 -14
- package/dist/_chunks/_presets/iis.mjs +0 -194
- package/dist/_chunks/_presets/index.mjs +0 -62
- package/dist/_chunks/_presets/koyeb.mjs +0 -14
- package/dist/_chunks/_presets/netlify.mjs +0 -241
- package/dist/_chunks/_presets/node.mjs +0 -54
- package/dist/_chunks/_presets/platform.mjs +0 -14
- package/dist/_chunks/_presets/render.mjs +0 -14
- package/dist/_chunks/_presets/standard.mjs +0 -23
- package/dist/_chunks/_presets/stormkit.mjs +0 -18
- package/dist/_chunks/_presets/vercel.mjs +0 -375
- package/dist/_chunks/_presets/winterjs.mjs +0 -22
- package/dist/_chunks/_presets/zeabur.mjs +0 -69
- package/dist/_chunks/_presets/zerops.mjs +0 -27
- package/dist/_chunks/app.mjs +0 -600
- package/dist/_chunks/builder.mjs +0 -648
- package/dist/_chunks/server.mjs +0 -256
- package/dist/_cli/build.mjs +0 -49
- package/dist/_cli/common.mjs +0 -13
- package/dist/_cli/dev.mjs +0 -121
- package/dist/_cli/index.mjs +0 -16
- package/dist/_cli/list.mjs +0 -33
- package/dist/_cli/prepare.mjs +0 -23
- package/dist/_cli/run.mjs +0 -59
- package/dist/presets/cloudflare/runtime/shims/workers.dev.d.mts +0 -21
- package/dist/runtime/internal/empty.d.mts +0 -0
- package/dist/runtime/internal/vite/dev-entry.d.mts +0 -1
- package/dist/runtime/internal/vite/dev-worker.d.mts +0 -1
- package/dist/runtime/internal/vite/prod-setup.d.mts +0 -4
- package/dist/runtime/internal/vite/ssr-renderer.d.mts +0 -4
- /package/lib/{indexd.mts → index.d.mts} +0 -0
|
@@ -5,232 +5,263 @@ import { hash } from "ohash";
|
|
|
5
5
|
import { useNitroApp } from "./app.mjs";
|
|
6
6
|
import { useStorage } from "./storage.mjs";
|
|
7
7
|
function defaultCacheOptions() {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
return {
|
|
9
|
+
name: "_",
|
|
10
|
+
base: "/cache",
|
|
11
|
+
swr: true,
|
|
12
|
+
maxAge: 1
|
|
13
|
+
};
|
|
14
14
|
}
|
|
15
15
|
export function defineCachedFunction(fn, opts = {}) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
16
|
+
opts = {
|
|
17
|
+
...defaultCacheOptions(),
|
|
18
|
+
...opts
|
|
19
|
+
};
|
|
20
|
+
const pending = {};
|
|
21
|
+
// Normalize cache params
|
|
22
|
+
const group = opts.group || "nitro/functions";
|
|
23
|
+
const name = opts.name || fn.name || "_";
|
|
24
|
+
const integrity = opts.integrity || hash([fn, opts]);
|
|
25
|
+
const validate = opts.validate || ((entry) => entry.value !== undefined);
|
|
26
|
+
async function get(key, resolver, shouldInvalidateCache, event) {
|
|
27
|
+
// Use extension for key to avoid conflicting with parent namespace (foo/bar and foo/bar/baz)
|
|
28
|
+
const cacheKey = [
|
|
29
|
+
opts.base,
|
|
30
|
+
group,
|
|
31
|
+
name,
|
|
32
|
+
key + ".json"
|
|
33
|
+
].filter(Boolean).join(":").replace(/:\/$/, ":index");
|
|
34
|
+
let entry = await useStorage().getItem(cacheKey).catch((error) => {
|
|
35
|
+
console.error(`[cache] Cache read error.`, error);
|
|
36
|
+
useNitroApp().captureError(error, {
|
|
37
|
+
event,
|
|
38
|
+
tags: ["cache"]
|
|
39
|
+
});
|
|
40
|
+
}) || {};
|
|
41
|
+
// https://github.com/nitrojs/nitro/issues/2160
|
|
42
|
+
if (typeof entry !== "object") {
|
|
43
|
+
entry = {};
|
|
44
|
+
const error = new Error("Malformed data read from cache.");
|
|
45
|
+
console.error("[cache]", error);
|
|
46
|
+
useNitroApp().captureError(error, {
|
|
47
|
+
event,
|
|
48
|
+
tags: ["cache"]
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const ttl = (opts.maxAge ?? 0) * 1e3;
|
|
52
|
+
if (ttl) {
|
|
53
|
+
entry.expires = Date.now() + ttl;
|
|
54
|
+
}
|
|
55
|
+
const expired = shouldInvalidateCache || entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl || validate(entry) === false;
|
|
56
|
+
const _resolve = async () => {
|
|
57
|
+
const isPending = pending[key];
|
|
58
|
+
if (!isPending) {
|
|
59
|
+
if (entry.value !== undefined && (opts.staleMaxAge || 0) >= 0 && opts.swr === false) {
|
|
60
|
+
// Remove cached entry to prevent using expired cache on concurrent requests
|
|
61
|
+
entry.value = undefined;
|
|
62
|
+
entry.integrity = undefined;
|
|
63
|
+
entry.mtime = undefined;
|
|
64
|
+
entry.expires = undefined;
|
|
65
|
+
}
|
|
66
|
+
pending[key] = Promise.resolve(resolver());
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
entry.value = await pending[key];
|
|
70
|
+
} catch (error) {
|
|
71
|
+
// Make sure entries that reject get removed.
|
|
72
|
+
if (!isPending) {
|
|
73
|
+
delete pending[key];
|
|
74
|
+
}
|
|
75
|
+
// Re-throw error to make sure the caller knows the task failed.
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
if (!isPending) {
|
|
79
|
+
// Update mtime, integrity + validate and set the value in cache only the first time the request is made.
|
|
80
|
+
entry.mtime = Date.now();
|
|
81
|
+
entry.integrity = integrity;
|
|
82
|
+
delete pending[key];
|
|
83
|
+
if (validate(entry) !== false) {
|
|
84
|
+
let setOpts;
|
|
85
|
+
if (opts.maxAge && !opts.swr) {
|
|
86
|
+
setOpts = { ttl: opts.maxAge };
|
|
87
|
+
}
|
|
88
|
+
const promise = useStorage().setItem(cacheKey, entry, setOpts).catch((error) => {
|
|
89
|
+
console.error(`[cache] Cache write error.`, error);
|
|
90
|
+
useNitroApp().captureError(error, {
|
|
91
|
+
event,
|
|
92
|
+
tags: ["cache"]
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
if (typeof event?.req?.waitUntil === "function") {
|
|
96
|
+
event.req.waitUntil(promise);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const _resolvePromise = expired ? _resolve() : Promise.resolve();
|
|
102
|
+
if (entry.value === undefined) {
|
|
103
|
+
await _resolvePromise;
|
|
104
|
+
} else if (expired && event && event.req.waitUntil) {
|
|
105
|
+
event.req.waitUntil(_resolvePromise);
|
|
106
|
+
}
|
|
107
|
+
if (opts.swr && validate(entry) !== false) {
|
|
108
|
+
_resolvePromise.catch((error) => {
|
|
109
|
+
console.error(`[cache] SWR handler error.`, error);
|
|
110
|
+
useNitroApp().captureError(error, {
|
|
111
|
+
event,
|
|
112
|
+
tags: ["cache"]
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
return entry;
|
|
116
|
+
}
|
|
117
|
+
return _resolvePromise.then(() => entry);
|
|
118
|
+
}
|
|
119
|
+
return async (...args) => {
|
|
120
|
+
const shouldBypassCache = await opts.shouldBypassCache?.(...args);
|
|
121
|
+
if (shouldBypassCache) {
|
|
122
|
+
return fn(...args);
|
|
123
|
+
}
|
|
124
|
+
const key = await (opts.getKey || getKey)(...args);
|
|
125
|
+
const shouldInvalidateCache = await opts.shouldInvalidateCache?.(...args);
|
|
126
|
+
const entry = await get(key, () => fn(...args), shouldInvalidateCache, args[0] && isHTTPEvent(args[0]) ? args[0] : undefined);
|
|
127
|
+
let value = entry.value;
|
|
128
|
+
if (opts.transform) {
|
|
129
|
+
value = await opts.transform(entry, ...args) || value;
|
|
130
|
+
}
|
|
131
|
+
return value;
|
|
132
|
+
};
|
|
111
133
|
}
|
|
112
134
|
export function cachedFunction(fn, opts = {}) {
|
|
113
|
-
|
|
135
|
+
return defineCachedFunction(fn, opts);
|
|
114
136
|
}
|
|
115
137
|
function getKey(...args) {
|
|
116
|
-
|
|
138
|
+
return args.length > 0 ? hash(args) : "";
|
|
117
139
|
}
|
|
118
140
|
function escapeKey(key) {
|
|
119
|
-
|
|
141
|
+
return String(key).replace(/\W/g, "");
|
|
120
142
|
}
|
|
121
143
|
export function defineCachedEventHandler(handler, opts = defaultCacheOptions()) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
144
|
+
const variableHeaderNames = (opts.varies || []).filter(Boolean).map((h) => h.toLowerCase()).sort();
|
|
145
|
+
const _opts = {
|
|
146
|
+
...opts,
|
|
147
|
+
shouldBypassCache: (event) => {
|
|
148
|
+
return event.req.method !== "GET" && event.req.method !== "HEAD";
|
|
149
|
+
},
|
|
150
|
+
getKey: async (event) => {
|
|
151
|
+
// Custom user-defined key
|
|
152
|
+
const customKey = await opts.getKey?.(event);
|
|
153
|
+
if (customKey) {
|
|
154
|
+
return escapeKey(customKey);
|
|
155
|
+
}
|
|
156
|
+
// Auto-generated key
|
|
157
|
+
const _path = event.url.pathname + event.url.search;
|
|
158
|
+
let _pathname;
|
|
159
|
+
try {
|
|
160
|
+
_pathname = escapeKey(decodeURI(parseURL(_path).pathname)).slice(0, 16) || "index";
|
|
161
|
+
} catch {
|
|
162
|
+
_pathname = "-";
|
|
163
|
+
}
|
|
164
|
+
const _hashedPath = `${_pathname}.${hash(_path)}`;
|
|
165
|
+
const _headers = variableHeaderNames.map((header) => [header, event.req.headers.get(header)]).map(([name, value]) => `${escapeKey(name)}.${hash(value)}`);
|
|
166
|
+
return [_hashedPath, ..._headers].join(":");
|
|
167
|
+
},
|
|
168
|
+
validate: (entry) => {
|
|
169
|
+
if (!entry.value) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
if (entry.value.status >= 400) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
if (entry.value.body === undefined) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
// https://github.com/nitrojs/nitro/pull/1857
|
|
179
|
+
if (entry.value.headers.etag === "undefined" || entry.value.headers["last-modified"] === "undefined") {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
return true;
|
|
183
|
+
},
|
|
184
|
+
group: opts.group || "nitro/handlers",
|
|
185
|
+
integrity: opts.integrity || hash([handler, opts])
|
|
186
|
+
};
|
|
187
|
+
const _cachedHandler = cachedFunction(async (event) => {
|
|
188
|
+
// Filter non variable headers
|
|
189
|
+
const filteredHeaders = [...event.req.headers.entries()].filter(([key]) => !variableHeaderNames.includes(key.toLowerCase()));
|
|
190
|
+
try {
|
|
191
|
+
const originalReq = event.req;
|
|
192
|
+
// @ts-expect-error assigning to publicly readonly property
|
|
193
|
+
event.req = new Request(event.req.url, {
|
|
194
|
+
method: event.req.method,
|
|
195
|
+
headers: filteredHeaders
|
|
196
|
+
});
|
|
197
|
+
// Inherit srvx context
|
|
198
|
+
event.req.runtime = originalReq.runtime;
|
|
199
|
+
event.req.waitUntil = originalReq.waitUntil;
|
|
200
|
+
} catch (error) {
|
|
201
|
+
console.error("[cache] Failed to filter headers:", error);
|
|
202
|
+
}
|
|
203
|
+
// Call handler
|
|
204
|
+
const rawValue = await handler(event);
|
|
205
|
+
const res = await toResponse(rawValue, event);
|
|
206
|
+
// Stringified body
|
|
207
|
+
// TODO: support binary responses
|
|
208
|
+
const body = await res.text();
|
|
209
|
+
if (!res.headers.has("etag")) {
|
|
210
|
+
res.headers.set("etag", `W/"${hash(body)}"`);
|
|
211
|
+
}
|
|
212
|
+
if (!res.headers.has("last-modified")) {
|
|
213
|
+
res.headers.set("last-modified", new Date().toUTCString());
|
|
214
|
+
}
|
|
215
|
+
const cacheControl = [];
|
|
216
|
+
if (opts.swr) {
|
|
217
|
+
if (opts.maxAge) {
|
|
218
|
+
cacheControl.push(`s-maxage=${opts.maxAge}`);
|
|
219
|
+
}
|
|
220
|
+
if (opts.staleMaxAge) {
|
|
221
|
+
cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`);
|
|
222
|
+
} else {
|
|
223
|
+
cacheControl.push("stale-while-revalidate");
|
|
224
|
+
}
|
|
225
|
+
} else if (opts.maxAge) {
|
|
226
|
+
cacheControl.push(`max-age=${opts.maxAge}`);
|
|
227
|
+
}
|
|
228
|
+
if (cacheControl.length > 0) {
|
|
229
|
+
res.headers.set("cache-control", cacheControl.join(", "));
|
|
230
|
+
}
|
|
231
|
+
const cacheEntry = {
|
|
232
|
+
status: res.status,
|
|
233
|
+
statusText: res.statusText,
|
|
234
|
+
headers: Object.fromEntries(res.headers.entries()),
|
|
235
|
+
body
|
|
236
|
+
};
|
|
237
|
+
return cacheEntry;
|
|
238
|
+
}, _opts);
|
|
239
|
+
return defineHandler(async (event) => {
|
|
240
|
+
// Headers-only mode
|
|
241
|
+
if (opts.headersOnly) {
|
|
242
|
+
// TODO: Send SWR too
|
|
243
|
+
if (handleCacheHeaders(event, { maxAge: opts.maxAge })) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
return handler(event);
|
|
247
|
+
}
|
|
248
|
+
// Call with cache
|
|
249
|
+
const response = await _cachedHandler(event);
|
|
250
|
+
// Check for cache headers
|
|
251
|
+
if (handleCacheHeaders(event, {
|
|
252
|
+
modifiedTime: new Date(response.headers["last-modified"]),
|
|
253
|
+
etag: response.headers.etag,
|
|
254
|
+
maxAge: opts.maxAge
|
|
255
|
+
})) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// Send Response
|
|
259
|
+
return new FastResponse(response.body, {
|
|
260
|
+
status: response.status,
|
|
261
|
+
statusText: response.statusText,
|
|
262
|
+
headers: response.headers
|
|
263
|
+
});
|
|
264
|
+
});
|
|
234
265
|
}
|
|
235
266
|
export const cachedEventHandler = defineCachedEventHandler;
|
|
236
267
|
export const defineCachedHandler = defineCachedEventHandler;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { ServerRequest } from "srvx";
|
|
2
|
-
export declare const nitroAsyncContext:
|
|
2
|
+
export declare const nitroAsyncContext: unknown;
|
|
3
3
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
*
|
|
5
|
+
* Access to the current Nitro request.
|
|
6
|
+
*
|
|
7
|
+
* @experimental
|
|
8
|
+
* - Requires `experimental.asyncContext: true` config to work.
|
|
9
|
+
* - Works in Node.js and limited runtimes only
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
12
|
export declare function useRequest(): ServerRequest;
|
|
@@ -2,16 +2,23 @@ import { AsyncLocalStorage } from "node:async_hooks";
|
|
|
2
2
|
import { HTTPError } from "h3";
|
|
3
3
|
import { getContext } from "unctx";
|
|
4
4
|
export const nitroAsyncContext = /* @__PURE__ */ (() => getContext("nitro-app", {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
asyncContext: import.meta._asyncContext,
|
|
6
|
+
AsyncLocalStorage: import.meta._asyncContext ? AsyncLocalStorage : undefined
|
|
7
7
|
}))();
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* Access to the current Nitro request.
|
|
11
|
+
*
|
|
12
|
+
* @experimental
|
|
13
|
+
* - Requires `experimental.asyncContext: true` config to work.
|
|
14
|
+
* - Works in Node.js and limited runtimes only
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
8
17
|
export function useRequest() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
});
|
|
16
|
-
}
|
|
18
|
+
try {
|
|
19
|
+
return nitroAsyncContext.use().request;
|
|
20
|
+
} catch {
|
|
21
|
+
const hint = import.meta._asyncContext ? "Note: This is an experimental feature and might be broken on non-Node.js environments." : "Enable the experimental flag using `experimental.asyncContext: true`.";
|
|
22
|
+
throw new HTTPError({ message: `Nitro request context is not available. ${hint}` });
|
|
23
|
+
}
|
|
17
24
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { createDatabase } from "db0";
|
|
2
2
|
import { connectionConfigs } from "#nitro-internal-virtual/database";
|
|
3
|
-
const instances =
|
|
3
|
+
const instances = Object.create(null);
|
|
4
4
|
export function useDatabase(name = "default") {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
connectionConfigs[name].connector(connectionConfigs[name].options || {})
|
|
13
|
-
);
|
|
5
|
+
if (instances[name]) {
|
|
6
|
+
return instances[name];
|
|
7
|
+
}
|
|
8
|
+
if (!connectionConfigs[name]) {
|
|
9
|
+
throw new Error(`Database connection "${name}" not configured.`);
|
|
10
|
+
}
|
|
11
|
+
return instances[name] = createDatabase(connectionConfigs[name].connector(connectionConfigs[name].options || {}));
|
|
14
12
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { HTTPError, HTTPEvent } from "h3";
|
|
2
2
|
import type { InternalHandlerResponse } from "./utils.mjs";
|
|
3
|
-
declare const _default
|
|
3
|
+
declare const _default;
|
|
4
4
|
export default _default;
|
|
5
5
|
export declare function defaultHandler(error: HTTPError, event: HTTPEvent, opts?: {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
silent?: boolean;
|
|
7
|
+
json?: boolean;
|
|
8
8
|
}): Promise<InternalHandlerResponse>;
|
|
9
|
-
|
|
9
|
+
// ---- Source Map support ----
|
|
10
|
+
export declare function loadStackTrace(error: any);
|