Merge branch 'sidv/splitChunks' into sidv/tinyMermaid

* sidv/splitChunks:
  chore: Add analyzer comment
  chore: Split chunks into folders
  chore: Split chunks into folders
  chore: Add defaultOptions to server
  chore: Split chunks into folders
This commit is contained in:
Sidharth Vinod
2023-08-14 08:39:43 +05:30
3 changed files with 38 additions and 19 deletions

View File

@@ -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));
}
}

View File

@@ -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];

View File

@@ -17,7 +17,7 @@ export interface MermaidBuildOptions {
includeLargeDiagrams: boolean;
}
export const defaultConfig: Omit<MermaidBuildOptions, 'entryName'> = {
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName'> = {
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';