diff --git a/.esbuild/build.ts b/.esbuild/build.ts index d5adf070b..1f95703b5 100644 --- a/.esbuild/build.ts +++ b/.esbuild/build.ts @@ -1,12 +1,18 @@ -import { build } from 'esbuild'; +import { build, context } from 'esbuild'; +import { mkdir, writeFile } from 'node:fs/promises'; import { getBuildConfig, packageOptions } from './util.js'; -import { context } from 'esbuild'; const shouldWatch = process.argv.includes('--watch'); +const shouldVisualize = process.argv.includes('--visualize'); const buildPackage = async (entryName: keyof typeof packageOptions) => { await build(getBuildConfig({ entryName, minify: false })); - await build(getBuildConfig({ entryName, minify: true })); + const { metafile } = await build( + getBuildConfig({ entryName, minify: true, metafile: shouldVisualize }) + ); + if (metafile) { + await writeFile(`stats/meta-${entryName}.json`, JSON.stringify(metafile)); + } await build(getBuildConfig({ entryName, minify: false, core: true })); }; @@ -16,6 +22,7 @@ const handler = (e) => { }; const main = async () => { + await mkdir('stats'); const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[]; for (const pkg of packageNames) { await buildPackage(pkg).catch(handler); diff --git a/.esbuild/util.ts b/.esbuild/util.ts index dd8114bbd..6d204a5e2 100644 --- a/.esbuild/util.ts +++ b/.esbuild/util.ts @@ -23,6 +23,7 @@ export const packageOptions = { interface MermaidBuildOptions { minify: boolean; core?: boolean; + metafile?: boolean; entryName: keyof typeof packageOptions; } @@ -58,7 +59,12 @@ const jisonPlugin = { }, }; -export const getBuildConfig = ({ minify, core, entryName }: MermaidBuildOptions): BuildOptions => { +export const getBuildConfig = ({ + minify, + core, + entryName, + metafile, +}: MermaidBuildOptions): BuildOptions => { const external: string[] = ['require', 'fs', 'path']; const { name, file, packageName } = packageOptions[entryName]; let output: BuildOptions = buildOptions({ @@ -66,6 +72,7 @@ export const getBuildConfig = ({ minify, core, entryName }: MermaidBuildOptions) entryPoints: { [`${name}.esm${core ? '.core' : ''}${minify ? '.min' : ''}`]: `src/${file}`, }, + metafile, }); if (core) { @@ -78,12 +85,5 @@ export const getBuildConfig = ({ minify, core, entryName }: MermaidBuildOptions) external.push(...Object.keys(dependencies)); output.external = external; } - - // if (watch && config.build) { - // config.build.watch = { - // include: ['packages/mermaid-example-diagram/src/**', 'packages/mermaid/src/**'], - // }; - // } - return output; };