Socket
Socket
Sign inDemoInstall

auto-install

Package Overview
Dependencies
Maintainers
3
Versions
35
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

auto-install - npm Package Compare versions

Comparing version 1.2.6 to 1.3.0

131

helpers.js

@@ -20,3 +20,10 @@ 'use strict'

let installedModules = [];
for (let key in content.dependencies) installedModules.push(key);
for (let key in content.dependencies) installedModules.push({
name: key,
dev: false
});
for (let key in content.devDependencies) installedModules.push({
name: key,
dev: true
});
return installedModules;

@@ -32,10 +39,8 @@ };

let usedModules = [];
for (let i = 0; i < files.length; i++) {
let modulesFromFile = getModulesFromFile(files[i]);
usedModules = usedModules.concat(modulesFromFile);
for (let fileName of files) {
let modulesFromFile = getModulesFromFile(fileName);
let dev = isTestFile(fileName);
for (let name of modulesFromFile) usedModules.push({name, dev});
}
// De-duplicate
usedModules = usedModules.filter((module, position) => {
return usedModules.indexOf(module) === position;
});
usedModules = deduplicate(usedModules);
return usedModules;

@@ -48,11 +53,18 @@ };

let installModule = (module) => {
let spinner = startSpinner('Installing ' + module, 'green');
if (secureMode && !isModulePopular(module)) {
stopSpinner(spinner, module + ' not trusted', 'yellow');
let installModule = ({name, dev}) => {
let spinner = startSpinner('Installing ' + name, 'green');
if (secureMode && !isModulePopular(name)) {
stopSpinner(spinner, name + ' not trusted', 'yellow');
return;
}
let success = runCommand('npm install ' + module + ' --save');
if (success) stopSpinner(spinner, module + ' installed', 'green');
else stopSpinner(spinner, module + ' installation failed', 'yellow');
let command = 'npm install ' + name + ' --save';
let message = name + ' installed';
if (dev) command += '-dev';
if (dev) message += ' in devDependencies';
let success = runCommand(command);
if (success) stopSpinner(spinner, message, 'green');
else stopSpinner(spinner, name + ' installation failed', 'yellow');
};

@@ -62,6 +74,13 @@

let uninstallModule = (module) => {
let spinner = startSpinner('Uninstalling ' + module, 'red');
runCommand('npm uninstall ' + module + ' --save');
stopSpinner(spinner, module + ' removed', 'red');
let uninstallModule = ({name, dev}) => {
let spinner = startSpinner('Uninstalling ' + name, 'red');
let command = 'npm uninstall ' + name + ' --save';
let message = name + ' removed';
if (dev) command += '-dev';
if (dev) message += ' from devDependencies';
runCommand(command);
stopSpinner(spinner, message, 'red');
};

@@ -130,5 +149,5 @@

let isValidModule = (module) => {
let isValidModule = ({name, dev}) => {
let regex = new RegExp("^([a-z0-9-_]{1,})$");
return regex.test(module);
return regex.test(name);
};

@@ -148,3 +167,3 @@

modules = modules.filter((module) => {
return !isBuiltInModule(module);
return !isBuiltInModule(module.name);
});

@@ -158,3 +177,3 @@ return modules;

modules = modules.filter((module) => {
return (module.indexOf('./') !== 0)
return (module.name.indexOf('./') !== 0)
});

@@ -164,6 +183,7 @@ return modules;

/* Array diff prototype */
/* Modules diff */
Array.prototype.diff = function(a) {
return this.filter(function(i) {return a.indexOf(i) < 0;});
let diff = (first, second) => {
let namesFromSecond = getNamesFromModules(second);
return first.filter(module => namesFromSecond.indexOf(module.name) < 0);
};

@@ -187,8 +207,58 @@

const POPULARITY_THRESHOLD = 10000;
let isModulePopular = (module) => {
let result = request('GET', 'https://api.npmjs.org/downloads/point/last-month/' + module);
let downloads = JSON.parse(result.body).downloads;
return (downloads > POPULARITY_THRESHOLD);
let isModulePopular = ({name, dev}) => {
let url = 'https://api.npmjs.org/downloads/point/last-month/' + name;
request('GET', url, (error, response, body) => {
let downloads = JSON.parse(body).downloads;
return (downloads > POPULARITY_THRESHOLD);
});
};
/* Is test file? */
let isTestFile = (name) => {
return (name.endsWith('.spec.js') || name.endsWith('.test.js'));
};
/* Get module names from array of module objects */
let getNamesFromModules = (modules) => {
return modules.map(module => module.name);
};
/* Dedup modules
* Divide modules into prod and dev
* Deduplicates each list
*/
let deduplicate = (modules) => {
let dedupedModules = [];
let testModules = modules.filter(module => module.dev);
dedupedModules = dedupedModules.concat(deduplicateSimilarModules(testModules));
let prodModules = modules.filter(module => !module.dev);
dedupedModules = dedupedModules.concat(deduplicateSimilarModules(prodModules));
return dedupedModules;
};
/* Dedup similar modules
* Deduplicates list
* Ignores/assumes type of the modules in list
*/
let deduplicateSimilarModules = (modules) => {
let dedupedModules = [];
let dedupedModuleNames = [];
for (let module of modules) {
if (dedupedModuleNames.indexOf(module.name) === -1) {
dedupedModules.push(module);
dedupedModuleNames.push(module.name);
}
}
return dedupedModules;
};
/* Public helper functions */

@@ -202,4 +272,5 @@

uninstallModule,
diff,
reinstall
};

@@ -24,8 +24,8 @@ #!/usr/bin/env node

//installModules
let modulesNotInstalled = usedModules.diff(installedModules);
for (let i = 0; i < modulesNotInstalled.length; i++) helpers.installModule(modulesNotInstalled[i]);
let modulesNotInstalled = helpers.diff(usedModules, installedModules);
for (let module of modulesNotInstalled) helpers.installModule(module);
//removeUnusedModules
let unusedModules = installedModules.diff(usedModules);
for (let i = 0; i < unusedModules.length; i++) helpers.uninstallModule(unusedModules[i]);
let unusedModules = helpers.diff(installedModules, usedModules);
for (let module of unusedModules) helpers.uninstallModule(module);

@@ -32,0 +32,0 @@ helpers.reinstall();

{
"name": "auto-install",
"version": "1.2.6",
"version": "1.3.0",
"description": "Auto installs dependencies as you code",

@@ -5,0 +5,0 @@ "keywords": "auto, dependencies, install, package, watch",

@@ -17,2 +17,4 @@ #### auto-install

Modules in `.spec.js` and `.test.js` are added to `devDependencies`
#### Show your support

@@ -19,0 +21,0 @@

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