pre-compiled
Version:
Targeted precompile for ES6 bundles for Node environments: versions 0.10, 0.11, 0.12, 4, 5
81 lines (65 loc) • 2.53 kB
JavaScript
var la = require('lazy-ass')
var is = require('check-more-types')
var path = require('path')
var fs = require('fs')
var compiled = require('compiled')
la(is.fn(compiled.build), 'missing build', compiled)
var packageFilename = path.join(process.cwd(), './package.json')
var pkg = JSON.parse(fs.readFileSync(packageFilename))
var config = pkg.config && pkg.config['pre-compiled']
la(is.object(config),
'missing pre-compiled config in package file', packageFilename)
// convert a string "files" value to an array
if (is.string(config.files)) {
config.files = [config.files]
}
// choose "dist" as default output directory
if (is.not.unemptyString(config.dir)) {
config.dir = 'dist'
}
la(is.all(config, {dir: is.unemptyString, files: is.array}),
'invalid compiled config', config)
var nodeFeatures = require('../features/get-features')()
la(is.object(nodeFeatures), 'could not load node features')
// assuming pre-compiled module will do the bundle copy on the client side
config.moduleWithBabelPolyfill = 'pick-precompiled'
compiled.build(config)
.then(function () {
var versions = is.array(config.versions) && config.versions ||
is.array(config.node) && config.node
if (is.not.array(versions)) {
versions = Object.keys(nodeFeatures)
}
console.log('compiling for node versions', versions)
var start = Promise.resolve(true)
versions.forEach(function (version) {
var features = nodeFeatures[version]
if (!is.object(features)) {
console.error('Unknown node version', version)
console.error('Available versions', Object.keys(nodeFeatures))
return
}
function compileForVersion () {
console.log('compiling for version', version)
la(is.object(features), 'expected object with features, version', version)
config.esFeatures = features
config.formOutputFilename = function formOutputFilename (bundleName) {
la(is.unemptyString(bundleName), 'expected bundle name')
var dir = is.unemptyString(config.dir) ? config.dir : 'dist'
var filename = path.join(dir, bundleName + '.compiled.for.' + version + '.js')
return filename
}
la(is.fn(compiled.compile), 'not a function (compile)')
return compiled.compile(config)
}
start = start.then(compileForVersion)
})
return start
})
.catch(function (error) {
console.error(error)
console.error(error.stack)
process.exit(-1)
})