127 lines
3.3 KiB
JavaScript
Executable File
127 lines
3.3 KiB
JavaScript
Executable File
require("shelljs/global");
|
|
|
|
var ProgressBar = require("progress");
|
|
var mkdirp = require("mkdirp");
|
|
var rimraf = require("rimraf");
|
|
var child = require("child_process");
|
|
var async = require("async");
|
|
var path = require("path");
|
|
var pad = require("pad");
|
|
var fs = require("fs");
|
|
|
|
var CURRENT_VERSION = fs.readFileSync(__dirname + "/../VERSION", "utf8").trim();
|
|
|
|
// uninstall global babel install
|
|
try {
|
|
exec("npm uninstall -g babel");
|
|
} catch (err) {}
|
|
|
|
// get packages
|
|
var packages = [];
|
|
ls("packages/*").forEach(function (loc) {
|
|
var name = path.basename(loc);
|
|
if (name[0] === ".") return;
|
|
|
|
var pkgLoc = __dirname + "/../packages/" + name + "/package.json";
|
|
if (!fs.existsSync(pkgLoc)) return;
|
|
|
|
var pkg = require(pkgLoc);
|
|
packages.push({
|
|
folder: name,
|
|
pkg: pkg,
|
|
name: pkg.name
|
|
});
|
|
});
|
|
|
|
var completed = false;
|
|
|
|
var bar = new ProgressBar(":packagename ╢:bar╟", {
|
|
total: packages.length,
|
|
complete: "█",
|
|
incomplete: "░",
|
|
clear: true,
|
|
|
|
// terminal columns - package name length - additional characters length
|
|
width: process.stdout.columns - 50 - 3
|
|
});
|
|
|
|
async.parallelLimit(packages.map(function (root) {
|
|
return function (done) {
|
|
//console.log(root.name);
|
|
|
|
var tasks = [];
|
|
var nodeModulesLoc = process.cwd() + "/packages/" + root.folder + "/node_modules";
|
|
|
|
tasks.push(function (done) {
|
|
mkdirp(nodeModulesLoc, done);
|
|
});
|
|
|
|
tasks.push(function (done) {
|
|
async.each(packages, function (sub, done) {
|
|
var ver = false;
|
|
if (root.pkg.dependencies) ver = root.pkg.dependencies[sub.name];
|
|
if (root.pkg.devDependencies && !ver) ver = root.pkg.devDependencies[sub.name];
|
|
if (!ver) return done();
|
|
|
|
// ensure that this is referring to a local package
|
|
if (ver[0] !== "^" || ver[1] !== CURRENT_VERSION[0]) return done();
|
|
|
|
var linkSrc = process.cwd() + "/packages/" + sub.folder;
|
|
var linkDest = nodeModulesLoc + "/" + sub.name;
|
|
|
|
//console.log("Linking", linkSrc, "to", linkDest);
|
|
|
|
rimraf(linkDest, function (err) {
|
|
if (err) return done(err);
|
|
|
|
fs.mkdir(linkDest, function (err) {
|
|
if (err) return done(err);
|
|
|
|
fs.writeFile(linkDest + "/package.json", JSON.stringify({
|
|
name: sub.name,
|
|
version: require(linkSrc + "/package.json").version
|
|
}, null, " "), function (err) {
|
|
if (err) return done(err);
|
|
|
|
fs.writeFile(linkDest + "/index.js", 'module.exports = require("' + linkSrc + '");', done);
|
|
});
|
|
});
|
|
});
|
|
}, done);
|
|
});
|
|
|
|
tasks.push(function (done) {
|
|
child.exec("npm install", {
|
|
cwd: process.cwd() + "/packages/" + root.folder
|
|
}, function (err, stdout, stderr) {
|
|
if (err != null) {
|
|
done(stderr);
|
|
} else {
|
|
//stdout = stdout.trim();
|
|
//if (stdout) console.log(stdout);
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
tasks.push(function (done) {
|
|
if (!completed) bar.tick({
|
|
packagename: pad(root.name.slice(0, 50), 50)
|
|
});
|
|
done();
|
|
});
|
|
|
|
async.series(tasks, done);
|
|
};
|
|
}), 4, function (err) {
|
|
// don't display the ticker if we hit an error and we still have workers
|
|
completed = true;
|
|
|
|
if (err) {
|
|
console.error(err);
|
|
process.exit(1);
|
|
} else {
|
|
process.exit();
|
|
}
|
|
});
|