diff --git a/.esbuild/build.ts b/.esbuild/build.ts index 2b8734ad8..95b5f90a4 100644 --- a/.esbuild/build.ts +++ b/.esbuild/build.ts @@ -1,29 +1,35 @@ import { build } from 'esbuild'; import { mkdir, writeFile } from 'node:fs/promises'; -import { MermaidBuildOptions, defaultConfig, getBuildConfig } from './util.js'; +import { MermaidBuildOptions, defaultOptions, getBuildConfig } from './util.js'; import { packageOptions } from '../.build/common.js'; const shouldVisualize = process.argv.includes('--visualize'); const buildPackage = async (entryName: keyof typeof packageOptions) => { - const commonConfig = { ...defaultConfig, entryName }; - const configs = [ - { ...commonConfig }, + const commonOptions = { ...defaultOptions, entryName } as const; + const buildConfigs = [ + // package.mjs + { ...commonOptions }, + // package.min.mjs { - ...commonConfig, + ...commonOptions, minify: true, metafile: shouldVisualize, }, - { ...commonConfig, core: true }, + // package.core.mjs + { ...commonOptions, core: true }, ]; if (entryName === 'mermaid') { - const iifeConfig: MermaidBuildOptions = { ...commonConfig, format: 'iife' }; - configs.push( - { ...iifeConfig }, - { ...iifeConfig, minify: true }, + const iifeOptions: MermaidBuildOptions = { ...commonOptions, format: 'iife' }; + buildConfigs.push( + // mermaid.js + { ...iifeOptions }, + // mermaid.min.js + { ...iifeOptions, minify: true, metafile: shouldVisualize }, + // mermaid.tiny.min.js { - ...iifeConfig, + ...iifeOptions, minify: true, includeLargeDiagrams: false, metafile: shouldVisualize, @@ -31,7 +37,7 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => { ); } - const results = await Promise.all(configs.map((config) => build(getBuildConfig(config)))); + const results = await Promise.all(buildConfigs.map((option) => build(getBuildConfig(option)))); if (shouldVisualize) { for (const { metafile } of results) { @@ -39,8 +45,9 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => { continue; } const fileName = Object.keys(metafile.outputs) - .filter((key) => key.includes('.min') && key.endsWith('js'))[0] + .filter((file) => !file.includes('chunks') && file.endsWith('js'))[0] .replace('dist/', ''); + // Upload metafile into https://esbuild.github.io/analyze/ await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile)); } } diff --git a/.esbuild/server.ts b/.esbuild/server.ts index 32867ded4..f71a62f6d 100644 --- a/.esbuild/server.ts +++ b/.esbuild/server.ts @@ -4,18 +4,30 @@ import cors from 'cors'; import { getBuildConfig } from './util.js'; import { context } from 'esbuild'; import chokidar from 'chokidar'; +import { defaultOptions } from './util'; const mermaidCtx = await context( - getBuildConfig({ minify: false, core: false, entryName: 'mermaid' }) + getBuildConfig({ ...defaultOptions, minify: false, core: false, entryName: 'mermaid' }) ); const mermaidIIFECtx = await context( - getBuildConfig({ minify: false, core: false, entryName: 'mermaid', format: 'iife' }) + getBuildConfig({ + ...defaultOptions, + minify: false, + core: false, + entryName: 'mermaid', + format: 'iife', + }) ); const externalCtx = await context( - getBuildConfig({ minify: false, core: false, entryName: 'mermaid-example-diagram' }) + getBuildConfig({ + ...defaultOptions, + minify: false, + core: false, + entryName: 'mermaid-example-diagram', + }) ); const zenumlCtx = await context( - getBuildConfig({ minify: false, core: false, entryName: 'mermaid-zenuml' }) + getBuildConfig({ ...defaultOptions, minify: false, core: false, entryName: 'mermaid-zenuml' }) ); const contexts = [mermaidCtx, mermaidIIFECtx, externalCtx, zenumlCtx]; diff --git a/.esbuild/util.ts b/.esbuild/util.ts index f80368a06..4027cd3cf 100644 --- a/.esbuild/util.ts +++ b/.esbuild/util.ts @@ -17,7 +17,7 @@ export interface MermaidBuildOptions { includeLargeDiagrams: boolean; } -export const defaultConfig: Omit = { +export const defaultOptions: Omit = { minify: false, metafile: false, core: false, @@ -43,7 +43,7 @@ const buildOptions = (override: BuildOptions): BuildOptions => { const getFileName = ( fileName: string, - { core, format, includeLargeDiagrams, minify, entryName }: MermaidBuildOptions + { core, format, minify, includeLargeDiagrams }: MermaidBuildOptions ) => { if (core) { fileName += '.core';