steal-tools
Version:
Futuristic build tools for ES6 Module applications.
76 lines (62 loc) • 1.89 kB
JavaScript
var asap = require("pdenodeify");
var path = require("path");
var through = require("through2");
var fs = require("fs-extra");
var npmUtils = require("steal/ext/npm-utils");
module.exports = function(){
return through.obj(function(data, enc, done){
addConfiguredSteal(data)
.then(function(){
done(null, data);
}, function(err){
done(err);
});
});
};
function addConfiguredSteal(data) {
var options = data.options;
var configuration = data.configuration;
var stealFilename = options.bundlePromisePolyfill ?
"steal.production.js" :
"steal-sans-promises.production.js";
var stealProductionDest = path.join(configuration.dest, stealFilename);
// Don't do this if we are bundling steal
if (options.bundleSteal) {
return Promise.resolve();
}
var stealProject = require.resolve("steal");
var stealPath = path.join(path.dirname(stealProject), stealFilename);
return asap(fs.readFile)(stealPath, "utf8")
.then(function(src){
return appendConfig(src, data);
})
.then(function(src){
return asap(fs.outputFile)(stealProductionDest, src, "utf8");
});
}
function appendConfig(src, data) {
var main = data.mains[0];
var configMain = data.steal.System.configMain;
var configSrc = [
"if(typeof steal === \"undefined\") steal = {};",
"steal.bundlesPath = \"bundles\";",
"steal.main = \"" + denormalize(main) + "\";",
"steal.configMain = \"" + configMain + "\";"
].join("\n");
return configSrc + "\n" + src;
}
function denormalize(name) {
if(npmUtils.moduleName.isNpm(name)) {
var parsed = npmUtils.moduleName.parse(name);
name = parsedToFriendly(parsed);
if(parsed.plugin) {
var parsedPlugin = npmUtils.moduleName.parse(parsed.plugin.substr(1));
name += "!" + parsedToFriendly(parsedPlugin);
}
}
return name;
}
function parsedToFriendly(parsed) {
var name = parsed.packageName + "/" + parsed.modulePath;
return name;
}