collab/mermaid/.esbuild/build.tsblame
View source
6dd74de1import { build } from 'esbuild';
6dd74de2import { cp, mkdir, readFile, rename, writeFile } from 'node:fs/promises';
6dd74de3import { packageOptions } from '../.build/common.js';
6dd74de4import { generateLangium } from '../.build/generateLangium.js';
6dd74de5import type { MermaidBuildOptions } from './util.js';
6dd74de6import { defaultOptions, getBuildConfig } from './util.js';
6dd74de7
6dd74de8const shouldVisualize = process.argv.includes('--visualize');
6dd74de9
6dd74de10const buildPackage = async (entryName: keyof typeof packageOptions) => {
6dd74de11 const commonOptions: MermaidBuildOptions = {
6dd74de12 ...defaultOptions,
6dd74de13 options: packageOptions[entryName],
6dd74de14 } as const;
6dd74de15 const buildConfigs: MermaidBuildOptions[] = [
6dd74de16 // package.mjs
6dd74de17 { ...commonOptions },
6dd74de18 // package.min.mjs
6dd74de19 {
6dd74de20 ...commonOptions,
6dd74de21 minify: true,
6dd74de22 metafile: shouldVisualize,
6dd74de23 },
6dd74de24 // package.core.mjs
6dd74de25 { ...commonOptions, core: true },
6dd74de26 ];
6dd74de27
6dd74de28 if (entryName === 'mermaid') {
6dd74de29 const iifeOptions: MermaidBuildOptions = { ...commonOptions, format: 'iife' };
6dd74de30 buildConfigs.push(
6dd74de31 // mermaid.js
6dd74de32 { ...iifeOptions },
6dd74de33 // mermaid.min.js
6dd74de34 { ...iifeOptions, minify: true, metafile: shouldVisualize },
6dd74de35 // mermaid.tiny.min.js
6dd74de36 {
6dd74de37 ...iifeOptions,
6dd74de38 minify: true,
6dd74de39 includeLargeFeatures: false,
6dd74de40 metafile: shouldVisualize,
6dd74de41 sourcemap: false,
6dd74de42 }
6dd74de43 );
6dd74de44 }
6dd74de45 if (entryName === 'mermaid-zenuml') {
6dd74de46 const iifeOptions: MermaidBuildOptions = {
6dd74de47 ...commonOptions,
6dd74de48 format: 'iife',
6dd74de49 globalName: 'mermaid-zenuml',
6dd74de50 };
6dd74de51 buildConfigs.push(
6dd74de52 // mermaid-zenuml.js
6dd74de53 { ...iifeOptions },
6dd74de54 // mermaid-zenuml.min.js
6dd74de55 { ...iifeOptions, minify: true, metafile: shouldVisualize }
6dd74de56 );
6dd74de57 }
6dd74de58
6dd74de59 const results = await Promise.all(buildConfigs.map((option) => build(getBuildConfig(option))));
6dd74de60
6dd74de61 if (shouldVisualize) {
6dd74de62 for (const { metafile } of results) {
6dd74de63 if (!metafile?.outputs) {
6dd74de64 continue;
6dd74de65 }
6dd74de66 const fileName = Object.keys(metafile.outputs)
6dd74de67 .find((file) => !file.includes('chunks') && file.endsWith('js'))!
6dd74de68 .replace('dist/', '');
6dd74de69 // Upload metafile into https://esbuild.github.io/analyze/
6dd74de70 await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile));
6dd74de71 }
6dd74de72 }
6dd74de73};
6dd74de74
6dd74de75const handler = (e) => {
6dd74de76 // eslint-disable-next-line no-console
6dd74de77 console.error(e);
6dd74de78 process.exit(1);
6dd74de79};
6dd74de80
6dd74de81const buildTinyMermaid = async () => {
6dd74de82 await mkdir('./packages/tiny/dist', { recursive: true });
6dd74de83 await rename(
6dd74de84 './packages/mermaid/dist/mermaid.tiny.min.js',
6dd74de85 './packages/tiny/dist/mermaid.tiny.js'
6dd74de86 );
6dd74de87 // Copy version from mermaid's package.json to tiny's package.json
6dd74de88 const mermaidPkg = JSON.parse(await readFile('./packages/mermaid/package.json', 'utf8'));
6dd74de89 const tinyPkg = JSON.parse(await readFile('./packages/tiny/package.json', 'utf8'));
6dd74de90 tinyPkg.version = mermaidPkg.version;
6dd74de91
6dd74de92 await writeFile('./packages/tiny/package.json', JSON.stringify(tinyPkg, null, 2) + '\n');
6dd74de93 await cp('./packages/mermaid/CHANGELOG.md', './packages/tiny/CHANGELOG.md');
6dd74de94};
6dd74de95
6dd74de96const main = async () => {
6dd74de97 await generateLangium();
6dd74de98 await mkdir('stats', { recursive: true });
6dd74de99 const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
6dd74de100 // it should build `parser` before `mermaid` because it's a dependency
6dd74de101 for (const pkg of packageNames) {
6dd74de102 await buildPackage(pkg).catch(handler);
6dd74de103 }
6dd74de104 await buildTinyMermaid();
6dd74de105};
6dd74de106
6dd74de107void main();