UNPKG

996 BJavaScriptView Raw
1const Asset = require('../Asset');
2const fs = require('@parcel/fs');
3const localRequire = require('../utils/localRequire');
4
5class ReasonAsset extends Asset {
6 constructor(name, options) {
7 super(name, options);
8 this.type = 'js';
9 }
10
11 async generate() {
12 const bsb = await localRequire('bsb-js', this.name);
13
14 // This runs BuckleScript - the Reason to JS compiler.
15 // Other Asset types use `localRequire` but the `bsb-js` package already
16 // does that internally. This should also take care of error handling in
17 // the Reason compilation process.
18 if (process.env.NODE_ENV !== 'test') {
19 await bsb.runBuild();
20 }
21
22 // This is a simplified use-case for Reason - it only loads the recommended
23 // BuckleScript configuration to simplify the file processing.
24 const outputFile = this.name.replace(/\.(re|ml)$/, '.bs.js');
25 const outputContent = await fs.readFile(outputFile);
26 return outputContent.toString();
27 }
28}
29
30module.exports = ReasonAsset;