Skip to content

Commit dbf7a90

Browse files
authored
feat: provide static process.* and import.meta.* build flags (#1331)
1 parent 0f1832c commit dbf7a90

File tree

5 files changed

+82
-1
lines changed

5 files changed

+82
-1
lines changed

src/rollup/config.ts

+27-1
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ import type { Preset } from "unenv";
1818
import { sanitizeFilePath, resolvePath } from "mlly";
1919
import unimportPlugin from "unimport/unplugin";
2020
import { hash } from "ohash";
21-
import type { Nitro } from "../types";
21+
import type { Nitro, NitroStaticBuildFlags } from "../types";
2222
import { resolveAliases } from "../utils";
2323
import { runtimeDir } from "../dirs";
24+
import { version } from "../../package.json";
2425
import { replace } from "./plugins/replace";
2526
import { virtual } from "./plugins/virtual";
2627
import { dynamicRequire } from "./plugins/dynamic-require";
@@ -163,6 +164,7 @@ export const getRollupConfig = (nitro: Nitro): RollupConfig => {
163164
if (nitro.options.preset === "nitro-prerender") {
164165
NODE_ENV = "prerender";
165166
}
167+
166168
const buildEnvVars = {
167169
NODE_ENV,
168170
prerender: nitro.options.preset === "nitro-prerender",
@@ -172,6 +174,18 @@ export const getRollupConfig = (nitro: Nitro): RollupConfig => {
172174
DEBUG: nitro.options.dev,
173175
};
174176

177+
const staticFlags: NitroStaticBuildFlags = {
178+
dev: nitro.options.dev,
179+
preset: nitro.options.preset,
180+
prerender: nitro.options.preset === "nitro-prerender",
181+
server: true,
182+
client: false,
183+
nitro: true,
184+
// @ts-expect-error
185+
"versions.nitro": version,
186+
"versions?.nitro": version,
187+
};
188+
175189
// Universal import.meta
176190
rollupConfig.plugins.push(importMeta(nitro));
177191

@@ -208,6 +222,18 @@ export const getRollupConfig = (nitro: Nitro): RollupConfig => {
208222
JSON.stringify(val),
209223
])
210224
),
225+
...Object.fromEntries(
226+
Object.entries(staticFlags).map(([key, val]) => [
227+
`process.${key}`,
228+
JSON.stringify(val),
229+
])
230+
),
231+
...Object.fromEntries(
232+
Object.entries(staticFlags).map(([key, val]) => [
233+
`import.meta.${key}`,
234+
JSON.stringify(val),
235+
])
236+
),
211237
...nitro.options.replace,
212238
},
213239
})

src/types/global.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import type { NitroOptions } from "./nitro";
2+
3+
export interface NitroStaticBuildFlags {
4+
dev?: boolean;
5+
client?: boolean;
6+
nitro?: boolean;
7+
prerender?: boolean;
8+
preset?: NitroOptions["preset"];
9+
server?: boolean;
10+
versions?: {
11+
nitro?: string;
12+
};
13+
}
14+
15+
declare global {
16+
// eslint-disable-next-line @typescript-eslint/no-namespace
17+
namespace NodeJS {
18+
interface Process extends NitroStaticBuildFlags {}
19+
}
20+
21+
interface ImportMeta extends NitroStaticBuildFlags {}
22+
}
23+
24+
export {};

src/types/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * from "./fetch";
2+
export * from "./global";
23
export * from "./serialize";
34
export * from "./nitro";
45
export * from "./handler";

test/fixture/routes/static-flags.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// eslint-disable-next-line require-await
2+
export default eventHandler(async (event) => {
3+
return {
4+
dev: [process.dev, import.meta.dev],
5+
preset: [process.preset, import.meta.preset],
6+
prerender: [process.prerender, import.meta.prerender],
7+
server: [process.server, import.meta.server],
8+
client: [process.client, import.meta.client],
9+
nitro: [process.nitro, import.meta.nitro],
10+
"versions.nitro": [process.versions.nitro, import.meta.versions.nitro],
11+
"versions?.nitro": [process.versions?.nitro, import.meta.versions?.nitro],
12+
};
13+
});

test/tests.ts

+17
Original file line numberDiff line numberDiff line change
@@ -371,4 +371,21 @@ export function testNitro(
371371
expect(headers["server-timing"]).toMatch(/-;dur=\d+;desc="Generate"/);
372372
});
373373
}
374+
375+
it("static build flags", async () => {
376+
const { data } = await callHandler({ url: "/static-flags" });
377+
expect(data).toMatchObject({
378+
dev: [ctx.isDev, ctx.isDev],
379+
preset: [ctx.preset, ctx.preset],
380+
prerender: [
381+
ctx.preset === "nitro-prerenderer",
382+
ctx.preset === "nitro-prerenderer",
383+
],
384+
client: [false, false],
385+
nitro: [true, true],
386+
server: [true, true],
387+
"versions.nitro": [expect.any(String), expect.any(String)],
388+
"versions?.nitro": [expect.any(String), expect.any(String)],
389+
});
390+
});
374391
}

0 commit comments

Comments
 (0)