diff --git a/package.json b/package.json index 3d1556a..a0f461f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "purs-loader", "version": "3.7.2", "description": "A webpack loader for PureScript.", - "main": "lib/index.js", + "main": "src/index.js", "files": [ "LICENSE", "README.md", diff --git a/src/compile.js b/src/compile.js index e37b3e4..a3d5b89 100644 --- a/src/compile.js +++ b/src/compile.js @@ -12,6 +12,8 @@ const debugVerbose = debug_('purs-loader:verbose'); const dargs = require('./dargs'); +const zephyr = require('./zephyr'); + module.exports = function compile(psModule) { const options = psModule.options @@ -20,6 +22,7 @@ module.exports = function compile(psModule) { const compileArgs = (options.psc ? [] : [ 'compile' ]).concat(dargs(Object.assign({ _: options.src, output: options.output, + codegen: options.zephyr ? "js,corefn" : undefined }, options.pscArgs))) const stderr = []; @@ -58,7 +61,13 @@ module.exports = function compile(psModule) { if (options.warnings && warningMessage.length) { psModule.emitWarning(warningMessage); } - resolve(psModule) + + // zephyr dead code elimination + if(options.zephyr) { + zephyr(psModule).then(resolve); + } else { + resolve(psModule) + } } }) }); diff --git a/src/index.js b/src/index.js index ff13302..c936661 100644 --- a/src/index.js +++ b/src/index.js @@ -161,6 +161,7 @@ module.exports = function purescriptLoader(source, map) { bundle: false, warnings: true, watch: false, + zephyr: false, output: outputPath, src: [] }, loaderOptions, { diff --git a/src/zephyr.js b/src/zephyr.js new file mode 100644 index 0000000..f79b6fd --- /dev/null +++ b/src/zephyr.js @@ -0,0 +1,34 @@ +'use strict'; + +const Promise = require('bluebird'); + +const spawn = require('cross-spawn'); + +const debug_ = require('debug'); + +const debug = debug_('purs-loader'); + +module.exports = function compile(psModule) { + const options = psModule.options + + const zephyrCommand = 'zephyr'; + const zephyrArgs = [ psModule.name, "-i", options.output, "-o", options.output ]; + + debug('zephyr %s %O', zephyrCommand, zephyrArgs) + + return new Promise((resolve, reject) => { + debug('Running zephyr...') + + const zephyr = spawn(zephyrCommand, zephyrArgs) + + zephyr.on('close', code => { + debug('finished compiling zephyr.') + if (code !== 0) { + psModule.emitError("Zephyr failed"); + reject(new Error('Zephyr failed')) + } else { + resolve(psModule); + } + }) + }); +};