Skip to content

Commit 0b4383a

Browse files
committed
fix: try to resolve server entry also from index file
1 parent 77b77ff commit 0b4383a

2 files changed

Lines changed: 52 additions & 0 deletions

File tree

src/config/resolvers/paths.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export async function resolvePathOptions(options: NitroOptions) {
9696
options.serverDir && options.serverDir !== options.rootDir
9797
? [options.serverDir, options.rootDir]
9898
: options.rootDir,
99+
suffixes: ["", "/index"],
99100
extensions: RESOLVE_EXTENSIONS.flatMap((ext) => [ext, `.node${ext}`]),
100101
});
101102
if (detected) {

test/unit/server-entry.test.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
2+
import { tmpdir } from "node:os";
3+
import { dirname, join } from "pathe";
4+
import { afterEach, describe, expect, it, vi } from "vitest";
5+
6+
vi.mock("nitro/meta", () => ({
7+
version: "0.0.0-test",
8+
runtimeDir: "/tmp",
9+
presetsDir: "/tmp",
10+
pkgDir: "/tmp",
11+
runtimeDependencies: [],
12+
}));
13+
14+
const tempDirs: string[] = [];
15+
16+
async function detectServerEntry(entry: string) {
17+
const rootDir = await mkdtemp(join(tmpdir(), "nitro-server-entry-"));
18+
tempDirs.push(rootDir);
19+
20+
const file = join(rootDir, entry);
21+
await mkdir(dirname(file), { recursive: true });
22+
await writeFile(file, `export default { fetch: () => new Response("ok") };\n`);
23+
24+
const { loadOptions } = await import("../../src/config/loader.ts");
25+
const { serverEntry } = await loadOptions({
26+
rootDir,
27+
preset: "node-server",
28+
compatibilityDate: "latest",
29+
});
30+
return serverEntry as { handler: string } | false;
31+
}
32+
33+
afterEach(async () => {
34+
for (const dir of tempDirs.splice(0, tempDirs.length)) {
35+
await rm(dir, { recursive: true, force: true });
36+
}
37+
});
38+
39+
describe("server entry detection", () => {
40+
it("detects `server.ts` in the root directory", async () => {
41+
const serverEntry = await detectServerEntry("server.ts");
42+
expect(serverEntry).toBeTruthy();
43+
expect((serverEntry as { handler: string }).handler).toContain("/server.ts");
44+
});
45+
46+
it("detects `server/index.ts`", async () => {
47+
const serverEntry = await detectServerEntry("server/index.ts");
48+
expect(serverEntry).toBeTruthy();
49+
expect((serverEntry as { handler: string }).handler).toContain("/server/index.ts");
50+
});
51+
});

0 commit comments

Comments
 (0)