lint-suite 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +161 -16
  2. package/eslint.cjs +3085 -998
  3. package/eslint.cjs.map +4 -4
  4. package/eslint.d.ts +13 -13
  5. package/eslint.d.ts.map +1 -1
  6. package/eslint.js +3173 -990
  7. package/eslint.js.map +4 -4
  8. package/lib/angular-template.d.ts.map +1 -1
  9. package/lib/angular.d.ts +1 -0
  10. package/lib/angular.d.ts.map +1 -1
  11. package/lib/base-limits.d.ts +2 -0
  12. package/lib/base-limits.d.ts.map +1 -0
  13. package/lib/base-practices.d.ts +2 -0
  14. package/lib/base-practices.d.ts.map +1 -0
  15. package/lib/base-recommended.d.ts +2 -0
  16. package/lib/base-recommended.d.ts.map +1 -0
  17. package/lib/base.d.ts.map +1 -1
  18. package/lib/javascript.d.ts.map +1 -1
  19. package/lib/rules/define-plugin.util.d.ts +6 -0
  20. package/lib/rules/define-plugin.util.d.ts.map +1 -0
  21. package/lib/rules/explicit-accessibility/common/explicit-accessibility.const.d.ts +6 -0
  22. package/lib/rules/explicit-accessibility/common/explicit-accessibility.const.d.ts.map +1 -0
  23. package/lib/rules/explicit-accessibility/common/explicit-accessibility.type.d.ts +14 -0
  24. package/lib/rules/explicit-accessibility/common/explicit-accessibility.type.d.ts.map +1 -0
  25. package/lib/rules/explicit-accessibility/explicit-accessibility.d.ts +7 -0
  26. package/lib/rules/explicit-accessibility/explicit-accessibility.d.ts.map +1 -0
  27. package/lib/rules/no-inline-object-types/no-inline-object-types.d.ts +6 -0
  28. package/lib/rules/no-inline-object-types/no-inline-object-types.d.ts.map +1 -0
  29. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-discovery.d.ts +5 -0
  30. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-discovery.d.ts.map +1 -0
  31. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-scope.d.ts +9 -0
  32. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-scope.d.ts.map +1 -0
  33. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-decorator-kind.d.ts +10 -0
  34. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-decorator-kind.d.ts.map +1 -0
  35. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-directive-index.d.ts +4 -0
  36. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-directive-index.d.ts.map +1 -0
  37. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-metadata-values.d.ts +12 -0
  38. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-metadata-values.d.ts.map +1 -0
  39. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-resolved-path.d.ts +3 -0
  40. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-resolved-path.d.ts.map +1 -0
  41. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-chains.d.ts +17 -0
  42. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-chains.d.ts.map +1 -0
  43. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-resolution.d.ts +8 -0
  44. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-resolution.d.ts.map +1 -0
  45. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-reads.d.ts +6 -0
  46. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-reads.d.ts.map +1 -0
  47. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-references.d.ts +5 -0
  48. package/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-references.d.ts.map +1 -0
  49. package/lib/rules/no-unused-angular-instance-fields/project-usage/common/project-index.type.d.ts +54 -0
  50. package/lib/rules/no-unused-angular-instance-fields/project-usage/common/project-index.type.d.ts.map +1 -0
  51. package/lib/rules/no-unused-angular-instance-fields/project-usage/common/project-usage.type.d.ts +116 -0
  52. package/lib/rules/no-unused-angular-instance-fields/project-usage/common/project-usage.type.d.ts.map +1 -0
  53. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-file-entry.d.ts +4 -0
  54. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-file-entry.d.ts.map +1 -0
  55. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-classes.d.ts +4 -0
  56. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-classes.d.ts.map +1 -0
  57. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-reconciliation.d.ts +4 -0
  58. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-reconciliation.d.ts.map +1 -0
  59. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-staleness.d.ts +10 -0
  60. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-staleness.d.ts.map +1 -0
  61. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-usage.d.ts +17 -0
  62. package/lib/rules/no-unused-angular-instance-fields/project-usage/project-usage.d.ts.map +1 -0
  63. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-angular-interface-methods.d.ts +8 -0
  64. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-angular-interface-methods.d.ts.map +1 -0
  65. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-assignment-pattern-elements.d.ts +5 -0
  66. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-assignment-pattern-elements.d.ts.map +1 -0
  67. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-binding-pattern-elements.d.ts +6 -0
  68. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-binding-pattern-elements.d.ts.map +1 -0
  69. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-candidate-names.d.ts +4 -0
  70. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-candidate-names.d.ts.map +1 -0
  71. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-destructuring-reads.d.ts +4 -0
  72. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-destructuring-reads.d.ts.map +1 -0
  73. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-reads.d.ts +4 -0
  74. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-reads.d.ts.map +1 -0
  75. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-symbol-reads.d.ts +8 -0
  76. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-symbol-reads.d.ts.map +1 -0
  77. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-type-dependencies.d.ts +3 -0
  78. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-type-dependencies.d.ts.map +1 -0
  79. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-write-targets.d.ts +7 -0
  80. package/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-write-targets.d.ts.map +1 -0
  81. package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/read-chain-text.util.d.ts +4 -0
  82. package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/read-chain-text.util.d.ts.map +1 -0
  83. package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/spec-file.util.d.ts +2 -0
  84. package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/spec-file.util.d.ts.map +1 -0
  85. package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/type-property-symbols.util.d.ts +4 -0
  86. package/lib/rules/no-unused-angular-instance-fields/project-usage/utils/type-property-symbols.util.d.ts.map +1 -0
  87. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-class-fields.d.ts +3 -0
  88. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-class-fields.d.ts.map +1 -0
  89. package/lib/rules/no-unused-angular-instance-fields/{utils/angular-expression-reads.util.d.ts → rule/angular/angular-expression-reads.d.ts} +1 -1
  90. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-expression-reads.d.ts.map +1 -0
  91. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-imports.d.ts +9 -0
  92. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-imports.d.ts.map +1 -0
  93. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-managed-fields.d.ts +5 -0
  94. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-managed-fields.d.ts.map +1 -0
  95. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-member-candidates.d.ts +6 -0
  96. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-member-candidates.d.ts.map +1 -0
  97. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-literals.d.ts +5 -0
  98. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-literals.d.ts.map +1 -0
  99. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-reads.d.ts +9 -0
  100. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-reads.d.ts.map +1 -0
  101. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-template-parsing.d.ts +4 -0
  102. package/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-template-parsing.d.ts.map +1 -0
  103. package/lib/rules/no-unused-angular-instance-fields/rule/common/no-unused-angular-instance-fields.type.d.ts +54 -0
  104. package/lib/rules/no-unused-angular-instance-fields/rule/common/no-unused-angular-instance-fields.type.d.ts.map +1 -0
  105. package/lib/rules/no-unused-angular-instance-fields/rule/no-unused-angular-instance-fields.d.ts +8 -0
  106. package/lib/rules/no-unused-angular-instance-fields/rule/no-unused-angular-instance-fields.d.ts.map +1 -0
  107. package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-class-read-visitor.d.ts +4 -0
  108. package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-class-read-visitor.d.ts.map +1 -0
  109. package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-field-reads.d.ts +8 -0
  110. package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-field-reads.d.ts.map +1 -0
  111. package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-lexical-this.d.ts +3 -0
  112. package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-lexical-this.d.ts.map +1 -0
  113. package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-write-targets.d.ts +3 -0
  114. package/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-write-targets.d.ts.map +1 -0
  115. package/lib/rules/no-unused-angular-instance-fields/utils/angular-read-target.util.d.ts +4 -0
  116. package/lib/rules/no-unused-angular-instance-fields/utils/angular-read-target.util.d.ts.map +1 -0
  117. package/lib/rules/readonly-type-properties/readonly-type-properties.d.ts +6 -0
  118. package/lib/rules/readonly-type-properties/readonly-type-properties.d.ts.map +1 -0
  119. package/lib/typescript-consistency.d.ts +2 -0
  120. package/lib/typescript-consistency.d.ts.map +1 -0
  121. package/lib/typescript-imports.d.ts +2 -0
  122. package/lib/typescript-imports.d.ts.map +1 -0
  123. package/lib/typescript-local-plugin.d.ts +2 -0
  124. package/lib/typescript-local-plugin.d.ts.map +1 -0
  125. package/lib/typescript-overrides.d.ts +2 -0
  126. package/lib/typescript-overrides.d.ts.map +1 -0
  127. package/lib/typescript-recommended.d.ts +2 -0
  128. package/lib/typescript-recommended.d.ts.map +1 -0
  129. package/lib/typescript-safety.d.ts +2 -0
  130. package/lib/typescript-safety.d.ts.map +1 -0
  131. package/lib/typescript.d.ts +1 -0
  132. package/lib/typescript.d.ts.map +1 -1
  133. package/package.json +18 -14
  134. package/lib/rules/explicit-accessibility.d.ts +0 -12
  135. package/lib/rules/explicit-accessibility.d.ts.map +0 -1
  136. package/lib/rules/no-unused-angular-instance-fields/angular-class-fields.d.ts +0 -8
  137. package/lib/rules/no-unused-angular-instance-fields/angular-class-fields.d.ts.map +0 -1
  138. package/lib/rules/no-unused-angular-instance-fields/angular-metadata-reads.d.ts +0 -3
  139. package/lib/rules/no-unused-angular-instance-fields/angular-metadata-reads.d.ts.map +0 -1
  140. package/lib/rules/no-unused-angular-instance-fields/common/no-unused-angular-instance-fields.type.d.ts +0 -10
  141. package/lib/rules/no-unused-angular-instance-fields/common/no-unused-angular-instance-fields.type.d.ts.map +0 -1
  142. package/lib/rules/no-unused-angular-instance-fields/no-unused-angular-instance-fields.d.ts +0 -7
  143. package/lib/rules/no-unused-angular-instance-fields/no-unused-angular-instance-fields.d.ts.map +0 -1
  144. package/lib/rules/no-unused-angular-instance-fields/no-unused-instance-fields.spec.d.ts +0 -2
  145. package/lib/rules/no-unused-angular-instance-fields/no-unused-instance-fields.spec.d.ts.map +0 -1
  146. package/lib/rules/no-unused-angular-instance-fields/utils/angular-expression-reads.util.d.ts.map +0 -1
  147. package/lib/rules/no-unused-angular-instance-fields/utils/typescript-field-reads.util.d.ts +0 -7
  148. package/lib/rules/no-unused-angular-instance-fields/utils/typescript-field-reads.util.d.ts.map +0 -1
package/eslint.cjs.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../packages/lint-suite/src/eslint.ts", "../../../../packages/lint-suite/src/lib/angular-template.ts", "../../../../packages/lint-suite/src/lib/angular.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/no-unused-angular-instance-fields.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/angular-class-fields.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/angular-metadata-reads.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/utils/angular-expression-reads.util.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/utils/typescript-field-reads.util.ts", "../../../../packages/lint-suite/src/lib/base.ts", "../../../../packages/lint-suite/src/lib/javascript.ts", "../../../../packages/lint-suite/src/lib/json.ts", "../../../../packages/lint-suite/src/lib/prettier.ts", "../../../../packages/lint-suite/src/lib/rxjs.ts", "../../../../packages/lint-suite/src/lib/storybook.ts", "../../../../packages/lint-suite/src/lib/typescript.ts", "../../../../packages/lint-suite/src/lib/rules/explicit-accessibility.ts", "../../../../packages/lint-suite/src/lib/vitest.ts", "../../../../packages/lint-suite/src/lib/playwright.ts", "../../../../packages/lint-suite/src/lib/boundaries.ts"],
4
- "sourcesContent": ["import { ConfigArray } from 'typescript-eslint';\nimport { angularTemplate } from './lib/angular-template.js';\nimport { angular } from './lib/angular.js';\nimport { base } from './lib/base.js';\nimport { javascript } from './lib/javascript.js';\nimport { json } from './lib/json.js';\nimport { prettier } from './lib/prettier.js';\nimport { rxjs } from './lib/rxjs.js';\nimport { storybook } from './lib/storybook.js';\nimport { typescript } from './lib/typescript.js';\nimport { vitest } from './lib/vitest.js';\nimport { playwright } from './lib/playwright.js';\nimport { boundaries } from './lib/boundaries.js';\n\nexport const recommended: ConfigArray = [\n ...base,\n ...javascript,\n ...typescript,\n ...json,\n ...boundaries,\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\n];\n\nexport {\n base,\n javascript,\n typescript,\n angular,\n angularTemplate,\n rxjs,\n json,\n boundaries,\n storybook,\n vitest,\n playwright,\n prettier\n};\n", "import { configs } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const angularTemplate = defineConfig([\n {\n files: ['**/*.html'],\n extends: [\n ...(configs.templateAccessibility as Config[]),\n ...(configs.templateRecommended as Config[])\n ],\n rules: {\n '@angular-eslint/template/prefer-template-literal': 'error',\n '@angular-eslint/template/no-any': 'error',\n '@angular-eslint/template/no-duplicate-attributes': 'error',\n '@angular-eslint/template/button-has-type': 'error',\n '@angular-eslint/template/no-positive-tabindex': 'error',\n '@angular-eslint/template/valid-aria': 'error',\n '@angular-eslint/template/alt-text': 'error',\n '@angular-eslint/template/elements-content': 'error',\n '@angular-eslint/template/click-events-have-key-events': 'error',\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\n '@angular-eslint/template/table-scope': 'error',\n '@angular-eslint/template/no-autofocus': 'error',\n '@angular-eslint/template/no-distracting-elements': 'error',\n '@angular-eslint/template/prefer-control-flow': 'error',\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\n '@angular-eslint/template/prefer-ngsrc': 'error',\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\n '@angular-eslint/template/no-nested-tags': 'error',\n '@angular-eslint/template/use-track-by-function': 'error',\n '@angular-eslint/template/label-has-associated-control': 'error',\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\n '@angular-eslint/template/no-non-null-assertion': 'error', // Forbid `!` assertions in templates\n '@angular-eslint/template/no-inline-styles': 'error', // Forbid inline style=\"...\" attributes\n '@angular-eslint/template/conditional-complexity': [\n 'warn',\n { maxComplexity: 5 }\n ], // Template readability\n '@angular-eslint/template/attributes-order': [\n 'error',\n {\n alphabetical: true,\n order: [\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\n ]\n }\n ]\n }\n }\n]);\n", "import globals from 'globals';\nimport { configs, processInlineTemplates } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nimport noUnusedInstanceFieldsRule from './rules/no-unused-angular-instance-fields/no-unused-angular-instance-fields.js';\n\nconst lintSuiteAngularPlugin: Record<string, unknown> = {\n rules: {\n 'no-unused-instance-fields': noUnusedInstanceFieldsRule\n }\n};\n\nexport const angular = defineConfig([\n {\n files: ['**/*.ts'],\n extends: [...(configs.tsRecommended as Config[])],\n plugins: {\n 'lint-suite-angular': lintSuiteAngularPlugin\n },\n languageOptions: {\n globals: {\n ...globals.browser,\n ...globals.es2025,\n ...globals.node\n }\n },\n processor: processInlineTemplates,\n rules: {\n 'lint-suite-angular/no-unused-instance-fields': 'error',\n '@angular-eslint/prefer-on-push-component-change-detection': 'error', // v22: flags only explicit opt-out of OnPush (omission now means OnPush)\n '@angular-eslint/prefer-signals': 'error',\n '@angular-eslint/use-injectable-provided-in': 'error',\n '@angular-eslint/prefer-signal-model': 'error',\n '@angular-eslint/no-uncalled-signals': 'error',\n '@angular-eslint/prefer-host-metadata-property': 'error',\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\n '@angular-eslint/sort-lifecycle-methods': 'warn', // Consistent lifecycle method ordering\n '@angular-eslint/computed-must-return': 'error', // Catch silent computed() bugs missing a return\n '@angular-eslint/no-duplicates-in-metadata-arrays': 'error', // Catch duplicate imports/providers in @Component/@NgModule\n '@angular-eslint/no-lifecycle-call': 'error', // Forbid manual this.ngOnInit() calls\n '@angular-eslint/require-lifecycle-on-prototype': 'error', // Lifecycle hooks must be methods, not arrow-fn fields\n '@angular-eslint/relative-url-prefix': 'error', // Require ./ in templateUrl/styleUrl for portability\n '@angular-eslint/use-component-selector': 'error', // All components must declare a selector\n '@angular-eslint/no-developer-preview': 'warn', // Flag APIs marked @developerPreview (no breaking-change policy)\n '@angular-eslint/no-experimental': 'warn' // Flag APIs marked @experimental\n }\n }\n]);\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\nimport {\n addAngularImport,\n reportUnusedMembers\n} from './angular-class-fields.js';\nimport type {\n AngularClassNode,\n AngularImports,\n ClassEntry,\n DynamicClasses\n} from './common/no-unused-angular-instance-fields.type.js';\nimport {\n destructuredThisReads,\n isThisExpression,\n isWriteOnly\n} from './utils/typescript-field-reads.util.js';\n\ntype Options = [];\ntype MessageIds = 'unusedField' | 'unusedMethod';\ntype FunctionNode =\n | TSESTree.ArrowFunctionExpression\n | TSESTree.FunctionDeclaration\n | TSESTree.FunctionExpression;\ntype DestructuringNode =\n | TSESTree.AssignmentExpression\n | TSESTree.VariableDeclarator;\ntype RuleContext = Readonly<TSESLint.RuleContext<MessageIds, Options>>;\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\n);\n\nconst enterClass = (\n node: AngularClassNode,\n classes: ClassEntry[],\n stack: ClassEntry[],\n thisStack: boolean[]\n): void => {\n const entry: ClassEntry = {\n node,\n reads: new Set<string>()\n };\n\n classes.push(entry);\n stack.push(entry);\n thisStack.push(true);\n};\n\nconst componentThis = (\n node: FunctionNode,\n thisStack: boolean[]\n): boolean =>\n node.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression\n ? (thisStack.at(-1) ?? false)\n : node.parent.type === TSESTree.AST_NODE_TYPES.MethodDefinition &&\n !node.parent.static;\n\nconst trackMemberRead = (\n node: TSESTree.MemberExpression,\n stack: ClassEntry[],\n thisStack: boolean[],\n dynamicClasses: DynamicClasses\n): void => {\n const current = stack.at(-1);\n\n if (!current || !thisStack.at(-1)) {\n return;\n }\n\n const receiverIsThis = isThisExpression(node.object);\n\n if (node.computed && receiverIsThis) {\n dynamicClasses.add(current);\n }\n\n if (\n receiverIsThis &&\n !node.computed &&\n node.property.type === TSESTree.AST_NODE_TYPES.Identifier &&\n !isWriteOnly(node)\n ) {\n current.reads.add(node.property.name);\n }\n};\n\nconst trackDestructuringRead = (\n node: DestructuringNode,\n stack: ClassEntry[],\n thisStack: boolean[],\n dynamicClasses: DynamicClasses\n): void => {\n const current = stack.at(-1);\n\n if (!current || !thisStack.at(-1)) {\n return;\n }\n\n const reads = destructuredThisReads(node);\n\n if (reads === undefined) {\n return;\n }\n\n if (reads === null) {\n dynamicClasses.add(current);\n return;\n }\n\n for (const name of reads) {\n current.reads.add(name);\n }\n};\n\nconst lexicalThisVisitor = (thisStack: boolean[]): TSESLint.RuleListener => ({\n FunctionDeclaration(node: TSESTree.FunctionDeclaration): void {\n thisStack.push(componentThis(node, thisStack));\n },\n FunctionExpression(node: TSESTree.FunctionExpression): void {\n thisStack.push(componentThis(node, thisStack));\n },\n ArrowFunctionExpression(node: TSESTree.ArrowFunctionExpression): void {\n thisStack.push(componentThis(node, thisStack));\n },\n 'FunctionDeclaration:exit'(): void {\n thisStack.pop();\n },\n 'FunctionExpression:exit'(): void {\n thisStack.pop();\n },\n 'ArrowFunctionExpression:exit'(): void {\n thisStack.pop();\n },\n StaticBlock(): void {\n thisStack.push(false);\n },\n 'StaticBlock:exit'(): void {\n thisStack.pop();\n },\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\n if (node.static) {\n thisStack.push(false);\n }\n },\n 'PropertyDefinition:exit'(node: TSESTree.PropertyDefinition): void {\n if (node.static) {\n thisStack.pop();\n }\n }\n});\n\nconst visitor = (\n context: RuleContext,\n imports: AngularImports,\n classes: ClassEntry[],\n stack: ClassEntry[],\n dynamicClasses: DynamicClasses\n): TSESLint.RuleListener => {\n const thisStack: boolean[] = [];\n\n return {\n ClassDeclaration(node: TSESTree.ClassDeclaration): void {\n enterClass(node, classes, stack, thisStack);\n },\n ClassExpression(node: TSESTree.ClassExpression): void {\n enterClass(node, classes, stack, thisStack);\n },\n 'ClassDeclaration:exit'(): void {\n stack.pop();\n thisStack.pop();\n },\n 'ClassExpression:exit'(): void {\n stack.pop();\n thisStack.pop();\n },\n ...lexicalThisVisitor(thisStack),\n AssignmentExpression(node: TSESTree.AssignmentExpression): void {\n trackDestructuringRead(node, stack, thisStack, dynamicClasses);\n },\n MemberExpression(node: TSESTree.MemberExpression): void {\n trackMemberRead(node, stack, thisStack, dynamicClasses);\n },\n VariableDeclarator(node: TSESTree.VariableDeclarator): void {\n trackDestructuringRead(node, stack, thisStack, dynamicClasses);\n },\n 'Program:exit'(): void {\n reportUnusedMembers(context, imports, classes, dynamicClasses);\n }\n };\n};\n\nexport default createRule<Options, MessageIds>({\n name: 'no-unused-instance-fields',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow unread instance fields and methods in Angular components and directives'\n },\n messages: {\n unusedField: \"Angular instance field '{{name}}' is never read.\",\n unusedMethod: \"Angular instance method '{{name}}' is never read.\"\n },\n schema: []\n },\n defaultOptions: [],\n create(context): TSESLint.RuleListener {\n const imports: AngularImports = new Map();\n for (const node of context.sourceCode.ast.body) {\n if (node.type === TSESTree.AST_NODE_TYPES.ImportDeclaration) {\n addAngularImport(node, imports);\n }\n }\n\n if (imports.size === 0) {\n return {};\n }\n const classes: ClassEntry[] = [];\n const stack: ClassEntry[] = [];\n const dynamicClasses: DynamicClasses = new Set();\n\n return visitor(context, imports, classes, stack, dynamicClasses);\n }\n});\n", "import { TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\nimport { metadataReads } from './angular-metadata-reads.js';\nimport type {\n AngularClassNode,\n AngularImport,\n AngularImports,\n ClassEntry,\n DynamicClasses\n} from './common/no-unused-angular-instance-fields.type.js';\n\nconst managedApis: Readonly<Record<string, true>> = {\n input: true,\n model: true,\n output: true\n};\n\ntype InstanceField = TSESTree.PropertyDefinition & {\n readonly key: TSESTree.Identifier;\n};\ntype InstanceMethod = TSESTree.MethodDefinition & {\n readonly key: TSESTree.Identifier;\n};\ntype RuleContext = Readonly<\n TSESLint.RuleContext<'unusedField' | 'unusedMethod', []>\n>;\n\ntype AngularClass = {\n readonly component: boolean;\n readonly metadata: TSESTree.ObjectExpression;\n};\n\ntype MemberCandidate = {\n readonly messageId: 'unusedField' | 'unusedMethod';\n readonly name: string;\n readonly node: InstanceField | InstanceMethod;\n};\n\nconst angularName = (\n node: TSESTree.Expression,\n imports: AngularImports\n): AngularImport | undefined => {\n if (node.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return imports.get(node.name);\n }\n\n if (\n node.type !== TSESTree.AST_NODE_TYPES.MemberExpression ||\n node.computed ||\n node.property.type !== TSESTree.AST_NODE_TYPES.Identifier\n ) {\n return null;\n }\n\n if (\n node.object.type === TSESTree.AST_NODE_TYPES.Identifier &&\n imports.get(node.object.name) === null\n ) {\n return node.property.name;\n }\n\n return angularName(node.object, imports);\n};\n\nconst angularClass = (\n node: AngularClassNode,\n imports: AngularImports\n): AngularClass | null => {\n for (const decorator of node.decorators) {\n if (decorator.expression.type !== TSESTree.AST_NODE_TYPES.CallExpression) {\n continue;\n }\n\n const kind = angularName(decorator.expression.callee, imports);\n const metadata = decorator.expression.arguments[0];\n\n if (\n (kind === 'Component' || kind === 'Directive') &&\n metadata?.type === TSESTree.AST_NODE_TYPES.ObjectExpression\n ) {\n return {\n component: kind === 'Component',\n metadata\n };\n }\n }\n\n return null;\n};\n\nconst isInstanceField = (node: TSESTree.ClassElement): node is InstanceField =>\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition &&\n node.key.type === TSESTree.AST_NODE_TYPES.Identifier;\n\nconst lifecycleHooks: Readonly<Record<string, true>> = {\n ngOnChanges: true,\n ngOnInit: true,\n ngDoCheck: true,\n ngAfterContentInit: true,\n ngAfterContentChecked: true,\n ngAfterViewInit: true,\n ngAfterViewChecked: true,\n ngOnDestroy: true\n};\n\nconst isInstanceMethod = (\n node: TSESTree.ClassElement\n): node is InstanceMethod =>\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition &&\n node.key.type === TSESTree.AST_NODE_TYPES.Identifier;\n\nconst isExcludedField = (node: InstanceField, component: boolean): boolean =>\n node.static ||\n node.declare ||\n node.override ||\n node.decorators.length > 0 ||\n (!component && node.accessibility !== 'private');\n\nconst isManagedField = (\n node: InstanceField,\n imports: AngularImports\n): boolean => {\n if (node.value?.type !== TSESTree.AST_NODE_TYPES.CallExpression) {\n return false;\n }\n\n const name = angularName(node.value.callee, imports);\n\n return typeof name === 'string' && managedApis[name] === true;\n};\n\nconst field = (\n node: TSESTree.ClassElement,\n imports: AngularImports,\n component: boolean\n): MemberCandidate | null => {\n if (\n isInstanceField(node) &&\n !isExcludedField(node, component) &&\n !isManagedField(node, imports)\n ) {\n return { messageId: 'unusedField', name: node.key.name, node };\n }\n\n return null;\n};\n\nconst isExcludedMethod = (\n node: InstanceMethod,\n component: boolean\n): boolean =>\n node.static ||\n node.override ||\n node.decorators.length > 0 ||\n node.computed ||\n node.kind !== 'method' ||\n node.value.body === null ||\n lifecycleHooks[node.key.name] === true ||\n (!component && node.accessibility !== 'private');\n\nconst method = (\n node: TSESTree.ClassElement,\n component: boolean\n): MemberCandidate | null => {\n if (isInstanceMethod(node) && !isExcludedMethod(node, component)) {\n return { messageId: 'unusedMethod', name: node.key.name, node };\n }\n\n return null;\n};\n\nexport const addAngularImport = (\n node: TSESTree.ImportDeclaration,\n imports: AngularImports\n): void => {\n if (node.source.value !== '@angular/core' || node.importKind === 'type') {\n return;\n }\n\n for (const specifier of node.specifiers) {\n if (specifier.type === TSESTree.AST_NODE_TYPES.ImportNamespaceSpecifier) {\n imports.set(specifier.local.name, null);\n } else if (\n specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier &&\n specifier.importKind !== 'type'\n ) {\n const importedName =\n specifier.imported.type === TSESTree.AST_NODE_TYPES.Identifier\n ? specifier.imported.name\n : specifier.imported.value;\n\n imports.set(specifier.local.name, importedName);\n }\n }\n};\n\nexport const reportUnusedMembers = (\n context: RuleContext,\n imports: AngularImports,\n classes: ClassEntry[],\n dynamicClasses: DynamicClasses\n): void => {\n for (const entry of classes) {\n const ngClass = angularClass(entry.node, imports);\n\n if (!ngClass || dynamicClasses.has(entry)) {\n continue;\n }\n\n const members: MemberCandidate[] = [];\n\n for (const node of entry.node.body.body) {\n const candidate =\n field(node, imports, ngClass.component) ?? method(node, ngClass.component);\n\n if (candidate) {\n members.push(candidate);\n }\n }\n\n if (members.length === 0) {\n continue;\n }\n\n const unreadMembers = members.filter(\n (candidate) => !entry.reads.has(candidate.name)\n );\n\n if (unreadMembers.length === 0) {\n continue;\n }\n\n const reads = metadataReads(\n ngClass.metadata,\n ngClass.component,\n context.filename,\n unreadMembers.map((candidate) => candidate.name)\n );\n\n if (!reads) {\n continue;\n }\n\n for (const candidate of unreadMembers) {\n if (!reads.has(candidate.name)) {\n context.report({\n data: { name: candidate.name },\n messageId: candidate.messageId,\n node: candidate.node.key\n });\n }\n }\n }\n};\n", "import { readFileSync, statSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\n\nimport {\n Lexer,\n ParseLocation,\n ParseSourceFile,\n ParseSourceSpan,\n Parser,\n R3TargetBinder,\n parseTemplate\n} from '@angular/compiler';\nimport type { DirectiveMeta } from '@angular/compiler';\nimport { TSESTree } from '@typescript-eslint/utils';\nimport { collectAngularExpressionReads } from './utils/angular-expression-reads.util.js';\n\ntype ExternalTemplateCache = {\n readonly reads: Set<string> | null;\n readonly version: string;\n};\n\nconst externalTemplates = new Map<string, ExternalTemplateCache>();\nconst parser = new Parser(new Lexer());\nconst templateBinder = new R3TargetBinder<DirectiveMeta>(null);\n\nconst text = (node: TSESTree.Node | null | undefined): string | null => {\n if (\n node?.type === TSESTree.AST_NODE_TYPES.Literal &&\n typeof node.value === 'string'\n ) {\n return node.value;\n }\n\n return node?.type === TSESTree.AST_NODE_TYPES.TemplateLiteral &&\n node.expressions.length === 0\n ? node.quasis[0].value.cooked\n : null;\n};\n\nconst templateReads = (\n template: string,\n filename: string\n): Set<string> | null => {\n try {\n const result = parseTemplate(template, filename);\n\n if (result.errors?.length) {\n return null;\n }\n\n return collectAngularExpressionReads(\n result.nodes,\n templateBinder.bind({ template: result.nodes }),\n false\n );\n } catch {\n return null;\n }\n};\n\nconst externalTemplateReads = (filename: string): Set<string> | null => {\n try {\n const stats = statSync(filename, { bigint: true });\n const version = `${stats.mtimeNs}:${stats.size}`;\n const cached = externalTemplates.get(filename);\n\n if (cached?.version === version) {\n return cached.reads;\n }\n\n const reads = templateReads(readFileSync(filename, 'utf8'), filename);\n\n externalTemplates.set(filename, { reads, version });\n return reads;\n } catch {\n return null;\n }\n};\n\nconst expressionReads = (\n expression: string,\n filename: string,\n action: boolean\n): Set<string> | null => {\n try {\n const file = new ParseSourceFile(expression, filename);\n const start = new ParseLocation(file, 0, 0, 0);\n const span = new ParseSourceSpan(start, start.moveBy(expression.length));\n const result = action\n ? parser.parseAction(expression, span, 0)\n : parser.parseBinding(expression, span, 0);\n\n if (result.errors.length > 0) {\n return null;\n }\n\n return collectAngularExpressionReads([result], undefined, action);\n } catch {\n return null;\n }\n};\n\nconst addReads = (target: Set<string>, source: Set<string> | null): boolean => {\n if (!source) {\n return false;\n }\n\n for (const name of source) {\n target.add(name);\n }\n\n return true;\n};\n\nconst key = (property: TSESTree.ObjectLiteralElement): string | null => {\n if (property.type !== TSESTree.AST_NODE_TYPES.Property || property.computed) {\n return null;\n }\n\n return property.key.type === TSESTree.AST_NODE_TYPES.Identifier\n ? property.key.name\n : text(property.key);\n};\n\nconst metadataValue = (\n metadata: TSESTree.ObjectExpression,\n name: string\n): TSESTree.Property['value'] | undefined => {\n for (const property of metadata.properties) {\n if (\n property.type === TSESTree.AST_NODE_TYPES.Property &&\n key(property) === name\n ) {\n return property.value;\n }\n }\n\n return undefined;\n};\n\nconst hostPropertyReads = (\n property: TSESTree.Property,\n reads: Set<string>,\n filename: string\n): boolean => {\n const name = key(property);\n const expression = text(property.value);\n\n if (name === null || expression === null) {\n return false;\n }\n\n if (name.startsWith('[')) {\n return addReads(reads, expressionReads(expression, filename, false));\n }\n\n if (name.startsWith('(')) {\n return addReads(reads, expressionReads(expression, filename, true));\n }\n\n return true;\n};\n\nconst hostReads = (\n host: TSESTree.Node | undefined,\n reads: Set<string>,\n filename: string\n): boolean => {\n if (!host) {\n return true;\n }\n\n if (\n host.type !== TSESTree.AST_NODE_TYPES.ObjectExpression ||\n host.properties.some((property) => key(property) === null)\n ) {\n return false;\n }\n\n for (const property of host.properties) {\n if (\n property.type !== TSESTree.AST_NODE_TYPES.Property ||\n !hostPropertyReads(property, reads, filename)\n ) {\n return false;\n }\n }\n\n return true;\n};\n\nconst inlineTemplateReads = (\n template: TSESTree.Node | undefined,\n reads: Set<string>,\n filename: string\n): boolean => {\n if (!template) {\n return true;\n }\n\n const source = text(template);\n\n return source !== null && addReads(reads, templateReads(source, filename));\n};\n\nconst externalTemplatePropertyReads = (\n templateUrl: TSESTree.Node | undefined,\n reads: Set<string>,\n filename: string\n): boolean => {\n if (!templateUrl) {\n return true;\n }\n\n const url = text(templateUrl);\n\n return (\n url !== null &&\n addReads(reads, externalTemplateReads(resolve(dirname(filename), url)))\n );\n};\n\nconst componentTemplateReads = (\n metadata: TSESTree.ObjectExpression,\n reads: Set<string>,\n filename: string\n): boolean => {\n const template = metadataValue(metadata, 'template');\n const templateUrl = metadataValue(metadata, 'templateUrl');\n\n return (\n inlineTemplateReads(template, reads, filename) &&\n externalTemplatePropertyReads(templateUrl, reads, filename)\n );\n};\n\nexport const metadataReads = (\n metadata: TSESTree.ObjectExpression,\n component: boolean,\n filename: string,\n remainingNames: string[]\n): Set<string> | null => {\n if (metadata.properties.some((property) => key(property) === null)) {\n return null;\n }\n\n const reads = new Set<string>();\n\n if (!hostReads(metadataValue(metadata, 'host'), reads, filename)) {\n return null;\n }\n\n if (\n (component && remainingNames.every((name) => reads.has(name))) ||\n !component ||\n componentTemplateReads(metadata, reads, filename)\n ) {\n return reads;\n }\n\n return null;\n};\n", "import {\n CombinedRecursiveAstVisitor,\n ImplicitReceiver,\n KeyedRead,\n PropertyRead,\n SafeKeyedRead,\n SafePropertyRead,\n ThisReceiver\n} from '@angular/compiler';\nimport type { Binary, BoundTarget, DirectiveMeta } from '@angular/compiler';\n\ntype VisitableNode = Parameters<CombinedRecursiveAstVisitor['visit']>[0];\n\nclass ReadCollector extends CombinedRecursiveAstVisitor {\n readonly reads = new Set<string>();\n\n constructor(\n private readonly boundTarget: BoundTarget<DirectiveMeta> | undefined,\n private readonly action: boolean\n ) {\n super();\n }\n\n private record(node: PropertyRead | SafePropertyRead): void {\n if (node.receiver instanceof ThisReceiver) {\n this.reads.add(node.name);\n return;\n }\n\n if (\n node.receiver instanceof ImplicitReceiver &&\n (!this.action || node.name !== '$event') &&\n !this.boundTarget?.getExpressionTarget(node)\n ) {\n this.reads.add(node.name);\n }\n }\n\n override visitBinary(node: Binary, context: unknown): unknown {\n if (node.operation !== '=') {\n return super.visitBinary(node, context);\n }\n\n if (\n node.left instanceof PropertyRead ||\n node.left instanceof SafePropertyRead ||\n node.left instanceof KeyedRead ||\n node.left instanceof SafeKeyedRead\n ) {\n this.visit(node.left.receiver);\n }\n\n if (node.left instanceof KeyedRead || node.left instanceof SafeKeyedRead) {\n this.visit(node.left.key);\n }\n\n this.visit(node.right);\n return undefined;\n }\n\n override visitPropertyRead(node: PropertyRead, context: unknown): unknown {\n this.record(node);\n return super.visitPropertyRead(node, context);\n }\n\n override visitSafePropertyRead(\n node: SafePropertyRead,\n context: unknown\n ): unknown {\n this.record(node);\n return super.visitSafePropertyRead(node, context);\n }\n}\n\nexport const collectAngularExpressionReads = (\n nodes: VisitableNode[],\n boundTarget: BoundTarget<DirectiveMeta> | undefined,\n action: boolean\n): Set<string> => {\n const collector = new ReadCollector(boundTarget, action);\n\n for (const node of nodes) {\n collector.visit(node);\n }\n\n return collector.reads;\n};\n", "import { TSESTree } from '@typescript-eslint/utils';\n\ntype TypeScriptExpressionWrapper =\n | TSESTree.TSAsExpression\n | TSESTree.TSInstantiationExpression\n | TSESTree.TSNonNullExpression\n | TSESTree.TSSatisfiesExpression\n | TSESTree.TSTypeAssertion;\n\ntype DestructuringNode =\n | TSESTree.AssignmentExpression\n | TSESTree.VariableDeclarator;\n\ntype DestructuringParts = {\n readonly pattern: TSESTree.BindingName | TSESTree.Expression;\n readonly source: TSESTree.Expression | null;\n};\n\nconst isTypeScriptExpressionWrapper = (\n node: TSESTree.Node\n): node is TypeScriptExpressionWrapper => {\n switch (node.type) {\n case TSESTree.AST_NODE_TYPES.TSAsExpression:\n case TSESTree.AST_NODE_TYPES.TSInstantiationExpression:\n case TSESTree.AST_NODE_TYPES.TSNonNullExpression:\n case TSESTree.AST_NODE_TYPES.TSSatisfiesExpression:\n case TSESTree.AST_NODE_TYPES.TSTypeAssertion:\n return true;\n default:\n return false;\n }\n};\n\nconst unwrapTypeScriptExpression = (\n node: TSESTree.Expression | null\n): TSESTree.Expression | null => {\n let current = node;\n\n while (current && isTypeScriptExpressionWrapper(current)) {\n current = current.expression;\n }\n\n return current;\n};\n\nexport const isThisExpression = (\n node: TSESTree.Expression | null\n): boolean =>\n unwrapTypeScriptExpression(node)?.type ===\n TSESTree.AST_NODE_TYPES.ThisExpression;\n\nconst isPatternTarget = (\n parent: TSESTree.Node | undefined,\n child: TSESTree.Node\n): boolean => {\n switch (parent?.type) {\n case TSESTree.AST_NODE_TYPES.ArrayPattern:\n return parent.elements.some((element) => element === child);\n case TSESTree.AST_NODE_TYPES.AssignmentPattern:\n return parent.left === child;\n case TSESTree.AST_NODE_TYPES.ObjectPattern:\n return parent.properties.some((property) => property === child);\n case TSESTree.AST_NODE_TYPES.Property:\n return (\n parent.value === child &&\n parent.parent.type === TSESTree.AST_NODE_TYPES.ObjectPattern\n );\n case TSESTree.AST_NODE_TYPES.RestElement:\n return parent.argument === child;\n default:\n return false;\n }\n};\n\nconst isSimpleAssignmentTarget = (\n parent: TSESTree.Node | undefined,\n current: TSESTree.Node\n): boolean =>\n parent?.type === TSESTree.AST_NODE_TYPES.AssignmentExpression &&\n parent.left === current &&\n parent.operator === '=';\n\nconst isLoopTarget = (\n parent: TSESTree.Node | undefined,\n current: TSESTree.Node\n): boolean =>\n (parent?.type === TSESTree.AST_NODE_TYPES.ForInStatement ||\n parent?.type === TSESTree.AST_NODE_TYPES.ForOfStatement) &&\n parent.left === current;\n\nconst isDirectWrite = (node: TSESTree.MemberExpression): boolean => {\n let current: TSESTree.Node = node;\n let parent: TSESTree.Node | undefined = node.parent;\n\n while (\n parent &&\n isTypeScriptExpressionWrapper(parent) &&\n parent.expression === current\n ) {\n current = parent;\n parent = parent.parent;\n }\n\n return (\n isSimpleAssignmentTarget(parent, current) ||\n (parent?.type === TSESTree.AST_NODE_TYPES.UnaryExpression &&\n parent.operator === 'delete')\n );\n};\n\nconst isDestructuringOrLoopTarget = (\n node: TSESTree.MemberExpression\n): boolean => {\n let current: TSESTree.Node = node;\n let parent: TSESTree.Node | undefined = node.parent;\n let patternTarget = false;\n\n while (parent) {\n const wrapper =\n isTypeScriptExpressionWrapper(parent) && parent.expression === current;\n const pattern = isPatternTarget(parent, current);\n\n if (!wrapper && !pattern) {\n break;\n }\n\n if (pattern) {\n patternTarget = true;\n }\n\n current = parent;\n parent = parent.parent;\n }\n\n return (\n (patternTarget && isSimpleAssignmentTarget(parent, current)) ||\n isLoopTarget(parent, current)\n );\n};\n\nexport const isWriteOnly = (node: TSESTree.MemberExpression): boolean =>\n isDirectWrite(node) || isDestructuringOrLoopTarget(node);\n\nconst destructuringParts = (\n node: DestructuringNode\n): DestructuringParts | null => {\n if (node.type === TSESTree.AST_NODE_TYPES.VariableDeclarator) {\n return { pattern: node.id, source: node.init };\n }\n\n if (node.operator === '=') {\n return { pattern: node.left, source: node.right };\n }\n\n return null;\n};\n\nconst propertyName = (\n property: TSESTree.Property | TSESTree.RestElement\n): string | null => {\n if (\n property.type !== TSESTree.AST_NODE_TYPES.Property ||\n property.computed\n ) {\n return null;\n }\n\n if (property.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return property.key.name;\n }\n\n return property.key.type === TSESTree.AST_NODE_TYPES.Literal &&\n typeof property.key.value === 'string'\n ? property.key.value\n : null;\n};\n\nexport const destructuredThisReads = (\n node: DestructuringNode\n): string[] | null | undefined => {\n const parts = destructuringParts(node);\n\n if (\n !parts ||\n parts.pattern.type !== TSESTree.AST_NODE_TYPES.ObjectPattern ||\n !isThisExpression(parts.source)\n ) {\n return undefined;\n }\n\n const reads: string[] = [];\n\n for (const property of parts.pattern.properties) {\n const name = propertyName(property);\n\n if (name === null) {\n return null;\n }\n\n reads.push(name);\n }\n\n return reads;\n};\n", "import { configs } from '@nx/eslint-plugin';\nimport stylistic from '@stylistic/eslint-plugin';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\n\nexport const base = defineConfig([\n { extends: [...configs['flat/base']] },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [importPluginX.flatConfigs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [stylistic.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'no-param-reassign': 'error',\n 'no-alert': 'error',\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\n 'no-debugger': 'error',\n eqeqeq: ['error', 'always', { null: 'ignore' }],\n curly: ['error', 'multi'],\n 'prefer-const': ['error', { destructuring: 'all' }],\n 'no-var': 'error',\n 'object-shorthand': 'error',\n 'prefer-arrow-callback': 'error',\n 'no-useless-concat': 'error',\n 'prefer-template': 'error',\n 'no-nested-ternary': 'error',\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\n 'no-multi-assign': 'error', // Disallow chaining assignments\n radix: 'error', // Require radix parameter for parseInt()\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\n complexity: ['warn', 10], // Warn if function complexity is high\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\n 'max-lines-per-function': [\n 'warn',\n { max: 50, skipBlankLines: true, skipComments: true }\n ], // Warn on long functions\n 'max-params': ['warn', 4], // Warn on functions with many parameters\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\n 'class-methods-use-this': 'error',\n 'no-underscore-dangle': 'error',\n 'max-len': [\n 'error',\n {\n code: 135,\n ignoreComments: true\n }\n ],\n 'spaced-comment': [\n 2,\n 'always',\n {\n block: {\n exceptions: ['*']\n }\n }\n ],\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'export',\n next: ['export', 'const']\n },\n {\n blankLine: 'always',\n prev: ['const', 'let', 'var'],\n next: '*'\n },\n {\n blankLine: 'any',\n prev: ['const', 'let', 'var'],\n next: ['const', 'let', 'var']\n },\n {\n blankLine: 'always',\n prev: '*',\n next: [\n 'for',\n 'if',\n 'return',\n 'throw',\n 'switch',\n 'try',\n 'class',\n 'function'\n ]\n }\n ],\n '@stylistic/comma-dangle': ['error', 'never'],\n '@stylistic/indent': [\n 'error',\n 2,\n {\n offsetTernaryExpressions: true,\n SwitchCase: 1,\n ignoredNodes: [\n 'TSTypeParameterInstantiation',\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\n ]\n }\n ],\n 'sort-imports': [\n 'error',\n {\n ignoreCase: false,\n ignoreDeclarationSort: true,\n ignoreMemberSort: false,\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\n allowSeparatedGroups: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts',\n '**/*.html'\n ],\n rules: {\n 'max-lines': [\n 'error',\n {\n max: 150,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n 'max-lines-per-function': 'off',\n complexity: ['warn', { max: 3 }],\n 'max-lines': [\n 'error',\n {\n max: 300,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n 'max-classes-per-file': 'off'\n }\n },\n {\n files: ['**/*.state.ts'],\n rules: {\n 'class-methods-use-this': 'off'\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nexport const javascript = defineConfig({\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\n extends: [...(configs['flat/javascript'] as Config[])]\n});\n", "import jsonPlugin from '@eslint/json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n plugins: { json: jsonPlugin }\n },\n {\n files: ['**/*.json'],\n language: 'json/json',\n extends: [jsonPlugin.configs.recommended]\n }\n]);\n", "import eslintConfigPrettier from 'eslint-config-prettier';\nimport { defineConfig } from 'eslint/config';\n\nexport const prettier = defineConfig([eslintConfigPrettier]);\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\nimport { defineConfig } from 'eslint/config';\n\nexport const rxjs = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n extends: [rxjsEslint.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n rxjs: rxjsEslint\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'rxjs/prefer-observer': 'error',\n 'rxjs/finnish': 'warn',\n 'rxjs/no-ignored-subscription': 'warn',\n 'rxjs/no-ignored-error': 'warn',\n 'rxjs/no-unsafe-switchmap': 'error',\n 'rxjs/no-unsafe-takeuntil': 'error',\n 'rxjs/no-unsafe-catch': 'error',\n 'rxjs/no-unsafe-first': 'error',\n 'rxjs/no-topromise': 'error',\n 'rxjs/throw-error': 'error',\n 'rxjs/no-async-subscribe': 'off',\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\n }\n },\n {\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\n rules: {\n 'rxjs/no-ignored-subscription': 'off',\n 'rxjs/no-subscribe-handlers': 'off'\n }\n }\n]);\n", "import storybookEslint from 'eslint-plugin-storybook';\nimport { defineConfig } from 'eslint/config';\n\nexport const storybook = defineConfig([\n {\n ignores: ['!.storybook'],\n files: ['**/*.stories.ts'],\n extends: [storybookEslint.configs['flat/recommended']],\n rules: {\n 'storybook/csf-component': 'warn', // Ensure component property is set\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\nimport importPluginX from 'eslint-plugin-import-x';\nimport { defineConfig } from 'eslint/config';\nimport type { Config } from 'eslint/config';\n\nimport explicitAccessibilityRule from './rules/explicit-accessibility.js';\n\nconst localTypescriptRules: Record<string, unknown> = {\n rules: {\n 'explicit-accessibility': explicitAccessibilityRule\n }\n};\n\nexport const typescript = defineConfig([\n // NOTE: Checks for 'prettier' and 'eslint-plugin-prettier'\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n extends: [\n importPluginX.flatConfigs.typescript,\n ...(configs['flat/typescript'] as Config[])\n ]\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n plugins: { local: localTypescriptRules },\n rules: {\n 'local/explicit-accessibility': 'error',\n '@typescript-eslint/explicit-member-accessibility': 'error',\n '@typescript-eslint/explicit-function-return-type': 'error',\n '@typescript-eslint/no-empty-function': 'error',\n '@typescript-eslint/no-unused-vars': 'error',\n '@typescript-eslint/no-use-before-define': 'error',\n\n // A. Eliminating `any` (already covered by strict-type-checked, but explicit for clarity)\n '@typescript-eslint/no-explicit-any': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n\n // New v8 type-safety rules (replacements for deprecated ban-types)\n '@typescript-eslint/no-empty-object-type': 'error', // Bans confusing {} type\n '@typescript-eslint/no-unsafe-function-type': 'error', // Bans Function type\n '@typescript-eslint/no-wrapper-object-types': 'error', // Bans Number, String, Boolean wrappers\n\n // B. Explicit Annotations (partially covered, explicit module boundaries is key)\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n // Consider enabling if maximum explicitness is desired, even if verbose:\n\n // C. Null/Undefined Safety (Requires strictNullChecks)\n '@typescript-eslint/no-non-null-assertion': 'error',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n\n // D. Promise Handling (Supplementing plugin:promise/recommended)\n '@typescript-eslint/no-floating-promises': [\n 'error',\n { ignoreVoid: true }\n ],\n '@typescript-eslint/no-misused-promises': 'warn', // Already in recommended-type-checked\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/await-thenable': 'error', // Already in recommended-type-checked\n\n // E. Best Practices & Potential Errors (Some covered by presets, fine-tuning here)\n '@typescript-eslint/no-inferrable-types': 'warn', // Keep as warn or disable if inference is preferred\n '@typescript-eslint/no-require-imports': 'error', // Use ES modules (replaces deprecated no-var-requires)\n '@typescript-eslint/only-throw-error': 'error', // Replaces deprecated no-throw-literal\n '@typescript-eslint/no-array-delete': 'error', // Prevents delete arr[0]\n '@typescript-eslint/return-await': ['error', 'in-try-catch'], // Better stack traces in try/catch\n '@typescript-eslint/require-await': 'error',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n { allowNumber: true, allowBoolean: true }\n ], // Allow numbers/booleans in templates\n '@typescript-eslint/restrict-plus-operands': 'error', // Enforce consistent types for '+'\n '@typescript-eslint/prefer-as-const': 'error',\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/switch-exhaustiveness-check': 'error', // Ensure switch on unions is exhaustive\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n { allowShortCircuit: true, allowTernary: true }\n ],\n '@typescript-eslint/no-useless-constructor': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], // Prefer dot notation where possible\n\n // Strict type-checked rules\n '@typescript-eslint/no-unnecessary-condition': 'error', // Catches always-true/false conditions\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true, ignoreVoidOperator: true }\n ], // Prevent confusing void usage\n '@typescript-eslint/no-dynamic-delete': 'error', // Use Map instead of delete obj[key]\n '@typescript-eslint/no-extraneous-class': [\n 'error',\n { allowWithDecorator: true }\n ], // Allow Angular classes\n '@typescript-eslint/no-invalid-void-type': 'error', // Restrict void to return types\n '@typescript-eslint/unified-signatures': 'error', // Merge overloads where possible\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', // Forbids foo! ?? bar\n\n // Stylistic type-checked rules\n '@typescript-eslint/prefer-find': 'error', // Use find() instead of filter()[0]\n '@typescript-eslint/prefer-for-of': 'error', // Modern iteration\n '@typescript-eslint/prefer-includes': 'error', // indexOf() \u2192 includes()\n '@typescript-eslint/prefer-string-starts-ends-with': 'error', // Modern string methods\n '@typescript-eslint/prefer-regexp-exec': 'error', // Better regex performance\n\n // F. Consistency & Style (Some covered by stylistic-type-checked)\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\n ],\n '@typescript-eslint/naming-convention': [\n 'error',\n {\n selector: 'objectLiteralProperty',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'objectLiteralProperty',\n format: ['camelCase', 'snake_case', 'PascalCase']\n },\n {\n selector: 'parameter',\n format: ['camelCase'],\n leadingUnderscore: 'allow'\n },\n { selector: 'default', format: ['camelCase'] },\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\n { selector: 'function', format: ['camelCase'] },\n { selector: 'typeLike', format: ['PascalCase'] },\n {\n selector: 'property',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'property',\n format: ['camelCase', 'PascalCase', 'snake_case']\n }\n ],\n 'import-x/order': [\n 'error',\n {\n groups: [\n 'builtin',\n 'external',\n 'internal',\n ['parent', 'sibling'],\n 'index',\n 'unknown'\n ],\n pathGroups: [\n {\n pattern: '@angular/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@nestjs/**',\n group: 'builtin',\n position: 'before'\n },\n {\n pattern: '@shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@backend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@frontend/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/shared/**',\n group: 'internal',\n position: 'before'\n },\n {\n pattern: '@*/frontend/**',\n group: 'internal',\n position: 'after'\n },\n {\n pattern: '@*/backend/**',\n group: 'internal',\n position: 'after'\n }\n ],\n pathGroupsExcludedImportTypes: ['builtin'],\n 'newlines-between': 'always',\n alphabetize: { order: 'asc', caseInsensitive: true }\n }\n ],\n 'import-x/no-unresolved': 'error',\n 'import-x/no-duplicates': 'error',\n 'import-x/prefer-default-export': 'off',\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\n 'import-x/newline-after-import': 'error',\n 'import-x/first': 'error',\n 'import-x/no-mutable-exports': 'error',\n 'import-x/no-self-import': 'error', // Prevents modules importing themselves\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }], // Prevents circular dependencies\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'], // Consistent type imports\n 'import-x/no-anonymous-default-export': 'error' // Improve code searchability\n },\n settings: {\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true\n })\n ]\n }\n },\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n rules: {\n '@typescript-eslint/prefer-readonly': 'error'\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-extraneous-class': 'off'\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n '@typescript-eslint/unbound-method': 'off',\n '@typescript-eslint/consistent-type-assertions': 'off'\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n '@typescript-eslint/consistent-type-assertions': 'off',\n '@typescript-eslint/naming-convention': 'off'\n }\n }\n]);\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\n);\n\ntype AccessibilityLevel = 'public' | 'private' | 'protected';\n\ntype Options = [\n {\n defaultAccessibility?: AccessibilityLevel;\n }\n];\n\nconst defaultOptions: Options[0] = {\n defaultAccessibility: 'private'\n};\n\nconst getNodeName = (\n node: TSESTree.Node | TSESTree.Token | null | undefined\n): string => {\n if (!node) {\n return '<unknown>';\n }\n\n /*\n * MethodDefinition or PropertyDefinition (check 'key' first)\n * Note: Check 'key' before 'kind' because MethodDefinition has both\n */\n if ('key' in node && node.key) {\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return node.key.name;\n }\n // Handle computed property names, private identifiers (#name), etc. if needed\n if (node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier) {\n return `#${node.key.name}`;\n }\n return '<computed/complex key>';\n }\n\n // Constructor specific check (if key check didn't catch it - unlikely for MethodDefinition)\n if ('kind' in node && node.kind === 'constructor') {\n return 'constructor';\n }\n\n // TSParameterProperty - handle its 'parameter' property\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) {\n const param = node.parameter; // Assign to variable for clarity & potentially better inference\n\n // Handle different parameter kinds:\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.name;\n }\n if (param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\n // Check the left side of the assignment\n if (param.left.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return param.left.name; // Name is on the identifier being assigned to\n }\n /*\n * Parameter is an assignment pattern with destructuring (ArrayPattern/ObjectPattern)\n * You might want more sophisticated logic here to extract a name\n */\n return '<destructured parameter>';\n }\n return '<complex parameter>';\n }\n\n return '<unknown>';\n};\n\nexport default createRule<Options, 'missingAccessibility'>({\n name: 'explicit-accessibility',\n meta: {\n type: 'suggestion',\n docs: {\n description: 'Require explicit accessibility modifiers on class members'\n },\n fixable: 'code',\n schema: [\n {\n type: 'object',\n properties: {\n defaultAccessibility: {\n type: 'string',\n enum: ['public', 'private', 'protected'],\n description: 'The accessibility modifier to add if one is missing.'\n }\n },\n additionalProperties: false\n }\n ],\n messages: {\n missingAccessibility:\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\"\n }\n },\n defaultOptions: [defaultOptions],\n\n create(context, [options]) {\n const { defaultAccessibility } = { ...defaultOptions, ...options };\n const sourceCode = context.sourceCode;\n\n function checkNode(\n node:\n | TSESTree.MethodDefinition\n | TSESTree.PropertyDefinition\n | TSESTree.TSParameterProperty\n ): void {\n if (node.accessibility) {\n return; // Already has modifier\n }\n\n let reportNode: TSESTree.Node | TSESTree.Token = node;\n const name = getNodeName(node);\n // Adjust report node for better highlighting\n if (\n node.type === TSESTree.AST_NODE_TYPES.MethodDefinition ||\n node.type === TSESTree.AST_NODE_TYPES.PropertyDefinition\n ) {\n reportNode = node.key;\n } else {\n const param = node.parameter;\n if (param.type === TSESTree.AST_NODE_TYPES.Identifier) {\n reportNode = param;\n } else if (\n param.type === TSESTree.AST_NODE_TYPES.AssignmentPattern &&\n param.left.type === TSESTree.AST_NODE_TYPES.Identifier\n ) {\n reportNode = param.left;\n }\n // Keep reportNode as the TSParameterProperty node itself if param isn't simple identifier\n }\n\n context.report({\n node: reportNode ?? node,\n messageId: 'missingAccessibility',\n data: { name },\n fix(fixer) {\n let insertText = `${defaultAccessibility} `;\n\n let tokenToInsertBefore: TSESTree.Token | null;\n if (node.decorators.length > 0) {\n const lastDecorator = node.decorators[node.decorators.length - 1];\n tokenToInsertBefore = sourceCode.getTokenAfter(lastDecorator);\n } else {\n tokenToInsertBefore = sourceCode.getFirstToken(node);\n }\n\n // Parameter properties need special handling if they also have 'readonly'\n if (\n node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty &&\n node.readonly\n ) {\n // If readonly exists without accessibility, insert accessibility *before* readonly\n const firstToken = sourceCode.getFirstToken(node);\n if (firstToken?.value === 'readonly') {\n // double check it's the readonly token\n tokenToInsertBefore = firstToken;\n }\n // If insertion point wasn't decorators, use first token (which should be readonly)\n }\n\n if (!tokenToInsertBefore) return null;\n\n /*\n * If the token immediately after the insertion point isn't whitespace, add a space.\n * (Handles case where tokenToInsertBefore is the last decorator token)\n */\n const tokenAfterInsertion = sourceCode.getTokenAfter(\n tokenToInsertBefore,\n { includeComments: false }\n );\n const textBetween = sourceCode.text.slice(\n tokenToInsertBefore.range[1],\n tokenAfterInsertion?.range[0]\n );\n if (!/^\\s/.test(textBetween)) {\n insertText = ` ${insertText}`; // Add leading space if needed after decorator\n }\n\n return fixer.insertTextBefore(tokenToInsertBefore, insertText);\n }\n });\n }\n\n return {\n MethodDefinition(node: TSESTree.MethodDefinition): void {\n checkNode(node);\n },\n\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\n checkNode(node);\n },\n\n TSParameterProperty(node: TSESTree.TSParameterProperty): void {\n checkNode(node);\n }\n };\n }\n});\n", "import vitestEslint from '@vitest/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\n\nconst vitestPlugin: Record<string, object> = {\n vitest: vitestEslint\n};\n\nexport const vitest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\n plugins: vitestPlugin,\n rules: {\n ...vitestEslint.configs.recommended.rules,\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n // Matcher improvements\n 'vitest/prefer-to-be': 'error',\n 'vitest/prefer-to-contain': 'error',\n 'vitest/prefer-to-have-length': 'error',\n 'vitest/prefer-comparison-matcher': 'error',\n 'vitest/prefer-strict-equal': 'warn',\n // Test quality\n 'vitest/prefer-spy-on': 'error',\n 'vitest/prefer-hooks-on-top': 'error',\n 'vitest/prefer-each': 'warn',\n 'vitest/no-test-return-statement': 'error',\n 'vitest/prefer-mock-promise-shorthand': 'error'\n }\n }\n]);\n", "import playwrightEslint from 'eslint-plugin-playwright';\nimport { defineConfig } from 'eslint/config';\n\nexport const playwright = defineConfig([\n {\n ...playwrightEslint.configs['flat/recommended'],\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\n rules: {\n ...playwrightEslint.configs['flat/recommended'].rules,\n // Locator best practices\n 'playwright/prefer-locator': 'error',\n 'playwright/prefer-native-locators': 'error',\n 'playwright/no-nth-methods': 'warn',\n // Matcher improvements\n 'playwright/prefer-to-be': 'error',\n 'playwright/prefer-to-have-count': 'error',\n 'playwright/prefer-to-have-length': 'error',\n 'playwright/prefer-comparison-matcher': 'error',\n // Test structure\n 'playwright/prefer-hooks-on-top': 'error',\n 'playwright/require-top-level-describe': 'warn'\n }\n }\n]);\n", "import boundariesPlugin from 'eslint-plugin-boundaries';\nimport { defineConfig } from 'eslint/config';\n\nexport const boundaries = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n boundaries: boundariesPlugin\n },\n settings: {\n 'boundaries/elements': [\n {\n type: 'feature',\n pattern: '**/feature/**'\n },\n {\n type: 'data-access',\n pattern: '**/data-access/**'\n },\n {\n type: 'domain-logic',\n pattern: '**/domain-logic/**'\n },\n {\n type: 'ui',\n pattern: '**/ui/**'\n },\n {\n type: 'common',\n pattern: '**/common/**'\n },\n {\n type: 'utils',\n pattern: '**/utils/**'\n }\n ],\n 'import/resolver': {\n typescript: {\n alwaysTryTypes: true\n }\n }\n },\n rules: {\n ...boundariesPlugin.configs.recommended.rules,\n 'boundaries/dependencies': [\n 'error',\n {\n default: 'disallow',\n message:\n '{{to.element.types}} is not allowed to be imported in {{from.element.types}}',\n policies: [\n {\n from: { element: { type: 'feature' } },\n allow: [\n { to: { element: { type: 'feature' } } },\n { to: { element: { type: 'ui' } } },\n { to: { element: { type: 'domain-logic' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'domain-logic' } },\n allow: [\n { to: { element: { type: 'domain-logic' } } },\n { to: { element: { type: 'data-access' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'data-access' } },\n allow: [\n { to: { element: { type: 'data-access' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'ui' } },\n allow: [\n { to: { element: { type: 'ui' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'utils' } },\n allow: [\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'common' } },\n allow: [{ to: { element: { type: 'common' } } }]\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/dependencies': 'off'\n }\n }\n]);\n"],
5
- "mappings": "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",
6
- "names": ["import_angular_eslint", "import_config", "import_utils", "import_utils", "import_compiler", "import_utils", "globals", "import_eslint_plugin", "import_config", "importPluginX", "stylistic", "import_eslint_plugin", "import_config", "import_config", "jsonPlugin", "import_config", "eslintConfigPrettier", "import_config", "rxjsEslint", "import_config", "storybookEslint", "import_eslint_plugin", "import_eslint_plugin_import_x", "import_config", "import_utils", "createRule", "importPluginX", "import_eslint_plugin", "import_config", "vitestEslint", "import_config", "playwrightEslint", "import_config", "boundariesPlugin"]
3
+ "sources": ["../../../../packages/lint-suite/src/eslint.ts", "../../../../packages/lint-suite/src/lib/angular-template.ts", "../../../../packages/lint-suite/src/lib/angular.ts", "../../../../packages/lint-suite/src/lib/rules/define-plugin.util.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/no-unused-angular-instance-fields.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-imports.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-member-candidates.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-managed-fields.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-reads.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-metadata-literals.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-template-parsing.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-expression-reads.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/utils/angular-read-target.util.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/angular/angular-class-fields.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-class-read-visitor.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-field-reads.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-lexical-this.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/rule/typescript/typescript-write-targets.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/project-usage.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-directive-index.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-reads.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-resolution.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-resolved-path.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/utils/type-property-symbols.util.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-read-chains.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-template-references.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/utils/read-chain-text.util.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-reads.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-angular-interface-methods.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-symbol-reads.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-destructuring-reads.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-assignment-pattern-elements.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-binding-pattern-elements.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-write-targets.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-type-dependencies.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/project-file-entry.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-discovery.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-component-scope.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-decorator-kind.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/angular/angular-metadata-values.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/utils/spec-file.util.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-staleness.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/typescript/typescript-candidate-names.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-classes.ts", "../../../../packages/lint-suite/src/lib/rules/no-unused-angular-instance-fields/project-usage/project-index-reconciliation.ts", "../../../../packages/lint-suite/src/lib/base.ts", "../../../../packages/lint-suite/src/lib/base-limits.ts", "../../../../packages/lint-suite/src/lib/base-practices.ts", "../../../../packages/lint-suite/src/lib/base-recommended.ts", "../../../../packages/lint-suite/src/lib/boundaries.ts", "../../../../packages/lint-suite/src/lib/javascript.ts", "../../../../packages/lint-suite/src/lib/json.ts", "../../../../packages/lint-suite/src/lib/playwright.ts", "../../../../packages/lint-suite/src/lib/prettier.ts", "../../../../packages/lint-suite/src/lib/rxjs.ts", "../../../../packages/lint-suite/src/lib/storybook.ts", "../../../../packages/lint-suite/src/lib/typescript.ts", "../../../../packages/lint-suite/src/lib/typescript-consistency.ts", "../../../../packages/lint-suite/src/lib/typescript-imports.ts", "../../../../packages/lint-suite/src/lib/typescript-overrides.ts", "../../../../packages/lint-suite/src/lib/typescript-recommended.ts", "../../../../packages/lint-suite/src/lib/typescript-safety.ts", "../../../../packages/lint-suite/src/lib/rules/explicit-accessibility/explicit-accessibility.ts", "../../../../packages/lint-suite/src/lib/rules/explicit-accessibility/common/explicit-accessibility.const.ts", "../../../../packages/lint-suite/src/lib/rules/no-inline-object-types/no-inline-object-types.ts", "../../../../packages/lint-suite/src/lib/rules/readonly-type-properties/readonly-type-properties.ts", "../../../../packages/lint-suite/src/lib/typescript-local-plugin.ts", "../../../../packages/lint-suite/src/lib/vitest.ts"],
4
+ "sourcesContent": ["import type { ConfigArray } from 'typescript-eslint';\n\nimport { angularTemplate } from './lib/angular-template.ts';\nimport { angular } from './lib/angular.ts';\nimport { base } from './lib/base.ts';\nimport { boundaries } from './lib/boundaries.ts';\nimport { javascript } from './lib/javascript.ts';\nimport { json } from './lib/json.ts';\nimport { playwright } from './lib/playwright.ts';\nimport { prettier } from './lib/prettier.ts';\nimport { rxjs } from './lib/rxjs.ts';\nimport { storybook } from './lib/storybook.ts';\nimport { typescript } from './lib/typescript.ts';\nimport { vitest } from './lib/vitest.ts';\n\nexport const recommended: ConfigArray = [\n ...base,\n ...javascript,\n ...typescript,\n ...json,\n ...boundaries,\n ...prettier // Must be last to disable formatting rules that conflict with Prettier\n];\n\nexport {\n base,\n javascript,\n typescript,\n angular,\n angularTemplate,\n rxjs,\n json,\n boundaries,\n storybook,\n vitest,\n playwright,\n prettier\n};\n", "import { configs } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\n\nexport const angularTemplate = defineConfig([\n {\n files: ['**/*.html'],\n extends: [...configs.templateAccessibility, ...configs.templateRecommended],\n rules: {\n '@angular-eslint/template/prefer-template-literal': 'error',\n '@angular-eslint/template/no-any': 'error',\n '@angular-eslint/template/no-duplicate-attributes': 'error',\n '@angular-eslint/template/button-has-type': 'error',\n '@angular-eslint/template/no-positive-tabindex': 'error',\n '@angular-eslint/template/valid-aria': 'error',\n '@angular-eslint/template/alt-text': 'error',\n '@angular-eslint/template/elements-content': 'error',\n '@angular-eslint/template/click-events-have-key-events': 'error',\n '@angular-eslint/template/mouse-events-have-key-events': 'error',\n '@angular-eslint/template/table-scope': 'error',\n '@angular-eslint/template/no-autofocus': 'error',\n '@angular-eslint/template/no-distracting-elements': 'error',\n '@angular-eslint/template/prefer-control-flow': 'error',\n '@angular-eslint/template/prefer-self-closing-tags': 'error',\n '@angular-eslint/template/prefer-ngsrc': 'error',\n '@angular-eslint/template/prefer-built-in-pipes': 'error',\n '@angular-eslint/template/no-interpolation-in-attributes': 'error',\n '@angular-eslint/template/no-nested-tags': 'error',\n '@angular-eslint/template/use-track-by-function': 'error',\n '@angular-eslint/template/label-has-associated-control': 'error',\n '@angular-eslint/template/prefer-at-else': 'error', // v21: @if/@else syntax\n '@angular-eslint/template/prefer-at-empty': 'error', // v21: @for/@empty syntax\n '@angular-eslint/template/prefer-contextual-for-variables': 'error', // v21: Use $index, $first, etc.\n '@angular-eslint/template/no-empty-control-flow': 'error', // v21: Catch incomplete refactoring\n '@angular-eslint/template/prefer-class-binding': 'error', // v21.2.0: Prefer [class] over ngClass\n '@angular-eslint/template/prefer-static-string-properties': 'error', // Reduce change detection\n '@angular-eslint/template/no-non-null-assertion': 'error', // Forbid `!` assertions in templates\n '@angular-eslint/template/no-inline-styles': 'error', // Forbid inline style=\"...\" attributes\n '@angular-eslint/template/conditional-complexity': [\n 'warn',\n { maxComplexity: 5 }\n ], // Template readability\n '@angular-eslint/template/attributes-order': [\n 'error',\n {\n alphabetical: true,\n order: [\n 'STRUCTURAL_DIRECTIVE', // e.g. `*ngIf=\"true\"`, `*ngFor=\"let item of items\"`\n 'TEMPLATE_REFERENCE', // e.g. `<input #inputRef>`\n 'INPUT_BINDING', // e.g. `[id]=\"3\"`, `[attr.colspan]=\"colspan\"`, [style.width.%]=\"100\", [@triggerName]=\"expression\", `bind-id=\"handleChange()\"`\n 'TWO_WAY_BINDING', // e.g. `[(id)]=\"id\"`, `bindon-id=\"id\"\n 'ATTRIBUTE_BINDING', // e.g. `<input required>`, `id=\"3\"`\n 'OUTPUT_BINDING' // e.g. `(idChange)=\"handleChange()\"`, `on-id=\"handleChange()\"`\n ]\n }\n ]\n }\n }\n]);\n", "import { configs, processInlineTemplates } from 'angular-eslint';\nimport { defineConfig } from 'eslint/config';\nimport globals from 'globals';\n\nimport { definePlugin } from './rules/define-plugin.util.ts';\nimport noUnusedInstanceFieldsRule from './rules/no-unused-angular-instance-fields/rule/no-unused-angular-instance-fields.ts';\n\nexport const lintSuiteAngularPlugin = definePlugin('lint-suite-angular', {\n 'no-unused-instance-fields': noUnusedInstanceFieldsRule\n});\n\nexport const angular = defineConfig([\n {\n files: ['**/*.ts'],\n extends: [...configs.tsRecommended],\n plugins: {\n 'lint-suite-angular': lintSuiteAngularPlugin\n },\n languageOptions: {\n globals: {\n ...globals.browser,\n ...globals.es2025,\n ...globals.node\n },\n parserOptions: {\n projectService: true\n }\n },\n processor: processInlineTemplates,\n rules: {\n 'lint-suite-angular/no-unused-instance-fields': [\n 'error',\n { analysis: 'project' }\n ],\n '@angular-eslint/prefer-on-push-component-change-detection': 'error', // v22: flags only explicit opt-out of OnPush (omission now means OnPush)\n '@angular-eslint/prefer-signals': 'error',\n '@angular-eslint/use-injectable-provided-in': 'error',\n '@angular-eslint/prefer-signal-model': 'error',\n '@angular-eslint/no-uncalled-signals': 'error',\n '@angular-eslint/prefer-host-metadata-property': 'error',\n '@angular-eslint/no-implicit-take-until-destroyed': 'error', // v21.2.0: Enforce explicit DestroyRef\n '@angular-eslint/no-async-lifecycle-method': 'error', // Prevent async lifecycle hooks\n '@angular-eslint/prefer-output-readonly': 'warn', // Prevent accidental reassignment\n '@angular-eslint/prefer-output-emitter-ref': 'warn', // Modern output() function over @Output()\n '@angular-eslint/sort-lifecycle-methods': 'warn', // Consistent lifecycle method ordering\n '@angular-eslint/computed-must-return': 'error', // Catch silent computed() bugs missing a return\n '@angular-eslint/no-duplicates-in-metadata-arrays': 'error', // Catch duplicate imports/providers in @Component/@NgModule\n '@angular-eslint/no-lifecycle-call': 'error', // Forbid manual this.ngOnInit() calls\n '@angular-eslint/require-lifecycle-on-prototype': 'error', // Lifecycle hooks must be methods, not arrow-fn fields\n '@angular-eslint/relative-url-prefix': 'error', // Require ./ in templateUrl/styleUrl for portability\n '@angular-eslint/use-component-selector': 'error', // All components must declare a selector\n '@angular-eslint/no-developer-preview': 'warn', // Flag APIs marked @developerPreview (no breaking-change policy)\n '@angular-eslint/no-experimental': 'warn' // Flag APIs marked @experimental\n }\n }\n]);\n", "import type { TSESLint } from '@typescript-eslint/utils';\nimport type { CompatiblePlugin } from 'typescript-eslint';\n\ntype Rules = NonNullable<TSESLint.FlatConfig.Plugin['rules']>;\n\nexport const definePlugin = (name: string, rules: Rules): CompatiblePlugin => {\n const meta = { name };\n const plugin = { meta, rules };\n\n return plugin;\n};\n", "import { ESLintUtils } from '@typescript-eslint/utils';\nimport type {\n JSONSchema,\n ParserServicesWithTypeInformation,\n TSESLint,\n TSESTree\n} from '@typescript-eslint/utils';\n\nimport { reportUnusedMembers } from './angular/angular-class-fields.ts';\nimport { angularClassImports } from './angular/angular-imports.ts';\nimport type {\n ClassEntry,\n DynamicClasses,\n MessageIds,\n ProjectMemberUsed,\n ReportUnusedMembersOptions,\n RuleContext,\n RuleOptions\n} from './common/no-unused-angular-instance-fields.type.ts';\nimport { classReadVisitor } from './typescript/typescript-class-read-visitor.ts';\nimport type { ProjectUsageIndex } from '../project-usage/common/project-index.type.ts';\nimport {\n projectUsage,\n projectUsageIsCurrent\n} from '../project-usage/project-usage.ts';\nimport { isSpecFile } from '../project-usage/utils/spec-file.util.ts';\n\ntype Options = [RuleOptions];\ntype Analysis = NonNullable<RuleOptions['analysis']>;\n\nconst docs: TSESLint.RuleMetaDataDocs = {\n description:\n 'Disallow unread instance fields and methods in Angular components and directives'\n};\n\nconst messages: Record<MessageIds, string> = {\n unusedField: \"Angular instance field '{{name}}' is never read.\",\n unusedMethod: \"Angular instance method '{{name}}' is never read.\"\n};\n\nconst allowEffectFieldsSchema: JSONSchema.JSONSchema4 = {\n type: 'boolean',\n description: 'Allow Angular effect() fields with automatic cleanup.'\n};\n\nconst analysisSchema: JSONSchema.JSONSchema4 = {\n type: 'string',\n enum: ['local', 'project'],\n description: 'Choose local-file or typed whole-project analysis.'\n};\n\nconst properties: Record<string, JSONSchema.JSONSchema4> = {\n allowEffectFields: allowEffectFieldsSchema,\n analysis: analysisSchema\n};\n\nconst optionsSchema: JSONSchema.JSONSchema4 = {\n type: 'object',\n properties,\n additionalProperties: false\n};\n\nconst schema: JSONSchema.JSONSchema4[] = [optionsSchema];\n\nconst meta: ESLintUtils.NamedCreateRuleMeta<MessageIds, unknown, Options> = {\n type: 'problem',\n docs,\n schema,\n messages\n};\n\nconst ruleDefaults: RuleOptions = {\n allowEffectFields: false,\n analysis: 'local'\n};\n\nconst defaultOptions: Options = [ruleDefaults];\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://eslint.org/docs/latest/rules/no-unused-private-class-members'\n);\n\nconst projectParserServices = (\n context: RuleContext,\n analysis: Analysis\n): ParserServicesWithTypeInformation | undefined => {\n if (analysis !== 'project') return undefined;\n\n try {\n return ESLintUtils.getParserServices(context);\n } catch {\n throw new Error(\n 'Project analysis requires parser services with type information.'\n );\n }\n};\n\nconst projectMemberUsedFor = (\n parserServices: ParserServicesWithTypeInformation | undefined\n): ProjectMemberUsed | undefined => {\n if (parserServices === undefined) return undefined;\n\n let usage: ProjectUsageIndex | null | undefined;\n\n const memberUsed = (node: TSESTree.ClassElement): boolean => {\n if (usage === undefined) {\n usage = projectUsage(parserServices.program);\n }\n\n return usage?.has(parserServices.esTreeNodeToTSNodeMap.get(node)) ?? true;\n };\n\n return memberUsed;\n};\n\nexport default createRule<Options, MessageIds>({\n name: 'no-unused-instance-fields',\n meta,\n defaultOptions,\n create(context, [options]): TSESLint.RuleListener {\n const analysis = options.analysis ?? 'local';\n const isSpec = isSpecFile(context.filename);\n const noListeners: TSESLint.RuleListener = {};\n\n if (analysis === 'project' && isSpec) return noListeners;\n\n const parserServices = projectParserServices(context, analysis);\n const imports = angularClassImports(context.sourceCode.ast);\n\n if (!imports) return noListeners;\n\n const classes: ClassEntry[] = [];\n const stack: ClassEntry[] = [];\n const dynamicClasses: DynamicClasses = new Set();\n\n const projectIndexed = (): boolean => {\n if (parserServices === undefined) return false;\n\n return projectUsageIsCurrent(parserServices.program);\n };\n\n const reportOptions: ReportUnusedMembersOptions = {\n allowEffectFields: options.allowEffectFields ?? false,\n classes,\n context,\n dynamicClasses,\n imports,\n projectIndexed,\n projectMemberUsed: projectMemberUsedFor(parserServices)\n };\n\n const readListeners = classReadVisitor(classes, stack, dynamicClasses);\n const listeners: TSESLint.RuleListener = {\n ...readListeners,\n 'Program:exit'(): void {\n reportUnusedMembers(reportOptions);\n }\n };\n\n return listeners;\n }\n});\n", "import { TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\nimport type {\n AngularClassMetadata,\n AngularClassNode,\n AngularImport,\n AngularImports\n} from '../common/no-unused-angular-instance-fields.type.ts';\n\nconst calleeRoot = (\n node: TSESTree.Expression\n): TSESTree.Identifier | undefined => {\n if (node.type === TSESTree.AST_NODE_TYPES.Identifier) return node;\n\n if (\n node.type !== TSESTree.AST_NODE_TYPES.MemberExpression ||\n node.object.type === TSESTree.AST_NODE_TYPES.Super\n ) {\n return undefined;\n }\n\n return calleeRoot(node.object);\n};\n\nexport const angularName = (\n node: TSESTree.Expression,\n imports: AngularImports\n): AngularImport | undefined => {\n if (node.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return imports.get(node.name);\n }\n\n if (\n node.type !== TSESTree.AST_NODE_TYPES.MemberExpression ||\n node.computed ||\n node.property.type !== TSESTree.AST_NODE_TYPES.Identifier\n ) {\n return null;\n }\n\n if (node.object.type === TSESTree.AST_NODE_TYPES.Identifier) {\n const namespaceAlias = imports.get(node.object.name);\n\n if (namespaceAlias === null) return node.property.name;\n }\n\n return angularName(node.object, imports);\n};\n\nexport const isImportBinding = (\n node: TSESTree.Expression,\n sourceCode: TSESLint.SourceCode\n): boolean => {\n const root = calleeRoot(node);\n\n if (!root) return false;\n\n for (\n let scope: TSESLint.Scope.Scope | null = sourceCode.getScope(root);\n scope;\n scope = scope.upper\n ) {\n const variable = scope.set.get(root.name);\n\n if (variable) return variable.defs[0]?.type === 'ImportBinding';\n }\n\n return false;\n};\n\nexport const addAngularImport = (\n node: TSESTree.ImportDeclaration,\n imports: AngularImports\n): void => {\n if (node.source.value !== '@angular/core' || node.importKind === 'type') {\n return;\n }\n\n for (const specifier of node.specifiers) {\n if (specifier.type === TSESTree.AST_NODE_TYPES.ImportNamespaceSpecifier) {\n imports.set(specifier.local.name, null);\n } else if (\n specifier.type === TSESTree.AST_NODE_TYPES.ImportSpecifier &&\n specifier.importKind !== 'type'\n ) {\n const { imported } = specifier;\n const isIdentifier = imported.type === TSESTree.AST_NODE_TYPES.Identifier;\n const importedName = isIdentifier ? imported.name : imported.value;\n\n imports.set(specifier.local.name, importedName);\n }\n }\n};\n\nexport const angularClassMetadata = (\n node: AngularClassNode,\n imports: AngularImports\n): AngularClassMetadata | null => {\n for (const decorator of node.decorators) {\n if (decorator.expression.type !== TSESTree.AST_NODE_TYPES.CallExpression) {\n continue;\n }\n\n const kind = angularName(decorator.expression.callee, imports);\n const metadata = decorator.expression.arguments.at(0);\n\n const isComponentOrDirective = kind === 'Component' || kind === 'Directive';\n\n if (\n isComponentOrDirective &&\n metadata?.type === TSESTree.AST_NODE_TYPES.ObjectExpression\n ) {\n const classMetadata: AngularClassMetadata | null = {\n component: kind === 'Component',\n metadata\n };\n\n return classMetadata;\n }\n }\n\n return null;\n};\n\nexport const angularClassImports = (\n ast: TSESTree.Program\n): AngularImports | null => {\n const imports: AngularImports = new Map();\n\n for (const node of ast.body) {\n if (node.type === TSESTree.AST_NODE_TYPES.ImportDeclaration) {\n addAngularImport(node, imports);\n }\n }\n\n for (const imported of imports.values()) {\n const isNamespaceImport = imported === null;\n const isComponent = imported === 'Component';\n const isDirective = imported === 'Directive';\n const isAngularClassImport =\n isNamespaceImport || isComponent || isDirective;\n\n if (isAngularClassImport) return imports;\n }\n\n return null;\n};\n", "import { TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\nimport {\n isAngularComponentRefField,\n isManagedField\n} from './angular-managed-fields.ts';\nimport type {\n AngularClassNode,\n FieldCandidateOptions,\n InstanceField,\n InstanceMethod,\n MemberCandidate\n} from '../common/no-unused-angular-instance-fields.type.ts';\n\nconst lifecycleHooks: ReadonlySet<string> = new Set([\n 'ngOnChanges',\n 'ngOnInit',\n 'ngDoCheck',\n 'ngAfterContentInit',\n 'ngAfterContentChecked',\n 'ngAfterViewInit',\n 'ngAfterViewChecked',\n 'ngOnDestroy'\n]);\n\nconst formsInterfaceMethods: Readonly<Record<string, string[]>> = {\n AsyncValidator: ['validate', 'registerOnValidatorChange'],\n ControlValueAccessor: [\n 'writeValue',\n 'registerOnChange',\n 'registerOnTouched',\n 'setDisabledState'\n ],\n Validator: ['validate', 'registerOnValidatorChange']\n};\n\nconst isInstanceField = (\n node: TSESTree.ClassElement\n): node is InstanceField => {\n if (node.type !== TSESTree.AST_NODE_TYPES.PropertyDefinition) return false;\n\n return node.key.type === TSESTree.AST_NODE_TYPES.Identifier;\n};\n\nconst isInstanceMethod = (\n node: TSESTree.ClassElement\n): node is InstanceMethod => {\n if (node.type !== TSESTree.AST_NODE_TYPES.MethodDefinition) return false;\n\n return node.key.type === TSESTree.AST_NODE_TYPES.Identifier;\n};\n\nconst isExcludedField = (\n node: InstanceField,\n localPrivateOnly: boolean,\n sourceCode: TSESLint.SourceCode\n): boolean => {\n const isModified = node.static || node.declare || node.override;\n const isDecorated = node.decorators.length > 0;\n\n if (isModified || isDecorated) return true;\n\n const isComponentRef = isAngularComponentRefField(node, sourceCode);\n\n if (isComponentRef) return true;\n\n const isNonPrivate = node.accessibility !== 'private';\n\n return localPrivateOnly && isNonPrivate;\n};\n\nconst isExcludedMethod = (\n node: InstanceMethod,\n localPrivateOnly: boolean,\n implementedMethods: Set<string>\n): boolean => {\n const isModified = node.static || node.override || node.computed;\n const isDecorated = node.decorators.length > 0;\n const isPlainMethod = node.kind === 'method';\n\n if (isModified || isDecorated || !isPlainMethod) return true;\n\n const hasNoBody = node.value.body === null;\n const isLifecycleHook = lifecycleHooks.has(node.key.name);\n\n if (hasNoBody || isLifecycleHook) return true;\n\n const isImplemented = implementedMethods.has(node.key.name);\n\n if (isImplemented) return true;\n\n const isNonPrivate = node.accessibility !== 'private';\n\n return localPrivateOnly && isNonPrivate;\n};\n\nexport const implementedFormsMethods = (\n node: AngularClassNode\n): Set<string> => {\n const methods = new Set<string>();\n\n for (const heritage of node.implements) {\n if (heritage.expression.type !== TSESTree.AST_NODE_TYPES.Identifier) {\n continue;\n }\n\n for (const name of formsInterfaceMethods[heritage.expression.name] ?? []) {\n methods.add(name);\n }\n }\n\n return methods;\n};\n\nexport const fieldCandidate = (\n node: TSESTree.ClassElement,\n options: FieldCandidateOptions\n): MemberCandidate | null => {\n const isField = isInstanceField(node);\n\n if (!isField) return null;\n\n const { localPrivateOnly, sourceCode } = options;\n const isExcluded = isExcludedField(node, localPrivateOnly, sourceCode);\n\n if (isExcluded) return null;\n\n const isManaged = isManagedField(\n node,\n options.imports,\n options.allowEffectFields,\n sourceCode\n );\n\n if (isManaged) return null;\n\n const unusedFieldCandidate: MemberCandidate | null = {\n messageId: 'unusedField',\n name: node.key.name,\n node\n };\n\n return unusedFieldCandidate;\n};\n\nexport const methodCandidate = (\n node: TSESTree.ClassElement,\n localPrivateOnly: boolean,\n implementedMethods: Set<string>\n): MemberCandidate | null => {\n const isMethod = isInstanceMethod(node);\n\n if (!isMethod) return null;\n\n const isExcluded = isExcludedMethod(\n node,\n localPrivateOnly,\n implementedMethods\n );\n\n if (isExcluded) return null;\n\n const unusedMethodCandidate: MemberCandidate | null = {\n messageId: 'unusedMethod',\n name: node.key.name,\n node\n };\n\n return unusedMethodCandidate;\n};\n", "import { TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\nimport { angularName, isImportBinding } from './angular-imports.ts';\nimport type {\n AngularImports,\n InstanceField\n} from '../common/no-unused-angular-instance-fields.type.ts';\n\nconst managedApis: ReadonlySet<string> = new Set([\n 'input',\n 'model',\n 'output',\n 'viewChild',\n 'viewChildren',\n 'contentChild',\n 'contentChildren'\n]);\n\nconst hasAutomaticEffectCleanup = (node: TSESTree.CallExpression): boolean => {\n const options = node.arguments.at(1);\n\n if (options === undefined) return true;\n\n if (options.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) return false;\n\n return options.properties.every((property) => {\n if (\n property.type !== TSESTree.AST_NODE_TYPES.Property ||\n property.computed\n ) {\n return false;\n }\n\n const manualCleanup =\n (property.key.type === TSESTree.AST_NODE_TYPES.Identifier &&\n property.key.name === 'manualCleanup') ||\n (property.key.type === TSESTree.AST_NODE_TYPES.Literal &&\n property.key.value === 'manualCleanup');\n\n return (\n !manualCleanup ||\n (property.value.type === TSESTree.AST_NODE_TYPES.Literal &&\n property.value.value === false)\n );\n });\n};\n\nconst angularCoreImportedName = (\n definition: TSESLint.Scope.Definition | undefined\n): string | null => {\n if (definition?.type !== 'ImportBinding') return null;\n\n if (definition.node.type !== TSESTree.AST_NODE_TYPES.ImportSpecifier) {\n return null;\n }\n\n if (definition.parent.type !== TSESTree.AST_NODE_TYPES.ImportDeclaration) {\n return null;\n }\n\n if (definition.parent.source.value !== '@angular/core') return null;\n\n const { imported } = definition.node;\n\n if (imported.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return imported.name;\n }\n\n return imported.value;\n};\n\nexport const isAngularComponentRefField = (\n node: InstanceField,\n sourceCode: TSESLint.SourceCode\n): boolean => {\n const type = node.typeAnnotation?.typeAnnotation;\n\n if (\n type?.type !== TSESTree.AST_NODE_TYPES.TSTypeReference ||\n type.typeName.type !== TSESTree.AST_NODE_TYPES.Identifier\n ) {\n return false;\n }\n\n const reference = sourceCode\n .getScope(type.typeName)\n .references.find(({ identifier }) => identifier === type.typeName);\n const definition = reference?.resolved?.defs[0];\n\n return angularCoreImportedName(definition) === 'ComponentRef';\n};\n\nexport const isManagedField = (\n node: InstanceField,\n imports: AngularImports,\n allowEffectFields: boolean,\n sourceCode: TSESLint.SourceCode\n): boolean => {\n if (node.value?.type !== TSESTree.AST_NODE_TYPES.CallExpression) return false;\n\n const name = angularName(node.value.callee, imports);\n const isString = typeof name === 'string';\n\n if (!isString) return false;\n\n const isManagedApi = managedApis.has(name);\n\n if (isManagedApi) return true;\n\n if (!allowEffectFields) return false;\n\n if (name !== 'effect') return false;\n\n const isImported = isImportBinding(node.value.callee, sourceCode);\n\n if (!isImported) return false;\n\n return hasAutomaticEffectCleanup(node.value);\n};\n", "import { dirname, resolve } from 'node:path';\n\nimport { TSESTree } from '@typescript-eslint/utils';\n\nimport { key, metadataValue, text } from './angular-metadata-literals.ts';\nimport {\n expressionReads,\n externalTemplateReads,\n templateReads\n} from './angular-template-parsing.ts';\nimport type { MetadataReadsOptions } from '../common/no-unused-angular-instance-fields.type.ts';\n\nconst addReads = (target: Set<string>, source: Set<string> | null): boolean => {\n if (!source) return false;\n\n for (const name of source) {\n target.add(name);\n }\n\n return true;\n};\n\nconst hostPropertyReads = (\n property: TSESTree.Property,\n reads: Set<string>,\n filename: string\n): boolean => {\n const name = key(property);\n const expression = text(property.value);\n\n if (name === null || expression === null) return false;\n\n const isPropertyBinding = name.startsWith('[');\n\n if (isPropertyBinding) {\n return addReads(reads, expressionReads(expression, filename, false));\n }\n\n const isEventBinding = name.startsWith('(');\n\n if (isEventBinding) {\n return addReads(reads, expressionReads(expression, filename, true));\n }\n\n return true;\n};\n\nconst hostReads = (\n host: TSESTree.Node | undefined,\n reads: Set<string>,\n filename: string\n): boolean => {\n if (!host) return true;\n\n if (host.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) return false;\n\n const hasUnreadableKey = host.properties.some(\n (property) => key(property) === null\n );\n\n if (hasUnreadableKey) return false;\n\n for (const property of host.properties) {\n if (property.type !== TSESTree.AST_NODE_TYPES.Property) return false;\n\n const hasPropertyReads = hostPropertyReads(property, reads, filename);\n\n if (!hasPropertyReads) return false;\n }\n\n return true;\n};\n\nconst inlineTemplateReads = (\n template: TSESTree.Node | undefined,\n reads: Set<string>,\n filename: string\n): boolean => {\n if (!template) return true;\n\n const source = text(template);\n\n return source !== null && addReads(reads, templateReads(source, filename));\n};\n\nconst externalTemplatePropertyReads = (\n templateUrl: TSESTree.Node | undefined,\n reads: Set<string>,\n filename: string\n): boolean => {\n if (!templateUrl) return true;\n\n const url = text(templateUrl);\n\n return (\n url !== null &&\n addReads(reads, externalTemplateReads(resolve(dirname(filename), url)))\n );\n};\n\nconst componentTemplateReads = (\n metadata: TSESTree.ObjectExpression,\n reads: Set<string>,\n filename: string\n): boolean => {\n const template = metadataValue(metadata, 'template');\n const templateUrl = metadataValue(metadata, 'templateUrl');\n\n return (\n inlineTemplateReads(template, reads, filename) &&\n externalTemplatePropertyReads(templateUrl, reads, filename)\n );\n};\n\n/**\n * Names read by a class's host bindings and, for components, its template.\n * Returns null when the metadata cannot be read statically; with\n * `requireTemplate` false an unreadable template keeps the host reads\n * instead, for callers that resolve template reads elsewhere.\n */\nexport const metadataReads = (\n options: MetadataReadsOptions\n): Set<string> | null => {\n const { filename, metadata } = options;\n const isUnreadableKey = (\n property: TSESTree.ObjectLiteralElement\n ): boolean => {\n return key(property) === null;\n };\n const hasUnreadableKey = metadata.properties.some(isUnreadableKey);\n\n if (hasUnreadableKey) return null;\n\n const reads = new Set<string>();\n const hostValue = metadataValue(metadata, 'host');\n const hasHostReads = hostReads(hostValue, reads, filename);\n\n if (!hasHostReads) return null;\n\n if (!options.component) return reads;\n\n const isRead = (name: string): boolean => reads.has(name);\n const hasRemainingReads = options.remainingNames.every(isRead);\n\n if (hasRemainingReads) return reads;\n\n const hasTemplateReads = componentTemplateReads(metadata, reads, filename);\n\n if (hasTemplateReads) return reads;\n\n if (!options.requireTemplate) return reads;\n\n return null;\n};\n", "import { TSESTree } from '@typescript-eslint/utils';\n\nexport const text = (node: TSESTree.Node | null | undefined): string | null => {\n if (\n node?.type === TSESTree.AST_NODE_TYPES.Literal &&\n typeof node.value === 'string'\n ) {\n return node.value;\n }\n\n if (node?.type !== TSESTree.AST_NODE_TYPES.TemplateLiteral) return null;\n\n const hasExpressions = node.expressions.length > 0;\n\n if (hasExpressions) return null;\n\n return node.quasis[0].value.cooked;\n};\n\nexport const key = (property: TSESTree.ObjectLiteralElement): string | null => {\n if (property.type !== TSESTree.AST_NODE_TYPES.Property || property.computed) {\n return null;\n }\n\n if (property.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return property.key.name;\n }\n\n return text(property.key);\n};\n\nexport const metadataValue = (\n metadata: TSESTree.ObjectExpression,\n name: string\n): TSESTree.Property['value'] | undefined => {\n for (const property of metadata.properties) {\n if (property.type !== TSESTree.AST_NODE_TYPES.Property) continue;\n\n const propertyKey = key(property);\n\n if (propertyKey === name) return property.value;\n }\n\n return undefined;\n};\n", "import {\n Lexer,\n ParseLocation,\n ParseSourceFile,\n ParseSourceSpan,\n Parser,\n R3TargetBinder,\n parseTemplate\n} from '@angular/compiler';\nimport type { ASTWithSource, DirectiveMeta } from '@angular/compiler';\n\nimport { readFileSync, statSync } from 'node:fs';\n\nimport { collectAngularExpressionReads } from './angular-expression-reads.ts';\n\ntype ExternalTemplateCache = {\n readonly reads: Set<string> | null;\n readonly version: string;\n};\n\nconst externalTemplates = new Map<string, ExternalTemplateCache>();\nconst parser = new Parser(new Lexer());\nconst templateBinder = new R3TargetBinder<DirectiveMeta>(null);\n\nexport const templateReads = (\n template: string,\n filename: string\n): Set<string> | null => {\n try {\n const result = parseTemplate(template, filename);\n\n if (result.errors?.length) return null;\n\n return collectAngularExpressionReads(\n result.nodes,\n templateBinder.bind({ template: result.nodes }),\n false\n );\n } catch {\n return null;\n }\n};\n\nexport const externalTemplateReads = (filename: string): Set<string> | null => {\n try {\n const stats = statSync(filename, { bigint: true });\n const version = `${stats.mtimeNs}:${stats.size}`;\n const cached = externalTemplates.get(filename);\n\n if (cached?.version === version) return cached.reads;\n\n const reads = templateReads(readFileSync(filename, 'utf8'), filename);\n\n externalTemplates.set(filename, { reads, version });\n\n return reads;\n } catch {\n return null;\n }\n};\n\nconst parseExpression = (\n expression: string,\n span: ParseSourceSpan,\n action: boolean\n): ASTWithSource => {\n if (action) return parser.parseAction(expression, span, 0);\n\n return parser.parseBinding(expression, span, 0);\n};\n\nexport const expressionReads = (\n expression: string,\n filename: string,\n action: boolean\n): Set<string> | null => {\n try {\n const file = new ParseSourceFile(expression, filename);\n const start = new ParseLocation(file, 0, 0, 0);\n const span = new ParseSourceSpan(start, start.moveBy(expression.length));\n const result = parseExpression(expression, span, action);\n\n if (result.errors.length > 0) return null;\n\n return collectAngularExpressionReads([result], undefined, action);\n } catch {\n return null;\n }\n};\n", "import {\n CombinedRecursiveAstVisitor,\n ImplicitReceiver,\n KeyedRead,\n SafeKeyedRead,\n ThisReceiver\n} from '@angular/compiler';\nimport type {\n Binary,\n BoundTarget,\n DirectiveMeta,\n PropertyRead,\n SafePropertyRead\n} from '@angular/compiler';\n\nimport { isReadTarget } from '../../utils/angular-read-target.util.ts';\n\ntype VisitableNode = Parameters<CombinedRecursiveAstVisitor['visit']>[0];\n\nclass ReadCollector extends CombinedRecursiveAstVisitor {\n public readonly reads = new Set<string>();\n private readonly boundTarget: BoundTarget<DirectiveMeta> | undefined;\n private readonly action: boolean;\n\n public constructor(\n boundTarget: BoundTarget<DirectiveMeta> | undefined,\n action: boolean\n ) {\n super();\n this.boundTarget = boundTarget;\n this.action = action;\n }\n\n private record(node: PropertyRead | SafePropertyRead): void {\n if (node.receiver instanceof ThisReceiver) {\n this.reads.add(node.name);\n\n return;\n }\n\n if (!(node.receiver instanceof ImplicitReceiver)) return;\n\n const isBindableName = !this.action || node.name !== '$event';\n\n if (!isBindableName) return;\n\n const expressionTarget = this.boundTarget?.getExpressionTarget(node);\n\n if (expressionTarget) return;\n\n this.reads.add(node.name);\n }\n\n public override visitBinary(node: Binary, context: unknown): unknown {\n if (node.operation !== '=') return super.visitBinary(node, context);\n\n if (isReadTarget(node.left)) {\n this.visit(node.left.receiver);\n }\n\n if (node.left instanceof KeyedRead || node.left instanceof SafeKeyedRead) {\n this.visit(node.left.key);\n }\n\n this.visit(node.right);\n\n return undefined;\n }\n\n public override visitPropertyRead(\n node: PropertyRead,\n context: unknown\n ): unknown {\n this.record(node);\n\n return super.visitPropertyRead(node, context);\n }\n\n public override visitSafePropertyRead(\n node: SafePropertyRead,\n context: unknown\n ): unknown {\n this.record(node);\n\n return super.visitSafePropertyRead(node, context);\n }\n}\n\nexport const collectAngularExpressionReads = (\n nodes: VisitableNode[],\n boundTarget: BoundTarget<DirectiveMeta> | undefined,\n action: boolean\n): Set<string> => {\n const collector = new ReadCollector(boundTarget, action);\n\n for (const node of nodes) {\n collector.visit(node);\n }\n\n return collector.reads;\n};\n", "import {\n KeyedRead,\n PropertyRead,\n SafeKeyedRead,\n SafePropertyRead\n} from '@angular/compiler';\nimport type { AST } from '@angular/compiler';\n\nexport const isReadTarget = (\n node: AST\n): node is PropertyRead | SafePropertyRead | KeyedRead | SafeKeyedRead => {\n const isPropertyRead = node instanceof PropertyRead;\n const isSafePropertyRead = node instanceof SafePropertyRead;\n const isKeyedRead = node instanceof KeyedRead;\n const isSafeKeyedRead = node instanceof SafeKeyedRead;\n\n return isPropertyRead || isSafePropertyRead || isKeyedRead || isSafeKeyedRead;\n};\n", "import type { TSESLint } from '@typescript-eslint/utils';\n\nimport { angularClassMetadata } from './angular-imports.ts';\nimport {\n fieldCandidate,\n implementedFormsMethods,\n methodCandidate\n} from './angular-member-candidates.ts';\nimport { metadataReads } from './angular-metadata-reads.ts';\nimport type {\n AngularClassMetadata,\n AngularClassNode,\n ClassEntry,\n FieldCandidateOptions,\n MemberCandidate,\n MessageIds,\n MetadataReadsOptions,\n ReportContext,\n ReportUnusedMembersOptions\n} from '../common/no-unused-angular-instance-fields.type.ts';\n\ntype ClassReportOptions = {\n readonly localTemplates: boolean;\n readonly options: ReportUnusedMembersOptions;\n readonly projectAnalysis: boolean;\n};\n\nconst memberCandidates = (\n node: AngularClassNode,\n options: FieldCandidateOptions\n): MemberCandidate[] => {\n const implementedMethods = implementedFormsMethods(node);\n const members: MemberCandidate[] = [];\n\n for (const element of node.body.body) {\n const candidate =\n fieldCandidate(element, options) ??\n methodCandidate(element, options.localPrivateOnly, implementedMethods);\n\n if (candidate) {\n members.push(candidate);\n }\n }\n\n return members;\n};\n\nconst reportMember = (\n context: ReportContext,\n candidate: MemberCandidate\n): void => {\n const data = { name: candidate.name };\n const report: TSESLint.ReportDescriptor<MessageIds> = {\n data,\n messageId: candidate.messageId,\n node: candidate.node.key\n };\n\n context.report(report);\n};\n\nconst reportUnreadMembers = (\n members: MemberCandidate[],\n reads: Set<string>,\n options: ReportUnusedMembersOptions\n): void => {\n for (const candidate of members) {\n const isTemplateRead = reads.has(candidate.name);\n\n if (isTemplateRead) continue;\n\n const isProjectUsed = options.projectMemberUsed?.(candidate.node) === true;\n\n if (isProjectUsed) continue;\n\n reportMember(options.context, candidate);\n }\n};\n\nconst reportClassMembers = (\n entry: ClassEntry,\n ngClass: AngularClassMetadata,\n report: ClassReportOptions\n): void => {\n const { options, projectAnalysis } = report;\n const isLocalOnlyClass = !ngClass.component || entry.node.abstract === true;\n const candidateOptions: FieldCandidateOptions = {\n allowEffectFields: options.allowEffectFields,\n imports: options.imports,\n localPrivateOnly: !projectAnalysis && isLocalOnlyClass,\n sourceCode: options.context.sourceCode\n };\n const members = memberCandidates(entry.node, candidateOptions);\n const unreadMembers = members.filter(\n (candidate) => !entry.reads.has(candidate.name)\n );\n\n if (unreadMembers.length === 0) return;\n\n const remainingNames = unreadMembers.map((candidate) => candidate.name);\n const readsOptions: MetadataReadsOptions = {\n component: ngClass.component && report.localTemplates,\n filename: options.context.filename,\n metadata: ngClass.metadata,\n remainingNames,\n requireTemplate: !projectAnalysis\n };\n const reads = metadataReads(readsOptions);\n\n if (!reads) return;\n\n reportUnreadMembers(unreadMembers, reads, options);\n};\n\nexport const reportUnusedMembers = (\n options: ReportUnusedMembersOptions\n): void => {\n const projectAnalysis = options.projectMemberUsed !== undefined;\n const localTemplates = !projectAnalysis || !options.projectIndexed();\n const report: ClassReportOptions = {\n localTemplates,\n options,\n projectAnalysis\n };\n\n for (const entry of options.classes) {\n const ngClass = angularClassMetadata(entry.node, options.imports);\n const isDynamicClass = options.dynamicClasses.has(entry);\n\n if (!ngClass || isDynamicClass) continue;\n\n reportClassMembers(entry, ngClass, report);\n }\n};\n", "import { TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\nimport {\n destructuredThisReads,\n isThisExpression\n} from './typescript-field-reads.ts';\nimport { lexicalThisVisitor } from './typescript-lexical-this.ts';\nimport { isWriteOnly } from './typescript-write-targets.ts';\nimport type {\n AngularClassNode,\n ClassEntry,\n DynamicClasses\n} from '../common/no-unused-angular-instance-fields.type.ts';\n\ntype DestructuringNode =\n TSESTree.AssignmentExpression | TSESTree.VariableDeclarator;\n\nconst enterClass = (\n node: AngularClassNode,\n classes: ClassEntry[],\n stack: ClassEntry[],\n thisStack: boolean[]\n): void => {\n const entry: ClassEntry = {\n node,\n reads: new Set<string>()\n };\n\n classes.push(entry);\n stack.push(entry);\n thisStack.push(true);\n};\n\nconst trackMemberRead = (\n node: TSESTree.MemberExpression,\n stack: ClassEntry[],\n thisStack: boolean[],\n dynamicClasses: DynamicClasses\n): void => {\n const current = stack.at(-1);\n const isComponentThis = thisStack.at(-1);\n\n if (!current || !isComponentThis) return;\n\n const receiverIsThis = isThisExpression(node.object);\n\n if (node.computed && receiverIsThis) {\n dynamicClasses.add(current);\n }\n\n if (!receiverIsThis || node.computed) return;\n\n const isWriteOnlyTarget = isWriteOnly(node);\n\n if (isWriteOnlyTarget) return;\n\n if (node.property.type === TSESTree.AST_NODE_TYPES.Identifier) {\n current.reads.add(node.property.name);\n }\n};\n\nconst trackDestructuringRead = (\n node: DestructuringNode,\n stack: ClassEntry[],\n thisStack: boolean[],\n dynamicClasses: DynamicClasses\n): void => {\n const current = stack.at(-1);\n const isComponentThis = thisStack.at(-1);\n\n if (!current || !isComponentThis) return;\n\n const reads = destructuredThisReads(node);\n\n if (reads === undefined) return;\n\n if (reads === null) {\n dynamicClasses.add(current);\n\n return;\n }\n\n for (const name of reads) {\n current.reads.add(name);\n }\n};\n\nexport const classReadVisitor = (\n classes: ClassEntry[],\n stack: ClassEntry[],\n dynamicClasses: DynamicClasses\n): TSESLint.RuleListener => {\n const thisStack: boolean[] = [];\n\n const listeners: TSESLint.RuleListener = {\n ClassDeclaration(node: TSESTree.ClassDeclaration): void {\n enterClass(node, classes, stack, thisStack);\n },\n ClassExpression(node: TSESTree.ClassExpression): void {\n enterClass(node, classes, stack, thisStack);\n },\n 'ClassDeclaration:exit'(): void {\n stack.pop();\n thisStack.pop();\n },\n 'ClassExpression:exit'(): void {\n stack.pop();\n thisStack.pop();\n },\n ...lexicalThisVisitor(thisStack),\n AssignmentExpression(node: TSESTree.AssignmentExpression): void {\n trackDestructuringRead(node, stack, thisStack, dynamicClasses);\n },\n MemberExpression(node: TSESTree.MemberExpression): void {\n trackMemberRead(node, stack, thisStack, dynamicClasses);\n },\n VariableDeclarator(node: TSESTree.VariableDeclarator): void {\n trackDestructuringRead(node, stack, thisStack, dynamicClasses);\n }\n };\n\n return listeners;\n};\n", "import { TSESTree } from '@typescript-eslint/utils';\n\ntype TypeScriptExpressionWrapper =\n | TSESTree.TSAsExpression\n | TSESTree.TSInstantiationExpression\n | TSESTree.TSNonNullExpression\n | TSESTree.TSSatisfiesExpression\n | TSESTree.TSTypeAssertion;\n\ntype DestructuringNode =\n TSESTree.AssignmentExpression | TSESTree.VariableDeclarator;\n\ntype DestructuringParts = {\n readonly pattern: TSESTree.BindingName | TSESTree.Expression;\n readonly source: TSESTree.Expression | null;\n};\n\nconst expressionWrapperTypes: ReadonlySet<TSESTree.AST_NODE_TYPES> = new Set([\n TSESTree.AST_NODE_TYPES.TSAsExpression,\n TSESTree.AST_NODE_TYPES.TSInstantiationExpression,\n TSESTree.AST_NODE_TYPES.TSNonNullExpression,\n TSESTree.AST_NODE_TYPES.TSSatisfiesExpression,\n TSESTree.AST_NODE_TYPES.TSTypeAssertion\n]);\n\nexport const isTypeScriptExpressionWrapper = (\n node: TSESTree.Node\n): node is TypeScriptExpressionWrapper => {\n return expressionWrapperTypes.has(node.type);\n};\n\nconst unwrapTypeScriptExpression = (\n node: TSESTree.Expression | null\n): TSESTree.Expression | null => {\n let current = node;\n\n while (current && isTypeScriptExpressionWrapper(current)) {\n current = current.expression;\n }\n\n return current;\n};\n\nexport const isThisExpression = (node: TSESTree.Expression | null): boolean => {\n const unwrapped = unwrapTypeScriptExpression(node);\n\n return unwrapped?.type === TSESTree.AST_NODE_TYPES.ThisExpression;\n};\n\nconst destructuringParts = (\n node: DestructuringNode\n): DestructuringParts | null => {\n if (node.type === TSESTree.AST_NODE_TYPES.VariableDeclarator) {\n const variableParts: DestructuringParts | null = {\n pattern: node.id,\n source: node.init\n };\n\n return variableParts;\n }\n\n if (node.operator === '=') {\n const assignmentParts: DestructuringParts | null = {\n pattern: node.left,\n source: node.right\n };\n\n return assignmentParts;\n }\n\n return null;\n};\n\nconst propertyName = (\n property: TSESTree.Property | TSESTree.RestElement\n): string | null => {\n if (property.type !== TSESTree.AST_NODE_TYPES.Property || property.computed) {\n return null;\n }\n\n if (property.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return property.key.name;\n }\n\n const { value } = property.key;\n\n if (typeof value !== 'string') return null;\n\n return value;\n};\n\nexport const destructuredThisReads = (\n node: DestructuringNode\n): string[] | null | undefined => {\n const parts = destructuringParts(node);\n\n if (!parts) return undefined;\n\n if (parts.pattern.type !== TSESTree.AST_NODE_TYPES.ObjectPattern) {\n return undefined;\n }\n\n const isThisSource = isThisExpression(parts.source);\n\n if (!isThisSource) return undefined;\n\n const reads: string[] = [];\n\n for (const property of parts.pattern.properties) {\n const name = propertyName(property);\n\n if (name === null) return null;\n\n reads.push(name);\n }\n\n return reads;\n};\n", "import { TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\ntype FunctionNode =\n | TSESTree.ArrowFunctionExpression\n | TSESTree.FunctionDeclaration\n | TSESTree.FunctionExpression;\n\nconst componentThis = (node: FunctionNode, thisStack: boolean[]): boolean => {\n if (node.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression) {\n return thisStack.at(-1) ?? false;\n }\n\n const { parent } = node;\n\n if (parent.type !== TSESTree.AST_NODE_TYPES.MethodDefinition) return false;\n\n return !parent.static;\n};\n\nexport const lexicalThisVisitor = (\n thisStack: boolean[]\n): TSESLint.RuleListener => {\n const listeners: TSESLint.RuleListener = {\n FunctionDeclaration(node: TSESTree.FunctionDeclaration): void {\n thisStack.push(componentThis(node, thisStack));\n },\n FunctionExpression(node: TSESTree.FunctionExpression): void {\n thisStack.push(componentThis(node, thisStack));\n },\n ArrowFunctionExpression(node: TSESTree.ArrowFunctionExpression): void {\n thisStack.push(componentThis(node, thisStack));\n },\n 'FunctionDeclaration:exit'(): void {\n thisStack.pop();\n },\n 'FunctionExpression:exit'(): void {\n thisStack.pop();\n },\n 'ArrowFunctionExpression:exit'(): void {\n thisStack.pop();\n },\n StaticBlock(): void {\n thisStack.push(false);\n },\n 'StaticBlock:exit'(): void {\n thisStack.pop();\n },\n PropertyDefinition(node: TSESTree.PropertyDefinition): void {\n if (node.static) {\n thisStack.push(false);\n }\n },\n 'PropertyDefinition:exit'(node: TSESTree.PropertyDefinition): void {\n if (node.static) {\n thisStack.pop();\n }\n }\n };\n\n return listeners;\n};\n", "import { TSESTree } from '@typescript-eslint/utils';\n\nimport { isTypeScriptExpressionWrapper } from './typescript-field-reads.ts';\n\nconst parentOf = (node: TSESTree.Node): TSESTree.Node | undefined => {\n if (node.type === TSESTree.AST_NODE_TYPES.Program) return undefined;\n\n return node.parent;\n};\n\nconst isPatternTarget = (\n parent: TSESTree.Node | undefined,\n child: TSESTree.Node\n): boolean => {\n if (parent === undefined) return false;\n\n if (parent.type === TSESTree.AST_NODE_TYPES.ArrayPattern) {\n return parent.elements.some((element) => element === child);\n }\n\n if (parent.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\n return parent.left === child;\n }\n\n if (parent.type === TSESTree.AST_NODE_TYPES.ObjectPattern) {\n return parent.properties.some((property) => property === child);\n }\n\n if (parent.type === TSESTree.AST_NODE_TYPES.Property) {\n const isObjectPattern =\n parent.parent.type === TSESTree.AST_NODE_TYPES.ObjectPattern;\n\n return parent.value === child && isObjectPattern;\n }\n\n if (parent.type === TSESTree.AST_NODE_TYPES.RestElement) {\n return parent.argument === child;\n }\n\n return false;\n};\n\nconst isSimpleAssignmentTarget = (\n parent: TSESTree.Node | undefined,\n current: TSESTree.Node\n): boolean => {\n if (parent?.type !== TSESTree.AST_NODE_TYPES.AssignmentExpression) {\n return false;\n }\n\n return parent.left === current && parent.operator === '=';\n};\n\nconst isLoopTarget = (\n parent: TSESTree.Node | undefined,\n current: TSESTree.Node\n): boolean => {\n const isForIn = parent?.type === TSESTree.AST_NODE_TYPES.ForInStatement;\n const isForOf = parent?.type === TSESTree.AST_NODE_TYPES.ForOfStatement;\n const isLoop = isForIn || isForOf;\n\n if (!isLoop) return false;\n\n return parent.left === current;\n};\n\nconst isWrapping = (parent: TSESTree.Node, child: TSESTree.Node): boolean => {\n const isWrapper = isTypeScriptExpressionWrapper(parent);\n\n if (!isWrapper) return false;\n\n return parent.expression === child;\n};\n\nconst isDirectWrite = (node: TSESTree.MemberExpression): boolean => {\n let current: TSESTree.Node = node;\n let parent = parentOf(node);\n\n while (\n parent &&\n isTypeScriptExpressionWrapper(parent) &&\n parent.expression === current\n ) {\n current = parent;\n parent = parentOf(parent);\n }\n\n const isDeleteExpression =\n parent?.type === TSESTree.AST_NODE_TYPES.UnaryExpression &&\n parent.operator === 'delete';\n const isAssignment = isSimpleAssignmentTarget(parent, current);\n\n return isAssignment || isDeleteExpression;\n};\n\nconst isDestructuringOrLoopTarget = (\n node: TSESTree.MemberExpression\n): boolean => {\n let current: TSESTree.Node = node;\n let parent = parentOf(node);\n let patternTarget = false;\n\n while (parent) {\n const wrapper = isWrapping(parent, current);\n const pattern = isPatternTarget(parent, current);\n\n if (!wrapper && !pattern) break;\n\n if (pattern) {\n patternTarget = true;\n }\n\n current = parent;\n parent = parentOf(parent);\n }\n\n const isSimpleTarget = isSimpleAssignmentTarget(parent, current);\n const isAssignedPattern = patternTarget && isSimpleTarget;\n\n return isAssignedPattern || isLoopTarget(parent, current);\n};\n\nexport const isWriteOnly = (node: TSESTree.MemberExpression): boolean => {\n const isWrite = isDirectWrite(node);\n\n if (isWrite) return true;\n\n return isDestructuringOrLoopTarget(node);\n};\n", "import { isClassElement, isIdentifier, isStringLiteralLike } from 'typescript';\nimport type { Node, Program } from 'typescript';\n\nimport { buildDirectiveIndex } from './angular/angular-directive-index.ts';\nimport type {\n ProjectIndex,\n ProjectUsageIndex\n} from './common/project-index.type.ts';\nimport { reconcile } from './project-index-reconciliation.ts';\n\nconst indexes = new Map<string, ProjectIndex>();\n\nconst memberName = (node: Node): string | null => {\n const isMember = isClassElement(node);\n\n if (!isMember) return null;\n\n if (!node.name) return null;\n\n const isIdentifierName = isIdentifier(node.name);\n const isStringName = isStringLiteralLike(node.name);\n const isNamedMember = isIdentifierName || isStringName;\n\n if (!isNamedMember) return null;\n\n return node.name.text;\n};\n\nconst usageOf = (index: ProjectIndex): ProjectUsageIndex => {\n if (index.usage !== undefined) return index.usage;\n\n const declarations = new Set<Node>();\n const fallbackNames = new Set<string>();\n\n for (const entry of index.entries.values()) {\n for (const declaration of entry.declarations) {\n declarations.add(declaration);\n }\n\n for (const name of entry.fallbackNames) {\n fallbackNames.add(name);\n }\n }\n\n index.usage = {\n has: (node): boolean => {\n const hasDeclaration = declarations.has(node);\n\n if (hasDeclaration) return true;\n\n if (fallbackNames.size === 0) return false;\n\n const name = memberName(node);\n\n return name !== null && fallbackNames.has(name);\n }\n };\n\n return index.usage;\n};\n\nconst createIndex = (): ProjectIndex => {\n const emptyIndex: ProjectIndex = {\n candidateNames: new Set(),\n classes: new Map(),\n directives: buildDirectiveIndex([]),\n directiveShape: '',\n entries: new Map(),\n program: null,\n templateCheckDuration: 0,\n templateCheckedAt: 0,\n usage: undefined\n };\n\n return emptyIndex;\n};\n\n/**\n * True when the index already reflects this exact Program, so callers can\n * skip local work the index duplicates (such as parsing a component's own\n * template) without ever triggering a build.\n */\nexport const projectUsageIsCurrent = (program: Program): boolean => {\n const configFilePath = program.getCompilerOptions()['configFilePath'];\n\n return (\n typeof configFilePath === 'string' &&\n indexes.get(configFilePath)?.program === program\n );\n};\n\n/**\n * Member declarations read anywhere in the Program's non-spec TypeScript\n * and Angular templates, or null when the project cannot be indexed\n * reliably. Indexes are kept per tsconfig and updated incrementally: a new\n * Program (an edit in the editor) only re-indexes the files that changed\n * and the files whose resolutions depended on them.\n */\nexport const projectUsage = (program: Program): ProjectUsageIndex | null => {\n const configFilePath = program.getCompilerOptions()['configFilePath'];\n\n if (typeof configFilePath !== 'string') return null;\n\n let index = indexes.get(configFilePath);\n\n if (!index) {\n index = createIndex();\n indexes.set(configFilePath, index);\n }\n\n try {\n reconcile(index, program);\n\n return usageOf(index);\n } catch {\n indexes.delete(configFilePath);\n\n return null;\n }\n};\n", "import { CssSelector, SelectorMatcher } from '@angular/compiler';\n\nimport type { ClassLikeDeclaration } from 'typescript';\n\nimport type {\n AngularClass,\n DirectiveIndex\n} from '../common/project-usage.type.ts';\n\n/**\n * A description of every directive's selector and exportAs; when it changes\n * between programs, cached template reference resolutions are stale.\n */\nconst classShape = ({\n component,\n declaration,\n exportAs,\n hostDirectives,\n name,\n selector\n}: AngularClass): string => {\n const fields = [\n declaration.getSourceFile().fileName,\n name,\n String(component),\n String(hostDirectives),\n selector ?? '',\n exportAs.join(',')\n ];\n\n return fields.join('\\0');\n};\n\nexport const directiveShape = (classes: Iterable<AngularClass>): string => {\n const shapes = [...classes].map(classShape);\n\n return shapes.sort().join('\\n');\n};\n\nconst parseSelector = (selector: string): CssSelector[] | null => {\n try {\n return CssSelector.parse(selector);\n } catch {\n return null;\n }\n};\n\nexport const buildDirectiveIndex = (\n classes: Iterable<AngularClass>\n): DirectiveIndex => {\n const byDeclaration = new Map<ClassLikeDeclaration, AngularClass>();\n const byExportAs = new Map<string, ClassLikeDeclaration[]>();\n const componentMatcher = new SelectorMatcher<ClassLikeDeclaration[]>();\n\n for (const angularClass of classes) {\n const { component, declaration, exportAs, selector } = angularClass;\n\n byDeclaration.set(declaration, angularClass);\n\n for (const name of exportAs) {\n const declarations = byExportAs.get(name) ?? [];\n\n declarations.push(declaration);\n byExportAs.set(name, declarations);\n }\n\n if (component && selector !== null) {\n const selectors = parseSelector(selector);\n\n if (selectors) {\n componentMatcher.addSelectables(selectors, [declaration]);\n }\n }\n }\n\n const directiveIndex: DirectiveIndex = {\n byDeclaration,\n byExportAs,\n componentMatcher\n };\n\n return directiveIndex;\n};\n", "import { readFileSync, statSync } from 'node:fs';\n\nimport { isIdentifier, isStringLiteralLike } from 'typescript';\nimport type { ClassElement, ClassLikeDeclaration } from 'typescript';\n\nimport { addTemplateReads } from './angular-template-read-resolution.ts';\nimport type {\n TemplateFileVersion,\n TemplateReads\n} from '../common/project-index.type.ts';\nimport type {\n AngularClass,\n CandidateNames,\n CollectTemplateReadsOptions,\n ReadSink\n} from '../common/project-usage.type.ts';\n\ntype TemplateSource = {\n readonly fileName: string;\n readonly source: string;\n};\n\nconst memberNameOf = (member: ClassElement): string[] => {\n const name = member.name;\n\n if (!name) return [];\n\n const isIdentifierName = isIdentifier(name);\n const isStringName = isStringLiteralLike(name);\n const isTextName = isIdentifierName || isStringName;\n\n if (!isTextName) return [];\n\n const names = [name.text];\n\n return names;\n};\n\nconst memberNames = (declaration: ClassLikeDeclaration): string[] => {\n return declaration.members.flatMap(memberNameOf);\n};\n\n/**\n * What a template we cannot read might reference: the component's own\n * members and those of every class in its scope, or every candidate name\n * when the scope is unknown.\n */\nconst unknownTemplateNames = (\n { declaration, scope }: AngularClass,\n allNames: CandidateNames\n): Iterable<string> => {\n if (scope === null) return allNames;\n\n const scopeNames = scope.flatMap(memberNames);\n const names = [...memberNames(declaration), ...scopeNames];\n\n return names;\n};\n\nconst templateFileVersion = (fileName: string): TemplateFileVersion => {\n const { mtimeNs, size } = statSync(fileName, { bigint: true });\n\n const version: TemplateFileVersion = { fileName, mtimeNs, size };\n\n return version;\n};\n\nexport const templateFileIsCurrent = (\n version: TemplateFileVersion\n): boolean => {\n try {\n const current = statSync(version.fileName, { bigint: true });\n\n return current.mtimeNs === version.mtimeNs && current.size === version.size;\n } catch {\n return false;\n }\n};\n\nconst templateSourceOf = (\n angularClass: AngularClass,\n allNames: CandidateNames,\n sink: ReadSink,\n versions: TemplateFileVersion[]\n): TemplateSource | null => {\n const { declaration, template, valid } = angularClass;\n const fileName = declaration.getSourceFile().fileName;\n const className = declaration.name?.text ?? '(anonymous)';\n\n if (!valid) {\n const names = unknownTemplateNames(angularClass, allNames);\n const reason = `${fileName}: metadata of ${className} is not static (template, templateUrl)`;\n\n sink.addFallbackNames(names, reason);\n\n return null;\n }\n\n if (!template) return null;\n\n if (template.kind === 'inline') {\n const inlineSource: TemplateSource = { fileName, source: template.source };\n\n return inlineSource;\n }\n\n const templateFileName = template.fileName;\n\n try {\n versions.push(templateFileVersion(templateFileName));\n\n const source = readFileSync(templateFileName, 'utf8');\n const externalSource: TemplateSource = {\n fileName: templateFileName,\n source\n };\n\n return externalSource;\n } catch {\n const names = unknownTemplateNames(angularClass, allNames);\n const reason = `${fileName}: templateUrl of ${className} cannot be read (${templateFileName})`;\n\n sink.addFallbackNames(names, reason);\n\n return null;\n }\n};\n\n/** Reads made by the templates of the components declared in one file. */\nexport const collectAngularTemplateReads = ({\n allNames,\n checker,\n classes,\n directives,\n sink\n}: CollectTemplateReadsOptions): TemplateReads => {\n const templateVersions: TemplateFileVersion[] = [];\n let usedDirectiveIndex = false;\n\n for (const angularClass of classes) {\n const template = templateSourceOf(\n angularClass,\n allNames,\n sink,\n templateVersions\n );\n\n if (template === null) continue;\n\n const result = addTemplateReads({\n angularClass,\n checker,\n directives,\n fileName: template.fileName,\n sink,\n source: template.source\n });\n\n usedDirectiveIndex ||= result.usedDirectiveIndex;\n }\n\n const templateReads: TemplateReads = {\n templateVersions,\n usedDirectiveIndex\n };\n\n return templateReads;\n};\n", "import {\n R3TargetBinder,\n ThisReceiver,\n TmplAstReference,\n parseTemplate\n} from '@angular/compiler';\nimport type {\n BoundTarget,\n DirectiveMeta,\n TemplateEntity\n} from '@angular/compiler';\n\nimport { addResolvedPath } from './angular-resolved-path.ts';\nimport { ReadCollector } from './angular-template-read-chains.ts';\nimport { addReferenceRead } from './angular-template-references.ts';\nimport type {\n ReadChain,\n ReadSegment,\n ResolvedPathOptions,\n TemplateReadContext,\n TemplateReadsOptions\n} from '../common/project-usage.type.ts';\nimport { chainText } from '../utils/read-chain-text.util.ts';\n\ntype TemplateReadResult = {\n /** True when a `#reference` was resolved through the directive index. */\n readonly usedDirectiveIndex: boolean;\n};\n\n/** Every identifier-like token in a text: a superset of what it can read. */\nconst identifierNames = (text: string): Set<string> => {\n const matches = text.match(/[A-Za-z_$][\\w$]*/gu) ?? [];\n\n return new Set(matches);\n};\n\nconst templateBinder = new R3TargetBinder<DirectiveMeta>(null);\n\nconst unparsedTemplateReads = (\n context: TemplateReadContext,\n source: string,\n error: string | undefined\n): TemplateReadResult => {\n const names = identifierNames(source);\n const message = error ?? 'unknown error';\n const reason = `${context.fileName}: template of ${context.className} does not parse (${message})`;\n\n context.sink.addFallbackNames(names, reason);\n\n const unparsedReads: TemplateReadResult = { usedDirectiveIndex: false };\n\n return unparsedReads;\n};\n\nconst addComponentRead = (\n context: TemplateReadContext,\n names: ReadSegment[]\n): void => {\n const { checker, className, declaration, fileName, sink } = context;\n const options: ResolvedPathOptions = {\n allowMissingRoot: true,\n checker,\n declaration,\n names,\n sink\n };\n const isResolved = addResolvedPath(options);\n\n if (isResolved) return;\n\n const fallbackNames = names.map((segment) => segment.name);\n const reason = `${fileName}: cannot resolve '${chainText(names)}' on ${className}`;\n\n sink.addFallbackNames(fallbackNames, reason);\n};\n\nconst chainEntity = (\n boundTarget: BoundTarget<DirectiveMeta>,\n chain: ReadChain\n): TemplateEntity | null => {\n const isThisRead = chain.root.receiver instanceof ThisReceiver;\n\n if (isThisRead) return null;\n\n return boundTarget.getExpressionTarget(chain.root);\n};\n\nconst addChainRead = (\n context: TemplateReadContext,\n reads: ReadCollector,\n boundTarget: BoundTarget<DirectiveMeta>,\n chain: ReadChain\n): boolean => {\n const entity = chainEntity(boundTarget, chain);\n\n if (entity === null) {\n addComponentRead(context, chain.names);\n\n return false;\n }\n\n if (!(entity instanceof TmplAstReference)) return false;\n\n const owner = reads.referenceOwners.get(entity);\n const names = chain.names.slice(1);\n\n addReferenceRead(context, entity, owner, names);\n\n return true;\n};\n\nexport const addTemplateReads = ({\n angularClass,\n checker,\n directives,\n fileName,\n sink,\n source\n}: TemplateReadsOptions): TemplateReadResult => {\n const { declaration, scope } = angularClass;\n const className = declaration.name?.text ?? '(anonymous)';\n const context: TemplateReadContext = {\n checker,\n className,\n declaration,\n directives,\n fileName,\n scope,\n sink\n };\n const parsed = parseTemplate(source, fileName);\n\n if (parsed.errors?.length) {\n const error = parsed.errors[0]?.msg;\n\n return unparsedTemplateReads(context, source, error);\n }\n\n const boundTarget = templateBinder.bind({ template: parsed.nodes });\n const reads = new ReadCollector();\n\n for (const node of parsed.nodes) {\n reads.visit(node);\n }\n\n let usedDirectiveIndex = false;\n\n for (const chain of reads.reads) {\n const usedIndex = addChainRead(context, reads, boundTarget, chain);\n\n usedDirectiveIndex ||= usedIndex;\n }\n\n const templateReads: TemplateReadResult = { usedDirectiveIndex };\n\n return templateReads;\n};\n", "import { SignatureKind, TypeFlags } from 'typescript';\nimport type {\n ClassLikeDeclaration,\n Symbol,\n Type,\n TypeChecker\n} from 'typescript';\n\nimport type {\n ReadSink,\n ResolvedPathOptions\n} from '../common/project-usage.type.ts';\nimport {\n stringIndexTypes,\n symbolsForName\n} from '../utils/type-property-symbols.util.ts';\n\nconst hasAnyOrUnknownFlag = (type: { flags: TypeFlags }): boolean => {\n const anyOrUnknown = TypeFlags.Any | TypeFlags.Unknown;\n\n return (type.flags & anyOrUnknown) !== 0;\n};\n\nconst isAnyOrUnknown = (types: { flags: TypeFlags }[]): boolean => {\n return types.some(hasAnyOrUnknownFlag);\n};\n\nconst addTypes = (sink: ReadSink, types: Type[]): void => {\n for (const type of types) {\n sink.addType(type);\n }\n};\n\nconst callReturnTypes = (checker: TypeChecker, type: Type): Type[] => {\n const signatures = checker.getSignaturesOfType(type, SignatureKind.Call);\n\n return signatures.map((signature) => signature.getReturnType());\n};\n\nconst memberTypes = (\n symbols: Set<Symbol>,\n declaration: ClassLikeDeclaration,\n checker: TypeChecker,\n sink: ReadSink\n): Type[] => {\n const types: Type[] = [];\n\n for (const symbol of symbols) {\n for (const memberDeclaration of symbol.declarations ?? []) {\n sink.addDeclaration(memberDeclaration);\n }\n\n types.push(checker.getTypeOfSymbolAtLocation(symbol, declaration));\n }\n\n return types;\n};\n\nexport const addResolvedPath = ({\n allowMissingRoot,\n checker,\n declaration,\n names,\n sink\n}: ResolvedPathOptions): boolean => {\n let types = [checker.getTypeAtLocation(declaration)];\n const indexTypesOf = (type: Type): Type[] => stringIndexTypes(checker, type);\n const returnTypesOf = (type: Type): Type[] => callReturnTypes(checker, type);\n\n for (const [index, segment] of names.entries()) {\n addTypes(sink, types);\n\n const symbolsOf = (type: Type): Symbol[] => {\n return symbolsForName(checker, type, segment.name);\n };\n const symbols = new Set(types.flatMap(symbolsOf));\n\n if (symbols.size === 0) {\n const indexedTypes = types.flatMap(indexTypesOf);\n\n if (indexedTypes.length > 0) {\n types = indexedTypes;\n continue;\n }\n\n const isAnyOrUnknownType = isAnyOrUnknown(types);\n\n if (isAnyOrUnknownType) return true;\n\n return index === 0 && allowMissingRoot;\n }\n\n types = memberTypes(symbols, declaration, checker, sink);\n\n if (segment.called) {\n const returnTypes = types.flatMap(returnTypesOf);\n\n if (returnTypes.length === 0) return isAnyOrUnknown(types);\n\n types = returnTypes;\n }\n }\n\n return true;\n};\n", "import { IndexKind } from 'typescript';\nimport type { Symbol, Type, TypeChecker } from 'typescript';\n\nexport const symbolsForName = (\n checker: TypeChecker,\n type: Type,\n name: string\n): Symbol[] => {\n const symbol = checker.getPropertyOfType(checker.getApparentType(type), name);\n\n if (symbol) return [symbol];\n\n const isUnionOrIntersection = type.isUnionOrIntersection();\n\n if (!isUnionOrIntersection) return [];\n\n const symbols = new Set<Symbol>();\n\n for (const member of type.types) {\n for (const memberSymbol of symbolsForName(checker, member, name)) {\n symbols.add(memberSymbol);\n }\n }\n\n return [...symbols];\n};\n\nexport const stringIndexTypes = (checker: TypeChecker, type: Type): Type[] => {\n const indexedType = checker.getIndexTypeOfType(\n checker.getApparentType(type),\n IndexKind.String\n );\n\n if (indexedType) return [indexedType];\n\n const isUnionOrIntersection = type.isUnionOrIntersection();\n\n if (!isUnionOrIntersection) return [];\n\n const indexedTypes = new Set<Type>();\n\n for (const member of type.types) {\n for (const memberIndexedType of stringIndexTypes(checker, member)) {\n indexedTypes.add(memberIndexedType);\n }\n }\n\n return [...indexedTypes];\n};\n", "import type {\n AST,\n Binary,\n TmplAstComponent,\n TmplAstDirective,\n TmplAstElement,\n TmplAstReference,\n TmplAstTemplate\n} from '@angular/compiler';\nimport {\n Call,\n CombinedRecursiveAstVisitor,\n ImplicitReceiver,\n KeyedRead,\n PropertyRead,\n SafeKeyedRead,\n SafePropertyRead,\n ThisReceiver\n} from '@angular/compiler';\n\nimport { isReadTarget } from '../../utils/angular-read-target.util.ts';\nimport type {\n ReadChain,\n ReadSegment,\n ReferenceOwner\n} from '../common/project-usage.type.ts';\n\ntype ChainStep = {\n readonly called: boolean;\n readonly next: PropertyRead | SafePropertyRead;\n};\n\nconst isPropertyReadLike = (\n node: AST\n): node is PropertyRead | SafePropertyRead => {\n const isPlainRead = node instanceof PropertyRead;\n const isSafeRead = node instanceof SafePropertyRead;\n\n return isPlainRead || isSafeRead;\n};\n\nconst isRootRead = (read: PropertyRead | SafePropertyRead): boolean => {\n const isImplicitReceiver = read.receiver instanceof ImplicitReceiver;\n const isThisReceiver = read.receiver instanceof ThisReceiver;\n\n return isImplicitReceiver || isThisReceiver;\n};\n\nconst chainStep = (read: PropertyRead | SafePropertyRead): ChainStep | null => {\n const receiver = read.receiver;\n const isReadReceiver = isPropertyReadLike(receiver);\n\n if (isReadReceiver) {\n const readStep: ChainStep = { called: false, next: receiver };\n\n return readStep;\n }\n\n const isCallReceiver = receiver instanceof Call;\n\n if (!isCallReceiver) return null;\n\n const target = receiver.receiver;\n const isReadLikeTarget = isPropertyReadLike(target);\n\n if (!isReadLikeTarget) return null;\n\n const calledStep: ChainStep = { called: true, next: target };\n\n return calledStep;\n};\n\nconst readChain = (node: PropertyRead | SafePropertyRead): ReadChain | null => {\n const leaf: ReadSegment = { called: false, name: node.name };\n const names: ReadSegment[] = [leaf];\n let current = node;\n\n while (!isRootRead(current)) {\n const step = chainStep(current);\n\n if (step === null) return null;\n\n current = step.next;\n names.unshift({ called: step.called, name: current.name });\n }\n\n if (!(current instanceof PropertyRead)) return null;\n\n const chain: ReadChain = { names, root: current };\n\n return chain;\n};\n\nexport class ReadCollector extends CombinedRecursiveAstVisitor {\n public readonly reads: ReadChain[] = [];\n public readonly referenceOwners = new Map<TmplAstReference, ReferenceOwner>();\n\n private record(node: PropertyRead | SafePropertyRead): void {\n const chain = readChain(node);\n\n if (chain) {\n this.reads.push(chain);\n }\n }\n\n private recordReferences(owner: ReferenceOwner): void {\n for (const reference of owner.references) {\n this.referenceOwners.set(reference, owner);\n }\n }\n\n public override visitElement(element: TmplAstElement): void {\n this.recordReferences(element);\n super.visitElement(element);\n }\n\n public override visitTemplate(template: TmplAstTemplate): void {\n this.recordReferences(template);\n super.visitTemplate(template);\n }\n\n public override visitComponent(component: TmplAstComponent): void {\n this.recordReferences(component);\n super.visitComponent(component);\n }\n\n public override visitDirective(directive: TmplAstDirective): void {\n this.recordReferences(directive);\n super.visitDirective(directive);\n }\n\n public override visitBinary(node: Binary, context: unknown): unknown {\n if (node.operation !== '=') return super.visitBinary(node, context);\n\n if (isReadTarget(node.left)) {\n this.visit(node.left.receiver);\n }\n\n if (node.left instanceof KeyedRead || node.left instanceof SafeKeyedRead) {\n this.visit(node.left.key);\n }\n\n this.visit(node.right);\n\n return undefined;\n }\n\n public override visitPropertyRead(\n node: PropertyRead,\n context: unknown\n ): unknown {\n this.record(node);\n\n return super.visitPropertyRead(node, context);\n }\n\n public override visitSafePropertyRead(\n node: SafePropertyRead,\n context: unknown\n ): unknown {\n this.record(node);\n\n return super.visitSafePropertyRead(node, context);\n }\n}\n", "import { TmplAstElement, createCssSelectorFromNode } from '@angular/compiler';\nimport type { TmplAstReference } from '@angular/compiler';\n\nimport type { ClassLikeDeclaration } from 'typescript';\n\nimport { addResolvedPath } from './angular-resolved-path.ts';\nimport type {\n DirectiveIndex,\n ReadSegment,\n ReferenceOwner,\n ResolvedPathOptions,\n TemplateReadContext\n} from '../common/project-usage.type.ts';\nimport { chainText } from '../utils/read-chain-text.util.ts';\n\n/**\n * Classes a `#reference` can resolve to. Candidates come from the whole\n * Program and are narrowed to the component's standalone `imports` when\n * that scope is known; a scope member with `hostDirectives` may expose\n * exportAs names that are not modelled, so it keeps the wider set. Extra\n * candidates only add reads.\n */\nconst referenceTargets = (\n reference: TmplAstReference,\n owner: ReferenceOwner | undefined,\n directives: DirectiveIndex,\n scope: ClassLikeDeclaration[] | null\n): ClassLikeDeclaration[] => {\n const exportAs = reference.value.trim();\n let targets: ClassLikeDeclaration[] = [];\n\n if (exportAs !== '') {\n const exportedTargets = directives.byExportAs.get(exportAs) ?? [];\n\n targets = [...exportedTargets];\n } else if (owner instanceof TmplAstElement) {\n directives.componentMatcher.match(\n createCssSelectorFromNode(owner),\n (_selector, declarations) => {\n targets.push(...declarations);\n }\n );\n }\n\n const scoped =\n scope !== null &&\n !scope.some(\n (declaration) => directives.byDeclaration.get(declaration)?.hostDirectives\n );\n\n if (!scoped) return targets;\n\n const scopedTargets = targets.filter((target) => scope.includes(target));\n\n return scopedTargets;\n};\n\n/** Reads made on the classes a template `#reference` resolves to. */\nexport const addReferenceRead = (\n context: TemplateReadContext,\n reference: TmplAstReference,\n owner: ReferenceOwner | undefined,\n names: ReadSegment[]\n): void => {\n const { checker, className, directives, fileName, scope, sink } = context;\n const targets = referenceTargets(reference, owner, directives, scope);\n const isTargetResolved = (target: ClassLikeDeclaration): boolean => {\n const options: ResolvedPathOptions = {\n allowMissingRoot: false,\n checker,\n declaration: target,\n names,\n sink\n };\n\n return addResolvedPath(options);\n };\n const resolved = targets.map(isTargetResolved);\n const hasResolvedTarget = resolved.includes(true);\n\n if (resolved.length === 0) return;\n\n if (hasResolvedTarget) return;\n\n const fallbackNames = names.map((segment) => segment.name);\n const reason = `${fileName}: cannot resolve '#${reference.name}.${chainText(names)}' in ${className}`;\n\n sink.addFallbackNames(fallbackNames, reason);\n};\n", "import type { ReadSegment } from '../common/project-usage.type.ts';\n\nconst segmentText = (segment: ReadSegment): string => {\n const call = segment.called ? '()' : '';\n\n return `${segment.name}${call}`;\n};\n\n/** A read chain rendered the way it appeared in the template. */\nexport const chainText = (names: ReadSegment[]): string => {\n const texts = names.map(segmentText);\n\n return texts.join('.');\n};\n", "import {\n forEachChild,\n isClassLike,\n isElementAccessExpression,\n isPropertyAccessExpression\n} from 'typescript';\nimport type {\n ElementAccessExpression,\n Node,\n PropertyAccessExpression,\n SourceFile,\n TypeChecker\n} from 'typescript';\n\nimport { collectAngularInterfaceMethods } from './typescript-angular-interface-methods.ts';\nimport { collectDestructuringReads } from './typescript-destructuring-reads.ts';\nimport {\n addNamedProperties,\n addSymbolDeclarations,\n literalPropertyNames\n} from './typescript-symbol-reads.ts';\nimport { isWriteOnly } from './typescript-write-targets.ts';\nimport type { CandidateNames, ReadSink } from '../common/project-usage.type.ts';\n\nconst addPropertyAccessRead = (\n node: PropertyAccessExpression,\n checker: TypeChecker,\n sink: ReadSink,\n candidateNames: CandidateNames\n): void => {\n const isCandidateName = candidateNames.has(node.name.text);\n\n if (!isCandidateName) return;\n\n const isWriteTarget = isWriteOnly(node);\n\n if (isWriteTarget) return;\n\n sink.addType(checker.getTypeAtLocation(node.expression));\n\n const symbol = checker.getSymbolAtLocation(node.name);\n\n if (symbol) {\n addSymbolDeclarations(checker, symbol, sink);\n }\n};\n\nconst addElementAccessRead = (\n node: ElementAccessExpression,\n checker: TypeChecker,\n sink: ReadSink,\n candidateNames: CandidateNames\n): void => {\n const isWriteTarget = isWriteOnly(node);\n\n if (isWriteTarget) return;\n\n const argumentType = checker.getTypeAtLocation(node.argumentExpression);\n const names = literalPropertyNames(argumentType);\n\n if (names) {\n const hasCandidateName = names.some((name) => candidateNames.has(name));\n\n if (!hasCandidateName) return;\n }\n\n const targetType = checker.getTypeAtLocation(node.expression);\n\n addNamedProperties(checker, targetType, names, sink);\n};\n\nexport const collectTypeScriptReads = (\n sourceFile: SourceFile,\n checker: TypeChecker,\n sink: ReadSink,\n candidateNames: CandidateNames\n): void => {\n const visit = (node: Node): void => {\n const isPropertyAccess = isPropertyAccessExpression(node);\n const isElementAccess = isElementAccessExpression(node);\n const isClass = isClassLike(node);\n\n if (isPropertyAccess) {\n addPropertyAccessRead(node, checker, sink, candidateNames);\n } else if (isElementAccess) {\n addElementAccessRead(node, checker, sink, candidateNames);\n } else if (isClass) {\n collectAngularInterfaceMethods(node, checker, sink);\n }\n\n collectDestructuringReads(node, checker, sink, candidateNames);\n forEachChild(node, visit);\n };\n\n visit(sourceFile);\n};\n", "import { SyntaxKind, isMethodSignature } from 'typescript';\nimport type {\n ClassLikeDeclaration,\n Declaration,\n Symbol,\n Type,\n TypeChecker\n} from 'typescript';\n\nimport { addSymbolDeclarations } from './typescript-symbol-reads.ts';\nimport type { ReadSink } from '../common/project-usage.type.ts';\n\nconst isAngularMethodSignature = (declaration: Declaration): boolean => {\n const isMethod = isMethodSignature(declaration);\n\n if (!isMethod) return false;\n\n const fileName = declaration.getSourceFile().fileName.replaceAll('\\\\', '/');\n\n return fileName.includes('/node_modules/@angular/');\n};\n\nconst isAngularInterfaceMethod = (symbol: Symbol): boolean => {\n const declarations = symbol.declarations ?? [];\n\n return declarations.some(isAngularMethodSignature);\n};\n\nconst addImplementations = (\n heritageType: Type,\n classType: Type,\n checker: TypeChecker,\n sink: ReadSink\n): void => {\n for (const interfaceMethod of heritageType.getProperties()) {\n const isInterfaceMethod = isAngularInterfaceMethod(interfaceMethod);\n\n if (!isInterfaceMethod) continue;\n\n const implementation = classType.getProperty(interfaceMethod.name);\n\n if (implementation) {\n addSymbolDeclarations(checker, implementation, sink);\n }\n }\n};\n\n/**\n * Angular calls lifecycle and forms methods through the interfaces a class\n * implements, so an implementation of one counts as read.\n */\nexport const collectAngularInterfaceMethods = (\n node: ClassLikeDeclaration,\n checker: TypeChecker,\n sink: ReadSink\n): void => {\n const heritageClauses = node.heritageClauses ?? [];\n const implementsClauses = heritageClauses.filter(\n (clause) => clause.token === SyntaxKind.ImplementsKeyword\n );\n\n if (implementsClauses.length === 0) return;\n\n const classType = checker.getTypeAtLocation(node);\n\n for (const clause of implementsClauses) {\n for (const heritageType of clause.types) {\n const type = checker.getTypeAtLocation(heritageType);\n\n sink.addType(type);\n addImplementations(type, classType, checker, sink);\n }\n }\n};\n", "import {\n SymbolFlags,\n isBigIntLiteral,\n isIdentifier,\n isNumericLiteral,\n isPrivateIdentifier,\n isStringLiteralLike\n} from 'typescript';\nimport type { PropertyName, Symbol, Type, TypeChecker } from 'typescript';\n\nimport type { ReadSink } from '../common/project-usage.type.ts';\nimport { symbolsForName } from '../utils/type-property-symbols.util.ts';\n\nconst aliasTarget = (checker: TypeChecker, symbol: Symbol): Symbol => {\n const isAlias = (symbol.flags & SymbolFlags.Alias) !== 0;\n\n if (!isAlias) return symbol;\n\n return checker.getAliasedSymbol(symbol);\n};\n\nexport const addSymbolDeclarations = (\n checker: TypeChecker,\n symbol: Symbol,\n sink: ReadSink\n): void => {\n const resolved = aliasTarget(checker, symbol);\n\n for (const declaration of resolved.declarations ?? []) {\n sink.addDeclaration(declaration);\n }\n};\n\nexport const allPropertySymbols = (\n checker: TypeChecker,\n type: Type\n): Symbol[] => {\n const symbols = new Set(\n checker.getPropertiesOfType(checker.getApparentType(type))\n );\n const isUnionOrIntersection = type.isUnionOrIntersection();\n\n if (isUnionOrIntersection) {\n for (const member of type.types) {\n for (const symbol of allPropertySymbols(checker, member)) {\n symbols.add(symbol);\n }\n }\n }\n\n return [...symbols];\n};\n\nconst namedPropertySymbols = (\n checker: TypeChecker,\n type: Type,\n names: string[] | null\n): Symbol[] => {\n if (names === null) return allPropertySymbols(checker, type);\n\n return names.flatMap((name) => symbolsForName(checker, type, name));\n};\n\nexport const addNamedProperties = (\n checker: TypeChecker,\n type: Type,\n names: string[] | null,\n sink: ReadSink\n): Symbol[] => {\n sink.addType(type);\n\n const symbols = namedPropertySymbols(checker, type, names);\n\n for (const symbol of symbols) {\n addSymbolDeclarations(checker, symbol, sink);\n }\n\n return symbols;\n};\n\nexport const literalPropertyNames = (type: Type): string[] | null => {\n const isStringLiteral = type.isStringLiteral();\n const isNumberLiteral = type.isNumberLiteral();\n const isLiteralType = isStringLiteral || isNumberLiteral;\n\n if (isLiteralType) return [String(type.value)];\n\n const isUnion = type.isUnion();\n\n if (!isUnion) return null;\n\n const names: string[] = [];\n\n for (const member of type.types) {\n const memberNames = literalPropertyNames(member);\n\n if (!memberNames) return null;\n\n names.push(...memberNames);\n }\n\n return names;\n};\n\nexport const propertyName = (\n checker: TypeChecker,\n node: PropertyName\n): string[] | null => {\n const isIdentifierName = isIdentifier(node);\n const isPrivateName = isPrivateIdentifier(node);\n const isStringName = isStringLiteralLike(node);\n const isNumericName = isNumericLiteral(node);\n const isBigIntName = isBigIntLiteral(node);\n const isLiteralName =\n isIdentifierName ||\n isPrivateName ||\n isStringName ||\n isNumericName ||\n isBigIntName;\n\n if (isLiteralName) return [node.text];\n\n return literalPropertyNames(checker.getTypeAtLocation(node.expression));\n};\n", "import {\n SyntaxKind,\n isArrayLiteralExpression,\n isBinaryExpression,\n isBindingElement,\n isObjectLiteralExpression,\n isVariableDeclaration\n} from 'typescript';\nimport type { Node, Type, TypeChecker } from 'typescript';\n\nimport { assignmentPatternElements } from './typescript-assignment-pattern-elements.ts';\nimport {\n bindingPatternElements,\n isBindingPattern\n} from './typescript-binding-pattern-elements.ts';\nimport {\n addNamedProperties,\n addSymbolDeclarations,\n allPropertySymbols\n} from './typescript-symbol-reads.ts';\nimport type {\n CandidateNames,\n DestructuringPattern,\n PatternElementRead,\n ReadSink\n} from '../common/project-usage.type.ts';\n\ntype LazyType = () => Type;\n\ntype PatternReadContext = {\n readonly checker: TypeChecker;\n readonly sink: ReadSink;\n readonly candidateNames: CandidateNames;\n};\n\nconst lazyType = (compute: () => Type): LazyType => {\n let type: Type | undefined;\n\n return () => (type ??= compute());\n};\n\nconst isSkippable = (\n read: PatternElementRead,\n candidateNames: CandidateNames\n): boolean => {\n if (read.nested !== null) return false;\n\n if (read.names === null) return false;\n\n const hasCandidateName = read.names.some((name) => candidateNames.has(name));\n\n return !hasCandidateName;\n};\n\nconst patternElements = (\n pattern: DestructuringPattern,\n checker: TypeChecker\n): PatternElementRead[] => {\n const isBinding = isBindingPattern(pattern);\n\n if (isBinding) return bindingPatternElements(pattern, checker);\n\n return assignmentPatternElements(pattern, checker);\n};\n\nconst addRestReads = (\n type: Type,\n consumed: Set<string>,\n context: PatternReadContext\n): void => {\n context.sink.addType(type);\n\n for (const symbol of allPropertySymbols(context.checker, type)) {\n const isConsumed = consumed.has(symbol.name);\n\n if (isConsumed) continue;\n\n addSymbolDeclarations(context.checker, symbol, context.sink);\n }\n};\n\nconst collectPatternReads = (\n pattern: DestructuringPattern,\n type: LazyType,\n context: PatternReadContext\n): void => {\n const { checker, sink, candidateNames } = context;\n const consumed = new Set<string>();\n const reads = patternElements(pattern, checker);\n\n for (const read of reads) {\n if (read.rest) {\n addRestReads(type(), consumed, context);\n continue;\n }\n\n for (const name of read.names ?? []) {\n consumed.add(name);\n }\n\n const skip = isSkippable(read, candidateNames);\n\n if (skip) continue;\n\n const symbols = addNamedProperties(checker, type(), read.names, sink);\n const nested = read.nested;\n\n if (nested === null) continue;\n\n for (const symbol of symbols) {\n const nestedType = lazyType(() => {\n return checker.getTypeOfSymbolAtLocation(symbol, read.location);\n });\n\n collectPatternReads(nested, nestedType, context);\n }\n }\n};\n\nconst collectBindingReads = (node: Node, context: PatternReadContext): void => {\n const isBinding = isBindingPattern(node);\n\n if (!isBinding) return;\n\n const isBindingElementParent = isBindingElement(node.parent);\n const isNestedBindingName =\n isBindingElementParent && node.parent.name === node;\n\n if (isNestedBindingName) return;\n\n const declaration = node.parent;\n const isDeclaration = isVariableDeclaration(declaration);\n const isInitializedDeclaration =\n isDeclaration && declaration.initializer !== undefined;\n const source = isInitializedDeclaration\n ? declaration.initializer\n : declaration;\n const sourceTypeOf = (): Type => context.checker.getTypeAtLocation(source);\n const sourceType = lazyType(sourceTypeOf);\n\n collectPatternReads(node, sourceType, context);\n};\n\nconst collectAssignmentReads = (\n node: Node,\n context: PatternReadContext\n): void => {\n const isBinary = isBinaryExpression(node);\n\n if (!isBinary) return;\n\n const isEqualsAssignment = node.operatorToken.kind === SyntaxKind.EqualsToken;\n\n if (!isEqualsAssignment) return;\n\n const isArrayTarget = isArrayLiteralExpression(node.left);\n const isObjectTarget = isObjectLiteralExpression(node.left);\n const isDestructuringAssignment = isArrayTarget || isObjectTarget;\n\n if (!isDestructuringAssignment) return;\n\n const rightTypeOf = (): Type => context.checker.getTypeAtLocation(node.right);\n const sourceType = lazyType(rightTypeOf);\n\n collectPatternReads(node.left, sourceType, context);\n};\n\nexport const collectDestructuringReads = (\n node: Node,\n checker: TypeChecker,\n sink: ReadSink,\n candidateNames: CandidateNames\n): void => {\n const context: PatternReadContext = { checker, sink, candidateNames };\n\n collectBindingReads(node, context);\n collectAssignmentReads(node, context);\n};\n", "import {\n isArrayLiteralExpression,\n isObjectLiteralExpression,\n isOmittedExpression,\n isPropertyAssignment,\n isSpreadAssignment,\n isSpreadElement\n} from 'typescript';\nimport type {\n Expression,\n ObjectLiteralElementLike,\n TypeChecker\n} from 'typescript';\n\nimport { propertyName } from './typescript-symbol-reads.ts';\nimport type {\n AssignmentPattern,\n DestructuringPattern,\n PatternElementRead\n} from '../common/project-usage.type.ts';\n\nconst nestedPattern = (expression: Expression): DestructuringPattern | null => {\n const isArrayLiteral = isArrayLiteralExpression(expression);\n const isObjectLiteral = isObjectLiteralExpression(expression);\n const isNested = isArrayLiteral || isObjectLiteral;\n\n if (!isNested) return null;\n\n return expression;\n};\n\nconst nestedPropertyPattern = (\n property: ObjectLiteralElementLike\n): DestructuringPattern | null => {\n const isAssignment = isPropertyAssignment(property);\n\n if (!isAssignment) return null;\n\n return nestedPattern(property.initializer);\n};\n\nconst arrayElementRead = (\n element: Expression,\n index: number\n): PatternElementRead | null => {\n const isOmitted = isOmittedExpression(element);\n\n if (isOmitted) return null;\n\n const isRestElement = isSpreadElement(element);\n const indexNames = [String(index)];\n const names = isRestElement ? null : indexNames;\n const nested = nestedPattern(element);\n const read: PatternElementRead = {\n location: element,\n names,\n nested,\n rest: false\n };\n\n return read;\n};\n\nconst propertyRead = (\n property: ObjectLiteralElementLike,\n checker: TypeChecker\n): PatternElementRead => {\n const isRestProperty = isSpreadAssignment(property);\n\n if (isRestProperty) {\n const restRead: PatternElementRead = {\n location: property,\n names: null,\n nested: null,\n rest: true\n };\n\n return restRead;\n }\n\n const read: PatternElementRead = {\n location: property,\n names: propertyName(checker, property.name),\n nested: nestedPropertyPattern(property),\n rest: false\n };\n\n return read;\n};\n\n/** Reads made by every element of one destructuring assignment target. */\nexport const assignmentPatternElements = (\n pattern: AssignmentPattern,\n checker: TypeChecker\n): PatternElementRead[] => {\n const isArrayPattern = isArrayLiteralExpression(pattern);\n\n if (isArrayPattern) {\n const reads: PatternElementRead[] = [];\n\n for (const [index, element] of pattern.elements.entries()) {\n const read = arrayElementRead(element, index);\n\n if (read !== null) {\n reads.push(read);\n }\n }\n\n return reads;\n }\n\n return pattern.properties.map((property) => propertyRead(property, checker));\n};\n", "import {\n isArrayBindingPattern,\n isIdentifier,\n isObjectBindingPattern,\n isOmittedExpression\n} from 'typescript';\nimport type {\n ArrayBindingElement,\n BindingElement,\n BindingPattern,\n Node,\n TypeChecker\n} from 'typescript';\n\nimport { propertyName } from './typescript-symbol-reads.ts';\nimport type {\n DestructuringPattern,\n PatternElementRead\n} from '../common/project-usage.type.ts';\n\nexport const isBindingPattern = (node: Node): node is BindingPattern => {\n const isArrayPattern = isArrayBindingPattern(node);\n const isObjectPattern = isObjectBindingPattern(node);\n\n return isArrayPattern || isObjectPattern;\n};\n\nconst nestedPattern = (\n element: BindingElement\n): DestructuringPattern | null => {\n const isNested = isBindingPattern(element.name);\n\n if (!isNested) return null;\n\n return element.name;\n};\n\nconst bindingNames = (\n checker: TypeChecker,\n element: BindingElement\n): string[] | null => {\n if (element.propertyName) return propertyName(checker, element.propertyName);\n\n const isIdentifierName = isIdentifier(element.name);\n\n if (!isIdentifierName) return null;\n\n return [element.name.text];\n};\n\nconst arrayElementRead = (\n element: ArrayBindingElement,\n index: number\n): PatternElementRead | null => {\n const isOmitted = isOmittedExpression(element);\n\n if (isOmitted) return null;\n\n const isRestElement = Boolean(element.dotDotDotToken);\n const indexNames = [String(index)];\n const names = isRestElement ? null : indexNames;\n const nested = nestedPattern(element);\n const read: PatternElementRead = {\n location: element,\n names,\n nested,\n rest: false\n };\n\n return read;\n};\n\nconst objectElementRead = (\n element: BindingElement,\n checker: TypeChecker\n): PatternElementRead => {\n const isRestElement = Boolean(element.dotDotDotToken);\n\n if (isRestElement) {\n const restRead: PatternElementRead = {\n location: element,\n names: null,\n nested: null,\n rest: true\n };\n\n return restRead;\n }\n\n const read: PatternElementRead = {\n location: element,\n names: bindingNames(checker, element),\n nested: nestedPattern(element),\n rest: false\n };\n\n return read;\n};\n\n/** Reads made by every element of one array or object binding pattern. */\nexport const bindingPatternElements = (\n pattern: BindingPattern,\n checker: TypeChecker\n): PatternElementRead[] => {\n const isArrayPattern = isArrayBindingPattern(pattern);\n\n if (isArrayPattern) {\n const reads: PatternElementRead[] = [];\n\n for (const [index, element] of pattern.elements.entries()) {\n const read = arrayElementRead(element, index);\n\n if (read !== null) {\n reads.push(read);\n }\n }\n\n return reads;\n }\n\n return pattern.elements.map((element) => objectElementRead(element, checker));\n};\n", "import {\n SyntaxKind,\n isArrayLiteralExpression,\n isAsExpression,\n isBinaryExpression,\n isDeleteExpression,\n isForInStatement,\n isForOfStatement,\n isNonNullExpression,\n isObjectLiteralExpression,\n isParenthesizedExpression,\n isPropertyAssignment,\n isSatisfiesExpression,\n isSpreadAssignment,\n isTypeAssertionExpression\n} from 'typescript';\nimport type { Expression, Node } from 'typescript';\n\nconst isExpressionWrapper = (parent: Node, child: Node): boolean => {\n const isParenthesized = isParenthesizedExpression(parent);\n const isAs = isAsExpression(parent);\n const isTypeAssertion = isTypeAssertionExpression(parent);\n const isNonNull = isNonNullExpression(parent);\n const isSatisfies = isSatisfiesExpression(parent);\n const isCast = isAs || isTypeAssertion || isSatisfies;\n const isWrapper = isParenthesized || isNonNull || isCast;\n\n if (!isWrapper) return false;\n\n return parent.expression === child;\n};\n\nconst isPatternContainer = (parent: Node, child: Node): boolean => {\n const isArrayLiteral = isArrayLiteralExpression(parent);\n\n if (isArrayLiteral) {\n return parent.elements.some((element) => element === child);\n }\n\n const isObjectLiteral = isObjectLiteralExpression(parent);\n\n if (isObjectLiteral) {\n return parent.properties.some((property) => property === child);\n }\n\n const isAssignment = isPropertyAssignment(parent);\n\n if (isAssignment) return parent.initializer === child;\n\n const isSpread = isSpreadAssignment(parent);\n\n if (!isSpread) return false;\n\n return parent.expression === child;\n};\n\nconst isWriteTarget = (parent: Node, current: Node): boolean => {\n const isBinary = isBinaryExpression(parent);\n const isBinaryTarget =\n isBinary &&\n parent.left === current &&\n parent.operatorToken.kind === SyntaxKind.EqualsToken;\n\n if (isBinaryTarget) return true;\n\n const isDelete = isDeleteExpression(parent);\n const isDeleteTarget = isDelete && parent.expression === current;\n\n if (isDeleteTarget) return true;\n\n const isForIn = isForInStatement(parent);\n const isForOf = isForOfStatement(parent);\n const isIteration = isForIn || isForOf;\n\n return isIteration && parent.initializer === current;\n};\n\n/**\n * True when every use of `node` up through its wrapping expressions and\n * destructuring patterns writes to it rather than reading it.\n */\nexport const isWriteOnly = (node: Expression): boolean => {\n let current: Node = node;\n let parent = node.parent;\n\n while (\n isExpressionWrapper(parent, current) ||\n isPatternContainer(parent, current)\n ) {\n current = parent;\n parent = parent.parent;\n }\n\n return isWriteTarget(parent, current);\n};\n", "import { ObjectFlags, TypeFlags } from 'typescript';\nimport type {\n InterfaceType,\n ObjectType,\n SourceFile,\n Type,\n TypeChecker,\n TypeReference\n} from 'typescript';\n\nconst isObjectType = (type: Type): type is ObjectType => {\n return (type.flags & TypeFlags.Object) !== 0;\n};\n\nconst isTypeReference = (type: ObjectType): type is TypeReference => {\n return (type.objectFlags & ObjectFlags.Reference) !== 0;\n};\n\nconst isInterfaceType = (type: ObjectType): type is InterfaceType => {\n return (type.objectFlags & ObjectFlags.ClassOrInterface) !== 0;\n};\n\nconst addDeclarationFiles = (\n type: Type,\n dependencies: Set<SourceFile>\n): void => {\n for (const symbol of [type.getSymbol(), type.aliasSymbol]) {\n const declarations = symbol?.declarations ?? [];\n\n for (const declaration of declarations) {\n dependencies.add(declaration.getSourceFile());\n }\n }\n};\n\nconst baseTypesOf = (checker: TypeChecker, type: Type): Type[] => {\n const isObject = isObjectType(type);\n\n if (!isObject) return [];\n\n const isReference = isTypeReference(type);\n const target = isReference ? type.target : type;\n const isClassOrInterface = isInterfaceType(target);\n\n if (!isClassOrInterface) return [];\n\n return checker.getBaseTypes(target);\n};\n\nexport const addTypeDependencies = (\n checker: TypeChecker,\n type: Type,\n dependencies: Set<SourceFile>,\n seen: Set<Type>\n): void => {\n const isSeen = seen.has(type);\n\n if (isSeen) return;\n\n seen.add(type);\n\n const isUnionOrIntersection = type.isUnionOrIntersection();\n\n if (isUnionOrIntersection) {\n for (const member of type.types) {\n addTypeDependencies(checker, member, dependencies, seen);\n }\n\n return;\n }\n\n addDeclarationFiles(type, dependencies);\n\n const isTypeParameter = (type.flags & TypeFlags.TypeParameter) !== 0;\n\n if (isTypeParameter) {\n const constraint = checker.getBaseConstraintOfType(type);\n\n if (constraint) {\n addTypeDependencies(checker, constraint, dependencies, seen);\n }\n\n return;\n }\n\n for (const base of baseTypesOf(checker, type)) {\n addTypeDependencies(checker, base, dependencies, seen);\n }\n};\n", "import type { Node, SourceFile, Type, TypeChecker } from 'typescript';\n\nimport { collectAngularTemplateReads } from './angular/angular-template-reads.ts';\nimport type {\n FileEntry,\n ProjectIndex,\n TemplateReads\n} from './common/project-index.type.ts';\nimport type { ReadSink } from './common/project-usage.type.ts';\nimport { collectTypeScriptReads } from './typescript/typescript-reads.ts';\nimport { addTypeDependencies } from './typescript/typescript-type-dependencies.ts';\n\nconst failureText = (error: unknown): string => {\n if (error instanceof Error) return error.message;\n\n return String(error);\n};\n\nconst collectFileReads = (\n index: ProjectIndex,\n sourceFile: SourceFile,\n checker: TypeChecker,\n sink: ReadSink\n): TemplateReads => {\n try {\n collectTypeScriptReads(sourceFile, checker, sink, index.candidateNames);\n\n const classes = index.classes.get(sourceFile.fileName)?.classes ?? [];\n\n return collectAngularTemplateReads({\n allNames: index.candidateNames,\n checker,\n classes,\n directives: index.directives,\n sink\n });\n } catch (error) {\n const errorMessage = failureText(error);\n\n sink.addFallbackNames(\n index.candidateNames,\n `${sourceFile.fileName}: indexing failed (${errorMessage})`\n );\n\n const noTemplateReads: TemplateReads = {\n templateVersions: [],\n usedDirectiveIndex: false\n };\n\n return noTemplateReads;\n }\n};\n\nexport const computeEntry = (\n index: ProjectIndex,\n sourceFile: SourceFile,\n checker: TypeChecker\n): FileEntry => {\n const declarations = new Set<Node>();\n const dependencies = new Set<SourceFile>();\n const fallbackNames = new Set<string>();\n const seenTypes = new Set<Type>();\n const sink: ReadSink = {\n addDeclaration: (declaration) => {\n declarations.add(declaration);\n dependencies.add(declaration.getSourceFile());\n },\n addFallbackNames: (names) => {\n for (const name of names) {\n fallbackNames.add(name);\n }\n },\n addType: (type) => {\n addTypeDependencies(checker, type, dependencies, seenTypes);\n }\n };\n const reads = collectFileReads(index, sourceFile, checker, sink);\n\n dependencies.delete(sourceFile);\n\n const fileEntry: FileEntry = {\n ...reads,\n declarations,\n dependencies,\n fallbackNames,\n sourceFile\n };\n\n return fileEntry;\n};\n", "import {\n canHaveDecorators,\n forEachChild,\n getDecorators,\n isCallExpression,\n isClassLike,\n isObjectLiteralExpression\n} from 'typescript';\nimport type {\n CallExpression,\n ClassLikeDeclaration,\n Node,\n ObjectLiteralExpression,\n SourceFile,\n TypeChecker\n} from 'typescript';\n\nimport { scopeOf } from './angular-component-scope.ts';\nimport { angularDecoratorKind } from './angular-decorator-kind.ts';\nimport {\n exportAsOf,\n metadataProperty,\n stringValue,\n templateOf\n} from './angular-metadata-values.ts';\nimport type {\n AngularClass,\n DiscoveredClasses,\n Discovery\n} from '../common/project-usage.type.ts';\n\ntype UndecidedClass = Omit<AngularClass, 'valid'>;\n\nconst describedClass = (\n base: UndecidedClass,\n metadata: ObjectLiteralExpression,\n discovery: Discovery\n): AngularClass => {\n const selector = metadataProperty(metadata, 'selector');\n const described = {\n ...base,\n exportAs: exportAsOf(metadata, discovery),\n hostDirectives: metadataProperty(metadata, 'hostDirectives') !== undefined,\n selector: stringValue(selector, discovery)\n };\n\n if (!base.component) {\n const directiveDiscovery: AngularClass = { ...described, valid: true };\n\n return directiveDiscovery;\n }\n\n const fileName = base.declaration.getSourceFile().fileName;\n const template = templateOf(metadata, fileName, discovery);\n const componentDiscovery: AngularClass = {\n ...described,\n scope: scopeOf(metadata, discovery),\n template: template ?? null,\n valid: template !== undefined\n };\n\n return componentDiscovery;\n};\n\nconst decoratedClass = (\n declaration: ClassLikeDeclaration,\n call: CallExpression,\n discovery: Discovery\n): AngularClass | null => {\n const kind = angularDecoratorKind(call.expression, discovery);\n\n if (kind !== 'Component' && kind !== 'Directive') return null;\n\n const component = kind === 'Component';\n const base: UndecidedClass = {\n component,\n declaration,\n exportAs: [],\n hostDirectives: false,\n name: declaration.name?.text ?? '',\n scope: null,\n selector: null,\n template: null\n };\n const metadata = call.arguments.at(0);\n\n if (metadata === undefined) {\n const bareDiscovery: AngularClass = { ...base, valid: !component };\n\n return bareDiscovery;\n }\n\n const isMetadataObject = isObjectLiteralExpression(metadata);\n\n if (!isMetadataObject) {\n const invalidDiscovery: AngularClass = { ...base, valid: false };\n\n return invalidDiscovery;\n }\n\n return describedClass(base, metadata, discovery);\n};\n\nconst angularClass = (\n declaration: ClassLikeDeclaration,\n discovery: Discovery\n): AngularClass | null => {\n const hasDecorators = canHaveDecorators(declaration);\n\n if (!hasDecorators) return null;\n\n for (const decorator of getDecorators(declaration) ?? []) {\n const isDecoratorCall = isCallExpression(decorator.expression);\n\n if (!isDecoratorCall) continue;\n\n const found = decoratedClass(declaration, decorator.expression, discovery);\n\n if (found) return found;\n }\n\n return null;\n};\n\n/** Angular components and directives declared in one source file. */\nexport const angularClasses = (\n sourceFile: SourceFile,\n checker: TypeChecker\n): DiscoveredClasses => {\n const classes: AngularClass[] = [];\n const discovery: Discovery = { checker, dependencies: new Set() };\n\n const visit = (node: Node): void => {\n const isClass = isClassLike(node);\n\n if (isClass) {\n const found = angularClass(node, discovery);\n\n if (found) {\n classes.push(found);\n }\n }\n\n forEachChild(node, visit);\n };\n\n visit(sourceFile);\n discovery.dependencies.delete(sourceFile);\n\n const discovered: DiscoveredClasses = {\n classes,\n dependencies: discovery.dependencies\n };\n\n return discovered;\n};\n", "import {\n SyntaxKind,\n isArrayLiteralExpression,\n isClassLike,\n isIdentifier,\n isPropertyAccessExpression\n} from 'typescript';\nimport type {\n ClassLikeDeclaration,\n Expression,\n ObjectLiteralExpression,\n Symbol\n} from 'typescript';\n\nimport { classDecoratorKind, resolveAlias } from './angular-decorator-kind.ts';\nimport { metadataProperty } from './angular-metadata-values.ts';\nimport type { Discovery } from '../common/project-usage.type.ts';\n\nconst booleanValue = (node: Expression | undefined): boolean | undefined => {\n if (!node) return undefined;\n\n if (node.kind === SyntaxKind.TrueKeyword) return true;\n\n if (node.kind === SyntaxKind.FalseKeyword) return false;\n\n return undefined;\n};\n\nconst classesOf = (\n symbol: Symbol,\n discovery: Discovery\n): ClassLikeDeclaration[] => {\n const resolved = resolveAlias(symbol, discovery);\n const declarations = resolved.declarations ?? [];\n\n return declarations.filter(isClassLike);\n};\n\nconst scopedClasses = (\n classes: ClassLikeDeclaration[],\n discovery: Discovery\n): ClassLikeDeclaration[] | null => {\n const scoped: ClassLikeDeclaration[] = [];\n\n for (const declaration of classes) {\n if (declaration.getSourceFile().isDeclarationFile) continue;\n\n const kind = classDecoratorKind(declaration, discovery);\n\n if (kind === 'Pipe') continue;\n\n if (kind !== 'Component' && kind !== 'Directive') return null;\n\n scoped.push(declaration);\n }\n\n return scoped;\n};\n\nconst importedClasses = (\n element: Expression,\n discovery: Discovery\n): ClassLikeDeclaration[] | null => {\n const isIdentifierElement = isIdentifier(element);\n const isPropertyAccessElement = isPropertyAccessExpression(element);\n\n if (!isIdentifierElement && !isPropertyAccessElement) return null;\n\n const target = isIdentifierElement ? element : element.name;\n const symbol = discovery.checker.getSymbolAtLocation(target);\n\n if (!symbol) return null;\n\n const classes = classesOf(symbol, discovery);\n\n if (classes.length === 0) return null;\n\n return scopedClasses(classes, discovery);\n};\n\n/**\n * Resolves a standalone component's `imports` to program classes. Library\n * classes and pipes are skipped; anything that cannot be classified (an\n * NgModule, a spread, a `forwardRef`) makes the scope unknown.\n */\nexport const scopeOf = (\n metadata: ObjectLiteralExpression,\n discovery: Discovery\n): ClassLikeDeclaration[] | null => {\n const standalone = booleanValue(metadataProperty(metadata, 'standalone'));\n const imports = metadataProperty(metadata, 'imports');\n const isModuleDeclared = standalone === undefined && !imports;\n\n if (standalone === false || isModuleDeclared) return null;\n\n if (!imports) return [];\n\n const isImportsArray = isArrayLiteralExpression(imports);\n\n if (!isImportsArray) return null;\n\n const scope: ClassLikeDeclaration[] = [];\n\n for (const element of imports.elements) {\n const classes = importedClasses(element, discovery);\n\n if (classes === null) return null;\n\n scope.push(...classes);\n }\n\n return scope;\n};\n", "import {\n SymbolFlags,\n canHaveDecorators,\n getDecorators,\n isCallExpression,\n isImportDeclaration,\n isStringLiteralLike\n} from 'typescript';\nimport type {\n ClassLikeDeclaration,\n Declaration,\n Expression,\n Node,\n Symbol\n} from 'typescript';\n\nimport type { DecoratorKind, Discovery } from '../common/project-usage.type.ts';\n\nconst decoratorKinds: DecoratorKind[] = [\n 'Component',\n 'Directive',\n 'NgModule',\n 'Pipe'\n];\n\nconst isDecoratorKind = (name: string): name is DecoratorKind => {\n return decoratorKinds.some((kind) => kind === name);\n};\n\nconst isAngularCoreFile = (declaration: Declaration): boolean => {\n const fileName = declaration.getSourceFile().fileName.replaceAll('\\\\', '/');\n\n return fileName.includes('/node_modules/@angular/core/');\n};\n\nconst parentOf = (node: Node): Node | undefined => {\n return node.parent;\n};\n\nconst importedFromAngularCore = (declaration: Declaration): boolean => {\n let current = parentOf(declaration);\n\n while (current) {\n if (isImportDeclaration(current)) {\n return (\n isStringLiteralLike(current.moduleSpecifier) &&\n current.moduleSpecifier.text === '@angular/core'\n );\n }\n\n current = parentOf(current);\n }\n\n return false;\n};\n\n/**\n * Follows an alias one hop at a time so every re-exporting file on the way\n * to the target becomes a dependency of the discovery result.\n */\nexport const resolveAlias = (symbol: Symbol, discovery: Discovery): Symbol => {\n let current = symbol;\n\n for (let hop = 0; hop < 32; hop += 1) {\n for (const declaration of current.declarations ?? []) {\n discovery.dependencies.add(declaration.getSourceFile());\n }\n\n if ((current.flags & SymbolFlags.Alias) === 0) return current;\n\n const next = discovery.checker.getImmediateAliasedSymbol(current);\n\n if (!next || next === current) return current;\n\n current = next;\n }\n\n return current;\n};\n\nexport const angularDecoratorKind = (\n expression: Expression,\n discovery: Discovery\n): DecoratorKind | null => {\n const unresolved = discovery.checker.getSymbolAtLocation(expression);\n\n if (!unresolved) return null;\n\n const symbol = resolveAlias(unresolved, discovery);\n const name = symbol.getName();\n const isKind = isDecoratorKind(name);\n\n if (!isKind) return null;\n\n const unresolvedDeclarations = unresolved.declarations ?? [];\n const symbolDeclarations = symbol.declarations ?? [];\n const isCoreImport = unresolvedDeclarations.some(importedFromAngularCore);\n const isCoreDeclaration = symbolDeclarations.some(isAngularCoreFile);\n const fromAngularCore = isCoreImport || isCoreDeclaration;\n\n if (!fromAngularCore) return null;\n\n return name;\n};\n\nexport const classDecoratorKind = (\n declaration: ClassLikeDeclaration,\n discovery: Discovery\n): DecoratorKind | null => {\n const hasDecorators = canHaveDecorators(declaration);\n\n if (!hasDecorators) return null;\n\n for (const decorator of getDecorators(declaration) ?? []) {\n const isDecoratorCall = isCallExpression(decorator.expression);\n\n if (!isDecoratorCall) continue;\n\n const kind = angularDecoratorKind(\n decorator.expression.expression,\n discovery\n );\n\n if (kind !== null) return kind;\n }\n\n return null;\n};\n", "import { dirname, resolve } from 'node:path';\n\nimport {\n isIdentifier,\n isNumericLiteral,\n isPropertyAccessExpression,\n isPropertyAssignment,\n isStringLiteralLike\n} from 'typescript';\nimport type { Expression, ObjectLiteralExpression } from 'typescript';\n\nimport { resolveAlias } from './angular-decorator-kind.ts';\nimport type {\n AngularTemplate,\n Discovery\n} from '../common/project-usage.type.ts';\n\n/**\n * The string an expression evaluates to: a literal, or a constant whose\n * type is a single string literal (`const URL = './x.html'`, imported or\n * not). The constant's declaration file becomes a dependency.\n */\nexport const stringValue = (\n node: Expression | undefined,\n discovery: Discovery\n): string | null => {\n if (!node) return null;\n\n const isStringLiteral = isStringLiteralLike(node);\n\n if (isStringLiteral) return node.text;\n\n const isIdentifierNode = isIdentifier(node);\n const isPropertyAccessNode = isPropertyAccessExpression(node);\n\n if (isIdentifierNode || isPropertyAccessNode) {\n const symbol = discovery.checker.getSymbolAtLocation(\n isIdentifier(node) ? node : node.name\n );\n\n if (symbol) {\n resolveAlias(symbol, discovery);\n }\n }\n\n const type = discovery.checker.getTypeAtLocation(node);\n\n return type.isStringLiteral() ? type.value : null;\n};\n\nexport const metadataProperty = (\n metadata: ObjectLiteralExpression,\n name: string\n): Expression | undefined => {\n for (const property of metadata.properties) {\n const isAssignment = isPropertyAssignment(property);\n\n if (!isAssignment) continue;\n\n const isIdentifierName = isIdentifier(property.name);\n const isStringName = isStringLiteralLike(property.name);\n const isNumericName = isNumericLiteral(property.name);\n const isLiteralName = isIdentifierName || isStringName || isNumericName;\n const isPropertyNamed = isLiteralName && property.name.text === name;\n\n if (isPropertyNamed) return property.initializer;\n }\n\n return undefined;\n};\n\nexport const templateOf = (\n metadata: ObjectLiteralExpression,\n fileName: string,\n discovery: Discovery\n): AngularTemplate | null | undefined => {\n const inline = metadataProperty(metadata, 'template');\n\n if (inline) {\n const source = stringValue(inline, discovery);\n\n if (source === null) return undefined;\n\n const inlineTemplate: AngularTemplate = { kind: 'inline', source };\n\n return inlineTemplate;\n }\n\n const url = metadataProperty(metadata, 'templateUrl');\n\n if (url) {\n const text = stringValue(url, discovery);\n\n if (text === null) return undefined;\n\n const externalFileName = resolve(dirname(fileName), text);\n const externalTemplate: AngularTemplate = {\n fileName: externalFileName,\n kind: 'external'\n };\n\n return externalTemplate;\n }\n\n return null;\n};\n\nexport const exportAsOf = (\n metadata: ObjectLiteralExpression,\n discovery: Discovery\n): string[] => {\n const exportAsProperty = metadataProperty(metadata, 'exportAs');\n const exportAs = stringValue(exportAsProperty, discovery) ?? '';\n const names = exportAs.split(',').map((name) => name.trim());\n\n return names.filter(Boolean);\n};\n", "const specFilePattern = /\\.spec\\.[cm]?[tj]sx?$/u;\n\nexport const isSpecFile = (fileName: string): boolean => {\n return specFilePattern.test(fileName);\n};\n", "import type { Program, SourceFile } from 'typescript';\n\nimport { templateFileIsCurrent } from './angular/angular-template-reads.ts';\nimport type {\n FileEntry,\n ProjectIndex,\n SourceFileMaps,\n TemplateFileVersion\n} from './common/project-index.type.ts';\nimport { isSpecFile } from './utils/spec-file.util.ts';\n\nconst typeScriptFilePattern = /\\.(?:[cm]?ts|tsx)$/u;\n\nconst isIndexable = (program: Program, sourceFile: SourceFile): boolean => {\n if (sourceFile.isDeclarationFile) return false;\n\n const isExternal = program.isSourceFileFromExternalLibrary(sourceFile);\n\n if (isExternal) return false;\n\n const isSpec = isSpecFile(sourceFile.fileName);\n\n if (isSpec) return false;\n\n return typeScriptFilePattern.test(sourceFile.fileName);\n};\n\nexport const indexableSourceFiles = (program: Program): SourceFile[] => {\n const sourceFiles = program.getSourceFiles();\n\n return sourceFiles.filter((sourceFile) => isIndexable(program, sourceFile));\n};\n\nexport const sourceFileMaps = (program: Program): SourceFileMaps => {\n const all = new Map<string, SourceFile>();\n const current = new Map<string, SourceFile>();\n\n for (const sourceFile of program.getSourceFiles()) {\n all.set(sourceFile.fileName, sourceFile);\n }\n\n for (const sourceFile of indexableSourceFiles(program)) {\n current.set(sourceFile.fileName, sourceFile);\n }\n\n const maps: SourceFileMaps = { all, current };\n\n return maps;\n};\n\nexport const dropEntries = (\n index: ProjectIndex,\n stale: (entry: FileEntry) => boolean\n): void => {\n for (const [fileName, entry] of index.entries) {\n const isStale = stale(entry);\n\n if (isStale) {\n index.entries.delete(fileName);\n }\n }\n};\n\nexport const isReplaced = (\n sourceFile: SourceFile,\n dependencies: ReadonlySet<SourceFile>,\n maps: SourceFileMaps\n): boolean => {\n const indexedSourceFile = maps.current.get(sourceFile.fileName);\n\n if (indexedSourceFile !== sourceFile) return true;\n\n for (const dependency of dependencies) {\n const indexedDependency = maps.all.get(dependency.fileName);\n\n if (indexedDependency !== dependency) return true;\n }\n\n return false;\n};\n\nexport const dropReplacedEntries = (\n index: ProjectIndex,\n maps: SourceFileMaps\n): void => {\n const isEntryReplaced = (entry: FileEntry): boolean => {\n return isReplaced(entry.sourceFile, entry.dependencies, maps);\n };\n\n dropEntries(index, isEntryReplaced);\n};\n\nexport const dropEntriesMentioning = (\n index: ProjectIndex,\n names: ReadonlySet<string>\n): void => {\n if (names.size === 0) return;\n\n if (index.entries.size === 0) return;\n\n const nameList = [...names];\n const mentionsName = (entry: FileEntry): boolean => {\n return nameList.some((name) => entry.sourceFile.text.includes(name));\n };\n\n dropEntries(index, mentionsName);\n};\n\nconst templateVersionChecker = (): ((\n version: TemplateFileVersion\n) => boolean) => {\n const checked = new Map<string, boolean>();\n\n return (version: TemplateFileVersion): boolean => {\n const key = `${version.fileName}\\0${version.mtimeNs}\\0${version.size}`;\n const known = checked.get(key);\n\n if (known !== undefined) return known;\n\n const current = templateFileIsCurrent(version);\n\n checked.set(key, current);\n\n return current;\n };\n};\n\nexport const dropStaleTemplateEntries = (\n index: ProjectIndex,\n force: boolean\n): void => {\n const now = performance.now();\n const sinceLastCheck = now - index.templateCheckedAt;\n const isThrottled =\n !force && sinceLastCheck < index.templateCheckDuration * 100;\n\n if (isThrottled) return;\n\n const isCurrent = templateVersionChecker();\n const hasStaleTemplate = (entry: FileEntry): boolean => {\n return !entry.templateVersions.every(isCurrent);\n };\n\n dropEntries(index, hasStaleTemplate);\n\n index.templateCheckedAt = now;\n index.templateCheckDuration = performance.now() - now;\n};\n", "import {\n canHaveDecorators,\n forEachChild,\n getDecorators,\n isClassLike,\n isIdentifier,\n isStringLiteralLike\n} from 'typescript';\nimport type { ClassLikeDeclaration, Node, SourceFile } from 'typescript';\n\nconst isDecoratedClass = (node: ClassLikeDeclaration): boolean => {\n const isDecoratable = canHaveDecorators(node);\n\n if (!isDecoratable) return false;\n\n const decorators = getDecorators(node);\n const decoratorCount = decorators?.length ?? 0;\n\n return decoratorCount > 0;\n};\n\nconst addMemberNames = (node: Node, names: Set<string>): void => {\n const isClass = isClassLike(node);\n\n if (!isClass) return;\n\n const isDecorated = isDecoratedClass(node);\n\n if (!isDecorated) return;\n\n for (const member of node.members) {\n if (!member.name) continue;\n\n const isIdentifierName = isIdentifier(member.name);\n const isStringName = isStringLiteralLike(member.name);\n const isNamedMember = isIdentifierName || isStringName;\n\n if (isNamedMember) {\n names.add(member.name.text);\n }\n }\n};\n\n/** Names of members declared by decorated classes in one source file. */\nexport const collectCandidateNames = (sourceFile: SourceFile): Set<string> => {\n const names = new Set<string>();\n\n const visit = (node: Node): void => {\n addMemberNames(node, names);\n forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n return names;\n};\n", "import type { SourceFile } from 'typescript';\n\nimport { angularClasses } from './angular/angular-component-discovery.ts';\nimport {\n buildDirectiveIndex,\n directiveShape\n} from './angular/angular-directive-index.ts';\nimport type {\n FileClasses,\n LazyChecker,\n ProjectIndex,\n SourceFileMaps\n} from './common/project-index.type.ts';\nimport { dropEntries, isReplaced } from './project-index-staleness.ts';\nimport { collectCandidateNames } from './typescript/typescript-candidate-names.ts';\n\nconst dropReplacedClasses = (\n index: ProjectIndex,\n maps: SourceFileMaps\n): boolean => {\n let changed = false;\n\n for (const [fileName, fileClasses] of index.classes) {\n const replaced = isReplaced(\n fileClasses.sourceFile,\n fileClasses.dependencies,\n maps\n );\n\n if (!replaced) continue;\n\n index.classes.delete(fileName);\n changed = true;\n }\n\n return changed;\n};\n\nconst addCandidateNames = (\n index: ProjectIndex,\n candidateNames: ReadonlySet<string>,\n newNames: Set<string>\n): void => {\n for (const name of candidateNames) {\n const isKnownName = index.candidateNames.has(name);\n\n if (isKnownName) continue;\n\n index.candidateNames.add(name);\n newNames.add(name);\n }\n};\n\nconst indexFileClasses = (\n index: ProjectIndex,\n sourceFile: SourceFile,\n checker: LazyChecker,\n newNames: Set<string>\n): void => {\n const candidateNames = collectCandidateNames(sourceFile);\n\n addCandidateNames(index, candidateNames, newNames);\n\n const { classes, dependencies } = angularClasses(sourceFile, checker());\n const fileClasses: FileClasses = {\n candidateNames,\n classes,\n dependencies,\n sourceFile\n };\n\n index.classes.set(sourceFile.fileName, fileClasses);\n index.entries.delete(sourceFile.fileName);\n};\n\nconst indexNewClasses = (\n index: ProjectIndex,\n current: ReadonlyMap<string, SourceFile>,\n checker: LazyChecker,\n newNames: Set<string>\n): boolean => {\n let changed = false;\n\n for (const [fileName, sourceFile] of current) {\n const isIndexed = index.classes.has(fileName);\n\n if (isIndexed) continue;\n\n indexFileClasses(index, sourceFile, checker, newNames);\n changed = true;\n }\n\n return changed;\n};\n\nconst rebuildDirectives = (index: ProjectIndex): void => {\n const fileClasses = [...index.classes.values()];\n const classes = fileClasses.flatMap((entry) => entry.classes);\n const shape = directiveShape(classes);\n\n index.directives = buildDirectiveIndex(classes);\n\n if (shape === index.directiveShape) return;\n\n index.directiveShape = shape;\n dropEntries(index, (entry) => entry.usedDirectiveIndex);\n};\n\n/** Re-index changed files' classes; returns member names never seen before. */\nexport const reconcileClasses = (\n index: ProjectIndex,\n maps: SourceFileMaps,\n checker: LazyChecker\n): Set<string> => {\n const newNames = new Set<string>();\n const droppedClasses = dropReplacedClasses(index, maps);\n const addedClasses = indexNewClasses(index, maps.current, checker, newNames);\n const changed = droppedClasses || addedClasses;\n\n if (changed) {\n rebuildDirectives(index);\n }\n\n return newNames;\n};\n", "import type { Program, SourceFile, TypeChecker } from 'typescript';\n\nimport type { LazyChecker, ProjectIndex } from './common/project-index.type.ts';\nimport { computeEntry } from './project-file-entry.ts';\nimport { reconcileClasses } from './project-index-classes.ts';\nimport {\n dropEntriesMentioning,\n dropReplacedEntries,\n dropStaleTemplateEntries,\n indexableSourceFiles,\n sourceFileMaps\n} from './project-index-staleness.ts';\n\nconst lazyChecker = (program: Program): LazyChecker => {\n let typeChecker: TypeChecker | undefined;\n\n return () => (typeChecker ??= program.getTypeChecker());\n};\n\nconst indexMissingEntries = (\n index: ProjectIndex,\n sourceFiles: Iterable<SourceFile>,\n checker: LazyChecker\n): void => {\n for (const sourceFile of sourceFiles) {\n const isEntryIndexed = index.entries.has(sourceFile.fileName);\n\n if (isEntryIndexed) continue;\n\n const entry = computeEntry(index, sourceFile, checker());\n\n index.entries.set(sourceFile.fileName, entry);\n }\n};\n\nconst reindexProgram = (\n index: ProjectIndex,\n program: Program,\n checker: LazyChecker\n): void => {\n const maps = sourceFileMaps(program);\n\n dropReplacedEntries(index, maps);\n\n const newNames = reconcileClasses(index, maps, checker);\n\n dropEntriesMentioning(index, newNames);\n\n index.program = program;\n index.usage = undefined;\n dropStaleTemplateEntries(index, true);\n indexMissingEntries(index, maps.current.values(), checker);\n};\n\nconst refreshTemplateEntries = (\n index: ProjectIndex,\n program: Program,\n checker: LazyChecker\n): void => {\n const entryCount = index.entries.size;\n\n dropStaleTemplateEntries(index, false);\n\n const isUnchanged = index.entries.size === entryCount;\n\n if (isUnchanged) return;\n\n index.usage = undefined;\n indexMissingEntries(index, indexableSourceFiles(program), checker);\n};\n\nexport const reconcile = (index: ProjectIndex, program: Program): void => {\n const checker = lazyChecker(program);\n const isNewProgram = index.program !== program;\n\n if (isNewProgram) {\n reindexProgram(index, program, checker);\n\n return;\n }\n\n refreshTemplateEntries(index, program, checker);\n};\n", "import { defineConfig } from 'eslint/config';\n\nimport { baseLimits } from './base-limits.ts';\nimport { basePractices } from './base-practices.ts';\nimport { baseRecommended } from './base-recommended.ts';\n\nexport const base = defineConfig([\n ...baseRecommended,\n ...basePractices,\n ...baseLimits\n]);\n", "import { defineConfig } from 'eslint/config';\n\nexport const baseLimits = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts',\n '**/*.html'\n ],\n rules: {\n 'max-lines': [\n 'error',\n {\n max: 150,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n 'max-lines-per-function': 'off',\n complexity: ['warn', { max: 3 }],\n 'max-lines': [\n 'error',\n {\n max: 300,\n skipBlankLines: true,\n skipComments: true\n }\n ]\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n 'max-classes-per-file': 'off'\n }\n },\n {\n files: ['**/*.state.ts'],\n rules: {\n 'class-methods-use-this': 'off'\n }\n }\n]);\n", "import { defineConfig } from 'eslint/config';\n\nexport const basePractices = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'no-param-reassign': 'error',\n 'no-alert': 'error',\n 'no-console': ['warn', { allow: ['warn', 'error'] }],\n 'no-debugger': 'error',\n eqeqeq: ['error', 'always', { null: 'ignore' }],\n curly: ['error', 'multi-line'],\n 'prefer-const': ['error', { destructuring: 'all' }],\n 'no-var': 'error',\n 'object-shorthand': 'error',\n 'prefer-arrow-callback': 'error',\n 'no-useless-concat': 'error',\n 'prefer-template': 'error',\n 'no-nested-ternary': 'error',\n 'no-useless-assignment': 'error', // NEW: Catch unused assignments (ESLint v9)\n 'no-object-constructor': 'error', // Disallow new Object() without arguments\n 'no-else-return': ['error', { allowElseIf: false }], // Prefer early returns\n 'no-multi-assign': 'error', // Disallow chaining assignments\n radix: 'error', // Require radix parameter for parseInt()\n yoda: 'error', // Disallow yoda conditions (`if (\"red\" === color)`)\n complexity: ['warn', 10], // Warn if function complexity is high\n 'max-depth': ['warn', 4], // Warn on deeply nested blocks\n 'max-lines-per-function': [\n 'warn',\n { max: 50, skipBlankLines: true, skipComments: true }\n ], // Warn on long functions\n 'max-params': ['warn', 4], // Warn on functions with many parameters\n 'no-lonely-if': 'error', // Disallow if statements as the only statement in an else block\n 'grouped-accessor-pairs': ['error', 'getBeforeSet'], // Enforce consistency for getters/setters\n 'class-methods-use-this': 'error',\n 'no-underscore-dangle': 'error',\n 'max-len': [\n 'error',\n {\n code: 135,\n ignoreComments: true\n }\n ],\n 'spaced-comment': [\n 2,\n 'always',\n {\n block: {\n exceptions: ['*']\n }\n }\n ],\n '@stylistic/padding-line-between-statements': [\n 'error',\n {\n blankLine: 'always',\n prev: 'export',\n next: ['export', 'const']\n },\n {\n blankLine: 'always',\n prev: ['const', 'let', 'var'],\n next: '*'\n },\n {\n blankLine: 'any',\n prev: ['const', 'let', 'var'],\n next: ['const', 'let', 'var']\n },\n {\n blankLine: 'always',\n prev: '*',\n next: [\n 'for',\n 'if',\n 'return',\n 'throw',\n 'switch',\n 'try',\n 'class',\n 'function'\n ]\n }\n ],\n '@stylistic/comma-dangle': ['error', 'never'],\n '@stylistic/indent': [\n 'error',\n 2,\n {\n offsetTernaryExpressions: true,\n SwitchCase: 1,\n ignoredNodes: [\n 'TSTypeParameterInstantiation',\n 'FunctionExpression > .params > :matches(Decorator, :not(:first-child))'\n ]\n }\n ],\n 'sort-imports': [\n 'error',\n {\n ignoreCase: false,\n ignoreDeclarationSort: true,\n ignoreMemberSort: false,\n memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],\n allowSeparatedGroups: true\n }\n ]\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport stylistic from '@stylistic/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport importPluginX from 'eslint-plugin-import-x';\n\nexport const baseRecommended = defineConfig([\n { extends: [...configs['flat/base']] },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [importPluginX.flatConfigs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n extends: [stylistic.configs.recommended]\n }\n]);\n", "import { defineConfig } from 'eslint/config';\nimport boundariesPlugin from 'eslint-plugin-boundaries';\n\nexport const boundaries = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n boundaries: boundariesPlugin\n },\n settings: {\n 'boundaries/elements': [\n {\n type: 'feature',\n pattern: '**/feature/**'\n },\n {\n type: 'data-access',\n pattern: '**/data-access/**'\n },\n {\n type: 'domain-logic',\n pattern: '**/domain-logic/**'\n },\n {\n type: 'ui',\n pattern: '**/ui/**'\n },\n {\n type: 'common',\n pattern: '**/common/**'\n },\n {\n type: 'utils',\n pattern: '**/utils/**'\n }\n ],\n 'import/resolver': {\n typescript: {\n alwaysTryTypes: true\n }\n }\n },\n rules: {\n ...boundariesPlugin.configs.recommended.rules,\n 'boundaries/dependencies': [\n 'error',\n {\n default: 'disallow',\n message:\n '{{to.element.types}} is not allowed to be imported in {{from.element.types}}',\n policies: [\n {\n from: { element: { type: 'feature' } },\n allow: [\n { to: { element: { type: 'feature' } } },\n { to: { element: { type: 'ui' } } },\n { to: { element: { type: 'domain-logic' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'domain-logic' } },\n allow: [\n { to: { element: { type: 'domain-logic' } } },\n { to: { element: { type: 'data-access' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'data-access' } },\n allow: [\n { to: { element: { type: 'data-access' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'ui' } },\n allow: [\n { to: { element: { type: 'ui' } } },\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'utils' } },\n allow: [\n { to: { element: { type: 'utils' } } },\n { to: { element: { type: 'common' } } }\n ]\n },\n {\n from: { element: { type: 'common' } },\n allow: [{ to: { element: { type: 'common' } } }]\n }\n ]\n }\n ]\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n 'boundaries/dependencies': 'off'\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport type { CompatibleConfigArray } from 'typescript-eslint';\n\nconst nxJavascript: CompatibleConfigArray = configs['flat/javascript'];\n\nexport const javascript = defineConfig({\n files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],\n extends: nxJavascript\n});\n", "import jsonPlugin from '@eslint/json';\nimport { defineConfig } from 'eslint/config';\n\nexport const json = defineConfig([\n {\n plugins: { json: jsonPlugin }\n },\n {\n files: ['**/*.json'],\n language: 'json/json',\n extends: [jsonPlugin.configs.recommended]\n }\n]);\n", "import { defineConfig } from 'eslint/config';\nimport playwrightEslint from 'eslint-plugin-playwright';\n\nexport const playwright = defineConfig([\n {\n ...playwrightEslint.configs['flat/recommended'],\n files: ['**/*.e2e.ts', '**/*.e2e.js'],\n rules: {\n ...playwrightEslint.configs['flat/recommended'].rules,\n // Locator best practices\n 'playwright/prefer-locator': 'error',\n 'playwright/prefer-native-locators': 'error',\n 'playwright/no-nth-methods': 'warn',\n // Matcher improvements\n 'playwright/prefer-to-be': 'error',\n 'playwright/prefer-to-have-count': 'error',\n 'playwright/prefer-to-have-length': 'error',\n 'playwright/prefer-comparison-matcher': 'error',\n // Test structure\n 'playwright/prefer-hooks-on-top': 'error',\n 'playwright/require-top-level-describe': 'warn'\n }\n }\n]);\n", "import { defineConfig } from 'eslint/config';\nimport eslintConfigPrettier from 'eslint-config-prettier';\n\nexport const prettier = defineConfig([eslintConfigPrettier]);\n", "import rxjsEslint from '@smarttools/eslint-plugin-rxjs';\nimport { defineConfig } from 'eslint/config';\n\nexport const rxjs = defineConfig([\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n extends: [rxjsEslint.configs.recommended]\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n plugins: {\n rxjs: rxjsEslint\n }\n },\n {\n files: [\n '**/*.js',\n '**/*.jsx',\n '**/*.cjs',\n '**/*.mjs',\n '**/*.ts',\n '**/*.tsx',\n '**/*.cts',\n '**/*.mts'\n ],\n rules: {\n 'rxjs/prefer-observer': 'error',\n 'rxjs/finnish': 'warn',\n 'rxjs/no-ignored-subscription': 'warn',\n 'rxjs/no-ignored-error': 'warn',\n 'rxjs/no-unsafe-switchmap': 'error',\n 'rxjs/no-unsafe-takeuntil': 'error',\n 'rxjs/no-unsafe-catch': 'error',\n 'rxjs/no-unsafe-first': 'error',\n 'rxjs/no-topromise': 'error',\n 'rxjs/throw-error': 'error',\n 'rxjs/no-async-subscribe': 'off',\n 'rxjs/no-exposed-subjects': 'error', // Enforce subject encapsulation\n 'rxjs/no-cyclic-action': 'error', // Prevent infinite loops in NgRx effects\n 'rxjs/no-subscribe-handlers': 'warn' // Prefer observer objects (complements prefer-observer)\n }\n },\n {\n files: ['**/*.spec.ts', '**/*.test.ts', '**/*.spec.js', '**/*.test.js'],\n rules: {\n 'rxjs/no-ignored-subscription': 'off',\n 'rxjs/no-subscribe-handlers': 'off'\n }\n }\n]);\n", "import { defineConfig } from 'eslint/config';\nimport storybookEslint from 'eslint-plugin-storybook';\n\nexport const storybook = defineConfig([\n {\n ignores: ['!.storybook'],\n files: ['**/*.stories.ts'],\n extends: [storybookEslint.configs['flat/recommended']],\n rules: {\n 'storybook/csf-component': 'warn', // Ensure component property is set\n 'storybook/no-stories-of': 'error' // Prevent deprecated storiesOf API\n }\n }\n]);\n", "import { defineConfig } from 'eslint/config';\n\nimport { typescriptConsistency } from './typescript-consistency.ts';\nimport { typescriptImports } from './typescript-imports.ts';\nimport { typescriptOverrides } from './typescript-overrides.ts';\nimport { typescriptRecommended } from './typescript-recommended.ts';\nimport { typescriptSafety } from './typescript-safety.ts';\n\nexport { localPlugin } from './typescript-local-plugin.ts';\n\nexport const typescript = defineConfig([\n ...typescriptRecommended,\n ...typescriptSafety,\n ...typescriptConsistency,\n ...typescriptImports,\n ...typescriptOverrides\n]);\n", "import { defineConfig } from 'eslint/config';\n\nexport const typescriptConsistency = defineConfig([\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n rules: {\n '@typescript-eslint/consistent-type-assertions': [\n 'error',\n { assertionStyle: 'as', objectLiteralTypeAssertions: 'never' }\n ],\n '@typescript-eslint/consistent-type-definitions': ['error', 'type'],\n '@typescript-eslint/consistent-type-imports': [\n 'error',\n { prefer: 'type-imports', fixStyle: 'separate-type-imports' }\n ],\n '@typescript-eslint/naming-convention': [\n 'error',\n {\n selector: ['objectLiteralProperty', 'objectLiteralMethod'],\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'objectLiteralMethod',\n format: ['camelCase', 'PascalCase']\n },\n {\n selector: 'objectLiteralProperty',\n format: ['camelCase', 'snake_case', 'PascalCase']\n },\n {\n selector: 'parameter',\n format: ['camelCase'],\n leadingUnderscore: 'allow'\n },\n { selector: 'default', format: ['camelCase'] },\n { selector: 'variable', format: ['camelCase', 'UPPER_CASE'] },\n { selector: 'function', format: ['camelCase'] },\n { selector: 'typeLike', format: ['PascalCase'] },\n {\n selector: 'property',\n modifiers: ['requiresQuotes'],\n format: null\n },\n {\n selector: 'property',\n format: ['camelCase', 'PascalCase', 'snake_case']\n }\n ]\n }\n }\n]);\n", "import { defineConfig } from 'eslint/config';\nimport { createTypeScriptImportResolver } from 'eslint-import-resolver-typescript';\n\nconst pathGroups = [\n { pattern: '@angular/**', group: 'builtin', position: 'before' },\n { pattern: '@nestjs/**', group: 'builtin', position: 'before' },\n { pattern: '@shared/**', group: 'internal', position: 'before' },\n { pattern: '@backend/**', group: 'internal', position: 'before' },\n { pattern: '@frontend/**', group: 'internal', position: 'before' },\n { pattern: '@*/shared/**', group: 'internal', position: 'before' },\n { pattern: '@*/frontend/**', group: 'internal', position: 'after' },\n { pattern: '@*/backend/**', group: 'internal', position: 'after' }\n];\n\nexport const typescriptImports = defineConfig([\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n rules: {\n 'import-x/order': [\n 'error',\n {\n groups: [\n 'builtin',\n 'external',\n 'internal',\n ['parent', 'sibling'],\n 'index',\n 'unknown'\n ],\n pathGroups,\n pathGroupsExcludedImportTypes: ['builtin'],\n 'newlines-between': 'always',\n alphabetize: { order: 'asc', caseInsensitive: true }\n }\n ],\n // TypeScript already checks these four; import-x would re-parse every import with a parser resolved by name, which fails under pnpm.\n 'import-x/namespace': 'off',\n 'import-x/default': 'off',\n 'import-x/no-named-as-default': 'off',\n 'import-x/no-named-as-default-member': 'off',\n 'import-x/no-unresolved': 'error',\n 'import-x/no-duplicates': 'error',\n 'import-x/prefer-default-export': 'off',\n 'import-x/no-useless-path-segments': ['error', { noUselessIndex: true }],\n 'import-x/newline-after-import': 'error',\n 'import-x/first': 'error',\n 'import-x/no-mutable-exports': 'error',\n 'import-x/no-self-import': 'error',\n 'import-x/no-cycle': ['error', { maxDepth: 2, ignoreExternal: true }],\n 'import-x/consistent-type-specifier-style': ['error', 'prefer-top-level'],\n 'import-x/no-anonymous-default-export': 'error'\n },\n settings: {\n 'import-x/resolver-next': [\n createTypeScriptImportResolver({\n alwaysTryTypes: true\n })\n ]\n }\n }\n]);\n", "import { defineConfig } from 'eslint/config';\n\nexport const typescriptOverrides = defineConfig([\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n languageOptions: {\n parserOptions: {\n projectService: true\n }\n },\n rules: {\n '@typescript-eslint/prefer-readonly': 'error'\n }\n },\n {\n files: ['**/*.action.ts'],\n rules: {\n '@typescript-eslint/no-namespace': 'off',\n '@typescript-eslint/no-extraneous-class': 'off'\n }\n },\n {\n files: [\n '**/*.spec.ts',\n '**/*.test.ts',\n '**/*.spec.js',\n '**/*.test.js',\n '**/*.e2e.ts',\n '**/*.e2e.js'\n ],\n rules: {\n '@typescript-eslint/no-empty-function': 'off',\n '@typescript-eslint/unbound-method': 'off',\n '@typescript-eslint/consistent-type-assertions': 'off'\n }\n },\n {\n files: ['**/*.stories.ts'],\n rules: {\n '@typescript-eslint/consistent-type-assertions': 'off',\n '@typescript-eslint/naming-convention': 'off'\n }\n }\n]);\n", "import { configs } from '@nx/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\nimport importPluginX from 'eslint-plugin-import-x';\nimport type { CompatibleConfigArray } from 'typescript-eslint';\n\nconst nxTypescript: CompatibleConfigArray = configs['flat/typescript'];\n\nexport const typescriptRecommended = defineConfig([\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n extends: [importPluginX.flatConfigs.typescript, ...nxTypescript]\n }\n]);\n", "import { defineConfig } from 'eslint/config';\n\nimport { localPlugin } from './typescript-local-plugin.ts';\n\nexport const typescriptSafety = defineConfig([\n {\n files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],\n plugins: { local: localPlugin },\n rules: {\n 'local/explicit-accessibility': 'error',\n 'local/readonly-type-properties': 'error',\n 'local/no-inline-object-types': 'error',\n '@typescript-eslint/explicit-function-return-type': 'error',\n '@typescript-eslint/no-empty-function': 'error',\n '@typescript-eslint/no-unused-vars': 'error',\n '@typescript-eslint/no-use-before-define': 'error',\n '@typescript-eslint/no-explicit-any': 'error',\n '@typescript-eslint/no-unsafe-assignment': 'error',\n '@typescript-eslint/no-unsafe-call': 'error',\n '@typescript-eslint/no-unsafe-member-access': 'error',\n '@typescript-eslint/no-unsafe-return': 'error',\n '@typescript-eslint/no-unsafe-argument': 'error',\n '@typescript-eslint/no-empty-object-type': 'error',\n '@typescript-eslint/no-unsafe-function-type': 'error',\n '@typescript-eslint/no-wrapper-object-types': 'error',\n '@typescript-eslint/explicit-module-boundary-types': 'error',\n '@typescript-eslint/no-non-null-assertion': 'error',\n '@typescript-eslint/prefer-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-optional-chain': 'error',\n '@typescript-eslint/no-floating-promises': [\n 'error',\n { ignoreVoid: true }\n ],\n '@typescript-eslint/no-misused-promises': 'warn',\n '@typescript-eslint/promise-function-async': 'error',\n '@typescript-eslint/await-thenable': 'error',\n '@typescript-eslint/no-inferrable-types': 'warn',\n '@typescript-eslint/no-require-imports': 'error',\n '@typescript-eslint/only-throw-error': 'error',\n '@typescript-eslint/no-array-delete': 'error',\n '@typescript-eslint/return-await': ['error', 'in-try-catch'],\n '@typescript-eslint/require-await': 'error',\n '@typescript-eslint/restrict-template-expressions': [\n 'error',\n { allowNumber: true, allowBoolean: true }\n ],\n '@typescript-eslint/restrict-plus-operands': 'error',\n '@typescript-eslint/prefer-as-const': 'error',\n '@typescript-eslint/no-shadow': 'error',\n '@typescript-eslint/switch-exhaustiveness-check': 'error',\n '@typescript-eslint/no-unused-expressions': [\n 'error',\n { allowShortCircuit: true, allowTernary: true }\n ],\n '@typescript-eslint/no-useless-constructor': 'error',\n '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }],\n '@typescript-eslint/no-unnecessary-condition': 'error',\n '@typescript-eslint/no-confusing-void-expression': [\n 'error',\n { ignoreArrowShorthand: true, ignoreVoidOperator: true }\n ],\n '@typescript-eslint/no-dynamic-delete': 'error',\n '@typescript-eslint/no-extraneous-class': [\n 'error',\n { allowWithDecorator: true }\n ],\n '@typescript-eslint/no-invalid-void-type': 'error',\n '@typescript-eslint/unified-signatures': 'error',\n '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',\n '@typescript-eslint/prefer-find': 'error',\n '@typescript-eslint/prefer-for-of': 'error',\n '@typescript-eslint/prefer-includes': 'error',\n '@typescript-eslint/prefer-string-starts-ends-with': 'error',\n '@typescript-eslint/prefer-regexp-exec': 'error'\n }\n }\n]);\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\nimport {\n accessibilities,\n defaultOptions,\n meta\n} from './common/explicit-accessibility.const.ts';\nimport type {\n Accessibility,\n AutoFix,\n Fix,\n FixAccessibility,\n Member,\n MessageIds,\n Options\n} from './common/explicit-accessibility.type.ts';\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://github.com/F0rty-Tw0/lint-suite#explicit-accessibility'\n);\n\nconst isPrivateMember = (node: Member): boolean => {\n if (node.type === TSESTree.AST_NODE_TYPES.TSParameterProperty) return false;\n\n return node.key.type === TSESTree.AST_NODE_TYPES.PrivateIdentifier;\n};\n\nconst isConstructor = (node: Member): boolean => {\n if (node.type !== TSESTree.AST_NODE_TYPES.MethodDefinition) return false;\n\n return node.kind === 'constructor';\n};\n\nconst reportTarget = (node: Member): TSESTree.Node => {\n if (node.type !== TSESTree.AST_NODE_TYPES.TSParameterProperty) {\n return node.key;\n }\n\n const { parameter } = node;\n\n if (parameter.type === TSESTree.AST_NODE_TYPES.AssignmentPattern) {\n return parameter.left;\n }\n\n return parameter;\n};\n\nconst memberName = (\n target: TSESTree.Node,\n sourceCode: TSESLint.SourceCode\n): string => {\n if (target.type === TSESTree.AST_NODE_TYPES.Identifier) return target.name;\n\n return sourceCode.getText(target);\n};\n\nconst modifierToken = (\n node: Member,\n sourceCode: TSESLint.SourceCode\n): TSESTree.Token | null => {\n const lastDecorator = node.decorators.at(-1);\n\n if (!lastDecorator) return sourceCode.getFirstToken(node);\n\n return sourceCode.getTokenAfter(lastDecorator);\n};\n\nconst insertModifier = (\n node: Member,\n accessibility: Accessibility,\n sourceCode: TSESLint.SourceCode\n): Fix => {\n const token = modifierToken(node, sourceCode);\n\n if (!token) return () => null;\n\n const lastDecorator = node.decorators.at(-1);\n const adjacentToDecorator = lastDecorator?.range[1] === token.range[0];\n const text = `${adjacentToDecorator ? ' ' : ''}${accessibility} `;\n\n return (fixer) => fixer.insertTextBefore(token, text);\n};\n\nconst autoFixOf = (\n node: Member,\n accessibility: FixAccessibility,\n sourceCode: TSESLint.SourceCode\n): AutoFix => {\n if (accessibility === 'none') {\n const noAutoFix: AutoFix = {};\n\n return noAutoFix;\n }\n\n const fix = insertModifier(node, accessibility, sourceCode);\n const autoFix: AutoFix = { fix };\n\n return autoFix;\n};\n\nconst suggestionOf = (\n node: Member,\n accessibility: Accessibility,\n sourceCode: TSESLint.SourceCode\n): TSESLint.SuggestionReportDescriptor<MessageIds> => {\n const data = { accessibility };\n const fix = insertModifier(node, accessibility, sourceCode);\n const suggestion: TSESLint.SuggestionReportDescriptor<MessageIds> = {\n messageId: 'setAccessibility',\n data,\n fix\n };\n\n return suggestion;\n};\n\nconst suggestionsOf = (\n node: Member,\n fixAccessibility: FixAccessibility,\n sourceCode: TSESLint.SourceCode\n): TSESLint.SuggestionReportDescriptor<MessageIds>[] => {\n const isOtherAccessibility = (accessibility: Accessibility): boolean => {\n return accessibility !== fixAccessibility;\n };\n\n const suggestionFor = (\n accessibility: Accessibility\n ): TSESLint.SuggestionReportDescriptor<MessageIds> => {\n return suggestionOf(node, accessibility, sourceCode);\n };\n\n return accessibilities.filter(isOtherAccessibility).map(suggestionFor);\n};\n\nexport default createRule<Options, MessageIds>({\n name: 'explicit-accessibility',\n meta,\n defaultOptions,\n create(context, [{ defaultAccessibility = 'public' }]) {\n const { sourceCode } = context;\n\n const check = (node: Member): void => {\n const isPrivate = isPrivateMember(node);\n\n if (node.accessibility || isPrivate) return;\n\n const target = reportTarget(node);\n const isConstructorMember = isConstructor(node);\n const usesPublic = isConstructorMember && defaultAccessibility !== 'none';\n const fixAccessibility: FixAccessibility = usesPublic\n ? 'public'\n : defaultAccessibility;\n const autoFix = autoFixOf(node, fixAccessibility, sourceCode);\n const name = memberName(target, sourceCode);\n const data = { name };\n const suggest = suggestionsOf(node, fixAccessibility, sourceCode);\n const report: TSESLint.ReportDescriptor<MessageIds> = {\n node: target,\n messageId: 'missingAccessibility',\n data,\n ...autoFix,\n suggest\n };\n\n context.report(report);\n };\n\n const listeners: TSESLint.RuleListener = {\n AccessorProperty: check,\n MethodDefinition: check,\n PropertyDefinition: check,\n TSAbstractAccessorProperty: check,\n TSAbstractMethodDefinition: check,\n TSAbstractPropertyDefinition: check,\n TSParameterProperty: check\n };\n\n return listeners;\n }\n});\n", "import type {\n ESLintUtils,\n JSONSchema,\n TSESLint\n} from '@typescript-eslint/utils';\n\nimport type {\n Accessibility,\n MessageIds,\n Options\n} from './explicit-accessibility.type.ts';\n\nexport const accessibilities: readonly Accessibility[] = [\n 'public',\n 'private',\n 'protected'\n];\n\nconst docs: TSESLint.RuleMetaDataDocs = {\n description: 'Require explicit accessibility modifiers on class members'\n};\n\nconst messages: Record<MessageIds, string> = {\n missingAccessibility:\n \"Class member '{{ name }}' is missing an explicit accessibility modifier (public/private/protected).\",\n setAccessibility: \"Add the '{{ accessibility }}' modifier.\"\n};\n\nconst defaultAccessibilitySchema: JSONSchema.JSONSchema4 = {\n type: 'string',\n enum: ['public', 'private', 'protected', 'none'],\n description:\n \"The accessibility modifier inserted by the auto-fix; constructors always get public. 'none' reports without an auto-fix and offers all three levels as suggestions.\"\n};\n\nconst properties: Record<string, JSONSchema.JSONSchema4> = {\n defaultAccessibility: defaultAccessibilitySchema\n};\n\nconst optionsSchema: JSONSchema.JSONSchema4 = {\n type: 'object',\n properties,\n additionalProperties: false\n};\n\nconst schema: JSONSchema.JSONSchema4[] = [optionsSchema];\n\nexport const meta: ESLintUtils.NamedCreateRuleMeta<\n MessageIds,\n unknown,\n Options\n> = {\n type: 'suggestion',\n docs,\n fixable: 'code',\n hasSuggestions: true,\n schema,\n messages\n};\n\nexport const defaultOptions: Options = [{ defaultAccessibility: 'public' }];\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\ntype Options = [];\ntype MessageIds = 'inlineObjectType';\n\nconst docs: TSESLint.RuleMetaDataDocs = {\n description:\n 'Require nested object types inside a type alias to be extracted to a named type alias'\n};\n\nconst messages: Record<MessageIds, string> = {\n inlineObjectType:\n 'Inline object type must be extracted to a named type alias.'\n};\n\nconst meta: ESLintUtils.NamedCreateRuleMeta<MessageIds, unknown, Options> = {\n type: 'suggestion',\n docs,\n schema: [],\n messages\n};\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://github.com/F0rty-Tw0/lint-suite#no-inline-object-types'\n);\n\nconst enclosingTypeAlias = (\n node: TSESTree.Node\n): TSESTree.TSTypeAliasDeclaration | undefined => {\n let current: TSESTree.Node | undefined = node.parent;\n\n while (current && current.type !== TSESTree.AST_NODE_TYPES.Program) {\n if (current.type === TSESTree.AST_NODE_TYPES.TSTypeAliasDeclaration) {\n return current;\n }\n\n current = current.parent;\n }\n\n return undefined;\n};\n\nexport default createRule<Options, MessageIds>({\n name: 'no-inline-object-types',\n meta,\n defaultOptions: [],\n create(context) {\n const listeners: TSESLint.RuleListener = {\n TSTypeLiteral(node): void {\n const isAliasBody =\n node.parent.type === TSESTree.AST_NODE_TYPES.TSTypeAliasDeclaration;\n\n if (isAliasBody) return;\n\n const enclosingAlias = enclosingTypeAlias(node);\n\n if (!enclosingAlias) return;\n\n const report: TSESLint.ReportDescriptor<MessageIds> = {\n node,\n messageId: 'inlineObjectType'\n };\n\n context.report(report);\n }\n };\n\n return listeners;\n }\n});\n", "import { ESLintUtils, TSESTree } from '@typescript-eslint/utils';\nimport type { TSESLint } from '@typescript-eslint/utils';\n\ntype Options = [];\ntype MessageIds = 'missingReadonly';\n\nconst docs: TSESLint.RuleMetaDataDocs = {\n description:\n 'Require readonly on primitive-typed type and interface properties'\n};\n\nconst messages: Record<MessageIds, string> = {\n missingReadonly:\n \"Type property '{{ name }}' should be readonly. Disable this rule on the line if mutation is required.\"\n};\n\nconst meta: ESLintUtils.NamedCreateRuleMeta<MessageIds, unknown, Options> = {\n type: 'suggestion',\n docs,\n fixable: 'code',\n schema: [],\n messages\n};\n\nconst createRule = ESLintUtils.RuleCreator(\n () => 'https://github.com/F0rty-Tw0/lint-suite#readonly-type-properties'\n);\n\nconst propertyName = (\n node: TSESTree.TSPropertySignature,\n sourceCode: TSESLint.SourceCode\n): string => {\n if (node.key.type === TSESTree.AST_NODE_TYPES.Identifier) {\n return node.key.name;\n }\n\n return sourceCode.getText(node.key);\n};\n\nconst PRIMITIVE_KEYWORDS = new Set([\n TSESTree.AST_NODE_TYPES.TSStringKeyword,\n TSESTree.AST_NODE_TYPES.TSNumberKeyword,\n TSESTree.AST_NODE_TYPES.TSBooleanKeyword,\n TSESTree.AST_NODE_TYPES.TSBigIntKeyword,\n TSESTree.AST_NODE_TYPES.TSSymbolKeyword,\n TSESTree.AST_NODE_TYPES.TSNullKeyword,\n TSESTree.AST_NODE_TYPES.TSUndefinedKeyword\n]);\n\nconst isPrimitive = (type: TSESTree.TypeNode): boolean => {\n const isPrimitiveKeyword = PRIMITIVE_KEYWORDS.has(type.type);\n\n if (isPrimitiveKeyword) return true;\n\n if (\n type.type === TSESTree.AST_NODE_TYPES.TSLiteralType ||\n type.type === TSESTree.AST_NODE_TYPES.TSTemplateLiteralType\n ) {\n return true;\n }\n\n if (\n type.type === TSESTree.AST_NODE_TYPES.TSUnionType ||\n type.type === TSESTree.AST_NODE_TYPES.TSIntersectionType\n ) {\n return type.types.every(isPrimitive);\n }\n\n return false;\n};\n\nconst readonlyFix = (\n node: TSESTree.TSPropertySignature,\n sourceCode: TSESLint.SourceCode\n): TSESLint.ReportFixFunction => {\n return (fixer) => {\n const firstToken = sourceCode.getFirstToken(node);\n\n if (!firstToken) return null;\n\n return fixer.insertTextBefore(firstToken, 'readonly ');\n };\n};\n\nexport default createRule<Options, MessageIds>({\n name: 'readonly-type-properties',\n meta,\n defaultOptions: [],\n create(context) {\n const { sourceCode } = context;\n\n const listeners: TSESLint.RuleListener = {\n TSPropertySignature(node): void {\n if (node.readonly || !node.typeAnnotation) return;\n\n const isPrimitiveType = isPrimitive(node.typeAnnotation.typeAnnotation);\n\n if (!isPrimitiveType) return;\n\n const name = propertyName(node, sourceCode);\n const data = { name };\n const fix = readonlyFix(node, sourceCode);\n const report: TSESLint.ReportDescriptor<MessageIds> = {\n node: node.key,\n messageId: 'missingReadonly',\n data,\n fix\n };\n\n context.report(report);\n }\n };\n\n return listeners;\n }\n});\n", "import { definePlugin } from './rules/define-plugin.util.ts';\nimport explicitAccessibilityRule from './rules/explicit-accessibility/explicit-accessibility.ts';\nimport noInlineObjectTypesRule from './rules/no-inline-object-types/no-inline-object-types.ts';\nimport readonlyTypePropertiesRule from './rules/readonly-type-properties/readonly-type-properties.ts';\n\nexport const localPlugin = definePlugin('local', {\n 'explicit-accessibility': explicitAccessibilityRule,\n 'readonly-type-properties': readonlyTypePropertiesRule,\n 'no-inline-object-types': noInlineObjectTypesRule\n});\n", "import vitestEslint from '@vitest/eslint-plugin';\nimport { defineConfig } from 'eslint/config';\n\nconst vitestPlugin = {\n vitest: vitestEslint\n};\n\nexport const vitest = defineConfig([\n {\n files: ['**/*.spec.ts', '**/*.spec.js', '**/*.test.ts', '**/*.test.js'],\n plugins: vitestPlugin,\n rules: {\n ...vitestEslint.configs.recommended.rules,\n 'vitest/max-nested-describe': ['error', { max: 3 }],\n // Matcher improvements\n 'vitest/prefer-to-be': 'error',\n 'vitest/prefer-to-contain': 'error',\n 'vitest/prefer-to-have-length': 'error',\n 'vitest/prefer-comparison-matcher': 'error',\n 'vitest/prefer-strict-equal': 'warn',\n // Test quality\n 'vitest/prefer-spy-on': 'error',\n 'vitest/prefer-hooks-on-top': 'error',\n 'vitest/prefer-each': 'warn',\n 'vitest/no-test-return-statement': 'error',\n 'vitest/prefer-mock-promise-shorthand': 'error'\n }\n }\n]);\n"],
5
+ "mappings": "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",
6
+ "names": ["import_angular_eslint", "import_config", "meta", "import_utils", "isIdentifier", "import_utils", "import_utils", "import_utils", "import_utils", "import_compiler", "import_compiler", "import_utils", "import_utils", "import_utils", "import_utils", "isDeleteExpression", "import_typescript", "import_compiler", "angularClass", "import_node_fs", "import_typescript", "import_compiler", "import_typescript", "import_compiler", "ReadCollector", "import_compiler", "text", "templateBinder", "angularClass", "ReadCollector", "templateReads", "angularClass", "templateReads", "import_typescript", "import_typescript", "import_typescript", "memberNames", "propertyName", "import_typescript", "import_typescript", "propertyName", "import_typescript", "nestedPattern", "propertyName", "arrayElementRead", "import_typescript", "isWriteOnly", "isWriteTarget", "isWriteOnly", "import_typescript", "base", "import_typescript", "import_typescript", "import_typescript", "parentOf", "import_node_path", "import_typescript", "text", "base", "key", "import_typescript", "globals", "import_config", "import_config", "import_config", "import_eslint_plugin", "import_config", "importPluginX", "stylistic", "import_config", "boundariesPlugin", "import_eslint_plugin", "import_config", "import_config", "jsonPlugin", "import_config", "playwrightEslint", "import_config", "eslintConfigPrettier", "import_config", "rxjsEslint", "import_config", "storybookEslint", "import_config", "import_config", "import_config", "import_config", "import_eslint_plugin", "import_config", "import_eslint_plugin_import_x", "importPluginX", "import_config", "import_utils", "docs", "messages", "properties", "optionsSchema", "schema", "meta", "defaultOptions", "createRule", "memberName", "text", "meta", "defaultOptions", "import_utils", "docs", "messages", "meta", "createRule", "import_utils", "docs", "messages", "meta", "createRule", "propertyName", "import_eslint_plugin", "import_config", "vitestEslint"]
7
7
  }