@codeperfect/eslint-plugin 2.11.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +0 -1
  2. package/dist/application/custom-rules.d.ts +3 -0
  3. package/dist/application/custom-rules.d.ts.map +1 -1
  4. package/dist/application/custom-rules.js +3 -2
  5. package/dist/application/index.d.ts +1 -1
  6. package/dist/application/index.d.ts.map +1 -1
  7. package/dist/application/index.js +2 -2
  8. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  9. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +0 -2
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -1
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +4 -6
  12. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -1
  13. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +12 -15
  14. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +0 -2
  15. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -1
  16. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +2 -10
  17. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
  18. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +8 -17
  19. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -1
  20. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +6 -8
  21. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
  22. package/dist/domain/architecture/consistent-barrel-files/rule.js +4 -5
  23. package/dist/domain/architecture/index.d.ts +1 -0
  24. package/dist/domain/architecture/index.d.ts.map +1 -1
  25. package/dist/domain/architecture/index.js +2 -1
  26. package/dist/domain/architecture/no-import-export-extensions/no-import-export-extensions-rule.d.ts.map +1 -1
  27. package/dist/domain/architecture/no-import-export-extensions/no-import-export-extensions-rule.js +6 -13
  28. package/dist/domain/architecture/no-unused-exports/no-unused-exports-declaration-utilities.d.ts.map +1 -1
  29. package/dist/domain/architecture/no-unused-exports/no-unused-exports-declaration-utilities.js +11 -10
  30. package/dist/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.d.ts.map +1 -1
  31. package/dist/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.js +5 -9
  32. package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.d.ts.map +1 -1
  33. package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.js +6 -9
  34. package/dist/domain/architecture/no-unused-exports/no-unused-exports-pattern-utilities.d.ts.map +1 -1
  35. package/dist/domain/architecture/no-unused-exports/no-unused-exports-pattern-utilities.js +5 -10
  36. package/dist/domain/architecture/no-unused-exports/no-unused-exports-public-api-usage-utilities.d.ts.map +1 -1
  37. package/dist/domain/architecture/no-unused-exports/no-unused-exports-public-api-usage-utilities.js +4 -8
  38. package/dist/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.d.ts.map +1 -1
  39. package/dist/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.js +4 -5
  40. package/dist/domain/architecture/no-unused-public-members/index.d.ts +2 -0
  41. package/dist/domain/architecture/no-unused-public-members/index.d.ts.map +1 -0
  42. package/dist/domain/architecture/no-unused-public-members/index.js +2 -0
  43. package/dist/domain/architecture/no-unused-public-members/member-contract-utilities.d.ts +16 -0
  44. package/dist/domain/architecture/no-unused-public-members/member-contract-utilities.d.ts.map +1 -0
  45. package/dist/domain/architecture/no-unused-public-members/member-contract-utilities.js +102 -0
  46. package/dist/domain/architecture/no-unused-public-members/member-declaration-utilities.d.ts +34 -0
  47. package/dist/domain/architecture/no-unused-public-members/member-declaration-utilities.d.ts.map +1 -0
  48. package/dist/domain/architecture/no-unused-public-members/member-declaration-utilities.js +55 -0
  49. package/dist/domain/architecture/no-unused-public-members/member-host-utilities.d.ts +68 -0
  50. package/dist/domain/architecture/no-unused-public-members/member-host-utilities.d.ts.map +1 -0
  51. package/dist/domain/architecture/no-unused-public-members/member-host-utilities.js +195 -0
  52. package/dist/domain/architecture/no-unused-public-members/member-public-api-utilities.d.ts +30 -0
  53. package/dist/domain/architecture/no-unused-public-members/member-public-api-utilities.d.ts.map +1 -0
  54. package/dist/domain/architecture/no-unused-public-members/member-public-api-utilities.js +101 -0
  55. package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.d.ts +28 -0
  56. package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.d.ts.map +1 -0
  57. package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.js +125 -0
  58. package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.d.ts +29 -0
  59. package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.d.ts.map +1 -0
  60. package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.js +108 -0
  61. package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.d.ts +42 -0
  62. package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.d.ts.map +1 -0
  63. package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.js +96 -0
  64. package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.d.ts +18 -0
  65. package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.d.ts.map +1 -0
  66. package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.js +128 -0
  67. package/dist/domain/architecture/no-unused-public-members/member-utilities.d.ts +41 -0
  68. package/dist/domain/architecture/no-unused-public-members/member-utilities.d.ts.map +1 -0
  69. package/dist/domain/architecture/no-unused-public-members/member-utilities.js +51 -0
  70. package/dist/domain/architecture/no-unused-public-members/rule.d.ts +5 -0
  71. package/dist/domain/architecture/no-unused-public-members/rule.d.ts.map +1 -0
  72. package/dist/domain/architecture/no-unused-public-members/rule.js +78 -0
  73. package/dist/domain/core/no-multiple-declarators/rule-utilities.d.ts.map +1 -1
  74. package/dist/domain/core/no-multiple-declarators/rule-utilities.js +13 -19
  75. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  76. package/dist/domain/core/no-multiple-declarators/rule.js +4 -5
  77. package/dist/domain/core/no-useless-delegation/rule.d.ts.map +1 -1
  78. package/dist/domain/core/no-useless-delegation/rule.js +5 -6
  79. package/dist/domain/core/prefer-interface-types/autofix.js +4 -5
  80. package/dist/domain/core/prefer-interface-types/rule-utilities.d.ts.map +1 -1
  81. package/dist/domain/core/prefer-interface-types/rule-utilities.js +7 -9
  82. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -1
  83. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +10 -8
  84. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -1
  85. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +5 -6
  86. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -1
  87. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +7 -9
  88. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  89. package/dist/domain/docs/no-interface-member-docs/rule.js +2 -5
  90. package/dist/domain/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -1
  91. package/dist/domain/docs/require-example-language/empty-fence-fixes.js +2 -5
  92. package/dist/domain/docs/require-example-language/example-utilities.d.ts +1 -7
  93. package/dist/domain/docs/require-example-language/example-utilities.d.ts.map +1 -1
  94. package/dist/domain/docs/require-example-language/example-utilities.js +6 -14
  95. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -1
  96. package/dist/domain/docs/require-example-language/examples.js +7 -16
  97. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -1
  98. package/dist/domain/docs/require-example-language/fixes.js +8 -13
  99. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -1
  100. package/dist/domain/docs/require-example-language/reporting.js +4 -8
  101. package/dist/domain/docs/require-example-language/types.d.ts +0 -2
  102. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -1
  103. package/dist/domain/docs/require-example-language/types.js +1 -1
  104. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
  105. package/dist/domain/docs/single-line-jsdoc/rule.js +5 -11
  106. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -1
  107. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.js +5 -14
  108. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -1
  109. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +5 -9
  110. package/dist/domain/index.d.ts +2 -2
  111. package/dist/domain/index.d.ts.map +1 -1
  112. package/dist/domain/index.js +3 -3
  113. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -1
  114. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
  115. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +2 -5
  116. package/dist/domain/testing/aaa/analyzer.analysis.js +6 -11
  117. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -1
  118. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +5 -14
  119. package/dist/domain/testing/aaa/analyzer.assertions.js +2 -2
  120. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -1
  121. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +12 -16
  122. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -1
  123. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +11 -21
  124. package/dist/domain/testing/aaa/analyzer.classification.js +2 -2
  125. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
  126. package/dist/domain/testing/aaa/analyzer.super.js +5 -6
  127. package/dist/domain/testing/aaa/types.d.ts +0 -4
  128. package/dist/domain/testing/aaa/types.d.ts.map +1 -1
  129. package/dist/domain/testing/aaa/types.js +1 -1
  130. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -1
  131. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +2 -7
  132. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.d.ts.map +1 -1
  133. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.js +4 -5
  134. package/dist/domain/testing/index.d.ts +0 -1
  135. package/dist/domain/testing/index.d.ts.map +1 -1
  136. package/dist/domain/testing/index.js +1 -2
  137. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -1
  138. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +9 -7
  139. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -1
  140. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +5 -9
  141. package/dist/domain/testing/prefer-vi-mocked-import/match-collisions.d.ts.map +1 -1
  142. package/dist/domain/testing/prefer-vi-mocked-import/match-collisions.js +2 -7
  143. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -1
  144. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +5 -5
  145. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.js +3 -5
  146. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -1
  147. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.js +13 -18
  148. package/dist/domain/testing/prefer-vi-mocked-import/match-seeds.d.ts.map +1 -1
  149. package/dist/domain/testing/prefer-vi-mocked-import/match-seeds.js +5 -6
  150. package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts +0 -2
  151. package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts.map +1 -1
  152. package/dist/domain/testing/prefer-vi-mocked-import/types.js +1 -1
  153. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
  154. package/dist/domain/testing/require-act-result-capture/rule.js +9 -12
  155. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -1
  156. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +5 -11
  157. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +6 -7
  158. package/dist/domain/testing/require-test-companion/rule.js +2 -2
  159. package/dist/index.d.ts +1 -1
  160. package/dist/index.d.ts.map +1 -1
  161. package/dist/index.js +2 -2
  162. package/dist/infrastructure/codeperfect-plugin.d.ts +2 -2
  163. package/dist/infrastructure/codeperfect-plugin.js +3 -3
  164. package/dist/infrastructure/presets.js +3 -3
  165. package/package.json +26 -27
  166. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/index.d.ts +0 -2
  167. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/index.d.ts.map +0 -1
  168. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/index.js +0 -2
  169. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.d.ts +0 -29
  170. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.d.ts.map +0 -1
  171. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.js +0 -200
  172. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.d.ts +0 -12
  173. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.d.ts.map +0 -1
  174. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.js +0 -151
  175. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.d.ts +0 -16
  176. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.d.ts.map +0 -1
  177. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.js +0 -109
  178. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.d.ts +0 -5
  179. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.d.ts.map +0 -1
  180. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.js +0 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { noUnusedPublicMembersRule } from "./rule.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2FyY2hpdGVjdHVyZS9uby11bnVzZWQtcHVibGljLW1lbWJlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgbm9VbnVzZWRQdWJsaWNNZW1iZXJzUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import * as ts from "typescript";
2
+ import type { PublicMember } from "./member-declaration-utilities.js";
3
+ /**
4
+ * Collects member symbols linked by implemented or inherited types.
5
+ * @param program TypeScript project program.
6
+ * @param checker TypeScript type checker.
7
+ * @param targetMember Member whose related contracts are being found.
8
+ * @returns Related member symbols from contract declarations.
9
+ * @example
10
+ * ```typescript
11
+ * const symbols = collectHeritageMemberSymbols(program, checker, member);
12
+ * ```
13
+ */
14
+ declare const collectHeritageMemberSymbols: (program: ts.Program, checker: ts.TypeChecker, targetMember: PublicMember) => ts.Symbol[];
15
+ export { collectHeritageMemberSymbols };
16
+ //# sourceMappingURL=member-contract-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-contract-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-contract-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAyDnE;;;;;;;;;;GAUG;AACH,QAAA,MAAM,4BAA4B,GAChC,SAAS,EAAE,CAAC,OAAO,EACnB,SAAS,EAAE,CAAC,WAAW,EACvB,cAAc,YAAY,KACzB,EAAE,CAAC,MAAM,EA+EX,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
@@ -0,0 +1,102 @@
1
+ import * as ts from "typescript";
2
+ import { isSameSymbol, resolveCanonicalSymbol, } from "../no-unused-exports/no-unused-exports-symbol-utilities.js";
3
+ import { isSupportedMember } from "./member-host-utilities.js";
4
+ /**
5
+ * Extracts the static key from a supported member declaration.
6
+ * @param declaration TypeScript member node to inspect.
7
+ * @returns Static name when the declaration is supported.
8
+ * @example
9
+ * ```typescript
10
+ * const name = getDeclaredMemberName(memberDeclaration);
11
+ * ```
12
+ */
13
+ const getDeclaredMemberName = (declaration) => {
14
+ if (!isSupportedMember(declaration)) {
15
+ return void 0;
16
+ }
17
+ const name = declaration.name;
18
+ return name !== void 0 &&
19
+ (ts.isIdentifier(name) || ts.isStringLiteralLike(name))
20
+ ? name.text
21
+ : void 0;
22
+ };
23
+ /**
24
+ * Gets the symbol for one direct member declaration.
25
+ * @param checker TypeScript type checker.
26
+ * @param declaration TypeScript syntax node naming the member.
27
+ * @param memberName Static member name.
28
+ * @returns Member symbol when available.
29
+ * @example
30
+ * ```typescript
31
+ * const symbol = getDeclaredMemberSymbol(checker, declaration, "run");
32
+ * ```
33
+ */
34
+ const getDeclaredMemberSymbol = (checker, declaration, memberName) => {
35
+ const name = declaration.name;
36
+ return name === void 0
37
+ ? void 0
38
+ : (checker.getSymbolAtLocation(name) ??
39
+ checker.getPropertyOfType(checker.getTypeAtLocation(declaration.parent), memberName));
40
+ };
41
+ /**
42
+ * Collects member symbols linked by implemented or inherited types.
43
+ * @param program TypeScript project program.
44
+ * @param checker TypeScript type checker.
45
+ * @param targetMember Member whose related contracts are being found.
46
+ * @returns Related member symbols from contract declarations.
47
+ * @example
48
+ * ```typescript
49
+ * const symbols = collectHeritageMemberSymbols(program, checker, member);
50
+ * ```
51
+ */
52
+ const collectHeritageMemberSymbols = (program, checker, targetMember) => {
53
+ const relatedSymbols = [];
54
+ const targetSymbol = resolveCanonicalSymbol(targetMember.memberSymbol, checker);
55
+ const addSymbol = (candidate) => {
56
+ if (candidate !== void 0 &&
57
+ relatedSymbols.every((symbol) => !isSameSymbol(symbol, candidate))) {
58
+ relatedSymbols.push(candidate);
59
+ }
60
+ };
61
+ const visit = (node) => {
62
+ if (ts.isClassDeclaration(node) ||
63
+ ts.isInterfaceDeclaration(node) ||
64
+ ts.isClassExpression(node)) {
65
+ const ownMembers = node.members.filter((member) => getDeclaredMemberName(member) === targetMember.memberName);
66
+ const matchingHeritageSymbols = [];
67
+ const heritageClauses = node.heritageClauses ?? [];
68
+ for (const clause of heritageClauses) {
69
+ for (const heritageType of clause.types) {
70
+ const inheritedMember = checker.getPropertyOfType(checker.getTypeAtLocation(heritageType), targetMember.memberName);
71
+ if (inheritedMember !== void 0 &&
72
+ (isSameSymbol(resolveCanonicalSymbol(inheritedMember, checker), targetSymbol) ||
73
+ node === targetMember.declaration.parent)) {
74
+ matchingHeritageSymbols.push(inheritedMember);
75
+ }
76
+ }
77
+ }
78
+ if (node === targetMember.declaration.parent) {
79
+ for (const member of ownMembers) {
80
+ addSymbol(getDeclaredMemberSymbol(checker, member, targetMember.memberName));
81
+ }
82
+ }
83
+ if (matchingHeritageSymbols.length > 0) {
84
+ for (const member of ownMembers) {
85
+ addSymbol(getDeclaredMemberSymbol(checker, member, targetMember.memberName));
86
+ }
87
+ }
88
+ for (const symbol of matchingHeritageSymbols) {
89
+ addSymbol(symbol);
90
+ }
91
+ }
92
+ ts.forEachChild(node, visit);
93
+ };
94
+ for (const sourceFile of program.getSourceFiles()) {
95
+ if (!sourceFile.isDeclarationFile) {
96
+ visit(sourceFile);
97
+ }
98
+ }
99
+ return relatedSymbols;
100
+ };
101
+ export { collectHeritageMemberSymbols };
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLWNvbnRyYWN0LXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1wdWJsaWMtbWVtYmVycy9tZW1iZXItY29udHJhY3QtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSWpDLE9BQU8sRUFDTCxZQUFZLEVBQ1osc0JBQXNCLEdBQ3ZCLE1BQU0seURBQXlELENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsV0FBb0IsRUFBc0IsRUFBRTtJQUN6RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBSSxXQUFtQyxDQUFDLElBQUksQ0FBQztJQUV2RCxPQUFPLElBQUksS0FBSyxLQUFLLENBQUM7UUFDcEIsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUk7UUFDWCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDYixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixPQUF1QixFQUN2QixXQUFvQixFQUNwQixVQUFrQixFQUNLLEVBQUU7SUFDekIsTUFBTSxJQUFJLEdBQUksV0FBbUMsQ0FBQyxJQUFJLENBQUM7SUFFdkQsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FDdkIsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFDN0MsVUFBVSxDQUNYLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLDRCQUE0QixHQUFHLENBQ25DLE9BQW1CLEVBQ25CLE9BQXVCLEVBQ3ZCLFlBQTBCLEVBQ2IsRUFBRTtJQUNmLE1BQU0sY0FBYyxHQUFnQixFQUFFLENBQUM7SUFDdkMsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQ3pDLFlBQVksQ0FBQyxZQUFZLEVBQ3pCLE9BQU8sQ0FDUixDQUFDO0lBQ0YsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFnQyxFQUFRLEVBQUU7UUFDM0QsSUFDRSxTQUFTLEtBQUssS0FBSyxDQUFDO1lBQ3BCLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUNsRSxDQUFDO1lBQ0QsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFhLEVBQVEsRUFBRTtRQUNwQyxJQUNFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDM0IsRUFBRSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUMvQixFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQzFCLENBQUM7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLFlBQVksQ0FBQyxVQUFVLENBQ3RFLENBQUM7WUFDRixNQUFNLHVCQUF1QixHQUFnQixFQUFFLENBQUM7WUFFaEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7WUFFbkQsS0FBSyxNQUFNLE1BQU0sSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDckMsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FDL0MsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUN2QyxZQUFZLENBQUMsVUFBVSxDQUN4QixDQUFDO29CQUVGLElBQ0UsZUFBZSxLQUFLLEtBQUssQ0FBQzt3QkFDMUIsQ0FBQyxZQUFZLENBQ1gsc0JBQXNCLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxFQUNoRCxZQUFZLENBQ2I7NEJBQ0MsSUFBSSxLQUFLLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQzNDLENBQUM7d0JBQ0QsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNoRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDaEMsU0FBUyxDQUNQLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUNsRSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2hDLFNBQVMsQ0FDUCx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FDbEUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELEtBQUssTUFBTSxNQUFNLElBQUksdUJBQXVCLEVBQUUsQ0FBQztnQkFDN0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBRUQsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0lBRUYsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5pbXBvcnQgdHlwZSB7IFB1YmxpY01lbWJlciB9IGZyb20gXCIuL21lbWJlci1kZWNsYXJhdGlvbi11dGlsaXRpZXNcIjtcblxuaW1wb3J0IHtcbiAgaXNTYW1lU3ltYm9sLFxuICByZXNvbHZlQ2Fub25pY2FsU3ltYm9sLFxufSBmcm9tIFwiLi4vbm8tdW51c2VkLWV4cG9ydHMvbm8tdW51c2VkLWV4cG9ydHMtc3ltYm9sLXV0aWxpdGllc1wiO1xuaW1wb3J0IHsgaXNTdXBwb3J0ZWRNZW1iZXIgfSBmcm9tIFwiLi9tZW1iZXItaG9zdC11dGlsaXRpZXNcIjtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgc3RhdGljIGtleSBmcm9tIGEgc3VwcG9ydGVkIG1lbWJlciBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSBkZWNsYXJhdGlvbiBUeXBlU2NyaXB0IG1lbWJlciBub2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBTdGF0aWMgbmFtZSB3aGVuIHRoZSBkZWNsYXJhdGlvbiBpcyBzdXBwb3J0ZWQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbmFtZSA9IGdldERlY2xhcmVkTWVtYmVyTmFtZShtZW1iZXJEZWNsYXJhdGlvbik7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0RGVjbGFyZWRNZW1iZXJOYW1lID0gKGRlY2xhcmF0aW9uOiB0cy5Ob2RlKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc1N1cHBvcnRlZE1lbWJlcihkZWNsYXJhdGlvbikpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgbmFtZSA9IChkZWNsYXJhdGlvbiBhcyB0cy5OYW1lZERlY2xhcmF0aW9uKS5uYW1lO1xuXG4gIHJldHVybiBuYW1lICE9PSB2b2lkIDAgJiZcbiAgICAodHMuaXNJZGVudGlmaWVyKG5hbWUpIHx8IHRzLmlzU3RyaW5nTGl0ZXJhbExpa2UobmFtZSkpXG4gICAgPyBuYW1lLnRleHRcbiAgICA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgc3ltYm9sIGZvciBvbmUgZGlyZWN0IG1lbWJlciBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIGRlY2xhcmF0aW9uIFR5cGVTY3JpcHQgc3ludGF4IG5vZGUgbmFtaW5nIHRoZSBtZW1iZXIuXG4gKiBAcGFyYW0gbWVtYmVyTmFtZSBTdGF0aWMgbWVtYmVyIG5hbWUuXG4gKiBAcmV0dXJucyBNZW1iZXIgc3ltYm9sIHdoZW4gYXZhaWxhYmxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN5bWJvbCA9IGdldERlY2xhcmVkTWVtYmVyU3ltYm9sKGNoZWNrZXIsIGRlY2xhcmF0aW9uLCBcInJ1blwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXREZWNsYXJlZE1lbWJlclN5bWJvbCA9IChcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIGRlY2xhcmF0aW9uOiB0cy5Ob2RlLFxuICBtZW1iZXJOYW1lOiBzdHJpbmcsXG4pOiB0cy5TeW1ib2wgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBuYW1lID0gKGRlY2xhcmF0aW9uIGFzIHRzLk5hbWVkRGVjbGFyYXRpb24pLm5hbWU7XG5cbiAgcmV0dXJuIG5hbWUgPT09IHZvaWQgMFxuICAgID8gdm9pZCAwXG4gICAgOiAoY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5hbWUpID8/XG4gICAgICAgIGNoZWNrZXIuZ2V0UHJvcGVydHlPZlR5cGUoXG4gICAgICAgICAgY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihkZWNsYXJhdGlvbi5wYXJlbnQpLFxuICAgICAgICAgIG1lbWJlck5hbWUsXG4gICAgICAgICkpO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0cyBtZW1iZXIgc3ltYm9scyBsaW5rZWQgYnkgaW1wbGVtZW50ZWQgb3IgaW5oZXJpdGVkIHR5cGVzLlxuICogQHBhcmFtIHByb2dyYW0gVHlwZVNjcmlwdCBwcm9qZWN0IHByb2dyYW0uXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSB0YXJnZXRNZW1iZXIgTWVtYmVyIHdob3NlIHJlbGF0ZWQgY29udHJhY3RzIGFyZSBiZWluZyBmb3VuZC5cbiAqIEByZXR1cm5zIFJlbGF0ZWQgbWVtYmVyIHN5bWJvbHMgZnJvbSBjb250cmFjdCBkZWNsYXJhdGlvbnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3ltYm9scyA9IGNvbGxlY3RIZXJpdGFnZU1lbWJlclN5bWJvbHMocHJvZ3JhbSwgY2hlY2tlciwgbWVtYmVyKTtcbiAqIGBgYFxuICovXG5jb25zdCBjb2xsZWN0SGVyaXRhZ2VNZW1iZXJTeW1ib2xzID0gKFxuICBwcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgdGFyZ2V0TWVtYmVyOiBQdWJsaWNNZW1iZXIsXG4pOiB0cy5TeW1ib2xbXSA9PiB7XG4gIGNvbnN0IHJlbGF0ZWRTeW1ib2xzOiB0cy5TeW1ib2xbXSA9IFtdO1xuICBjb25zdCB0YXJnZXRTeW1ib2wgPSByZXNvbHZlQ2Fub25pY2FsU3ltYm9sKFxuICAgIHRhcmdldE1lbWJlci5tZW1iZXJTeW1ib2wsXG4gICAgY2hlY2tlcixcbiAgKTtcbiAgY29uc3QgYWRkU3ltYm9sID0gKGNhbmRpZGF0ZTogdHMuU3ltYm9sIHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XG4gICAgaWYgKFxuICAgICAgY2FuZGlkYXRlICE9PSB2b2lkIDAgJiZcbiAgICAgIHJlbGF0ZWRTeW1ib2xzLmV2ZXJ5KChzeW1ib2wpID0+ICFpc1NhbWVTeW1ib2woc3ltYm9sLCBjYW5kaWRhdGUpKVxuICAgICkge1xuICAgICAgcmVsYXRlZFN5bWJvbHMucHVzaChjYW5kaWRhdGUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpdCA9IChub2RlOiB0cy5Ob2RlKTogdm9pZCA9PiB7XG4gICAgaWYgKFxuICAgICAgdHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpIHx8XG4gICAgICB0cy5pc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpIHx8XG4gICAgICB0cy5pc0NsYXNzRXhwcmVzc2lvbihub2RlKVxuICAgICkge1xuICAgICAgY29uc3Qgb3duTWVtYmVycyA9IG5vZGUubWVtYmVycy5maWx0ZXIoXG4gICAgICAgIChtZW1iZXIpID0+IGdldERlY2xhcmVkTWVtYmVyTmFtZShtZW1iZXIpID09PSB0YXJnZXRNZW1iZXIubWVtYmVyTmFtZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtYXRjaGluZ0hlcml0YWdlU3ltYm9sczogdHMuU3ltYm9sW10gPSBbXTtcblxuICAgICAgY29uc3QgaGVyaXRhZ2VDbGF1c2VzID0gbm9kZS5oZXJpdGFnZUNsYXVzZXMgPz8gW107XG5cbiAgICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIGhlcml0YWdlQ2xhdXNlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGhlcml0YWdlVHlwZSBvZiBjbGF1c2UudHlwZXMpIHtcbiAgICAgICAgICBjb25zdCBpbmhlcml0ZWRNZW1iZXIgPSBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKFxuICAgICAgICAgICAgY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihoZXJpdGFnZVR5cGUpLFxuICAgICAgICAgICAgdGFyZ2V0TWVtYmVyLm1lbWJlck5hbWUsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGluaGVyaXRlZE1lbWJlciAhPT0gdm9pZCAwICYmXG4gICAgICAgICAgICAoaXNTYW1lU3ltYm9sKFxuICAgICAgICAgICAgICByZXNvbHZlQ2Fub25pY2FsU3ltYm9sKGluaGVyaXRlZE1lbWJlciwgY2hlY2tlciksXG4gICAgICAgICAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgbm9kZSA9PT0gdGFyZ2V0TWVtYmVyLmRlY2xhcmF0aW9uLnBhcmVudClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG1hdGNoaW5nSGVyaXRhZ2VTeW1ib2xzLnB1c2goaW5oZXJpdGVkTWVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IHRhcmdldE1lbWJlci5kZWNsYXJhdGlvbi5wYXJlbnQpIHtcbiAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2Ygb3duTWVtYmVycykge1xuICAgICAgICAgIGFkZFN5bWJvbChcbiAgICAgICAgICAgIGdldERlY2xhcmVkTWVtYmVyU3ltYm9sKGNoZWNrZXIsIG1lbWJlciwgdGFyZ2V0TWVtYmVyLm1lbWJlck5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoaW5nSGVyaXRhZ2VTeW1ib2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2Ygb3duTWVtYmVycykge1xuICAgICAgICAgIGFkZFN5bWJvbChcbiAgICAgICAgICAgIGdldERlY2xhcmVkTWVtYmVyU3ltYm9sKGNoZWNrZXIsIG1lbWJlciwgdGFyZ2V0TWVtYmVyLm1lbWJlck5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBzeW1ib2wgb2YgbWF0Y2hpbmdIZXJpdGFnZVN5bWJvbHMpIHtcbiAgICAgICAgYWRkU3ltYm9sKHN5bWJvbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0KTtcbiAgfTtcblxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgaWYgKCFzb3VyY2VGaWxlLmlzRGVjbGFyYXRpb25GaWxlKSB7XG4gICAgICB2aXNpdChzb3VyY2VGaWxlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVsYXRlZFN5bWJvbHM7XG59O1xuXG5leHBvcnQgeyBjb2xsZWN0SGVyaXRhZ2VNZW1iZXJTeW1ib2xzIH07XG4iXX0=
@@ -0,0 +1,34 @@
1
+ import { ESLintUtils } from "@typescript-eslint/utils";
2
+ import * as ts from "typescript";
3
+ /** One public member and its owning declaration. */
4
+ export interface PublicMember {
5
+ /** Member declaration in the TypeScript source tree. */
6
+ declaration: ts.Node;
7
+ /** Host declaration used to resolve declared member types. */
8
+ hostDeclaration: ts.Node;
9
+ /** Display name of the host. */
10
+ hostName: string;
11
+ /** Symbol of the host declaration, when available. */
12
+ hostSymbol: ts.Symbol | undefined;
13
+ /** Name used for contract matching and diagnostics. */
14
+ memberName: string;
15
+ /** TypeScript symbol for the member declaration. */
16
+ memberSymbol: ts.Symbol;
17
+ /** ESTree node used for the diagnostic location. */
18
+ reportNode: ReturnType<ParserServices["tsNodeToESTreeNodeMap"]["get"]>;
19
+ }
20
+ type ParserServices = ReturnType<typeof ESLintUtils.getParserServices>;
21
+ /**
22
+ * Collects direct public members from one source file.
23
+ * @param sourceFile Source file being analyzed.
24
+ * @param checker TypeScript type checker.
25
+ * @param parserServices TypeScript and ESTree node maps.
26
+ * @returns Public member declarations with resolved symbols.
27
+ * @example
28
+ * ```typescript
29
+ * const members = collectPublicMembers(sourceFile, checker, parserServices);
30
+ * ```
31
+ */
32
+ declare const collectPublicMembers: (sourceFile: ts.SourceFile, checker: ts.TypeChecker, parserServices: ParserServices) => PublicMember[];
33
+ export { collectPublicMembers };
34
+ //# sourceMappingURL=member-declaration-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-declaration-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-declaration-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAWjC,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC;IAErB,8DAA8D;IAC9D,eAAe,EAAE,EAAE,CAAC,IAAI,CAAC;IAEzB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,sDAAsD;IACtD,UAAU,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC;IAElC,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IAEnB,oDAAoD;IACpD,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC;IAExB,oDAAoD;IACpD,UAAU,EAAE,UAAU,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;CACxE;AAED,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAEvE;;;;;;;;;;GAUG;AACH,QAAA,MAAM,oBAAoB,GACxB,YAAY,EAAE,CAAC,UAAU,EACzB,SAAS,EAAE,CAAC,WAAW,EACvB,gBAAgB,cAAc,KAC7B,YAAY,EA2Dd,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { ESLintUtils } from "@typescript-eslint/utils";
2
+ import * as ts from "typescript";
3
+ import { isSameSymbol } from "../no-unused-exports/no-unused-exports-symbol-utilities.js";
4
+ import { collectMemberHosts, getMemberSymbol, getStaticMemberName, isPublicClassMember, isSupportedMember, } from "./member-host-utilities.js";
5
+ /**
6
+ * Collects direct public members from one source file.
7
+ * @param sourceFile Source file being analyzed.
8
+ * @param checker TypeScript type checker.
9
+ * @param parserServices TypeScript and ESTree node maps.
10
+ * @returns Public member declarations with resolved symbols.
11
+ * @example
12
+ * ```typescript
13
+ * const members = collectPublicMembers(sourceFile, checker, parserServices);
14
+ * ```
15
+ */
16
+ const collectPublicMembers = (sourceFile, checker, parserServices) => {
17
+ const members = [];
18
+ for (const host of collectMemberHosts(sourceFile, checker)) {
19
+ const hostType = checker.getTypeAtLocation(host.node);
20
+ const isClassHost = ts.isClassDeclaration(host.node);
21
+ for (const declaration of host.members) {
22
+ if (!isSupportedMember(declaration) ||
23
+ (isClassHost && !isPublicClassMember(declaration))) {
24
+ continue;
25
+ }
26
+ const nameNode = declaration.name;
27
+ const memberName = getStaticMemberName(nameNode);
28
+ if (memberName === "constructor" ||
29
+ nameNode === void 0 ||
30
+ memberName === void 0 ||
31
+ !parserServices.tsNodeToESTreeNodeMap.has(nameNode)) {
32
+ continue;
33
+ }
34
+ const memberSymbol = getMemberSymbol(checker, declaration, memberName, hostType);
35
+ if (memberSymbol === void 0 ||
36
+ members.some((existing) => existing.hostSymbol === host.symbol &&
37
+ existing.hostName === host.name &&
38
+ isSameSymbol(existing.memberSymbol, memberSymbol))) {
39
+ continue;
40
+ }
41
+ members.push({
42
+ declaration,
43
+ hostDeclaration: host.node,
44
+ hostName: host.name,
45
+ hostSymbol: host.symbol,
46
+ memberName,
47
+ memberSymbol,
48
+ reportNode: parserServices.tsNodeToESTreeNodeMap.get(nameNode),
49
+ });
50
+ }
51
+ }
52
+ return members;
53
+ };
54
+ export { collectPublicMembers };
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLWRlY2xhcmF0aW9uLXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1wdWJsaWMtbWVtYmVycy9tZW1iZXItZGVjbGFyYXRpb24tdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkYsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixpQkFBaUIsR0FDbEIsTUFBTSx5QkFBeUIsQ0FBQztBQTRCakM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sb0JBQW9CLEdBQUcsQ0FDM0IsVUFBeUIsRUFDekIsT0FBdUIsRUFDdkIsY0FBOEIsRUFDZCxFQUFFO0lBQ2xCLE1BQU0sT0FBTyxHQUFtQixFQUFFLENBQUM7SUFFbkMsS0FBSyxNQUFNLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckQsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkMsSUFDRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztnQkFDL0IsQ0FBQyxXQUFXLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUNsRCxDQUFDO2dCQUNELFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUksV0FBbUMsQ0FBQyxJQUFJLENBQUM7WUFDM0QsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFakQsSUFDRSxVQUFVLEtBQUssYUFBYTtnQkFDNUIsUUFBUSxLQUFLLEtBQUssQ0FBQztnQkFDbkIsVUFBVSxLQUFLLEtBQUssQ0FBQztnQkFDckIsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUNuRCxDQUFDO2dCQUNELFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUNsQyxPQUFPLEVBQ1AsV0FBVyxFQUNYLFVBQVUsRUFDVixRQUFRLENBQ1QsQ0FBQztZQUVGLElBQ0UsWUFBWSxLQUFLLEtBQUssQ0FBQztnQkFDdkIsT0FBTyxDQUFDLElBQUksQ0FDVixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ1gsUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTTtvQkFDbkMsUUFBUSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSTtvQkFDL0IsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQ3BELEVBQ0QsQ0FBQztnQkFDRCxTQUFTO1lBQ1gsQ0FBQztZQUVELE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsV0FBVztnQkFDWCxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUN2QixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osVUFBVSxFQUFFLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2FBQy9ELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFU0xpbnRVdGlscyB9IGZyb20gXCJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHNcIjtcbmltcG9ydCAqIGFzIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmltcG9ydCB7IGlzU2FtZVN5bWJvbCB9IGZyb20gXCIuLi9uby11bnVzZWQtZXhwb3J0cy9uby11bnVzZWQtZXhwb3J0cy1zeW1ib2wtdXRpbGl0aWVzXCI7XG5pbXBvcnQge1xuICBjb2xsZWN0TWVtYmVySG9zdHMsXG4gIGdldE1lbWJlclN5bWJvbCxcbiAgZ2V0U3RhdGljTWVtYmVyTmFtZSxcbiAgaXNQdWJsaWNDbGFzc01lbWJlcixcbiAgaXNTdXBwb3J0ZWRNZW1iZXIsXG59IGZyb20gXCIuL21lbWJlci1ob3N0LXV0aWxpdGllc1wiO1xuXG4vKiogT25lIHB1YmxpYyBtZW1iZXIgYW5kIGl0cyBvd25pbmcgZGVjbGFyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY01lbWJlciB7XG4gIC8qKiBNZW1iZXIgZGVjbGFyYXRpb24gaW4gdGhlIFR5cGVTY3JpcHQgc291cmNlIHRyZWUuICovXG4gIGRlY2xhcmF0aW9uOiB0cy5Ob2RlO1xuXG4gIC8qKiBIb3N0IGRlY2xhcmF0aW9uIHVzZWQgdG8gcmVzb2x2ZSBkZWNsYXJlZCBtZW1iZXIgdHlwZXMuICovXG4gIGhvc3REZWNsYXJhdGlvbjogdHMuTm9kZTtcblxuICAvKiogRGlzcGxheSBuYW1lIG9mIHRoZSBob3N0LiAqL1xuICBob3N0TmFtZTogc3RyaW5nO1xuXG4gIC8qKiBTeW1ib2wgb2YgdGhlIGhvc3QgZGVjbGFyYXRpb24sIHdoZW4gYXZhaWxhYmxlLiAqL1xuICBob3N0U3ltYm9sOiB0cy5TeW1ib2wgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIE5hbWUgdXNlZCBmb3IgY29udHJhY3QgbWF0Y2hpbmcgYW5kIGRpYWdub3N0aWNzLiAqL1xuICBtZW1iZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFR5cGVTY3JpcHQgc3ltYm9sIGZvciB0aGUgbWVtYmVyIGRlY2xhcmF0aW9uLiAqL1xuICBtZW1iZXJTeW1ib2w6IHRzLlN5bWJvbDtcblxuICAvKiogRVNUcmVlIG5vZGUgdXNlZCBmb3IgdGhlIGRpYWdub3N0aWMgbG9jYXRpb24uICovXG4gIHJlcG9ydE5vZGU6IFJldHVyblR5cGU8UGFyc2VyU2VydmljZXNbXCJ0c05vZGVUb0VTVHJlZU5vZGVNYXBcIl1bXCJnZXRcIl0+O1xufVxuXG50eXBlIFBhcnNlclNlcnZpY2VzID0gUmV0dXJuVHlwZTx0eXBlb2YgRVNMaW50VXRpbHMuZ2V0UGFyc2VyU2VydmljZXM+O1xuXG4vKipcbiAqIENvbGxlY3RzIGRpcmVjdCBwdWJsaWMgbWVtYmVycyBmcm9tIG9uZSBzb3VyY2UgZmlsZS5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlIFNvdXJjZSBmaWxlIGJlaW5nIGFuYWx5emVkLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gcGFyc2VyU2VydmljZXMgVHlwZVNjcmlwdCBhbmQgRVNUcmVlIG5vZGUgbWFwcy5cbiAqIEByZXR1cm5zIFB1YmxpYyBtZW1iZXIgZGVjbGFyYXRpb25zIHdpdGggcmVzb2x2ZWQgc3ltYm9scy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtZW1iZXJzID0gY29sbGVjdFB1YmxpY01lbWJlcnMoc291cmNlRmlsZSwgY2hlY2tlciwgcGFyc2VyU2VydmljZXMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbGxlY3RQdWJsaWNNZW1iZXJzID0gKFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgcGFyc2VyU2VydmljZXM6IFBhcnNlclNlcnZpY2VzLFxuKTogUHVibGljTWVtYmVyW10gPT4ge1xuICBjb25zdCBtZW1iZXJzOiBQdWJsaWNNZW1iZXJbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgaG9zdCBvZiBjb2xsZWN0TWVtYmVySG9zdHMoc291cmNlRmlsZSwgY2hlY2tlcikpIHtcbiAgICBjb25zdCBob3N0VHlwZSA9IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24oaG9zdC5ub2RlKTtcbiAgICBjb25zdCBpc0NsYXNzSG9zdCA9IHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihob3N0Lm5vZGUpO1xuXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBob3N0Lm1lbWJlcnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzU3VwcG9ydGVkTWVtYmVyKGRlY2xhcmF0aW9uKSB8fFxuICAgICAgICAoaXNDbGFzc0hvc3QgJiYgIWlzUHVibGljQ2xhc3NNZW1iZXIoZGVjbGFyYXRpb24pKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuYW1lTm9kZSA9IChkZWNsYXJhdGlvbiBhcyB0cy5OYW1lZERlY2xhcmF0aW9uKS5uYW1lO1xuICAgICAgY29uc3QgbWVtYmVyTmFtZSA9IGdldFN0YXRpY01lbWJlck5hbWUobmFtZU5vZGUpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG1lbWJlck5hbWUgPT09IFwiY29uc3RydWN0b3JcIiB8fFxuICAgICAgICBuYW1lTm9kZSA9PT0gdm9pZCAwIHx8XG4gICAgICAgIG1lbWJlck5hbWUgPT09IHZvaWQgMCB8fFxuICAgICAgICAhcGFyc2VyU2VydmljZXMudHNOb2RlVG9FU1RyZWVOb2RlTWFwLmhhcyhuYW1lTm9kZSlcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVtYmVyU3ltYm9sID0gZ2V0TWVtYmVyU3ltYm9sKFxuICAgICAgICBjaGVja2VyLFxuICAgICAgICBkZWNsYXJhdGlvbixcbiAgICAgICAgbWVtYmVyTmFtZSxcbiAgICAgICAgaG9zdFR5cGUsXG4gICAgICApO1xuXG4gICAgICBpZiAoXG4gICAgICAgIG1lbWJlclN5bWJvbCA9PT0gdm9pZCAwIHx8XG4gICAgICAgIG1lbWJlcnMuc29tZShcbiAgICAgICAgICAoZXhpc3RpbmcpID0+XG4gICAgICAgICAgICBleGlzdGluZy5ob3N0U3ltYm9sID09PSBob3N0LnN5bWJvbCAmJlxuICAgICAgICAgICAgZXhpc3RpbmcuaG9zdE5hbWUgPT09IGhvc3QubmFtZSAmJlxuICAgICAgICAgICAgaXNTYW1lU3ltYm9sKGV4aXN0aW5nLm1lbWJlclN5bWJvbCwgbWVtYmVyU3ltYm9sKSxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBtZW1iZXJzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbixcbiAgICAgICAgaG9zdERlY2xhcmF0aW9uOiBob3N0Lm5vZGUsXG4gICAgICAgIGhvc3ROYW1lOiBob3N0Lm5hbWUsXG4gICAgICAgIGhvc3RTeW1ib2w6IGhvc3Quc3ltYm9sLFxuICAgICAgICBtZW1iZXJOYW1lLFxuICAgICAgICBtZW1iZXJTeW1ib2wsXG4gICAgICAgIHJlcG9ydE5vZGU6IHBhcnNlclNlcnZpY2VzLnRzTm9kZVRvRVNUcmVlTm9kZU1hcC5nZXQobmFtZU5vZGUpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lbWJlcnM7XG59O1xuXG5leHBvcnQgeyBjb2xsZWN0UHVibGljTWVtYmVycyB9O1xuIl19
@@ -0,0 +1,68 @@
1
+ import * as ts from "typescript";
2
+ /** One supported host and its direct member declarations. */
3
+ interface MemberHost {
4
+ /** Members declared directly by this host. */
5
+ members: readonly ts.Node[];
6
+ /** Display name of the host. */
7
+ name: string;
8
+ /** Host declaration node. */
9
+ node: ts.Node;
10
+ /** Host symbol, when available. */
11
+ symbol: ts.Symbol | undefined;
12
+ }
13
+ /**
14
+ * Gets a static member name, excluding dynamic and private keys.
15
+ * @param name Candidate declaration name.
16
+ * @returns Static name or undefined when the key is dynamic or private.
17
+ * @example
18
+ * ```typescript
19
+ * const name = getStaticMemberName(ts.factory.createIdentifier("run"));
20
+ * ```
21
+ */
22
+ declare const getStaticMemberName: (name: ts.Node | undefined) => string | undefined;
23
+ /**
24
+ * Resolves a direct object-literal property symbol before its contextual type.
25
+ * @param checker TypeScript type checker.
26
+ * @param member Member declaration.
27
+ * @param memberName Static member name.
28
+ * @param hostType Type of the containing host.
29
+ * @returns Member symbol when TypeScript can resolve it.
30
+ * @example
31
+ * ```typescript
32
+ * const symbol = getMemberSymbol(checker, property, "value", hostType);
33
+ * ```
34
+ */
35
+ declare const getMemberSymbol: (checker: ts.TypeChecker, member: ts.Node, memberName: string, hostType: ts.Type) => ts.Symbol | undefined;
36
+ /**
37
+ * Checks whether a class member is public or has implicit public visibility.
38
+ * @param member Class member declaration.
39
+ * @returns True when the member is not private or protected.
40
+ * @example
41
+ * ```typescript
42
+ * const visible = isPublicClassMember(classMethod);
43
+ * ```
44
+ */
45
+ declare const isPublicClassMember: (member: ts.Node) => boolean;
46
+ /**
47
+ * Checks whether a node is a supported direct property or method.
48
+ * @param member Candidate TypeScript member.
49
+ * @returns True when this rule analyzes the member kind.
50
+ * @example
51
+ * ```typescript
52
+ * const supported = isSupportedMember(typeMember);
53
+ * ```
54
+ */
55
+ declare const isSupportedMember: (member: ts.Node) => boolean;
56
+ /**
57
+ * Collects direct class, interface, type-alias, and const-object hosts.
58
+ * @param sourceFile Source file to inspect.
59
+ * @param checker TypeScript type checker.
60
+ * @returns Supported hosts declared by the source file.
61
+ * @example
62
+ * ```typescript
63
+ * const hosts = collectMemberHosts(sourceFile, checker);
64
+ * ```
65
+ */
66
+ declare const collectMemberHosts: (sourceFile: ts.SourceFile, checker: ts.TypeChecker) => MemberHost[];
67
+ export { collectMemberHosts, getMemberSymbol, getStaticMemberName, isPublicClassMember, isSupportedMember, };
68
+ //# sourceMappingURL=member-host-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-host-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-host-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,6DAA6D;AAC7D,UAAU,UAAU;IAClB,8CAA8C;IAC9C,OAAO,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;IAE5B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb,6BAA6B;IAC7B,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IAEd,mCAAmC;IACnC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GAAI,MAAM,EAAE,CAAC,IAAI,GAAG,SAAS,KAAG,MAAM,GAAG,SAcjE,CAAC;AA0BF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,eAAe,GACnB,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,EAAE,CAAC,IAAI,EACf,YAAY,MAAM,EAClB,UAAU,EAAE,CAAC,IAAI,KAChB,EAAE,CAAC,MAAM,GAAG,SAwBd,CAAC;AA+BF;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GAAI,QAAQ,EAAE,CAAC,IAAI,KAAG,OAoB9C,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,iBAAiB,GAAI,QAAQ,EAAE,CAAC,IAAI,KAAG,OAQH,CAAC;AAE3C;;;;;;;;;GASG;AACH,QAAA,MAAM,kBAAkB,GACtB,YAAY,EAAE,CAAC,UAAU,EACzB,SAAS,EAAE,CAAC,WAAW,KACtB,UAAU,EAsDZ,CAAC;AAEF,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,GAClB,CAAC"}
@@ -0,0 +1,195 @@
1
+ import * as ts from "typescript";
2
+ /**
3
+ * Gets a static member name, excluding dynamic and private keys.
4
+ * @param name Candidate declaration name.
5
+ * @returns Static name or undefined when the key is dynamic or private.
6
+ * @example
7
+ * ```typescript
8
+ * const name = getStaticMemberName(ts.factory.createIdentifier("run"));
9
+ * ```
10
+ */
11
+ const getStaticMemberName = (name) => {
12
+ if (name === void 0 ||
13
+ ts.isPrivateIdentifier(name) ||
14
+ ts.isComputedPropertyName(name)) {
15
+ return void 0;
16
+ }
17
+ return ts.isIdentifier(name) ||
18
+ ts.isStringLiteralLike(name) ||
19
+ ts.isNumericLiteral(name)
20
+ ? name.text
21
+ : void 0;
22
+ };
23
+ /**
24
+ * Gets the local name used to identify a supported host.
25
+ * @param node Host declaration.
26
+ * @returns Host name or an anonymous marker.
27
+ * @example
28
+ * ```typescript
29
+ * const name = getHostName(classDeclaration);
30
+ * ```
31
+ */
32
+ const getHostName = (node) => {
33
+ if ((ts.isClassDeclaration(node) ||
34
+ ts.isInterfaceDeclaration(node) ||
35
+ ts.isTypeAliasDeclaration(node)) &&
36
+ node.name !== void 0) {
37
+ return node.name.text;
38
+ }
39
+ return ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)
40
+ ? node.name.text
41
+ : "<anonymous>";
42
+ };
43
+ /**
44
+ * Resolves a direct object-literal property symbol before its contextual type.
45
+ * @param checker TypeScript type checker.
46
+ * @param member Member declaration.
47
+ * @param memberName Static member name.
48
+ * @param hostType Type of the containing host.
49
+ * @returns Member symbol when TypeScript can resolve it.
50
+ * @example
51
+ * ```typescript
52
+ * const symbol = getMemberSymbol(checker, property, "value", hostType);
53
+ * ```
54
+ */
55
+ const getMemberSymbol = (checker, member, memberName, hostType) => {
56
+ const nameNode = member.name;
57
+ const isObjectMember = ts.isPropertyAssignment(member) ||
58
+ ts.isShorthandPropertyAssignment(member) ||
59
+ ts.isMethodDeclaration(member) ||
60
+ ts.isGetAccessorDeclaration(member) ||
61
+ ts.isSetAccessorDeclaration(member);
62
+ if (isObjectMember && ts.isObjectLiteralExpression(member.parent)) {
63
+ const objectMember = checker.getPropertyOfType(checker.getTypeAtLocation(member.parent), memberName);
64
+ if (objectMember !== void 0) {
65
+ return objectMember;
66
+ }
67
+ }
68
+ const directSymbol = nameNode === void 0 ? void 0 : checker.getSymbolAtLocation(nameNode);
69
+ return directSymbol ?? checker.getPropertyOfType(hostType, memberName);
70
+ };
71
+ /**
72
+ * Unwraps supported expressions to find a direct object-literal initializer.
73
+ * @param expression Variable initializer.
74
+ * @returns Direct object literal or undefined.
75
+ * @example
76
+ * ```typescript
77
+ * const object = getObjectLiteral(variable.initializer);
78
+ * ```
79
+ */
80
+ const getObjectLiteral = (expression) => {
81
+ if (expression === void 0) {
82
+ return void 0;
83
+ }
84
+ if (ts.isObjectLiteralExpression(expression)) {
85
+ return expression;
86
+ }
87
+ return ts.isAsExpression(expression) ||
88
+ ts.isSatisfiesExpression(expression) ||
89
+ ts.isTypeAssertionExpression(expression) ||
90
+ ts.isParenthesizedExpression(expression) ||
91
+ ts.isNonNullExpression(expression)
92
+ ? getObjectLiteral(expression.expression)
93
+ : void 0;
94
+ };
95
+ /**
96
+ * Checks whether a class member is public or has implicit public visibility.
97
+ * @param member Class member declaration.
98
+ * @returns True when the member is not private or protected.
99
+ * @example
100
+ * ```typescript
101
+ * const visible = isPublicClassMember(classMethod);
102
+ * ```
103
+ */
104
+ const isPublicClassMember = (member) => {
105
+ const supportsVisibility = ts.isPropertyDeclaration(member) ||
106
+ ts.isMethodDeclaration(member) ||
107
+ ts.isGetAccessorDeclaration(member) ||
108
+ ts.isSetAccessorDeclaration(member);
109
+ if (!supportsVisibility) {
110
+ return false;
111
+ }
112
+ const modifiers = ts.canHaveModifiers(member)
113
+ ? (ts.getModifiers(member) ?? [])
114
+ : [];
115
+ return modifiers.every((modifier) => modifier.kind !== ts.SyntaxKind.PrivateKeyword &&
116
+ modifier.kind !== ts.SyntaxKind.ProtectedKeyword);
117
+ };
118
+ /**
119
+ * Checks whether a node is a supported direct property or method.
120
+ * @param member Candidate TypeScript member.
121
+ * @returns True when this rule analyzes the member kind.
122
+ * @example
123
+ * ```typescript
124
+ * const supported = isSupportedMember(typeMember);
125
+ * ```
126
+ */
127
+ const isSupportedMember = (member) => ts.isPropertyDeclaration(member) ||
128
+ ts.isMethodDeclaration(member) ||
129
+ ts.isGetAccessorDeclaration(member) ||
130
+ ts.isSetAccessorDeclaration(member) ||
131
+ ts.isPropertySignature(member) ||
132
+ ts.isMethodSignature(member) ||
133
+ ts.isPropertyAssignment(member) ||
134
+ ts.isShorthandPropertyAssignment(member);
135
+ /**
136
+ * Collects direct class, interface, type-alias, and const-object hosts.
137
+ * @param sourceFile Source file to inspect.
138
+ * @param checker TypeScript type checker.
139
+ * @returns Supported hosts declared by the source file.
140
+ * @example
141
+ * ```typescript
142
+ * const hosts = collectMemberHosts(sourceFile, checker);
143
+ * ```
144
+ */
145
+ const collectMemberHosts = (sourceFile, checker) => {
146
+ const hosts = [];
147
+ const visit = (node) => {
148
+ if (ts.isClassDeclaration(node)) {
149
+ hosts.push({
150
+ members: node.members,
151
+ name: getHostName(node),
152
+ node,
153
+ symbol: node.name === void 0
154
+ ? void 0
155
+ : checker.getSymbolAtLocation(node.name),
156
+ });
157
+ }
158
+ else if (ts.isInterfaceDeclaration(node)) {
159
+ hosts.push({
160
+ members: node.members,
161
+ name: getHostName(node),
162
+ node,
163
+ symbol: checker.getSymbolAtLocation(node.name),
164
+ });
165
+ }
166
+ else if (ts.isTypeAliasDeclaration(node) &&
167
+ ts.isTypeLiteralNode(node.type)) {
168
+ hosts.push({
169
+ members: node.type.members,
170
+ name: getHostName(node),
171
+ node,
172
+ symbol: checker.getSymbolAtLocation(node.name),
173
+ });
174
+ }
175
+ else if (ts.isVariableDeclaration(node) &&
176
+ ts.isIdentifier(node.name) &&
177
+ ts.isVariableDeclarationList(node.parent) &&
178
+ (node.parent.flags & ts.NodeFlags.Const) !== 0) {
179
+ const objectLiteral = getObjectLiteral(node.initializer);
180
+ if (objectLiteral !== void 0) {
181
+ hosts.push({
182
+ members: objectLiteral.properties,
183
+ name: getHostName(node),
184
+ node,
185
+ symbol: checker.getSymbolAtLocation(node.name),
186
+ });
187
+ }
188
+ }
189
+ ts.forEachChild(node, visit);
190
+ };
191
+ visit(sourceFile);
192
+ return hosts;
193
+ };
194
+ export { collectMemberHosts, getMemberSymbol, getStaticMemberName, isPublicClassMember, isSupportedMember, };
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLWhvc3QtdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci1ob3N0LXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQWlCakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsSUFBeUIsRUFBc0IsRUFBRTtJQUM1RSxJQUNFLElBQUksS0FBSyxLQUFLLENBQUM7UUFDZixFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFDL0IsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDMUIsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUM1QixFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtRQUNYLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFhLEVBQVUsRUFBRTtJQUM1QyxJQUNFLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztRQUMxQixFQUFFLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO1FBQy9CLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUNwQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FB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Q0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3pDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQzlDLENBQUM7WUFDRCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFekQsSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDVCxPQUFPLEVBQUUsYUFBYSxDQUFDLFVBQVU7b0JBQ2pDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO29CQUN2QixJQUFJO29CQUNKLE1BQU0sRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDL0MsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbEIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuLyoqIE9uZSBzdXBwb3J0ZWQgaG9zdCBhbmQgaXRzIGRpcmVjdCBtZW1iZXIgZGVjbGFyYXRpb25zLiAqL1xuaW50ZXJmYWNlIE1lbWJlckhvc3Qge1xuICAvKiogTWVtYmVycyBkZWNsYXJlZCBkaXJlY3RseSBieSB0aGlzIGhvc3QuICovXG4gIG1lbWJlcnM6IHJlYWRvbmx5IHRzLk5vZGVbXTtcblxuICAvKiogRGlzcGxheSBuYW1lIG9mIHRoZSBob3N0LiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEhvc3QgZGVjbGFyYXRpb24gbm9kZS4gKi9cbiAgbm9kZTogdHMuTm9kZTtcblxuICAvKiogSG9zdCBzeW1ib2wsIHdoZW4gYXZhaWxhYmxlLiAqL1xuICBzeW1ib2w6IHRzLlN5bWJvbCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZXRzIGEgc3RhdGljIG1lbWJlciBuYW1lLCBleGNsdWRpbmcgZHluYW1pYyBhbmQgcHJpdmF0ZSBrZXlzLlxuICogQHBhcmFtIG5hbWUgQ2FuZGlkYXRlIGRlY2xhcmF0aW9uIG5hbWUuXG4gKiBAcmV0dXJucyBTdGF0aWMgbmFtZSBvciB1bmRlZmluZWQgd2hlbiB0aGUga2V5IGlzIGR5bmFtaWMgb3IgcHJpdmF0ZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBuYW1lID0gZ2V0U3RhdGljTWVtYmVyTmFtZSh0cy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoXCJydW5cIikpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFN0YXRpY01lbWJlck5hbWUgPSAobmFtZTogdHMuTm9kZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChcbiAgICBuYW1lID09PSB2b2lkIDAgfHxcbiAgICB0cy5pc1ByaXZhdGVJZGVudGlmaWVyKG5hbWUpIHx8XG4gICAgdHMuaXNDb21wdXRlZFByb3BlcnR5TmFtZShuYW1lKVxuICApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgcmV0dXJuIHRzLmlzSWRlbnRpZmllcihuYW1lKSB8fFxuICAgIHRzLmlzU3RyaW5nTGl0ZXJhbExpa2UobmFtZSkgfHxcbiAgICB0cy5pc051bWVyaWNMaXRlcmFsKG5hbWUpXG4gICAgPyBuYW1lLnRleHRcbiAgICA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbG9jYWwgbmFtZSB1c2VkIHRvIGlkZW50aWZ5IGEgc3VwcG9ydGVkIGhvc3QuXG4gKiBAcGFyYW0gbm9kZSBIb3N0IGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMgSG9zdCBuYW1lIG9yIGFuIGFub255bW91cyBtYXJrZXIuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbmFtZSA9IGdldEhvc3ROYW1lKGNsYXNzRGVjbGFyYXRpb24pO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldEhvc3ROYW1lID0gKG5vZGU6IHRzLk5vZGUpOiBzdHJpbmcgPT4ge1xuICBpZiAoXG4gICAgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSB8fFxuICAgICAgdHMuaXNJbnRlcmZhY2VEZWNsYXJhdGlvbihub2RlKSB8fFxuICAgICAgdHMuaXNUeXBlQWxpYXNEZWNsYXJhdGlvbihub2RlKSkgJiZcbiAgICBub2RlLm5hbWUgIT09IHZvaWQgMFxuICApIHtcbiAgICByZXR1cm4gbm9kZS5uYW1lLnRleHQ7XG4gIH1cblxuICByZXR1cm4gdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpICYmIHRzLmlzSWRlbnRpZmllcihub2RlLm5hbWUpXG4gICAgPyBub2RlLm5hbWUudGV4dFxuICAgIDogXCI8YW5vbnltb3VzPlwiO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyBhIGRpcmVjdCBvYmplY3QtbGl0ZXJhbCBwcm9wZXJ0eSBzeW1ib2wgYmVmb3JlIGl0cyBjb250ZXh0dWFsIHR5cGUuXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSBtZW1iZXIgTWVtYmVyIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIG1lbWJlck5hbWUgU3RhdGljIG1lbWJlciBuYW1lLlxuICogQHBhcmFtIGhvc3RUeXBlIFR5cGUgb2YgdGhlIGNvbnRhaW5pbmcgaG9zdC5cbiAqIEByZXR1cm5zIE1lbWJlciBzeW1ib2wgd2hlbiBUeXBlU2NyaXB0IGNhbiByZXNvbHZlIGl0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHN5bWJvbCA9IGdldE1lbWJlclN5bWJvbChjaGVja2VyLCBwcm9wZXJ0eSwgXCJ2YWx1ZVwiLCBob3N0VHlwZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0TWVtYmVyU3ltYm9sID0gKFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgbWVtYmVyOiB0cy5Ob2RlLFxuICBtZW1iZXJOYW1lOiBzdHJpbmcsXG4gIGhvc3RUeXBlOiB0cy5UeXBlLFxuKTogdHMuU3ltYm9sIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgbmFtZU5vZGUgPSAobWVtYmVyIGFzIHRzLk5hbWVkRGVjbGFyYXRpb24pLm5hbWU7XG4gIGNvbnN0IGlzT2JqZWN0TWVtYmVyID1cbiAgICB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChtZW1iZXIpIHx8XG4gICAgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQobWVtYmVyKSB8fFxuICAgIHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obWVtYmVyKSB8fFxuICAgIHRzLmlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihtZW1iZXIpIHx8XG4gICAgdHMuaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uKG1lbWJlcik7XG5cbiAgaWYgKGlzT2JqZWN0TWVtYmVyICYmIHRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24obWVtYmVyLnBhcmVudCkpIHtcbiAgICBjb25zdCBvYmplY3RNZW1iZXIgPSBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKFxuICAgICAgY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihtZW1iZXIucGFyZW50KSxcbiAgICAgIG1lbWJlck5hbWUsXG4gICAgKTtcblxuICAgIGlmIChvYmplY3RNZW1iZXIgIT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIG9iamVjdE1lbWJlcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXJlY3RTeW1ib2wgPVxuICAgIG5hbWVOb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obmFtZU5vZGUpO1xuXG4gIHJldHVybiBkaXJlY3RTeW1ib2wgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShob3N0VHlwZSwgbWVtYmVyTmFtZSk7XG59O1xuXG4vKipcbiAqIFVud3JhcHMgc3VwcG9ydGVkIGV4cHJlc3Npb25zIHRvIGZpbmQgYSBkaXJlY3Qgb2JqZWN0LWxpdGVyYWwgaW5pdGlhbGl6ZXIuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBWYXJpYWJsZSBpbml0aWFsaXplci5cbiAqIEByZXR1cm5zIERpcmVjdCBvYmplY3QgbGl0ZXJhbCBvciB1bmRlZmluZWQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgb2JqZWN0ID0gZ2V0T2JqZWN0TGl0ZXJhbCh2YXJpYWJsZS5pbml0aWFsaXplcik7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0T2JqZWN0TGl0ZXJhbCA9IChcbiAgZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCxcbik6IHRzLk9iamVjdExpdGVyYWxFeHByZXNzaW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGV4cHJlc3Npb24gPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBpZiAodHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgcmV0dXJuIHRzLmlzQXNFeHByZXNzaW9uKGV4cHJlc3Npb24pIHx8XG4gICAgdHMuaXNTYXRpc2ZpZXNFeHByZXNzaW9uKGV4cHJlc3Npb24pIHx8XG4gICAgdHMuaXNUeXBlQXNzZXJ0aW9uRXhwcmVzc2lvbihleHByZXNzaW9uKSB8fFxuICAgIHRzLmlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24oZXhwcmVzc2lvbikgfHxcbiAgICB0cy5pc05vbk51bGxFeHByZXNzaW9uKGV4cHJlc3Npb24pXG4gICAgPyBnZXRPYmplY3RMaXRlcmFsKGV4cHJlc3Npb24uZXhwcmVzc2lvbilcbiAgICA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjbGFzcyBtZW1iZXIgaXMgcHVibGljIG9yIGhhcyBpbXBsaWNpdCBwdWJsaWMgdmlzaWJpbGl0eS5cbiAqIEBwYXJhbSBtZW1iZXIgQ2xhc3MgbWVtYmVyIGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBtZW1iZXIgaXMgbm90IHByaXZhdGUgb3IgcHJvdGVjdGVkLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHZpc2libGUgPSBpc1B1YmxpY0NsYXNzTWVtYmVyKGNsYXNzTWV0aG9kKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1B1YmxpY0NsYXNzTWVtYmVyID0gKG1lbWJlcjogdHMuTm9kZSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBzdXBwb3J0c1Zpc2liaWxpdHkgPVxuICAgIHRzLmlzUHJvcGVydHlEZWNsYXJhdGlvbihtZW1iZXIpIHx8XG4gICAgdHMuaXNNZXRob2REZWNsYXJhdGlvbihtZW1iZXIpIHx8XG4gICAgdHMuaXNHZXRBY2Nlc3NvckRlY2xhcmF0aW9uKG1lbWJlcikgfHxcbiAgICB0cy5pc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obWVtYmVyKTtcblxuICBpZiAoIXN1cHBvcnRzVmlzaWJpbGl0eSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVycyA9IHRzLmNhbkhhdmVNb2RpZmllcnMobWVtYmVyKVxuICAgID8gKHRzLmdldE1vZGlmaWVycyhtZW1iZXIpID8/IFtdKVxuICAgIDogW107XG5cbiAgcmV0dXJuIG1vZGlmaWVycy5ldmVyeShcbiAgICAobW9kaWZpZXIpID0+XG4gICAgICBtb2RpZmllci5raW5kICE9PSB0cy5TeW50YXhLaW5kLlByaXZhdGVLZXl3b3JkICYmXG4gICAgICBtb2RpZmllci5raW5kICE9PSB0cy5TeW50YXhLaW5kLlByb3RlY3RlZEtleXdvcmQsXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpcyBhIHN1cHBvcnRlZCBkaXJlY3QgcHJvcGVydHkgb3IgbWV0aG9kLlxuICogQHBhcmFtIG1lbWJlciBDYW5kaWRhdGUgVHlwZVNjcmlwdCBtZW1iZXIuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhpcyBydWxlIGFuYWx5emVzIHRoZSBtZW1iZXIga2luZC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdXBwb3J0ZWQgPSBpc1N1cHBvcnRlZE1lbWJlcih0eXBlTWVtYmVyKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1N1cHBvcnRlZE1lbWJlciA9IChtZW1iZXI6IHRzLk5vZGUpOiBib29sZWFuID0+XG4gIHRzLmlzUHJvcGVydHlEZWNsYXJhdGlvbihtZW1iZXIpIHx8XG4gIHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obWVtYmVyKSB8fFxuICB0cy5pc0dldEFjY2Vzc29yRGVjbGFyYXRpb24obWVtYmVyKSB8fFxuICB0cy5pc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obWVtYmVyKSB8fFxuICB0cy5pc1Byb3BlcnR5U2lnbmF0dXJlKG1lbWJlcikgfHxcbiAgdHMuaXNNZXRob2RTaWduYXR1cmUobWVtYmVyKSB8fFxuICB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChtZW1iZXIpIHx8XG4gIHRzLmlzU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50KG1lbWJlcik7XG5cbi8qKlxuICogQ29sbGVjdHMgZGlyZWN0IGNsYXNzLCBpbnRlcmZhY2UsIHR5cGUtYWxpYXMsIGFuZCBjb25zdC1vYmplY3QgaG9zdHMuXG4gKiBAcGFyYW0gc291cmNlRmlsZSBTb3VyY2UgZmlsZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcmV0dXJucyBTdXBwb3J0ZWQgaG9zdHMgZGVjbGFyZWQgYnkgdGhlIHNvdXJjZSBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGhvc3RzID0gY29sbGVjdE1lbWJlckhvc3RzKHNvdXJjZUZpbGUsIGNoZWNrZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbGxlY3RNZW1iZXJIb3N0cyA9IChcbiAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4pOiBNZW1iZXJIb3N0W10gPT4ge1xuICBjb25zdCBob3N0czogTWVtYmVySG9zdFtdID0gW107XG4gIGNvbnN0IHZpc2l0ID0gKG5vZGU6IHRzLk5vZGUpOiB2b2lkID0+IHtcbiAgICBpZiAodHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICBob3N0cy5wdXNoKHtcbiAgICAgICAgbWVtYmVyczogbm9kZS5tZW1iZXJzLFxuICAgICAgICBuYW1lOiBnZXRIb3N0TmFtZShub2RlKSxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgc3ltYm9sOlxuICAgICAgICAgIG5vZGUubmFtZSA9PT0gdm9pZCAwXG4gICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgOiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZS5uYW1lKSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHMuaXNJbnRlcmZhY2VEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaG9zdHMucHVzaCh7XG4gICAgICAgIG1lbWJlcnM6IG5vZGUubWVtYmVycyxcbiAgICAgICAgbmFtZTogZ2V0SG9zdE5hbWUobm9kZSksXG4gICAgICAgIG5vZGUsXG4gICAgICAgIHN5bWJvbDogY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUubmFtZSksXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHMuaXNUeXBlQWxpYXNEZWNsYXJhdGlvbihub2RlKSAmJlxuICAgICAgdHMuaXNUeXBlTGl0ZXJhbE5vZGUobm9kZS50eXBlKVxuICAgICkge1xuICAgICAgaG9zdHMucHVzaCh7XG4gICAgICAgIG1lbWJlcnM6IG5vZGUudHlwZS5tZW1iZXJzLFxuICAgICAgICBuYW1lOiBnZXRIb3N0TmFtZShub2RlKSxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgc3ltYm9sOiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZS5uYW1lKSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0cy5pc1ZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSkgJiZcbiAgICAgIHRzLmlzSWRlbnRpZmllcihub2RlLm5hbWUpICYmXG4gICAgICB0cy5pc1ZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUucGFyZW50KSAmJlxuICAgICAgKG5vZGUucGFyZW50LmZsYWdzICYgdHMuTm9kZUZsYWdzLkNvbnN0KSAhPT0gMFxuICAgICkge1xuICAgICAgY29uc3Qgb2JqZWN0TGl0ZXJhbCA9IGdldE9iamVjdExpdGVyYWwobm9kZS5pbml0aWFsaXplcik7XG5cbiAgICAgIGlmIChvYmplY3RMaXRlcmFsICE9PSB2b2lkIDApIHtcbiAgICAgICAgaG9zdHMucHVzaCh7XG4gICAgICAgICAgbWVtYmVyczogb2JqZWN0TGl0ZXJhbC5wcm9wZXJ0aWVzLFxuICAgICAgICAgIG5hbWU6IGdldEhvc3ROYW1lKG5vZGUpLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgc3ltYm9sOiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZS5uYW1lKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0KTtcbiAgfTtcblxuICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICByZXR1cm4gaG9zdHM7XG59O1xuXG5leHBvcnQge1xuICBjb2xsZWN0TWVtYmVySG9zdHMsXG4gIGdldE1lbWJlclN5bWJvbCxcbiAgZ2V0U3RhdGljTWVtYmVyTmFtZSxcbiAgaXNQdWJsaWNDbGFzc01lbWJlcixcbiAgaXNTdXBwb3J0ZWRNZW1iZXIsXG59O1xuIl19
@@ -0,0 +1,30 @@
1
+ import * as ts from "typescript";
2
+ import type { NoUnusedExportsState } from "../no-unused-exports/types.js";
3
+ /**
4
+ * Checks whether a member is reachable from a configured public API export.
5
+ * @param program TypeScript project program.
6
+ * @param state Normalized public API and test patterns.
7
+ * @param repoRoot Root directory used for glob matching.
8
+ * @param memberSymbol Member symbol being checked.
9
+ * @returns True when an API export exposes the member.
10
+ * @example
11
+ * ```typescript
12
+ * const exposed = isPublicApiMember(program, state, repoRoot, memberSymbol);
13
+ * ```
14
+ */
15
+ declare const isPublicApiMember: (program: ts.Program, state: NoUnusedExportsState, repoRoot: string, memberSymbol: ts.Symbol) => boolean;
16
+ /**
17
+ * Checks whether a host is exported from a configured public API file.
18
+ * @param program TypeScript project program.
19
+ * @param state Normalized public API and test patterns.
20
+ * @param repoRoot Root directory used for glob matching.
21
+ * @param hostSymbol Host declaration symbol.
22
+ * @returns True when the host is exposed by a non-test API file.
23
+ * @example
24
+ * ```typescript
25
+ * const isPublic = isPublicApiHost(program, state, repoRoot, hostSymbol);
26
+ * ```
27
+ */
28
+ declare const isPublicApiHost: (program: ts.Program, state: NoUnusedExportsState, repoRoot: string, hostSymbol: ts.Symbol | undefined) => boolean;
29
+ export { isPublicApiHost, isPublicApiMember };
30
+ //# sourceMappingURL=member-public-api-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-public-api-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-public-api-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AA2DvE;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,iBAAiB,GACrB,SAAS,EAAE,CAAC,OAAO,EACnB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,cAAc,EAAE,CAAC,MAAM,KACtB,OA6CF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,eAAe,GACnB,SAAS,EAAE,CAAC,OAAO,EACnB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,YAAY,EAAE,CAAC,MAAM,GAAG,SAAS,KAChC,OAsBF,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}