mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-26 19:56:45 +02:00
fix jison generation
This commit is contained in:
18
.esbuild/jison.js
Normal file
18
.esbuild/jison.js
Normal file
@@ -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
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
14
.esbuild/jisonTransformer.js
Normal file
14
.esbuild/jisonTransformer.js
Normal file
@@ -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}`;
|
||||||
|
};
|
@@ -1,4 +1,4 @@
|
|||||||
const { Generator } = require('jison');
|
const { transformJison } = require('./jisonTransformer');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const { dependencies } = require('../package.json');
|
const { dependencies } = require('../package.json');
|
||||||
|
|
||||||
@@ -91,9 +91,7 @@ const jisonPlugin = {
|
|||||||
build.onLoad({ filter: /\.jison$/ }, async (args) => {
|
build.onLoad({ filter: /\.jison$/ }, async (args) => {
|
||||||
// Load the file from the file system
|
// Load the file from the file system
|
||||||
const source = await fs.promises.readFile(args.path, 'utf8');
|
const source = await fs.promises.readFile(args.path, 'utf8');
|
||||||
const contents = new Generator(source, { 'token-stack': true }).generate({
|
const contents = transformJison(source);
|
||||||
moduleMain: '() => {}', // disable moduleMain (default one requires Node.JS modules)
|
|
||||||
});
|
|
||||||
return { contents, warnings: [] };
|
return { contents, warnings: [] };
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
61
jison.js
61
jison.js
@@ -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: '' },
|
|
||||||
// };
|
|
||||||
// },
|
|
||||||
// });
|
|
@@ -1,6 +1,6 @@
|
|||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import jison from './jison';
|
import jison from './.esbuild/jison';
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [jison()],
|
plugins: [jison()],
|
||||||
resolve: {
|
resolve: {
|
||||||
@@ -16,11 +16,22 @@ export default defineConfig({
|
|||||||
rollupOptions: {
|
rollupOptions: {
|
||||||
// make sure to externalize deps that shouldn't be bundled
|
// make sure to externalize deps that shouldn't be bundled
|
||||||
// into your library
|
// into your library
|
||||||
output: {
|
external: ['require', 'fs', 'path'],
|
||||||
name: 'mermaid',
|
output: [
|
||||||
// Provide global variables to use in the UMD build
|
{
|
||||||
// for externalized deps
|
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
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user