const path = require("path"); const { build } = require("esbuild"); const { sassPlugin } = require("esbuild-sass-plugin"); // 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/excalidraw": path.resolve(__dirname, "../packages/excalidraw"), "@excalidraw/utils": path.resolve(__dirname, "../packages/utils"), "@excalidraw/math": path.resolve(__dirname, "../packages/math"), }, loader: { ".woff2": "file", }, }); function buildDev(config) { return build({ ...config, sourcemap: true, define: { "import.meta.env": JSON.stringify({ DEV: true }), }, }); } function buildProd(config) { return build({ ...config, minify: true, define: { "import.meta.env": JSON.stringify({ PROD: true }), }, }); } 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(); })();