1 | const imba1 = require('./bootstrap.compiler.js');
|
2 |
|
3 | const fs = require('fs');
|
4 |
|
5 | function 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 |
|
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 |
|
37 | async 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'];
|
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 |
|
50 | bundle({
|
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 |