Socket
Socket
Sign inDemoInstall

eslint-plugin-storybook

Package Overview
Dependencies
Maintainers
2
Versions
95
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eslint-plugin-storybook - npm Package Compare versions

Comparing version 0.5.10 to 0.5.11--canary.89.28723b8.0

8

dist/rules/await-interactions.js

@@ -81,3 +81,3 @@ "use strict";

if (!parent || (0, ast_1.isProgram)(parent))
return null;
return undefined;
if ((0, ast_1.isArrowFunctionExpression)(parent) ||

@@ -109,4 +109,4 @@ (0, ast_1.isFunctionExpression)(parent) ||

const parentFnNode = getClosestFunctionAncestor(node);
const parentFnNeedsAsync = parentFnNode && !parentFnNode.async;
function fixFn(fixer) {
const parentFnNeedsAsync = parentFnNode && !('async' in parentFnNode && parentFnNode.async);
const fixFn = (fixer) => {
const fixerResult = [fixer.insertTextBefore(node, 'await ')];

@@ -117,3 +117,3 @@ if (parentFnNeedsAsync) {

return fixerResult;
}
};
context.report({

@@ -120,0 +120,0 @@ node,

@@ -22,3 +22,3 @@ "use strict";

},
fixable: null,
fixable: undefined,
schema: [],

@@ -25,0 +25,0 @@ },

@@ -9,2 +9,3 @@ "use strict";

const create_storybook_rule_1 = require("../utils/create-storybook-rule");
const ast_1 = require("../utils/ast");
module.exports = (0, create_storybook_rule_1.createStorybookRule)({

@@ -40,3 +41,5 @@ name: 'csf-component',

}
const componentProperty = meta.properties.find((property) => { var _a; return ((_a = property.key) === null || _a === void 0 ? void 0 : _a.name) === 'component'; });
const componentProperty = meta.properties.find((property) => !(0, ast_1.isSpreadElement)(property) &&
'name' in property.key &&
property.key.name === 'component');
if (!componentProperty) {

@@ -43,0 +46,0 @@ context.report({

@@ -35,8 +35,6 @@ "use strict";

}
const titleNode = meta.properties.find((prop) => { var _a; return ((_a = prop.key) === null || _a === void 0 ? void 0 : _a.name) === 'title'; });
//@ts-ignore
const titleNode = meta.properties.find((prop) => { var _a; return !(0, ast_1.isSpreadElement)(prop) && 'name' in prop.key && ((_a = prop.key) === null || _a === void 0 ? void 0 : _a.name) === 'title'; });
if (!titleNode || !(0, ast_1.isLiteral)(titleNode.value)) {
return;
}
//@ts-ignore
const metaTitle = titleNode.value.raw || '';

@@ -50,5 +48,3 @@ if (metaTitle.includes('|')) {

fix: function (fixer) {
return fixer.replaceTextRange(
//@ts-ignore
titleNode.value.range, metaTitle.replace(/\|/g, '/'));
return fixer.replaceTextRange(titleNode.value.range, metaTitle.replace(/\|/g, '/'));
},

@@ -59,5 +55,3 @@ suggest: [

fix: function (fixer) {
return fixer.replaceTextRange(
//@ts-ignore
titleNode.value.range, metaTitle.replace(/\|/g, '/'));
return fixer.replaceTextRange(titleNode.value.range, metaTitle.replace(/\|/g, '/'));
},

@@ -64,0 +58,0 @@ },

@@ -44,2 +44,5 @@ "use strict";

const isInline = (node) => {
if (!('value' in node)) {
return false;
}
return (node.value.type === 'ObjectExpression' ||

@@ -61,5 +64,3 @@ node.value.type === 'Literal' ||

let dynamicProperties = [];
const metaNodes = meta.properties.filter((prop) => { var _a;
//@ts-ignore
return ruleProperties.includes((_a = prop.key) === null || _a === void 0 ? void 0 : _a.name); });
const metaNodes = meta.properties.filter((prop) => 'key' in prop && 'name' in prop.key && ruleProperties.includes(prop.key.name));
metaNodes.forEach((metaNode) => {

@@ -71,3 +72,2 @@ if (!isInline(metaNode)) {

if (dynamicProperties.length > 0) {
//@ts-ignore
dynamicProperties.forEach((propertyNode) => {

@@ -74,0 +74,0 @@ var _a;

@@ -53,4 +53,5 @@ "use strict";

const resolvedStoryName = (0, csf_1.storyNameFromExport)(name);
//@ts-ignore
if ((0, ast_1.isLiteral)(storyNameNode.value) && storyNameNode.value.value === resolvedStoryName) {
if (!(0, ast_1.isSpreadElement)(storyNameNode) &&
(0, ast_1.isLiteral)(storyNameNode.value) &&
storyNameNode.value.value === resolvedStoryName) {
context.report({

@@ -77,3 +78,8 @@ node: storyNameNode,

const { left, right } = node;
if ((0, ast_1.isIdentifier)(left.property) && left.property.name === 'storyName') {
if ('property' in left &&
(0, ast_1.isIdentifier)(left.property) &&
!(0, ast_1.isMetaProperty)(left) &&
left.property.name === 'storyName') {
if (!('name' in left.object && 'value' in right))
return;
const propertyName = left.object.name;

@@ -80,0 +86,0 @@ const propertyValue = right.value;

@@ -9,2 +9,3 @@ "use strict";

const create_storybook_rule_1 = require("../utils/create-storybook-rule");
const ast_1 = require("../utils/ast");
module.exports = (0, create_storybook_rule_1.createStorybookRule)({

@@ -35,3 +36,3 @@ name: 'no-title-property-in-meta',

}
const titleNode = meta.properties.find((prop) => { var _a; return ((_a = prop.key) === null || _a === void 0 ? void 0 : _a.name) === 'title'; });
const titleNode = meta.properties.find((prop) => { var _a; return !(0, ast_1.isSpreadElement)(prop) && 'name' in prop.key && ((_a = prop.key) === null || _a === void 0 ? void 0 : _a.name) === 'title'; });
if (titleNode) {

@@ -38,0 +39,0 @@ context.report({

@@ -37,13 +37,8 @@ "use strict";

const toPascalCase = (str) => {
return (str
//@ts-ignore
return str
.replace(new RegExp(/[-_]+/, 'g'), ' ')
//@ts-ignore
.replace(new RegExp(/[^\w\s]/, 'g'), '')
.replace(
//@ts-ignore
new RegExp(/\s+(.)(\w+)/, 'g'), ($1, $2, $3) => `${$2.toUpperCase() + $3.toLowerCase()}`)
//@ts-ignore
.replace(new RegExp(/\s+(.)(\w+)/, 'g'), (_, $2, $3) => `${$2.toUpperCase() + $3.toLowerCase()}`)
.replace(new RegExp(/\s/, 'g'), '')
.replace(new RegExp(/\w/), (s) => s.toUpperCase()));
.replace(new RegExp(/\w/), (s) => s.toUpperCase());
};

@@ -75,3 +70,4 @@ const checkAndReportError = (id, nonStoryExportsConfig = {}) => {

const variable = experimental_utils_1.ASTUtils.findVariable(scope, name);
for (let i = 0; i < ((_a = variable === null || variable === void 0 ? void 0 : variable.references) === null || _a === void 0 ? void 0 : _a.length); i++) {
const referenceCount = ((_a = variable === null || variable === void 0 ? void 0 : variable.references) === null || _a === void 0 ? void 0 : _a.length) || 0;
for (let i = 0; i < referenceCount; i++) {
const ref = variable.references[i];

@@ -78,0 +74,0 @@ if (!ref.init) {

@@ -24,3 +24,3 @@ "use strict";

},
fixable: null,
fixable: undefined,
schema: [],

@@ -27,0 +27,0 @@ },

@@ -32,29 +32,6 @@ "use strict";

//----------------------------------------------------------------------
const getExpressionStatements = (body = []) => {
return body.filter((b) => (0, ast_1.isExpressionStatement)(b));
};
//@ts-ignore
const isExpect = (expression) => {
return ((0, ast_1.isCallExpression)(expression) &&
(0, ast_1.isMemberExpression)(expression.callee) &&
(0, ast_1.isCallExpression)(expression.callee.object) &&
(0, ast_1.isIdentifier)(expression.callee.object.callee) &&
expression.callee.object.callee.name === 'expect');
};
const isExpectFromStorybookImported = (node) => {
return (node.source.value === '@storybook/jest' &&
node.specifiers.find((spec) => spec.imported.name === 'expect'));
node.specifiers.find((spec) => (0, ast_1.isImportSpecifier)(spec) && spec.imported.name === 'expect'));
};
const checkExpectInvocations = (blockStatement) => {
if (!(0, ast_1.isBlockStatement)(blockStatement)) {
return;
}
const expressionBody = blockStatement.body || [];
const expressionStatements = getExpressionStatements(expressionBody);
expressionStatements.forEach(({ expression }) => {
if (isExpect(expression)) {
expectInvocations.push(expression);
}
});
};
//----------------------------------------------------------------------

@@ -81,3 +58,2 @@ // Public

if (!isImportingFromStorybookExpect && expectInvocations.length) {
//@ts-ignore
expectInvocations.forEach((node) => {

@@ -84,0 +60,0 @@ context.report({

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.isTSNonNullExpression = exports.isTSAsExpression = exports.isTSInterfaceDeclaration = exports.isTSTypeAliasDeclaration = exports.isProgram = exports.isFunctionExpression = exports.isFunctionDeclaration = exports.isReturnStatement = exports.isSpreadElement = exports.isProperty = exports.isObjectPattern = exports.isObjectExpression = exports.isNewExpression = exports.isMemberExpression = exports.isLiteral = exports.isJSXAttribute = exports.isImportSpecifier = exports.isImportNamespaceSpecifier = exports.isImportDefaultSpecifier = exports.isImportDeclaration = exports.isSequenceExpression = exports.isAssignmentExpression = exports.isVariableDeclaration = exports.isExpressionStatement = exports.isCallExpression = exports.isBlockStatement = exports.isArrowFunctionExpression = exports.isArrayExpression = exports.isVariableDeclarator = exports.isIdentifier = exports.isAwaitExpression = exports.ASTUtils = void 0;
exports.isMetaProperty = exports.isTSNonNullExpression = exports.isTSAsExpression = exports.isTSInterfaceDeclaration = exports.isTSTypeAliasDeclaration = exports.isProgram = exports.isFunctionExpression = exports.isFunctionDeclaration = exports.isReturnStatement = exports.isSpreadElement = exports.isProperty = exports.isObjectPattern = exports.isObjectExpression = exports.isNewExpression = exports.isMemberExpression = exports.isLiteral = exports.isJSXAttribute = exports.isImportSpecifier = exports.isImportNamespaceSpecifier = exports.isImportDefaultSpecifier = exports.isImportDeclaration = exports.isSequenceExpression = exports.isAssignmentExpression = exports.isVariableDeclaration = exports.isExpressionStatement = exports.isCallExpression = exports.isBlockStatement = exports.isArrowFunctionExpression = exports.isArrayExpression = exports.isVariableDeclarator = exports.isIdentifier = exports.isAwaitExpression = exports.ASTUtils = void 0;
const experimental_utils_1 = require("@typescript-eslint/experimental-utils");

@@ -39,1 +39,2 @@ var experimental_utils_2 = require("@typescript-eslint/experimental-utils");

exports.isTSNonNullExpression = isNodeOfType(experimental_utils_1.AST_NODE_TYPES.TSNonNullExpression);
exports.isMetaProperty = isNodeOfType(experimental_utils_1.AST_NODE_TYPES.MetaProperty);
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAllNamedExports = exports.isValidStoryExport = exports.getDescriptor = exports.getMetaObjectExpression = exports.isPlayFunction = exports.docsUrl = void 0;
exports.getAllNamedExports = exports.isValidStoryExport = exports.getDescriptor = exports.getMetaObjectExpression = exports.docsUrl = void 0;
const csf_1 = require("@storybook/csf");

@@ -9,7 +9,2 @@ const experimental_utils_1 = require("@typescript-eslint/experimental-utils");

exports.docsUrl = docsUrl;
const isPlayFunction = (node) => {
const propertyName = node.left && node.left.property && node.left.property.name;
return propertyName === 'play';
};
exports.isPlayFunction = isPlayFunction;
const getMetaObjectExpression = (node, context) => {

@@ -31,4 +26,5 @@ let meta = node.declaration;

const getDescriptor = (metaDeclaration, propertyName) => {
const property = metaDeclaration && metaDeclaration.properties.find((p) => p.key && p.key.name === propertyName);
if (!property) {
const property = metaDeclaration &&
metaDeclaration.properties.find((p) => 'key' in p && 'name' in p.key && p.key.name === propertyName);
if (!property || (0, ast_1.isSpreadElement)(property)) {
return undefined;

@@ -43,6 +39,10 @@ }

}
// @ts-ignore
return t.value;
});
case 'Literal':
// TODO: Investigation needed. Type systems says, that "RegExpLiteral" does not exist
// @ts-ignore
case 'RegExpLiteral':
// @ts-ignore
return property.value.value;

@@ -49,0 +49,0 @@ default:

{
"name": "eslint-plugin-storybook",
"version": "0.5.10",
"version": "0.5.11--canary.89.28723b8.0",
"description": "Best practice rules for Storybook",

@@ -38,3 +38,3 @@ "keywords": [

"test": "jest",
"test:ci": "jest --ci",
"test:ci": "tsc --noEmit && jest --ci",
"generate-rule": "ts-node ./tools/generate-rule",

@@ -58,2 +58,3 @@ "update-configs": "ts-node ./tools/update-configs",

"@types/node": "^16.11.6",
"@types/requireindex": "^1.2.0",
"@typescript-eslint/parser": "^5.3.0",

@@ -60,0 +61,0 @@ "auto": "^10.32.2",

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