New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

multik

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

multik - npm Package Compare versions

Comparing version 0.0.1 to 0.1.3

bin/mk-grunt

10

CHANGELOG.md
# Changelog
### 0.1.3 - 2014-02-10
- Added the ability to override the value of repo (multikrepo.json)
### 0.1.2 - 2014-02-10
- Add filter in cli options (run grunt task in dependency/dependencies)
- Remove base functions from Multigrunt.js to Gruntfile.js
- Bugfix
### 0.0.1 - 2014-01-31
- Initial version

45

lib/commands/help.js

@@ -0,4 +1,18 @@

var L = require('mout').lang;
var chalk = require('chalk');
var cli = require('../util/cli');
function help() {
var options = cli.options;
var name;
if (options.argv.remain.length > 0){
name = options.argv.remain[0];
}
if (name && L.isFunction(help[name])) {
return help[name]();
}
var message = [

@@ -8,11 +22,16 @@ '',

'',
' ' + chalk.cyan('mk') + ' <command>',
' ' + chalk.cyan('mk') + ' [--version] <command> [--help]',
'',
'Commands:',
'',
' help Display help information about Multik',
' install Install dependencies',
' grunt Run the task of Grunt',
' status Show the status of dependencies',
' update Update dependencies',
'',
'Options:',
'',
' --help Display help information about Multik',
' --filter Apply filter for dependencies',
'See \'mk help <command>\' for more information on a specific command. '
];

@@ -25,2 +44,24 @@

help.grunt = function () {
var message = [
'',
'Usage:',
'',
' ' + chalk.cyan('mk-grunt') + ' [options] [task [task ...]]',
'',
'Options:',
'',
' --help Display help information about Multik',
' --local Run a local grant depending',
' --filter Apply filter for dependencies',
' --general Execution only general grunt',
''
];
message.forEach(function (str) {
console.log(str);
});
};
module.exports = help;

@@ -5,3 +5,4 @@ module.exports = {

update: require('./update'),
grunt: require('./grunt'),
status: require('./status')
};

4

lib/commands/status.js
var Project = require('../core/Project');
function status() {
var project = new Project();
function status(options) {
var project = new Project(options);
project.status();

@@ -6,0 +6,0 @@ };

@@ -0,1 +1,3 @@

'use strict';
var fs = require('fs');

@@ -6,5 +8,10 @@ var path = require('path');

var async = require('async');
var resolve = require('resolve').sync;
var exec = require('child_process').exec;
var cli = require('../util/cli');
var Dependency = function (config, options) {
this.name = options.name;
this.group = options.group;
this._config = config;

@@ -85,4 +92,4 @@ this._options = options;

this.analyse(function(err){
if (err){
this.analyse(function (err) {
if (err) {
return callback(err);

@@ -92,3 +99,3 @@ }

if (__self._isInstalled) {
__self._log(options.version, 'Already installed', 'green')
__self._log(options.version, 'Already installed', 'green');
return callback(null);

@@ -99,15 +106,39 @@ }

__self._shell("git", ['clone', options.repo, '-b', options.version, destinationPath, '--progress'], {
cwd: options.cwd
}, function (err, stdout, stderr) {
if (err) {
__self._log(options.version, 'Error in installation', 'green')
console.error(stderr);
} else {
__self._log(options.version, 'Installation is complete', 'green')
async.series([
function (asyncCallback) {
__self._shell("git", ['clone', options.repo, '-b', options.version, destinationPath, '--progress'], {
cwd: options.cwd
}, function (err, stdout, stderr) {
if (err) {
__self._log(options.version, 'Installation error', 'red');
console.log(stderr);
}
asyncCallback(err);
});
},
function (asyncCallback) {
var packageJsonFile = path.join(destinationPath, 'package.json');
fs.exists(packageJsonFile, function (exists) {
if (!exists) {
return asyncCallback(null);
}
__self._shell("npm", ['install'], {
cwd: destinationPath
}, function (err, stdout, stderr) {
if (err) {
__self._log(options.version, 'Error in npm install', 'red');
console.log(stderr);
}
asyncCallback(err);
});
});
}
], function (err) {
if (!err) {
__self._log(options.version, 'Installation is complete', 'green');
}
if (callback) {
callback(err);
}
return callback(err);
});

@@ -124,4 +155,4 @@ });

this.analyse(function(err){
if (err){
this.analyse(function (err) {
if (err) {
return callback(err);

@@ -137,3 +168,3 @@ }

if (__self._isLocalChanged){
if (__self._isLocalChanged) {
__self._log(localBranch, 'There are local changes', 'red');

@@ -150,3 +181,3 @@ return callback(null);

}, function (err, stdout, stderr) {
if (err){
if (err) {
console.log(stderr);

@@ -161,3 +192,3 @@ }

}, function (err, stdout, stderr) {
if (err){
if (err) {
console.log(stderr);

@@ -172,3 +203,3 @@ }

}, function (err, stdout, stderr) {
if (err){
if (err) {
console.log(stderr);

@@ -198,4 +229,4 @@ }

this.analyse(function(err){
if (err){
this.analyse(function (err) {
if (err) {
return callback(err);

@@ -205,3 +236,3 @@ }

if (!__self._isInstalled) {
__self._log(options.version, 'Not installed', 'red')
__self._log(options.version, 'Not installed', 'red');
return callback(null);

@@ -223,4 +254,85 @@ }

Dependency.prototype.grunt = function (callback) {
callback = callback || function () {
};
var options = this._options;
var cliOptions = cli.options;
var __self = this;
this.analyse(function (err) {
if (err) {
return callback(err);
}
if (!__self._isInstalled) {
__self._log(options.version, 'Not installed', 'red');
return callback(null);
}
var destinationPath = __self._destinationPath;
var tasks = cliOptions.argv.remain;
if (cliOptions.argv.remain[0] === 'grunt') {
tasks = cliOptions.argv.remain.slice(1);
}
// Local Grunt
if (cliOptions.local) {
__self._shell("grunt", tasks, {
cwd: destinationPath
}, function (err, stdout, stderr) {
if (err) {
__self._log(options.version, 'Grunt error', 'red');
console.log(stdout);
} else {
__self._log(options.version, 'Grunt ok', 'green');
console.log(stdout);
}
callback(err);
});
} else {
var basedir = process.cwd();
var gruntpath;
try {
gruntpath = resolve('grunt', {basedir: basedir});
} catch (ex) {
}
// No grunt install found!
if (!gruntpath) {
__self._log(options.version, 'Grunt not found', 'red');
return callback(null);
}
var grunt = require(gruntpath);
grunt.multik = {
currentDependency: {
name: __self.name,
group: __self.group,
directory: destinationPath
}
};
// TODO: hack (only hardcore)
grunt.util.oldDependExit = grunt.util.exit;
grunt.util.exit = function(exitCode, streams) {
grunt.multik = null;
grunt.util.exit = grunt.util.oldDependExit;
if (exitCode === 0) {
__self._log(options.version, 'Grunt ok', 'green');
return callback(null);
}
__self._log(options.version, 'Grunt error', 'red');
grunt.util.oldDependExit(exitCode, streams);
};
grunt.cli({force: true});
}
});
};
Dependency.prototype._log = function (branch, message, color) {
var options = this._options;
var config = this._config;

@@ -234,3 +346,3 @@ var destinationPath = this._destinationPath;

var padBranch = mout.string.rpad(branch, 15, ' ')
var padBranch = mout.string.rpad(branch, 15, ' ');

@@ -237,0 +349,0 @@ if (branch === 'master') {

@@ -0,4 +1,9 @@

'use strict';
var path = require('path');
var async = require('async');
var resolve = require('resolve').sync;
var mout = require('mout');
var undersore = require('underscore');
var L = mout.lang;
var defaultConfig = require('../config');

@@ -8,5 +13,11 @@ var multikJson = require('../util/multikJson');

var Project = function (config) {
var Project = function (options, config) {
this._options = mout.object.mixIn({}, options || {
filter: null
});
this._config = mout.object.mixIn({}, config || defaultConfig);
this._jsonFile = path.join(this._config.cwd, 'multik.json');
this._multikJsonFile = path.join(this._config.cwd, 'multik.json');
this._multikRepoJsonFile = path.join(this._config.cwd, 'multikrepo.json');
this._multikRepoGlobalJsonFile = path.join(this._config.cwd, '..', 'multikrepo.json');
};

@@ -29,8 +40,9 @@

});
})
});
async.parallelLimit(stack, 5, function (err) {
// TODO: If parralell limit > 2, then error in git clone
async.parallelLimit(stack, 1, function (err) {
callback(err, dependencies);
});
})
});
};

@@ -53,3 +65,3 @@

});
})
});

@@ -59,3 +71,3 @@ async.parallelLimit(stack, 5, function (err) {

});
})
});
};

@@ -78,3 +90,3 @@

});
})
});

@@ -84,6 +96,71 @@ async.parallelLimit(stack, 5, function (err) {

});
})
});
};
Project.prototype.grunt = function (callback) {
callback = callback || function () {
};
var options = this._options;
this._analyse(function (err, dependencies) {
if (err) {
return callback(err);
}
var stack = [];
if (!options.general) {
mout.array.forEach(dependencies, function(dependency) {
stack.push(function(stackCallback) {
dependency.grunt(stackCallback);
});
});
}
// execute general grunt
if (!options.filter) {
// necessary to optimize (make grant launch a separate function)
stack.push(function(stackCallback) {
var basedir = process.cwd();
var gruntpath;
try {
gruntpath = resolve('grunt', {basedir: basedir});
} catch (ex) {
}
// No grunt install found!
if (!gruntpath) {
console.error('Grunt not found');
return stackCallback(new Error('Grunt error'));
}
var grunt = require(gruntpath);
// TODO: hack (only hardcore)
var oldGruntExit = grunt.util.exit;
grunt.util.exit = function(exitCode, streams) {
grunt.util.exit = oldGruntExit;
if (exitCode === 0) {
console.log('General grunt ok');
return stackCallback(null);
}
console.error('General grunt error');
oldGruntExit(exitCode, streams);
};
console.log('Run general grunt');
grunt.cli({force: true});
});
}
async.series(stack, function (err) {
callback(err, dependencies);
});
});
};
// -----------------------
Project.prototype._analyse = function (callback) {

@@ -94,3 +171,3 @@ var __self = this;

function (asyncCallback) {
__self._readMultikJson(asyncCallback)
__self._readMultikJson(asyncCallback);
},

@@ -112,14 +189,51 @@ function (asyncCallback) {

var jsonFile = this._jsonFile;
var jsonFile = this._multikJsonFile;
var jsonRepoFile = this._multikRepoJsonFile;
var jsonRepoGlobalFile = this._multikRepoGlobalJsonFile;
var __self = this;
multikJson.read(jsonFile, function (err, json) {
if (err) {
console.error('Syntax error in JSON file: ' + err.file);
return callback(err);
}
__self._json = json;
var overrideRepo = {};
return callback(null);
var stack = [];
stack.push (function(stackCallback){
multikJson.read(jsonFile, function (err, json) {
if (err) {
console.error('File not found or syntax error in JSON file: ' + err.file);
return stackCallback(err);
}
__self._json = json;
return stackCallback(null);
});
});
stack.push (function(stackCallback){
multikJson.read(jsonRepoGlobalFile, function (err, json) {
if (err) {
return stackCallback(null);
}
overrideRepo = json;
return stackCallback(null);
});
});
stack.push (function(stackCallback){
multikJson.read(jsonRepoFile, function (err, json) {
if (err) {
return stackCallback(null);
}
__self._jsonOverrideRepo = undersore.extend(overrideRepo, json);;
return stackCallback(null);
});
});
async.series(stack, function (err) {
callback(err);
});
};

@@ -133,7 +247,14 @@

var config = this._config;
var options = this._options;
var json = this._json;
var jsonOverrideRepo = this._jsonOverrideRepo;
var groups = json.groups || {};
var dependencies = [];
var stack = [];
var dependencyId;
var filter;
if (L.isString(options.filter)) {
filter = mout.string.trim(options.filter);
}
for (dependencyId in json.dependencies) {

@@ -155,3 +276,24 @@ var dependOptions = json.dependencies[dependencyId];

if (dependOptions.repo
&& jsonOverrideRepo[dependOptions.name]
&& jsonOverrideRepo[dependOptions.name].repo){
dependOptions.repo = jsonOverrideRepo[dependOptions.name].repo;
}
var dependency = new Dependency(config, dependOptions);
if (filter) {
// mk-grunt --filter=@<dependGroup>
if (filter.indexOf('@') > -1) {
var group = filter.slice(1);
if (dependency.group !== group) {
continue;
}
}
// mk-grunt --filter=<dependName>
else if (filter !== dependency.name) {
continue;
}
}
dependencies.push(dependency);

@@ -158,0 +300,0 @@ }

@@ -10,4 +10,2 @@ /*

var possibleJsons = ['multik.json', '.multik.json'];
function read(file, options, callback) {

@@ -25,13 +23,2 @@ if (typeof options === 'function') {

// It's a directory, so we find the json inside it
if (stat.isDirectory()) {
return find(file, function (err, file) {
if (err) {
return callback(err);
}
read(file, options, callback);
});
}
// Otherwise read it

@@ -111,30 +98,2 @@ fs.readFile(file, function (err, contents) {

function find(folder, files, callback) {
var err;
var file;
if (typeof files === 'function') {
callback = files;
files = possibleJsons;
}
if (!files.length) {
err = createError('None of ' + possibleJsons.join(', ') + ' were found in ' + folder, 'ENOENT');
return callback(err);
}
file = path.resolve(path.join(folder, files[0]));
fs.exists(file, function (exists) {
if (!exists) {
return find(folder, files.slice(1), callback);
}
if (files[0] !== 'component.json') {
return callback(null, file);
}
callback(null, file);
});
}
module.exports = read;

@@ -145,2 +104,1 @@ module.exports.read = read;

module.exports.normalize = normalize;
module.exports.find = find;

@@ -5,6 +5,7 @@ {

"author": "Alexander Kuzmin <roosit@abricos.org>",
"version": "0.0.1",
"version": "0.1.3",
"license": "MIT",
"bin": {
"mk": "./bin/mk"
"mk": "./bin/mk",
"mk-grunt": "./bin/mk"
},

@@ -18,7 +19,7 @@ "repository": {

"build",
"web",
"tool",
"cli",
"scaffold",
"git"
"git",
"clone",
"update"
],

@@ -35,4 +36,7 @@ "dependencies": {

"async": "~0.2.10",
"deep-extend": "~0.2.6"
"deep-extend": "~0.2.6",
"grunt": "~0.4.2",
"underscore": "^1.7.0",
"resolve": "~0.6.1"
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc