eslint-plugin-nextfriday 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/rules/boolean-naming-prefix.ts","../src/rules/enforce-readonly-component-props.ts","../src/rules/enforce-sorted-destructuring.ts","../src/rules/file-kebab-case.ts","../src/rules/jsx-pascal-case.ts","../src/rules/no-direct-date.ts","../src/rules/jsx-no-variable-in-callback.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/require-explicit-return-type.ts","../src/rules/jsx-no-non-component-function.ts","../src/utils.ts","../src/rules/no-logic-in-params.ts","../src/rules/no-single-char-variables.ts","../src/rules/prefer-destructuring-params.ts","../src/rules/prefer-function-declaration.ts","../src/rules/prefer-import-type.ts","../src/rules/prefer-interface-over-inline-types.ts","../src/rules/prefer-jsx-template-literals.ts","../src/rules/prefer-named-param-types.ts","../src/rules/prefer-react-import-types.ts","../src/rules/react-props-destructure.ts","../src/index.ts"],"sourcesContent":["{\n \"name\": \"eslint-plugin-nextfriday\",\n \"version\": \"1.7.0\",\n \"description\": \"A comprehensive ESLint plugin providing custom rules and configurations for Next Friday development workflows.\",\n \"keywords\": [\n \"eslint\",\n \"eslintplugin\",\n \"eslint-plugin\",\n \"nextfriday\",\n \"next-friday\",\n \"linting\",\n \"code-quality\",\n \"javascript\",\n \"typescript\",\n \"development-tools\"\n ],\n \"homepage\": \"https://github.com/next-friday/eslint-plugin-nextfriday\",\n \"bugs\": {\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Next Friday <nextfriday.developer@gmail.com>\",\n \"contributors\": [\n \"@joetakara\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/index.d.ts\",\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"lib/index.js\",\n \"types\": \"lib/index.d.ts\",\n \"files\": [\n \"LICENSE\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"docs\",\n \"lib\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"changeset:publish\": \"npm publish --provenance --access public\",\n \"changeset:version\": \"changeset version\",\n \"clear\": \"rm -rf lib node_modules/.cache .eslintcache\",\n \"eslint\": \"eslint src --ext .js,.ts --fix\",\n \"eslint:check\": \"eslint src --ext .js,.ts\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"pnpm 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 { ESLintUtils, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst BOOLEAN_PREFIXES = [\"is\", \"has\", \"should\", \"can\", \"did\", \"will\", \"was\", \"are\", \"does\", \"had\"];\n\nconst startsWithBooleanPrefix = (name: string): boolean => {\n const lowerName = name.toLowerCase();\n\n return BOOLEAN_PREFIXES.some((prefix) => {\n if (!lowerName.startsWith(prefix)) {\n return false;\n }\n\n if (name.length === prefix.length) {\n return true;\n }\n\n const nextChar = name.charAt(prefix.length);\n return nextChar === nextChar.toUpperCase();\n });\n};\n\nconst isBooleanLiteral = (node: TSESTree.Expression): boolean =>\n node.type === AST_NODE_TYPES.Literal && typeof node.value === \"boolean\";\n\nconst isBooleanExpression = (node: TSESTree.Expression): boolean => {\n if (isBooleanLiteral(node)) {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.UnaryExpression && node.operator === \"!\") {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.BinaryExpression) {\n const comparisonOperators = [\"===\", \"!==\", \"==\", \"!=\", \"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"];\n return comparisonOperators.includes(node.operator);\n }\n\n if (node.type === AST_NODE_TYPES.LogicalExpression) {\n return node.operator === \"&&\" || node.operator === \"||\";\n }\n\n return false;\n};\n\nconst hasBooleanTypeAnnotation = (node: TSESTree.VariableDeclarator | TSESTree.Parameter): boolean => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n const { typeAnnotation } = node;\n if (typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSBooleanKeyword) {\n return true;\n }\n }\n\n if (\"id\" in node && node.id.type === AST_NODE_TYPES.Identifier) {\n const { typeAnnotation } = node.id;\n if (typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSBooleanKeyword) {\n return true;\n }\n }\n\n return false;\n};\n\nconst booleanNamingPrefix = createRule({\n name: \"boolean-naming-prefix\",\n meta: {\n type: \"suggestion\",\n docs: {\n description:\n \"Enforce boolean variables and parameters to have a prefix like is, has, should, can, did, will for better readability\",\n },\n messages: {\n missingPrefix:\n \"Boolean variable '{{name}}' should have a prefix like is, has, should, can, did, or will. Example: 'is{{suggestedName}}' or 'has{{suggestedName}}'.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const checkBooleanNaming = (name: string, node: TSESTree.Node) => {\n if (startsWithBooleanPrefix(name)) {\n return;\n }\n\n const suggestedName = name.charAt(0).toUpperCase() + name.slice(1);\n\n context.report({\n node,\n messageId: \"missingPrefix\",\n data: { name, suggestedName },\n });\n };\n\n return {\n VariableDeclarator(node) {\n if (node.id.type !== AST_NODE_TYPES.Identifier) {\n return;\n }\n\n const { name } = node.id;\n\n if (hasBooleanTypeAnnotation(node)) {\n checkBooleanNaming(name, node.id);\n return;\n }\n\n if (node.init && isBooleanExpression(node.init)) {\n checkBooleanNaming(name, node.id);\n }\n },\n FunctionDeclaration(node) {\n node.params.forEach((param) => {\n if (param.type === AST_NODE_TYPES.Identifier && hasBooleanTypeAnnotation(param)) {\n checkBooleanNaming(param.name, param);\n }\n\n if (param.type === AST_NODE_TYPES.AssignmentPattern) {\n if (param.left.type === AST_NODE_TYPES.Identifier && param.right && isBooleanLiteral(param.right)) {\n checkBooleanNaming(param.left.name, param.left);\n }\n }\n });\n },\n FunctionExpression(node) {\n node.params.forEach((param) => {\n if (param.type === AST_NODE_TYPES.Identifier && hasBooleanTypeAnnotation(param)) {\n checkBooleanNaming(param.name, param);\n }\n\n if (param.type === AST_NODE_TYPES.AssignmentPattern) {\n if (param.left.type === AST_NODE_TYPES.Identifier && param.right && isBooleanLiteral(param.right)) {\n checkBooleanNaming(param.left.name, param.left);\n }\n }\n });\n },\n ArrowFunctionExpression(node) {\n node.params.forEach((param) => {\n if (param.type === AST_NODE_TYPES.Identifier && hasBooleanTypeAnnotation(param)) {\n checkBooleanNaming(param.name, param);\n }\n\n if (param.type === AST_NODE_TYPES.AssignmentPattern) {\n if (param.left.type === AST_NODE_TYPES.Identifier && param.right && isBooleanLiteral(param.right)) {\n checkBooleanNaming(param.left.name, param.left);\n }\n }\n });\n },\n };\n },\n});\n\nexport default booleanNamingPrefix;\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.replaceAll(\"-\", \"_\").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 { 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst enforceSortedDestructuring = createRule({\n name: \"enforce-sorted-destructuring\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce alphabetical sorting of destructured properties with defaults first\",\n },\n schema: [],\n messages: {\n unsortedDestructuring:\n \"Destructured properties should be sorted alphabetically. Properties with defaults should come first, sorted by type (string, number, boolean, object) then alphabetically.\",\n },\n },\n defaultOptions: [],\n create(context) {\n function getPropertyName(property: TSESTree.Property | TSESTree.RestElement): string | null {\n if (property.type === AST_NODE_TYPES.RestElement) {\n return null;\n }\n\n if (property.key.type === AST_NODE_TYPES.Identifier) {\n return property.key.name;\n }\n\n return null;\n }\n\n function hasDefaultValue(property: TSESTree.Property): boolean {\n return property.value.type === AST_NODE_TYPES.AssignmentPattern && Boolean(property.value.right);\n }\n\n function getDefaultValueType(property: TSESTree.Property): string {\n if (!hasDefaultValue(property)) {\n return \"none\";\n }\n\n const assignmentPattern = property.value as TSESTree.AssignmentPattern;\n const { right } = assignmentPattern;\n\n if (!right) {\n return \"none\";\n }\n\n switch (right.type) {\n case AST_NODE_TYPES.Literal:\n if (typeof right.value === \"string\") {\n return \"string\";\n }\n if (typeof right.value === \"number\") {\n return \"number\";\n }\n if (typeof right.value === \"boolean\") {\n return \"boolean\";\n }\n return \"other\";\n case AST_NODE_TYPES.TemplateLiteral:\n return \"string\";\n case AST_NODE_TYPES.ObjectExpression:\n case AST_NODE_TYPES.ArrayExpression:\n return \"object\";\n default:\n return \"other\";\n }\n }\n\n function getTypeSortOrder(type: string): number {\n const order: Record<string, number> = {\n string: 0,\n number: 1,\n boolean: 2,\n object: 3,\n other: 4,\n none: 5,\n };\n return order[type] ?? 5;\n }\n\n function checkVariableDeclarator(node: TSESTree.VariableDeclarator) {\n if (node.id.type !== AST_NODE_TYPES.ObjectPattern) {\n return;\n }\n\n const { properties } = node.id;\n\n if (properties.length < 2) {\n return;\n }\n\n const propertyInfo = properties\n .map((prop) => {\n if (prop.type === AST_NODE_TYPES.RestElement) {\n return null;\n }\n return {\n property: prop,\n name: getPropertyName(prop),\n hasDefault: hasDefaultValue(prop),\n defaultType: getDefaultValueType(prop),\n };\n })\n .filter((info): info is NonNullable<typeof info> => info !== null && info.name !== null);\n\n const sorted = [...propertyInfo].sort((a, b) => {\n if (a.hasDefault && !b.hasDefault) {\n return -1;\n }\n if (!a.hasDefault && b.hasDefault) {\n return 1;\n }\n\n if (a.hasDefault && b.hasDefault) {\n const typeComparison = getTypeSortOrder(a.defaultType) - getTypeSortOrder(b.defaultType);\n if (typeComparison !== 0) {\n return typeComparison;\n }\n }\n\n return a.name!.localeCompare(b.name!);\n });\n\n const isSorted = propertyInfo.every((info, index) => info.name === sorted[index].name);\n\n if (!isSorted) {\n context.report({\n node: node.id,\n messageId: \"unsortedDestructuring\",\n });\n }\n }\n\n return {\n VariableDeclarator: checkVariableDeclarator,\n };\n },\n});\n\nexport default enforceSortedDestructuring;\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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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 { ESLintUtils, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst noDirectDate = createRule({\n name: \"no-direct-date\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow direct usage of Date constructor and methods to enforce centralized date utilities\",\n },\n messages: {\n noNewDate: \"Avoid using 'new Date()'. Use a centralized date utility like dayjs instead.\",\n noDateNow: \"Avoid using 'Date.now()'. Use a centralized date utility like dayjs instead.\",\n noDateParse: \"Avoid using 'Date.parse()'. Use a centralized date utility like dayjs instead.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n NewExpression(node) {\n if (node.callee.type === AST_NODE_TYPES.Identifier && node.callee.name === \"Date\") {\n context.report({\n node,\n messageId: \"noNewDate\",\n });\n }\n },\n CallExpression(node) {\n if (\n node.callee.type === AST_NODE_TYPES.MemberExpression &&\n node.callee.object.type === AST_NODE_TYPES.Identifier &&\n node.callee.object.name === \"Date\" &&\n node.callee.property.type === AST_NODE_TYPES.Identifier\n ) {\n const methodName = node.callee.property.name;\n\n if (methodName === \"now\") {\n context.report({\n node,\n messageId: \"noDateNow\",\n });\n }\n\n if (methodName === \"parse\") {\n context.report({\n node,\n messageId: \"noDateParse\",\n });\n }\n }\n },\n };\n },\n});\n\nexport default noDirectDate;\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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst jsxNoVariableInCallback = createRule({\n name: \"jsx-no-variable-in-callback\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow variable declarations inside callback functions within JSX\",\n },\n schema: [],\n messages: {\n noVariableInCallback:\n \"Variable declarations should not be inside callback functions within JSX. Extract the logic to a separate function outside the JSX.\",\n },\n },\n defaultOptions: [],\n create(context) {\n function isInsideJSX(node: TSESTree.Node): boolean {\n let current = node.parent;\n while (current) {\n if (current.type === AST_NODE_TYPES.JSXElement || current.type === AST_NODE_TYPES.JSXFragment) {\n return true;\n }\n current = current.parent;\n }\n return false;\n }\n\n function isCallbackInJSX(node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression): boolean {\n if (!node.parent) {\n return false;\n }\n\n if (!isInsideJSX(node)) {\n return false;\n }\n\n if (\n node.parent.type === AST_NODE_TYPES.CallExpression ||\n node.parent.type === AST_NODE_TYPES.JSXExpressionContainer\n ) {\n return true;\n }\n\n if (node.parent.type === AST_NODE_TYPES.ArrayExpression && node.parent.parent) {\n if (\n node.parent.parent.type === AST_NODE_TYPES.CallExpression ||\n node.parent.parent.type === AST_NODE_TYPES.JSXExpressionContainer\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n function checkFunctionBody(node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression) {\n if (!isCallbackInJSX(node)) {\n return;\n }\n\n const { body } = node;\n\n if (body.type !== AST_NODE_TYPES.BlockStatement) {\n return;\n }\n\n body.body.forEach((statement) => {\n if (statement.type === AST_NODE_TYPES.VariableDeclaration) {\n context.report({\n node: statement,\n messageId: \"noVariableInCallback\",\n });\n }\n });\n }\n\n return {\n ArrowFunctionExpression: checkFunctionBody,\n FunctionExpression: checkFunctionBody,\n };\n },\n});\n\nexport default jsxNoVariableInCallback;\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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\ntype FunctionNode = TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression;\n\nconst isReactComponent = (node: FunctionNode): boolean => {\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n const { parent } = node;\n if (parent?.type === AST_NODE_TYPES.VariableDeclarator) {\n const { id } = parent;\n if (id.type === AST_NODE_TYPES.Identifier) {\n return /^[A-Z]/.test(id.name);\n }\n }\n }\n\n if (node.type === AST_NODE_TYPES.FunctionDeclaration && node.id) {\n return /^[A-Z]/.test(node.id.name);\n }\n\n return false;\n};\n\nconst isCallbackFunction = (node: FunctionNode): boolean => {\n if (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n return false;\n }\n\n const { parent } = node;\n\n if (!parent) {\n return false;\n }\n\n if (\n parent.type === AST_NODE_TYPES.CallExpression &&\n parent.arguments.includes(node as TSESTree.CallExpressionArgument)\n ) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.Property) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.ArrayExpression) {\n return true;\n }\n\n return false;\n};\n\nconst getFunctionName = (node: FunctionNode): string | null => {\n if (node.type === AST_NODE_TYPES.FunctionDeclaration && node.id) {\n return node.id.name;\n }\n\n if (node.type === AST_NODE_TYPES.FunctionExpression && node.id) {\n return node.id.name;\n }\n\n if (\n (node.type === AST_NODE_TYPES.ArrowFunctionExpression || node.type === AST_NODE_TYPES.FunctionExpression) &&\n node.parent?.type === AST_NODE_TYPES.VariableDeclarator &&\n node.parent.id.type === AST_NODE_TYPES.Identifier\n ) {\n return node.parent.id.name;\n }\n\n return null;\n};\n\nconst requireExplicitReturnType = createRule({\n name: \"require-explicit-return-type\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Require explicit return types on functions for better code documentation and type safety\",\n },\n messages: {\n missingReturnType:\n \"Function '{{name}}' is missing an explicit return type. Add a return type annotation for better documentation.\",\n missingReturnTypeAnonymous:\n \"Function is missing an explicit return type. Add a return type annotation for better documentation.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const checkFunction = (node: FunctionNode) => {\n if (node.returnType) {\n return;\n }\n\n if (isCallbackFunction(node)) {\n return;\n }\n\n if (isReactComponent(node)) {\n return;\n }\n\n const functionName = getFunctionName(node);\n\n if (functionName) {\n context.report({\n node,\n messageId: \"missingReturnType\",\n data: { name: functionName },\n });\n } else {\n context.report({\n node,\n messageId: \"missingReturnTypeAnonymous\",\n });\n }\n };\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n };\n },\n});\n\nexport default requireExplicitReturnType;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport { getFileExtension } from \"../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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst jsxNoNonComponentFunction = createRule({\n name: \"jsx-no-non-component-function\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow non-component functions defined at top level in .tsx and .jsx files\",\n },\n schema: [],\n messages: {\n noTopLevelFunction:\n \"Non-component functions should not be defined at top level in .tsx/.jsx files. Either move it inside the component or extract it to a separate file.\",\n },\n },\n defaultOptions: [],\n create(context) {\n const { filename } = context;\n const extension = getFileExtension(filename);\n\n if (extension !== \"tsx\" && extension !== \"jsx\") {\n return {};\n }\n\n function isReactComponent(node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration): boolean {\n const functionName = node.type === AST_NODE_TYPES.FunctionDeclaration && node.id ? node.id.name : null;\n\n if (functionName && /^[A-Z]/.test(functionName)) {\n return true;\n }\n\n if (node.returnType?.typeAnnotation) {\n const returnTypeNode = node.returnType.typeAnnotation;\n if (\n returnTypeNode.type === AST_NODE_TYPES.TSTypeReference &&\n returnTypeNode.typeName.type === AST_NODE_TYPES.Identifier\n ) {\n const typeName = returnTypeNode.typeName.name;\n if (typeName === \"JSX\" || typeName === \"ReactElement\" || typeName === \"ReactNode\") {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function checkTopLevelFunction(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration,\n declaratorNode?: TSESTree.VariableDeclarator,\n ) {\n if (isReactComponent(node)) {\n return;\n }\n\n const { parent } = node;\n if (!parent) {\n return;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExportDefaultDeclaration ||\n parent.type === AST_NODE_TYPES.ExportNamedDeclaration\n ) {\n return;\n }\n\n if (declaratorNode?.parent?.parent?.type === AST_NODE_TYPES.ExportNamedDeclaration) {\n return;\n }\n\n if (declaratorNode?.id.type === AST_NODE_TYPES.Identifier) {\n const varName = declaratorNode.id.name;\n if (/^[A-Z]/.test(varName)) {\n return;\n }\n }\n\n context.report({\n node: declaratorNode || node,\n messageId: \"noTopLevelFunction\",\n });\n }\n\n return {\n \"Program > VariableDeclaration > VariableDeclarator > ArrowFunctionExpression\": function checkArrowFunction(\n node: TSESTree.ArrowFunctionExpression,\n ) {\n const declarator = node.parent as TSESTree.VariableDeclarator;\n checkTopLevelFunction(node, declarator);\n },\n \"Program > FunctionDeclaration\": function checkFunctionDeclaration(node: TSESTree.FunctionDeclaration) {\n checkTopLevelFunction(node);\n },\n };\n },\n});\n\nexport default jsxNoNonComponentFunction;\n","import { basename, extname } from \"node:path\";\n\nimport { AST_NODE_TYPES, type TSESTree } from \"@typescript-eslint/utils\";\n\ntype FunctionNode = TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression;\n\nexport const getFunctionParams = (node: FunctionNode) => node.params;\n\nexport const hasMultipleParams = (node: FunctionNode) => node.params.length > 1;\n\nexport const isDestructuredParam = (param: TSESTree.Parameter) =>\n param.type === AST_NODE_TYPES.ObjectPattern || param.type === AST_NODE_TYPES.ArrayPattern;\n\nexport const hasNonDestructuredParams = (node: FunctionNode) =>\n node.params.some(\n (param: TSESTree.Parameter) => !isDestructuredParam(param) && param.type !== AST_NODE_TYPES.RestElement,\n );\n\nexport const getFileExtension = (filename: string) => extname(filename).slice(1);\n\nexport const getBaseName = (filename: string) => basename(filename, extname(filename));\n\nexport const isJsFile = (filename: string) => {\n const ext = getFileExtension(filename);\n return ext === \"js\" || ext === \"ts\";\n};\n\nexport const isJsxFile = (filename: string) => {\n const ext = getFileExtension(filename);\n return ext === \"jsx\" || ext === \"tsx\";\n};\n\nexport const isConfigFile = (filename: string) => {\n const baseName = getBaseName(filename);\n return (\n /\\.(config|rc|setup|spec|test)$/.test(baseName) ||\n /\\.(config|rc|setup|spec|test)\\./.test(filename) ||\n /^\\.(eslintrc|babelrc|prettierrc)/.test(filename)\n );\n};\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.replaceAll(\"-\", \"_\").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 { ESLintUtils, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst ALLOWED_IN_FOR_LOOPS = new Set([\"i\", \"j\", \"k\", \"n\"]);\nconst ALLOWED_UNDERSCORE = \"_\";\n\nconst isForLoopInit = (node: TSESTree.Node): boolean => {\n let current: TSESTree.Node | undefined = node;\n\n while (current) {\n const parentNode: TSESTree.Node | undefined = current.parent;\n\n if (!parentNode) {\n return false;\n }\n\n if (parentNode.type === AST_NODE_TYPES.ForStatement) {\n const { init } = parentNode;\n if (init && init === current) {\n return true;\n }\n }\n\n current = parentNode;\n }\n\n return false;\n};\n\nconst isAllowedInContext = (name: string, node: TSESTree.Node): boolean => {\n if (name === ALLOWED_UNDERSCORE) {\n return true;\n }\n\n if (ALLOWED_IN_FOR_LOOPS.has(name) && isForLoopInit(node)) {\n return true;\n }\n\n return false;\n};\n\nconst noSingleCharVariables = createRule({\n name: \"no-single-char-variables\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow single character variable and parameter names for better code readability\",\n },\n messages: {\n noSingleChar:\n \"Avoid single character variable name '{{name}}'. Use a descriptive name that clearly indicates the purpose.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const checkIdentifier = (node: TSESTree.Identifier, declarationNode: TSESTree.Node) => {\n const { name } = node;\n\n if (name.length !== 1) {\n return;\n }\n\n if (isAllowedInContext(name, declarationNode)) {\n return;\n }\n\n context.report({\n node,\n messageId: \"noSingleChar\",\n data: { name },\n });\n };\n\n const checkPattern = (pattern: TSESTree.Node, declarationNode: TSESTree.Node) => {\n if (pattern.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern, declarationNode);\n } else if (pattern.type === AST_NODE_TYPES.ObjectPattern) {\n pattern.properties.forEach((prop) => {\n if (prop.type === AST_NODE_TYPES.Property && prop.value.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(prop.value, declarationNode);\n } else if (prop.type === AST_NODE_TYPES.RestElement && prop.argument.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(prop.argument, declarationNode);\n }\n });\n } else if (pattern.type === AST_NODE_TYPES.ArrayPattern) {\n pattern.elements.forEach((element) => {\n if (element?.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(element, declarationNode);\n } else if (\n element?.type === AST_NODE_TYPES.RestElement &&\n element.argument.type === AST_NODE_TYPES.Identifier\n ) {\n checkIdentifier(element.argument, declarationNode);\n }\n });\n } else if (pattern.type === AST_NODE_TYPES.AssignmentPattern && pattern.left.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern.left, declarationNode);\n } else if (pattern.type === AST_NODE_TYPES.RestElement && pattern.argument.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern.argument, declarationNode);\n }\n };\n\n return {\n VariableDeclarator(node) {\n checkPattern(node.id, node);\n },\n FunctionDeclaration(node) {\n if (node.id) {\n checkIdentifier(node.id, node);\n }\n node.params.forEach((param) => checkPattern(param, node));\n },\n FunctionExpression(node) {\n if (node.id) {\n checkIdentifier(node.id, node);\n }\n node.params.forEach((param) => checkPattern(param, node));\n },\n ArrowFunctionExpression(node) {\n node.params.forEach((param) => checkPattern(param, node));\n },\n CatchClause(node) {\n if (node.param) {\n checkPattern(node.param, node);\n }\n },\n };\n },\n});\n\nexport default noSingleCharVariables;\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.replaceAll(\"-\", \"_\").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 { ESLintUtils, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst isTsFile = (filename: string): boolean => filename.endsWith(\".ts\") && !filename.endsWith(\".d.ts\");\n\nconst isCallbackContext = (node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression): boolean => {\n const { parent } = node;\n\n if (!parent) {\n return false;\n }\n\n if (parent.type === AST_NODE_TYPES.CallExpression && parent.arguments.includes(node)) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.NewExpression && parent.arguments.includes(node as TSESTree.Expression)) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.ReturnStatement) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.Property) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.ArrayExpression) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.ConditionalExpression) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.LogicalExpression) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.AssignmentExpression && parent.left !== node) {\n return true;\n }\n\n return false;\n};\n\nconst preferFunctionDeclaration = createRule({\n name: \"prefer-function-declaration\",\n meta: {\n type: \"suggestion\",\n docs: {\n description:\n \"Enforce function declarations over arrow functions assigned to variables in .ts files for better readability and hoisting\",\n },\n messages: {\n preferDeclaration:\n \"Use function declaration instead of arrow function. Replace 'const {{name}} = () => ...' with 'function {{name}}() ...'\",\n preferDeclarationExpr:\n \"Use function declaration instead of function expression. Replace 'const {{name}} = function() ...' with 'function {{name}}() ...'\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const { filename } = context;\n\n if (!isTsFile(filename)) {\n return {};\n }\n\n return {\n VariableDeclarator(node) {\n if (node.id.type !== AST_NODE_TYPES.Identifier) {\n return;\n }\n\n const { init } = node;\n\n if (!init) {\n return;\n }\n\n if (init.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (isCallbackContext(init)) {\n return;\n }\n\n context.report({\n node: init,\n messageId: \"preferDeclaration\",\n data: { name: node.id.name },\n });\n }\n\n if (init.type === AST_NODE_TYPES.FunctionExpression) {\n if (isCallbackContext(init)) {\n return;\n }\n\n context.report({\n node: init,\n messageId: \"preferDeclarationExpr\",\n data: { name: node.id.name },\n });\n }\n },\n };\n },\n});\n\nexport default preferFunctionDeclaration;\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.replaceAll(\"-\", \"_\").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 isInTypeContext(node: TSESTree.Node | undefined): boolean {\n let current = node;\n while (current) {\n switch (current.type) {\n case AST_NODE_TYPES.TSTypeReference:\n case AST_NODE_TYPES.TSTypeAnnotation:\n case AST_NODE_TYPES.TSTypeParameterInstantiation:\n case AST_NODE_TYPES.TSInterfaceHeritage:\n case AST_NODE_TYPES.TSClassImplements:\n case AST_NODE_TYPES.TSTypeQuery:\n case AST_NODE_TYPES.TSTypeAssertion:\n case AST_NODE_TYPES.TSAsExpression:\n case AST_NODE_TYPES.TSSatisfiesExpression:\n case AST_NODE_TYPES.TSTypeAliasDeclaration:\n case AST_NODE_TYPES.TSInterfaceDeclaration:\n case AST_NODE_TYPES.TSTypeParameter:\n case AST_NODE_TYPES.TSQualifiedName:\n return true;\n\n case AST_NODE_TYPES.MemberExpression:\n case AST_NODE_TYPES.Identifier:\n current = current.parent;\n break;\n\n default:\n return false;\n }\n }\n return false;\n }\n\n function isUsedAsValue(localName: string, scope: ReturnType<typeof context.sourceCode.getScope>): boolean {\n const variable = scope.set.get(localName);\n if (!variable) {\n return false;\n }\n\n if (variable.references.length === 0) {\n return false;\n }\n\n return variable.references.some((ref) => {\n if (ref.isWrite()) {\n return false;\n }\n\n const { identifier } = ref;\n const { parent } = identifier;\n\n if (!parent) {\n return false;\n }\n\n if (isInTypeContext(parent)) {\n return false;\n }\n\n switch (parent.type) {\n case AST_NODE_TYPES.CallExpression:\n case AST_NODE_TYPES.NewExpression:\n case AST_NODE_TYPES.JSXOpeningElement:\n case AST_NODE_TYPES.JSXClosingElement:\n case AST_NODE_TYPES.MemberExpression:\n case AST_NODE_TYPES.VariableDeclarator:\n case AST_NODE_TYPES.TaggedTemplateExpression:\n case AST_NODE_TYPES.SpreadElement:\n case AST_NODE_TYPES.ExportSpecifier:\n case AST_NODE_TYPES.ArrayExpression:\n case AST_NODE_TYPES.ObjectExpression:\n case AST_NODE_TYPES.BinaryExpression:\n case AST_NODE_TYPES.LogicalExpression:\n case AST_NODE_TYPES.UnaryExpression:\n case AST_NODE_TYPES.ReturnStatement:\n case AST_NODE_TYPES.ArrowFunctionExpression:\n case AST_NODE_TYPES.ConditionalExpression:\n case AST_NODE_TYPES.AwaitExpression:\n case AST_NODE_TYPES.YieldExpression:\n case AST_NODE_TYPES.Property:\n return true;\n\n default:\n return false;\n }\n });\n }\n\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 scope = context.sourceCode.getScope(node);\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 localName = specifier.local.name;\n return !isUsedAsValue(localName, scope);\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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst preferJSXTemplateLiterals = createRule({\n name: \"prefer-jsx-template-literals\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce using template literals instead of mixing text and JSX expressions\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n preferTemplate: \"Use template literal instead of mixing text with JSX expressions\",\n },\n },\n defaultOptions: [],\n create(context) {\n function handleTextBeforeExpression(textNode: TSESTree.JSXText, exprNode: TSESTree.JSXExpressionContainer) {\n const textValue = textNode.value;\n const trimmedText = textValue.trim();\n\n if (!trimmedText) {\n return;\n }\n\n const hasTextContent = trimmedText.length > 0 && textValue !== trimmedText;\n const hasNoTrailingSpace = trimmedText.length > 0 && /\\S$/.test(textValue);\n\n if (!hasTextContent && !hasNoTrailingSpace) {\n return;\n }\n\n context.report({\n node: textNode,\n messageId: \"preferTemplate\",\n fix(fixer) {\n const textPart = textValue.trimEnd();\n const exprText = context.sourceCode.getText(exprNode.expression);\n const templateLiteral = `{\\`${textPart}\\${${exprText}}\\`}`;\n\n return [fixer.replaceText(textNode, templateLiteral), fixer.remove(exprNode)];\n },\n });\n }\n\n function handleExpressionBeforeText(exprNode: TSESTree.JSXExpressionContainer, textNode: TSESTree.JSXText) {\n const textValue = textNode.value;\n const trimmedText = textValue.trim();\n\n if (!trimmedText) {\n return;\n }\n\n const startsWithNonWhitespace = /^\\S/.test(trimmedText);\n\n if (!startsWithNonWhitespace) {\n return;\n }\n\n context.report({\n node: textNode,\n messageId: \"preferTemplate\",\n fix(fixer) {\n const exprText = context.sourceCode.getText(exprNode.expression);\n const textPart = textValue.trim();\n const templateLiteral = `{\\`\\${${exprText}}${textPart}\\`}`;\n\n return [fixer.replaceText(exprNode, templateLiteral), fixer.remove(textNode)];\n },\n });\n }\n\n function checkJSXElement(node: TSESTree.JSXElement) {\n const { children } = node;\n\n if (children.length < 2) {\n return;\n }\n\n for (let i = 0; i < children.length - 1; i += 1) {\n const child = children[i];\n const nextChild = children[i + 1];\n\n if (!child || !nextChild) {\n return;\n }\n\n if (child.type === AST_NODE_TYPES.JSXText && nextChild.type === AST_NODE_TYPES.JSXExpressionContainer) {\n handleTextBeforeExpression(child, nextChild);\n } else if (child.type === AST_NODE_TYPES.JSXExpressionContainer && nextChild.type === AST_NODE_TYPES.JSXText) {\n handleExpressionBeforeText(child, nextChild);\n }\n }\n }\n\n return {\n JSXElement: checkJSXElement,\n };\n },\n});\n\nexport default preferJSXTemplateLiterals;\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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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","import packageJson from \"../package.json\" assert { type: \"json\" };\n\nimport booleanNamingPrefix from \"./rules/boolean-naming-prefix\";\nimport enforceReadonlyComponentProps from \"./rules/enforce-readonly-component-props\";\nimport enforceSortedDestructuring from \"./rules/enforce-sorted-destructuring\";\nimport fileKebabCase from \"./rules/file-kebab-case\";\nimport jsxPascalCase from \"./rules/jsx-pascal-case\";\nimport noDirectDate from \"./rules/no-direct-date\";\nimport jsxNoVariableInCallback from \"./rules/jsx-no-variable-in-callback\";\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 requireExplicitReturnType from \"./rules/require-explicit-return-type\";\nimport jsxNoNonComponentFunction from \"./rules/jsx-no-non-component-function\";\nimport noLogicInParams from \"./rules/no-logic-in-params\";\nimport noSingleCharVariables from \"./rules/no-single-char-variables\";\nimport preferDestructuringParams from \"./rules/prefer-destructuring-params\";\nimport preferFunctionDeclaration from \"./rules/prefer-function-declaration\";\nimport preferImportType from \"./rules/prefer-import-type\";\nimport preferInterfaceOverInlineTypes from \"./rules/prefer-interface-over-inline-types\";\nimport preferJSXTemplateLiterals from \"./rules/prefer-jsx-template-literals\";\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 \"boolean-naming-prefix\": booleanNamingPrefix,\n \"enforce-readonly-component-props\": enforceReadonlyComponentProps,\n \"enforce-sorted-destructuring\": enforceSortedDestructuring,\n \"file-kebab-case\": fileKebabCase,\n \"jsx-pascal-case\": jsxPascalCase,\n \"jsx-no-non-component-function\": jsxNoNonComponentFunction,\n \"jsx-no-variable-in-callback\": jsxNoVariableInCallback,\n \"md-filename-case-restriction\": mdFilenameCaseRestriction,\n \"no-complex-inline-return\": noComplexInlineReturn,\n \"no-direct-date\": noDirectDate,\n \"no-emoji\": noEmoji,\n \"no-env-fallback\": noEnvFallback,\n \"require-explicit-return-type\": requireExplicitReturnType,\n \"no-logic-in-params\": noLogicInParams,\n \"no-single-char-variables\": noSingleCharVariables,\n \"prefer-destructuring-params\": preferDestructuringParams,\n \"prefer-function-declaration\": preferFunctionDeclaration,\n \"prefer-import-type\": preferImportType,\n \"prefer-interface-over-inline-types\": preferInterfaceOverInlineTypes,\n \"prefer-jsx-template-literals\": preferJSXTemplateLiterals,\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/boolean-naming-prefix\": \"warn\",\n \"nextfriday/no-emoji\": \"warn\",\n \"nextfriday/enforce-sorted-destructuring\": \"warn\",\n \"nextfriday/file-kebab-case\": \"warn\",\n \"nextfriday/md-filename-case-restriction\": \"warn\",\n \"nextfriday/prefer-destructuring-params\": \"warn\",\n \"nextfriday/prefer-function-declaration\": \"warn\",\n \"nextfriday/require-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-direct-date\": \"warn\",\n \"nextfriday/no-logic-in-params\": \"warn\",\n \"nextfriday/no-env-fallback\": \"warn\",\n \"nextfriday/no-single-char-variables\": \"warn\",\n} as const;\n\nconst baseRecommendedRules = {\n \"nextfriday/boolean-naming-prefix\": \"error\",\n \"nextfriday/no-emoji\": \"error\",\n \"nextfriday/enforce-sorted-destructuring\": \"error\",\n \"nextfriday/file-kebab-case\": \"error\",\n \"nextfriday/md-filename-case-restriction\": \"error\",\n \"nextfriday/prefer-destructuring-params\": \"error\",\n \"nextfriday/prefer-function-declaration\": \"error\",\n \"nextfriday/require-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-direct-date\": \"error\",\n \"nextfriday/no-logic-in-params\": \"error\",\n \"nextfriday/no-env-fallback\": \"error\",\n \"nextfriday/no-single-char-variables\": \"error\",\n} as const;\n\nconst jsxRules = {\n \"nextfriday/jsx-pascal-case\": \"warn\",\n \"nextfriday/jsx-no-non-component-function\": \"warn\",\n \"nextfriday/jsx-no-variable-in-callback\": \"warn\",\n \"nextfriday/prefer-interface-over-inline-types\": \"warn\",\n \"nextfriday/prefer-jsx-template-literals\": \"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/jsx-no-non-component-function\": \"error\",\n \"nextfriday/jsx-no-variable-in-callback\": \"error\",\n \"nextfriday/prefer-interface-over-inline-types\": \"error\",\n \"nextfriday/prefer-jsx-template-literals\": \"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"],"mappings":"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","names":["AST_NODE_TYPES","ESLintUtils","createRule","isReactComponent","AST_NODE_TYPES","ESLintUtils","createRule","ESLintUtils","createRule","basename","path","ESLintUtils","createRule","basename","ESLintUtils","AST_NODE_TYPES","createRule","AST_NODE_TYPES","ESLintUtils","createRule","path","ESLintUtils","createRule","basename","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","createRule","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","AST_NODE_TYPES","createRule","AST_NODE_TYPES","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","isReactComponent","AST_NODE_TYPES","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","AST_NODE_TYPES","createRule","AST_NODE_TYPES","ESLintUtils","createRule","isCallbackFunction","ESLintUtils","AST_NODE_TYPES","createRule","AST_NODE_TYPES","ESLintUtils","createRule","AST_NODE_TYPES","ESLintUtils","createRule","isReactComponent","AST_NODE_TYPES","ESLintUtils","createRule","AST_NODE_TYPES","ESLintUtils","createRule","AST_NODE_TYPES","ESLintUtils","createRule","AST_NODE_TYPES","ESLintUtils","createRule","isReactComponent"]}
1
+ {"version":3,"sources":["../package.json","../src/rules/boolean-naming-prefix.ts","../src/rules/enforce-readonly-component-props.ts","../src/rules/enforce-sorted-destructuring.ts","../src/rules/file-kebab-case.ts","../src/rules/jsx-pascal-case.ts","../src/rules/no-direct-date.ts","../src/rules/jsx-no-variable-in-callback.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/require-explicit-return-type.ts","../src/rules/jsx-no-non-component-function.ts","../src/utils.ts","../src/rules/no-logic-in-params.ts","../src/rules/no-lazy-identifiers.ts","../src/rules/no-single-char-variables.ts","../src/rules/prefer-destructuring-params.ts","../src/rules/prefer-function-declaration.ts","../src/rules/prefer-import-type.ts","../src/rules/prefer-interface-over-inline-types.ts","../src/rules/prefer-jsx-template-literals.ts","../src/rules/prefer-named-param-types.ts","../src/rules/prefer-react-import-types.ts","../src/rules/react-props-destructure.ts","../src/index.ts"],"sourcesContent":["{\n \"name\": \"eslint-plugin-nextfriday\",\n \"version\": \"1.8.0\",\n \"description\": \"A comprehensive ESLint plugin providing custom rules and configurations for Next Friday development workflows.\",\n \"keywords\": [\n \"eslint\",\n \"eslintplugin\",\n \"eslint-plugin\",\n \"nextfriday\",\n \"next-friday\",\n \"linting\",\n \"code-quality\",\n \"javascript\",\n \"typescript\",\n \"development-tools\"\n ],\n \"homepage\": \"https://github.com/next-friday/eslint-plugin-nextfriday\",\n \"bugs\": {\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/next-friday/eslint-plugin-nextfriday.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Next Friday <nextfriday.developer@gmail.com>\",\n \"contributors\": [\n \"@joetakara\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/index.d.ts\",\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"lib/index.js\",\n \"types\": \"lib/index.d.ts\",\n \"files\": [\n \"LICENSE\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"docs\",\n \"lib\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"changeset:publish\": \"npm publish --provenance --access public\",\n \"changeset:version\": \"changeset version\",\n \"clear\": \"rm -rf lib node_modules/.cache .eslintcache\",\n \"eslint\": \"eslint src --ext .js,.ts --fix\",\n \"eslint:check\": \"eslint src --ext .js,.ts\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"pnpm 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 { ESLintUtils, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst BOOLEAN_PREFIXES = [\"is\", \"has\", \"should\", \"can\", \"did\", \"will\", \"was\", \"are\", \"does\", \"had\"];\n\nconst startsWithBooleanPrefix = (name: string): boolean => {\n const lowerName = name.toLowerCase();\n\n return BOOLEAN_PREFIXES.some((prefix) => {\n if (!lowerName.startsWith(prefix)) {\n return false;\n }\n\n if (name.length === prefix.length) {\n return true;\n }\n\n const nextChar = name.charAt(prefix.length);\n return nextChar === nextChar.toUpperCase();\n });\n};\n\nconst isBooleanLiteral = (node: TSESTree.Expression): boolean =>\n node.type === AST_NODE_TYPES.Literal && typeof node.value === \"boolean\";\n\nconst isBooleanExpression = (node: TSESTree.Expression): boolean => {\n if (isBooleanLiteral(node)) {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.UnaryExpression && node.operator === \"!\") {\n return true;\n }\n\n if (node.type === AST_NODE_TYPES.BinaryExpression) {\n const comparisonOperators = [\"===\", \"!==\", \"==\", \"!=\", \"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"];\n return comparisonOperators.includes(node.operator);\n }\n\n if (node.type === AST_NODE_TYPES.LogicalExpression) {\n return node.operator === \"&&\" || node.operator === \"||\";\n }\n\n return false;\n};\n\nconst hasBooleanTypeAnnotation = (node: TSESTree.VariableDeclarator | TSESTree.Parameter): boolean => {\n if (node.type === AST_NODE_TYPES.Identifier) {\n const { typeAnnotation } = node;\n if (typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSBooleanKeyword) {\n return true;\n }\n }\n\n if (\"id\" in node && node.id.type === AST_NODE_TYPES.Identifier) {\n const { typeAnnotation } = node.id;\n if (typeAnnotation?.typeAnnotation.type === AST_NODE_TYPES.TSBooleanKeyword) {\n return true;\n }\n }\n\n return false;\n};\n\nconst booleanNamingPrefix = createRule({\n name: \"boolean-naming-prefix\",\n meta: {\n type: \"suggestion\",\n docs: {\n description:\n \"Enforce boolean variables and parameters to have a prefix like is, has, should, can, did, will for better readability\",\n },\n messages: {\n missingPrefix:\n \"Boolean variable '{{name}}' should have a prefix like is, has, should, can, did, or will. Example: 'is{{suggestedName}}' or 'has{{suggestedName}}'.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const checkBooleanNaming = (name: string, node: TSESTree.Node) => {\n if (startsWithBooleanPrefix(name)) {\n return;\n }\n\n const suggestedName = name.charAt(0).toUpperCase() + name.slice(1);\n\n context.report({\n node,\n messageId: \"missingPrefix\",\n data: { name, suggestedName },\n });\n };\n\n return {\n VariableDeclarator(node) {\n if (node.id.type !== AST_NODE_TYPES.Identifier) {\n return;\n }\n\n const { name } = node.id;\n\n if (hasBooleanTypeAnnotation(node)) {\n checkBooleanNaming(name, node.id);\n return;\n }\n\n if (node.init && isBooleanExpression(node.init)) {\n checkBooleanNaming(name, node.id);\n }\n },\n FunctionDeclaration(node) {\n node.params.forEach((param) => {\n if (param.type === AST_NODE_TYPES.Identifier && hasBooleanTypeAnnotation(param)) {\n checkBooleanNaming(param.name, param);\n }\n\n if (param.type === AST_NODE_TYPES.AssignmentPattern) {\n if (param.left.type === AST_NODE_TYPES.Identifier && param.right && isBooleanLiteral(param.right)) {\n checkBooleanNaming(param.left.name, param.left);\n }\n }\n });\n },\n FunctionExpression(node) {\n node.params.forEach((param) => {\n if (param.type === AST_NODE_TYPES.Identifier && hasBooleanTypeAnnotation(param)) {\n checkBooleanNaming(param.name, param);\n }\n\n if (param.type === AST_NODE_TYPES.AssignmentPattern) {\n if (param.left.type === AST_NODE_TYPES.Identifier && param.right && isBooleanLiteral(param.right)) {\n checkBooleanNaming(param.left.name, param.left);\n }\n }\n });\n },\n ArrowFunctionExpression(node) {\n node.params.forEach((param) => {\n if (param.type === AST_NODE_TYPES.Identifier && hasBooleanTypeAnnotation(param)) {\n checkBooleanNaming(param.name, param);\n }\n\n if (param.type === AST_NODE_TYPES.AssignmentPattern) {\n if (param.left.type === AST_NODE_TYPES.Identifier && param.right && isBooleanLiteral(param.right)) {\n checkBooleanNaming(param.left.name, param.left);\n }\n }\n });\n },\n };\n },\n});\n\nexport default booleanNamingPrefix;\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.replaceAll(\"-\", \"_\").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 { 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst enforceSortedDestructuring = createRule({\n name: \"enforce-sorted-destructuring\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce alphabetical sorting of destructured properties with defaults first\",\n },\n schema: [],\n messages: {\n unsortedDestructuring:\n \"Destructured properties should be sorted alphabetically. Properties with defaults should come first, sorted by type (string, number, boolean, object) then alphabetically.\",\n },\n },\n defaultOptions: [],\n create(context) {\n function getPropertyName(property: TSESTree.Property | TSESTree.RestElement): string | null {\n if (property.type === AST_NODE_TYPES.RestElement) {\n return null;\n }\n\n if (property.key.type === AST_NODE_TYPES.Identifier) {\n return property.key.name;\n }\n\n return null;\n }\n\n function hasDefaultValue(property: TSESTree.Property): boolean {\n return property.value.type === AST_NODE_TYPES.AssignmentPattern && Boolean(property.value.right);\n }\n\n function getDefaultValueType(property: TSESTree.Property): string {\n if (!hasDefaultValue(property)) {\n return \"none\";\n }\n\n const assignmentPattern = property.value as TSESTree.AssignmentPattern;\n const { right } = assignmentPattern;\n\n if (!right) {\n return \"none\";\n }\n\n switch (right.type) {\n case AST_NODE_TYPES.Literal:\n if (typeof right.value === \"string\") {\n return \"string\";\n }\n if (typeof right.value === \"number\") {\n return \"number\";\n }\n if (typeof right.value === \"boolean\") {\n return \"boolean\";\n }\n return \"other\";\n case AST_NODE_TYPES.TemplateLiteral:\n return \"string\";\n case AST_NODE_TYPES.ObjectExpression:\n case AST_NODE_TYPES.ArrayExpression:\n return \"object\";\n default:\n return \"other\";\n }\n }\n\n function getTypeSortOrder(type: string): number {\n const order: Record<string, number> = {\n string: 0,\n number: 1,\n boolean: 2,\n object: 3,\n other: 4,\n none: 5,\n };\n return order[type] ?? 5;\n }\n\n function checkVariableDeclarator(node: TSESTree.VariableDeclarator) {\n if (node.id.type !== AST_NODE_TYPES.ObjectPattern) {\n return;\n }\n\n const { properties } = node.id;\n\n if (properties.length < 2) {\n return;\n }\n\n const propertyInfo = properties\n .map((prop) => {\n if (prop.type === AST_NODE_TYPES.RestElement) {\n return null;\n }\n return {\n property: prop,\n name: getPropertyName(prop),\n hasDefault: hasDefaultValue(prop),\n defaultType: getDefaultValueType(prop),\n };\n })\n .filter((info): info is NonNullable<typeof info> => info !== null && info.name !== null);\n\n const sorted = [...propertyInfo].sort((a, b) => {\n if (a.hasDefault && !b.hasDefault) {\n return -1;\n }\n if (!a.hasDefault && b.hasDefault) {\n return 1;\n }\n\n if (a.hasDefault && b.hasDefault) {\n const typeComparison = getTypeSortOrder(a.defaultType) - getTypeSortOrder(b.defaultType);\n if (typeComparison !== 0) {\n return typeComparison;\n }\n }\n\n return a.name!.localeCompare(b.name!);\n });\n\n const isSorted = propertyInfo.every((info, index) => info.name === sorted[index].name);\n\n if (!isSorted) {\n context.report({\n node: node.id,\n messageId: \"unsortedDestructuring\",\n });\n }\n }\n\n return {\n VariableDeclarator: checkVariableDeclarator,\n };\n },\n});\n\nexport default enforceSortedDestructuring;\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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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 { ESLintUtils, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst noDirectDate = createRule({\n name: \"no-direct-date\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow direct usage of Date constructor and methods to enforce centralized date utilities\",\n },\n messages: {\n noNewDate: \"Avoid using 'new Date()'. Use a centralized date utility like dayjs instead.\",\n noDateNow: \"Avoid using 'Date.now()'. Use a centralized date utility like dayjs instead.\",\n noDateParse: \"Avoid using 'Date.parse()'. Use a centralized date utility like dayjs instead.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n NewExpression(node) {\n if (node.callee.type === AST_NODE_TYPES.Identifier && node.callee.name === \"Date\") {\n context.report({\n node,\n messageId: \"noNewDate\",\n });\n }\n },\n CallExpression(node) {\n if (\n node.callee.type === AST_NODE_TYPES.MemberExpression &&\n node.callee.object.type === AST_NODE_TYPES.Identifier &&\n node.callee.object.name === \"Date\" &&\n node.callee.property.type === AST_NODE_TYPES.Identifier\n ) {\n const methodName = node.callee.property.name;\n\n if (methodName === \"now\") {\n context.report({\n node,\n messageId: \"noDateNow\",\n });\n }\n\n if (methodName === \"parse\") {\n context.report({\n node,\n messageId: \"noDateParse\",\n });\n }\n }\n },\n };\n },\n});\n\nexport default noDirectDate;\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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst jsxNoVariableInCallback = createRule({\n name: \"jsx-no-variable-in-callback\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow variable declarations inside callback functions within JSX\",\n },\n schema: [],\n messages: {\n noVariableInCallback:\n \"Variable declarations should not be inside callback functions within JSX. Extract the logic to a separate function outside the JSX.\",\n },\n },\n defaultOptions: [],\n create(context) {\n function isInsideJSX(node: TSESTree.Node): boolean {\n let current = node.parent;\n while (current) {\n if (current.type === AST_NODE_TYPES.JSXElement || current.type === AST_NODE_TYPES.JSXFragment) {\n return true;\n }\n current = current.parent;\n }\n return false;\n }\n\n function isCallbackInJSX(node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression): boolean {\n if (!node.parent) {\n return false;\n }\n\n if (!isInsideJSX(node)) {\n return false;\n }\n\n if (\n node.parent.type === AST_NODE_TYPES.CallExpression ||\n node.parent.type === AST_NODE_TYPES.JSXExpressionContainer\n ) {\n return true;\n }\n\n if (node.parent.type === AST_NODE_TYPES.ArrayExpression && node.parent.parent) {\n if (\n node.parent.parent.type === AST_NODE_TYPES.CallExpression ||\n node.parent.parent.type === AST_NODE_TYPES.JSXExpressionContainer\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n function checkFunctionBody(node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression) {\n if (!isCallbackInJSX(node)) {\n return;\n }\n\n const { body } = node;\n\n if (body.type !== AST_NODE_TYPES.BlockStatement) {\n return;\n }\n\n body.body.forEach((statement) => {\n if (statement.type === AST_NODE_TYPES.VariableDeclaration) {\n context.report({\n node: statement,\n messageId: \"noVariableInCallback\",\n });\n }\n });\n }\n\n return {\n ArrowFunctionExpression: checkFunctionBody,\n FunctionExpression: checkFunctionBody,\n };\n },\n});\n\nexport default jsxNoVariableInCallback;\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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\ntype FunctionNode = TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression;\n\nconst isReactComponent = (node: FunctionNode): boolean => {\n if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n const { parent } = node;\n if (parent?.type === AST_NODE_TYPES.VariableDeclarator) {\n const { id } = parent;\n if (id.type === AST_NODE_TYPES.Identifier) {\n return /^[A-Z]/.test(id.name);\n }\n }\n }\n\n if (node.type === AST_NODE_TYPES.FunctionDeclaration && node.id) {\n return /^[A-Z]/.test(node.id.name);\n }\n\n return false;\n};\n\nconst isCallbackFunction = (node: FunctionNode): boolean => {\n if (node.type === AST_NODE_TYPES.FunctionDeclaration) {\n return false;\n }\n\n const { parent } = node;\n\n if (!parent) {\n return false;\n }\n\n if (\n parent.type === AST_NODE_TYPES.CallExpression &&\n parent.arguments.includes(node as TSESTree.CallExpressionArgument)\n ) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.Property) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.ArrayExpression) {\n return true;\n }\n\n return false;\n};\n\nconst getFunctionName = (node: FunctionNode): string | null => {\n if (node.type === AST_NODE_TYPES.FunctionDeclaration && node.id) {\n return node.id.name;\n }\n\n if (node.type === AST_NODE_TYPES.FunctionExpression && node.id) {\n return node.id.name;\n }\n\n if (\n (node.type === AST_NODE_TYPES.ArrowFunctionExpression || node.type === AST_NODE_TYPES.FunctionExpression) &&\n node.parent?.type === AST_NODE_TYPES.VariableDeclarator &&\n node.parent.id.type === AST_NODE_TYPES.Identifier\n ) {\n return node.parent.id.name;\n }\n\n return null;\n};\n\nconst requireExplicitReturnType = createRule({\n name: \"require-explicit-return-type\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Require explicit return types on functions for better code documentation and type safety\",\n },\n messages: {\n missingReturnType:\n \"Function '{{name}}' is missing an explicit return type. Add a return type annotation for better documentation.\",\n missingReturnTypeAnonymous:\n \"Function is missing an explicit return type. Add a return type annotation for better documentation.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const checkFunction = (node: FunctionNode) => {\n if (node.returnType) {\n return;\n }\n\n if (isCallbackFunction(node)) {\n return;\n }\n\n if (isReactComponent(node)) {\n return;\n }\n\n const functionName = getFunctionName(node);\n\n if (functionName) {\n context.report({\n node,\n messageId: \"missingReturnType\",\n data: { name: functionName },\n });\n } else {\n context.report({\n node,\n messageId: \"missingReturnTypeAnonymous\",\n });\n }\n };\n\n return {\n FunctionDeclaration: checkFunction,\n FunctionExpression: checkFunction,\n ArrowFunctionExpression: checkFunction,\n };\n },\n});\n\nexport default requireExplicitReturnType;\n","import { AST_NODE_TYPES, ESLintUtils } from \"@typescript-eslint/utils\";\n\nimport { getFileExtension } from \"../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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst jsxNoNonComponentFunction = createRule({\n name: \"jsx-no-non-component-function\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow non-component functions defined at top level in .tsx and .jsx files\",\n },\n schema: [],\n messages: {\n noTopLevelFunction:\n \"Non-component functions should not be defined at top level in .tsx/.jsx files. Either move it inside the component or extract it to a separate file.\",\n },\n },\n defaultOptions: [],\n create(context) {\n const { filename } = context;\n const extension = getFileExtension(filename);\n\n if (extension !== \"tsx\" && extension !== \"jsx\") {\n return {};\n }\n\n function isReactComponent(node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration): boolean {\n const functionName = node.type === AST_NODE_TYPES.FunctionDeclaration && node.id ? node.id.name : null;\n\n if (functionName && /^[A-Z]/.test(functionName)) {\n return true;\n }\n\n if (node.returnType?.typeAnnotation) {\n const returnTypeNode = node.returnType.typeAnnotation;\n if (\n returnTypeNode.type === AST_NODE_TYPES.TSTypeReference &&\n returnTypeNode.typeName.type === AST_NODE_TYPES.Identifier\n ) {\n const typeName = returnTypeNode.typeName.name;\n if (typeName === \"JSX\" || typeName === \"ReactElement\" || typeName === \"ReactNode\") {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function checkTopLevelFunction(\n node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration,\n declaratorNode?: TSESTree.VariableDeclarator,\n ) {\n if (isReactComponent(node)) {\n return;\n }\n\n const { parent } = node;\n if (!parent) {\n return;\n }\n\n if (\n parent.type === AST_NODE_TYPES.ExportDefaultDeclaration ||\n parent.type === AST_NODE_TYPES.ExportNamedDeclaration\n ) {\n return;\n }\n\n if (declaratorNode?.parent?.parent?.type === AST_NODE_TYPES.ExportNamedDeclaration) {\n return;\n }\n\n if (declaratorNode?.id.type === AST_NODE_TYPES.Identifier) {\n const varName = declaratorNode.id.name;\n if (/^[A-Z]/.test(varName)) {\n return;\n }\n }\n\n context.report({\n node: declaratorNode || node,\n messageId: \"noTopLevelFunction\",\n });\n }\n\n return {\n \"Program > VariableDeclaration > VariableDeclarator > ArrowFunctionExpression\": function checkArrowFunction(\n node: TSESTree.ArrowFunctionExpression,\n ) {\n const declarator = node.parent as TSESTree.VariableDeclarator;\n checkTopLevelFunction(node, declarator);\n },\n \"Program > FunctionDeclaration\": function checkFunctionDeclaration(node: TSESTree.FunctionDeclaration) {\n checkTopLevelFunction(node);\n },\n };\n },\n});\n\nexport default jsxNoNonComponentFunction;\n","import { basename, extname } from \"node:path\";\n\nimport { AST_NODE_TYPES, type TSESTree } from \"@typescript-eslint/utils\";\n\ntype FunctionNode = TSESTree.FunctionDeclaration | TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression;\n\nexport const getFunctionParams = (node: FunctionNode) => node.params;\n\nexport const hasMultipleParams = (node: FunctionNode) => node.params.length > 1;\n\nexport const isDestructuredParam = (param: TSESTree.Parameter) =>\n param.type === AST_NODE_TYPES.ObjectPattern || param.type === AST_NODE_TYPES.ArrayPattern;\n\nexport const hasNonDestructuredParams = (node: FunctionNode) =>\n node.params.some(\n (param: TSESTree.Parameter) => !isDestructuredParam(param) && param.type !== AST_NODE_TYPES.RestElement,\n );\n\nexport const getFileExtension = (filename: string) => extname(filename).slice(1);\n\nexport const getBaseName = (filename: string) => basename(filename, extname(filename));\n\nexport const isJsFile = (filename: string) => {\n const ext = getFileExtension(filename);\n return ext === \"js\" || ext === \"ts\";\n};\n\nexport const isJsxFile = (filename: string) => {\n const ext = getFileExtension(filename);\n return ext === \"jsx\" || ext === \"tsx\";\n};\n\nexport const isConfigFile = (filename: string) => {\n const baseName = getBaseName(filename);\n return (\n /\\.(config|rc|setup|spec|test)$/.test(baseName) ||\n /\\.(config|rc|setup|spec|test)\\./.test(filename) ||\n /^\\.(eslintrc|babelrc|prettierrc)/.test(filename)\n );\n};\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.replaceAll(\"-\", \"_\").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 { ESLintUtils, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst KEYBOARD_ROWS = [\"qwertyuiop\", \"asdfghjkl\", \"zxcvbnm\", \"1234567890\"];\n\nconst MIN_LENGTH = 3;\nconst MIN_SEQUENCE_LENGTH = 4;\n\nconst hasRepeatedChars = (name: string): boolean => {\n const lowerName = name.toLowerCase();\n return lowerName.split(\"\").some((char, index) => {\n if (index > lowerName.length - 3) {\n return false;\n }\n return char === lowerName[index + 1] && char === lowerName[index + 2];\n });\n};\n\nconst hasKeyboardSequence = (name: string): boolean => {\n const lowerName = name.toLowerCase();\n if (lowerName.length < MIN_SEQUENCE_LENGTH) {\n return false;\n }\n\n return KEYBOARD_ROWS.some((row) => {\n const positions = Array.from({ length: row.length - MIN_SEQUENCE_LENGTH + 1 }, (_, i) => i);\n return positions.some((start) => {\n const sequence = row.slice(start, start + MIN_SEQUENCE_LENGTH);\n const reverseSequence = sequence.split(\"\").reverse().join(\"\");\n return lowerName.includes(sequence) || lowerName.includes(reverseSequence);\n });\n });\n};\n\nconst isLazyIdentifier = (name: string): boolean => {\n if (name.length < MIN_LENGTH) {\n return false;\n }\n\n if (name.startsWith(\"_\")) {\n return false;\n }\n\n if (hasRepeatedChars(name)) {\n return true;\n }\n\n if (hasKeyboardSequence(name)) {\n return true;\n }\n\n return false;\n};\n\nconst noLazyIdentifiers = createRule({\n name: \"no-lazy-identifiers\",\n meta: {\n type: \"problem\",\n docs: {\n description: \"Disallow lazy, meaningless variable names that hurt code readability\",\n },\n messages: {\n noLazyIdentifier: \"Avoid lazy identifier '{{name}}'. Use a descriptive name that clearly indicates the purpose.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const checkIdentifier = (node: TSESTree.Identifier) => {\n const { name } = node;\n\n if (!isLazyIdentifier(name)) {\n return;\n }\n\n context.report({\n node,\n messageId: \"noLazyIdentifier\",\n data: { name },\n });\n };\n\n const checkPattern = (pattern: TSESTree.Node) => {\n if (pattern.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern);\n } else if (pattern.type === AST_NODE_TYPES.ObjectPattern) {\n pattern.properties.forEach((prop) => {\n if (prop.type === AST_NODE_TYPES.Property && prop.value.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(prop.value);\n } else if (prop.type === AST_NODE_TYPES.RestElement && prop.argument.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(prop.argument);\n }\n });\n } else if (pattern.type === AST_NODE_TYPES.ArrayPattern) {\n pattern.elements.forEach((element) => {\n if (element?.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(element);\n } else if (\n element?.type === AST_NODE_TYPES.RestElement &&\n element.argument.type === AST_NODE_TYPES.Identifier\n ) {\n checkIdentifier(element.argument);\n }\n });\n } else if (pattern.type === AST_NODE_TYPES.AssignmentPattern && pattern.left.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern.left);\n } else if (pattern.type === AST_NODE_TYPES.RestElement && pattern.argument.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern.argument);\n }\n };\n\n return {\n VariableDeclarator(node) {\n checkPattern(node.id);\n },\n FunctionDeclaration(node) {\n if (node.id) {\n checkIdentifier(node.id);\n }\n node.params.forEach((param) => checkPattern(param));\n },\n FunctionExpression(node) {\n if (node.id) {\n checkIdentifier(node.id);\n }\n node.params.forEach((param) => checkPattern(param));\n },\n ArrowFunctionExpression(node) {\n node.params.forEach((param) => checkPattern(param));\n },\n CatchClause(node) {\n if (node.param) {\n checkPattern(node.param);\n }\n },\n ClassDeclaration(node) {\n if (node.id) {\n checkIdentifier(node.id);\n }\n },\n TSTypeAliasDeclaration(node) {\n checkIdentifier(node.id);\n },\n TSInterfaceDeclaration(node) {\n checkIdentifier(node.id);\n },\n };\n },\n});\n\nexport default noLazyIdentifiers;\n","import { ESLintUtils, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst ALLOWED_IN_FOR_LOOPS = new Set([\"i\", \"j\", \"k\", \"n\"]);\nconst ALLOWED_UNDERSCORE = \"_\";\n\nconst isForLoopInit = (node: TSESTree.Node): boolean => {\n let current: TSESTree.Node | undefined = node;\n\n while (current) {\n const parentNode: TSESTree.Node | undefined = current.parent;\n\n if (!parentNode) {\n return false;\n }\n\n if (parentNode.type === AST_NODE_TYPES.ForStatement) {\n const { init } = parentNode;\n if (init && init === current) {\n return true;\n }\n }\n\n current = parentNode;\n }\n\n return false;\n};\n\nconst isAllowedInContext = (name: string, node: TSESTree.Node): boolean => {\n if (name === ALLOWED_UNDERSCORE) {\n return true;\n }\n\n if (ALLOWED_IN_FOR_LOOPS.has(name) && isForLoopInit(node)) {\n return true;\n }\n\n return false;\n};\n\nconst noSingleCharVariables = createRule({\n name: \"no-single-char-variables\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Disallow single character variable and parameter names for better code readability\",\n },\n messages: {\n noSingleChar:\n \"Avoid single character variable name '{{name}}'. Use a descriptive name that clearly indicates the purpose.\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const checkIdentifier = (node: TSESTree.Identifier, declarationNode: TSESTree.Node) => {\n const { name } = node;\n\n if (name.length !== 1) {\n return;\n }\n\n if (isAllowedInContext(name, declarationNode)) {\n return;\n }\n\n context.report({\n node,\n messageId: \"noSingleChar\",\n data: { name },\n });\n };\n\n const checkPattern = (pattern: TSESTree.Node, declarationNode: TSESTree.Node) => {\n if (pattern.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern, declarationNode);\n } else if (pattern.type === AST_NODE_TYPES.ObjectPattern) {\n pattern.properties.forEach((prop) => {\n if (prop.type === AST_NODE_TYPES.Property && prop.value.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(prop.value, declarationNode);\n } else if (prop.type === AST_NODE_TYPES.RestElement && prop.argument.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(prop.argument, declarationNode);\n }\n });\n } else if (pattern.type === AST_NODE_TYPES.ArrayPattern) {\n pattern.elements.forEach((element) => {\n if (element?.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(element, declarationNode);\n } else if (\n element?.type === AST_NODE_TYPES.RestElement &&\n element.argument.type === AST_NODE_TYPES.Identifier\n ) {\n checkIdentifier(element.argument, declarationNode);\n }\n });\n } else if (pattern.type === AST_NODE_TYPES.AssignmentPattern && pattern.left.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern.left, declarationNode);\n } else if (pattern.type === AST_NODE_TYPES.RestElement && pattern.argument.type === AST_NODE_TYPES.Identifier) {\n checkIdentifier(pattern.argument, declarationNode);\n }\n };\n\n return {\n VariableDeclarator(node) {\n checkPattern(node.id, node);\n },\n FunctionDeclaration(node) {\n if (node.id) {\n checkIdentifier(node.id, node);\n }\n node.params.forEach((param) => checkPattern(param, node));\n },\n FunctionExpression(node) {\n if (node.id) {\n checkIdentifier(node.id, node);\n }\n node.params.forEach((param) => checkPattern(param, node));\n },\n ArrowFunctionExpression(node) {\n node.params.forEach((param) => checkPattern(param, node));\n },\n CatchClause(node) {\n if (node.param) {\n checkPattern(node.param, node);\n }\n },\n };\n },\n});\n\nexport default noSingleCharVariables;\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.replaceAll(\"-\", \"_\").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 { ESLintUtils, AST_NODE_TYPES, 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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst isTsFile = (filename: string): boolean => filename.endsWith(\".ts\") && !filename.endsWith(\".d.ts\");\n\nconst isCallbackContext = (node: TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression): boolean => {\n const { parent } = node;\n\n if (!parent) {\n return false;\n }\n\n if (parent.type === AST_NODE_TYPES.CallExpression && parent.arguments.includes(node)) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.NewExpression && parent.arguments.includes(node as TSESTree.Expression)) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.ReturnStatement) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.Property) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.ArrayExpression) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.ConditionalExpression) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.LogicalExpression) {\n return true;\n }\n\n if (parent.type === AST_NODE_TYPES.AssignmentExpression && parent.left !== node) {\n return true;\n }\n\n return false;\n};\n\nconst preferFunctionDeclaration = createRule({\n name: \"prefer-function-declaration\",\n meta: {\n type: \"suggestion\",\n docs: {\n description:\n \"Enforce function declarations over arrow functions assigned to variables in .ts files for better readability and hoisting\",\n },\n messages: {\n preferDeclaration:\n \"Use function declaration instead of arrow function. Replace 'const {{name}} = () => ...' with 'function {{name}}() ...'\",\n preferDeclarationExpr:\n \"Use function declaration instead of function expression. Replace 'const {{name}} = function() ...' with 'function {{name}}() ...'\",\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const { filename } = context;\n\n if (!isTsFile(filename)) {\n return {};\n }\n\n return {\n VariableDeclarator(node) {\n if (node.id.type !== AST_NODE_TYPES.Identifier) {\n return;\n }\n\n const { init } = node;\n\n if (!init) {\n return;\n }\n\n if (init.type === AST_NODE_TYPES.ArrowFunctionExpression) {\n if (isCallbackContext(init)) {\n return;\n }\n\n context.report({\n node: init,\n messageId: \"preferDeclaration\",\n data: { name: node.id.name },\n });\n }\n\n if (init.type === AST_NODE_TYPES.FunctionExpression) {\n if (isCallbackContext(init)) {\n return;\n }\n\n context.report({\n node: init,\n messageId: \"preferDeclarationExpr\",\n data: { name: node.id.name },\n });\n }\n },\n };\n },\n});\n\nexport default preferFunctionDeclaration;\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.replaceAll(\"-\", \"_\").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 isInTypeContext(node: TSESTree.Node | undefined): boolean {\n let current = node;\n while (current) {\n switch (current.type) {\n case AST_NODE_TYPES.TSTypeReference:\n case AST_NODE_TYPES.TSTypeAnnotation:\n case AST_NODE_TYPES.TSTypeParameterInstantiation:\n case AST_NODE_TYPES.TSInterfaceHeritage:\n case AST_NODE_TYPES.TSClassImplements:\n case AST_NODE_TYPES.TSTypeQuery:\n case AST_NODE_TYPES.TSTypeAssertion:\n case AST_NODE_TYPES.TSAsExpression:\n case AST_NODE_TYPES.TSSatisfiesExpression:\n case AST_NODE_TYPES.TSTypeAliasDeclaration:\n case AST_NODE_TYPES.TSInterfaceDeclaration:\n case AST_NODE_TYPES.TSTypeParameter:\n case AST_NODE_TYPES.TSQualifiedName:\n return true;\n\n case AST_NODE_TYPES.MemberExpression:\n case AST_NODE_TYPES.Identifier:\n current = current.parent;\n break;\n\n default:\n return false;\n }\n }\n return false;\n }\n\n function isUsedAsValue(localName: string, scope: ReturnType<typeof context.sourceCode.getScope>): boolean {\n const variable = scope.set.get(localName);\n if (!variable) {\n return false;\n }\n\n if (variable.references.length === 0) {\n return false;\n }\n\n return variable.references.some((ref) => {\n if (ref.isWrite()) {\n return false;\n }\n\n const { identifier } = ref;\n const { parent } = identifier;\n\n if (!parent) {\n return false;\n }\n\n if (isInTypeContext(parent)) {\n return false;\n }\n\n switch (parent.type) {\n case AST_NODE_TYPES.CallExpression:\n case AST_NODE_TYPES.NewExpression:\n case AST_NODE_TYPES.JSXOpeningElement:\n case AST_NODE_TYPES.JSXClosingElement:\n case AST_NODE_TYPES.MemberExpression:\n case AST_NODE_TYPES.VariableDeclarator:\n case AST_NODE_TYPES.TaggedTemplateExpression:\n case AST_NODE_TYPES.SpreadElement:\n case AST_NODE_TYPES.ExportSpecifier:\n case AST_NODE_TYPES.ArrayExpression:\n case AST_NODE_TYPES.ObjectExpression:\n case AST_NODE_TYPES.BinaryExpression:\n case AST_NODE_TYPES.LogicalExpression:\n case AST_NODE_TYPES.UnaryExpression:\n case AST_NODE_TYPES.ReturnStatement:\n case AST_NODE_TYPES.ArrowFunctionExpression:\n case AST_NODE_TYPES.ConditionalExpression:\n case AST_NODE_TYPES.AwaitExpression:\n case AST_NODE_TYPES.YieldExpression:\n case AST_NODE_TYPES.Property:\n return true;\n\n default:\n return false;\n }\n });\n }\n\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 scope = context.sourceCode.getScope(node);\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 localName = specifier.local.name;\n return !isUsedAsValue(localName, scope);\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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").toUpperCase()}.md`,\n);\n\nconst preferJSXTemplateLiterals = createRule({\n name: \"prefer-jsx-template-literals\",\n meta: {\n type: \"suggestion\",\n docs: {\n description: \"Enforce using template literals instead of mixing text and JSX expressions\",\n },\n fixable: \"code\",\n schema: [],\n messages: {\n preferTemplate: \"Use template literal instead of mixing text with JSX expressions\",\n },\n },\n defaultOptions: [],\n create(context) {\n function handleTextBeforeExpression(textNode: TSESTree.JSXText, exprNode: TSESTree.JSXExpressionContainer) {\n const textValue = textNode.value;\n const trimmedText = textValue.trim();\n\n if (!trimmedText) {\n return;\n }\n\n const hasTextContent = trimmedText.length > 0 && textValue !== trimmedText;\n const hasNoTrailingSpace = trimmedText.length > 0 && /\\S$/.test(textValue);\n\n if (!hasTextContent && !hasNoTrailingSpace) {\n return;\n }\n\n context.report({\n node: textNode,\n messageId: \"preferTemplate\",\n fix(fixer) {\n const textPart = textValue.trimEnd();\n const exprText = context.sourceCode.getText(exprNode.expression);\n const templateLiteral = `{\\`${textPart}\\${${exprText}}\\`}`;\n\n return [fixer.replaceText(textNode, templateLiteral), fixer.remove(exprNode)];\n },\n });\n }\n\n function handleExpressionBeforeText(exprNode: TSESTree.JSXExpressionContainer, textNode: TSESTree.JSXText) {\n const textValue = textNode.value;\n const trimmedText = textValue.trim();\n\n if (!trimmedText) {\n return;\n }\n\n const startsWithNonWhitespace = /^\\S/.test(trimmedText);\n\n if (!startsWithNonWhitespace) {\n return;\n }\n\n context.report({\n node: textNode,\n messageId: \"preferTemplate\",\n fix(fixer) {\n const exprText = context.sourceCode.getText(exprNode.expression);\n const textPart = textValue.trim();\n const templateLiteral = `{\\`\\${${exprText}}${textPart}\\`}`;\n\n return [fixer.replaceText(exprNode, templateLiteral), fixer.remove(textNode)];\n },\n });\n }\n\n function checkJSXElement(node: TSESTree.JSXElement) {\n const { children } = node;\n\n if (children.length < 2) {\n return;\n }\n\n for (let i = 0; i < children.length - 1; i += 1) {\n const child = children[i];\n const nextChild = children[i + 1];\n\n if (!child || !nextChild) {\n return;\n }\n\n if (child.type === AST_NODE_TYPES.JSXText && nextChild.type === AST_NODE_TYPES.JSXExpressionContainer) {\n handleTextBeforeExpression(child, nextChild);\n } else if (child.type === AST_NODE_TYPES.JSXExpressionContainer && nextChild.type === AST_NODE_TYPES.JSXText) {\n handleExpressionBeforeText(child, nextChild);\n }\n }\n }\n\n return {\n JSXElement: checkJSXElement,\n };\n },\n});\n\nexport default preferJSXTemplateLiterals;\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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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.replaceAll(\"-\", \"_\").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","import packageJson from \"../package.json\" assert { type: \"json\" };\n\nimport booleanNamingPrefix from \"./rules/boolean-naming-prefix\";\nimport enforceReadonlyComponentProps from \"./rules/enforce-readonly-component-props\";\nimport enforceSortedDestructuring from \"./rules/enforce-sorted-destructuring\";\nimport fileKebabCase from \"./rules/file-kebab-case\";\nimport jsxPascalCase from \"./rules/jsx-pascal-case\";\nimport noDirectDate from \"./rules/no-direct-date\";\nimport jsxNoVariableInCallback from \"./rules/jsx-no-variable-in-callback\";\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 requireExplicitReturnType from \"./rules/require-explicit-return-type\";\nimport jsxNoNonComponentFunction from \"./rules/jsx-no-non-component-function\";\nimport noLogicInParams from \"./rules/no-logic-in-params\";\nimport noLazyIdentifiers from \"./rules/no-lazy-identifiers\";\nimport noSingleCharVariables from \"./rules/no-single-char-variables\";\nimport preferDestructuringParams from \"./rules/prefer-destructuring-params\";\nimport preferFunctionDeclaration from \"./rules/prefer-function-declaration\";\nimport preferImportType from \"./rules/prefer-import-type\";\nimport preferInterfaceOverInlineTypes from \"./rules/prefer-interface-over-inline-types\";\nimport preferJSXTemplateLiterals from \"./rules/prefer-jsx-template-literals\";\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 \"boolean-naming-prefix\": booleanNamingPrefix,\n \"enforce-readonly-component-props\": enforceReadonlyComponentProps,\n \"enforce-sorted-destructuring\": enforceSortedDestructuring,\n \"file-kebab-case\": fileKebabCase,\n \"jsx-pascal-case\": jsxPascalCase,\n \"jsx-no-non-component-function\": jsxNoNonComponentFunction,\n \"jsx-no-variable-in-callback\": jsxNoVariableInCallback,\n \"md-filename-case-restriction\": mdFilenameCaseRestriction,\n \"no-complex-inline-return\": noComplexInlineReturn,\n \"no-direct-date\": noDirectDate,\n \"no-emoji\": noEmoji,\n \"no-env-fallback\": noEnvFallback,\n \"require-explicit-return-type\": requireExplicitReturnType,\n \"no-lazy-identifiers\": noLazyIdentifiers,\n \"no-logic-in-params\": noLogicInParams,\n \"no-single-char-variables\": noSingleCharVariables,\n \"prefer-destructuring-params\": preferDestructuringParams,\n \"prefer-function-declaration\": preferFunctionDeclaration,\n \"prefer-import-type\": preferImportType,\n \"prefer-interface-over-inline-types\": preferInterfaceOverInlineTypes,\n \"prefer-jsx-template-literals\": preferJSXTemplateLiterals,\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/boolean-naming-prefix\": \"warn\",\n \"nextfriday/no-emoji\": \"warn\",\n \"nextfriday/enforce-sorted-destructuring\": \"warn\",\n \"nextfriday/file-kebab-case\": \"warn\",\n \"nextfriday/md-filename-case-restriction\": \"warn\",\n \"nextfriday/prefer-destructuring-params\": \"warn\",\n \"nextfriday/prefer-function-declaration\": \"warn\",\n \"nextfriday/require-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-direct-date\": \"warn\",\n \"nextfriday/no-logic-in-params\": \"warn\",\n \"nextfriday/no-env-fallback\": \"warn\",\n \"nextfriday/no-lazy-identifiers\": \"warn\",\n \"nextfriday/no-single-char-variables\": \"warn\",\n} as const;\n\nconst baseRecommendedRules = {\n \"nextfriday/boolean-naming-prefix\": \"error\",\n \"nextfriday/no-emoji\": \"error\",\n \"nextfriday/enforce-sorted-destructuring\": \"error\",\n \"nextfriday/file-kebab-case\": \"error\",\n \"nextfriday/md-filename-case-restriction\": \"error\",\n \"nextfriday/prefer-destructuring-params\": \"error\",\n \"nextfriday/prefer-function-declaration\": \"error\",\n \"nextfriday/require-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-direct-date\": \"error\",\n \"nextfriday/no-logic-in-params\": \"error\",\n \"nextfriday/no-env-fallback\": \"error\",\n \"nextfriday/no-lazy-identifiers\": \"error\",\n \"nextfriday/no-single-char-variables\": \"error\",\n} as const;\n\nconst jsxRules = {\n \"nextfriday/jsx-pascal-case\": \"warn\",\n \"nextfriday/jsx-no-non-component-function\": \"warn\",\n \"nextfriday/jsx-no-variable-in-callback\": \"warn\",\n \"nextfriday/prefer-interface-over-inline-types\": \"warn\",\n \"nextfriday/prefer-jsx-template-literals\": \"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/jsx-no-non-component-function\": \"error\",\n \"nextfriday/jsx-no-variable-in-callback\": \"error\",\n \"nextfriday/prefer-interface-over-inline-types\": \"error\",\n \"nextfriday/prefer-jsx-template-literals\": \"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"],"mappings":";AAAA;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,SAAS,aAAa,sBAAqC;AAE3D,IAAM,aAAa,YAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,mBAAmB,CAAC,MAAM,OAAO,UAAU,OAAO,OAAO,QAAQ,OAAO,OAAO,QAAQ,KAAK;AAElG,IAAM,0BAA0B,CAAC,SAA0B;AACzD,QAAM,YAAY,KAAK,YAAY;AAEnC,SAAO,iBAAiB,KAAK,CAAC,WAAW;AACvC,QAAI,CAAC,UAAU,WAAW,MAAM,GAAG;AACjC,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,WAAW,OAAO,QAAQ;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,KAAK,OAAO,OAAO,MAAM;AAC1C,WAAO,aAAa,SAAS,YAAY;AAAA,EAC3C,CAAC;AACH;AAEA,IAAM,mBAAmB,CAAC,SACxB,KAAK,SAAS,eAAe,WAAW,OAAO,KAAK,UAAU;AAEhE,IAAM,sBAAsB,CAAC,SAAuC;AAClE,MAAI,iBAAiB,IAAI,GAAG;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,SAAS,eAAe,mBAAmB,KAAK,aAAa,KAAK;AACzE,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,SAAS,eAAe,kBAAkB;AACjD,UAAM,sBAAsB,CAAC,OAAO,OAAO,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,MAAM,YAAY;AAC/F,WAAO,oBAAoB,SAAS,KAAK,QAAQ;AAAA,EACnD;AAEA,MAAI,KAAK,SAAS,eAAe,mBAAmB;AAClD,WAAO,KAAK,aAAa,QAAQ,KAAK,aAAa;AAAA,EACrD;AAEA,SAAO;AACT;AAEA,IAAM,2BAA2B,CAAC,SAAoE;AACpG,MAAI,KAAK,SAAS,eAAe,YAAY;AAC3C,UAAM,EAAE,eAAe,IAAI;AAC3B,QAAI,gBAAgB,eAAe,SAAS,eAAe,kBAAkB;AAC3E,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,QAAQ,QAAQ,KAAK,GAAG,SAAS,eAAe,YAAY;AAC9D,UAAM,EAAE,eAAe,IAAI,KAAK;AAChC,QAAI,gBAAgB,eAAe,SAAS,eAAe,kBAAkB;AAC3E,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,sBAAsB,WAAW;AAAA,EACrC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aACE;AAAA,IACJ;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,MAAc,SAAwB;AAChE,UAAI,wBAAwB,IAAI,GAAG;AACjC;AAAA,MACF;AAEA,YAAM,gBAAgB,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAEjE,cAAQ,OAAO;AAAA,QACb;AAAA,QACA,WAAW;AAAA,QACX,MAAM,EAAE,MAAM,cAAc;AAAA,MAC9B,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,mBAAmB,MAAM;AACvB,YAAI,KAAK,GAAG,SAAS,eAAe,YAAY;AAC9C;AAAA,QACF;AAEA,cAAM,EAAE,KAAK,IAAI,KAAK;AAEtB,YAAI,yBAAyB,IAAI,GAAG;AAClC,6BAAmB,MAAM,KAAK,EAAE;AAChC;AAAA,QACF;AAEA,YAAI,KAAK,QAAQ,oBAAoB,KAAK,IAAI,GAAG;AAC/C,6BAAmB,MAAM,KAAK,EAAE;AAAA,QAClC;AAAA,MACF;AAAA,MACA,oBAAoB,MAAM;AACxB,aAAK,OAAO,QAAQ,CAAC,UAAU;AAC7B,cAAI,MAAM,SAAS,eAAe,cAAc,yBAAyB,KAAK,GAAG;AAC/E,+BAAmB,MAAM,MAAM,KAAK;AAAA,UACtC;AAEA,cAAI,MAAM,SAAS,eAAe,mBAAmB;AACnD,gBAAI,MAAM,KAAK,SAAS,eAAe,cAAc,MAAM,SAAS,iBAAiB,MAAM,KAAK,GAAG;AACjG,iCAAmB,MAAM,KAAK,MAAM,MAAM,IAAI;AAAA,YAChD;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,mBAAmB,MAAM;AACvB,aAAK,OAAO,QAAQ,CAAC,UAAU;AAC7B,cAAI,MAAM,SAAS,eAAe,cAAc,yBAAyB,KAAK,GAAG;AAC/E,+BAAmB,MAAM,MAAM,KAAK;AAAA,UACtC;AAEA,cAAI,MAAM,SAAS,eAAe,mBAAmB;AACnD,gBAAI,MAAM,KAAK,SAAS,eAAe,cAAc,MAAM,SAAS,iBAAiB,MAAM,KAAK,GAAG;AACjG,iCAAmB,MAAM,KAAK,MAAM,MAAM,IAAI;AAAA,YAChD;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,wBAAwB,MAAM;AAC5B,aAAK,OAAO,QAAQ,CAAC,UAAU;AAC7B,cAAI,MAAM,SAAS,eAAe,cAAc,yBAAyB,KAAK,GAAG;AAC/E,+BAAmB,MAAM,MAAM,KAAK;AAAA,UACtC;AAEA,cAAI,MAAM,SAAS,eAAe,mBAAmB;AACnD,gBAAI,MAAM,KAAK,SAAS,eAAe,cAAc,MAAM,SAAS,iBAAiB,MAAM,KAAK,GAAG;AACjG,iCAAmB,MAAM,KAAK,MAAM,MAAM,IAAI;AAAA,YAChD;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,gCAAQ;;;AC9Jf,SAAS,kBAAAA,iBAAgB,eAAAC,oBAAmB;AAI5C,IAAMC,cAAaD,aAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,gCAAgCC,YAAW;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,SAASF,gBAAe,cACxC,KAAK,WAAW,SAASA,gBAAe,eACxC,KAAK,UAAU,SAASA,gBAAe,cACvC,KAAK,UAAU,SAASA,gBAAe;AAAA,IAE3C;AAEA,aAAS,gBAAgB,MAA2C;AAClE,aAAO,KAAK,MAAM,SAASA,gBAAe,cAAc,KAAK,MAAM,SAASA,gBAAe;AAAA,IAC7F;AAEA,aAAS,aAAa,OAAyC;AAC7D,aAAO,MAAM,KAAK,KAAK,CAAC,SAAS;AAC/B,YAAI,KAAK,SAASA,gBAAe,mBAAmB,KAAK,UAAU;AACjE,iBACE,KAAK,SAAS,SAASA,gBAAe,cACtC,KAAK,SAAS,SAASA,gBAAe,eACrC,KAAK,SAAS,SAASA,gBAAe,yBAAyB,oBAAoB,KAAK,QAAQ,KAChG,KAAK,SAAS,SAASA,gBAAe,qBAAqB,gBAAgB,KAAK,QAAQ;AAAA,QAE7F;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,aAASG,kBACP,MACS;AACT,UAAI,KAAK,SAASH,gBAAe,yBAAyB;AACxD,YAAI,KAAK,KAAK,SAASA,gBAAe,cAAc,KAAK,KAAK,SAASA,gBAAe,aAAa;AACjG,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,KAAK,SAASA,gBAAe,gBAAgB;AACpD,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF,WAAW,KAAK,SAASA,gBAAe,sBAAsB,KAAK,SAASA,gBAAe,qBAAqB;AAC9G,YAAI,KAAK,QAAQ,KAAK,KAAK,SAASA,gBAAe,gBAAgB;AACjE,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,YAAY,MAAkC;AACrD,aAAO,KAAK,SAASA,gBAAe;AAAA,IACtC;AAEA,aAAS,kBAAkB,MAAkC;AAC3D,UAAI,KAAK,SAASA,gBAAe,mBAAmB,KAAK,UAAU;AACjE,YAAI,KAAK,SAAS,SAASA,gBAAe,cAAc,KAAK,SAAS,SAAS,YAAY;AACzF,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,cACP,MACA;AACA,UAAI,CAACG,kBAAiB,IAAI,GAAG;AAC3B;AAAA,MACF;AACA,UAAI,KAAK,OAAO,WAAW,GAAG;AAC5B;AAAA,MACF;AACA,YAAM,QAAQ,KAAK,OAAO,CAAC;AAC3B,UAAI,MAAM,SAASH,gBAAe,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,SAAS,kBAAAI,iBAAgB,eAAAC,oBAAmB;AAI5C,IAAMC,cAAaD,aAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,6BAA6BC,YAAW;AAAA,EAC5C,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,uBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,aAAS,gBAAgB,UAAmE;AAC1F,UAAI,SAAS,SAASF,gBAAe,aAAa;AAChD,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,IAAI,SAASA,gBAAe,YAAY;AACnD,eAAO,SAAS,IAAI;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,gBAAgB,UAAsC;AAC7D,aAAO,SAAS,MAAM,SAASA,gBAAe,qBAAqB,QAAQ,SAAS,MAAM,KAAK;AAAA,IACjG;AAEA,aAAS,oBAAoB,UAAqC;AAChE,UAAI,CAAC,gBAAgB,QAAQ,GAAG;AAC9B,eAAO;AAAA,MACT;AAEA,YAAM,oBAAoB,SAAS;AACnC,YAAM,EAAE,MAAM,IAAI;AAElB,UAAI,CAAC,OAAO;AACV,eAAO;AAAA,MACT;AAEA,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAKA,gBAAe;AAClB,cAAI,OAAO,MAAM,UAAU,UAAU;AACnC,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,MAAM,UAAU,UAAU;AACnC,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,MAAM,UAAU,WAAW;AACpC,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT,KAAKA,gBAAe;AAClB,iBAAO;AAAA,QACT,KAAKA,gBAAe;AAAA,QACpB,KAAKA,gBAAe;AAClB,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAEA,aAAS,iBAAiB,MAAsB;AAC9C,YAAM,QAAgC;AAAA,QACpC,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,MACR;AACA,aAAO,MAAM,IAAI,KAAK;AAAA,IACxB;AAEA,aAAS,wBAAwB,MAAmC;AAClE,UAAI,KAAK,GAAG,SAASA,gBAAe,eAAe;AACjD;AAAA,MACF;AAEA,YAAM,EAAE,WAAW,IAAI,KAAK;AAE5B,UAAI,WAAW,SAAS,GAAG;AACzB;AAAA,MACF;AAEA,YAAM,eAAe,WAClB,IAAI,CAAC,SAAS;AACb,YAAI,KAAK,SAASA,gBAAe,aAAa;AAC5C,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,UACL,UAAU;AAAA,UACV,MAAM,gBAAgB,IAAI;AAAA,UAC1B,YAAY,gBAAgB,IAAI;AAAA,UAChC,aAAa,oBAAoB,IAAI;AAAA,QACvC;AAAA,MACF,CAAC,EACA,OAAO,CAAC,SAA2C,SAAS,QAAQ,KAAK,SAAS,IAAI;AAEzF,YAAM,SAAS,CAAC,GAAG,YAAY,EAAE,KAAK,CAAC,GAAG,MAAM;AAC9C,YAAI,EAAE,cAAc,CAAC,EAAE,YAAY;AACjC,iBAAO;AAAA,QACT;AACA,YAAI,CAAC,EAAE,cAAc,EAAE,YAAY;AACjC,iBAAO;AAAA,QACT;AAEA,YAAI,EAAE,cAAc,EAAE,YAAY;AAChC,gBAAM,iBAAiB,iBAAiB,EAAE,WAAW,IAAI,iBAAiB,EAAE,WAAW;AACvF,cAAI,mBAAmB,GAAG;AACxB,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO,EAAE,KAAM,cAAc,EAAE,IAAK;AAAA,MACtC,CAAC;AAED,YAAM,WAAW,aAAa,MAAM,CAAC,MAAM,UAAU,KAAK,SAAS,OAAO,KAAK,EAAE,IAAI;AAErF,UAAI,CAAC,UAAU;AACb,gBAAQ,OAAO;AAAA,UACb,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,oBAAoB;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,IAAO,uCAAQ;;;ACjJf,OAAO,UAAU;AAEjB,SAAS,eAAAG,oBAAmB;AAE5B,IAAMC,cAAaD,aAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;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,gBAAgBC,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,KAAK,QAAQ,QAAQ;AAEjC,YAAI,QAAQ,SAAS,QAAQ,OAAO;AAClC;AAAA,QACF;AAEA,cAAMC,YAAW,KAAK,SAAS,UAAU,GAAG;AAE5C,YAAI,CAAC,YAAYA,SAAQ,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,OAAOC,WAAU;AAEjB,SAAS,eAAAC,oBAAmB;AAE5B,IAAMC,cAAaD,aAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,eAAe,CAAC,QAAgB,sBAAsB,KAAK,GAAG,KAAK,CAAC,WAAW,KAAK,GAAG;AAE7F,IAAM,gBAAgBC,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,MAAMF,MAAK,QAAQ,QAAQ;AAEjC,YAAI,QAAQ,UAAU,QAAQ,QAAQ;AACpC;AAAA,QACF;AAEA,cAAMG,YAAWH,MAAK,SAAS,UAAU,GAAG;AAE5C,YAAI,CAAC,aAAaG,SAAQ,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,SAAS,eAAAC,cAAa,kBAAAC,uBAAsB;AAE5C,IAAMC,cAAaF,aAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,eAAeE,YAAW;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,MACX,WAAW;AAAA,MACX,aAAa;AAAA,IACf;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,WAAO;AAAA,MACL,cAAc,MAAM;AAClB,YAAI,KAAK,OAAO,SAASD,gBAAe,cAAc,KAAK,OAAO,SAAS,QAAQ;AACjF,kBAAQ,OAAO;AAAA,YACb;AAAA,YACA,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,eAAe,MAAM;AACnB,YACE,KAAK,OAAO,SAASA,gBAAe,oBACpC,KAAK,OAAO,OAAO,SAASA,gBAAe,cAC3C,KAAK,OAAO,OAAO,SAAS,UAC5B,KAAK,OAAO,SAAS,SAASA,gBAAe,YAC7C;AACA,gBAAM,aAAa,KAAK,OAAO,SAAS;AAExC,cAAI,eAAe,OAAO;AACxB,oBAAQ,OAAO;AAAA,cACb;AAAA,cACA,WAAW;AAAA,YACb,CAAC;AAAA,UACH;AAEA,cAAI,eAAe,SAAS;AAC1B,oBAAQ,OAAO;AAAA,cACb;AAAA,cACA,WAAW;AAAA,YACb,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,yBAAQ;;;AC5Df,SAAS,kBAAAE,iBAAgB,eAAAC,oBAAmB;AAI5C,IAAMC,cAAaD,aAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,0BAA0BC,YAAW;AAAA,EACzC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,sBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,aAAS,YAAY,MAA8B;AACjD,UAAI,UAAU,KAAK;AACnB,aAAO,SAAS;AACd,YAAI,QAAQ,SAASF,gBAAe,cAAc,QAAQ,SAASA,gBAAe,aAAa;AAC7F,iBAAO;AAAA,QACT;AACA,kBAAU,QAAQ;AAAA,MACpB;AACA,aAAO;AAAA,IACT;AAEA,aAAS,gBAAgB,MAA+E;AACtG,UAAI,CAAC,KAAK,QAAQ;AAChB,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,YAAY,IAAI,GAAG;AACtB,eAAO;AAAA,MACT;AAEA,UACE,KAAK,OAAO,SAASA,gBAAe,kBACpC,KAAK,OAAO,SAASA,gBAAe,wBACpC;AACA,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,OAAO,SAASA,gBAAe,mBAAmB,KAAK,OAAO,QAAQ;AAC7E,YACE,KAAK,OAAO,OAAO,SAASA,gBAAe,kBAC3C,KAAK,OAAO,OAAO,SAASA,gBAAe,wBAC3C;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,kBAAkB,MAAsE;AAC/F,UAAI,CAAC,gBAAgB,IAAI,GAAG;AAC1B;AAAA,MACF;AAEA,YAAM,EAAE,KAAK,IAAI;AAEjB,UAAI,KAAK,SAASA,gBAAe,gBAAgB;AAC/C;AAAA,MACF;AAEA,WAAK,KAAK,QAAQ,CAAC,cAAc;AAC/B,YAAI,UAAU,SAASA,gBAAe,qBAAqB;AACzD,kBAAQ,OAAO;AAAA,YACb,MAAM;AAAA,YACN,WAAW;AAAA,UACb,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,yBAAyB;AAAA,MACzB,oBAAoB;AAAA,IACtB;AAAA,EACF;AACF,CAAC;AAED,IAAO,sCAAQ;;;AC3Ff,OAAOG,WAAU;AAEjB,SAAS,eAAAC,oBAAmB;AAE5B,IAAMC,cAAaD,aAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,4BAA4BC,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,cAAMC,YAAWH,MAAK,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,YAAYG,SAAQ,GAAG;AAC1B,kBAAQ,OAAO;AAAA,YACb,MAAM,QAAQ,WAAW;AAAA,YACzB,WAAW;AAAA,YACX,MAAM,EAAE,UAAUA,UAAS;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,uCAAQ;;;ACrDf,SAAS,eAAAC,cAAuB,kBAAAC,uBAAsB;AAEtD,IAAMC,cAAaF,aAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,wBAAwBE,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,SAASD,gBAAe,uBAAuB;AACtD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAASA,gBAAe,mBAAmB;AAClD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAASA,gBAAe,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,OAAO,gBAAgB;AACvB,SAAS,eAAAE,qBAAmB;AAE5B,IAAMC,eAAaD,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,UAAUC,aAAW;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,QAAQ,WAAW;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,SAAS,eAAAC,eAAuB,kBAAAC,uBAAsB;AAEtD,IAAMC,eAAaF,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,gBAAgBE,aAAW;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,SAASD,gBAAe,kBAAkB;AACjD,eAAO;AAAA,MACT;AAEA,YAAM,EAAE,OAAO,IAAI;AACnB,UAAI,OAAO,SAASA,gBAAe,kBAAkB;AACnD,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,OAAO;AAC3B,YAAM,UAAU,OAAO;AAEvB,aACE,YAAY,SAASA,gBAAe,cACpC,YAAY,SAAS,aACrB,QAAQ,SAASA,gBAAe,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,SAAS,eAAAE,eAAa,kBAAAC,uBAAqC;AAE3D,IAAMC,eAAaF,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAIA,IAAM,mBAAmB,CAAC,SAAgC;AACxD,MAAI,KAAK,SAASC,gBAAe,yBAAyB;AACxD,UAAM,EAAE,OAAO,IAAI;AACnB,QAAI,QAAQ,SAASA,gBAAe,oBAAoB;AACtD,YAAM,EAAE,GAAG,IAAI;AACf,UAAI,GAAG,SAASA,gBAAe,YAAY;AACzC,eAAO,SAAS,KAAK,GAAG,IAAI;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,SAASA,gBAAe,uBAAuB,KAAK,IAAI;AAC/D,WAAO,SAAS,KAAK,KAAK,GAAG,IAAI;AAAA,EACnC;AAEA,SAAO;AACT;AAEA,IAAM,qBAAqB,CAAC,SAAgC;AAC1D,MAAI,KAAK,SAASA,gBAAe,qBAAqB;AACpD,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,OAAO,IAAI;AAEnB,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,MACE,OAAO,SAASA,gBAAe,kBAC/B,OAAO,UAAU,SAAS,IAAuC,GACjE;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,gBAAe,UAAU;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,gBAAe,iBAAiB;AAClD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,IAAM,kBAAkB,CAAC,SAAsC;AAC7D,MAAI,KAAK,SAASA,gBAAe,uBAAuB,KAAK,IAAI;AAC/D,WAAO,KAAK,GAAG;AAAA,EACjB;AAEA,MAAI,KAAK,SAASA,gBAAe,sBAAsB,KAAK,IAAI;AAC9D,WAAO,KAAK,GAAG;AAAA,EACjB;AAEA,OACG,KAAK,SAASA,gBAAe,2BAA2B,KAAK,SAASA,gBAAe,uBACtF,KAAK,QAAQ,SAASA,gBAAe,sBACrC,KAAK,OAAO,GAAG,SAASA,gBAAe,YACvC;AACA,WAAO,KAAK,OAAO,GAAG;AAAA,EACxB;AAEA,SAAO;AACT;AAEA,IAAM,4BAA4BC,aAAW;AAAA,EAC3C,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,mBACE;AAAA,MACF,4BACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,gBAAgB,CAAC,SAAuB;AAC5C,UAAI,KAAK,YAAY;AACnB;AAAA,MACF;AAEA,UAAI,mBAAmB,IAAI,GAAG;AAC5B;AAAA,MACF;AAEA,UAAI,iBAAiB,IAAI,GAAG;AAC1B;AAAA,MACF;AAEA,YAAM,eAAe,gBAAgB,IAAI;AAEzC,UAAI,cAAc;AAChB,gBAAQ,OAAO;AAAA,UACb;AAAA,UACA,WAAW;AAAA,UACX,MAAM,EAAE,MAAM,aAAa;AAAA,QAC7B,CAAC;AAAA,MACH,OAAO;AACL,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,uCAAQ;;;AClIf,SAAS,kBAAAC,kBAAgB,eAAAC,qBAAmB;;;ACA5C,SAAS,UAAU,eAAe;AAElC,SAAS,kBAAAC,uBAAqC;AAgBvC,IAAM,mBAAmB,CAAC,aAAqB,QAAQ,QAAQ,EAAE,MAAM,CAAC;;;ADZ/E,IAAMC,eAAaC,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,4BAA4BD,aAAW;AAAA,EAC3C,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,QAAQ,CAAC;AAAA,IACT,UAAU;AAAA,MACR,oBACE;AAAA,IACJ;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,EAAE,SAAS,IAAI;AACrB,UAAM,YAAY,iBAAiB,QAAQ;AAE3C,QAAI,cAAc,SAAS,cAAc,OAAO;AAC9C,aAAO,CAAC;AAAA,IACV;AAEA,aAASE,kBAAiB,MAAgF;AACxG,YAAM,eAAe,KAAK,SAASC,iBAAe,uBAAuB,KAAK,KAAK,KAAK,GAAG,OAAO;AAElG,UAAI,gBAAgB,SAAS,KAAK,YAAY,GAAG;AAC/C,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,YAAY,gBAAgB;AACnC,cAAM,iBAAiB,KAAK,WAAW;AACvC,YACE,eAAe,SAASA,iBAAe,mBACvC,eAAe,SAAS,SAASA,iBAAe,YAChD;AACA,gBAAM,WAAW,eAAe,SAAS;AACzC,cAAI,aAAa,SAAS,aAAa,kBAAkB,aAAa,aAAa;AACjF,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,sBACP,MACA,gBACA;AACA,UAAID,kBAAiB,IAAI,GAAG;AAC1B;AAAA,MACF;AAEA,YAAM,EAAE,OAAO,IAAI;AACnB,UAAI,CAAC,QAAQ;AACX;AAAA,MACF;AAEA,UACE,OAAO,SAASC,iBAAe,4BAC/B,OAAO,SAASA,iBAAe,wBAC/B;AACA;AAAA,MACF;AAEA,UAAI,gBAAgB,QAAQ,QAAQ,SAASA,iBAAe,wBAAwB;AAClF;AAAA,MACF;AAEA,UAAI,gBAAgB,GAAG,SAASA,iBAAe,YAAY;AACzD,cAAM,UAAU,eAAe,GAAG;AAClC,YAAI,SAAS,KAAK,OAAO,GAAG;AAC1B;AAAA,QACF;AAAA,MACF;AAEA,cAAQ,OAAO;AAAA,QACb,MAAM,kBAAkB;AAAA,QACxB,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,gFAAgF,SAAS,mBACvF,MACA;AACA,cAAM,aAAa,KAAK;AACxB,8BAAsB,MAAM,UAAU;AAAA,MACxC;AAAA,MACA,iCAAiC,SAAS,yBAAyB,MAAoC;AACrG,8BAAsB,IAAI;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,wCAAQ;;;AE3Gf,SAAS,eAAAC,eAAuB,kBAAAC,wBAAsB;AAEtD,IAAMC,eAAaF,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,kBAAkBE,aAAW;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,SAASD,iBAAe,eAAe;AAC9C,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAASA,iBAAe,uBAAuB;AACtD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAASA,iBAAe,mBAAmB;AAClD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAASA,iBAAe,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,SAASA,iBAAe,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,SAAS,eAAAE,eAAa,kBAAAC,wBAAqC;AAE3D,IAAMC,eAAaF,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,gBAAgB,CAAC,cAAc,aAAa,WAAW,YAAY;AAEzE,IAAM,aAAa;AACnB,IAAM,sBAAsB;AAE5B,IAAM,mBAAmB,CAAC,SAA0B;AAClD,QAAM,YAAY,KAAK,YAAY;AACnC,SAAO,UAAU,MAAM,EAAE,EAAE,KAAK,CAAC,MAAM,UAAU;AAC/C,QAAI,QAAQ,UAAU,SAAS,GAAG;AAChC,aAAO;AAAA,IACT;AACA,WAAO,SAAS,UAAU,QAAQ,CAAC,KAAK,SAAS,UAAU,QAAQ,CAAC;AAAA,EACtE,CAAC;AACH;AAEA,IAAM,sBAAsB,CAAC,SAA0B;AACrD,QAAM,YAAY,KAAK,YAAY;AACnC,MAAI,UAAU,SAAS,qBAAqB;AAC1C,WAAO;AAAA,EACT;AAEA,SAAO,cAAc,KAAK,CAAC,QAAQ;AACjC,UAAM,YAAY,MAAM,KAAK,EAAE,QAAQ,IAAI,SAAS,sBAAsB,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAC1F,WAAO,UAAU,KAAK,CAAC,UAAU;AAC/B,YAAM,WAAW,IAAI,MAAM,OAAO,QAAQ,mBAAmB;AAC7D,YAAM,kBAAkB,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;AAC5D,aAAO,UAAU,SAAS,QAAQ,KAAK,UAAU,SAAS,eAAe;AAAA,IAC3E,CAAC;AAAA,EACH,CAAC;AACH;AAEA,IAAM,mBAAmB,CAAC,SAA0B;AAClD,MAAI,KAAK,SAAS,YAAY;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,KAAK,WAAW,GAAG,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,IAAI,GAAG;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,oBAAoB,IAAI,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,IAAM,oBAAoBE,aAAW;AAAA,EACnC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,kBAAkB;AAAA,IACpB;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,kBAAkB,CAAC,SAA8B;AACrD,YAAM,EAAE,KAAK,IAAI;AAEjB,UAAI,CAAC,iBAAiB,IAAI,GAAG;AAC3B;AAAA,MACF;AAEA,cAAQ,OAAO;AAAA,QACb;AAAA,QACA,WAAW;AAAA,QACX,MAAM,EAAE,KAAK;AAAA,MACf,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,CAAC,YAA2B;AAC/C,UAAI,QAAQ,SAASD,iBAAe,YAAY;AAC9C,wBAAgB,OAAO;AAAA,MACzB,WAAW,QAAQ,SAASA,iBAAe,eAAe;AACxD,gBAAQ,WAAW,QAAQ,CAAC,SAAS;AACnC,cAAI,KAAK,SAASA,iBAAe,YAAY,KAAK,MAAM,SAASA,iBAAe,YAAY;AAC1F,4BAAgB,KAAK,KAAK;AAAA,UAC5B,WAAW,KAAK,SAASA,iBAAe,eAAe,KAAK,SAAS,SAASA,iBAAe,YAAY;AACvG,4BAAgB,KAAK,QAAQ;AAAA,UAC/B;AAAA,QACF,CAAC;AAAA,MACH,WAAW,QAAQ,SAASA,iBAAe,cAAc;AACvD,gBAAQ,SAAS,QAAQ,CAAC,YAAY;AACpC,cAAI,SAAS,SAASA,iBAAe,YAAY;AAC/C,4BAAgB,OAAO;AAAA,UACzB,WACE,SAAS,SAASA,iBAAe,eACjC,QAAQ,SAAS,SAASA,iBAAe,YACzC;AACA,4BAAgB,QAAQ,QAAQ;AAAA,UAClC;AAAA,QACF,CAAC;AAAA,MACH,WAAW,QAAQ,SAASA,iBAAe,qBAAqB,QAAQ,KAAK,SAASA,iBAAe,YAAY;AAC/G,wBAAgB,QAAQ,IAAI;AAAA,MAC9B,WAAW,QAAQ,SAASA,iBAAe,eAAe,QAAQ,SAAS,SAASA,iBAAe,YAAY;AAC7G,wBAAgB,QAAQ,QAAQ;AAAA,MAClC;AAAA,IACF;AAEA,WAAO;AAAA,MACL,mBAAmB,MAAM;AACvB,qBAAa,KAAK,EAAE;AAAA,MACtB;AAAA,MACA,oBAAoB,MAAM;AACxB,YAAI,KAAK,IAAI;AACX,0BAAgB,KAAK,EAAE;AAAA,QACzB;AACA,aAAK,OAAO,QAAQ,CAAC,UAAU,aAAa,KAAK,CAAC;AAAA,MACpD;AAAA,MACA,mBAAmB,MAAM;AACvB,YAAI,KAAK,IAAI;AACX,0BAAgB,KAAK,EAAE;AAAA,QACzB;AACA,aAAK,OAAO,QAAQ,CAAC,UAAU,aAAa,KAAK,CAAC;AAAA,MACpD;AAAA,MACA,wBAAwB,MAAM;AAC5B,aAAK,OAAO,QAAQ,CAAC,UAAU,aAAa,KAAK,CAAC;AAAA,MACpD;AAAA,MACA,YAAY,MAAM;AAChB,YAAI,KAAK,OAAO;AACd,uBAAa,KAAK,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,MACA,iBAAiB,MAAM;AACrB,YAAI,KAAK,IAAI;AACX,0BAAgB,KAAK,EAAE;AAAA,QACzB;AAAA,MACF;AAAA,MACA,uBAAuB,MAAM;AAC3B,wBAAgB,KAAK,EAAE;AAAA,MACzB;AAAA,MACA,uBAAuB,MAAM;AAC3B,wBAAgB,KAAK,EAAE;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,8BAAQ;;;AC1Jf,SAAS,eAAAE,eAAa,kBAAAC,wBAAqC;AAE3D,IAAMC,eAAaF,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,uBAAuB,oBAAI,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC;AACzD,IAAM,qBAAqB;AAE3B,IAAM,gBAAgB,CAAC,SAAiC;AACtD,MAAI,UAAqC;AAEzC,SAAO,SAAS;AACd,UAAM,aAAwC,QAAQ;AAEtD,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAEA,QAAI,WAAW,SAASC,iBAAe,cAAc;AACnD,YAAM,EAAE,KAAK,IAAI;AACjB,UAAI,QAAQ,SAAS,SAAS;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAEA,cAAU;AAAA,EACZ;AAEA,SAAO;AACT;AAEA,IAAM,qBAAqB,CAAC,MAAc,SAAiC;AACzE,MAAI,SAAS,oBAAoB;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,qBAAqB,IAAI,IAAI,KAAK,cAAc,IAAI,GAAG;AACzD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,IAAM,wBAAwBC,aAAW;AAAA,EACvC,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,cACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,kBAAkB,CAAC,MAA2B,oBAAmC;AACrF,YAAM,EAAE,KAAK,IAAI;AAEjB,UAAI,KAAK,WAAW,GAAG;AACrB;AAAA,MACF;AAEA,UAAI,mBAAmB,MAAM,eAAe,GAAG;AAC7C;AAAA,MACF;AAEA,cAAQ,OAAO;AAAA,QACb;AAAA,QACA,WAAW;AAAA,QACX,MAAM,EAAE,KAAK;AAAA,MACf,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,CAAC,SAAwB,oBAAmC;AAC/E,UAAI,QAAQ,SAASD,iBAAe,YAAY;AAC9C,wBAAgB,SAAS,eAAe;AAAA,MAC1C,WAAW,QAAQ,SAASA,iBAAe,eAAe;AACxD,gBAAQ,WAAW,QAAQ,CAAC,SAAS;AACnC,cAAI,KAAK,SAASA,iBAAe,YAAY,KAAK,MAAM,SAASA,iBAAe,YAAY;AAC1F,4BAAgB,KAAK,OAAO,eAAe;AAAA,UAC7C,WAAW,KAAK,SAASA,iBAAe,eAAe,KAAK,SAAS,SAASA,iBAAe,YAAY;AACvG,4BAAgB,KAAK,UAAU,eAAe;AAAA,UAChD;AAAA,QACF,CAAC;AAAA,MACH,WAAW,QAAQ,SAASA,iBAAe,cAAc;AACvD,gBAAQ,SAAS,QAAQ,CAAC,YAAY;AACpC,cAAI,SAAS,SAASA,iBAAe,YAAY;AAC/C,4BAAgB,SAAS,eAAe;AAAA,UAC1C,WACE,SAAS,SAASA,iBAAe,eACjC,QAAQ,SAAS,SAASA,iBAAe,YACzC;AACA,4BAAgB,QAAQ,UAAU,eAAe;AAAA,UACnD;AAAA,QACF,CAAC;AAAA,MACH,WAAW,QAAQ,SAASA,iBAAe,qBAAqB,QAAQ,KAAK,SAASA,iBAAe,YAAY;AAC/G,wBAAgB,QAAQ,MAAM,eAAe;AAAA,MAC/C,WAAW,QAAQ,SAASA,iBAAe,eAAe,QAAQ,SAAS,SAASA,iBAAe,YAAY;AAC7G,wBAAgB,QAAQ,UAAU,eAAe;AAAA,MACnD;AAAA,IACF;AAEA,WAAO;AAAA,MACL,mBAAmB,MAAM;AACvB,qBAAa,KAAK,IAAI,IAAI;AAAA,MAC5B;AAAA,MACA,oBAAoB,MAAM;AACxB,YAAI,KAAK,IAAI;AACX,0BAAgB,KAAK,IAAI,IAAI;AAAA,QAC/B;AACA,aAAK,OAAO,QAAQ,CAAC,UAAU,aAAa,OAAO,IAAI,CAAC;AAAA,MAC1D;AAAA,MACA,mBAAmB,MAAM;AACvB,YAAI,KAAK,IAAI;AACX,0BAAgB,KAAK,IAAI,IAAI;AAAA,QAC/B;AACA,aAAK,OAAO,QAAQ,CAAC,UAAU,aAAa,OAAO,IAAI,CAAC;AAAA,MAC1D;AAAA,MACA,wBAAwB,MAAM;AAC5B,aAAK,OAAO,QAAQ,CAAC,UAAU,aAAa,OAAO,IAAI,CAAC;AAAA,MAC1D;AAAA,MACA,YAAY,MAAM;AAChB,YAAI,KAAK,OAAO;AACd,uBAAa,KAAK,OAAO,IAAI;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,mCAAQ;;;ACvIf,SAAS,kBAAAE,kBAAgB,eAAAC,qBAAmB;AAI5C,IAAMC,eAAaD,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,4BAA4BC,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,UAAMC,sBAAqB,CAAC,SAAyE;AACnG,YAAM,EAAE,OAAO,IAAI;AACnB,aAAO,QAAQ,SAASH,iBAAe;AAAA,IACzC;AAEA,UAAM,sBAAsB,CAC1B,SACG;AACH,UAAI,KAAK,SAASA,iBAAe,qBAAqB;AACpD,eAAO;AAAA,MACT;AAEA,UAAI,KAAK,SAASA,iBAAe,sBAAsB,KAAK,SAASA,iBAAe,yBAAyB;AAC3G,YAAIG,oBAAmB,IAAI,GAAG;AAC5B,iBAAO;AAAA,QACT;AAEA,cAAM,EAAE,OAAO,IAAI;AACnB,eACE,QAAQ,SAASH,iBAAe,sBAChC,QAAQ,SAASA,iBAAe,wBAChC,QAAQ,SAASA,iBAAe,YAChC,QAAQ,SAASA,iBAAe;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,SAASA,iBAAe,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,SAASA,iBAAe,iBAAiB,MAAM,SAASA,iBAAe;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,SAAS,eAAAI,eAAa,kBAAAC,wBAAqC;AAE3D,IAAMC,eAAaF,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,WAAW,CAAC,aAA8B,SAAS,SAAS,KAAK,KAAK,CAAC,SAAS,SAAS,OAAO;AAEtG,IAAM,oBAAoB,CAAC,SAAkF;AAC3G,QAAM,EAAE,OAAO,IAAI;AAEnB,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASC,iBAAe,kBAAkB,OAAO,UAAU,SAAS,IAAI,GAAG;AACpF,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,iBAAe,iBAAiB,OAAO,UAAU,SAAS,IAA2B,GAAG;AAC1G,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,iBAAe,iBAAiB;AAClD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,iBAAe,UAAU;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,iBAAe,iBAAiB;AAClD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,iBAAe,uBAAuB;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,iBAAe,mBAAmB;AACpD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAASA,iBAAe,wBAAwB,OAAO,SAAS,MAAM;AAC/E,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,IAAM,4BAA4BC,aAAW;AAAA,EAC3C,MAAM;AAAA,EACN,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,aACE;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,MACR,mBACE;AAAA,MACF,uBACE;AAAA,IACJ;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,UAAM,EAAE,SAAS,IAAI;AAErB,QAAI,CAAC,SAAS,QAAQ,GAAG;AACvB,aAAO,CAAC;AAAA,IACV;AAEA,WAAO;AAAA,MACL,mBAAmB,MAAM;AACvB,YAAI,KAAK,GAAG,SAASD,iBAAe,YAAY;AAC9C;AAAA,QACF;AAEA,cAAM,EAAE,KAAK,IAAI;AAEjB,YAAI,CAAC,MAAM;AACT;AAAA,QACF;AAEA,YAAI,KAAK,SAASA,iBAAe,yBAAyB;AACxD,cAAI,kBAAkB,IAAI,GAAG;AAC3B;AAAA,UACF;AAEA,kBAAQ,OAAO;AAAA,YACb,MAAM;AAAA,YACN,WAAW;AAAA,YACX,MAAM,EAAE,MAAM,KAAK,GAAG,KAAK;AAAA,UAC7B,CAAC;AAAA,QACH;AAEA,YAAI,KAAK,SAASA,iBAAe,oBAAoB;AACnD,cAAI,kBAAkB,IAAI,GAAG;AAC3B;AAAA,UACF;AAEA,kBAAQ,OAAO;AAAA,YACb,MAAM;AAAA,YACN,WAAW;AAAA,YACX,MAAM,EAAE,MAAM,KAAK,GAAG,KAAK;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,IAAO,sCAAQ;;;ACnHf,SAAS,kBAAAE,kBAAgB,eAAAC,qBAAmB;AAI5C,IAAMC,eAAaD,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,mBAAmBC,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,gBAAgB,MAA0C;AACjE,UAAI,UAAU;AACd,aAAO,SAAS;AACd,gBAAQ,QAAQ,MAAM;AAAA,UACpB,KAAKF,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAClB,mBAAO;AAAA,UAET,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAClB,sBAAU,QAAQ;AAClB;AAAA,UAEF;AACE,mBAAO;AAAA,QACX;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,cAAc,WAAmB,OAAgE;AACxG,YAAM,WAAW,MAAM,IAAI,IAAI,SAAS;AACxC,UAAI,CAAC,UAAU;AACb,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,WAAW,WAAW,GAAG;AACpC,eAAO;AAAA,MACT;AAEA,aAAO,SAAS,WAAW,KAAK,CAAC,QAAQ;AACvC,YAAI,IAAI,QAAQ,GAAG;AACjB,iBAAO;AAAA,QACT;AAEA,cAAM,EAAE,WAAW,IAAI;AACvB,cAAM,EAAE,OAAO,IAAI;AAEnB,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,QACT;AAEA,YAAI,gBAAgB,MAAM,GAAG;AAC3B,iBAAO;AAAA,QACT;AAEA,gBAAQ,OAAO,MAAM;AAAA,UACnB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAAA,UACpB,KAAKA,iBAAe;AAClB,mBAAO;AAAA,UAET;AACE,mBAAO;AAAA,QACX;AAAA,MACF,CAAC;AAAA,IACH;AAEA,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,QAAQ,QAAQ,WAAW,SAAS,IAAI;AAE9C,YAAM,mBAAmB,KAAK,WAAW,MAAM,CAAC,cAAc;AAC5D,YAAI,UAAU,SAASA,iBAAe,wBAAwB;AAC5D,iBAAO;AAAA,QACT;AACA,YAAI,UAAU,SAASA,iBAAe,0BAA0B;AAC9D,iBAAO;AAAA,QACT;AACA,YAAI,UAAU,SAASA,iBAAe,iBAAiB;AACrD,gBAAM,YAAY,UAAU,MAAM;AAClC,iBAAO,CAAC,cAAc,WAAW,KAAK;AAAA,QACxC;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;;;ACzLf,SAAS,kBAAAG,kBAAgB,eAAAC,qBAAmB;AAI5C,IAAMC,eAAaD,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,iCAAiCC,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,SAASF,iBAAe,cACxC,KAAK,WAAW,SAASA,iBAAe,eACxC,KAAK,UAAU,SAASA,iBAAe,cACvC,KAAK,UAAU,SAASA,iBAAe;AAAA,IAE3C;AAEA,aAAS,gBAAgB,MAA2C;AAClE,aAAO,KAAK,MAAM,SAASA,iBAAe,cAAc,KAAK,MAAM,SAASA,iBAAe;AAAA,IAC7F;AAEA,aAAS,aAAa,OAAyC;AAC7D,aAAO,MAAM,KAAK,KAAK,CAAC,SAAS;AAC/B,YAAI,KAAK,SAASA,iBAAe,mBAAmB,KAAK,UAAU;AACjE,iBACE,KAAK,SAAS,SAASA,iBAAe,cACtC,KAAK,SAAS,SAASA,iBAAe,eACrC,KAAK,SAAS,SAASA,iBAAe,yBAAyB,oBAAoB,KAAK,QAAQ,KAChG,KAAK,SAAS,SAASA,iBAAe,qBAAqB,gBAAgB,KAAK,QAAQ;AAAA,QAE7F;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,aAASG,kBACP,MACS;AACT,UAAI,KAAK,SAASH,iBAAe,yBAAyB;AACxD,YAAI,KAAK,KAAK,SAASA,iBAAe,cAAc,KAAK,KAAK,SAASA,iBAAe,aAAa;AACjG,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,KAAK,SAASA,iBAAe,gBAAgB;AACpD,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF,WAAW,KAAK,SAASA,iBAAe,sBAAsB,KAAK,SAASA,iBAAe,qBAAqB;AAC9G,YAAI,KAAK,QAAQ,KAAK,KAAK,SAASA,iBAAe,gBAAgB;AACjE,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,aAAS,uBAAuB,MAAkC;AAChE,UAAI,KAAK,SAASA,iBAAe,eAAe;AAC9C,eAAO;AAAA,MACT;AACA,UAAI,KAAK,SAASA,iBAAe,mBAAmB,KAAK,eAAe;AACtE,eAAO,KAAK,cAAc,OAAO,KAAK,CAAC,UAAU,MAAM,SAASA,iBAAe,aAAa;AAAA,MAC9F;AACA,UAAI,KAAK,SAASA,iBAAe,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,SAASA,iBAAe,eAAe;AAC9C,eAAO;AAAA,MACT;AACA,UAAI,KAAK,SAASA,iBAAe,mBAAmB,KAAK,eAAe;AACtE,eAAO,KAAK,cAAc,OAAO,KAAK,CAAC,UAAU,MAAM,SAASA,iBAAe,aAAa;AAAA,MAC9F;AACA,UAAI,KAAK,SAASA,iBAAe,aAAa;AAC5C,eAAO,KAAK,MAAM,KAAK,CAAC,SAAS,oBAAoB,IAAI,CAAC;AAAA,MAC5D;AACA,aAAO;AAAA,IACT;AAEA,aAAS,cACP,MACA;AACA,UAAI,CAACG,kBAAiB,IAAI,GAAG;AAC3B;AAAA,MACF;AACA,UAAI,KAAK,OAAO,WAAW,GAAG;AAC5B;AAAA,MACF;AACA,YAAM,QAAQ,KAAK,OAAO,CAAC;AAC3B,UAAI,MAAM,SAASH,iBAAe,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,SAAS,kBAAAI,kBAAgB,eAAAC,qBAAmB;AAI5C,IAAMC,eAAaD,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,4BAA4BC,aAAW;AAAA,EAC3C,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,gBAAgB;AAAA,IAClB;AAAA,EACF;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,OAAO,SAAS;AACd,aAAS,2BAA2B,UAA4B,UAA2C;AACzG,YAAM,YAAY,SAAS;AAC3B,YAAM,cAAc,UAAU,KAAK;AAEnC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,YAAM,iBAAiB,YAAY,SAAS,KAAK,cAAc;AAC/D,YAAM,qBAAqB,YAAY,SAAS,KAAK,MAAM,KAAK,SAAS;AAEzE,UAAI,CAAC,kBAAkB,CAAC,oBAAoB;AAC1C;AAAA,MACF;AAEA,cAAQ,OAAO;AAAA,QACb,MAAM;AAAA,QACN,WAAW;AAAA,QACX,IAAI,OAAO;AACT,gBAAM,WAAW,UAAU,QAAQ;AACnC,gBAAM,WAAW,QAAQ,WAAW,QAAQ,SAAS,UAAU;AAC/D,gBAAM,kBAAkB,MAAM,QAAQ,MAAM,QAAQ;AAEpD,iBAAO,CAAC,MAAM,YAAY,UAAU,eAAe,GAAG,MAAM,OAAO,QAAQ,CAAC;AAAA,QAC9E;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,2BAA2B,UAA2C,UAA4B;AACzG,YAAM,YAAY,SAAS;AAC3B,YAAM,cAAc,UAAU,KAAK;AAEnC,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AAEA,YAAM,0BAA0B,MAAM,KAAK,WAAW;AAEtD,UAAI,CAAC,yBAAyB;AAC5B;AAAA,MACF;AAEA,cAAQ,OAAO;AAAA,QACb,MAAM;AAAA,QACN,WAAW;AAAA,QACX,IAAI,OAAO;AACT,gBAAM,WAAW,QAAQ,WAAW,QAAQ,SAAS,UAAU;AAC/D,gBAAM,WAAW,UAAU,KAAK;AAChC,gBAAM,kBAAkB,SAAS,QAAQ,IAAI,QAAQ;AAErD,iBAAO,CAAC,MAAM,YAAY,UAAU,eAAe,GAAG,MAAM,OAAO,QAAQ,CAAC;AAAA,QAC9E;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,gBAAgB,MAA2B;AAClD,YAAM,EAAE,SAAS,IAAI;AAErB,UAAI,SAAS,SAAS,GAAG;AACvB;AAAA,MACF;AAEA,eAAS,IAAI,GAAG,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG;AAC/C,cAAM,QAAQ,SAAS,CAAC;AACxB,cAAM,YAAY,SAAS,IAAI,CAAC;AAEhC,YAAI,CAAC,SAAS,CAAC,WAAW;AACxB;AAAA,QACF;AAEA,YAAI,MAAM,SAASF,iBAAe,WAAW,UAAU,SAASA,iBAAe,wBAAwB;AACrG,qCAA2B,OAAO,SAAS;AAAA,QAC7C,WAAW,MAAM,SAASA,iBAAe,0BAA0B,UAAU,SAASA,iBAAe,SAAS;AAC5G,qCAA2B,OAAO,SAAS;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,YAAY;AAAA,IACd;AAAA,EACF;AACF,CAAC;AAED,IAAO,uCAAQ;;;AC5Gf,SAAS,kBAAAG,kBAAgB,eAAAC,qBAAmB;AAI5C,IAAMC,eAAaD,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,wBAAwBC,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,SAASF,iBAAe,mBAAmB;AACnD,eAAO,oBAAoB,MAAM,IAAI;AAAA,MACvC;AAEA,UAAI,MAAM,SAASA,iBAAe,eAAe;AAC/C,YAAI,MAAM,gBAAgB,eAAe,SAASA,iBAAe,eAAe;AAC9E,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,MAAM,SAASA,iBAAe,YAAY;AAC5C,YAAI,MAAM,gBAAgB,eAAe,SAASA,iBAAe,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,SAAS,kBAAAG,kBAAgB,eAAAC,qBAAmB;AAI5C,IAAMC,eAAaD,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,yBAAyBC,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,SAASF,iBAAe,cACpC,KAAK,OAAO,SAAS,WACrB,KAAK,SAAS,SAASA,iBAAe,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,SAASA,iBAAe,cAClC,KAAK,KAAK,SAAS,WACnB,KAAK,MAAM,SAASA,iBAAe,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,SAAS,kBAAAG,kBAAgB,eAAAC,qBAAmB;AAI5C,IAAMC,eAAaD,cAAY;AAAA,EAC7B,CAAC,SACC,gFAAgF,KAAK,WAAW,KAAK,GAAG,EAAE,YAAY,CAAC;AAC3H;AAEA,IAAM,wBAAwBC,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,SAASF,iBAAe,cACxC,KAAK,WAAW,SAASA,iBAAe,eACxC,KAAK,UAAU,SAASA,iBAAe,cACvC,KAAK,UAAU,SAASA,iBAAe;AAAA,IAE3C;AAEA,aAAS,gBAAgB,MAA2C;AAClE,aAAO,KAAK,MAAM,SAASA,iBAAe,cAAc,KAAK,MAAM,SAASA,iBAAe;AAAA,IAC7F;AAEA,aAAS,aAAa,OAAyC;AAC7D,aAAO,MAAM,KAAK,KAAK,CAAC,SAAS;AAC/B,YAAI,KAAK,SAASA,iBAAe,mBAAmB,KAAK,UAAU;AACjE,iBACE,KAAK,SAAS,SAASA,iBAAe,cACtC,KAAK,SAAS,SAASA,iBAAe,eACrC,KAAK,SAAS,SAASA,iBAAe,yBAAyB,oBAAoB,KAAK,QAAQ,KAChG,KAAK,SAAS,SAASA,iBAAe,qBAAqB,gBAAgB,KAAK,QAAQ;AAAA,QAE7F;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,aAASG,kBACP,MACA;AACA,UAAI,KAAK,SAASH,iBAAe,yBAAyB;AACxD,YAAI,KAAK,KAAK,SAASA,iBAAe,cAAc,KAAK,KAAK,SAASA,iBAAe,aAAa;AACjG,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,KAAK,SAASA,iBAAe,gBAAgB;AACpD,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF,WAAW,KAAK,SAASA,iBAAe,sBAAsB,KAAK,SAASA,iBAAe,qBAAqB;AAC9G,YAAI,KAAK,QAAQ,KAAK,KAAK,SAASA,iBAAe,gBAAgB;AACjE,iBAAO,aAAa,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,cACP,MACA;AACA,UAAI,CAACG,kBAAiB,IAAI,GAAG;AAC3B;AAAA,MACF;AAEA,UAAI,KAAK,OAAO,WAAW,GAAG;AAC5B;AAAA,MACF;AAEA,YAAM,QAAQ,KAAK,OAAO,CAAC;AAE3B,UAAI,MAAM,SAASH,iBAAe,eAAe;AAC/C,cAAM,aAAa,MAAM,WACtB,OAAO,CAAC,SAAoC,KAAK,SAASA,iBAAe,QAAQ,EACjF,IAAI,CAAC,SAAS;AACb,cAAI,KAAK,IAAI,SAASA,iBAAe,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;;;AC1Ff,IAAM,OAAO;AAAA,EACX,MAAM,gBAAY;AAAA,EAClB,SAAS,gBAAY;AACvB;AAEA,IAAM,QAAQ;AAAA,EACZ,yBAAyB;AAAA,EACzB,oCAAoC;AAAA,EACpC,gCAAgC;AAAA,EAChC,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iCAAiC;AAAA,EACjC,+BAA+B;AAAA,EAC/B,gCAAgC;AAAA,EAChC,4BAA4B;AAAA,EAC5B,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,gCAAgC;AAAA,EAChC,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,4BAA4B;AAAA,EAC5B,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,sBAAsB;AAAA,EACtB,sCAAsC;AAAA,EACtC,gCAAgC;AAAA,EAChC,4BAA4B;AAAA,EAC5B,6BAA6B;AAAA,EAC7B,2BAA2B;AAC7B;AAEA,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AACF;AAEA,IAAM,YAAY;AAAA,EAChB,oCAAoC;AAAA,EACpC,uBAAuB;AAAA,EACvB,2CAA2C;AAAA,EAC3C,8BAA8B;AAAA,EAC9B,2CAA2C;AAAA,EAC3C,0CAA0C;AAAA,EAC1C,0CAA0C;AAAA,EAC1C,2CAA2C;AAAA,EAC3C,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,wCAAwC;AAAA,EACxC,uCAAuC;AAAA,EACvC,6BAA6B;AAAA,EAC7B,iCAAiC;AAAA,EACjC,8BAA8B;AAAA,EAC9B,kCAAkC;AAAA,EAClC,uCAAuC;AACzC;AAEA,IAAM,uBAAuB;AAAA,EAC3B,oCAAoC;AAAA,EACpC,uBAAuB;AAAA,EACvB,2CAA2C;AAAA,EAC3C,8BAA8B;AAAA,EAC9B,2CAA2C;AAAA,EAC3C,0CAA0C;AAAA,EAC1C,0CAA0C;AAAA,EAC1C,2CAA2C;AAAA,EAC3C,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,wCAAwC;AAAA,EACxC,uCAAuC;AAAA,EACvC,6BAA6B;AAAA,EAC7B,iCAAiC;AAAA,EACjC,8BAA8B;AAAA,EAC9B,kCAAkC;AAAA,EAClC,uCAAuC;AACzC;AAEA,IAAM,WAAW;AAAA,EACf,8BAA8B;AAAA,EAC9B,4CAA4C;AAAA,EAC5C,0CAA0C;AAAA,EAC1C,iDAAiD;AAAA,EACjD,2CAA2C;AAAA,EAC3C,sCAAsC;AAAA,EACtC,+CAA+C;AACjD;AAEA,IAAM,sBAAsB;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,4CAA4C;AAAA,EAC5C,0CAA0C;AAAA,EAC1C,iDAAiD;AAAA,EACjD,2CAA2C;AAAA,EAC3C,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":["AST_NODE_TYPES","ESLintUtils","createRule","isReactComponent","AST_NODE_TYPES","ESLintUtils","createRule","ESLintUtils","createRule","basename","path","ESLintUtils","createRule","basename","ESLintUtils","AST_NODE_TYPES","createRule","AST_NODE_TYPES","ESLintUtils","createRule","path","ESLintUtils","createRule","basename","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","createRule","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","AST_NODE_TYPES","createRule","AST_NODE_TYPES","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","isReactComponent","AST_NODE_TYPES","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","AST_NODE_TYPES","createRule","ESLintUtils","AST_NODE_TYPES","createRule","AST_NODE_TYPES","ESLintUtils","createRule","isCallbackFunction","ESLintUtils","AST_NODE_TYPES","createRule","AST_NODE_TYPES","ESLintUtils","createRule","AST_NODE_TYPES","ESLintUtils","createRule","isReactComponent","AST_NODE_TYPES","ESLintUtils","createRule","AST_NODE_TYPES","ESLintUtils","createRule","AST_NODE_TYPES","ESLintUtils","createRule","AST_NODE_TYPES","ESLintUtils","createRule","isReactComponent"]}