@zkochan/pnpm
Version:
A fast implementation of npm install
83 lines (60 loc) • 1.55 kB
JavaScript
var _ = require('lodash');
var flatten = require('flat-arguments');
var async = require('async');
var exports = module.exports = function () {
return new Flags(arguments);
};
var Flags = exports.Instance = function () {
this.internals = {
all: flatten(arguments)
};
};
Flags.prototype.all = function () {
return this.internals.all;
};
Flags.prototype.add = function () {
// Parse names of given flags
var names = _(arguments)
.flatten()
.map(function (flg) {
return flg.name();
})
.flatten()
.value();
// Test for unique flag
var flg = this.findByName(names);
// Flag exists in collection
// Add any names that aren't part of the current flag
if (flg) {
flg.internals.name.add(names);
}
// Flag doesn't exist in collection
if (!flg) {
this.internals.all = this.internals.all.concat(flatten(arguments));
}
return this;
};
Flags.prototype.findByName = function () {
var names = flatten(arguments);
return _.find(this.all(), function (flag) {
return flag.matchesName(names);
});
};
Flags.prototype.run = function (flagMap, doneRunningFlags) {
var flagsToRun = _(flagMap)
.keys()
.map(function (flagName) {
var flag = this.findByName(flagName);
if (flag) {
return {
instance: flag,
args: flagMap[flagName]
};
}
}, this)
.filter(_.identity)
.value();
async.each(flagsToRun, function (flag, flagDone) {
flag.instance.runOnce(flag.args, flagDone);
}, doneRunningFlags);
};