mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-01-14 06:43:25 +08:00
remove esbuild
This commit is contained in:
parent
9e35bf6e6f
commit
d9406585c8
@ -1,20 +0,0 @@
|
|||||||
const { esmBuild, esmCoreBuild, iifeBuild } = require('./util.cjs');
|
|
||||||
const { build } = require('esbuild');
|
|
||||||
|
|
||||||
const handler = (e) => {
|
|
||||||
console.error(e);
|
|
||||||
process.exit(1);
|
|
||||||
};
|
|
||||||
const watch = process.argv.includes('--watch');
|
|
||||||
|
|
||||||
// mermaid.js
|
|
||||||
build(iifeBuild({ minify: false, watch })).catch(handler);
|
|
||||||
// mermaid.esm.mjs
|
|
||||||
build(esmBuild({ minify: false, watch })).catch(handler);
|
|
||||||
|
|
||||||
// mermaid.min.js
|
|
||||||
build(iifeBuild()).catch(handler);
|
|
||||||
// mermaid.esm.min.mjs
|
|
||||||
build(esmBuild()).catch(handler);
|
|
||||||
// mermaid.core.mjs (node_modules unbundled)
|
|
||||||
build(esmCoreBuild()).catch(handler);
|
|
@ -1,18 +0,0 @@
|
|||||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
||||||
const { transformJison } = require('./jisonTransformer.cjs');
|
|
||||||
const fileRegex = /\.(jison)$/;
|
|
||||||
|
|
||||||
export default function jison() {
|
|
||||||
return {
|
|
||||||
name: 'jison',
|
|
||||||
|
|
||||||
transform(src, id) {
|
|
||||||
if (fileRegex.test(id)) {
|
|
||||||
return {
|
|
||||||
code: transformJison(src),
|
|
||||||
map: null, // provide source map if available
|
|
||||||
};
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
const { Generator } = require('jison');
|
|
||||||
exports.transformJison = (src) => {
|
|
||||||
const parser = new Generator(src, {
|
|
||||||
moduleType: 'js',
|
|
||||||
'token-stack': true,
|
|
||||||
});
|
|
||||||
const source = parser.generate({ moduleMain: '() => {}' });
|
|
||||||
const exporter = `
|
|
||||||
parser.parser = parser;
|
|
||||||
export { parser };
|
|
||||||
export default parser;
|
|
||||||
`;
|
|
||||||
return `${source} ${exporter}`;
|
|
||||||
};
|
|
@ -1,79 +0,0 @@
|
|||||||
const esbuild = require('esbuild');
|
|
||||||
const http = require('http');
|
|
||||||
const { iifeBuild, esmBuild } = require('./util.cjs');
|
|
||||||
const express = require('express');
|
|
||||||
|
|
||||||
// Start 2 esbuild servers. One for IIFE and one for ESM
|
|
||||||
// Serve 2 static directories: demo & cypress/platform
|
|
||||||
// Have 3 entry points:
|
|
||||||
// mermaid: './src/mermaid',
|
|
||||||
// e2e: './cypress/platform/viewer.js',
|
|
||||||
// 'bundle-test': './cypress/platform/bundle-test.js',
|
|
||||||
|
|
||||||
const getEntryPointsAndExtensions = (format) => {
|
|
||||||
return {
|
|
||||||
entryPoints: {
|
|
||||||
mermaid: './src/mermaid',
|
|
||||||
e2e: 'cypress/platform/viewer.js',
|
|
||||||
'bundle-test': 'cypress/platform/bundle-test.js',
|
|
||||||
},
|
|
||||||
outExtension: { '.js': format === 'iife' ? '.js' : '.esm.mjs' },
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const generateHandler = (server) => {
|
|
||||||
return (req, res) => {
|
|
||||||
const options = {
|
|
||||||
hostname: server.host,
|
|
||||||
port: server.port,
|
|
||||||
path: req.url,
|
|
||||||
method: req.method,
|
|
||||||
headers: req.headers,
|
|
||||||
};
|
|
||||||
// Forward each incoming request to esbuild
|
|
||||||
const proxyReq = http.request(options, (proxyRes) => {
|
|
||||||
// If esbuild returns "not found", send a custom 404 page
|
|
||||||
if (proxyRes.statusCode === 404) {
|
|
||||||
if (!req.url.endsWith('.html')) {
|
|
||||||
res.writeHead(404, { 'Content-Type': 'text/html' });
|
|
||||||
res.end('<h1>A custom 404 page</h1>');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Otherwise, forward the response from esbuild to the client
|
|
||||||
res.writeHead(proxyRes.statusCode, proxyRes.headers);
|
|
||||||
proxyRes.pipe(res, { end: true });
|
|
||||||
});
|
|
||||||
// Forward the body of the request to esbuild
|
|
||||||
req.pipe(proxyReq, { end: true });
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
(async () => {
|
|
||||||
const iifeServer = await esbuild.serve(
|
|
||||||
{},
|
|
||||||
{
|
|
||||||
...iifeBuild({ minify: false, outfile: undefined, outdir: 'dist' }),
|
|
||||||
...getEntryPointsAndExtensions('iife'),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
const esmServer = await esbuild.serve(
|
|
||||||
{},
|
|
||||||
{
|
|
||||||
...esmBuild({ minify: false, outfile: undefined, outdir: 'dist' }),
|
|
||||||
...getEntryPointsAndExtensions('esm'),
|
|
||||||
}
|
|
||||||
);
|
|
||||||
const app = express();
|
|
||||||
|
|
||||||
app.use(express.static('demos'));
|
|
||||||
app.use(express.static('cypress/platform'));
|
|
||||||
app.all('/mermaid.js', generateHandler(iifeServer));
|
|
||||||
app.all('/mermaid.esm.mjs', generateHandler(esmServer));
|
|
||||||
|
|
||||||
app.all('/e2e.esm.mjs', generateHandler(esmServer));
|
|
||||||
app.all('/bundle-test.esm.mjs', generateHandler(esmServer));
|
|
||||||
app.listen(9000, () => {
|
|
||||||
console.log(`Listening on http://localhost:9000`);
|
|
||||||
});
|
|
||||||
})();
|
|
@ -1,94 +0,0 @@
|
|||||||
const { transformJison } = require('./jisonTransformer.cjs');
|
|
||||||
const fs = require('fs');
|
|
||||||
const { dependencies } = require('../package.json');
|
|
||||||
|
|
||||||
/** @typedef {import('esbuild').BuildOptions} Options */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Options} override
|
|
||||||
* @returns {Options}
|
|
||||||
*/
|
|
||||||
const buildOptions = (override = {}) => {
|
|
||||||
return {
|
|
||||||
bundle: true,
|
|
||||||
minify: true,
|
|
||||||
keepNames: true,
|
|
||||||
banner: { js: '"use strict";' },
|
|
||||||
globalName: 'mermaid',
|
|
||||||
platform: 'browser',
|
|
||||||
tsconfig: 'tsconfig.json',
|
|
||||||
resolveExtensions: ['.ts', '.js', '.mjs', '.json', '.jison'],
|
|
||||||
external: ['require', 'fs', 'path'],
|
|
||||||
entryPoints: ['src/mermaid.ts'],
|
|
||||||
outfile: 'dist/mermaid.min.js',
|
|
||||||
plugins: [jisonPlugin],
|
|
||||||
sourcemap: 'external',
|
|
||||||
...override,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build options for mermaid.esm.* build.
|
|
||||||
*
|
|
||||||
* For ESM browser use.
|
|
||||||
*
|
|
||||||
* @param {Options} override - Override options.
|
|
||||||
* @returns {Options} ESBuild build options.
|
|
||||||
*/
|
|
||||||
exports.esmBuild = (override = { minify: true }) => {
|
|
||||||
return buildOptions({
|
|
||||||
format: 'esm',
|
|
||||||
outfile: `dist/mermaid.esm${override.minify ? '.min' : ''}.mjs`,
|
|
||||||
...override,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build options for mermaid.core.* build.
|
|
||||||
*
|
|
||||||
* This build does not bundle `./node_modules/`, as it is designed to be used with
|
|
||||||
* Webpack/ESBuild/Vite to use mermaid inside an app/website.
|
|
||||||
*
|
|
||||||
* @param {Options} override - Override options.
|
|
||||||
* @returns {Options} ESBuild build options.
|
|
||||||
*/
|
|
||||||
exports.esmCoreBuild = (override) => {
|
|
||||||
return buildOptions({
|
|
||||||
format: 'esm',
|
|
||||||
outfile: `dist/mermaid.core.mjs`,
|
|
||||||
external: ['require', 'fs', 'path', ...Object.keys(dependencies)],
|
|
||||||
platform: 'neutral',
|
|
||||||
...override,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build options for mermaid.js build.
|
|
||||||
*
|
|
||||||
* For IIFE browser use (where ESM is not yet supported).
|
|
||||||
*
|
|
||||||
* @param {Options} override - Override options.
|
|
||||||
* @returns {Options} ESBuild build options.
|
|
||||||
*/
|
|
||||||
exports.iifeBuild = (override = { minify: true }) => {
|
|
||||||
return buildOptions({
|
|
||||||
outfile: `dist/mermaid${override.minify ? '.min' : ''}.js`,
|
|
||||||
format: 'iife',
|
|
||||||
footer: {
|
|
||||||
js: 'mermaid = mermaid.default;',
|
|
||||||
},
|
|
||||||
...override,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const jisonPlugin = {
|
|
||||||
name: 'jison',
|
|
||||||
setup(build) {
|
|
||||||
build.onLoad({ filter: /\.jison$/ }, async (args) => {
|
|
||||||
// Load the file from the file system
|
|
||||||
const source = await fs.promises.readFile(args.path, 'utf8');
|
|
||||||
const contents = transformJison(source);
|
|
||||||
return { contents, warnings: [] };
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
@ -26,7 +26,6 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"clean": "rimraf dist",
|
"clean": "rimraf dist",
|
||||||
"build:vite": "ts-node-esm .vite/build.ts",
|
"build:vite": "ts-node-esm .vite/build.ts",
|
||||||
"build:esbuild": "node .esbuild/esbuild.cjs",
|
|
||||||
"build:types": "tsc -p ./tsconfig.json --emitDeclarationOnly",
|
"build:types": "tsc -p ./tsconfig.json --emitDeclarationOnly",
|
||||||
"build:watch": "yarn build:code --watch",
|
"build:watch": "yarn build:code --watch",
|
||||||
"build": "yarn clean; concurrently \"yarn build:vite\" \"yarn build:types\"",
|
"build": "yarn clean; concurrently \"yarn build:vite\" \"yarn build:types\"",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user