nitro-nightly 3.0.1-20260120-140218-d2383f00 → 3.0.1-20260121-181105-22bd0c63
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 +1019 -1019
- package/dist/_build/rolldown.mjs +2 -2
- package/dist/_build/rollup.mjs +2 -2
- package/dist/_libs/commondir+is-reference.mjs +1 -1
- package/dist/_libs/hasown+resolve+deepmerge.mjs +1 -1
- package/dist/_libs/plugin-alias.mjs +3 -1
- package/dist/_libs/plugin-inject.mjs +4 -2
- package/dist/_libs/plugin-json.mjs +1 -1
- package/dist/types/index.d.mts +9 -17
- package/dist/vite.mjs +42 -32
- package/package.json +1 -1
package/dist/_build/rolldown.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "../_common.mjs";
|
|
2
|
-
import { _ as writeTypes,
|
|
2
|
+
import { _ as writeTypes, at as join, d as libChunkName, f as baseBuildConfig, h as writeBuildInfo, l as NODE_MODULES_RE, n as baseBuildPlugins, st as relative, u as getChunkName } from "./common.mjs";
|
|
3
3
|
import { i as debounce } from "../_libs/rc9+c12+dotenv.mjs";
|
|
4
4
|
import { t as formatCompatibilityDate } from "../_libs/compatx.mjs";
|
|
5
5
|
import { n as scanHandlers } from "../_chunks/nitro2.mjs";
|
|
@@ -65,7 +65,7 @@ const getRolldownConfig = async (nitro) => {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
|
-
config = defu(nitro.options.rollupConfig, config);
|
|
68
|
+
config = defu(nitro.options.rolldownConfig, nitro.options.rollupConfig, config);
|
|
69
69
|
const outputConfig = config.output;
|
|
70
70
|
if (outputConfig.inlineDynamicImports || outputConfig.format === "iife") delete outputConfig.codeSplitting;
|
|
71
71
|
return config;
|
package/dist/_build/rollup.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import "../_common.mjs";
|
|
2
|
-
import { _ as writeTypes,
|
|
2
|
+
import { _ as writeTypes, at as join, d as libChunkName, f as baseBuildConfig, h as writeBuildInfo, it as isAbsolute, l as NODE_MODULES_RE, n as baseBuildPlugins, st as relative, t as oxc, u as getChunkName } from "./common.mjs";
|
|
3
3
|
import { i as debounce } from "../_libs/rc9+c12+dotenv.mjs";
|
|
4
4
|
import { t as formatCompatibilityDate } from "../_libs/compatx.mjs";
|
|
5
5
|
import { n as scanHandlers } from "../_chunks/nitro2.mjs";
|
|
6
6
|
import { n as watch$1 } from "../_libs/readdirp+chokidar.mjs";
|
|
7
7
|
import { t as alias } from "../_libs/plugin-alias.mjs";
|
|
8
|
-
import {
|
|
8
|
+
import { n as inject } from "../_libs/plugin-inject.mjs";
|
|
9
9
|
import { t as generateFSTree } from "../_chunks/utils.mjs";
|
|
10
10
|
import { t as commonjs } from "../_libs/commondir+is-reference.mjs";
|
|
11
11
|
import { t as json } from "../_libs/plugin-json.mjs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as __toESM, r as __require, t as __commonJSMin } from "../_common.mjs";
|
|
2
|
-
import { F as Builder, S as MagicString, c as
|
|
2
|
+
import { F as Builder, S as MagicString, c as walk, i as createFilter, o as extractAssignedNames, r as attachScopes, s as makeLegalIdentifier } from "../_build/common.mjs";
|
|
3
3
|
import { existsSync, readFileSync, statSync } from "fs";
|
|
4
4
|
import { basename, dirname, extname, join, relative, resolve, sep } from "path";
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as __toESM, r as __require, t as __commonJSMin } from "../_common.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { i as createFilter } from "../_build/common.mjs";
|
|
3
3
|
import nativeFs, { realpathSync } from "fs";
|
|
4
4
|
import path, { dirname, extname, normalize, resolve, sep } from "path";
|
|
5
5
|
import { builtinModules } from "module";
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { n as __exportAll } from "../_common.mjs";
|
|
1
2
|
import path from "node:path";
|
|
2
3
|
|
|
3
4
|
//#region node_modules/.pnpm/@rollup+plugin-alias@6.0.0_rollup@4.55.2/node_modules/@rollup/plugin-alias/dist/index.js
|
|
5
|
+
var dist_exports = /* @__PURE__ */ __exportAll({ default: () => alias });
|
|
4
6
|
function matches(pattern, importee) {
|
|
5
7
|
if (pattern instanceof RegExp) return pattern.test(importee);
|
|
6
8
|
if (importee.length < pattern.length) return false;
|
|
@@ -61,4 +63,4 @@ function alias(options = {}) {
|
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
//#endregion
|
|
64
|
-
export { alias as t };
|
|
66
|
+
export { dist_exports as n, alias as t };
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as __exportAll } from "../_common.mjs";
|
|
2
|
+
import { S as MagicString, c as walk, i as createFilter, r as attachScopes, s as makeLegalIdentifier } from "../_build/common.mjs";
|
|
2
3
|
import { sep } from "path";
|
|
3
4
|
|
|
4
5
|
//#region node_modules/.pnpm/@rollup+plugin-inject@5.0.5_rollup@4.55.2/node_modules/@rollup/plugin-inject/dist/es/index.js
|
|
6
|
+
var es_exports = /* @__PURE__ */ __exportAll({ default: () => inject });
|
|
5
7
|
var escape = function(str) {
|
|
6
8
|
return str.replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&");
|
|
7
9
|
};
|
|
@@ -130,4 +132,4 @@ function inject(options) {
|
|
|
130
132
|
}
|
|
131
133
|
|
|
132
134
|
//#endregion
|
|
133
|
-
export { inject as t };
|
|
135
|
+
export { inject as n, es_exports as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as dataToEsm, i as createFilter } from "../_build/common.mjs";
|
|
2
2
|
|
|
3
3
|
//#region node_modules/.pnpm/@rollup+plugin-json@6.1.0_rollup@4.55.2/node_modules/@rollup/plugin-json/dist/es/index.js
|
|
4
4
|
function json(options) {
|
package/dist/types/index.d.mts
CHANGED
|
@@ -29,7 +29,8 @@ import { ConnectorName } from "db0";
|
|
|
29
29
|
import { BuiltinDriverName } from "unstorage";
|
|
30
30
|
import { JsxOptions, TransformOptions } from "oxc-transform";
|
|
31
31
|
import { MinifyOptions } from "oxc-minify";
|
|
32
|
-
import { InputOptions, OutputOptions } from "
|
|
32
|
+
import { InputOptions, OutputOptions } from "rolldown";
|
|
33
|
+
import { InputOptions as InputOptions$1, OutputOptions as OutputOptions$1 } from "rollup";
|
|
33
34
|
import { Nitro as Nitro$1, RunnerMessageListener as RunnerMessageListener$1 } from "nitro/types";
|
|
34
35
|
import { FetchOptions, FetchRequest, FetchResponse } from "ofetch";
|
|
35
36
|
import { ExecutionContext, ForwardableEmailMessage, MessageBatch, ScheduledController, TraceItem } from "@cloudflare/workers-types";
|
|
@@ -2576,29 +2577,19 @@ interface NitroBuildInfo {
|
|
|
2576
2577
|
config?: Partial<PresetOptions>;
|
|
2577
2578
|
}
|
|
2578
2579
|
//#endregion
|
|
2579
|
-
//#region src/types/
|
|
2580
|
-
type RollupConfig = InputOptions & {
|
|
2580
|
+
//#region src/types/build.d.ts
|
|
2581
|
+
type RollupConfig = InputOptions$1 & {
|
|
2582
|
+
output: OutputOptions$1;
|
|
2583
|
+
};
|
|
2584
|
+
type RolldownConfig = InputOptions & {
|
|
2581
2585
|
output: OutputOptions;
|
|
2582
2586
|
};
|
|
2583
|
-
type VirtualModule = string | (() => string | Promise<string>);
|
|
2584
|
-
interface RollupVirtualOptions {
|
|
2585
|
-
[id: string]: VirtualModule;
|
|
2586
|
-
}
|
|
2587
2587
|
interface OXCOptions {
|
|
2588
2588
|
minify?: MinifyOptions;
|
|
2589
2589
|
transform?: Omit<TransformOptions, "jsx"> & {
|
|
2590
2590
|
jsx?: JsxOptions;
|
|
2591
2591
|
};
|
|
2592
2592
|
}
|
|
2593
|
-
interface ServerAssetOptions {
|
|
2594
|
-
inline: boolean;
|
|
2595
|
-
dirs: {
|
|
2596
|
-
[assetdir: string]: {
|
|
2597
|
-
dir: string;
|
|
2598
|
-
meta?: boolean;
|
|
2599
|
-
};
|
|
2600
|
-
};
|
|
2601
|
-
}
|
|
2602
2593
|
//#endregion
|
|
2603
2594
|
//#region src/types/hooks.d.ts
|
|
2604
2595
|
type HookResult = void | Promise<void>;
|
|
@@ -2881,6 +2872,7 @@ interface NitroOptions extends PresetOptions {
|
|
|
2881
2872
|
};
|
|
2882
2873
|
builder?: "rollup" | "rolldown" | "vite";
|
|
2883
2874
|
rollupConfig?: RollupConfig;
|
|
2875
|
+
rolldownConfig?: RolldownConfig;
|
|
2884
2876
|
entry: string;
|
|
2885
2877
|
unenv: Preset[];
|
|
2886
2878
|
alias: Record<string, string>;
|
|
@@ -3063,4 +3055,4 @@ declare module "srvx" {
|
|
|
3063
3055
|
}
|
|
3064
3056
|
}
|
|
3065
3057
|
//#endregion
|
|
3066
|
-
export { $Fetch, AssetMeta, AvailableRouterMethod, Base$Fetch, CacheEntry, CacheOptions, CachedEventHandlerOptions, CaptureError, CapturedErrorContext, CompressOptions, DatabaseConnectionConfig, DatabaseConnectionConfigs, DatabaseConnectionName, EnvRunner, EventHandlerFormat, ExtractedRouteMethod, FetchHandler, H3Event$Fetch, H3EventFetch, HTTPstatus, InternalApi, LoadConfigOptions, MatchedRouteRule, MatchedRouteRules, MatchedRoutes, MiddlewareOf, Nitro, NitroApp, NitroAppPlugin, NitroAsyncContext, NitroBuildInfo, NitroConfig, NitroDevEventHandler, NitroDynamicConfig, NitroErrorHandler, NitroEventHandler, NitroFetchOptions, NitroFetchRequest, NitroFrameworkInfo, NitroHooks, NitroImportMeta, NitroModule, NitroModuleInput, type NitroOpenAPIConfig, NitroOptions, NitroPreset, NitroPresetMeta, NitroRouteConfig, NitroRouteMeta, NitroRouteRules, NitroRuntimeConfig, NitroRuntimeConfigApp, NitroRuntimeHooks, NitroTypes, OXCOptions, PrerenderGenerateRoute, PrerenderRoute, PublicAsset, PublicAssetDir, RenderContext, RenderHandler, RenderResponse, ResponseCacheEntry,
|
|
3058
|
+
export { $Fetch, AssetMeta, AvailableRouterMethod, Base$Fetch, CacheEntry, CacheOptions, CachedEventHandlerOptions, CaptureError, CapturedErrorContext, CompressOptions, DatabaseConnectionConfig, DatabaseConnectionConfigs, DatabaseConnectionName, EnvRunner, EventHandlerFormat, ExtractedRouteMethod, FetchHandler, H3Event$Fetch, H3EventFetch, HTTPstatus, InternalApi, LoadConfigOptions, MatchedRouteRule, MatchedRouteRules, MatchedRoutes, MiddlewareOf, Nitro, NitroApp, NitroAppPlugin, NitroAsyncContext, NitroBuildInfo, NitroConfig, NitroDevEventHandler, NitroDynamicConfig, NitroErrorHandler, NitroEventHandler, NitroFetchOptions, NitroFetchRequest, NitroFrameworkInfo, NitroHooks, NitroImportMeta, NitroModule, NitroModuleInput, type NitroOpenAPIConfig, NitroOptions, NitroPreset, NitroPresetMeta, NitroRouteConfig, NitroRouteMeta, NitroRouteRules, NitroRuntimeConfig, NitroRuntimeConfigApp, NitroRuntimeHooks, NitroTypes, OXCOptions, PrerenderGenerateRoute, PrerenderRoute, PublicAsset, PublicAssetDir, RenderContext, RenderHandler, RenderResponse, ResponseCacheEntry, RolldownConfig, RollupConfig, RunnerMessageListener, RunnerRPCHooks, Serialize, SerializeObject, SerializeTuple, ServerAssetDir, type ServerRequest, Simplify, StorageMounts, Task, TaskContext, TaskEvent, TaskMeta, TaskPayload, TaskResult, TaskRunnerOptions, TypedInternalResponse, UpgradeHandler, WorkerAddress, WorkerHooks };
|
package/dist/vite.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./_common.mjs";
|
|
2
|
-
import { $ as resolveModulePath, B as T, D as prepare, I as prettyPath, O as copyPublicAssets, V as a,
|
|
2
|
+
import { $ as resolveModulePath, B as T, D as prepare, I as prettyPath, O as copyPublicAssets, V as a, at as join$1, ct as resolve$1, d as libChunkName, f as baseBuildConfig, h as writeBuildInfo, it as isAbsolute$1, l as NODE_MODULES_RE, m as getBuildInfo, n as baseBuildPlugins, nt as dirname$1, st as relative$1, tt as basename$1, u as getChunkName } from "./_build/common.mjs";
|
|
3
3
|
import { i as debounce } from "./_libs/rc9+c12+dotenv.mjs";
|
|
4
4
|
import { t as formatCompatibilityDate } from "./_libs/compatx.mjs";
|
|
5
5
|
import { i as createNitro } from "./_chunks/nitro.mjs";
|
|
@@ -7,8 +7,6 @@ import "./_libs/tsconfck.mjs";
|
|
|
7
7
|
import { n as scanHandlers } from "./_chunks/nitro2.mjs";
|
|
8
8
|
import { i as NodeEnvRunner, r as NitroDevApp } from "./_chunks/dev.mjs";
|
|
9
9
|
import { n as watch$1 } from "./_libs/readdirp+chokidar.mjs";
|
|
10
|
-
import { t as alias } from "./_libs/plugin-alias.mjs";
|
|
11
|
-
import { t as inject } from "./_libs/plugin-inject.mjs";
|
|
12
10
|
import { n as assetsPlugin } from "./_libs/pluginutils.mjs";
|
|
13
11
|
import consola$1 from "consola";
|
|
14
12
|
import { existsSync, watch } from "node:fs";
|
|
@@ -22,19 +20,14 @@ import { NodeRequest, sendNodeResponse } from "srvx/node";
|
|
|
22
20
|
import { DevEnvironment } from "vite";
|
|
23
21
|
import { spawn } from "node:child_process";
|
|
24
22
|
|
|
25
|
-
//#region src/build/vite/
|
|
26
|
-
const
|
|
23
|
+
//#region src/build/vite/bundler.ts
|
|
24
|
+
const getBundlerConfig = async (ctx) => {
|
|
27
25
|
const nitro$1 = ctx.nitro;
|
|
28
26
|
const base = baseBuildConfig(nitro$1);
|
|
29
|
-
|
|
27
|
+
const commonConfig = {
|
|
30
28
|
input: nitro$1.options.entry,
|
|
31
29
|
external: [...base.env.external],
|
|
32
|
-
plugins: [
|
|
33
|
-
...await baseBuildPlugins(nitro$1, base),
|
|
34
|
-
alias({ entries: base.aliases }),
|
|
35
|
-
!ctx._isRolldown && inject(base.env.inject)
|
|
36
|
-
].filter(Boolean),
|
|
37
|
-
...ctx._isRolldown ? { transform: { inject: base.env.inject } } : {},
|
|
30
|
+
plugins: [...await baseBuildPlugins(nitro$1, base)].filter(Boolean),
|
|
38
31
|
treeshake: { moduleSideEffects(id) {
|
|
39
32
|
return nitro$1.options.moduleSideEffects.some((p) => id.startsWith(p));
|
|
40
33
|
} },
|
|
@@ -42,27 +35,43 @@ const getViteRollupConfig = async (ctx) => {
|
|
|
42
35
|
if (!base.ignoreWarningCodes.has(warning.code || "")) warn(warning);
|
|
43
36
|
},
|
|
44
37
|
output: {
|
|
38
|
+
dir: nitro$1.options.output.serverDir,
|
|
45
39
|
format: "esm",
|
|
46
40
|
entryFileNames: "index.mjs",
|
|
47
41
|
chunkFileNames: (chunk) => getChunkName(chunk, nitro$1),
|
|
48
|
-
...ctx._isRolldown ? { codeSplitting: { groups: [{
|
|
49
|
-
test: NODE_MODULES_RE,
|
|
50
|
-
name: (id) => libChunkName(id)
|
|
51
|
-
}] } } : { manualChunks(id) {
|
|
52
|
-
if (NODE_MODULES_RE.test(id)) return libChunkName(id);
|
|
53
|
-
} },
|
|
54
42
|
inlineDynamicImports: nitro$1.options.inlineDynamicImports,
|
|
55
|
-
dir: nitro$1.options.output.serverDir,
|
|
56
|
-
generatedCode: { ...ctx._isRolldown ? {} : { constBindings: true } },
|
|
57
|
-
...ctx._isRolldown ? {} : { sourcemapExcludeSources: true },
|
|
58
43
|
sourcemapIgnoreList: (id) => id.includes("node_modules")
|
|
59
44
|
}
|
|
60
45
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
46
|
+
if (ctx._isRolldown) return {
|
|
47
|
+
base,
|
|
48
|
+
rollupConfig: void 0,
|
|
49
|
+
rolldownConfig: defu({
|
|
50
|
+
transform: { inject: base.env.inject },
|
|
51
|
+
output: { codeSplitting: { groups: [{
|
|
52
|
+
test: NODE_MODULES_RE,
|
|
53
|
+
name: (id) => libChunkName(id)
|
|
54
|
+
}] } }
|
|
55
|
+
}, nitro$1.options.rolldownConfig, nitro$1.options.rollupConfig, commonConfig)
|
|
65
56
|
};
|
|
57
|
+
else {
|
|
58
|
+
const inject = (await import("./_libs/plugin-inject.mjs").then((n) => n.t)).default;
|
|
59
|
+
const alias = (await import("./_libs/plugin-alias.mjs").then((n) => n.n)).default;
|
|
60
|
+
return {
|
|
61
|
+
base,
|
|
62
|
+
rolldownConfig: void 0,
|
|
63
|
+
rollupConfig: defu({
|
|
64
|
+
plugins: [inject(base.env.inject), alias({ entries: base.aliases })],
|
|
65
|
+
output: {
|
|
66
|
+
sourcemapExcludeSources: true,
|
|
67
|
+
generatedCode: { constBindings: true },
|
|
68
|
+
manualChunks(id) {
|
|
69
|
+
if (NODE_MODULES_RE.test(id)) return libChunkName(id);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}, nitro$1.options.rolldownConfig, nitro$1.options.rollupConfig, commonConfig)
|
|
73
|
+
};
|
|
74
|
+
}
|
|
66
75
|
};
|
|
67
76
|
|
|
68
77
|
//#endregion
|
|
@@ -307,7 +316,8 @@ function createNitroEnvironment(ctx) {
|
|
|
307
316
|
return {
|
|
308
317
|
consumer: "server",
|
|
309
318
|
build: {
|
|
310
|
-
rollupOptions: ctx.rollupConfig
|
|
319
|
+
rollupOptions: ctx.bundlerConfig.rollupConfig,
|
|
320
|
+
rolldownOptions: ctx.bundlerConfig.rolldownConfig,
|
|
311
321
|
minify: ctx.nitro.options.minify,
|
|
312
322
|
emptyOutDir: false,
|
|
313
323
|
sourcemap: ctx.nitro.options.sourcemap,
|
|
@@ -317,7 +327,7 @@ function createNitroEnvironment(ctx) {
|
|
|
317
327
|
noExternal: ctx.nitro.options.dev ? [
|
|
318
328
|
/^nitro$/,
|
|
319
329
|
/* @__PURE__ */ new RegExp(`^(${runtimeDependencies.join("|")})$`),
|
|
320
|
-
...ctx.
|
|
330
|
+
...ctx.bundlerConfig.base.noExternal
|
|
321
331
|
] : true,
|
|
322
332
|
conditions: ctx.nitro.options.exportConditions,
|
|
323
333
|
externalConditions: ctx.nitro.options.exportConditions?.filter((c) => !/browser|wasm|module/.test(c))
|
|
@@ -493,7 +503,7 @@ function nitroInit(ctx) {
|
|
|
493
503
|
applyToEnvironment(env) {
|
|
494
504
|
if (env.name === "nitro" && ctx.nitro?.options.dev) {
|
|
495
505
|
debug("[init] Adding rollup plugins for dev");
|
|
496
|
-
return [...ctx.rollupConfig?.
|
|
506
|
+
return [...ctx.bundlerConfig?.rolldownConfig?.plugins || ctx.bundlerConfig?.rollupConfig?.plugins || []];
|
|
497
507
|
}
|
|
498
508
|
}
|
|
499
509
|
};
|
|
@@ -552,10 +562,10 @@ function nitroMain(ctx) {
|
|
|
552
562
|
apply: (_config, configEnv) => !configEnv.isPreview,
|
|
553
563
|
async config(userConfig, _configEnv) {
|
|
554
564
|
debug("[main] Extending config (appType, resolve, server)");
|
|
555
|
-
if (!ctx.
|
|
565
|
+
if (!ctx.bundlerConfig) throw new Error("Bundler config is not initialized yet!");
|
|
556
566
|
return {
|
|
557
567
|
appType: userConfig.appType || "custom",
|
|
558
|
-
resolve: { alias: ctx.
|
|
568
|
+
resolve: { alias: ctx.bundlerConfig.base.aliases },
|
|
559
569
|
builder: { sharedConfigBuild: true },
|
|
560
570
|
server: {
|
|
561
571
|
port: Number.parseInt(process.env.PORT || "") || userConfig.server?.port || useNitro(ctx).options.devServer?.port || 3e3,
|
|
@@ -705,8 +715,8 @@ async function setupNitroContext(ctx, configEnv, userConfig) {
|
|
|
705
715
|
polyfill: ["#nitro-vite-setup"]
|
|
706
716
|
});
|
|
707
717
|
await ctx.nitro.hooks.callHook("build:before", ctx.nitro);
|
|
708
|
-
ctx.
|
|
709
|
-
await ctx.nitro.hooks.callHook("rollup:before", ctx.nitro, ctx.rollupConfig.
|
|
718
|
+
ctx.bundlerConfig = await getBundlerConfig(ctx);
|
|
719
|
+
await ctx.nitro.hooks.callHook("rollup:before", ctx.nitro, ctx.bundlerConfig.rollupConfig || ctx.bundlerConfig.rolldownConfig);
|
|
710
720
|
if (ctx.nitro.options.dev) getEnvRunner(ctx);
|
|
711
721
|
ctx.nitro.fetch = (req) => getEnvRunner(ctx).fetch(req);
|
|
712
722
|
if (ctx.nitro.options.dev && !ctx.devApp) ctx.devApp = new NitroDevApp(ctx.nitro);
|