Join our webinar on Wednesday, June 26, at 1pm EDTHow Chia Mitigates Risk in the Crypto Industry.Register
Socket
Socket
Sign inDemoInstall

check-version-modules

Package Overview
Dependencies
1
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.2.1 to 1.3.0

lib/deps/checkDependenciesUpdates.js

2

bin/cmd.js

@@ -14,3 +14,3 @@ #!/usr/bin/env node

const checker = require(join(__dirname, "..", "lib", "main.js"));
const getFormatedTime = require(join(__dirname, "..", "lib", "getFormatedTime.js"));
const getFormatedTime = require(join(__dirname, "..", "lib", "utils", "getFormatedTime.js"));

@@ -17,0 +17,0 @@ // consts

@@ -6,132 +6,18 @@

// natives
const { lstat } = require("fs");
// externals
const { join } = require("path");
require("colors");
// locals
const getFormatedTime = require(require("path").join(__dirname, "getFormatedTime.js"));
const downloadPackageData = require(require("path").join(__dirname, "downloadPackageData.js"));
// consts
const extractAndFormateDeps = require(join(__dirname, "deps", "extractAndFormateDeps.js"));
const checkDependenciesUpdates = require(join(__dirname, "deps", "checkDependenciesUpdates.js"));
const DEFAULT_OPTIONS = {
"failAtMajor": true,
"failAtMinor": true,
"failAtPatch": false,
"dev": true,
"console": true
};
const checkFile = require(join(__dirname, "utils", "checkFile.js"));
const checkAndFormateOptions = require(join(__dirname, "utils", "checkAndFormateOptions.js"));
const getFormatedTime = require(join(__dirname, "utils", "getFormatedTime.js"));
const REGEX = RegExp("^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$");
// private
// methods
/**
* Check dependencies
* @param {Array} dependencies : dependencies to check
* @param {object} options : compilation's options
* @param {boolean} valid : is tests passed
* @returns {Promise} : Result operation
*/
function _checkDependenciesUpdates (dependencies, options, valid = true) {
if (!dependencies.length) {
return Promise.resolve(valid);
}
else {
const dependency = dependencies.shift();
return !REGEX.test(dependency.version) ? Promise.reject(new Error(
"Dependency version (" + dependency.version + ") must be strict : ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$"
)) : Promise.resolve().then(() => {
// get registery data
return downloadPackageData(dependency.name)
// extract last version
.then((data) => {
return !data["dist-tags"] || !data["dist-tags"].latest ?
Promise.reject(new Error("\"" + dependency.name + "\" registry does not return latest version")) :
Promise.resolve(data["dist-tags"].latest);
// diff
}).then((latest) => {
let result = valid;
const latestVersions = latest.split(".");
const versions = dependency.version.split(".");
if (parseInt(latestVersions[0], 10) > parseInt(versions[0], 10)) {
if (options.failAtMajor) {
result = false;
}
if (options.console) {
(0, console).log(getFormatedTime(),
dependency.path, "=>", (dependency.version + " < " + latest).bgRed
);
}
}
else if (parseInt(latestVersions[1], 10) > parseInt(versions[1], 10)) {
if (options.failAtMinor) {
result = false;
}
if (options.console) {
(0, console).log(getFormatedTime(),
dependency.path, "=>", (dependency.version + " < " + latest).red
);
}
}
else if (parseInt(latestVersions[2], 10) > parseInt(versions[2], 10)) {
if (options.failAtPatch) {
result = false;
}
if (options.console) {
(0, console).log(getFormatedTime(),
dependency.path, "=>", (dependency.version + " < " + latest).yellow
);
}
}
else if (options.console) {
(0, console).log(getFormatedTime(),
dependency.path, "=>", "Ok".green
);
}
return !dependencies.length ? Promise.resolve(result) : _checkDependenciesUpdates(dependencies, options, result);
});
});
}
}
// module
module.exports = (file, options = DEFAULT_OPTIONS) => {
module.exports = (file, _options) => {

@@ -141,159 +27,23 @@ // check params

if ("undefined" === typeof file) {
return Promise.reject(new ReferenceError("Missing \"file\" parameter"));
}
else if ("string" !== typeof file) {
return Promise.reject(new TypeError("\"file\" parameter is not a string"));
}
else if ("" === file.trim()) {
return Promise.reject(new Error("\"file\" parameter is empty"));
}
return checkFile(file);
else if ("object" !== typeof options) {
return Promise.reject(new TypeError("\"options\" parameter is not an object"));
}
else {
return Promise.resolve().then(() => {
options.failAtMajor = "undefined" === typeof options.failAtMajor ? DEFAULT_OPTIONS.failAtMajor : options.failAtMajor;
options.failAtMinor = "undefined" === typeof options.failAtMinor ? DEFAULT_OPTIONS.failAtMinor : options.failAtMinor;
options.failAtPatch = "undefined" === typeof options.failAtPatch ? DEFAULT_OPTIONS.failAtPatch : options.failAtPatch;
options.dev = "undefined" === typeof options.dev ? DEFAULT_OPTIONS.dev : options.dev;
options.console = "undefined" === typeof options.console ? DEFAULT_OPTIONS.console : options.console;
if ("boolean" !== typeof options.failAtMajor) {
return Promise.reject(new TypeError("\"options.failAtMajor\" parameter is not a boolean"));
}
else if ("boolean" !== typeof options.failAtMinor) {
return Promise.reject(new TypeError("\"options.failAtMinor\" parameter is not a boolean"));
}
else if ("boolean" !== typeof options.failAtPatch) {
return Promise.reject(new TypeError("\"options.failAtPatch\" parameter is not a boolean"));
}
else if ("boolean" !== typeof options.dev) {
return Promise.reject(new TypeError("\"options.dev\" parameter is not a boolean"));
}
else if ("boolean" !== typeof options.console) {
return Promise.reject(new TypeError("\"options.console\" parameter is not a boolean"));
}
else {
return Promise.resolve();
}
});
}
// check file existance
}).then(() => {
return new Promise((resolve) => {
return checkAndFormateOptions(_options);
lstat(file, (err, stats) => {
}).then((options) => {
if (err || !stats.isFile()) {
resolve(false);
}
else {
resolve(true);
}
return extractAndFormateDeps(file, options.dev).then((dependencies) => {
});
}).then((exists) => {
return exists ? Promise.resolve() : Promise.reject(new Error("File \"" + file + "\" does not exists."));
});
// extract deps
}).then(() => {
const packageData = require(file);
const result = [];
const packageDependencies = packageData.dependencies;
Object.keys(packageDependencies).forEach((dependency) => {
result.push({
"dev": false,
"name": dependency,
"version": packageDependencies[dependency]
});
});
if (options.dev) {
const packageDevDependencies = packageData.devDependencies;
if (packageDevDependencies) {
Object.keys(packageDevDependencies).forEach((dependency) => {
result.push({
"dev": true,
"name": dependency,
"version": packageDevDependencies[dependency]
});
});
}
if (options.console) {
(0, console).log(getFormatedTime(), file);
}
return Promise.resolve(result);
// sort deps
}).then((dependencies) => {
const result = [];
dependencies.sort((compared, compareTo) => {
if (compared.dev && !compareTo.dev) {
return 1;
}
else if (!compared.dev && compareTo.dev) {
return -1;
}
else if (compared.name > compareTo.name) {
return 1;
}
else if (compared.name < compareTo.name) {
return -1;
}
else {
return 0;
}
}).forEach((dependency) => {
let path = dependency.name;
path = dependency.dev ? "dev/" + path : path;
result.push({
path,
"name": dependency.name,
"version": dependency.version
});
return checkDependenciesUpdates(dependencies, {
"failAtMajor": options.failAtMajor,
"failAtMinor": options.failAtMinor,
"failAtPatch": options.failAtPatch,
"console": options.console
});
return Promise.resolve(result);
// execute task
}).then((dependencies) => {
if (options.console) {
(0, console).log(getFormatedTime(), file);
}
return _checkDependenciesUpdates(dependencies, {
"failAtMajor": options.failAtMajor,
"failAtMinor": options.failAtMinor,
"failAtPatch": options.failAtPatch,
"console": options.console
});

@@ -300,0 +50,0 @@

{
"name": "check-version-modules",
"version": "1.2.1",
"version": "1.3.0",
"description": "Check modules's version for the package.",

@@ -17,2 +17,6 @@ "main": "lib/main.js",

},
"files": [
"/bin",
"/lib"
],
"husky": {

@@ -46,7 +50,7 @@ "hooks": {

"devDependencies": {
"@types/node": "12.6.3",
"@types/node": "12.6.9",
"coveralls": "3.0.5",
"eslint": "6.0.1",
"husky": "3.0.0",
"mocha": "6.1.4",
"eslint": "6.1.0",
"husky": "3.0.2",
"mocha": "6.2.0",
"nyc": "14.1.1"

@@ -53,0 +57,0 @@ },

@@ -11,4 +11,2 @@ # check-version-modules

> /!\ Warning ! This package is designed to work only with strict version, without artefacts ("^", "~", etc...)
## Installation

@@ -28,2 +26,20 @@

### Supported patterns
> does not support artifacts like "-beta"
> each "*" character will be understood like a "x"'
> here, "n" is a whatever number sample, like "1"
Does support following patterns:
* x (=> x.x.x)
* x.x.n (=> x.x.x)
* x.n.n (=> x.x.x)
* n (=> n.x.x)
* n.x (=> n.x.x)
* n.n (=> n.n.x)
* n.n.n
* ^n.n.n (=> n.x.x)
* ~n.n.n (=> n.n.x)
### Methods

@@ -37,5 +53,5 @@

interface iOptions {
"failAtMajor": boolean; // default: true => used for the returned boolean
"failAtMinor": boolean; // default: true => used for the returned boolean
"failAtPatch": boolean; // default: false => used for the returned boolean
"failAtMajor": boolean; // default: true => if no pattern, used for the returned boolean
"failAtMinor": boolean; // default: true => if no pattern, used for the returned boolean
"failAtPatch": boolean; // default: false => if no pattern, used for the returned boolean
"dev": boolean; // default: true => analyse dev deps too

@@ -100,2 +116,6 @@ "console": boolean; // default: true => print analyse's result in the terminal

$ npm run-script tests
$ git clone git://github.com/Psychopoulet/check-version-modules.git
$ cd ./check-version-modules
$ npm install
$ npm run-script tests
```

@@ -102,0 +122,0 @@

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc