nitro-nightly 4.0.0-20251010-091516-7cafddba → 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.
- 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 +747 -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/_libs/fdir.mjs +514 -0
- 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/_libs/js-tokens.mjs +382 -0
- package/dist/_libs/klona.mjs +90 -0
- package/dist/_libs/knitwork.mjs +124 -0
- package/dist/_libs/local-pkg.mjs +1686 -0
- package/dist/_libs/magic-string.mjs +939 -0
- 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/_libs/rou3.mjs +311 -0
- 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/_libs/tinyglobby.mjs +292 -0
- 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/_libs/vite-plugin-fullstack.mjs +561 -0
- package/dist/_presets.mjs +1723 -0
- package/dist/builder.d.mts +54 -0
- package/dist/builder.mjs +45 -0
- 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 +20 -476
- package/dist/node_modules/@speed-highlight/core/dist/index.js +1 -1
- package/dist/node_modules/@speed-highlight/core/dist/terminal.js +1 -1
- package/dist/node_modules/@speed-highlight/core/package.json +7 -3
- package/dist/node_modules/cookie-es/dist/index.mjs +262 -0
- package/dist/node_modules/cookie-es/package.json +37 -0
- package/dist/node_modules/hookable/dist/index.mjs +243 -266
- package/dist/node_modules/hookable/package.json +29 -26
- package/dist/node_modules/rendu/dist/index.mjs +380 -0
- package/dist/node_modules/rendu/package.json +47 -0
- package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
- package/dist/presets/_nitro/runtime/nitro-dev.mjs +44 -38
- package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +2 -2
- package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +9 -12
- 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 +79 -87
- package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +6 -14
- package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +55 -61
- 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 +89 -82
- package/dist/presets/cloudflare/runtime/shims/workers.dev.mjs +27 -0
- 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 +34 -24
- 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 +13 -2
- package/dist/runtime/index.mjs +13 -8
- package/dist/runtime/internal/app.d.mts +3 -1
- package/dist/runtime/internal/app.mjs +179 -140
- 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 +5 -4
- package/dist/runtime/internal/error/prod.mjs +51 -59
- 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 +40 -32
- 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 -2
- 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 -8
- package/dist/runtime/internal/shutdown.mjs +32 -30
- 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 -60
- package/dist/runtime/internal/utils.d.mts +1 -1
- package/dist/runtime/internal/utils.mjs +4 -10
- package/dist/types/index.d.mts +2594 -2286
- package/dist/types/index.mjs +1 -1
- package/dist/vite.d.mts +56 -47
- package/dist/vite.mjs +55 -68
- package/lib/index.d.mts +1 -0
- package/lib/index.mjs +1 -0
- package/lib/runtime/meta.mjs +35 -0
- package/package.json +49 -50
- package/dist/_chunks/app.mjs +0 -19797
- package/dist/_chunks/build.mjs +0 -84
- package/dist/_chunks/build2.mjs +0 -318
- package/dist/_chunks/build3.mjs +0 -6452
- package/dist/_chunks/detect-acorn.mjs +0 -503
- package/dist/_chunks/index.mjs +0 -22242
- package/dist/_chunks/index2.mjs +0 -297
- package/dist/_chunks/index3.mjs +0 -1058
- package/dist/_chunks/index4.mjs +0 -1206
- package/dist/_chunks/info.mjs +0 -11157
- package/dist/_chunks/json5.mjs +0 -68
- package/dist/_chunks/jsonc.mjs +0 -51
- package/dist/_chunks/pathe.M-eThtNZ.mjs +0 -204
- package/dist/_chunks/plugin.mjs +0 -960
- package/dist/_chunks/server.mjs +0 -254
- package/dist/_chunks/snapshot.mjs +0 -284
- package/dist/_chunks/toml.mjs +0 -259
- package/dist/_chunks/yaml.mjs +0 -86
- package/dist/cli/build.mjs +0 -54
- package/dist/cli/common.mjs +0 -13
- package/dist/cli/dev.mjs +0 -95
- package/dist/cli/index2.mjs +0 -17
- package/dist/cli/list.mjs +0 -34
- package/dist/cli/prepare.mjs +0 -24
- package/dist/cli/run.mjs +0 -60
- package/dist/index.d.mts +0 -52
- package/dist/index.mjs +0 -55
- package/dist/node_modules/klona/dist/index.mjs +0 -81
- package/dist/node_modules/klona/full/index.mjs +0 -53
- package/dist/node_modules/klona/package.json +0 -74
- package/dist/node_modules/std-env/dist/index.mjs +0 -1
- package/dist/node_modules/std-env/package.json +0 -46
- package/dist/presets.mjs +0 -2460
- package/dist/runtime/internal/debug.d.mts +0 -2
- package/dist/runtime/internal/debug.mjs +0 -5
- 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/runtime-meta.mjs +0 -38
- /package/lib/{runtime-meta.d.mts → runtime/meta.d.mts} +0 -0
|
@@ -1,62 +1,64 @@
|
|
|
1
1
|
import { proxyRequest, redirect as sendRedirect } from "h3";
|
|
2
2
|
import { joinURL, withQuery, withoutBase } from "ufo";
|
|
3
3
|
import { defineCachedEventHandler } from "./cache.mjs";
|
|
4
|
+
// Headers route rule
|
|
4
5
|
export const headers = ((m) => function headersRouteRule(event) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
for (const [key, value] of Object.entries(m.options || {})) {
|
|
7
|
+
event.res.headers.set(key, value);
|
|
8
|
+
}
|
|
8
9
|
});
|
|
10
|
+
// Redirect route rule
|
|
9
11
|
export const redirect = ((m) => function redirectRouteRule(event) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
12
|
+
let target = m.options?.to;
|
|
13
|
+
if (!target) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (target.endsWith("/**")) {
|
|
17
|
+
let targetPath = event.url.pathname + event.url.search;
|
|
18
|
+
const strpBase = m.options._redirectStripBase;
|
|
19
|
+
if (strpBase) {
|
|
20
|
+
targetPath = withoutBase(targetPath, strpBase);
|
|
21
|
+
}
|
|
22
|
+
target = joinURL(target.slice(0, -3), targetPath);
|
|
23
|
+
} else if (event.url.search) {
|
|
24
|
+
target = withQuery(target, Object.fromEntries(event.url.searchParams));
|
|
25
|
+
}
|
|
26
|
+
return sendRedirect(target, m.options?.status);
|
|
25
27
|
});
|
|
28
|
+
// Proxy route rule
|
|
26
29
|
export const proxy = ((m) => function proxyRouteRule(event) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
...m.options
|
|
43
|
-
});
|
|
30
|
+
let target = m.options?.to;
|
|
31
|
+
if (!target) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (target.endsWith("/**")) {
|
|
35
|
+
let targetPath = event.url.pathname + event.url.search;
|
|
36
|
+
const strpBase = m.options._proxyStripBase;
|
|
37
|
+
if (strpBase) {
|
|
38
|
+
targetPath = withoutBase(targetPath, strpBase);
|
|
39
|
+
}
|
|
40
|
+
target = joinURL(target.slice(0, -3), targetPath);
|
|
41
|
+
} else if (event.url.search) {
|
|
42
|
+
target = withQuery(target, Object.fromEntries(event.url.searchParams));
|
|
43
|
+
}
|
|
44
|
+
return proxyRequest(event, target, { ...m.options });
|
|
44
45
|
});
|
|
46
|
+
// Cache route rule
|
|
45
47
|
export const cache = ((m) => function cacheRouteRule(event, next) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
48
|
+
if (!event.context.matchedRoute) {
|
|
49
|
+
return next();
|
|
50
|
+
}
|
|
51
|
+
const cachedHandlers = globalThis.__nitroCachedHandlers ??= new Map();
|
|
52
|
+
const { handler, route } = event.context.matchedRoute;
|
|
53
|
+
const key = `${m.route}:${route}`;
|
|
54
|
+
let cachedHandler = cachedHandlers.get(key);
|
|
55
|
+
if (!cachedHandler) {
|
|
56
|
+
cachedHandler = defineCachedEventHandler(handler, {
|
|
57
|
+
group: "nitro/route-rules",
|
|
58
|
+
name: key,
|
|
59
|
+
...m.options
|
|
60
|
+
});
|
|
61
|
+
cachedHandlers.set(key, cachedHandler);
|
|
62
|
+
}
|
|
63
|
+
return cachedHandler(event);
|
|
62
64
|
});
|
|
@@ -2,22 +2,20 @@ import { H3 } from "h3";
|
|
|
2
2
|
import { runTask } from "nitro/runtime";
|
|
3
3
|
import { scheduledTasks, tasks } from "#nitro-internal-virtual/tasks";
|
|
4
4
|
export default new H3().get("/_nitro/tasks", async () => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
scheduledTasks
|
|
14
|
-
};
|
|
5
|
+
const _tasks = await Promise.all(Object.entries(tasks).map(async ([name, task]) => {
|
|
6
|
+
const _task = await task.resolve?.();
|
|
7
|
+
return [name, { description: _task?.meta?.description }];
|
|
8
|
+
}));
|
|
9
|
+
return {
|
|
10
|
+
tasks: Object.fromEntries(_tasks),
|
|
11
|
+
scheduledTasks
|
|
12
|
+
};
|
|
15
13
|
}).get("/_nitro/tasks/:name", async (event) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
const name = event.context.params?.name;
|
|
15
|
+
const body = await event.req.json().catch(() => ({}));
|
|
16
|
+
const payload = {
|
|
17
|
+
...Object.fromEntries(event.url.searchParams.entries()),
|
|
18
|
+
...body
|
|
19
|
+
};
|
|
20
|
+
return await runTask(name, { payload });
|
|
23
21
|
});
|
|
@@ -3,98 +3,92 @@ import { joinURL } from "ufo";
|
|
|
3
3
|
import { defu } from "defu";
|
|
4
4
|
import { handlersMeta } from "#nitro-internal-virtual/routing-meta";
|
|
5
5
|
import { useRuntimeConfig } from "../runtime-config.mjs";
|
|
6
|
+
// Served as /_openapi.json
|
|
6
7
|
export default defineHandler((event) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
variables: {}
|
|
33
|
-
}
|
|
34
|
-
],
|
|
35
|
-
paths,
|
|
36
|
-
components,
|
|
37
|
-
...extensible
|
|
38
|
-
};
|
|
8
|
+
const runtimeConfig = useRuntimeConfig();
|
|
9
|
+
const base = runtimeConfig.app?.baseURL;
|
|
10
|
+
const url = joinURL(getRequestURL(event).origin, base);
|
|
11
|
+
const meta = {
|
|
12
|
+
title: "Nitro Server Routes",
|
|
13
|
+
...runtimeConfig.nitro?.openAPI?.meta
|
|
14
|
+
};
|
|
15
|
+
const { paths, globals: { components,...globalsRest } } = getHandlersMeta();
|
|
16
|
+
const extensible = Object.fromEntries(Object.entries(globalsRest).filter(([key]) => key.startsWith("x-")));
|
|
17
|
+
return {
|
|
18
|
+
openapi: "3.1.0",
|
|
19
|
+
info: {
|
|
20
|
+
title: meta?.title,
|
|
21
|
+
version: meta?.version || "1.0.0",
|
|
22
|
+
description: meta?.description
|
|
23
|
+
},
|
|
24
|
+
servers: [{
|
|
25
|
+
url,
|
|
26
|
+
description: "Local Development Server",
|
|
27
|
+
variables: {}
|
|
28
|
+
}],
|
|
29
|
+
paths,
|
|
30
|
+
components,
|
|
31
|
+
...extensible
|
|
32
|
+
};
|
|
39
33
|
});
|
|
40
34
|
function getHandlersMeta() {
|
|
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
|
-
|
|
35
|
+
const paths = {};
|
|
36
|
+
let globals = {};
|
|
37
|
+
for (const h of handlersMeta) {
|
|
38
|
+
const { route, parameters } = normalizeRoute(h.route || "");
|
|
39
|
+
const tags = defaultTags(h.route || "");
|
|
40
|
+
const method = (h.method || "get").toLowerCase();
|
|
41
|
+
const { $global,...openAPI } = h.meta?.openAPI || {};
|
|
42
|
+
const item = { [method]: {
|
|
43
|
+
tags,
|
|
44
|
+
parameters,
|
|
45
|
+
responses: { 200: { description: "OK" } },
|
|
46
|
+
...openAPI
|
|
47
|
+
} };
|
|
48
|
+
if ($global) {
|
|
49
|
+
// TODO: Warn on conflicting global definitions?
|
|
50
|
+
globals = defu($global, globals);
|
|
51
|
+
}
|
|
52
|
+
if (paths[route] === undefined) {
|
|
53
|
+
paths[route] = item;
|
|
54
|
+
} else {
|
|
55
|
+
Object.assign(paths[route], item);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
paths,
|
|
60
|
+
globals
|
|
61
|
+
};
|
|
68
62
|
}
|
|
69
63
|
function normalizeRoute(_route) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
64
|
+
const parameters = [];
|
|
65
|
+
let anonymousCtr = 0;
|
|
66
|
+
const route = _route.replace(/:(\w+)/g, (_, name) => `{${name}}`).replace(/\/(\*)\//g, () => `/{param${++anonymousCtr}}/`).replace(/\*\*{/, "{").replace(/\/(\*\*)$/g, () => `/{*param${++anonymousCtr}}`);
|
|
67
|
+
const paramMatches = route.matchAll(/{(\*?\w+)}/g);
|
|
68
|
+
for (const match of paramMatches) {
|
|
69
|
+
const name = match[1];
|
|
70
|
+
if (!parameters.some((p) => p.name === name)) {
|
|
71
|
+
parameters.push({
|
|
72
|
+
name,
|
|
73
|
+
in: "path",
|
|
74
|
+
required: true,
|
|
75
|
+
schema: { type: "string" }
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
route,
|
|
81
|
+
parameters
|
|
82
|
+
};
|
|
89
83
|
}
|
|
90
84
|
function defaultTags(route) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
85
|
+
const tags = [];
|
|
86
|
+
if (route.startsWith("/api/")) {
|
|
87
|
+
tags.push("API Routes");
|
|
88
|
+
} else if (route.startsWith("/_")) {
|
|
89
|
+
tags.push("Internal");
|
|
90
|
+
} else {
|
|
91
|
+
tags.push("App Routes");
|
|
92
|
+
}
|
|
93
|
+
return tags;
|
|
100
94
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { H3Event } from "h3";
|
|
2
|
-
export default function renderIndexHTML(event: H3Event)
|
|
2
|
+
export default function renderIndexHTML(event: H3Event);
|
|
@@ -1,21 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
rendererTemplate,
|
|
3
|
-
rendererTemplateFile
|
|
4
|
-
} from "#nitro-internal-virtual/renderer-template";
|
|
1
|
+
import { rendererTemplate, rendererTemplateFile } from "#nitro-internal-virtual/renderer-template";
|
|
5
2
|
import { HTTPResponse } from "h3";
|
|
6
3
|
import { hasTemplateSyntax, renderToResponse, compileTemplate } from "rendu";
|
|
7
4
|
export default async function renderIndexHTML(event) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const template = compileTemplate(html, { filename: rendererTemplateFile });
|
|
18
|
-
return renderToResponse(template, {
|
|
19
|
-
request: event.req
|
|
20
|
-
});
|
|
5
|
+
let html = await rendererTemplate(event.req);
|
|
6
|
+
if (globalThis.__transform_html__) {
|
|
7
|
+
html = await globalThis.__transform_html__(html);
|
|
8
|
+
}
|
|
9
|
+
if (!hasTemplateSyntax(html)) {
|
|
10
|
+
return new HTTPResponse(html, { headers: { "content-type": "text/html; charset=utf-8" } });
|
|
11
|
+
}
|
|
12
|
+
const template = compileTemplate(html, { filename: rendererTemplateFile });
|
|
13
|
+
return renderToResponse(template, { request: event.req });
|
|
21
14
|
}
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { defineHandler } from "h3";
|
|
2
2
|
import { useRuntimeConfig } from "../runtime-config.mjs";
|
|
3
|
+
// Served as /_scalar
|
|
3
4
|
export default defineHandler((event) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
const runtimeConfig = useRuntimeConfig();
|
|
6
|
+
const title = runtimeConfig.nitro.openAPI?.meta?.title || "API Reference";
|
|
7
|
+
const description = runtimeConfig.nitro.openAPI?.meta?.description || "";
|
|
8
|
+
const openAPIEndpoint = runtimeConfig.nitro.openAPI?.route || "./_openapi.json";
|
|
9
|
+
// https://github.com/scalar/scalar
|
|
10
|
+
const _config = runtimeConfig.nitro.openAPI?.ui?.scalar;
|
|
11
|
+
const scalarConfig = {
|
|
12
|
+
..._config,
|
|
13
|
+
url: openAPIEndpoint,
|
|
14
|
+
spec: {
|
|
15
|
+
url: openAPIEndpoint,
|
|
16
|
+
..._config?.spec
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
// The default page title
|
|
20
|
+
event.res.headers.set("Content-Type", "text/html");
|
|
21
|
+
return `<!doctype html>
|
|
19
22
|
<html lang="en">
|
|
20
23
|
<head>
|
|
21
24
|
<meta charset="utf-8" />
|
|
@@ -29,16 +32,13 @@ export default defineHandler((event) => {
|
|
|
29
32
|
<body>
|
|
30
33
|
<script
|
|
31
34
|
id="api-reference"
|
|
32
|
-
data-configuration="${JSON.stringify(scalarConfig).split(
|
|
35
|
+
data-configuration="${JSON.stringify(scalarConfig).split("\"").join(""")}"
|
|
33
36
|
><\/script>
|
|
34
37
|
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"><\/script>
|
|
35
38
|
</body>
|
|
36
|
-
</html
|
|
37
|
-
);
|
|
39
|
+
</html>`;
|
|
38
40
|
});
|
|
39
|
-
const customTheme =
|
|
40
|
-
/* css */
|
|
41
|
-
`/* basic theme */
|
|
41
|
+
const customTheme = `/* basic theme */
|
|
42
42
|
.light-mode,
|
|
43
43
|
.light-mode .dark-mode {
|
|
44
44
|
--theme-background-1: #fff;
|
|
@@ -190,5 +190,4 @@ const customTheme = (
|
|
|
190
190
|
}
|
|
191
191
|
.section-container:nth-of-type(2) {
|
|
192
192
|
overflow: hidden;
|
|
193
|
-
}
|
|
194
|
-
);
|
|
193
|
+
}`;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { defineHandler } from "h3";
|
|
2
2
|
import { useRuntimeConfig } from "../runtime-config.mjs";
|
|
3
|
+
// https://github.com/swagger-api/swagger-ui
|
|
3
4
|
export default defineHandler((event) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/* html */
|
|
12
|
-
`<!doctype html>
|
|
5
|
+
const runtimeConfig = useRuntimeConfig();
|
|
6
|
+
const title = runtimeConfig.nitro.openAPI?.meta?.title || "API Reference";
|
|
7
|
+
const description = runtimeConfig.nitro.openAPI?.meta?.description || "";
|
|
8
|
+
const openAPIEndpoint = runtimeConfig.nitro.openAPI?.route || "./_openapi.json";
|
|
9
|
+
const CDN_BASE = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@^5";
|
|
10
|
+
event.res.headers.set("Content-Type", "text/html");
|
|
11
|
+
return `<!doctype html>
|
|
13
12
|
<html lang="en">
|
|
14
13
|
<head>
|
|
15
14
|
<meta charset="utf-8" />
|
|
@@ -39,6 +38,5 @@ export default defineHandler((event) => {
|
|
|
39
38
|
};
|
|
40
39
|
<\/script>
|
|
41
40
|
</body>
|
|
42
|
-
</html>
|
|
43
|
-
);
|
|
41
|
+
</html> `;
|
|
44
42
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { NitroRuntimeConfig } from "nitro/types";
|
|
2
2
|
export declare function useRuntimeConfig(): NitroRuntimeConfig;
|
|
3
3
|
type EnvOptions = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
prefix?: string;
|
|
5
|
+
altPrefix?: string;
|
|
6
|
+
envExpansion?: boolean;
|
|
7
7
|
};
|
|
8
|
-
export declare function applyEnv(obj: Record<string, any>, opts: EnvOptions, parentKey?: string)
|
|
8
|
+
export declare function applyEnv(obj: Record<string, any>, opts: EnvOptions, parentKey?: string);
|
|
9
9
|
export {};
|
|
@@ -1,49 +1,54 @@
|
|
|
1
1
|
import { snakeCase } from "scule";
|
|
2
2
|
export function useRuntimeConfig() {
|
|
3
|
-
|
|
3
|
+
return useRuntimeConfig._cached ||= getRuntimeConfig();
|
|
4
4
|
}
|
|
5
5
|
function getRuntimeConfig() {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
const runtimeConfig = globalThis.__NITRO_RUNTIME_CONFIG__ || process.env.RUNTIME_CONFIG || {};
|
|
7
|
+
const env = globalThis.process?.env || {};
|
|
8
|
+
applyEnv(runtimeConfig, {
|
|
9
|
+
prefix: "NITRO_",
|
|
10
|
+
altPrefix: runtimeConfig.nitro?.envPrefix ?? env?.NITRO_ENV_PREFIX ?? "_",
|
|
11
|
+
envExpansion: runtimeConfig.nitro?.envExpansion ?? env?.NITRO_ENV_EXPANSION ?? false
|
|
12
|
+
});
|
|
13
|
+
return runtimeConfig;
|
|
14
14
|
}
|
|
15
15
|
function getEnv(key, opts) {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const envKey = snakeCase(key).toUpperCase();
|
|
17
|
+
return process.env[opts.prefix + envKey] ?? process.env[opts.altPrefix + envKey];
|
|
18
18
|
}
|
|
19
19
|
function _isObject(input) {
|
|
20
|
-
|
|
20
|
+
return typeof input === "object" && !Array.isArray(input);
|
|
21
21
|
}
|
|
22
22
|
export function applyEnv(obj, opts, parentKey = "") {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
23
|
+
for (const key in obj) {
|
|
24
|
+
const subKey = parentKey ? `${parentKey}_${key}` : key;
|
|
25
|
+
const envValue = getEnv(subKey, opts);
|
|
26
|
+
if (_isObject(obj[key])) {
|
|
27
|
+
// Same as before
|
|
28
|
+
if (_isObject(envValue)) {
|
|
29
|
+
obj[key] = {
|
|
30
|
+
...obj[key],
|
|
31
|
+
...envValue
|
|
32
|
+
};
|
|
33
|
+
applyEnv(obj[key], opts, subKey);
|
|
34
|
+
} else if (envValue === undefined) {
|
|
35
|
+
applyEnv(obj[key], opts, subKey);
|
|
36
|
+
} else {
|
|
37
|
+
obj[key] = envValue ?? obj[key];
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
obj[key] = envValue ?? obj[key];
|
|
41
|
+
}
|
|
42
|
+
// Experimental env expansion
|
|
43
|
+
if (opts.envExpansion && typeof obj[key] === "string") {
|
|
44
|
+
obj[key] = _expandFromEnv(obj[key]);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return obj;
|
|
43
48
|
}
|
|
44
49
|
const envExpandRx = /\{\{([^{}]*)\}\}/g;
|
|
45
50
|
function _expandFromEnv(value) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
return value.replace(envExpandRx, (match, key) => {
|
|
52
|
+
return process.env[key] || match;
|
|
53
|
+
});
|
|
49
54
|
}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
1
|
import type { Server as HttpServer } from "node:http";
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
4
|
-
disabled: boolean;
|
|
5
|
-
signals: string[];
|
|
6
|
-
timeout: number;
|
|
7
|
-
forceExit: boolean;
|
|
8
|
-
};
|
|
9
|
-
export declare function setupGracefulShutdown(listener: HttpServer, nitroApp: NitroApp): void;
|
|
2
|
+
export declare function getGracefulShutdownConfig(): {};
|
|
3
|
+
export declare function setupGracefulShutdown(listener: HttpServer);
|