chore: Split chunks into folders

This commit is contained in:
Sidharth Vinod
2023-08-14 08:14:43 +05:30
parent 5f3c4fccaf
commit a1541aa6f5
2 changed files with 70 additions and 44 deletions

View File

@@ -1,40 +1,47 @@
import { build } from 'esbuild';
import { mkdir, writeFile } from 'node:fs/promises';
import { getBuildConfig } from './util.js';
import { MermaidBuildOptions, defaultConfig, getBuildConfig } from './util.js';
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 })
);
if (metafile) {
// 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 }));
const commonConfig = { ...defaultConfig, entryName };
const configs = [
{ ...commonConfig },
{
...commonConfig,
minify: true,
metafile: shouldVisualize,
},
{ ...commonConfig, core: true },
];
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,
const iifeConfig: MermaidBuildOptions = { ...commonConfig, format: 'iife' };
configs.push(
{ ...iifeConfig },
{ ...iifeConfig, minify: true },
{
...iifeConfig,
minify: true,
includeLargeDiagrams: false,
metafile: shouldVisualize,
format: 'iife',
})
}
);
if (metafile) {
await writeFile(`stats/meta-${entryName}-tiny.json`, JSON.stringify(metafile));
}
const results = await Promise.all(configs.map((config) => build(getBuildConfig(config))));
if (shouldVisualize) {
for (const { metafile } of results) {
if (!metafile) {
continue;
}
const fileName = Object.keys(metafile.outputs)
.filter((key) => key.includes('.min') && key.endsWith('js'))[0]
.replace('dist/', '');
await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile));
}
}
};
@@ -47,9 +54,7 @@ const handler = (e) => {
const main = async () => {
await mkdir('stats').catch(() => {});
const packageNames = Object.keys(packageOptions) as (keyof typeof packageOptions)[];
for (const pkg of packageNames) {
await buildPackage(pkg).catch(handler);
}
await Promise.allSettled(packageNames.map((pkg) => buildPackage(pkg).catch(handler)));
};
void main();