Skip to content

Commit 4494570

Browse files
authored
feat: opt-in filesystem routing using serverDir config (#3719)
1 parent 90a9dda commit 4494570

File tree

108 files changed

+83
-45
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+83
-45
lines changed
File renamed without changes.
File renamed without changes.

playground/vite.config.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,10 @@ import tailwindcss from "@tailwindcss/vite";
55

66
export default defineConfig({
77
plugins: [nitro(), tailwindcss()],
8+
nitro: {
9+
// serverDir: "server",
10+
routes: {
11+
"/quote": { handler: "./server/routes/quote.ts" },
12+
},
13+
},
814
});

src/build/assets.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,18 @@ export async function copyPublicAssets(nitro: Nitro) {
3636
return;
3737
}
3838
for (const asset of nitro.options.publicAssets) {
39-
const srcDir = asset.dir;
39+
const assetDir = asset.dir;
4040
const dstDir = join(nitro.options.output.publicDir, asset.baseURL!);
41-
if (await isDirectory(srcDir)) {
42-
const includePatterns = getIncludePatterns(nitro, srcDir);
41+
if (await isDirectory(assetDir)) {
42+
const includePatterns = getIncludePatterns(nitro, assetDir);
4343
const publicAssets = await glob(includePatterns, {
44-
cwd: srcDir,
44+
cwd: assetDir,
4545
absolute: false,
4646
dot: true,
4747
});
4848
await Promise.all(
4949
publicAssets.map(async (file) => {
50-
const src = join(srcDir, file);
50+
const src = join(assetDir, file);
5151
const dst = join(dstDir, file);
5252
if (!existsSync(dst)) {
5353
await fsp.cp(src, dst);
@@ -64,7 +64,7 @@ export async function copyPublicAssets(nitro: Nitro) {
6464
);
6565
}
6666

67-
function getIncludePatterns(nitro: Nitro, srcDir: string) {
67+
function getIncludePatterns(nitro: Nitro, assetDir: string) {
6868
return [
6969
"**",
7070
...nitro.options.ignore.map((p) => {
@@ -75,7 +75,7 @@ function getIncludePatterns(nitro: Nitro, srcDir: string) {
7575
// Make non-glob patterns relative to publicAssetDir
7676
(pattern.startsWith("*")
7777
? pattern
78-
: relative(srcDir, resolve(nitro.options.srcDir, pattern)))
78+
: relative(assetDir, resolve(nitro.options.rootDir, pattern)))
7979
);
8080
}),
8181
].filter((p) => !PARENT_DIR_GLOB_RE.test(p));

src/build/plugins.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export function baseBuildPlugins(nitro: Nitro, base: BaseBuildConfig) {
131131
? [(id: string) => id?.endsWith(".wasm")]
132132
: []),
133133
runtimeDir,
134-
nitro.options.srcDir,
134+
nitro.options.serverDir,
135135
...nitro.options.handlers
136136
.map((m) => m.handler)
137137
.filter((i) => typeof i === "string"),
@@ -140,7 +140,7 @@ export function baseBuildPlugins(nitro: Nitro, base: BaseBuildConfig) {
140140
nitro.options.experimental.bundleRuntimeDependencies === false
141141
? []
142142
: runtimeDependencies),
143-
],
143+
].filter(Boolean) as string[],
144144
traceOptions: {
145145
base: "/",
146146
processCwd: nitro.options.rootDir,

src/build/rolldown/dev.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ export async function watchDev(nitro: Nitro, config: RolldownOptions) {
4141
}
4242
});
4343

44-
const srcDirWatcher = watch(
45-
nitro.options.srcDir,
44+
const rootDirWatcher = watch(
45+
nitro.options.rootDir,
4646
{ persistent: false },
4747
(_event, filename) => {
4848
if (filename && /^server\.[mc]?[jt]sx?$/.test(filename)) {
@@ -54,7 +54,7 @@ export async function watchDev(nitro: Nitro, config: RolldownOptions) {
5454
nitro.hooks.hook("close", () => {
5555
watcher.close();
5656
scanDirsWatcher.close();
57-
srcDirWatcher.close();
57+
rootDirWatcher.close();
5858
});
5959

6060
nitro.hooks.hook("rollup:reload", () => reload());

src/build/rollup/dev.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ export async function watchDev(nitro: Nitro, rollupConfig: RollupConfig) {
4343
}
4444
});
4545

46-
const srcDirWatcher = watch(
47-
nitro.options.srcDir,
46+
const rootDirWatcher = watch(
47+
nitro.options.rootDir,
4848
{ persistent: false },
4949
(_event, filename) => {
5050
if (filename && /^server\.[mc]?[jt]sx?$/.test(filename)) {
@@ -56,7 +56,7 @@ export async function watchDev(nitro: Nitro, rollupConfig: RollupConfig) {
5656
nitro.hooks.hook("close", () => {
5757
rollupWatcher.close();
5858
scanDirsWatcher.close();
59-
srcDirWatcher.close();
59+
rootDirWatcher.close();
6060
});
6161

6262
nitro.hooks.hook("rollup:reload", () => reload());

src/build/types.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,15 @@ export async function writeTypes(nitro: Nitro) {
241241
"./"
242242
),
243243
join(relativeWithDot(tsconfigDir, nitro.options.rootDir), "**/*"),
244-
...(nitro.options.srcDir === nitro.options.rootDir
244+
...(!nitro.options.serverDir ||
245+
nitro.options.serverDir === nitro.options.rootDir
245246
? []
246-
: [join(relativeWithDot(tsconfigDir, nitro.options.srcDir), "**/*")]),
247+
: [
248+
join(
249+
relativeWithDot(tsconfigDir, nitro.options.serverDir),
250+
"**/*"
251+
),
252+
]),
247253
],
248254
});
249255

src/build/vite/dev.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ export async function configureViteDevServer(
147147
}
148148
});
149149

150-
const srcDirWatcher = fsWatch(
151-
nitro.options.srcDir,
150+
const rootDirWatcher = fsWatch(
151+
nitro.options.rootDir,
152152
{ persistent: false },
153153
(_event, filename) => {
154154
if (filename && /^server\.[mc]?[jt]sx?$/.test(filename)) {
@@ -158,7 +158,7 @@ export async function configureViteDevServer(
158158
);
159159
nitro.hooks.hook("close", () => {
160160
scanDirsWatcher.close();
161-
srcDirWatcher.close();
161+
rootDirWatcher.close();
162162
});
163163

164164
// Worker => Host IPC

src/build/vite/plugin.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,8 +361,10 @@ async function setupNitroContext(
361361
ctx.pluginConfig.services ??= {};
362362
if (userConfig.environments?.ssr === undefined) {
363363
const ssrEntry = resolveModulePath("./entry-server", {
364-
from: ["", "app", "src"].flatMap((d) =>
365-
ctx.nitro!.options.scanDirs.map((s) => join(s, d) + "/")
364+
from: ["app", "src", ""].flatMap((d) =>
365+
[ctx.nitro!.options.rootDir, ...ctx.nitro!.options.scanDirs].map(
366+
(s) => join(s, d) + "/"
367+
)
366368
),
367369
extensions: DEFAULT_EXTENSIONS,
368370
try: true,
@@ -380,7 +382,7 @@ async function setupNitroContext(
380382
if (typeof ssrEntry === "string") {
381383
ssrEntry =
382384
resolveModulePath(ssrEntry, {
383-
from: ctx.nitro.options.scanDirs,
385+
from: [ctx.nitro.options.rootDir, ...ctx.nitro.options.scanDirs],
384386
extensions: DEFAULT_EXTENSIONS,
385387
suffixes: ["", "/index"],
386388
try: true,

0 commit comments

Comments
 (0)