diff --git a/examples/express/nitro.config.ts b/examples/express/nitro.config.ts index d59eb30666..d789aacc10 100644 --- a/examples/express/nitro.config.ts +++ b/examples/express/nitro.config.ts @@ -1,5 +1,7 @@ import { defineNitroConfig } from "nitro/config"; export default defineNitroConfig({ - serverEntry: { format: "node" }, + routes: { + "/**": { handler: "./server", format: "node" }, + }, }); diff --git a/src/build/plugins/routing.ts b/src/build/plugins/routing.ts index 3faabff8a4..3d737284f9 100644 --- a/src/build/plugins/routing.ts +++ b/src/build/plugins/routing.ts @@ -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"; diff --git a/src/config/defaults.ts b/src/config/defaults.ts index 671c798b4e..918d463579 100644 --- a/src/config/defaults.ts +++ b/src/config/defaults.ts @@ -52,6 +52,7 @@ export const NitroDefaults: NitroConfig = { handlers: [], devHandlers: [], errorHandler: undefined, + routes: {}, routeRules: {}, prerender: { autoSubfolderIndex: true, diff --git a/src/config/resolvers/paths.ts b/src/config/resolvers/paths.ts index 539dfb5ff1..0682425fb8 100644 --- a/src/config/resolvers/paths.ts +++ b/src/config/resolvers/paths.ts @@ -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.` ); } } diff --git a/src/config/resolvers/route-rules.ts b/src/config/resolvers/route-rules.ts index 524ac564b3..ea155bac7b 100644 --- a/src/config/resolvers/route-rules.ts +++ b/src/config/resolvers/route-rules.ts @@ -1,4 +1,3 @@ -import { defu } from "defu"; import type { NitroConfig, NitroOptions, @@ -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); } diff --git a/src/routing.ts b/src/routing.ts index e3ba357fc8..07497951bd 100644 --- a/src/routing.ts +++ b/src/routing.ts @@ -38,8 +38,6 @@ export function initNitroRouting(nitro: Nitro) { NitroEventHandler & { _importHash: string } >(); - const warns: Set = new Set(); - const sync = () => { // Update route rules routeRules._update( @@ -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: "/**", diff --git a/src/types/config.ts b/src/types/config.ts index 91a48cf406..7cfe8698a7 100644 --- a/src/types/config.ts +++ b/src/types/config.ts @@ -183,12 +183,16 @@ export interface NitroOptions extends PresetOptions { // Routing baseURL: string; apiBaseURL: string; - serverEntry: { handler?: string; format?: EventHandlerFormat } | undefined; + + routes: Record>; 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`) @@ -270,7 +274,6 @@ export interface NitroConfig Omit< NitroOptions, | "routeRules" - | "serverEntry" | "rollupConfig" | "preset" | "compatibilityDate" @@ -286,7 +289,6 @@ export interface NitroConfig rollupConfig?: Partial; compatibilityDate?: CompatibilityDateSpec; unenv?: UnenvPreset | UnenvPreset[]; - serverEntry?: string | NitroOptions["serverEntry"]; } // ------------------------------------------------------------ diff --git a/test/minimal/minimal.test.ts b/test/minimal/minimal.test.ts index ee0d772c3a..98ed28a9a5 100644 --- a/test/minimal/minimal.test.ts +++ b/test/minimal/minimal.test.ts @@ -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)" : ""),