mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-19 16:26:43 +02:00
chore: Decouple build logic
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
export interface PackageOptions {
|
||||||
|
name: string;
|
||||||
|
packageName: string;
|
||||||
|
file: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shared common options for both ESBuild and Vite
|
* Shared common options for both ESBuild and Vite
|
||||||
*/
|
*/
|
||||||
@@ -27,4 +33,4 @@ export const packageOptions = {
|
|||||||
packageName: 'mermaid-layout-elk',
|
packageName: 'mermaid-layout-elk',
|
||||||
file: 'layouts.ts',
|
file: 'layouts.ts',
|
||||||
},
|
},
|
||||||
} as const;
|
} as const satisfies Record<string, PackageOptions>;
|
||||||
|
@@ -8,7 +8,10 @@ import { defaultOptions, getBuildConfig } from './util.js';
|
|||||||
const shouldVisualize = process.argv.includes('--visualize');
|
const shouldVisualize = process.argv.includes('--visualize');
|
||||||
|
|
||||||
const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
||||||
const commonOptions: MermaidBuildOptions = { ...defaultOptions, entryName } as const;
|
const commonOptions: MermaidBuildOptions = {
|
||||||
|
...defaultOptions,
|
||||||
|
options: packageOptions[entryName],
|
||||||
|
} as const;
|
||||||
const buildConfigs: MermaidBuildOptions[] = [
|
const buildConfigs: MermaidBuildOptions[] = [
|
||||||
// package.mjs
|
// package.mjs
|
||||||
{ ...commonOptions },
|
{ ...commonOptions },
|
||||||
@@ -40,7 +43,7 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const fileName = Object.keys(metafile.outputs)
|
const fileName = Object.keys(metafile.outputs)
|
||||||
.find((file) => !file.includes('chunks') && file.endsWith('js'))
|
.find((file) => !file.includes('chunks') && file.endsWith('js'))!
|
||||||
.replace('dist/', '');
|
.replace('dist/', '');
|
||||||
// Upload metafile into https://esbuild.github.io/analyze/
|
// Upload metafile into https://esbuild.github.io/analyze/
|
||||||
await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile));
|
await writeFile(`stats/${fileName}.meta.json`, JSON.stringify(metafile));
|
||||||
|
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'url';
|
|||||||
import type { BuildOptions } from 'esbuild';
|
import type { BuildOptions } from 'esbuild';
|
||||||
import { readFileSync } from 'fs';
|
import { readFileSync } from 'fs';
|
||||||
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
|
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
|
||||||
import { packageOptions } from '../.build/common.js';
|
import type { PackageOptions } from '../.build/common.js';
|
||||||
import { jisonPlugin } from './jisonPlugin.js';
|
import { jisonPlugin } from './jisonPlugin.js';
|
||||||
|
|
||||||
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
||||||
@@ -13,10 +13,10 @@ export interface MermaidBuildOptions extends BuildOptions {
|
|||||||
core: boolean;
|
core: boolean;
|
||||||
metafile: boolean;
|
metafile: boolean;
|
||||||
format: 'esm' | 'iife';
|
format: 'esm' | 'iife';
|
||||||
entryName: keyof typeof packageOptions;
|
options: PackageOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName'> = {
|
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = {
|
||||||
minify: false,
|
minify: false,
|
||||||
metafile: false,
|
metafile: false,
|
||||||
core: false,
|
core: false,
|
||||||
@@ -52,9 +52,14 @@ const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOpt
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
|
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
|
||||||
const { core, entryName, metafile, format, minify } = options;
|
const {
|
||||||
|
core,
|
||||||
|
metafile,
|
||||||
|
format,
|
||||||
|
minify,
|
||||||
|
options: { name, file, packageName },
|
||||||
|
} = options;
|
||||||
const external: string[] = ['require', 'fs', 'path'];
|
const external: string[] = ['require', 'fs', 'path'];
|
||||||
const { name, file, packageName } = packageOptions[entryName];
|
|
||||||
const outFileName = getFileName(name, options);
|
const outFileName = getFileName(name, options);
|
||||||
const output: BuildOptions = buildOptions({
|
const output: BuildOptions = buildOptions({
|
||||||
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
|
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
|
||||||
|
Reference in New Issue
Block a user