aboutsummaryrefslogtreecommitdiffstats
path: root/config/esbuild-config.js
diff options
context:
space:
mode:
Diffstat (limited to 'config/esbuild-config.js')
-rw-r--r--config/esbuild-config.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/config/esbuild-config.js b/config/esbuild-config.js
new file mode 100644
index 0000000..9140b89
--- /dev/null
+++ b/config/esbuild-config.js
@@ -0,0 +1,50 @@
1// @ts-check
2
3const { banner } = require('./build-common');
4
5/** @type {string} */
6const mode = process.env.MODE || 'development';
7
8/** @type {boolean} */
9const isDevelopment = mode === 'development';
10
11const modeString = JSON.stringify(mode);
12
13const defineEnv = {
14 'import.meta.env.DEV': JSON.stringify(isDevelopment),
15 'import.meta.env.MODE': modeString,
16 'import.meta.env.PROD': JSON.stringify(!isDevelopment),
17 'process.env.NODE_ENV': modeString,
18 'process.env.MODE': modeString,
19};
20
21/**
22 * @param {import('esbuild').BuildOptions} config
23 * @param {object | unknown} metaEnvVars
24 * @returns {import('esbuild').BuildOptions}
25 */
26module.exports.getConfig = function(config, metaEnvVars) {
27 const defineMeta = {};
28 for (const varName in metaEnvVars) {
29 defineMeta[`import.meta.env.${varName}`] = JSON.stringify(metaEnvVars[varName]);
30 }
31 return {
32 logLevel: 'info',
33 bundle: true,
34 treeShaking: !isDevelopment,
35 minify: !isDevelopment,
36 banner: {
37 js: banner,
38 },
39 ...config,
40 sourcemap: isDevelopment ? (config.sourcemap || true) : false,
41 define: {
42 ...defineEnv,
43 ...defineMeta,
44 ...config.define,
45 },
46 plugins: [
47 ...(config.plugins || []),
48 ],
49 };
50}