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

@roadmunk/eslint-plugin-roadmunk-custom

Package Overview
Dependencies
Maintainers
10
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@roadmunk/eslint-plugin-roadmunk-custom - npm Package Compare versions

Comparing version 1.8.0 to 1.8.1

19

lib/helper.js

@@ -6,10 +6,2 @@ 'use strict';

/**
* Object containing information about the modules being imported & the corresponding AST node
* @typedef {Object} ModuleInfo
* @property {String} moduleInfo.type - Contains detail about the type of the require/import statement. Possible values include "Literal" & "ArrayExpression"
* @property {String[]} moduleInfo.moduleNames - An array containing the names of module that are being imported
*/
/**
* Checks if the given node contains properties that have certain values

@@ -98,5 +90,5 @@ *

* @param {ASTNode} node - The node whose properties need to be looked up
* @returns {ModuleInfo}
* @returns {ASTNode[]} - An array of nodes for all the literal arguments passed into the require call
*/
function getModuleNamesFromRequireCall(node) {
function getLiteralModuleNamesFromRequireCall(node) {
if (!isRequireCall(node)) {

@@ -109,6 +101,3 @@ return [];

return {
type : isLiteralRequire ? 'Literal' : 'ArrayExpression',
moduleNames : args.map(arg => arg.value),
};
return _.filter(args, arg => arg.type === 'Literal');
}

@@ -182,3 +171,3 @@

isRequireCallArrayExpression,
getModuleNamesFromRequireCall,
getLiteralModuleNamesFromRequireCall,
};

@@ -76,3 +76,3 @@ const _ = require('lodash');

// Multi by two to accomodate for relative requires they will be slotted after this (rank + 1)
// Multi by two to accommodate for relative requires they will be slotted after this (rank + 1)
rank *= 2;

@@ -79,0 +79,0 @@

@@ -9,3 +9,3 @@ /* eslint-disable no-console */

const _ = require('lodash');
const { isRequireCall, getModuleNamesFromRequireCall } = require('../helper');
const { isRequireCall, getLiteralModuleNamesFromRequireCall } = require('../helper');

@@ -24,20 +24,12 @@ module.exports = {

/**
* Checks if the module being imported is a Literal require statement
* @param {ModuleInfo} - See helper.js for type definition
*/
function isModuleTypeLiteral(moduleInfo) {
return moduleInfo.type === 'Literal';
}
/**
* Returns a string representation of all module names but with the `.js` extension stripped off
* @param {ModuleInfo} - See helper.js for type definition
* @param {ASTNode[]} - An array of all the nodes that have values ending with `.js`
* @returns {String}
*/
function getFixedModuleNames(moduleInfo) {
if (isModuleTypeLiteral(moduleInfo) || moduleInfo.type === 'ImportDeclaration') {
return `'${getFixedModuleName(moduleInfo.moduleNames[0])}'`;
}
return `[${moduleInfo.moduleNames.map(moduleName => `'${getFixedModuleName(moduleName)}'`).join(', ')}]`;
function getFixedNodes(offendingNodes) {
return _.map(offendingNodes, node => ({
start : node.start,
end : node.end,
fixedName : `'${getFixedModuleName(node.value)}'`,
}));
}

@@ -53,9 +45,10 @@

function generateReport(moduleInfo, node) {
if (!_.some(moduleInfo.moduleNames, moduleName => moduleName.endsWith('.js'))) {
function generateReport(moduleNodes, node) {
const offendingNodes = _.filter(moduleNodes, node => node.value.endsWith('.js'));
if (_.isEmpty(offendingNodes)) {
return;
}
const fixedModuleNames = getFixedModuleNames(moduleInfo);
const argToReplace = node.type === 'ImportDeclaration' ? node.source : node.arguments[0];
const fixedNodes = getFixedNodes(offendingNodes);

@@ -66,3 +59,3 @@ context.report({

fix(fixer) {
return fixer.replaceTextRange([ argToReplace.start, argToReplace.end ], fixedModuleNames);
return _.map(fixedNodes, node => fixer.replaceTextRange([ node.start, node.end ], node.fixedName));
},

@@ -78,9 +71,9 @@ });

const moduleNames = getModuleNamesFromRequireCall(node);
generateReport(moduleNames, node);
const moduleNodes = getLiteralModuleNamesFromRequireCall(node);
generateReport(moduleNodes, node);
},
ImportDeclaration(node) {
const moduleNames = [ node.source.value ];
generateReport({ type : node.type, moduleNames }, node);
const nodes = [ node.source ];
generateReport(nodes, node);
},

@@ -87,0 +80,0 @@ };

@@ -9,3 +9,3 @@ /**

const { generateReport, registerNode } = require('../order-common');
const { isRequireCall } = require('../helper');
const { isRequireCallLiteral } = require('../helper');

@@ -56,3 +56,3 @@ // ------------------------------------------------------------------------------

CallExpression(node) {
if (!isRequireCall(node) || !isTopLevelDeclaration(node)) {
if (!isRequireCallLiteral(node) || !isTopLevelDeclaration(node)) {
return;

@@ -59,0 +59,0 @@ }

{
"name": "@roadmunk/eslint-plugin-roadmunk-custom",
"version": "1.8.0",
"version": "1.8.1",
"description": "Plugin to hold custom ESLint rules for Roadmunk",

@@ -5,0 +5,0 @@ "keywords": [

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

"require([ 'models/CustomProperty', 'models/Account' ], (customProperty, account) => false );",
"(function(moduleName){ require([ 'moduleName' ], module => module) })",
'(function(moduleName){ require([ moduleName ], module => module) })',
],

@@ -63,2 +65,7 @@

{
code : "require([ variable, './models/Account.js', './models/User', './models/Test.js'], foo => bar);",
output : "require([ variable, './models/Account', './models/User', './models/Test'], foo => bar);",
errors : requireErrors,
},
{
code : "import Account from './models/Account.js';",

@@ -65,0 +72,0 @@ output : "import Account from './models/Account';",

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