diff --git a/.esbuild/build.ts b/.esbuild/build.ts index bee13af51..39ac2978a 100644 --- a/.esbuild/build.ts +++ b/.esbuild/build.ts @@ -6,7 +6,9 @@ import { packageOptions } from '../.build/common.js'; const shouldVisualize = process.argv.includes('--visualize'); const buildPackage = async (entryName: keyof typeof packageOptions) => { + // package.mjs await build(getBuildConfig({ entryName, minify: false })); + // package.min.mjs const { metafile } = await build( getBuildConfig({ entryName, minify: true, metafile: shouldVisualize }) ); @@ -14,8 +16,27 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => { // Upload metafile into https://esbuild.github.io/analyze/ await writeFile(`stats/meta-${entryName}.json`, JSON.stringify(metafile)); } + // package.core.mjs await build(getBuildConfig({ entryName, minify: false, core: true })); - await build(getBuildConfig({ entryName, minify: true, format: 'iife' })); + if (entryName === 'mermaid') { + // mermaid.js + await build(getBuildConfig({ entryName, minify: false, format: 'iife' })); + // mermaid.min.js + await build(getBuildConfig({ entryName, minify: true, format: 'iife' })); + // mermaid.tiny.min.js + const { metafile } = await build( + getBuildConfig({ + entryName, + minify: true, + includeLargeDiagrams: false, + metafile: shouldVisualize, + format: 'iife', + }) + ); + if (metafile) { + await writeFile(`stats/meta-${entryName}-tiny.json`, JSON.stringify(metafile)); + } + } }; const handler = (e) => { diff --git a/.esbuild/util.ts b/.esbuild/util.ts index 249045652..12ccc5807 100644 --- a/.esbuild/util.ts +++ b/.esbuild/util.ts @@ -14,6 +14,7 @@ interface MermaidBuildOptions { metafile?: boolean; format?: 'esm' | 'iife'; entryName: keyof typeof packageOptions; + includeLargeDiagrams?: boolean; } const buildOptions = (override: BuildOptions): BuildOptions => { @@ -37,7 +38,8 @@ export const getBuildConfig = ({ core, entryName, metafile, - format, + format = 'esm', + includeLargeDiagrams = true, }: MermaidBuildOptions): BuildOptions => { const external: string[] = ['require', 'fs', 'path']; const { name, file, packageName } = packageOptions[entryName]; @@ -45,11 +47,15 @@ export const getBuildConfig = ({ absWorkingDir: resolve(__dirname, `../packages/${packageName}`), entryPoints: { [`${name}${core ? '.core' : format === 'iife' ? '' : '.esm'}${ - minify ? '.min' : '' - }`]: `src/${file}`, + includeLargeDiagrams ? '' : '.tiny' + }${minify ? '.min' : ''}`]: `src/${file}`, }, metafile, logLevel: 'info', + define: { + // This needs to be stringified for esbuild + includeLargeDiagrams: `${includeLargeDiagrams}`, + }, }); if (core) { diff --git a/packages/mermaid/src/diagrams/error/errorDiagram.ts b/packages/mermaid/src/diagrams/error/errorDiagram.ts index 284dfd744..5b172db2e 100644 --- a/packages/mermaid/src/diagrams/error/errorDiagram.ts +++ b/packages/mermaid/src/diagrams/error/errorDiagram.ts @@ -1,7 +1,7 @@ import type { DiagramDefinition } from '../../diagram-api/types.js'; import { renderer } from './errorRenderer.js'; -const diagram: DiagramDefinition = { +export const diagram: DiagramDefinition = { db: {}, renderer, parser: { diff --git a/packages/mermaid/src/diagrams/flowchart/elk/detector.ts b/packages/mermaid/src/diagrams/flowchart/elk/detector.ts index 6cfcf2619..252455e1c 100644 --- a/packages/mermaid/src/diagrams/flowchart/elk/detector.ts +++ b/packages/mermaid/src/diagrams/flowchart/elk/detector.ts @@ -19,7 +19,9 @@ const detector: DiagramDetector = (txt, config): boolean => { }; const loader: DiagramLoader = async () => { - const { diagram } = await import('./flowchart-elk-definition.js'); + const { diagram } = includeLargeDiagrams + ? await import('./flowchart-elk-definition.js') + : await import('../../error/errorDiagram.js'); return { id, diagram }; }; diff --git a/packages/mermaid/src/diagrams/mindmap/detector.ts b/packages/mermaid/src/diagrams/mindmap/detector.ts index 2b31fc5e8..0021b5308 100644 --- a/packages/mermaid/src/diagrams/mindmap/detector.ts +++ b/packages/mermaid/src/diagrams/mindmap/detector.ts @@ -10,7 +10,9 @@ const detector: DiagramDetector = (txt) => { }; const loader: DiagramLoader = async () => { - const { diagram } = await import('./mindmap-definition.js'); + const { diagram } = includeLargeDiagrams + ? await import('./mindmap-definition.js') + : await import('../error/errorDiagram.js'); return { id, diagram }; }; diff --git a/packages/mermaid/src/types.d.ts b/packages/mermaid/src/types.d.ts new file mode 100644 index 000000000..4f52a09df --- /dev/null +++ b/packages/mermaid/src/types.d.ts @@ -0,0 +1 @@ +declare let includeLargeDiagrams: boolean;