UNPKG

1.55 kBJavaScriptView Raw
1const imba1 = require('./bootstrap.compiler.js');
2// const imba2 = require('./bootstrap.compiler2.js');
3const fs = require('fs');
4
5function plugin(build){
6 let options = this;
7 let fs = require('fs');
8
9 build.onLoad({ filter: /\.imba1/ }, async (args) => {
10 let raw = await fs.promises.readFile(args.path, 'utf8');
11 let target = {
12 browser: 'web',
13 worker: 'webworker'
14 }[options.platform] || options.platform || 'web';
15 let body = imba1.compile(raw,{
16 target: target,
17 filename: args.path,
18 sourcePath: args.path
19 });
20 return {contents: body.js}
21 })
22
23 build.onLoad({ filter: /\.imba/ }, async (args) => {
24 // console.log('loading imba',args);
25 let raw = await fs.promises.readFile(args.path, 'utf8');
26 let t0 = Date.now();
27 let body = imba2.compile(raw,{
28 platform: 'browser',
29 sourcePath: args.path
30 });
31 return {
32 contents: body.js
33 }
34 })
35}
36
37async function bundle(options){
38 options.plugins = [{name: 'imba', setup: plugin.bind(options)}];
39 options.resolveExtensions = ['.imba','.imba1','.ts','.mjs','.cjs','.js','.css','.json'];
40 options.target = options.target || ['es2020']; // ['chrome58', 'firefox57', 'safari11', 'edge16'];
41 options.bundle = true;
42
43 let res = await require('esbuild').build(options);
44 var parser = require('../build/grammar.js').parser;
45 fs.writeFileSync(__dirname + "/../build/parser.js", parser.generate());
46 console.log('built parser');
47
48}
49
50bundle({
51 entryPoints: ['src/compiler/grammar.imba1'],
52 outfile: 'build/grammar.js',
53 sourcemap: false,
54 format: 'cjs',
55 platform: 'node'
56})
\No newline at end of file