const path = require("path"); const { build } = require("esbuild"); const { sassPlugin } = require("esbuild-sass-plugin"); const { parseEnvVariables } = require("../packages/excalidraw/env.cjs"); const ENV_VARS = { development: { ...parseEnvVariables(`${__dirname}/../.env.development`), DEV: true, }, production: { ...parseEnvVariables(`${__dirname}/../.env.production`), PROD: true, }, }; // excludes all external dependencies and bundles only the source code const getConfig = (outdir) => ({ outdir, bundle: true, splitting: true, format: "esm", packages: "external", plugins: [sassPlugin()], target: "es2020", assetNames: "[dir]/[name]", chunkNames: "[dir]/[name]-[hash]", alias: { "@excalidraw/common": path.resolve(__dirname, "../packages/common/src"), "@excalidraw/element": path.resolve(__dirname, "../packages/element/src"), "@excalidraw/excalidraw": path.resolve(__dirname, "../packages/excalidraw"), "@excalidraw/math": path.resolve(__dirname, "../packages/math/src"), "@excalidraw/utils": path.resolve(__dirname, "../packages/utils/src"), }, loader: { ".woff2": "file", }, }); function buildDev(config) { return build({ ...config, sourcemap: true, define: { "import.meta.env": JSON.stringify(ENV_VARS.development), }, }); } function buildProd(config) { return build({ ...config, minify: true, define: { "import.meta.env": JSON.stringify(ENV_VARS.production), }, }); } const createESMRawBuild = async () => { const chunksConfig = { entryPoints: ["index.tsx", "**/*.chunk.ts"], entryNames: "[name]", }; // development unminified build with source maps await buildDev({ ...getConfig("dist/dev"), ...chunksConfig, }); // production minified buld without sourcemaps await buildProd({ ...getConfig("dist/prod"), ...chunksConfig, }); }; (async () => { await createESMRawBuild(); })();