UNPKG

aq-web-front

Version:

A compilation framework to allow coding web frontends in a modern style.

114 lines (103 loc) 3.1 kB
var fs = require('fs'); var path = require('path'); var _ = require('underscore'); var babel = require('babel-core'); var sourcemap = require('sourcemap-codec'); module.exports = compile; var es2015 = []; preloadPlugins(); function compile() { var inOpt = this.opt; out = ''; var opts = { filename: inOpt.relativePath, plugins: [], presets: [require('babel-preset-react'), require('babel-preset-stage-0')], comments: !!inOpt.extra.comments, compact: !!inOpt.extra.compact, sourceMaps: true, highlightCode: false }; opts.plugins.push(require('babel-plugin-transform-class-properties')); opts.plugins.push(require('jsx-control-statements')); var mods = require('./modules-hook')(inOpt); opts.plugins.push(mods.plugin); var isJSX = !!opts.filename.match(/\.jsx(\.html)?$/i); if (isJSX) { opts.plugins.push(require('./jsx-view')(inOpt)); } opts.plugins.push(require('./misc')); opts.plugins.push(require('./jsx-extra')); opts.plugins = opts.plugins.concat(es2015); opts.plugins.push(require('./common-functions')()); opts.plugins.push(require('./reserved-identifier')); try { var result = babel.transform(inOpt.sourceContent, opts); } catch(err) { console.warn(err.stack); var loc = err.loc || {line:0, column:0}; err = err.toString() + "\n" + err.codeFrame; console.warn(err); this.reject(err, loc.line, loc.column); return; } this.jsOutput = result.code; this.jsMap.append({ file: inOpt.relativePath, mappings: sourcemap.decode(result.map.mappings) }); for (var i = 0; i < mods.dependencies.length; i++) { this.depends(mods.dependencies[i]); } this.success(); } function preloadPlugins() { console.log(); println('Initialize JS compiler'); require('babel-preset-react'); println('Loaded react syntax'); require('babel-preset-stage-0'); println('Loaded JavaScript sugars'); es2015 = [ 'arrow-functions', 'block-scoped-functions', 'block-scoping', 'classes', 'computed-properties', 'constants', 'destructuring', 'function-name', 'literals', 'object-super', 'parameters', 'shorthand-properties', 'spread', 'sticky-regex', 'template-literals', 'typeof-symbol', 'unicode-regex', ['modules-commonjs', {allowTopLevelThis:true}] ]; for (var k in es2015) { var plugin = es2015[k]; var opt = {}; if (plugin instanceof Array) { opt = plugin[1] || {}; plugin = plugin[0]; } else { opt = {}; } opt.loose = true; opt.spec = true; es2015[k] = [require('babel-plugin-transform-es2015-' + plugin), opt]; println('Loaded ' + plugin); } es2015.push(require('babel-plugin-transform-jscript')); println('JS compiler ready'); console.log(); return es2015; } function println(ln) { process.stdout.write('\033[0G'); process.stdout.write(ln + ' '); }