eslint-plugin-nextfriday 1.5.1 → 1.5.2

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 DELETED
@@ -1 +0,0 @@
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-env-fallback.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 noEnvFallback from \"./rules/no-env-fallback\";\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-env-fallback\": noEnvFallback,\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 \"nextfriday/no-env-fallback\": \"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 \"nextfriday/no-env-fallback\": \"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.5.1\",\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 --fix\",\n \"eslint:check\": \"eslint src --ext .js,.ts\",\n \"prepare\": \"husky || true\",\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, 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 noEnvFallback = createRule({\n name: \"no-env-fallback\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow fallback values for environment variables as they can be dangerous in production\",\n },\n messages: {\n noEnvFallback:\n \"Avoid using fallback values with process.env. Environment variables should fail explicitly when missing rather than silently using a default value.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const isProcessEnvAccess = (node: TSESTree.Node): boolean => {\n if (node.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const { object } = node;\n if (object.type !== AST_NODE_TYPES.MemberExpression) {\n return false;\n }\n\n const processNode = object.object;\n const envNode = object.property;\n\n return (\n processNode.type === AST_NODE_TYPES.Identifier &&\n processNode.name === \"process\" &&\n envNode.type === AST_NODE_TYPES.Identifier &&\n envNode.name === \"env\"\n );\n };\n\n return {\n LogicalExpression(node) {\n if ((node.operator === \"||\" || node.operator === \"??\") && isProcessEnvAccess(node.left)) {\n context.report({\n node,\n messageId: \"noEnvFallback\",\n });\n }\n },\n ConditionalExpression(node) {\n if (isProcessEnvAccess(node.test)) {\n context.report({\n node,\n messageId: \"noEnvFallback\",\n });\n }\n },\n };\n },\n});\n\nexport default noEnvFallback;\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAY;AAAA,EACZ,MAAQ;AAAA,IACN,KAAO;AAAA,EACT;AAAA,EACA,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,SAAW;AAAA,EACX,QAAU;AAAA,EACV,cAAgB;AAAA,IACd;AAAA,EACF;AAAA,EACA,MAAQ;AAAA,EACR,SAAW;AAAA,IACT,KAAK;AAAA,MACH,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,MAAQ;AAAA,EACR,OAAS;AAAA,EACT,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,WAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,IACrB,OAAS;AAAA,IACT,QAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,SAAW;AAAA,IACX,gBAAkB;AAAA,IAClB,UAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,2BAA2B;AAAA,IAC3B,MAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAa;AAAA,EACf;AAAA,EACA,cAAgB;AAAA,IACd,4BAA4B;AAAA,IAC5B,eAAe;AAAA,IACf,MAAQ;AAAA,EACV;AAAA,EACA,iBAAmB;AAAA,IACjB,gCAAgC;AAAA,IAChC,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,mCAAmC;AAAA,IACnC,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,4BAA4B;AAAA,IAC5B,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,6BAA6B;AAAA,IAC7B,kCAAkC;AAAA,IAClC,QAAU;AAAA,IACV,iCAAiC;AAAA,IACjC,0BAA0B;AAAA,IAC1B,qCAAqC;AAAA,IACrC,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,IAC1B,yBAAyB;AAAA,IACzB,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,eAAe;AAAA,IACf,UAAY;AAAA,IACZ,qBAAqB;AAAA,IACrB,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAc;AAAA,IACd,qBAAqB;AAAA,EACvB;AAAA,EACA,kBAAoB;AAAA,IAClB,QAAU;AAAA,EACZ;AAAA,EACA,gBAAkB;AAAA,EAClB,SAAW;AAAA,IACT,MAAQ;AAAA,IACR,MAAQ;AAAA,EACV;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AACF;;;AClHA,mBAA4C;AAI5C,IAAM,aAAa,yBAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,gCAAgC,WAAW;AAAA,EAC/C,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,aAAS,oBAAoB,MAA+C;AAC1E,aACE,KAAK,WAAW,SAAS,4BAAe,cACxC,KAAK,WAAW,SAAS,4BAAe,eACxC,KAAK,UAAU,SAAS,4BAAe,cACvC,KAAK,UAAU,SAAS,4BAAe;AAAA,IAE3C;AAEA,aAAS,gBAAgB,MAA2C;AAClE,aAAO,KAAK,MAAM,SAAS,4BAAe,cAAc,KAAK,MAAM,SAAS,4BAAe;AAAA,IAC7F;AAEA,aAAS,aAAa,OAAyC;AAC7D,aAAO,MAAM,KAAK,KAAK,CAAC,SAAS;AAC/B,YAAI,KAAK,SAAS,4BAAe,mBAAmB,KAAK,UAAU;AACjE,iBACE,KAAK,SAAS,SAAS,4BAAe,cACtC,KAAK,SAAS,SAAS,4BAAe,eACrC,KAAK,SAAS,SAAS,4BAAe,yBAAyB,oBAAoB,KAAK,QAAQ,KAChG,KAAK,SAAS,SAAS,4BAAe,qBAAqB,gBAAgB,KAAK,QAAQ;AAAA,QAE7F;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,aAAS,iBACP,MACS;AACT,UAAI,KAAK,SAAS,4BAAe,yBAAyB;AACxD,YAAI,KAAK,KAAK,SAAS,4BAAe,cAAc,KAAK,KAAK,SAAS,4BAAe,aAAa;AACjG,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,KAAK,SAAS,4BAAe,gBAAgB;AACpD,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF,WAAW,KAAK,SAAS,4BAAe,sBAAsB,KAAK,SAAS,4BAAe,qBAAqB;AAC9G,YAAI,KAAK,QAAQ,KAAK,KAAK,SAAS,4BAAe,gBAAgB;AACjE,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,YAAY,MAAkC;AACrD,aAAO,KAAK,SAAS,4BAAe;AAAA,IACtC;AAEA,aAAS,kBAAkB,MAAkC;AAC3D,UAAI,KAAK,SAAS,4BAAe,mBAAmB,KAAK,UAAU;AACjE,YAAI,KAAK,SAAS,SAAS,4BAAe,cAAc,KAAK,SAAS,SAAS,YAAY;AACzF,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,cACP,MACA;AACA,UAAI,CAAC,iBAAiB,IAAI,GAAG;AAC3B;AAAA,MACF;AACA,UAAI,KAAK,OAAO,WAAW,GAAG;AAC5B;AAAA,MACF;AACA,YAAM,QAAQ,KAAK,OAAO,CAAC;AAC3B,UAAI,MAAM,SAAS,4BAAe,cAAc,MAAM,gBAAgB;AACpE,cAAM,EAAE,eAAe,IAAI,MAAM;AACjC,YAAI,YAAY,cAAc,KAAK,CAAC,kBAAkB,cAAc,GAAG;AACrE,gBAAM,EAAE,WAAW,IAAI;AACvB,gBAAM,WAAW,WAAW,QAAQ,cAAc;AAClD,kBAAQ,OAAO;AAAA,YACb,MAAM,MAAM;AAAA,YACZ,WAAW;AAAA,YACX,IAAI,OAAO;AACT,qBAAO,MAAM,YAAY,gBAAgB,YAAY,QAAQ,GAAG;AAAA,YAClE;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,yBAAyB;AAAA,MACzB,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAED,IAAO,2CAAQ;;;ACpHf,kBAAiB;AAEjB,IAAAA,gBAA4B;AAE5B,IAAMC,cAAa,0BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,cAAc,CAAC,QAAgB;AACnC,MAAI,iCAAiC,KAAK,GAAG,KAAK,uDAAuD,KAAK,GAAG,GAAG;AAClH,WAAO,4DAA4D,KAAK,GAAG;AAAA,EAC7E;AAEA,SAAO,6BAA6B,KAAK,GAAG;AAC9C;AAEA,IAAM,gBAAgBA,YAAW;AAAA,EAC/B,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,WAAO;AAAA,MACL,UAAU;AACR,cAAM,EAAE,SAAS,IAAI;AACrB,cAAM,MAAM,YAAAC,QAAK,QAAQ,QAAQ;AAEjC,YAAI,QAAQ,SAAS,QAAQ,OAAO;AAClC;AAAA,QACF;AAEA,cAAM,WAAW,YAAAA,QAAK,SAAS,UAAU,GAAG;AAE5C,YAAI,CAAC,YAAY,QAAQ,GAAG;AAC1B,kBAAQ,OAAO;AAAA,YACb,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;AAAA,YAC1B,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,0BAAQ;;;ACrDf,IAAAC,eAAiB;AAEjB,IAAAC,gBAA4B;AAE5B,IAAMC,cAAa,0BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,eAAe,CAAC,QAAgB,sBAAsB,KAAK,GAAG,KAAK,CAAC,WAAW,KAAK,GAAG;AAE7F,IAAM,gBAAgBA,YAAW;AAAA,EAC/B,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,WAAO;AAAA,MACL,UAAU;AACR,cAAM,EAAE,SAAS,IAAI;AACrB,cAAM,MAAM,aAAAC,QAAK,QAAQ,QAAQ;AAEjC,YAAI,QAAQ,UAAU,QAAQ,QAAQ;AACpC;AAAA,QACF;AAEA,cAAM,WAAW,aAAAA,QAAK,SAAS,UAAU,GAAG;AAE5C,YAAI,CAAC,aAAa,QAAQ,GAAG;AAC3B,kBAAQ,OAAO;AAAA,YACb,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;AAAA,YAC1B,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,0BAAQ;;;AC/Cf,IAAAC,eAAiB;AAEjB,IAAAC,gBAA4B;AAE5B,IAAMC,cAAa,0BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,4BAA4BA,YAAW;AAAA,EAC3C,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB;AAAA,IACvB;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,WAAO;AAAA,MACL,UAAU;AACR,cAAM,EAAE,SAAS,IAAI;AAErB,YAAI,CAAC,SAAS,SAAS,KAAK,GAAG;AAC7B;AAAA,QACF;AAEA,cAAM,WAAW,aAAAC,QAAK,SAAS,UAAU,KAAK;AAE9C,iBAAS,YAAY,MAAuB;AAC1C,iBAAO,oBAAoB,KAAK,IAAI;AAAA,QACtC;AAEA,iBAAS,YAAY,MAAuB;AAC1C,iBAAO,YAAY,IAAI;AAAA,QACzB;AAEA,YAAI,CAAC,YAAY,QAAQ,GAAG;AAC1B,kBAAQ,OAAO;AAAA,YACb,MAAM,QAAQ,WAAW;AAAA,YACzB,WAAW;AAAA,YACX,MAAM,EAAE,UAAU,SAAS;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,uCAAQ;;;ACrDf,IAAAC,gBAAsD;AAEtD,IAAMC,cAAa,0BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,wBAAwBA,YAAW;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,uBACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,sBAAsB,CAAC,SAA0D;AACrF,UAAI,CAAC,KAAM,QAAO;AAElB,UAAI,KAAK,SAAS,6BAAe,uBAAuB;AACtD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAAS,6BAAe,mBAAmB;AAClD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAAS,6BAAe,eAAe;AAC9C,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,gBAAgB,MAAM;AACpB,YAAI,KAAK,YAAY,oBAAoB,KAAK,QAAQ,GAAG;AACvD,kBAAQ,OAAO;AAAA,YACb,MAAM,KAAK;AAAA,YACX,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,mCAAQ;;;ACrDf,yBAAuB;AACvB,IAAAC,gBAA4B;AAE5B,IAAMC,cAAa,0BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,UAAUA,YAAW;AAAA,EACzB,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,IACX;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,EAAE,WAAW,IAAI;AAEvB,WAAO;AAAA,MACL,UAAU;AACR,cAAM,OAAO,WAAW,QAAQ;AAChC,cAAM,YAAQ,mBAAAC,SAAW;AACzB,cAAM,UAAU,MAAM,KAAK,KAAK,SAAS,KAAK,CAAC;AAE/C,gBAAQ,QAAQ,CAAC,UAAU;AACzB,gBAAM,MAAM,WAAW,gBAAgB,MAAM,KAAK;AAElD,kBAAQ,OAAO;AAAA,YACb;AAAA,YACA,WAAW;AAAA,UACb,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,mBAAQ;;;AC3Cf,IAAAC,gBAAsD;AAEtD,IAAMC,cAAa,0BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,gBAAgBA,YAAW;AAAA,EAC/B,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,eACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,qBAAqB,CAAC,SAAiC;AAC3D,UAAI,KAAK,SAAS,6BAAe,kBAAkB;AACjD,eAAO;AAAA,MACT;AAEA,YAAM,EAAE,OAAO,IAAI;AACnB,UAAI,OAAO,SAAS,6BAAe,kBAAkB;AACnD,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,OAAO;AAC3B,YAAM,UAAU,OAAO;AAEvB,aACE,YAAY,SAAS,6BAAe,cACpC,YAAY,SAAS,aACrB,QAAQ,SAAS,6BAAe,cAChC,QAAQ,SAAS;AAAA,IAErB;AAEA,WAAO;AAAA,MACL,kBAAkB,MAAM;AACtB,aAAK,KAAK,aAAa,QAAQ,KAAK,aAAa,SAAS,mBAAmB,KAAK,IAAI,GAAG;AACvF,kBAAQ,OAAO;AAAA,YACb;AAAA,YACA,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,sBAAsB,MAAM;AAC1B,YAAI,mBAAmB,KAAK,IAAI,GAAG;AACjC,kBAAQ,OAAO;AAAA,YACb;AAAA,YACA,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,0BAAQ;;;AChEf,IAAAC,gBAA4B;AAI5B,IAAMC,cAAa,0BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,uBAAuBA,YAAW;AAAA,EACtC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,sBAAsB;AAAA,IACxB;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,gBAAgB,CACpB,SACG;AACH,UAAI,KAAK,YAAY;AACnB,cAAM,iBAAiB,QAAQ,WAAW,QAAQ,KAAK,UAAU;AACjE,gBAAQ,OAAO;AAAA,UACb,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,UACX,MAAM;AAAA,YACJ,YAAY;AAAA,UACd;AAAA,UACA,IAAI,OAAO;AACT,mBAAO,MAAM,OAAO,KAAK,UAAW;AAAA,UACtC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,yBAAyB;AAAA,IAC3B;AAAA,EACF;AACF,CAAC;AAED,IAAO,kCAAQ;;;AClDf,IAAAC,gBAAsD;AAEtD,IAAMC,cAAa,0BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,kBAAkBA,YAAW;AAAA,EACjC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,iBACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,sBAAsB,CAAC,SAAgE;AAC3F,UAAI,KAAK,SAAS,6BAAe,eAAe;AAC9C,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAAS,6BAAe,uBAAuB;AACtD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAAS,6BAAe,mBAAmB;AAClD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAAS,6BAAe,kBAAkB;AACjD,cAAM,mBAAmB,CAAC,MAAM,OAAO,MAAM,OAAO,KAAK,KAAK,MAAM,MAAM,MAAM,YAAY;AAC5F,eAAO,iBAAiB,SAAS,KAAK,QAAQ;AAAA,MAChD;AAEA,UAAI,KAAK,SAAS,6BAAe,iBAAiB;AAChD,eAAO,KAAK,aAAa;AAAA,MAC3B;AAEA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,eAAe,MAAM;AACnB,aAAK,UAAU,QAAQ,CAAC,QAAQ;AAC9B,cAAI,oBAAoB,GAAG,GAAG;AAC5B,oBAAQ,OAAO;AAAA,cACb,MAAM;AAAA,cACN,WAAW;AAAA,YACb,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,cAAc,MAAM;AAClB,aAAK,UAAU,QAAQ,CAAC,QAAQ;AAC9B,cAAI,oBAAoB,GAAG,GAAG;AAC5B,oBAAQ,OAAO;AAAA,cACb,MAAM;AAAA,cACN,WAAW;AAAA,YACb,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,6BAAQ;;;ACxEf,IAAAC,iBAA4C;AAI5C,IAAMC,eAAa,2BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,4BAA4BA,aAAW;AAAA,EAC3C,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB;AAAA,IACvB;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,qBAAqB,CAAC,SAAyE;AACnG,YAAM,EAAE,OAAO,IAAI;AACnB,aAAO,QAAQ,SAAS,8BAAe;AAAA,IACzC;AAEA,UAAM,sBAAsB,CAC1B,SACG;AACH,UAAI,KAAK,SAAS,8BAAe,qBAAqB;AACpD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAAS,8BAAe,sBAAsB,KAAK,SAAS,8BAAe,yBAAyB;AAC3G,YAAI,mBAAmB,IAAI,GAAG;AAC5B,iBAAO;AAAA,QACT;AAEA,cAAM,EAAE,OAAO,IAAI;AACnB,eACE,QAAQ,SAAS,8BAAe,sBAChC,QAAQ,SAAS,8BAAe,wBAChC,QAAQ,SAAS,8BAAe,YAChC,QAAQ,SAAS,8BAAe;AAAA,MAEpC;AAEA,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB,CACpB,SACG;AACH,YAAM,EAAE,SAAS,IAAI;AACrB,UAAI,SAAS,SAAS,cAAc,KAAK,SAAS,SAAS,OAAO,GAAG;AACnE;AAAA,MACF;AAEA,UAAI,CAAC,oBAAoB,IAAI,GAAG;AAC9B;AAAA,MACF;AAEA,UAAI,KAAK,SAAS,8BAAe,uBAAuB,KAAK,IAAI;AAC/D,cAAM,eAAe,KAAK,GAAG;AAC7B,YAAI,aAAa,WAAW,GAAG,KAAK,aAAa,SAAS,GAAG,KAAK,mBAAmB,KAAK,YAAY,GAAG;AACvG;AAAA,QACF;AAAA,MACF;AAEA,UAAI,KAAK,OAAO,UAAU,GAAG;AAC3B;AAAA,MACF;AAEA,YAAM,2BAA2B,KAAK,OAAO;AAAA,QAC3C,CAAC,UACC,MAAM,SAAS,8BAAe,iBAAiB,MAAM,SAAS,8BAAe;AAAA,MACjF;AAEA,UAAI,0BAA0B;AAC5B,gBAAQ,OAAO;AAAA,UACb;AAAA,UACA,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,yBAAyB;AAAA,IAC3B;AAAA,EACF;AACF,CAAC;AAED,IAAO,sCAAQ;;;AChGf,IAAAC,iBAA4C;AAI5C,IAAMC,eAAa,2BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,mBAAmBA,aAAW;AAAA,EAClC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,aAAS,uBAAuB,MAAkC;AAChE,UAAI,KAAK,eAAe,QAAQ;AAC9B;AAAA,MACF;AAEA,UACE,QAAQ,SAAS,SAAS,QAAQ,KAClC,QAAQ,SAAS,SAAS,QAAQ,KAClC,QAAQ,SAAS,SAAS,WAAW,GACrC;AACA;AAAA,MACF;AAEA,UAAI,KAAK,WAAW,WAAW,GAAG;AAChC;AAAA,MACF;AAEA,YAAM,SAAS,KAAK,OAAO;AAC3B,YAAM,kBACJ,sCAAsC,KAAK,MAAM,KACjD,gDAAgD,KAAK,MAAM,KAC3D,qCAAqC,KAAK,MAAM,KAChD,4CAA4C,KAAK,MAAM,KACvD,uCAAuC,KAAK,MAAM,KAClD,sDAAsD,KAAK,MAAM,KACjE,OAAO,SAAS,QAAQ,KACxB,WAAW,eACX,WAAW,sBACX,WAAW,sBACX,OAAO,WAAW,WAAW,KAC7B,OAAO,WAAW,mBAAmB,KACrC,OAAO,SAAS,UAAU,KAC1B,OAAO,SAAS,MAAM,KACtB,WAAW,oBACX,OAAO,WAAW,UAAU;AAE9B,UAAI,iBAAiB;AACnB;AAAA,MACF;AAEA,YAAM,mBAAmB,KAAK,WAAW,MAAM,CAAC,cAAc;AAC5D,YAAI,UAAU,SAAS,8BAAe,wBAAwB;AAC5D,iBAAO;AAAA,QACT;AACA,YAAI,UAAU,SAAS,8BAAe,0BAA0B;AAC9D,iBAAO;AAAA,QACT;AACA,YAAI,UAAU,SAAS,8BAAe,iBAAiB;AACrD,gBAAM,eACJ,UAAU,SAAS,SAAS,8BAAe,aAAa,UAAU,SAAS,OAAO,UAAU,SAAS;AAEvG,gBAAM,kBACH,KAAK,OAAO,UAAU,8BAA8B,CAAC,YAAY,aAAa,EAAE,SAAS,YAAY,KACrG,KAAK,OAAO,UAAU,WACrB,CAAC,aAAa,kBAAkB,aAAa,MAAM,OAAO,gBAAgB,mBAAmB,EAAE;AAAA,YAC7F;AAAA,UACF,KACF,aAAa,SAAS,MAAM,KAC5B,aAAa,SAAS,WAAW,KACjC,aAAa,SAAS,OAAO;AAE/B,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,CAAC;AAED,UAAI,kBAAkB;AACpB,gBAAQ,OAAO;AAAA,UACb;AAAA,UACA,WAAW;AAAA,UACX,IAAI,OAAO;AACT,kBAAM,aAAa,QAAQ,WAAW,QAAQ,IAAI;AAClD,kBAAM,cAAc,WAAW,QAAQ,cAAc,cAAc;AACnE,mBAAO,MAAM,YAAY,MAAM,WAAW;AAAA,UAC5C;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,mBAAmB;AAAA,IACrB;AAAA,EACF;AACF,CAAC;AAED,IAAO,6BAAQ;;;AC7Gf,IAAAC,iBAA4C;AAI5C,IAAMC,eAAa,2BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,iCAAiCA,aAAW;AAAA,EAChD,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,aAAS,oBAAoB,MAA+C;AAC1E,aACE,KAAK,WAAW,SAAS,8BAAe,cACxC,KAAK,WAAW,SAAS,8BAAe,eACxC,KAAK,UAAU,SAAS,8BAAe,cACvC,KAAK,UAAU,SAAS,8BAAe;AAAA,IAE3C;AAEA,aAAS,gBAAgB,MAA2C;AAClE,aAAO,KAAK,MAAM,SAAS,8BAAe,cAAc,KAAK,MAAM,SAAS,8BAAe;AAAA,IAC7F;AAEA,aAAS,aAAa,OAAyC;AAC7D,aAAO,MAAM,KAAK,KAAK,CAAC,SAAS;AAC/B,YAAI,KAAK,SAAS,8BAAe,mBAAmB,KAAK,UAAU;AACjE,iBACE,KAAK,SAAS,SAAS,8BAAe,cACtC,KAAK,SAAS,SAAS,8BAAe,eACrC,KAAK,SAAS,SAAS,8BAAe,yBAAyB,oBAAoB,KAAK,QAAQ,KAChG,KAAK,SAAS,SAAS,8BAAe,qBAAqB,gBAAgB,KAAK,QAAQ;AAAA,QAE7F;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,aAAS,iBACP,MACS;AACT,UAAI,KAAK,SAAS,8BAAe,yBAAyB;AACxD,YAAI,KAAK,KAAK,SAAS,8BAAe,cAAc,KAAK,KAAK,SAAS,8BAAe,aAAa;AACjG,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,KAAK,SAAS,8BAAe,gBAAgB;AACpD,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF,WAAW,KAAK,SAAS,8BAAe,sBAAsB,KAAK,SAAS,8BAAe,qBAAqB;AAC9G,YAAI,KAAK,QAAQ,KAAK,KAAK,SAAS,8BAAe,gBAAgB;AACjE,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,uBAAuB,MAAkC;AAChE,UAAI,KAAK,SAAS,8BAAe,eAAe;AAC9C,eAAO;AAAA,MACT;AACA,UAAI,KAAK,SAAS,8BAAe,mBAAmB,KAAK,eAAe;AACtE,eAAO,KAAK,cAAc,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,8BAAe,aAAa;AAAA,MAC9F;AACA,UAAI,KAAK,SAAS,8BAAe,aAAa;AAC5C,eAAO,KAAK,MAAM,KAAK,CAAC,SAAS,uBAAuB,IAAI,CAAC;AAAA,MAC/D;AACA,aAAO;AAAA,IACT;AAEA,aAAS,oBAAoB,MAAkC;AAC7D,UAAI,KAAK,SAAS,8BAAe,eAAe;AAC9C,eAAO;AAAA,MACT;AACA,UAAI,KAAK,SAAS,8BAAe,mBAAmB,KAAK,eAAe;AACtE,eAAO,KAAK,cAAc,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,8BAAe,aAAa;AAAA,MAC9F;AACA,UAAI,KAAK,SAAS,8BAAe,aAAa;AAC5C,eAAO,KAAK,MAAM,KAAK,CAAC,SAAS,oBAAoB,IAAI,CAAC;AAAA,MAC5D;AACA,aAAO;AAAA,IACT;AAEA,aAAS,cACP,MACA;AACA,UAAI,CAAC,iBAAiB,IAAI,GAAG;AAC3B;AAAA,MACF;AACA,UAAI,KAAK,OAAO,WAAW,GAAG;AAC5B;AAAA,MACF;AACA,YAAM,QAAQ,KAAK,OAAO,CAAC;AAC3B,UAAI,MAAM,SAAS,8BAAe,cAAc,MAAM,gBAAgB;AACpE,cAAM,EAAE,eAAe,IAAI,MAAM;AACjC,YAAI,uBAAuB,cAAc,KAAK,oBAAoB,cAAc,GAAG;AACjF,kBAAQ,OAAO;AAAA,YACb,MAAM,MAAM;AAAA,YACZ,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,yBAAyB;AAAA,MACzB,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAED,IAAO,6CAAQ;;;AC5Hf,IAAAC,iBAA4C;AAI5C,IAAMC,eAAa,2BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,wBAAwBA,aAAW;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,uBACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,aAAS,oBAAoB,OAAoC;AAC/D,UAAI,MAAM,SAAS,8BAAe,mBAAmB;AACnD,eAAO,oBAAoB,MAAM,IAAI;AAAA,MACvC;AAEA,UAAI,MAAM,SAAS,8BAAe,eAAe;AAC/C,YAAI,MAAM,gBAAgB,eAAe,SAAS,8BAAe,eAAe;AAC9E,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,MAAM,SAAS,8BAAe,YAAY;AAC5C,YAAI,MAAM,gBAAgB,eAAe,SAAS,8BAAe,eAAe;AAC9E,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,cACP,MAMA;AACA,UAAI,SAA+B,CAAC;AAEpC,UAAI,YAAY,MAAM;AACpB,iBAAS,KAAK;AAAA,MAChB,WAAW,WAAW,QAAQ,KAAK,OAAO;AACxC,iBAAS,KAAK,MAAM;AAAA,MACtB;AAEA,aAAO,QAAQ,CAAC,UAAU;AACxB,YAAI,oBAAoB,KAAK,GAAG;AAC9B,kBAAQ,OAAO;AAAA,YACb,MAAM;AAAA,YACN,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,yBAAyB;AAAA,MACzB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IACpB;AAAA,EACF;AACF,CAAC;AAED,IAAO,mCAAQ;;;AChFf,IAAAC,iBAA4C;AAI5C,IAAMC,eAAa,2BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,yBAAyBA,aAAW;AAAA,EACxC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,oBAAoB;AAAA,IACtB;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,aAAa,oBAAI,IAAI;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,sBAAsB,oBAAI,IAAI;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,kBAAkB,oBAAI,IAAI,CAAC,GAAG,YAAY,GAAG,mBAAmB,CAAC;AAEvE,aAAS,sBAAsB,MAAiC;AAC9D,UACE,KAAK,OAAO,SAAS,8BAAe,cACpC,KAAK,OAAO,SAAS,WACrB,KAAK,SAAS,SAAS,8BAAe,cACtC,gBAAgB,IAAI,KAAK,SAAS,IAAI,GACtC;AACA,cAAM,WAAW,KAAK,SAAS;AAC/B,cAAM,SAAS,WAAW,IAAI,QAAQ;AACtC,cAAM,kBAAkB,SACpB,iBAAiB,QAAQ,oBACzB,YAAY,QAAQ;AAExB,gBAAQ,OAAO;AAAA,UACb;AAAA,UACA,WAAW;AAAA,UACX,MAAM,EAAE,UAAU,gBAAgB;AAAA,UAClC,IAAI,OAAO;AACT,mBAAO,MAAM,YAAY,MAAM,QAAQ;AAAA,UACzC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,kBAAkB;AAAA,MAClB,qCAAqC,CAAC,SAAmC;AACvE,YACE,KAAK,KAAK,SAAS,8BAAe,cAClC,KAAK,KAAK,SAAS,WACnB,KAAK,MAAM,SAAS,8BAAe,cACnC,gBAAgB,IAAI,KAAK,MAAM,IAAI,GACnC;AACA,gBAAM,WAAW,KAAK,MAAM;AAC5B,gBAAM,SAAS,WAAW,IAAI,QAAQ;AACtC,gBAAM,kBAAkB,SACpB,iBAAiB,QAAQ,oBACzB,YAAY,QAAQ;AAExB,kBAAQ,OAAO;AAAA,YACb;AAAA,YACA,WAAW;AAAA,YACX,MAAM,EAAE,UAAU,gBAAgB;AAAA,YAClC,IAAI,OAAO;AACT,qBAAO,MAAM,YAAY,MAAM,QAAQ;AAAA,YACzC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,oCAAQ;;;AC5If,IAAAC,iBAA4C;AAI5C,IAAMC,eAAa,2BAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,QAAQ,MAAM,GAAG,EAAE,YAAY,CAAC;AACzH;AAEA,IAAM,wBAAwBA,aAAW;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,0BACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,aAAS,oBAAoB,MAA+C;AAC1E,aACE,KAAK,WAAW,SAAS,8BAAe,cACxC,KAAK,WAAW,SAAS,8BAAe,eACxC,KAAK,UAAU,SAAS,8BAAe,cACvC,KAAK,UAAU,SAAS,8BAAe;AAAA,IAE3C;AAEA,aAAS,gBAAgB,MAA2C;AAClE,aAAO,KAAK,MAAM,SAAS,8BAAe,cAAc,KAAK,MAAM,SAAS,8BAAe;AAAA,IAC7F;AAEA,aAAS,aAAa,OAAyC;AAC7D,aAAO,MAAM,KAAK,KAAK,CAAC,SAAS;AAC/B,YAAI,KAAK,SAAS,8BAAe,mBAAmB,KAAK,UAAU;AACjE,iBACE,KAAK,SAAS,SAAS,8BAAe,cACtC,KAAK,SAAS,SAAS,8BAAe,eACrC,KAAK,SAAS,SAAS,8BAAe,yBAAyB,oBAAoB,KAAK,QAAQ,KAChG,KAAK,SAAS,SAAS,8BAAe,qBAAqB,gBAAgB,KAAK,QAAQ;AAAA,QAE7F;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,aAAS,iBACP,MACA;AACA,UAAI,KAAK,SAAS,8BAAe,yBAAyB;AACxD,YAAI,KAAK,KAAK,SAAS,8BAAe,cAAc,KAAK,KAAK,SAAS,8BAAe,aAAa;AACjG,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,KAAK,SAAS,8BAAe,gBAAgB;AACpD,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF,WAAW,KAAK,SAAS,8BAAe,sBAAsB,KAAK,SAAS,8BAAe,qBAAqB;AAC9G,YAAI,KAAK,QAAQ,KAAK,KAAK,SAAS,8BAAe,gBAAgB;AACjE,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,cACP,MACA;AACA,UAAI,CAAC,iBAAiB,IAAI,GAAG;AAC3B;AAAA,MACF;AAEA,UAAI,KAAK,OAAO,WAAW,GAAG;AAC5B;AAAA,MACF;AAEA,YAAM,QAAQ,KAAK,OAAO,CAAC;AAE3B,UAAI,MAAM,SAAS,8BAAe,eAAe;AAC/C,cAAM,aAAa,MAAM,WACtB,OAAO,CAAC,SAAoC,KAAK,SAAS,8BAAe,QAAQ,EACjF,IAAI,CAAC,SAAS;AACb,cAAI,KAAK,IAAI,SAAS,8BAAe,YAAY;AAC/C,mBAAO,KAAK,IAAI;AAAA,UAClB;AACA,iBAAO;AAAA,QACT,CAAC,EACA,OAAO,CAAC,SAAyB,SAAS,IAAI;AAEjD,YAAI,WAAW,WAAW,GAAG;AAC3B;AAAA,QACF;AAEA,gBAAQ,OAAO;AAAA,UACb,MAAM;AAAA,UACN,WAAW;AAAA,UACX,MAAM;AAAA,YACJ,YAAY,WAAW,KAAK,IAAI;AAAA,UAClC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,yBAAyB;AAAA,MACzB,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAED,IAAO,kCAAQ;;;AhBnGf,IAAM,OAAO;AAAA,EACX,MAAM,gBAAY;AAAA,EAClB,SAAS,gBAAY;AACvB;AAEA,IAAM,QAAQ;AAAA,EACZ,oCAAoC;AAAA,EACpC,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,gCAAgC;AAAA,EAChC,4BAA4B;AAAA,EAC5B,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,2BAA2B;AAAA,EAC3B,sBAAsB;AAAA,EACtB,+BAA+B;AAAA,EAC/B,sBAAsB;AAAA,EACtB,sCAAsC;AAAA,EACtC,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,2BAA2B;AAC7B;AAEA,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AACF;AAEA,IAAM,YAAY;AAAA,EAChB,uBAAuB;AAAA,EACvB,8BAA8B;AAAA,EAC9B,2CAA2C;AAAA,EAC3C,0CAA0C;AAAA,EAC1C,sCAAsC;AAAA,EACtC,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,wCAAwC;AAAA,EACxC,uCAAuC;AAAA,EACvC,iCAAiC;AAAA,EACjC,8BAA8B;AAChC;AAEA,IAAM,uBAAuB;AAAA,EAC3B,uBAAuB;AAAA,EACvB,8BAA8B;AAAA,EAC9B,2CAA2C;AAAA,EAC3C,0CAA0C;AAAA,EAC1C,sCAAsC;AAAA,EACtC,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,wCAAwC;AAAA,EACxC,uCAAuC;AAAA,EACvC,iCAAiC;AAAA,EACjC,8BAA8B;AAChC;AAEA,IAAM,WAAW;AAAA,EACf,8BAA8B;AAAA,EAC9B,iDAAiD;AAAA,EACjD,sCAAsC;AAAA,EACtC,+CAA+C;AACjD;AAEA,IAAM,sBAAsB;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,iDAAiD;AAAA,EACjD,sCAAsC;AAAA,EACtC,+CAA+C;AACjD;AAEA,IAAM,eAAe,CAAC,iBAAyC;AAAA,EAC7D,SAAS;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,OAAO;AACT;AAEA,IAAM,UAAU;AAAA,EACd,MAAM,aAAa,SAAS;AAAA,EAC5B,oBAAoB,aAAa,oBAAoB;AAAA,EACrD,OAAO,aAAa;AAAA,IAClB,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAAA,EACD,qBAAqB,aAAa;AAAA,IAChC,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAAA,EACD,QAAQ,aAAa;AAAA,IACnB,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAAA,EACD,sBAAsB,aAAa;AAAA,IACjC,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AACH;AAEA,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAO,gBAAQ;","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","import_utils","createRule"]}
package/lib/index.d.cts DELETED
@@ -1,388 +0,0 @@
1
- import { TSESLint } from '@typescript-eslint/utils';
2
-
3
- declare const meta: {
4
- readonly name: string;
5
- readonly version: string;
6
- };
7
- declare const rules: {
8
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
9
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
10
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
11
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
12
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
13
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
14
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
15
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
16
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
17
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
18
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
19
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
20
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
21
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
22
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
23
- };
24
- declare const configs: {
25
- readonly base: {
26
- plugins: {
27
- nextfriday: {
28
- readonly meta: {
29
- readonly name: string;
30
- readonly version: string;
31
- };
32
- readonly rules: {
33
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
34
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
35
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
36
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
37
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
38
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
39
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
40
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
41
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
42
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
43
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
44
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
45
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
46
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
47
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
48
- };
49
- };
50
- };
51
- rules: Record<string, string>;
52
- };
53
- readonly "base/recommended": {
54
- plugins: {
55
- nextfriday: {
56
- readonly meta: {
57
- readonly name: string;
58
- readonly version: string;
59
- };
60
- readonly rules: {
61
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
62
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
63
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
64
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
65
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
66
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
67
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
68
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
69
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
70
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
71
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
72
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
73
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
74
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
75
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
76
- };
77
- };
78
- };
79
- rules: Record<string, string>;
80
- };
81
- readonly react: {
82
- plugins: {
83
- nextfriday: {
84
- readonly meta: {
85
- readonly name: string;
86
- readonly version: string;
87
- };
88
- readonly rules: {
89
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
90
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
91
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
92
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
93
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
94
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
95
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
96
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
97
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
98
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
99
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
100
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
101
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
102
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
103
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
104
- };
105
- };
106
- };
107
- rules: Record<string, string>;
108
- };
109
- readonly "react/recommended": {
110
- plugins: {
111
- nextfriday: {
112
- readonly meta: {
113
- readonly name: string;
114
- readonly version: string;
115
- };
116
- readonly rules: {
117
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
118
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
119
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
120
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
121
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
122
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
123
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
124
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
125
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
126
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
127
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
128
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
129
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
130
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
131
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
132
- };
133
- };
134
- };
135
- rules: Record<string, string>;
136
- };
137
- readonly nextjs: {
138
- plugins: {
139
- nextfriday: {
140
- readonly meta: {
141
- readonly name: string;
142
- readonly version: string;
143
- };
144
- readonly rules: {
145
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
146
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
147
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
148
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
149
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
150
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
151
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
152
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
153
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
154
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
155
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
156
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
157
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
158
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
159
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
160
- };
161
- };
162
- };
163
- rules: Record<string, string>;
164
- };
165
- readonly "nextjs/recommended": {
166
- plugins: {
167
- nextfriday: {
168
- readonly meta: {
169
- readonly name: string;
170
- readonly version: string;
171
- };
172
- readonly rules: {
173
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
174
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
175
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
176
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
177
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
178
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
179
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
180
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
181
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
182
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
183
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
184
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
185
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
186
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
187
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
188
- };
189
- };
190
- };
191
- rules: Record<string, string>;
192
- };
193
- };
194
- declare const nextfridayPlugin: {
195
- readonly meta: {
196
- readonly name: string;
197
- readonly version: string;
198
- };
199
- readonly configs: {
200
- readonly base: {
201
- plugins: {
202
- nextfriday: {
203
- readonly meta: {
204
- readonly name: string;
205
- readonly version: string;
206
- };
207
- readonly rules: {
208
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
209
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
210
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
211
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
212
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
213
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
214
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
215
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
216
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
217
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
218
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
219
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
220
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
221
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
222
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
223
- };
224
- };
225
- };
226
- rules: Record<string, string>;
227
- };
228
- readonly "base/recommended": {
229
- plugins: {
230
- nextfriday: {
231
- readonly meta: {
232
- readonly name: string;
233
- readonly version: string;
234
- };
235
- readonly rules: {
236
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
237
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
238
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
239
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
240
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
241
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
242
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
243
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
244
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
245
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
246
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
247
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
248
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
249
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
250
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
251
- };
252
- };
253
- };
254
- rules: Record<string, string>;
255
- };
256
- readonly react: {
257
- plugins: {
258
- nextfriday: {
259
- readonly meta: {
260
- readonly name: string;
261
- readonly version: string;
262
- };
263
- readonly rules: {
264
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
265
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
266
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
267
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
268
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
269
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
270
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
271
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
272
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
273
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
274
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
275
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
276
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
277
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
278
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
279
- };
280
- };
281
- };
282
- rules: Record<string, string>;
283
- };
284
- readonly "react/recommended": {
285
- plugins: {
286
- nextfriday: {
287
- readonly meta: {
288
- readonly name: string;
289
- readonly version: string;
290
- };
291
- readonly rules: {
292
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
293
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
294
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
295
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
296
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
297
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
298
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
299
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
300
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
301
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
302
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
303
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
304
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
305
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
306
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
307
- };
308
- };
309
- };
310
- rules: Record<string, string>;
311
- };
312
- readonly nextjs: {
313
- plugins: {
314
- nextfriday: {
315
- readonly meta: {
316
- readonly name: string;
317
- readonly version: string;
318
- };
319
- readonly rules: {
320
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
321
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
322
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
323
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
324
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
325
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
326
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
327
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
328
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
329
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
330
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
331
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
332
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
333
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
334
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
335
- };
336
- };
337
- };
338
- rules: Record<string, string>;
339
- };
340
- readonly "nextjs/recommended": {
341
- plugins: {
342
- nextfriday: {
343
- readonly meta: {
344
- readonly name: string;
345
- readonly version: string;
346
- };
347
- readonly rules: {
348
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
349
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
350
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
351
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
352
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
353
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
354
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
355
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
356
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
357
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
358
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
359
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
360
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
361
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
362
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
363
- };
364
- };
365
- };
366
- rules: Record<string, string>;
367
- };
368
- };
369
- readonly rules: {
370
- readonly "enforce-readonly-component-props": TSESLint.RuleModule<"useReadonly", [], unknown, TSESLint.RuleListener>;
371
- readonly "file-kebab-case": TSESLint.RuleModule<"fileKebabCase", [], unknown, TSESLint.RuleListener>;
372
- readonly "jsx-pascal-case": TSESLint.RuleModule<"jsxPascalCase", [], unknown, TSESLint.RuleListener>;
373
- readonly "md-filename-case-restriction": TSESLint.RuleModule<"invalidFilenameCase", [], unknown, TSESLint.RuleListener>;
374
- readonly "no-complex-inline-return": TSESLint.RuleModule<"noComplexInlineReturn", [], unknown, TSESLint.RuleListener>;
375
- readonly "no-emoji": TSESLint.RuleModule<"noEmoji", [], unknown, TSESLint.RuleListener>;
376
- readonly "no-env-fallback": TSESLint.RuleModule<"noEnvFallback", [], unknown, TSESLint.RuleListener>;
377
- readonly "no-explicit-return-type": TSESLint.RuleModule<"noExplicitReturnType", [], unknown, TSESLint.RuleListener>;
378
- readonly "no-logic-in-params": TSESLint.RuleModule<"noLogicInParams", [], unknown, TSESLint.RuleListener>;
379
- readonly "prefer-destructuring-params": TSESLint.RuleModule<"preferDestructuring", [], unknown, TSESLint.RuleListener>;
380
- readonly "prefer-import-type": TSESLint.RuleModule<"preferImportType", [], unknown, TSESLint.RuleListener>;
381
- readonly "prefer-interface-over-inline-types": TSESLint.RuleModule<"useInterface", [], unknown, TSESLint.RuleListener>;
382
- readonly "prefer-named-param-types": TSESLint.RuleModule<"preferNamedParamTypes", [], unknown, TSESLint.RuleListener>;
383
- readonly "prefer-react-import-types": TSESLint.RuleModule<"preferDirectImport", [], unknown, TSESLint.RuleListener>;
384
- readonly "react-props-destructure": TSESLint.RuleModule<"noParameterDestructuring", [], unknown, TSESLint.RuleListener>;
385
- };
386
- };
387
-
388
- export { configs, nextfridayPlugin as default, meta, rules };