eslint-plugin-nextfriday 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../package.json","../src/rules/enforce-readonly-component-props.ts","../src/rules/file-kebab-case.ts","../src/rules/jsx-pascal-case.ts","../src/rules/md-filename-case-restriction.ts","../src/rules/no-emoji.ts","../src/rules/no-explicit-return-type.ts","../src/rules/prefer-destructuring-params.ts","../src/rules/prefer-import-type.ts","../src/rules/prefer-interface-over-inline-types.ts","../src/rules/prefer-named-param-types.ts","../src/rules/prefer-react-import-types.ts","../src/rules/react-props-destructure.ts"],"sourcesContent":["import packageJson from \"../package.json\" assert { type: \"json\" };\n\nimport enforceReadonlyComponentProps from \"./rules/enforce-readonly-component-props\";\nimport fileKebabCase from \"./rules/file-kebab-case\";\nimport jsxPascalCase from \"./rules/jsx-pascal-case\";\nimport mdFilenameCaseRestriction from \"./rules/md-filename-case-restriction\";\nimport noEmoji from \"./rules/no-emoji\";\nimport noExplicitReturnType from \"./rules/no-explicit-return-type\";\nimport preferDestructuringParams from \"./rules/prefer-destructuring-params\";\nimport preferImportType from \"./rules/prefer-import-type\";\nimport preferInterfaceOverInlineTypes from \"./rules/prefer-interface-over-inline-types\";\nimport preferNamedParamTypes from \"./rules/prefer-named-param-types\";\nimport preferReactImportTypes from \"./rules/prefer-react-import-types\";\nimport reactPropsDestructure from \"./rules/react-props-destructure\";\n\nimport type { TSESLint } from \"@typescript-eslint/utils\";\n\nconst meta = {\n name: packageJson.name,\n version: packageJson.version,\n} as const;\n\nconst rules = {\n \"enforce-readonly-component-props\": enforceReadonlyComponentProps,\n \"file-kebab-case\": fileKebabCase,\n \"jsx-pascal-case\": jsxPascalCase,\n \"md-filename-case-restriction\": mdFilenameCaseRestriction,\n \"no-emoji\": noEmoji,\n \"no-explicit-return-type\": noExplicitReturnType,\n \"prefer-destructuring-params\": preferDestructuringParams,\n \"prefer-import-type\": preferImportType,\n \"prefer-interface-over-inline-types\": preferInterfaceOverInlineTypes,\n \"prefer-named-param-types\": preferNamedParamTypes,\n \"prefer-react-import-types\": preferReactImportTypes,\n \"react-props-destructure\": reactPropsDestructure,\n} as const satisfies Record<string, TSESLint.RuleModule<string, readonly unknown[]>>;\n\nconst plugin = {\n meta,\n rules,\n} as const;\n\nconst baseRules = {\n \"nextfriday/no-emoji\": \"warn\",\n \"nextfriday/file-kebab-case\": \"warn\",\n \"nextfriday/md-filename-case-restriction\": \"warn\",\n \"nextfriday/prefer-destructuring-params\": \"warn\",\n \"nextfriday/no-explicit-return-type\": \"warn\",\n \"nextfriday/prefer-import-type\": \"warn\",\n \"nextfriday/prefer-named-param-types\": \"warn\",\n \"nextfriday/prefer-react-import-types\": \"warn\",\n} as const;\n\nconst baseRecommendedRules = {\n \"nextfriday/no-emoji\": \"error\",\n \"nextfriday/file-kebab-case\": \"error\",\n \"nextfriday/md-filename-case-restriction\": \"error\",\n \"nextfriday/prefer-destructuring-params\": \"error\",\n \"nextfriday/no-explicit-return-type\": \"error\",\n \"nextfriday/prefer-import-type\": \"error\",\n \"nextfriday/prefer-named-param-types\": \"error\",\n \"nextfriday/prefer-react-import-types\": \"error\",\n} as const;\n\nconst jsxRules = {\n \"nextfriday/jsx-pascal-case\": \"warn\",\n \"nextfriday/prefer-interface-over-inline-types\": \"warn\",\n \"nextfriday/react-props-destructure\": \"warn\",\n \"nextfriday/enforce-readonly-component-props\": \"warn\",\n} as const;\n\nconst jsxRecommendedRules = {\n \"nextfriday/jsx-pascal-case\": \"error\",\n \"nextfriday/prefer-interface-over-inline-types\": \"error\",\n \"nextfriday/react-props-destructure\": \"error\",\n \"nextfriday/enforce-readonly-component-props\": \"error\",\n} as const;\n\nconst createConfig = (configRules: Record<string, string>) => ({\n plugins: {\n nextfriday: plugin,\n },\n rules: configRules,\n});\n\nconst configs = {\n base: createConfig(baseRules),\n \"base/recommended\": createConfig(baseRecommendedRules),\n react: createConfig({\n ...baseRules,\n ...jsxRules,\n }),\n \"react/recommended\": createConfig({\n ...baseRecommendedRules,\n ...jsxRecommendedRules,\n }),\n nextjs: createConfig({\n ...baseRules,\n ...jsxRules,\n }),\n \"nextjs/recommended\": createConfig({\n ...baseRecommendedRules,\n ...jsxRecommendedRules,\n }),\n} as const;\n\nconst nextfridayPlugin = {\n meta,\n configs,\n rules,\n} as const;\n\nexport default nextfridayPlugin;\n\nexport { meta, configs, rules };\n","{\n \"name\": \"eslint-plugin-nextfriday\",\n \"version\": \"1.3.0\",\n \"description\": \"A comprehensive ESLint plugin providing custom rules and configurations for Next Friday development workflows.\",\n \"keywords\": [\n \"eslint\",\n \"eslintplugin\",\n \"eslint-plugin\",\n \"nextfriday\",\n \"next-friday\",\n \"linting\",\n \"code-quality\",\n \"javascript\",\n \"typescript\",\n \"development-tools\"\n ],\n \"homepage\": \"https://github.com/next-friday/eslint-plugin-nextfriday\",\n \"bugs\": {\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Next Friday <nextfriday.developer@gmail.com>\",\n \"contributors\": [\n \"@joetakara\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/index.d.ts\",\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"lib/index.js\",\n \"types\": \"lib/index.d.ts\",\n \"files\": [\n \"LICENSE\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"docs\",\n \"lib\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"changeset:publish\": \"npm publish --provenance --access public\",\n \"changeset:version\": \"changeset version\",\n \"clear\": \"rm -rf lib node_modules/.cache .eslintcache\",\n \"eslint\": \"eslint src --ext .js,.ts,.mjs --fix\",\n \"eslint:check\": \"eslint src --ext .js,.ts,.mjs\",\n \"preinstall\": \"npx only-allow pnpm\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"pnpm run build\",\n \"prettier\": \"prettier --write .\",\n \"prettier:check\": \"prettier --check .\",\n \"sort-package-json\": \"pnpm exec sort-package-json\",\n \"sort-package-json:check\": \"pnpm exec sort-package-json --check\",\n \"test\": \"jest\",\n \"test:coverage\": \"jest --coverage\",\n \"test:watch\": \"jest --watch\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@typescript-eslint/utils\": \"^8.42.0\",\n \"emoji-regex\": \"^10.5.0\",\n \"tsup\": \"^8.5.0\"\n },\n \"devDependencies\": {\n \"@changesets/changelog-github\": \"^0.5.1\",\n \"@changesets/cli\": \"^2.29.6\",\n \"@commitlint/cli\": \"^19.8.1\",\n \"@commitlint/config-conventional\": \"^19.8.1\",\n \"@eslint/js\": \"^9.35.0\",\n \"@jest/globals\": \"^30.1.2\",\n \"@stylistic/eslint-plugin\": \"^3.1.0\",\n \"@swc/core\": \"^1.13.5\",\n \"@types/eslint\": \"^9.6.1\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^22.5.4\",\n \"@types/ramda\": \"^0.31.0\",\n \"@typescript-eslint/parser\": \"^8.42.0\",\n \"@typescript-eslint/rule-tester\": \"^8.42.0\",\n \"eslint\": \"^9.35.0\",\n \"eslint-config-airbnb-extended\": \"^2.2.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-import-resolver-typescript\": \"^4.4.4\",\n \"eslint-plugin-import-x\": \"^4.16.1\",\n \"eslint-plugin-jest\": \"^29.0.1\",\n \"eslint-plugin-prettier\": \"^5.5.4\",\n \"eslint-plugin-sonarjs\": \"^3.0.5\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^29.7.0\",\n \"lint-staged\": \"^16.1.6\",\n \"prettier\": \"^3.6.2\",\n \"sort-package-json\": \"^3.4.0\",\n \"ts-jest\": \"^29.4.1\",\n \"ts-node\": \"^10.9.2\",\n \"typescript\": \"^5.6.2\",\n \"typescript-eslint\": \"^8.42.0\"\n },\n \"peerDependencies\": {\n \"eslint\": \"^9.0.0\"\n },\n \"packageManager\": \"pnpm@9.12.0\",\n \"engines\": {\n \"node\": \">=22.0.0\",\n \"pnpm\": \">=9.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst enforceReadonlyComponentProps = createRule({\n name: \"enforce-readonly-component-props\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce Readonly wrapper for React component props when using named types or interfaces\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n useReadonly: \"Component props should be wrapped with Readonly<> for immutability\",\n },\n },\n defaultOptions: [],\n create(context) {\n function hasJSXInConditional(node: TSESTree.ConditionalExpression): boolean {\n return (\n node.consequent.type === AST_NODE_TYPES.JSXElement ||\n node.consequent.type === AST_NODE_TYPES.JSXFragment ||\n node.alternate.type === AST_NODE_TYPES.JSXElement ||\n node.alternate.type === AST_NODE_TYPES.JSXFragment\n );\n }\n\n function hasJSXInLogical(node: TSESTree.LogicalExpression): boolean {\n return node.right.type === AST_NODE_TYPES.JSXElement || node.right.type === AST_NODE_TYPES.JSXFragment;\n }\n\n function hasJSXReturn(block: TSESTree.BlockStatement): boolean {\n return block.body.some((stmt) => {\n if (stmt.type === AST_NODE_TYPES.ReturnStatement && stmt.argument) {\n return (\n stmt.argument.type === AST_NODE_TYPES.JSXElement ||\n stmt.argument.type === AST_NODE_TYPES.JSXFragment ||\n (stmt.argument.type === AST_NODE_TYPES.ConditionalExpression && hasJSXInConditional(stmt.argument)) ||\n (stmt.argument.type === AST_NODE_TYPES.LogicalExpression && hasJSXInLogical(stmt.argument))\n );\n }\n return false;\n });\n }\n\n function isReactComponent(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ): boolean {\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (node.body.type === AST_NODE_TYPES.JSXElement || node.body.type === AST_NODE_TYPES.JSXFragment) {\n return true;\n }\n if (node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n } else if (node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.FunctionDeclaration) {\n if (node.body && node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n }\n return false;\n }\n\n function isNamedType(node: TSESTree.TypeNode): boolean {\n return node.type === AST_NODE_TYPES.TSTypeReference;\n }\n\n function isAlreadyReadonly(node: TSESTree.TypeNode): boolean {\n if (node.type === AST_NODE_TYPES.TSTypeReference && node.typeName) {\n if (node.typeName.type === AST_NODE_TYPES.Identifier && node.typeName.name === \"Readonly\") {\n return true;\n }\n }\n return false;\n }\n\n function checkFunction(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ) {\n if (!isReactComponent(node)) {\n return;\n }\n if (node.params.length !== 1) {\n return;\n }\n const param = node.params[0];\n if (param.type === AST_NODE_TYPES.Identifier && param.typeAnnotation) {\n const { typeAnnotation } = param.typeAnnotation;\n if (isNamedType(typeAnnotation) && !isAlreadyReadonly(typeAnnotation)) {\n const { sourceCode } = context;\n const typeText = sourceCode.getText(typeAnnotation);\n context.report({\n node: param.typeAnnotation,\n messageId: \"useReadonly\",\n fix(fixer) {\n return fixer.replaceText(typeAnnotation, `Readonly<${typeText}>`);\n },\n });\n }\n }\n }\n\n return {\n ArrowFunctionExpression: checkFunction,\n FunctionExpression: checkFunction,\n FunctionDeclaration: checkFunction,\n };\n },\n});\n\nexport default enforceReadonlyComponentProps;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst isKebabCase = (str: string) => {\n if (/\\.(config|rc|setup|spec|test)$/.test(str) || /^[a-z0-9]+(?:-[a-z0-9]+)*\\.[a-z0-9]+(?:-[a-z0-9]+)*$/.test(str)) {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\.[a-z0-9]+(?:-[a-z0-9]+)*)*$/.test(str);\n }\n\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(str);\n};\n\nconst fileKebabCase = createRule({\n name: \"file-kebab-case\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce kebab-case filenames for .ts and .js files\",\n },\n messages: {\n fileKebabCase: \"File names must be kebab-case\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n const ext = path.extname(filename);\n\n if (ext !== \".ts\" && ext !== \".js\") {\n return;\n }\n\n const basename = path.basename(filename, ext);\n\n if (!isKebabCase(basename)) {\n context.report({\n loc: { line: 1, column: 0 },\n messageId: \"fileKebabCase\",\n });\n }\n },\n };\n },\n});\n\nexport default fileKebabCase;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst isPascalCase = (str: string) => /^[A-Z][a-zA-Z0-9]*$/.test(str) && !/^[A-Z]+$/.test(str);\n\nconst jsxPascalCase = createRule({\n name: \"jsx-pascal-case\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce PascalCase filenames for .jsx and .tsx files\",\n },\n messages: {\n jsxPascalCase: \"JSX/TSX file names must be PascalCase\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n const ext = path.extname(filename);\n\n if (ext !== \".jsx\" && ext !== \".tsx\") {\n return;\n }\n\n const basename = path.basename(filename, ext);\n\n if (!isPascalCase(basename)) {\n context.report({\n loc: { line: 1, column: 0 },\n messageId: \"jsxPascalCase\",\n });\n }\n },\n };\n },\n});\n\nexport default jsxPascalCase;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst mdFilenameCaseRestriction = createRule({\n name: \"md-filename-case-restriction\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce .md filenames to be SNAKE_CASE only\",\n },\n messages: {\n invalidFilenameCase: \"Markdown filename must be SNAKE_CASE (UPPERCASE with underscores). Found: '{{ filename }}'\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n\n if (!filename.endsWith(\".md\")) {\n return;\n }\n\n const basename = path.basename(filename, \".md\");\n\n function isSnakeCase(text: string): boolean {\n return /^[A-Z][A-Z0-9_]*$/.test(text);\n }\n\n function isValidCase(text: string): boolean {\n return isSnakeCase(text);\n }\n\n if (!isValidCase(basename)) {\n context.report({\n node: context.sourceCode.ast,\n messageId: \"invalidFilenameCase\",\n data: { filename: basename },\n });\n }\n },\n };\n },\n});\n\nexport default mdFilenameCaseRestriction;\n","import emojiRegex from \"emoji-regex\";\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst noEmoji = createRule({\n name: \"no-emoji\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow emoji characters in source code\",\n },\n messages: {\n noEmoji: \"Emoji are not allowed in source code\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const { sourceCode } = context;\n\n return {\n Program() {\n const text = sourceCode.getText();\n const regex = emojiRegex();\n const matches = Array.from(text.matchAll(regex));\n\n matches.forEach((match) => {\n const loc = sourceCode.getLocFromIndex(match.index);\n\n context.report({\n loc,\n messageId: \"noEmoji\",\n });\n });\n },\n };\n },\n});\n\nexport default noEmoji;\n","import { ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst noExplicitReturnType = createRule({\n name: \"no-explicit-return-type\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow explicit return types on functions\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n noExplicitReturnType: \"Remove explicit return type '{{returnType}}' - TypeScript can infer it automatically\",\n },\n },\n defaultOptions: [],\n create(context) {\n const checkFunction = (\n node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression,\n ) => {\n if (node.returnType) {\n const returnTypeText = context.sourceCode.getText(node.returnType);\n context.report({\n node: node.returnType,\n messageId: \"noExplicitReturnType\",\n data: {\n returnType: returnTypeText,\n },\n fix(fixer) {\n return fixer.remove(node.returnType!);\n },\n });\n }\n };\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n };\n },\n});\n\nexport default noExplicitReturnType;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferDestructuringParams = createRule({\n name: \"prefer-destructuring-params\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce destructuring for functions with multiple parameters\",\n },\n messages: {\n preferDestructuring: \"Functions with multiple parameters should use destructuring\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const isCallbackFunction = (node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression) => {\n const { parent } = node;\n return parent?.type === AST_NODE_TYPES.CallExpression;\n };\n\n const isDeveloperFunction = (\n node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression,\n ) => {\n if (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (isCallbackFunction(node)) {\n return false;\n }\n\n const { parent } = node;\n return (\n parent?.type === AST_NODE_TYPES.VariableDeclarator ||\n parent?.type === AST_NODE_TYPES.AssignmentExpression ||\n parent?.type === AST_NODE_TYPES.Property ||\n parent?.type === AST_NODE_TYPES.MethodDefinition\n );\n }\n\n return false;\n };\n\n const checkFunction = (\n node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression,\n ) => {\n const { filename } = context;\n if (filename.includes(\"node_modules\") || filename.includes(\".d.ts\")) {\n return;\n }\n\n if (!isDeveloperFunction(node)) {\n return;\n }\n\n if (node.type === AST_NODE_TYPES.FunctionDeclaration && node.id) {\n const functionName = node.id.name;\n if (functionName.startsWith(\"_\") || functionName.includes(\"$\") || /^[A-Z][a-zA-Z]*$/.test(functionName)) {\n return;\n }\n }\n\n if (node.params.length <= 1) {\n return;\n }\n\n const hasNonDestructuredParams = node.params.some(\n (param: TSESTree.Parameter) =>\n param.type !== AST_NODE_TYPES.ObjectPattern && param.type !== AST_NODE_TYPES.RestElement,\n );\n\n if (hasNonDestructuredParams) {\n context.report({\n node,\n messageId: \"preferDestructuring\",\n });\n }\n };\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n };\n },\n});\n\nexport default preferDestructuringParams;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferImportType = createRule({\n name: \"prefer-import-type\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce using 'import type' for type-only imports\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n preferImportType: \"Use 'import type' for type-only imports\",\n },\n },\n defaultOptions: [],\n create(context) {\n function checkImportDeclaration(node: TSESTree.ImportDeclaration) {\n if (node.importKind === \"type\") {\n return;\n }\n\n if (\n context.filename.includes(\".test.\") ||\n context.filename.includes(\".spec.\") ||\n context.filename.includes(\"__tests__\")\n ) {\n return;\n }\n\n if (node.specifiers.length === 0) {\n return;\n }\n\n const source = node.source.value;\n const isRuntimeImport =\n /\\.(css|scss|sass|less|styl)(\\?.*)?$/.test(source) ||\n /\\.(png|jpg|jpeg|gif|svg|webp|ico|bmp)(\\?.*)?$/.test(source) ||\n /\\.(woff|woff2|ttf|eot|otf)(\\?.*)?$/.test(source) ||\n /\\.(mp4|webm|ogg|mp3|wav|flac|aac)(\\?.*)?$/.test(source) ||\n /\\.(json|txt|md|xml|yml|yaml)(\\?.*)?$/.test(source) ||\n /^next\\/(font|image|link|head|script|dynamic|router)/.test(source) ||\n source.includes(\"/font/\") ||\n source === \"react-dom\" ||\n source === \"react-dom/client\" ||\n source === \"react-dom/server\" ||\n source.startsWith(\"@emotion/\") ||\n source.startsWith(\"styled-components\") ||\n source.includes(\"polyfill\") ||\n source.includes(\"shim\") ||\n source === \"styled-jsx/css\" ||\n source.startsWith(\"webpack/\");\n\n if (isRuntimeImport) {\n return;\n }\n\n const isTypeOnlyImport = node.specifiers.every((specifier) => {\n if (specifier.type === AST_NODE_TYPES.ImportDefaultSpecifier) {\n return false;\n }\n if (specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier) {\n return false;\n }\n if (specifier.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName =\n specifier.imported.type === AST_NODE_TYPES.Identifier ? specifier.imported.name : specifier.imported.value;\n\n const isKnownTypeOnly =\n (node.source.value === \"@typescript-eslint/utils\" && [\"TSESTree\", \"RuleContext\"].includes(importedName)) ||\n (node.source.value === \"react\" &&\n [\"Component\", \"ComponentProps\", \"ReactNode\", \"FC\", \"JSX\", \"ReactElement\", \"PropsWithChildren\"].includes(\n importedName,\n )) ||\n importedName.endsWith(\"Type\") ||\n importedName.endsWith(\"Interface\") ||\n importedName.endsWith(\"Props\");\n\n return isKnownTypeOnly;\n }\n return false;\n });\n\n if (isTypeOnlyImport) {\n context.report({\n node,\n messageId: \"preferImportType\",\n fix(fixer) {\n const sourceText = context.sourceCode.getText(node);\n const fixedSource = sourceText.replace(/^import\\s+/, \"import type \");\n return fixer.replaceText(node, fixedSource);\n },\n });\n }\n }\n\n return {\n ImportDeclaration: checkImportDeclaration,\n };\n },\n});\n\nexport default preferImportType;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferInterfaceOverInlineTypes = createRule({\n name: \"prefer-interface-over-inline-types\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce interface declarations over inline type annotations for React component props\",\n },\n fixable: undefined,\n schema: [],\n messages: {\n useInterface: \"Use interface declaration for component props instead of inline type annotation\",\n },\n },\n defaultOptions: [],\n create(context) {\n function hasJSXInConditional(node: TSESTree.ConditionalExpression): boolean {\n return (\n node.consequent.type === AST_NODE_TYPES.JSXElement ||\n node.consequent.type === AST_NODE_TYPES.JSXFragment ||\n node.alternate.type === AST_NODE_TYPES.JSXElement ||\n node.alternate.type === AST_NODE_TYPES.JSXFragment\n );\n }\n\n function hasJSXInLogical(node: TSESTree.LogicalExpression): boolean {\n return node.right.type === AST_NODE_TYPES.JSXElement || node.right.type === AST_NODE_TYPES.JSXFragment;\n }\n\n function hasJSXReturn(block: TSESTree.BlockStatement): boolean {\n return block.body.some((stmt) => {\n if (stmt.type === AST_NODE_TYPES.ReturnStatement && stmt.argument) {\n return (\n stmt.argument.type === AST_NODE_TYPES.JSXElement ||\n stmt.argument.type === AST_NODE_TYPES.JSXFragment ||\n (stmt.argument.type === AST_NODE_TYPES.ConditionalExpression && hasJSXInConditional(stmt.argument)) ||\n (stmt.argument.type === AST_NODE_TYPES.LogicalExpression && hasJSXInLogical(stmt.argument))\n );\n }\n return false;\n });\n }\n\n function isReactComponent(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ): boolean {\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (node.body.type === AST_NODE_TYPES.JSXElement || node.body.type === AST_NODE_TYPES.JSXFragment) {\n return true;\n }\n if (node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n } else if (node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.FunctionDeclaration) {\n if (node.body && node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n }\n return false;\n }\n\n function isInlineTypeAnnotation(node: TSESTree.TypeNode): boolean {\n if (node.type === AST_NODE_TYPES.TSTypeLiteral) {\n return true;\n }\n if (node.type === AST_NODE_TYPES.TSTypeReference && node.typeArguments) {\n return node.typeArguments.params.some((param) => param.type === AST_NODE_TYPES.TSTypeLiteral);\n }\n if (node.type === AST_NODE_TYPES.TSUnionType) {\n return node.types.some((type) => isInlineTypeAnnotation(type));\n }\n return false;\n }\n\n function hasInlineObjectType(node: TSESTree.TypeNode): boolean {\n if (node.type === AST_NODE_TYPES.TSTypeLiteral) {\n return true;\n }\n if (node.type === AST_NODE_TYPES.TSTypeReference && node.typeArguments) {\n return node.typeArguments.params.some((param) => param.type === AST_NODE_TYPES.TSTypeLiteral);\n }\n if (node.type === AST_NODE_TYPES.TSUnionType) {\n return node.types.some((type) => hasInlineObjectType(type));\n }\n return false;\n }\n\n function checkFunction(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ) {\n if (!isReactComponent(node)) {\n return;\n }\n if (node.params.length !== 1) {\n return;\n }\n const param = node.params[0];\n if (param.type === AST_NODE_TYPES.Identifier && param.typeAnnotation) {\n const { typeAnnotation } = param.typeAnnotation;\n if (isInlineTypeAnnotation(typeAnnotation) && hasInlineObjectType(typeAnnotation)) {\n context.report({\n node: param.typeAnnotation,\n messageId: \"useInterface\",\n });\n }\n }\n }\n\n return {\n ArrowFunctionExpression: checkFunction,\n FunctionExpression: checkFunction,\n FunctionDeclaration: checkFunction,\n };\n },\n});\n\nexport default preferInterfaceOverInlineTypes;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferNamedParamTypes = createRule({\n name: \"prefer-named-param-types\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce named interfaces/types instead of inline object types for function parameters\",\n },\n messages: {\n preferNamedParamTypes:\n \"Use a named interface or type for object parameter types instead of inline type annotations\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n function hasInlineObjectType(param: TSESTree.Parameter): boolean {\n if (param.type === AST_NODE_TYPES.AssignmentPattern) {\n return hasInlineObjectType(param.left);\n }\n\n if (param.type === AST_NODE_TYPES.ObjectPattern) {\n if (param.typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSTypeLiteral) {\n return true;\n }\n }\n\n if (param.type === AST_NODE_TYPES.Identifier) {\n if (param.typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSTypeLiteral) {\n return true;\n }\n }\n\n return false;\n }\n\n function checkFunction(\n node:\n | TSESTree.FunctionDeclaration\n | TSESTree.FunctionExpression\n | TSESTree.ArrowFunctionExpression\n | TSESTree.TSMethodSignature\n | TSESTree.MethodDefinition,\n ) {\n let params: TSESTree.Parameter[] = [];\n\n if (\"params\" in node) {\n params = node.params;\n } else if (\"value\" in node && node.value) {\n params = node.value.params;\n }\n\n params.forEach((param) => {\n if (hasInlineObjectType(param)) {\n context.report({\n node: param,\n messageId: \"preferNamedParamTypes\",\n });\n }\n });\n }\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n TSMethodSignature: checkFunction,\n MethodDefinition: checkFunction,\n };\n },\n});\n\nexport default preferNamedParamTypes;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferReactImportTypes = createRule({\n name: \"prefer-react-import-types\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce importing React types and utilities from 'react' instead of using React.X\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n preferDirectImport: \"Use direct import '{{importStatement}}' instead of 'React.{{typeName}}'\",\n },\n },\n defaultOptions: [],\n create(context) {\n const reactTypes = new Set([\n \"ReactNode\",\n \"ReactElement\",\n \"ReactChildren\",\n \"ReactChild\",\n \"ComponentType\",\n \"FC\",\n \"FunctionComponent\",\n \"Component\",\n \"PureComponent\",\n \"ReactEventHandler\",\n \"MouseEventHandler\",\n \"ChangeEventHandler\",\n \"FormEventHandler\",\n \"KeyboardEventHandler\",\n \"TouchEventHandler\",\n \"PointerEventHandler\",\n \"FocusEventHandler\",\n \"UIEventHandler\",\n \"WheelEventHandler\",\n \"AnimationEventHandler\",\n \"TransitionEventHandler\",\n \"RefObject\",\n \"MutableRefObject\",\n \"Ref\",\n \"ForwardedRef\",\n \"HTMLProps\",\n \"ComponentProps\",\n \"JSXElementConstructor\",\n ]);\n\n const reactRuntimeExports = new Set([\n \"useState\",\n \"useEffect\",\n \"useContext\",\n \"useReducer\",\n \"useCallback\",\n \"useMemo\",\n \"useRef\",\n \"useImperativeHandle\",\n \"useLayoutEffect\",\n \"useDebugValue\",\n \"useDeferredValue\",\n \"useTransition\",\n \"useId\",\n \"useSyncExternalStore\",\n \"useInsertionEffect\",\n \"createElement\",\n \"createContext\",\n \"forwardRef\",\n \"memo\",\n \"lazy\",\n \"Suspense\",\n \"Fragment\",\n \"StrictMode\",\n \"createRef\",\n \"isValidElement\",\n \"cloneElement\",\n \"Children\",\n ]);\n\n const allReactExports = new Set([...reactTypes, ...reactRuntimeExports]);\n\n function checkMemberExpression(node: TSESTree.MemberExpression) {\n if (\n node.object.type === AST_NODE_TYPES.Identifier &&\n node.object.name === \"React\" &&\n node.property.type === AST_NODE_TYPES.Identifier &&\n allReactExports.has(node.property.name)\n ) {\n const typeName = node.property.name;\n const isType = reactTypes.has(typeName);\n const importStatement = isType\n ? `import type { ${typeName} } from \"react\"`\n : `import { ${typeName} } from \"react\"`;\n\n context.report({\n node,\n messageId: \"preferDirectImport\",\n data: { typeName, importStatement },\n fix(fixer) {\n return fixer.replaceText(node, typeName);\n },\n });\n }\n }\n\n return {\n MemberExpression: checkMemberExpression,\n \"TSTypeReference > TSQualifiedName\": (node: TSESTree.TSQualifiedName) => {\n if (\n node.left.type === AST_NODE_TYPES.Identifier &&\n node.left.name === \"React\" &&\n node.right.type === AST_NODE_TYPES.Identifier &&\n allReactExports.has(node.right.name)\n ) {\n const typeName = node.right.name;\n const isType = reactTypes.has(typeName);\n const importStatement = isType\n ? `import type { ${typeName} } from \"react\"`\n : `import { ${typeName} } from \"react\"`;\n\n context.report({\n node,\n messageId: \"preferDirectImport\",\n data: { typeName, importStatement },\n fix(fixer) {\n return fixer.replaceText(node, typeName);\n },\n });\n }\n },\n };\n },\n});\n\nexport default preferReactImportTypes;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst reactPropsDestructure = createRule({\n name: \"react-props-destructure\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce destructuring props inside React component body instead of parameters\",\n },\n fixable: undefined,\n schema: [],\n messages: {\n noParameterDestructuring:\n \"Destructure props inside component body instead of parameters. Use 'const { {{properties}} } = props;'\",\n },\n },\n defaultOptions: [],\n create(context) {\n function hasJSXInConditional(node: TSESTree.ConditionalExpression): boolean {\n return (\n node.consequent.type === AST_NODE_TYPES.JSXElement ||\n node.consequent.type === AST_NODE_TYPES.JSXFragment ||\n node.alternate.type === AST_NODE_TYPES.JSXElement ||\n node.alternate.type === AST_NODE_TYPES.JSXFragment\n );\n }\n\n function hasJSXInLogical(node: TSESTree.LogicalExpression): boolean {\n return node.right.type === AST_NODE_TYPES.JSXElement || node.right.type === AST_NODE_TYPES.JSXFragment;\n }\n\n function hasJSXReturn(block: TSESTree.BlockStatement): boolean {\n return block.body.some((stmt) => {\n if (stmt.type === AST_NODE_TYPES.ReturnStatement && stmt.argument) {\n return (\n stmt.argument.type === AST_NODE_TYPES.JSXElement ||\n stmt.argument.type === AST_NODE_TYPES.JSXFragment ||\n (stmt.argument.type === AST_NODE_TYPES.ConditionalExpression && hasJSXInConditional(stmt.argument)) ||\n (stmt.argument.type === AST_NODE_TYPES.LogicalExpression && hasJSXInLogical(stmt.argument))\n );\n }\n\n return false;\n });\n }\n\n function isReactComponent(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ) {\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (node.body.type === AST_NODE_TYPES.JSXElement || node.body.type === AST_NODE_TYPES.JSXFragment) {\n return true;\n }\n\n if (node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n } else if (node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.FunctionDeclaration) {\n if (node.body && node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n }\n\n return false;\n }\n\n function checkFunction(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ) {\n if (!isReactComponent(node)) {\n return;\n }\n\n if (node.params.length !== 1) {\n return;\n }\n\n const param = node.params[0];\n\n if (param.type === AST_NODE_TYPES.ObjectPattern) {\n const properties = param.properties\n .filter((prop): prop is TSESTree.Property => prop.type === AST_NODE_TYPES.Property)\n .map((prop) => {\n if (prop.key.type === AST_NODE_TYPES.Identifier) {\n return prop.key.name;\n }\n return null;\n })\n .filter((name): name is string => name !== null);\n\n if (properties.length === 0) {\n return;\n }\n\n context.report({\n node: param,\n messageId: \"noParameterDestructuring\",\n data: {\n properties: properties.join(\", \"),\n },\n });\n }\n }\n\n return {\n ArrowFunctionExpression: checkFunction,\n FunctionExpression: checkFunction,\n FunctionDeclaration: checkFunction,\n };\n },\n});\n\nexport default reactPropsDestructure;\n"],"mappings":"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","names":["import_utils","createRule","path","import_path","import_utils","createRule","path","import_path","import_utils","createRule","path","import_utils","createRule","emojiRegex","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule"]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json","../src/rules/enforce-readonly-component-props.ts","../src/rules/file-kebab-case.ts","../src/rules/jsx-pascal-case.ts","../src/rules/md-filename-case-restriction.ts","../src/rules/no-complex-inline-return.ts","../src/rules/no-emoji.ts","../src/rules/no-explicit-return-type.ts","../src/rules/no-logic-in-params.ts","../src/rules/prefer-destructuring-params.ts","../src/rules/prefer-import-type.ts","../src/rules/prefer-interface-over-inline-types.ts","../src/rules/prefer-named-param-types.ts","../src/rules/prefer-react-import-types.ts","../src/rules/react-props-destructure.ts"],"sourcesContent":["import packageJson from \"../package.json\" assert { type: \"json\" };\n\nimport enforceReadonlyComponentProps from \"./rules/enforce-readonly-component-props\";\nimport fileKebabCase from \"./rules/file-kebab-case\";\nimport jsxPascalCase from \"./rules/jsx-pascal-case\";\nimport mdFilenameCaseRestriction from \"./rules/md-filename-case-restriction\";\nimport noComplexInlineReturn from \"./rules/no-complex-inline-return\";\nimport noEmoji from \"./rules/no-emoji\";\nimport noExplicitReturnType from \"./rules/no-explicit-return-type\";\nimport noLogicInParams from \"./rules/no-logic-in-params\";\nimport preferDestructuringParams from \"./rules/prefer-destructuring-params\";\nimport preferImportType from \"./rules/prefer-import-type\";\nimport preferInterfaceOverInlineTypes from \"./rules/prefer-interface-over-inline-types\";\nimport preferNamedParamTypes from \"./rules/prefer-named-param-types\";\nimport preferReactImportTypes from \"./rules/prefer-react-import-types\";\nimport reactPropsDestructure from \"./rules/react-props-destructure\";\n\nimport type { TSESLint } from \"@typescript-eslint/utils\";\n\nconst meta = {\n name: packageJson.name,\n version: packageJson.version,\n} as const;\n\nconst rules = {\n \"enforce-readonly-component-props\": enforceReadonlyComponentProps,\n \"file-kebab-case\": fileKebabCase,\n \"jsx-pascal-case\": jsxPascalCase,\n \"md-filename-case-restriction\": mdFilenameCaseRestriction,\n \"no-complex-inline-return\": noComplexInlineReturn,\n \"no-emoji\": noEmoji,\n \"no-explicit-return-type\": noExplicitReturnType,\n \"no-logic-in-params\": noLogicInParams,\n \"prefer-destructuring-params\": preferDestructuringParams,\n \"prefer-import-type\": preferImportType,\n \"prefer-interface-over-inline-types\": preferInterfaceOverInlineTypes,\n \"prefer-named-param-types\": preferNamedParamTypes,\n \"prefer-react-import-types\": preferReactImportTypes,\n \"react-props-destructure\": reactPropsDestructure,\n} as const satisfies Record<string, TSESLint.RuleModule<string, readonly unknown[]>>;\n\nconst plugin = {\n meta,\n rules,\n} as const;\n\nconst baseRules = {\n \"nextfriday/no-emoji\": \"warn\",\n \"nextfriday/file-kebab-case\": \"warn\",\n \"nextfriday/md-filename-case-restriction\": \"warn\",\n \"nextfriday/prefer-destructuring-params\": \"warn\",\n \"nextfriday/no-explicit-return-type\": \"warn\",\n \"nextfriday/prefer-import-type\": \"warn\",\n \"nextfriday/prefer-named-param-types\": \"warn\",\n \"nextfriday/prefer-react-import-types\": \"warn\",\n \"nextfriday/no-complex-inline-return\": \"warn\",\n \"nextfriday/no-logic-in-params\": \"warn\",\n} as const;\n\nconst baseRecommendedRules = {\n \"nextfriday/no-emoji\": \"error\",\n \"nextfriday/file-kebab-case\": \"error\",\n \"nextfriday/md-filename-case-restriction\": \"error\",\n \"nextfriday/prefer-destructuring-params\": \"error\",\n \"nextfriday/no-explicit-return-type\": \"error\",\n \"nextfriday/prefer-import-type\": \"error\",\n \"nextfriday/prefer-named-param-types\": \"error\",\n \"nextfriday/prefer-react-import-types\": \"error\",\n \"nextfriday/no-complex-inline-return\": \"error\",\n \"nextfriday/no-logic-in-params\": \"error\",\n} as const;\n\nconst jsxRules = {\n \"nextfriday/jsx-pascal-case\": \"warn\",\n \"nextfriday/prefer-interface-over-inline-types\": \"warn\",\n \"nextfriday/react-props-destructure\": \"warn\",\n \"nextfriday/enforce-readonly-component-props\": \"warn\",\n} as const;\n\nconst jsxRecommendedRules = {\n \"nextfriday/jsx-pascal-case\": \"error\",\n \"nextfriday/prefer-interface-over-inline-types\": \"error\",\n \"nextfriday/react-props-destructure\": \"error\",\n \"nextfriday/enforce-readonly-component-props\": \"error\",\n} as const;\n\nconst createConfig = (configRules: Record<string, string>) => ({\n plugins: {\n nextfriday: plugin,\n },\n rules: configRules,\n});\n\nconst configs = {\n base: createConfig(baseRules),\n \"base/recommended\": createConfig(baseRecommendedRules),\n react: createConfig({\n ...baseRules,\n ...jsxRules,\n }),\n \"react/recommended\": createConfig({\n ...baseRecommendedRules,\n ...jsxRecommendedRules,\n }),\n nextjs: createConfig({\n ...baseRules,\n ...jsxRules,\n }),\n \"nextjs/recommended\": createConfig({\n ...baseRecommendedRules,\n ...jsxRecommendedRules,\n }),\n} as const;\n\nconst nextfridayPlugin = {\n meta,\n configs,\n rules,\n} as const;\n\nexport default nextfridayPlugin;\n\nexport { meta, configs, rules };\n","{\n \"name\": \"eslint-plugin-nextfriday\",\n \"version\": \"1.4.0\",\n \"description\": \"A comprehensive ESLint plugin providing custom rules and configurations for Next Friday development workflows.\",\n \"keywords\": [\n \"eslint\",\n \"eslintplugin\",\n \"eslint-plugin\",\n \"nextfriday\",\n \"next-friday\",\n \"linting\",\n \"code-quality\",\n \"javascript\",\n \"typescript\",\n \"development-tools\"\n ],\n \"homepage\": \"https://github.com/next-friday/eslint-plugin-nextfriday\",\n \"bugs\": {\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Next Friday <nextfriday.developer@gmail.com>\",\n \"contributors\": [\n \"@joetakara\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/index.d.ts\",\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"lib/index.js\",\n \"types\": \"lib/index.d.ts\",\n \"files\": [\n \"LICENSE\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"docs\",\n \"lib\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"changeset:publish\": \"npm publish --provenance --access public\",\n \"changeset:version\": \"changeset version\",\n \"clear\": \"rm -rf lib node_modules/.cache .eslintcache\",\n \"eslint\": \"eslint src --ext .js,.ts,.mjs --fix\",\n \"eslint:check\": \"eslint src --ext .js,.ts,.mjs\",\n \"preinstall\": \"npx only-allow pnpm\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"pnpm run build\",\n \"prettier\": \"prettier --write .\",\n \"prettier:check\": \"prettier --check .\",\n \"sort-package-json\": \"pnpm exec sort-package-json\",\n \"sort-package-json:check\": \"pnpm exec sort-package-json --check\",\n \"test\": \"jest\",\n \"test:coverage\": \"jest --coverage\",\n \"test:watch\": \"jest --watch\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@typescript-eslint/utils\": \"^8.42.0\",\n \"emoji-regex\": \"^10.5.0\",\n \"tsup\": \"^8.5.0\"\n },\n \"devDependencies\": {\n \"@changesets/changelog-github\": \"^0.5.1\",\n \"@changesets/cli\": \"^2.29.6\",\n \"@commitlint/cli\": \"^19.8.1\",\n \"@commitlint/config-conventional\": \"^19.8.1\",\n \"@eslint/js\": \"^9.35.0\",\n \"@jest/globals\": \"^30.1.2\",\n \"@stylistic/eslint-plugin\": \"^3.1.0\",\n \"@swc/core\": \"^1.13.5\",\n \"@types/eslint\": \"^9.6.1\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^22.5.4\",\n \"@types/ramda\": \"^0.31.0\",\n \"@typescript-eslint/parser\": \"^8.42.0\",\n \"@typescript-eslint/rule-tester\": \"^8.42.0\",\n \"eslint\": \"^9.35.0\",\n \"eslint-config-airbnb-extended\": \"^2.2.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-import-resolver-typescript\": \"^4.4.4\",\n \"eslint-plugin-import-x\": \"^4.16.1\",\n \"eslint-plugin-jest\": \"^29.0.1\",\n \"eslint-plugin-prettier\": \"^5.5.4\",\n \"eslint-plugin-sonarjs\": \"^3.0.5\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^29.7.0\",\n \"lint-staged\": \"^16.1.6\",\n \"prettier\": \"^3.6.2\",\n \"sort-package-json\": \"^3.4.0\",\n \"ts-jest\": \"^29.4.1\",\n \"ts-node\": \"^10.9.2\",\n \"typescript\": \"^5.6.2\",\n \"typescript-eslint\": \"^8.42.0\"\n },\n \"peerDependencies\": {\n \"eslint\": \"^9.0.0\"\n },\n \"packageManager\": \"pnpm@9.12.0\",\n \"engines\": {\n \"node\": \">=22.0.0\",\n \"pnpm\": \">=9.0.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst enforceReadonlyComponentProps = createRule({\n name: \"enforce-readonly-component-props\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce Readonly wrapper for React component props when using named types or interfaces\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n useReadonly: \"Component props should be wrapped with Readonly<> for immutability\",\n },\n },\n defaultOptions: [],\n create(context) {\n function hasJSXInConditional(node: TSESTree.ConditionalExpression): boolean {\n return (\n node.consequent.type === AST_NODE_TYPES.JSXElement ||\n node.consequent.type === AST_NODE_TYPES.JSXFragment ||\n node.alternate.type === AST_NODE_TYPES.JSXElement ||\n node.alternate.type === AST_NODE_TYPES.JSXFragment\n );\n }\n\n function hasJSXInLogical(node: TSESTree.LogicalExpression): boolean {\n return node.right.type === AST_NODE_TYPES.JSXElement || node.right.type === AST_NODE_TYPES.JSXFragment;\n }\n\n function hasJSXReturn(block: TSESTree.BlockStatement): boolean {\n return block.body.some((stmt) => {\n if (stmt.type === AST_NODE_TYPES.ReturnStatement && stmt.argument) {\n return (\n stmt.argument.type === AST_NODE_TYPES.JSXElement ||\n stmt.argument.type === AST_NODE_TYPES.JSXFragment ||\n (stmt.argument.type === AST_NODE_TYPES.ConditionalExpression && hasJSXInConditional(stmt.argument)) ||\n (stmt.argument.type === AST_NODE_TYPES.LogicalExpression && hasJSXInLogical(stmt.argument))\n );\n }\n return false;\n });\n }\n\n function isReactComponent(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ): boolean {\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (node.body.type === AST_NODE_TYPES.JSXElement || node.body.type === AST_NODE_TYPES.JSXFragment) {\n return true;\n }\n if (node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n } else if (node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.FunctionDeclaration) {\n if (node.body && node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n }\n return false;\n }\n\n function isNamedType(node: TSESTree.TypeNode): boolean {\n return node.type === AST_NODE_TYPES.TSTypeReference;\n }\n\n function isAlreadyReadonly(node: TSESTree.TypeNode): boolean {\n if (node.type === AST_NODE_TYPES.TSTypeReference && node.typeName) {\n if (node.typeName.type === AST_NODE_TYPES.Identifier && node.typeName.name === \"Readonly\") {\n return true;\n }\n }\n return false;\n }\n\n function checkFunction(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ) {\n if (!isReactComponent(node)) {\n return;\n }\n if (node.params.length !== 1) {\n return;\n }\n const param = node.params[0];\n if (param.type === AST_NODE_TYPES.Identifier && param.typeAnnotation) {\n const { typeAnnotation } = param.typeAnnotation;\n if (isNamedType(typeAnnotation) && !isAlreadyReadonly(typeAnnotation)) {\n const { sourceCode } = context;\n const typeText = sourceCode.getText(typeAnnotation);\n context.report({\n node: param.typeAnnotation,\n messageId: \"useReadonly\",\n fix(fixer) {\n return fixer.replaceText(typeAnnotation, `Readonly<${typeText}>`);\n },\n });\n }\n }\n }\n\n return {\n ArrowFunctionExpression: checkFunction,\n FunctionExpression: checkFunction,\n FunctionDeclaration: checkFunction,\n };\n },\n});\n\nexport default enforceReadonlyComponentProps;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst isKebabCase = (str: string) => {\n if (/\\.(config|rc|setup|spec|test)$/.test(str) || /^[a-z0-9]+(?:-[a-z0-9]+)*\\.[a-z0-9]+(?:-[a-z0-9]+)*$/.test(str)) {\n return /^[a-z0-9]+(?:-[a-z0-9]+)*(?:\\.[a-z0-9]+(?:-[a-z0-9]+)*)*$/.test(str);\n }\n\n return /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(str);\n};\n\nconst fileKebabCase = createRule({\n name: \"file-kebab-case\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce kebab-case filenames for .ts and .js files\",\n },\n messages: {\n fileKebabCase: \"File names must be kebab-case\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n const ext = path.extname(filename);\n\n if (ext !== \".ts\" && ext !== \".js\") {\n return;\n }\n\n const basename = path.basename(filename, ext);\n\n if (!isKebabCase(basename)) {\n context.report({\n loc: { line: 1, column: 0 },\n messageId: \"fileKebabCase\",\n });\n }\n },\n };\n },\n});\n\nexport default fileKebabCase;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst isPascalCase = (str: string) => /^[A-Z][a-zA-Z0-9]*$/.test(str) && !/^[A-Z]+$/.test(str);\n\nconst jsxPascalCase = createRule({\n name: \"jsx-pascal-case\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce PascalCase filenames for .jsx and .tsx files\",\n },\n messages: {\n jsxPascalCase: \"JSX/TSX file names must be PascalCase\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n const ext = path.extname(filename);\n\n if (ext !== \".jsx\" && ext !== \".tsx\") {\n return;\n }\n\n const basename = path.basename(filename, ext);\n\n if (!isPascalCase(basename)) {\n context.report({\n loc: { line: 1, column: 0 },\n messageId: \"jsxPascalCase\",\n });\n }\n },\n };\n },\n});\n\nexport default jsxPascalCase;\n","import path from \"path\";\n\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst mdFilenameCaseRestriction = createRule({\n name: \"md-filename-case-restriction\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Enforce .md filenames to be SNAKE_CASE only\",\n },\n messages: {\n invalidFilenameCase: \"Markdown filename must be SNAKE_CASE (UPPERCASE with underscores). Found: '{{ filename }}'\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n Program() {\n const { filename } = context;\n\n if (!filename.endsWith(\".md\")) {\n return;\n }\n\n const basename = path.basename(filename, \".md\");\n\n function isSnakeCase(text: string): boolean {\n return /^[A-Z][A-Z0-9_]*$/.test(text);\n }\n\n function isValidCase(text: string): boolean {\n return isSnakeCase(text);\n }\n\n if (!isValidCase(basename)) {\n context.report({\n node: context.sourceCode.ast,\n messageId: \"invalidFilenameCase\",\n data: { filename: basename },\n });\n }\n },\n };\n },\n});\n\nexport default mdFilenameCaseRestriction;\n","import { ESLintUtils, TSESTree, AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst noComplexInlineReturn = createRule({\n name: \"no-complex-inline-return\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow complex inline expressions in return statements - prefer extracting to a const first\",\n },\n messages: {\n noComplexInlineReturn:\n \"Avoid returning complex expressions directly. Extract to a const variable first for better readability.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const isComplexExpression = (node: TSESTree.Expression | null | undefined): boolean => {\n if (!node) return false;\n\n if (node.type === AST_NODE_TYPES.ConditionalExpression) {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.LogicalExpression) {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.NewExpression) {\n return true;\n }\n\n return false;\n };\n\n return {\n ReturnStatement(node) {\n if (node.argument && isComplexExpression(node.argument)) {\n context.report({\n node: node.argument,\n messageId: \"noComplexInlineReturn\",\n });\n }\n },\n };\n },\n});\n\nexport default noComplexInlineReturn;\n","import emojiRegex from \"emoji-regex\";\nimport { ESLintUtils } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst noEmoji = createRule({\n name: \"no-emoji\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow emoji characters in source code\",\n },\n messages: {\n noEmoji: \"Emoji are not allowed in source code\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const { sourceCode } = context;\n\n return {\n Program() {\n const text = sourceCode.getText();\n const regex = emojiRegex();\n const matches = Array.from(text.matchAll(regex));\n\n matches.forEach((match) => {\n const loc = sourceCode.getLocFromIndex(match.index);\n\n context.report({\n loc,\n messageId: \"noEmoji\",\n });\n });\n },\n };\n },\n});\n\nexport default noEmoji;\n","import { ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst noExplicitReturnType = createRule({\n name: \"no-explicit-return-type\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow explicit return types on functions\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n noExplicitReturnType: \"Remove explicit return type '{{returnType}}' - TypeScript can infer it automatically\",\n },\n },\n defaultOptions: [],\n create(context) {\n const checkFunction = (\n node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression,\n ) => {\n if (node.returnType) {\n const returnTypeText = context.sourceCode.getText(node.returnType);\n context.report({\n node: node.returnType,\n messageId: \"noExplicitReturnType\",\n data: {\n returnType: returnTypeText,\n },\n fix(fixer) {\n return fixer.remove(node.returnType!);\n },\n });\n }\n };\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n };\n },\n});\n\nexport default noExplicitReturnType;\n","import { ESLintUtils, TSESTree, AST_NODE_TYPES } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst noLogicInParams = createRule({\n name: \"no-logic-in-params\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow logic or conditions in function parameters - extract to a const variable first\",\n },\n messages: {\n noLogicInParams:\n \"Avoid logic or conditions in function parameters. Extract to a const variable first for better readability.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const isComplexExpression = (node: TSESTree.Expression | TSESTree.SpreadElement): boolean => {\n if (node.type === AST_NODE_TYPES.SpreadElement) {\n return false;\n }\n\n if (node.type === AST_NODE_TYPES.ConditionalExpression) {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.LogicalExpression) {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.BinaryExpression) {\n const logicalOperators = [\"==\", \"===\", \"!=\", \"!==\", \"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"];\n return logicalOperators.includes(node.operator);\n }\n\n if (node.type === AST_NODE_TYPES.UnaryExpression) {\n return node.operator === \"!\";\n }\n\n return false;\n };\n\n return {\n CallExpression(node) {\n node.arguments.forEach((arg) => {\n if (isComplexExpression(arg)) {\n context.report({\n node: arg,\n messageId: \"noLogicInParams\",\n });\n }\n });\n },\n NewExpression(node) {\n node.arguments.forEach((arg) => {\n if (isComplexExpression(arg)) {\n context.report({\n node: arg,\n messageId: \"noLogicInParams\",\n });\n }\n });\n },\n };\n },\n});\n\nexport default noLogicInParams;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferDestructuringParams = createRule({\n name: \"prefer-destructuring-params\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce destructuring for functions with multiple parameters\",\n },\n messages: {\n preferDestructuring: \"Functions with multiple parameters should use destructuring\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const isCallbackFunction = (node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression) => {\n const { parent } = node;\n return parent?.type === AST_NODE_TYPES.CallExpression;\n };\n\n const isDeveloperFunction = (\n node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression,\n ) => {\n if (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (isCallbackFunction(node)) {\n return false;\n }\n\n const { parent } = node;\n return (\n parent?.type === AST_NODE_TYPES.VariableDeclarator ||\n parent?.type === AST_NODE_TYPES.AssignmentExpression ||\n parent?.type === AST_NODE_TYPES.Property ||\n parent?.type === AST_NODE_TYPES.MethodDefinition\n );\n }\n\n return false;\n };\n\n const checkFunction = (\n node: TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression,\n ) => {\n const { filename } = context;\n if (filename.includes(\"node_modules\") || filename.includes(\".d.ts\")) {\n return;\n }\n\n if (!isDeveloperFunction(node)) {\n return;\n }\n\n if (node.type === AST_NODE_TYPES.FunctionDeclaration && node.id) {\n const functionName = node.id.name;\n if (functionName.startsWith(\"_\") || functionName.includes(\"$\") || /^[A-Z][a-zA-Z]*$/.test(functionName)) {\n return;\n }\n }\n\n if (node.params.length <= 1) {\n return;\n }\n\n const hasNonDestructuredParams = node.params.some(\n (param: TSESTree.Parameter) =>\n param.type !== AST_NODE_TYPES.ObjectPattern && param.type !== AST_NODE_TYPES.RestElement,\n );\n\n if (hasNonDestructuredParams) {\n context.report({\n node,\n messageId: \"preferDestructuring\",\n });\n }\n };\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n };\n },\n});\n\nexport default preferDestructuringParams;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferImportType = createRule({\n name: \"prefer-import-type\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce using 'import type' for type-only imports\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n preferImportType: \"Use 'import type' for type-only imports\",\n },\n },\n defaultOptions: [],\n create(context) {\n function checkImportDeclaration(node: TSESTree.ImportDeclaration) {\n if (node.importKind === \"type\") {\n return;\n }\n\n if (\n context.filename.includes(\".test.\") ||\n context.filename.includes(\".spec.\") ||\n context.filename.includes(\"__tests__\")\n ) {\n return;\n }\n\n if (node.specifiers.length === 0) {\n return;\n }\n\n const source = node.source.value;\n const isRuntimeImport =\n /\\.(css|scss|sass|less|styl)(\\?.*)?$/.test(source) ||\n /\\.(png|jpg|jpeg|gif|svg|webp|ico|bmp)(\\?.*)?$/.test(source) ||\n /\\.(woff|woff2|ttf|eot|otf)(\\?.*)?$/.test(source) ||\n /\\.(mp4|webm|ogg|mp3|wav|flac|aac)(\\?.*)?$/.test(source) ||\n /\\.(json|txt|md|xml|yml|yaml)(\\?.*)?$/.test(source) ||\n /^next\\/(font|image|link|head|script|dynamic|router)/.test(source) ||\n source.includes(\"/font/\") ||\n source === \"react-dom\" ||\n source === \"react-dom/client\" ||\n source === \"react-dom/server\" ||\n source.startsWith(\"@emotion/\") ||\n source.startsWith(\"styled-components\") ||\n source.includes(\"polyfill\") ||\n source.includes(\"shim\") ||\n source === \"styled-jsx/css\" ||\n source.startsWith(\"webpack/\");\n\n if (isRuntimeImport) {\n return;\n }\n\n const isTypeOnlyImport = node.specifiers.every((specifier) => {\n if (specifier.type === AST_NODE_TYPES.ImportDefaultSpecifier) {\n return false;\n }\n if (specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier) {\n return false;\n }\n if (specifier.type === AST_NODE_TYPES.ImportSpecifier) {\n const importedName =\n specifier.imported.type === AST_NODE_TYPES.Identifier ? specifier.imported.name : specifier.imported.value;\n\n const isKnownTypeOnly =\n (node.source.value === \"@typescript-eslint/utils\" && [\"TSESTree\", \"RuleContext\"].includes(importedName)) ||\n (node.source.value === \"react\" &&\n [\"Component\", \"ComponentProps\", \"ReactNode\", \"FC\", \"JSX\", \"ReactElement\", \"PropsWithChildren\"].includes(\n importedName,\n )) ||\n importedName.endsWith(\"Type\") ||\n importedName.endsWith(\"Interface\") ||\n importedName.endsWith(\"Props\");\n\n return isKnownTypeOnly;\n }\n return false;\n });\n\n if (isTypeOnlyImport) {\n context.report({\n node,\n messageId: \"preferImportType\",\n fix(fixer) {\n const sourceText = context.sourceCode.getText(node);\n const fixedSource = sourceText.replace(/^import\\s+/, \"import type \");\n return fixer.replaceText(node, fixedSource);\n },\n });\n }\n }\n\n return {\n ImportDeclaration: checkImportDeclaration,\n };\n },\n});\n\nexport default preferImportType;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferInterfaceOverInlineTypes = createRule({\n name: \"prefer-interface-over-inline-types\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce interface declarations over inline type annotations for React component props\",\n },\n fixable: undefined,\n schema: [],\n messages: {\n useInterface: \"Use interface declaration for component props instead of inline type annotation\",\n },\n },\n defaultOptions: [],\n create(context) {\n function hasJSXInConditional(node: TSESTree.ConditionalExpression): boolean {\n return (\n node.consequent.type === AST_NODE_TYPES.JSXElement ||\n node.consequent.type === AST_NODE_TYPES.JSXFragment ||\n node.alternate.type === AST_NODE_TYPES.JSXElement ||\n node.alternate.type === AST_NODE_TYPES.JSXFragment\n );\n }\n\n function hasJSXInLogical(node: TSESTree.LogicalExpression): boolean {\n return node.right.type === AST_NODE_TYPES.JSXElement || node.right.type === AST_NODE_TYPES.JSXFragment;\n }\n\n function hasJSXReturn(block: TSESTree.BlockStatement): boolean {\n return block.body.some((stmt) => {\n if (stmt.type === AST_NODE_TYPES.ReturnStatement && stmt.argument) {\n return (\n stmt.argument.type === AST_NODE_TYPES.JSXElement ||\n stmt.argument.type === AST_NODE_TYPES.JSXFragment ||\n (stmt.argument.type === AST_NODE_TYPES.ConditionalExpression && hasJSXInConditional(stmt.argument)) ||\n (stmt.argument.type === AST_NODE_TYPES.LogicalExpression && hasJSXInLogical(stmt.argument))\n );\n }\n return false;\n });\n }\n\n function isReactComponent(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ): boolean {\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (node.body.type === AST_NODE_TYPES.JSXElement || node.body.type === AST_NODE_TYPES.JSXFragment) {\n return true;\n }\n if (node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n } else if (node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.FunctionDeclaration) {\n if (node.body && node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n }\n return false;\n }\n\n function isInlineTypeAnnotation(node: TSESTree.TypeNode): boolean {\n if (node.type === AST_NODE_TYPES.TSTypeLiteral) {\n return true;\n }\n if (node.type === AST_NODE_TYPES.TSTypeReference && node.typeArguments) {\n return node.typeArguments.params.some((param) => param.type === AST_NODE_TYPES.TSTypeLiteral);\n }\n if (node.type === AST_NODE_TYPES.TSUnionType) {\n return node.types.some((type) => isInlineTypeAnnotation(type));\n }\n return false;\n }\n\n function hasInlineObjectType(node: TSESTree.TypeNode): boolean {\n if (node.type === AST_NODE_TYPES.TSTypeLiteral) {\n return true;\n }\n if (node.type === AST_NODE_TYPES.TSTypeReference && node.typeArguments) {\n return node.typeArguments.params.some((param) => param.type === AST_NODE_TYPES.TSTypeLiteral);\n }\n if (node.type === AST_NODE_TYPES.TSUnionType) {\n return node.types.some((type) => hasInlineObjectType(type));\n }\n return false;\n }\n\n function checkFunction(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ) {\n if (!isReactComponent(node)) {\n return;\n }\n if (node.params.length !== 1) {\n return;\n }\n const param = node.params[0];\n if (param.type === AST_NODE_TYPES.Identifier && param.typeAnnotation) {\n const { typeAnnotation } = param.typeAnnotation;\n if (isInlineTypeAnnotation(typeAnnotation) && hasInlineObjectType(typeAnnotation)) {\n context.report({\n node: param.typeAnnotation,\n messageId: \"useInterface\",\n });\n }\n }\n }\n\n return {\n ArrowFunctionExpression: checkFunction,\n FunctionExpression: checkFunction,\n FunctionDeclaration: checkFunction,\n };\n },\n});\n\nexport default preferInterfaceOverInlineTypes;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferNamedParamTypes = createRule({\n name: \"prefer-named-param-types\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce named interfaces/types instead of inline object types for function parameters\",\n },\n messages: {\n preferNamedParamTypes:\n \"Use a named interface or type for object parameter types instead of inline type annotations\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n function hasInlineObjectType(param: TSESTree.Parameter): boolean {\n if (param.type === AST_NODE_TYPES.AssignmentPattern) {\n return hasInlineObjectType(param.left);\n }\n\n if (param.type === AST_NODE_TYPES.ObjectPattern) {\n if (param.typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSTypeLiteral) {\n return true;\n }\n }\n\n if (param.type === AST_NODE_TYPES.Identifier) {\n if (param.typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSTypeLiteral) {\n return true;\n }\n }\n\n return false;\n }\n\n function checkFunction(\n node:\n | TSESTree.FunctionDeclaration\n | TSESTree.FunctionExpression\n | TSESTree.ArrowFunctionExpression\n | TSESTree.TSMethodSignature\n | TSESTree.MethodDefinition,\n ) {\n let params: TSESTree.Parameter[] = [];\n\n if (\"params\" in node) {\n params = node.params;\n } else if (\"value\" in node && node.value) {\n params = node.value.params;\n }\n\n params.forEach((param) => {\n if (hasInlineObjectType(param)) {\n context.report({\n node: param,\n messageId: \"preferNamedParamTypes\",\n });\n }\n });\n }\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n TSMethodSignature: checkFunction,\n MethodDefinition: checkFunction,\n };\n },\n});\n\nexport default preferNamedParamTypes;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst preferReactImportTypes = createRule({\n name: \"prefer-react-import-types\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce importing React types and utilities from 'react' instead of using React.X\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n preferDirectImport: \"Use direct import '{{importStatement}}' instead of 'React.{{typeName}}'\",\n },\n },\n defaultOptions: [],\n create(context) {\n const reactTypes = new Set([\n \"ReactNode\",\n \"ReactElement\",\n \"ReactChildren\",\n \"ReactChild\",\n \"ComponentType\",\n \"FC\",\n \"FunctionComponent\",\n \"Component\",\n \"PureComponent\",\n \"ReactEventHandler\",\n \"MouseEventHandler\",\n \"ChangeEventHandler\",\n \"FormEventHandler\",\n \"KeyboardEventHandler\",\n \"TouchEventHandler\",\n \"PointerEventHandler\",\n \"FocusEventHandler\",\n \"UIEventHandler\",\n \"WheelEventHandler\",\n \"AnimationEventHandler\",\n \"TransitionEventHandler\",\n \"RefObject\",\n \"MutableRefObject\",\n \"Ref\",\n \"ForwardedRef\",\n \"HTMLProps\",\n \"ComponentProps\",\n \"JSXElementConstructor\",\n ]);\n\n const reactRuntimeExports = new Set([\n \"useState\",\n \"useEffect\",\n \"useContext\",\n \"useReducer\",\n \"useCallback\",\n \"useMemo\",\n \"useRef\",\n \"useImperativeHandle\",\n \"useLayoutEffect\",\n \"useDebugValue\",\n \"useDeferredValue\",\n \"useTransition\",\n \"useId\",\n \"useSyncExternalStore\",\n \"useInsertionEffect\",\n \"createElement\",\n \"createContext\",\n \"forwardRef\",\n \"memo\",\n \"lazy\",\n \"Suspense\",\n \"Fragment\",\n \"StrictMode\",\n \"createRef\",\n \"isValidElement\",\n \"cloneElement\",\n \"Children\",\n ]);\n\n const allReactExports = new Set([...reactTypes, ...reactRuntimeExports]);\n\n function checkMemberExpression(node: TSESTree.MemberExpression) {\n if (\n node.object.type === AST_NODE_TYPES.Identifier &&\n node.object.name === \"React\" &&\n node.property.type === AST_NODE_TYPES.Identifier &&\n allReactExports.has(node.property.name)\n ) {\n const typeName = node.property.name;\n const isType = reactTypes.has(typeName);\n const importStatement = isType\n ? `import type { ${typeName} } from \"react\"`\n : `import { ${typeName} } from \"react\"`;\n\n context.report({\n node,\n messageId: \"preferDirectImport\",\n data: { typeName, importStatement },\n fix(fixer) {\n return fixer.replaceText(node, typeName);\n },\n });\n }\n }\n\n return {\n MemberExpression: checkMemberExpression,\n \"TSTypeReference > TSQualifiedName\": (node: TSESTree.TSQualifiedName) => {\n if (\n node.left.type === AST_NODE_TYPES.Identifier &&\n node.left.name === \"React\" &&\n node.right.type === AST_NODE_TYPES.Identifier &&\n allReactExports.has(node.right.name)\n ) {\n const typeName = node.right.name;\n const isType = reactTypes.has(typeName);\n const importStatement = isType\n ? `import type { ${typeName} } from \"react\"`\n : `import { ${typeName} } from \"react\"`;\n\n context.report({\n node,\n messageId: \"preferDirectImport\",\n data: { typeName, importStatement },\n fix(fixer) {\n return fixer.replaceText(node, typeName);\n },\n });\n }\n },\n };\n },\n});\n\nexport default preferReactImportTypes;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport type { TSESTree } from \"@typescript-eslint/utils\";\n\nconst createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/next-friday/eslint-plugin-nextfriday/blob/main/docs/rules/${name.replace(/-/g, \"_\").toUpperCase()}.md`,\n);\n\nconst reactPropsDestructure = createRule({\n name: \"react-props-destructure\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce destructuring props inside React component body instead of parameters\",\n },\n fixable: undefined,\n schema: [],\n messages: {\n noParameterDestructuring:\n \"Destructure props inside component body instead of parameters. Use 'const { {{properties}} } = props;'\",\n },\n },\n defaultOptions: [],\n create(context) {\n function hasJSXInConditional(node: TSESTree.ConditionalExpression): boolean {\n return (\n node.consequent.type === AST_NODE_TYPES.JSXElement ||\n node.consequent.type === AST_NODE_TYPES.JSXFragment ||\n node.alternate.type === AST_NODE_TYPES.JSXElement ||\n node.alternate.type === AST_NODE_TYPES.JSXFragment\n );\n }\n\n function hasJSXInLogical(node: TSESTree.LogicalExpression): boolean {\n return node.right.type === AST_NODE_TYPES.JSXElement || node.right.type === AST_NODE_TYPES.JSXFragment;\n }\n\n function hasJSXReturn(block: TSESTree.BlockStatement): boolean {\n return block.body.some((stmt) => {\n if (stmt.type === AST_NODE_TYPES.ReturnStatement && stmt.argument) {\n return (\n stmt.argument.type === AST_NODE_TYPES.JSXElement ||\n stmt.argument.type === AST_NODE_TYPES.JSXFragment ||\n (stmt.argument.type === AST_NODE_TYPES.ConditionalExpression && hasJSXInConditional(stmt.argument)) ||\n (stmt.argument.type === AST_NODE_TYPES.LogicalExpression && hasJSXInLogical(stmt.argument))\n );\n }\n\n return false;\n });\n }\n\n function isReactComponent(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ) {\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (node.body.type === AST_NODE_TYPES.JSXElement || node.body.type === AST_NODE_TYPES.JSXFragment) {\n return true;\n }\n\n if (node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n } else if (node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.FunctionDeclaration) {\n if (node.body && node.body.type === AST_NODE_TYPES.BlockStatement) {\n return hasJSXReturn(node.body);\n }\n }\n\n return false;\n }\n\n function checkFunction(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression | TSESTree.FunctionDeclaration,\n ) {\n if (!isReactComponent(node)) {\n return;\n }\n\n if (node.params.length !== 1) {\n return;\n }\n\n const param = node.params[0];\n\n if (param.type === AST_NODE_TYPES.ObjectPattern) {\n const properties = param.properties\n .filter((prop): prop is TSESTree.Property => prop.type === AST_NODE_TYPES.Property)\n .map((prop) => {\n if (prop.key.type === AST_NODE_TYPES.Identifier) {\n return prop.key.name;\n }\n return null;\n })\n .filter((name): name is string => name !== null);\n\n if (properties.length === 0) {\n return;\n }\n\n context.report({\n node: param,\n messageId: \"noParameterDestructuring\",\n data: {\n properties: properties.join(\", \"),\n },\n });\n }\n }\n\n return {\n ArrowFunctionExpression: checkFunction,\n FunctionExpression: checkFunction,\n FunctionDeclaration: checkFunction,\n };\n },\n});\n\nexport default reactPropsDestructure;\n"],"mappings":"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","names":["import_utils","createRule","path","import_path","import_utils","createRule","path","import_path","import_utils","createRule","path","import_utils","createRule","import_utils","createRule","emojiRegex","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule","import_utils","createRule"]}
package/lib/index.d.cts CHANGED
@@ -9,8 +9,10 @@ declare const rules: {
9
9
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
10
10
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
11
11
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
12
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
12
13
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
13
14
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
15
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
14
16
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
15
17
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
16
18
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -31,8 +33,10 @@ declare const configs: {
31
33
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
32
34
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
33
35
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
36
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
34
37
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
35
38
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
39
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
36
40
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
37
41
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
38
42
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -56,8 +60,10 @@ declare const configs: {
56
60
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
57
61
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
58
62
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
63
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
59
64
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
60
65
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
66
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
61
67
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
62
68
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
63
69
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -81,8 +87,10 @@ declare const configs: {
81
87
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
82
88
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
83
89
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
90
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
84
91
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
85
92
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
93
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
86
94
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
87
95
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
88
96
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -106,8 +114,10 @@ declare const configs: {
106
114
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
107
115
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
108
116
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
117
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
109
118
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
110
119
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
120
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
111
121
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
112
122
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
113
123
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -131,8 +141,10 @@ declare const configs: {
131
141
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
132
142
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
133
143
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
144
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
134
145
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
135
146
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
147
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
136
148
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
137
149
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
138
150
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -156,8 +168,10 @@ declare const configs: {
156
168
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
157
169
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
158
170
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
171
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
159
172
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
160
173
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
174
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
161
175
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
162
176
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
163
177
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -188,8 +202,10 @@ declare const nextfridayPlugin: {
188
202
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
189
203
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
190
204
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
205
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
191
206
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
192
207
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
208
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
193
209
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
194
210
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
195
211
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -213,8 +229,10 @@ declare const nextfridayPlugin: {
213
229
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
214
230
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
215
231
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
232
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
216
233
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
217
234
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
235
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
218
236
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
219
237
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
220
238
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -238,8 +256,10 @@ declare const nextfridayPlugin: {
238
256
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
239
257
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
240
258
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
259
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
241
260
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
242
261
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
262
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
243
263
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
244
264
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
245
265
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -263,8 +283,10 @@ declare const nextfridayPlugin: {
263
283
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
264
284
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
265
285
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
286
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
266
287
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
267
288
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
289
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
268
290
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
269
291
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
270
292
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -288,8 +310,10 @@ declare const nextfridayPlugin: {
288
310
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
289
311
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
290
312
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
313
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
291
314
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
292
315
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
316
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
293
317
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
294
318
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
295
319
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -313,8 +337,10 @@ declare const nextfridayPlugin: {
313
337
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
314
338
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
315
339
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
340
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
316
341
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
317
342
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
343
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
318
344
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
319
345
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
320
346
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
@@ -332,8 +358,10 @@ declare const nextfridayPlugin: {
332
358
  readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
333
359
  readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
334
360
  readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
361
+ readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
335
362
  readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
336
363
  readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
364
+ readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
337
365
  readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
338
366
  readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
339
367
  readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;