/
index.ts
48 lines (43 loc) · 1.36 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import type { BuildOptions } from "esbuild";
type BrowserBuildOption = BuildOptions;
type ServerBuildOption = BuildOptions & { write: false };
type EsbuildOption = BrowserBuildOption | ServerBuildOption;
type EsbuildContext = {
isServer: boolean;
isDev: boolean;
};
export type EsbuildOverride = (
option: EsbuildOption,
context: EsbuildContext
) => EsbuildOption;
let esbuildOverride: EsbuildOverride = (arg) => arg;
export const withEsbuildOverride = (_esbuildOverride?: EsbuildOverride) => {
if (typeof _esbuildOverride !== "function") return;
esbuildOverride = _esbuildOverride;
for (const mod of ["@remix-run/dev/node_modules/esbuild", "esbuild"]) {
let esbuild;
try {
esbuild = require(mod);
} catch (_) {
continue;
}
if (esbuild.overridden) break;
const originalBuildFunction = esbuild.build;
Object.defineProperty(esbuild, "build", {
get: () => (option: EsbuildOption) => {
return originalBuildFunction(makeNewOption(option));
},
enumerable: true,
});
Object.defineProperty(esbuild, "overridden", {
value: true,
enumerable: true,
});
break;
}
};
const makeNewOption = (option: EsbuildOption) => {
const isServer = option.write === false;
const isDev = option.define?.["process.env.NODE_ENV"] === "development";
return esbuildOverride(option, { isServer, isDev });
};