mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-17 22:39:56 +02:00
Serve
This commit is contained in:
13
.esbuild/esbuild.cjs
Normal file
13
.esbuild/esbuild.cjs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
const { esmBuild, umdBuild } = require('./util.cjs');
|
||||||
|
const { build } = require('esbuild');
|
||||||
|
|
||||||
|
const handler = (e) => {
|
||||||
|
console.error(e);
|
||||||
|
process.exit(1);
|
||||||
|
};
|
||||||
|
|
||||||
|
build(esmBuild({ minify: false })).catch(handler);
|
||||||
|
build(umdBuild({ minify: false })).catch(handler);
|
||||||
|
|
||||||
|
build(esmBuild()).catch(handler);
|
||||||
|
build(umdBuild()).catch(handler);
|
53
.esbuild/serve.cjs
Normal file
53
.esbuild/serve.cjs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
const esbuild = require('esbuild');
|
||||||
|
const http = require('http');
|
||||||
|
const path = require('path');
|
||||||
|
const { umdBuild } = require('./util.cjs');
|
||||||
|
|
||||||
|
// Start esbuild's server on a random local port
|
||||||
|
esbuild
|
||||||
|
.serve(
|
||||||
|
{
|
||||||
|
servedir: path.join(__dirname, '..'),
|
||||||
|
},
|
||||||
|
umdBuild({ minify: false })
|
||||||
|
)
|
||||||
|
.then((result) => {
|
||||||
|
// The result tells us where esbuild's local server is
|
||||||
|
const { host, port } = result;
|
||||||
|
|
||||||
|
// Then start a proxy server on port 3000
|
||||||
|
http
|
||||||
|
.createServer((req, res) => {
|
||||||
|
if (req.url.includes('mermaid.js')) {
|
||||||
|
req.url = '/dist/mermaid.js';
|
||||||
|
}
|
||||||
|
const options = {
|
||||||
|
hostname: host,
|
||||||
|
port: 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
|
||||||
|
console.error('pp', req.url);
|
||||||
|
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 });
|
||||||
|
})
|
||||||
|
.listen(3000);
|
||||||
|
});
|
54
.esbuild/util.cjs
Normal file
54
.esbuild/util.cjs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/** @typedef {import('esbuild').BuildOptions} Options */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Options} override
|
||||||
|
* @returns {Options}
|
||||||
|
*/
|
||||||
|
const buildOptions = (override = {}) => {
|
||||||
|
return {
|
||||||
|
bundle: true,
|
||||||
|
minify: true,
|
||||||
|
keepNames: true,
|
||||||
|
globalName: 'mermaid',
|
||||||
|
platform: 'browser',
|
||||||
|
resolveExtensions: ['.js', '.json', '.jison'],
|
||||||
|
external: ['require', 'fs', 'path'],
|
||||||
|
entryPoints: ['src/mermaid.js'],
|
||||||
|
outfile: 'dist/mermaid.min.js',
|
||||||
|
plugins: [jisonPlugin],
|
||||||
|
sourcemap: 'external',
|
||||||
|
...override,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.esmBuild = ({ minify = true } = {}) => {
|
||||||
|
return buildOptions({
|
||||||
|
format: 'esm',
|
||||||
|
outfile: `dist/mermaid.esm${minify ? '.min' : ''}.mjs`,
|
||||||
|
minify,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.umdBuild = ({ minify = true } = {}) => {
|
||||||
|
return buildOptions({ outfile: `dist/mermaid${minify ? '.min' : ''}.js`, minify });
|
||||||
|
};
|
||||||
|
|
||||||
|
const jisonPlugin = {
|
||||||
|
name: 'jison',
|
||||||
|
setup(build) {
|
||||||
|
const { Generator } = require('jison');
|
||||||
|
let fs = require('fs');
|
||||||
|
|
||||||
|
build.onLoad({ filter: /\.jison$/ }, async (args) => {
|
||||||
|
// Load the file from the file system
|
||||||
|
let source = await fs.promises.readFile(args.path, 'utf8');
|
||||||
|
|
||||||
|
try {
|
||||||
|
let contents = new Generator(source, {}).generate();
|
||||||
|
return { contents, warnings: [] };
|
||||||
|
} catch (e) {
|
||||||
|
return { errors: [] };
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
@@ -1,4 +1,5 @@
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
// const esbuild = require('esbuild');
|
||||||
const { ESBuildMinifyPlugin } = require('esbuild-loader');
|
const { ESBuildMinifyPlugin } = require('esbuild-loader');
|
||||||
export const resolveRoot = (...relativePath) => path.resolve(__dirname, '..', ...relativePath);
|
export const resolveRoot = (...relativePath) => path.resolve(__dirname, '..', ...relativePath);
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ export default {
|
|||||||
use: {
|
use: {
|
||||||
loader: 'esbuild-loader',
|
loader: 'esbuild-loader',
|
||||||
options: {
|
options: {
|
||||||
|
// implementation: esbuild,
|
||||||
target: 'es2015',
|
target: 'es2015',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@@ -23,15 +23,4 @@ export default merge(baseConfig, {
|
|||||||
externals: {
|
externals: {
|
||||||
mermaid: 'mermaid',
|
mermaid: 'mermaid',
|
||||||
},
|
},
|
||||||
module: {
|
|
||||||
rules: [
|
|
||||||
{
|
|
||||||
test: /\.js$/,
|
|
||||||
exclude: /node_modules/,
|
|
||||||
use: {
|
|
||||||
loader: 'esbuild-loader',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import mermaid from '../../dist/mermaid.core';
|
import mermaid from '../../dist/mermaid';
|
||||||
|
|
||||||
let code = `flowchart LR
|
let code = `flowchart LR
|
||||||
Power_Supply --> Transmitter_A
|
Power_Supply --> Transmitter_A
|
||||||
|
35
esbuild.cjs
35
esbuild.cjs
@@ -1,35 +0,0 @@
|
|||||||
let jisonPlugin = {
|
|
||||||
name: 'jison',
|
|
||||||
setup(build) {
|
|
||||||
const { Generator } = require('jison');
|
|
||||||
let fs = require('fs');
|
|
||||||
|
|
||||||
build.onLoad({ filter: /\.jison$/ }, async (args) => {
|
|
||||||
// Load the file from the file system
|
|
||||||
let source = await fs.promises.readFile(args.path, 'utf8');
|
|
||||||
|
|
||||||
try {
|
|
||||||
let contents = new Generator(source, {}).generate();
|
|
||||||
return { contents, warnings: [] };
|
|
||||||
} catch (e) {
|
|
||||||
return { errors: [] };
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const { build } = require('esbuild');
|
|
||||||
build({
|
|
||||||
bundle: true,
|
|
||||||
minify: true,
|
|
||||||
keepNames: true,
|
|
||||||
globalName: 'mermaid',
|
|
||||||
format: 'esm',
|
|
||||||
platform: 'browser',
|
|
||||||
resolveExtensions: ['.js', '.json', '.jison'],
|
|
||||||
external: ['require', 'fs', 'path'],
|
|
||||||
entryPoints: ['src/mermaid.js'],
|
|
||||||
outfile: 'dist/mermaid.min.js',
|
|
||||||
plugins: [jisonPlugin],
|
|
||||||
sourcemap: 'external',
|
|
||||||
}).catch(() => process.exit(1));
|
|
@@ -2,12 +2,12 @@
|
|||||||
"name": "mermaid",
|
"name": "mermaid",
|
||||||
"version": "9.1.5",
|
"version": "9.1.5",
|
||||||
"description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",
|
"description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",
|
||||||
"main": "./dist/mermaid.min.js",
|
"main": "dist/mermaid.min.js",
|
||||||
"module": "./dist/mermaid.min.js",
|
"module": "dist/mermaid.esm.min.mjs",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": {
|
".": {
|
||||||
"require": "./dist/mermaid.min.js",
|
"require": "./dist/mermaid.min.js",
|
||||||
"import": "./dist/mermaid.min.js"
|
"import": "./dist/mermaid.esm.min.mjs"
|
||||||
},
|
},
|
||||||
"./*": "./*"
|
"./*": "./*"
|
||||||
},
|
},
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"git graph"
|
"git graph"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:fast": "node esbuild.cjs",
|
"build:fast": "node .esbuild/esbuild.cjs",
|
||||||
"build:development": "webpack --mode development --progress --color",
|
"build:development": "webpack --mode development --progress --color",
|
||||||
"build:production": "webpack --mode production --progress --color",
|
"build:production": "webpack --mode production --progress --color",
|
||||||
"build": "concurrently \"yarn build:development\" \"yarn build:production\"",
|
"build": "concurrently \"yarn build:development\" \"yarn build:production\"",
|
||||||
|
Reference in New Issue
Block a user