fix jison generation

This commit is contained in:
Sidharth Vinod
2022-09-19 12:49:24 +05:30
parent c7ec44da09
commit 7bf877d820
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: [] };
});
},