fix jison generation

This commit is contained in:
Sidharth Vinod 2022-09-19 12:49:24 +05:30
parent c7ec44da09
commit 7bf877d820
No known key found for this signature in database
GPG Key ID: FB5CCD378D3907CD
5 changed files with 51 additions and 71 deletions

18
.esbuild/jison.js Normal file
View 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
};
}
},
};
}

View 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}`;
};

View File

@ -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: [] };
});
},

View File

@ -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: '' },
// };
// },
// });

View File

@ -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
},
],
},
},
});