diff --git a/.esbuild/jison.js b/.esbuild/jison.js new file mode 100644 index 000000000..40dda2cb5 --- /dev/null +++ b/.esbuild/jison.js @@ -0,0 +1,18 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { transformJison } = require('./jisonTransformer'); +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.js b/.esbuild/jisonTransformer.js new file mode 100644 index 000000000..5f89c6647 --- /dev/null +++ b/.esbuild/jisonTransformer.js @@ -0,0 +1,14 @@ +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/util.cjs b/.esbuild/util.cjs index 0cddb7e45..7c2d37a50 100644 --- a/.esbuild/util.cjs +++ b/.esbuild/util.cjs @@ -1,4 +1,4 @@ -const { Generator } = require('jison'); +const { transformJison } = require('./jisonTransformer'); const fs = require('fs'); const { dependencies } = require('../package.json'); @@ -91,9 +91,7 @@ const jisonPlugin = { build.onLoad({ filter: /\.jison$/ }, async (args) => { // Load the file from the file system const source = await fs.promises.readFile(args.path, 'utf8'); - const contents = new Generator(source, { 'token-stack': true }).generate({ - moduleMain: '() => {}', // disable moduleMain (default one requires Node.JS modules) - }); + const contents = transformJison(source); return { contents, warnings: [] }; }); }, diff --git a/jison.js b/jison.js deleted file mode 100644 index b907fae6f..000000000 --- a/jison.js +++ /dev/null @@ -1,61 +0,0 @@ -const Jison = require('jison'); -const fileRegex = /\.(jison)$/; - -export default function jison() { - return { - name: 'jison', - - transform(src, id) { - if (fileRegex.test(id)) { - const parser = new Jison.Generator(src, { - moduleType: 'js', - // type, - }); - const source = parser.generate(); - const exporter = ` - const parse = parser.parse.bind(parser); - parser.parser = parse; - - export { parser }; - export default parser; - `; - - // console.log('helll'); - - return { - code: `${source} ${exporter}`, - map: null, // provide source map if available - }; - } - }, - }; -} - -// export default (options = {}) => ({ -// name: 'jison', -// transform(grammar, id) { -// const { include = ['*.jison', '**/*.jison'], exclude, type = 'lalr' } = options; -// const filter = createFilter(include, exclude); -// if (!filter(id)) return null; - -// const parser = new Jison.Generator(grammar, { -// moduleType: 'js', -// type, -// }); - -// const source = parser.generate(); -// const exporter = ` -// const parse = parser.parse.bind(parser); -// parser.parser = parse; - -// export { parser }; -// export default parser; -// `; - -// console.log('helll'); -// return { -// code: `${source} ${exporter}`, -// map: { mappings: '' }, -// }; -// }, -// }); diff --git a/vite.config.js b/vite.config.js index 89bc7e506..c947cae87 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,6 +1,6 @@ import { resolve } from 'path'; import { defineConfig } from 'vite'; -import jison from './jison'; +import jison from './.esbuild/jison'; export default defineConfig({ plugins: [jison()], resolve: { @@ -16,11 +16,22 @@ export default defineConfig({ rollupOptions: { // make sure to externalize deps that shouldn't be bundled // into your library - output: { - name: 'mermaid', - // Provide global variables to use in the UMD build - // for externalized deps - }, + external: ['require', 'fs', 'path'], + output: [ + { + name: 'mermaid', + format: 'esm', + // Provide global variables to use in the UMD build + // for externalized deps + }, + { + name: 'mermaid', + format: 'umd', + + // Provide global variables to use in the UMD build + // for externalized deps + }, + ], }, }, });