diff --git a/.esbuild/esbuild.cjs b/.esbuild/esbuild.cjs deleted file mode 100644 index 393dadcf3..000000000 --- a/.esbuild/esbuild.cjs +++ /dev/null @@ -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); diff --git a/.esbuild/jison.js b/.esbuild/jison.js deleted file mode 100644 index 7b68f9809..000000000 --- a/.esbuild/jison.js +++ /dev/null @@ -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 - }; - } - }, - }; -} diff --git a/.esbuild/jisonTransformer.cjs b/.esbuild/jisonTransformer.cjs deleted file mode 100644 index 5f89c6647..000000000 --- a/.esbuild/jisonTransformer.cjs +++ /dev/null @@ -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}`; -}; diff --git a/.esbuild/serve.cjs b/.esbuild/serve.cjs deleted file mode 100644 index 4c06572f3..000000000 --- a/.esbuild/serve.cjs +++ /dev/null @@ -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('

A custom 404 page

'); - 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`); - }); -})(); diff --git a/.esbuild/util.cjs b/.esbuild/util.cjs deleted file mode 100644 index 4dbcd01c3..000000000 --- a/.esbuild/util.cjs +++ /dev/null @@ -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: [] }; - }); - }, -}; diff --git a/package.json b/package.json index 50083fd40..531c3925d 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,6 @@ "scripts": { "clean": "rimraf dist", "build:vite": "ts-node-esm .vite/build.ts", - "build:esbuild": "node .esbuild/esbuild.cjs", "build:types": "tsc -p ./tsconfig.json --emitDeclarationOnly", "build:watch": "yarn build:code --watch", "build": "yarn clean; concurrently \"yarn build:vite\" \"yarn build:types\"",