Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion examples/express/nitro.config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { defineNitroConfig } from "nitro/config";

export default defineNitroConfig({
serverEntry: { format: "node" },
routes: {
"/**": { handler: "./server", format: "node" },
},
});
1 change: 0 additions & 1 deletion src/build/plugins/routing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ export function routing(nitro: Nitro) {

return /* js */ `
import * as __routeRules__ from "nitro/runtime/internal/route-rules";
${nitro.options.serverEntry?.handler ? `import __serverEntry__ from ${JSON.stringify(nitro.options.serverEntry.handler)};` : ""}
import * as srvxNode from "srvx/node"
import * as h3 from "h3";

Expand Down
1 change: 1 addition & 0 deletions src/config/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export const NitroDefaults: NitroConfig = {
handlers: [],
devHandlers: [],
errorHandler: undefined,
routes: {},
routeRules: {},
prerender: {
autoSubfolderIndex: true,
Expand Down
22 changes: 5 additions & 17 deletions src/config/resolvers/paths.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,28 +70,16 @@ export async function resolvePathOptions(options: NitroOptions) {
options.scanDirs = [...new Set(options.scanDirs.map((dir) => dir + "/"))];

// Resolve server entry
if (typeof options.serverEntry === "string") {
options.serverEntry = { handler: options.serverEntry };
}
if (options.serverEntry?.handler) {
options.serverEntry.handler = resolveModulePath(
resolveNitroPath(options.serverEntry.handler, options),
{
from: options.scanDirs,
extensions: RESOLVE_EXTENSIONS,
}
)!;
} else {
const defaultServerEntry = resolveModulePath("./server", {
if (!options.routes["/**"]?.handler) {
const serverEntry = resolveModulePath("./server", {
from: options.scanDirs,
extensions: RESOLVE_EXTENSIONS,
try: true,
});
if (defaultServerEntry) {
options.serverEntry ??= {};
options.serverEntry.handler = defaultServerEntry;
if (serverEntry) {
options.routes["/**"] = { handler: serverEntry };
consola.info(
`Using \`${prettyPath(defaultServerEntry)}\` as server entry.`
`Using \`${prettyPath(serverEntry)}\` as default route handler.`
);
}
}
Expand Down
4 changes: 0 additions & 4 deletions src/config/resolvers/route-rules.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { defu } from "defu";
import type {
NitroConfig,
NitroOptions,
Expand All @@ -8,9 +7,6 @@ import type {
import { withLeadingSlash } from "ufo";

export async function resolveRouteRulesOptions(options: NitroOptions) {
// Backward compatibility for options.routes
options.routeRules = defu(options.routeRules, (options as any).routes || {});

options.routeRules = normalizeRouteRules(options);
}

Expand Down
14 changes: 4 additions & 10 deletions src/routing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ export function initNitroRouting(nitro: Nitro) {
NitroEventHandler & { _importHash: string }
>();

const warns: Set<string> = new Set();

const sync = () => {
// Update route rules
routeRules._update(
Expand All @@ -55,16 +53,12 @@ export function initNitroRouting(nitro: Nitro) {

// Update routes
const _routes = [
...nitro.scannedHandlers,
...Object.entries(nitro.options.routes).flatMap(([route, handler]) => {
return { ...handler, route, middleware: false };
}),
...nitro.options.handlers,
...nitro.scannedHandlers,
].filter((h) => h && !h.middleware && matchesEnv(h));
if (nitro.options.serverEntry?.handler) {
_routes.unshift({
route: "/**",
handler: nitro.options.serverEntry.handler,
format: nitro.options.serverEntry.format,
});
}
if (nitro.options.renderer?.entry) {
_routes.push({
route: "/**",
Expand Down
10 changes: 6 additions & 4 deletions src/types/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,16 @@ export interface NitroOptions extends PresetOptions {
// Routing
baseURL: string;
apiBaseURL: string;
serverEntry: { handler?: string; format?: EventHandlerFormat } | undefined;

routes: Record<string, Omit<NitroEventHandler, "route" | "middleware">>;
handlers: NitroEventHandler[];
routeRules: { [path: string]: NitroRouteRules };
devHandlers: NitroDevEventHandler[];

routeRules: { [path: string]: NitroRouteRules };

errorHandler: string | string[];
devErrorHandler: NitroErrorHandler;

prerender: {
/**
* Prerender HTML routes within subfolders (`/test` would produce `/test/index.html`)
Expand Down Expand Up @@ -270,7 +274,6 @@ export interface NitroConfig
Omit<
NitroOptions,
| "routeRules"
| "serverEntry"
| "rollupConfig"
| "preset"
| "compatibilityDate"
Expand All @@ -286,7 +289,6 @@ export interface NitroConfig
rollupConfig?: Partial<RollupConfig>;
compatibilityDate?: CompatibilityDateSpec;
unenv?: UnenvPreset | UnenvPreset[];
serverEntry?: string | NitroOptions["serverEntry"];
}

// ------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion test/minimal/minimal.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ describe("minimal fixture", () => {
it("bundle size", async () => {
const { sizeKB } = await analyzeDir(outDir);
const expectedSize = bundleSizes[builder][minify ? 1 : 0];
// expect(Math.round(sizeKB)).toBe(expectedSize);
expect(Math.round(sizeKB)).toBe(expectedSize);

results.push({
builder: builder + (minify ? " (minified)" : ""),
Expand Down
Loading