Socket
Socket
Sign inDemoInstall

eslint-plugin-storybook

Package Overview
Dependencies
130
Maintainers
2
Versions
91
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.5.9--canary.89.4c1ac9e.0 to 0.5.9--canary.59f61dd.0

8

dist/rules/await-interactions.js

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

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

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

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

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

return fixerResult;
};
}
context.report({

@@ -119,0 +119,0 @@ node,

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

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

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

@@ -9,3 +9,2 @@ "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)({

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

const { left, right } = node;
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;
if ((0, ast_1.isIdentifier)(left.property) && left.property.name === 'storyName') {
const propertyName = left.object.name;

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

@@ -9,3 +9,2 @@ "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)({

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

}
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'; });
const titleNode = meta.properties.find((prop) => { var _a; return ((_a = prop.key) === null || _a === void 0 ? void 0 : _a.name) === 'title'; });
if (titleNode) {

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

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

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

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

const variable = experimental_utils_1.ASTUtils.findVariable(scope, name);
const index = ((_a = variable === null || variable === void 0 ? void 0 : variable.references) === null || _a === void 0 ? void 0 : _a.length) || 0;
for (let i = 0; i < index; i++) {
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 ref = variable.references[i];

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

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

const utils_1 = require("../utils");
const ast_1 = require("../utils/ast");
module.exports = (0, create_storybook_rule_1.createStorybookRule)({

@@ -24,3 +25,3 @@ name: 'story-exports',

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

@@ -61,3 +62,3 @@ },

},
'Program:exit': function (node) {
'Program:exit': function (program) {
if (hasStoriesOfImport || !meta) {

@@ -70,9 +71,12 @@ return;

}
const firstNonImportStatement = program.body.find((n) => !(0, ast_1.isImportDeclaration)(n));
const node = firstNonImportStatement || program.body[0] || program;
// @TODO: bring apply this autofix with CSF3 release
// const fix = (fixer) => fixer.insertTextAfter(node, `\n\nexport const Default = {}`)
context.report({
const report = {
node,
messageId: 'shouldHaveStoryExport',
// fix,
});
};
context.report(report);
},

@@ -79,0 +83,0 @@ };

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

name: 'use-storybook-expect',
defaultOptions: [{ storybookJestPath: '@storybook/jest' }],
defaultOptions: [],
meta: {

@@ -33,6 +33,29 @@ type: 'suggestion',

//----------------------------------------------------------------------
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) => (0, ast_1.isImportSpecifier)(spec) && spec.imported.name === 'expect'));
node.specifiers.find((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);
}
});
};
//----------------------------------------------------------------------

@@ -59,2 +82,3 @@ // Public

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

@@ -61,0 +85,0 @@ context.report({

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
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;
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,2 +39,1 @@ 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.docsUrl = void 0;
exports.getAllNamedExports = exports.isValidStoryExport = exports.getDescriptor = exports.getMetaObjectExpression = exports.isPlayFunction = exports.docsUrl = void 0;
const csf_1 = require("@storybook/csf");

@@ -9,2 +9,7 @@ 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) => {

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

const getDescriptor = (metaDeclaration, propertyName) => {
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)) {
const property = metaDeclaration && metaDeclaration.properties.find((p) => p.key && p.key.name === propertyName);
if (!property) {
return undefined;

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

}
// @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.9--canary.89.4c1ac9e.0",
"version": "0.5.9--canary.59f61dd.0",
"description": "Best practice rules for Storybook",

@@ -57,3 +57,2 @@ "keywords": [

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

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

SocketSocket SOC 2 Logo

Product

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

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc