@codeperfect/eslint-plugin 2.4.0 → 2.6.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 (163) hide show
  1. package/README.md +2 -0
  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 +6 -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/consistent-barrel-files-options.d.ts +1 -11
  10. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -1
  11. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +6 -14
  12. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
  13. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +2 -4
  14. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.d.ts.map +1 -1
  15. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.js +4 -134
  16. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-utilities.d.ts +14 -0
  17. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-utilities.d.ts.map +1 -0
  18. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-utilities.js +154 -0
  19. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts.map +1 -1
  20. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.js +10 -12
  21. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -1
  22. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +4 -11
  23. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -1
  24. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +2 -12
  25. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
  26. package/dist/domain/architecture/consistent-barrel-files/rule.js +4 -3
  27. package/dist/domain/architecture/no-unused-exports/no-unused-exports-declaration-utilities.d.ts +14 -0
  28. package/dist/domain/architecture/no-unused-exports/no-unused-exports-declaration-utilities.d.ts.map +1 -0
  29. package/dist/domain/architecture/no-unused-exports/no-unused-exports-declaration-utilities.js +187 -0
  30. package/dist/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.d.ts +26 -0
  31. package/dist/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.d.ts.map +1 -0
  32. package/dist/domain/architecture/no-unused-exports/no-unused-exports-identifier-utilities.js +95 -0
  33. package/dist/domain/architecture/no-unused-exports/no-unused-exports-pattern-utilities.d.ts +32 -0
  34. package/dist/domain/architecture/no-unused-exports/no-unused-exports-pattern-utilities.d.ts.map +1 -0
  35. package/dist/domain/architecture/no-unused-exports/no-unused-exports-pattern-utilities.js +78 -0
  36. package/dist/domain/architecture/no-unused-exports/no-unused-exports-public-api-usage-utilities.d.ts +18 -0
  37. package/dist/domain/architecture/no-unused-exports/no-unused-exports-public-api-usage-utilities.d.ts.map +1 -0
  38. package/dist/domain/architecture/no-unused-exports/no-unused-exports-public-api-usage-utilities.js +45 -0
  39. package/dist/domain/architecture/no-unused-exports/no-unused-exports-record-utilities.d.ts +34 -0
  40. package/dist/domain/architecture/no-unused-exports/no-unused-exports-record-utilities.d.ts.map +1 -0
  41. package/dist/domain/architecture/no-unused-exports/no-unused-exports-record-utilities.js +44 -0
  42. package/dist/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.d.ts +59 -0
  43. package/dist/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.d.ts.map +1 -0
  44. package/dist/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.js +133 -0
  45. package/dist/domain/architecture/no-unused-exports/{no-unused-exports-utilities.d.ts → no-unused-exports-usage-utilities.d.ts} +2 -23
  46. package/dist/domain/architecture/no-unused-exports/no-unused-exports-usage-utilities.d.ts.map +1 -0
  47. package/dist/domain/architecture/no-unused-exports/no-unused-exports-usage-utilities.js +106 -0
  48. package/dist/domain/architecture/no-unused-exports/rule.js +4 -2
  49. package/dist/domain/core/index.d.ts +1 -0
  50. package/dist/domain/core/index.d.ts.map +1 -1
  51. package/dist/domain/core/index.js +2 -1
  52. package/dist/domain/core/no-multiple-declarators/rule-utilities.d.ts +58 -0
  53. package/dist/domain/core/no-multiple-declarators/rule-utilities.d.ts.map +1 -0
  54. package/dist/domain/core/no-multiple-declarators/rule-utilities.js +204 -0
  55. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  56. package/dist/domain/core/no-multiple-declarators/rule.js +9 -211
  57. package/dist/domain/core/no-multiple-declarators/types.js +2 -2
  58. package/dist/domain/core/no-useless-delegation/index.d.ts +2 -0
  59. package/dist/domain/core/no-useless-delegation/index.d.ts.map +1 -0
  60. package/dist/domain/core/no-useless-delegation/index.js +2 -0
  61. package/dist/domain/core/no-useless-delegation/rule.d.ts +5 -0
  62. package/dist/domain/core/no-useless-delegation/rule.d.ts.map +1 -0
  63. package/dist/domain/core/no-useless-delegation/rule.js +200 -0
  64. package/dist/domain/core/prefer-interface-types/rule-utilities.d.ts +57 -0
  65. package/dist/domain/core/prefer-interface-types/rule-utilities.d.ts.map +1 -0
  66. package/dist/domain/core/prefer-interface-types/rule-utilities.js +105 -0
  67. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -1
  68. package/dist/domain/core/prefer-interface-types/rule.js +2 -104
  69. package/dist/domain/docs/no-interface-member-docs/comment-removal-ranges.d.ts +25 -0
  70. package/dist/domain/docs/no-interface-member-docs/comment-removal-ranges.d.ts.map +1 -0
  71. package/dist/domain/docs/no-interface-member-docs/comment-removal-ranges.js +64 -0
  72. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts +2 -24
  73. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -1
  74. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +3 -65
  75. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +2 -2
  76. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +2 -2
  77. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  78. package/dist/domain/docs/no-interface-member-docs/rule.js +3 -2
  79. package/dist/domain/docs/require-example-language/examples-collect.d.ts +15 -0
  80. package/dist/domain/docs/require-example-language/examples-collect.d.ts.map +1 -0
  81. package/dist/domain/docs/require-example-language/examples-collect.js +113 -0
  82. package/dist/domain/docs/require-example-language/examples.d.ts +24 -13
  83. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -1
  84. package/dist/domain/docs/require-example-language/examples.js +2 -111
  85. package/dist/domain/docs/require-example-language/fixes.js +4 -4
  86. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
  87. package/dist/domain/docs/require-example-language/rule.js +9 -8
  88. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -1
  89. package/dist/domain/docs/require-example-language/types.js +1 -1
  90. package/dist/domain/index.d.ts +1 -1
  91. package/dist/domain/index.d.ts.map +1 -1
  92. package/dist/domain/index.js +2 -2
  93. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
  94. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +8 -8
  95. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -1
  96. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +10 -9
  97. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -1
  98. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +2 -5
  99. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +14 -16
  100. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +6 -4
  101. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
  102. package/dist/domain/testing/aaa/analyzer.super.js +10 -8
  103. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -1
  104. package/dist/domain/testing/assert-actual-expected-names/rule.js +21 -23
  105. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -1
  106. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +1 -1
  107. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -1
  108. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +2 -160
  109. package/dist/domain/testing/enforce-aaa-phase-purity/statement-purity-reporters.d.ts +41 -0
  110. package/dist/domain/testing/enforce-aaa-phase-purity/statement-purity-reporters.d.ts.map +1 -0
  111. package/dist/domain/testing/enforce-aaa-phase-purity/statement-purity-reporters.js +161 -0
  112. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.d.ts.map +1 -1
  113. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.js +2 -2
  114. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.d.ts +81 -0
  115. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.d.ts.map +1 -0
  116. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.js +181 -0
  117. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
  118. package/dist/domain/testing/enforce-aaa-structure/rule.js +28 -217
  119. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.d.ts +29 -0
  120. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.d.ts.map +1 -0
  121. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-detection.js +200 -0
  122. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.d.ts +12 -0
  123. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.d.ts.map +1 -0
  124. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-names.js +151 -0
  125. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.d.ts +16 -0
  126. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.d.ts.map +1 -0
  127. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule-reporting.js +109 -0
  128. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.d.ts.map +1 -1
  129. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.js +18 -450
  130. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -1
  131. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +7 -4
  132. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -1
  133. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +7 -4
  134. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +2 -2
  135. package/dist/domain/testing/prefer-vi-mocked-import/match-collisions.d.ts +18 -0
  136. package/dist/domain/testing/prefer-vi-mocked-import/match-collisions.d.ts.map +1 -0
  137. package/dist/domain/testing/prefer-vi-mocked-import/match-collisions.js +162 -0
  138. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -1
  139. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +5 -4
  140. package/dist/domain/testing/prefer-vi-mocked-import/match-seeds.d.ts +29 -0
  141. package/dist/domain/testing/prefer-vi-mocked-import/match-seeds.d.ts.map +1 -0
  142. package/dist/domain/testing/prefer-vi-mocked-import/match-seeds.js +100 -0
  143. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -1
  144. package/dist/domain/testing/prefer-vi-mocked-import/match.js +5 -246
  145. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
  146. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +18 -20
  147. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
  148. package/dist/domain/testing/require-act-result-capture/rule.js +47 -21
  149. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -1
  150. package/dist/domain/testing/require-test-companion/rule.js +2 -4
  151. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -1
  152. package/dist/domain/testing/single-act-statement/rule.js +20 -22
  153. package/dist/index.d.ts +1 -1
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +2 -2
  156. package/dist/infrastructure/codeperfect-plugin.d.ts +2 -0
  157. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -1
  158. package/dist/infrastructure/codeperfect-plugin.js +3 -2
  159. package/dist/infrastructure/presets.d.ts.map +1 -1
  160. package/dist/infrastructure/presets.js +3 -1
  161. package/package.json +60 -69
  162. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts.map +0 -1
  163. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.js +0 -612
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Converts one unknown value into an indexable record.
3
+ * @param value Candidate value.
4
+ * @returns Record view when the value is object-like.
5
+ * @example
6
+ * ```typescript
7
+ * const record = asRecord({ type: "Identifier" });
8
+ * ```
9
+ */
10
+ const asRecord = (value) => value !== null && typeof value === "object"
11
+ ? value
12
+ : void 0;
13
+ /**
14
+ * Reads one array property from an object-like value.
15
+ * @param value Candidate object.
16
+ * @param key Lookup key used to read the property.
17
+ * @returns Array value when present.
18
+ * @example
19
+ * ```typescript
20
+ * const items = readArrayProperty({ elements: [1, 2] }, "elements");
21
+ * ```
22
+ */
23
+ const readArrayProperty = (value, key) => {
24
+ const record = asRecord(value);
25
+ const property = record?.[key];
26
+ return Array.isArray(property) ? property : void 0;
27
+ };
28
+ /**
29
+ * Reads one string property from an object-like value.
30
+ * @param value Candidate object.
31
+ * @param key Lookup key used to read the property.
32
+ * @returns String value when present.
33
+ * @example
34
+ * ```typescript
35
+ * const name = readStringProperty({ name: "feature" }, "name");
36
+ * ```
37
+ */
38
+ const readStringProperty = (value, key) => {
39
+ const record = asRecord(value);
40
+ const property = record?.[key];
41
+ return typeof property === "string" ? property : void 0;
42
+ };
43
+ export { asRecord, readArrayProperty, readStringProperty };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLWV4cG9ydHMtcmVjb3JkLXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1leHBvcnRzL25vLXVudXNlZC1leHBvcnRzLXJlY29yZC11dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBdUMsRUFBRSxDQUN2RSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7SUFDekMsQ0FBQyxDQUFFLEtBQWlDO0lBQ3BDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUViOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsS0FBYyxFQUNkLEdBQVcsRUFDWSxFQUFFO0lBQ3pCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixLQUFjLEVBQ2QsR0FBVyxFQUNTLEVBQUU7SUFDdEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydHMgb25lIHVua25vd24gdmFsdWUgaW50byBhbiBpbmRleGFibGUgcmVjb3JkLlxuICogQHBhcmFtIHZhbHVlIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIFJlY29yZCB2aWV3IHdoZW4gdGhlIHZhbHVlIGlzIG9iamVjdC1saWtlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHsgdHlwZTogXCJJZGVudGlmaWVyXCIgfSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgYXNSZWNvcmQgPSAodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCA9PlxuICB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCJcbiAgICA/ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICA6IHZvaWQgMDtcblxuLyoqXG4gKiBSZWFkcyBvbmUgYXJyYXkgcHJvcGVydHkgZnJvbSBhbiBvYmplY3QtbGlrZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSBDYW5kaWRhdGUgb2JqZWN0LlxuICogQHBhcmFtIGtleSBMb29rdXAga2V5IHVzZWQgdG8gcmVhZCB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBBcnJheSB2YWx1ZSB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaXRlbXMgPSByZWFkQXJyYXlQcm9wZXJ0eSh7IGVsZW1lbnRzOiBbMSwgMl0gfSwgXCJlbGVtZW50c1wiKTtcbiAqIGBgYFxuICovXG5jb25zdCByZWFkQXJyYXlQcm9wZXJ0eSA9IChcbiAgdmFsdWU6IHVua25vd24sXG4gIGtleTogc3RyaW5nLFxuKTogdW5kZWZpbmVkIHwgdW5rbm93bltdID0+IHtcbiAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICBjb25zdCBwcm9wZXJ0eSA9IHJlY29yZD8uW2tleV07XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHByb3BlcnR5KSA/IHByb3BlcnR5IDogdm9pZCAwO1xufTtcblxuLyoqXG4gKiBSZWFkcyBvbmUgc3RyaW5nIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LWxpa2UgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWUgQ2FuZGlkYXRlIG9iamVjdC5cbiAqIEBwYXJhbSBrZXkgTG9va3VwIGtleSB1c2VkIHRvIHJlYWQgdGhlIHByb3BlcnR5LlxuICogQHJldHVybnMgU3RyaW5nIHZhbHVlIHdoZW4gcHJlc2VudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBuYW1lID0gcmVhZFN0cmluZ1Byb3BlcnR5KHsgbmFtZTogXCJmZWF0dXJlXCIgfSwgXCJuYW1lXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IHJlYWRTdHJpbmdQcm9wZXJ0eSA9IChcbiAgdmFsdWU6IHVua25vd24sXG4gIGtleTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICBjb25zdCBwcm9wZXJ0eSA9IHJlY29yZD8uW2tleV07XG4gIHJldHVybiB0eXBlb2YgcHJvcGVydHkgPT09IFwic3RyaW5nXCIgPyBwcm9wZXJ0eSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCB7IGFzUmVjb3JkLCByZWFkQXJyYXlQcm9wZXJ0eSwgcmVhZFN0cmluZ1Byb3BlcnR5IH07XG4iXX0=
@@ -0,0 +1,59 @@
1
+ import * as ts from "typescript";
2
+ /**
3
+ * Normalizes an absolute file path for safe equality checks.
4
+ * @param inputPath Candidate path.
5
+ * @returns Normalized absolute path suitable for cross-platform comparisons.
6
+ * @example
7
+ * ```typescript
8
+ * const comparable = toComparableAbsolutePath("/repo/src/feature.ts");
9
+ * ```
10
+ */
11
+ declare const toComparableAbsolutePath: (inputPath: string) => string;
12
+ /**
13
+ * Checks whether two symbols reference the same declaration site.
14
+ * @param left Left-hand symbol candidate.
15
+ * @param right Right-hand symbol candidate.
16
+ * @returns True when both symbols identify the same declaration.
17
+ * @example
18
+ * ```typescript
19
+ * const same = isSameSymbol(left, right);
20
+ * ```
21
+ */
22
+ declare const isSameSymbol: (left: ts.Symbol, right: ts.Symbol) => boolean;
23
+ /**
24
+ * Resolves one symbol to its canonical target.
25
+ * @param symbol Candidate symbol.
26
+ * @param checker TypeScript checker.
27
+ * @returns Resolved canonical symbol.
28
+ * @example
29
+ * ```typescript
30
+ * const resolved = resolveCanonicalSymbol(symbol, checker);
31
+ * ```
32
+ */
33
+ declare const resolveCanonicalSymbol: (symbol: ts.Symbol, checker: ts.TypeChecker) => ts.Symbol;
34
+ /**
35
+ * Resolves one exported symbol by name from a source file.
36
+ * @param program TypeScript program.
37
+ * @param sourceFilename Source file path.
38
+ * @param exportedName Public name exposed by the module export list.
39
+ * @returns Symbol when found.
40
+ * @example
41
+ * ```typescript
42
+ * const symbol = getExportedSymbol(program, sourceFilename, "feature");
43
+ * ```
44
+ */
45
+ declare const getExportedSymbol: (program: ts.Program, sourceFilename: string, exportedName: string) => ts.Symbol | undefined;
46
+ /**
47
+ * Checks whether one source file exports the target symbol.
48
+ * @param sourceFile Source file that may expose the symbol.
49
+ * @param checker TypeScript checker.
50
+ * @param targetSymbol Symbol being classified.
51
+ * @returns True when one module export resolves to the target symbol.
52
+ * @example
53
+ * ```typescript
54
+ * const exposed = sourceFileExportsSymbol(sourceFile, checker, targetSymbol);
55
+ * ```
56
+ */
57
+ declare const sourceFileExportsSymbol: (sourceFile: ts.SourceFile, checker: ts.TypeChecker, targetSymbol: ts.Symbol) => boolean;
58
+ export { getExportedSymbol, isSameSymbol, resolveCanonicalSymbol, sourceFileExportsSymbol, toComparableAbsolutePath, };
59
+ //# sourceMappingURL=no-unused-exports-symbol-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-unused-exports-symbol-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC;;;;;;;;GAQG;AACH,QAAA,MAAM,wBAAwB,GAAI,WAAW,MAAM,KAAG,MAIrD,CAAC;AAsBF;;;;;;;;;GASG;AACH,QAAA,MAAM,YAAY,GAAI,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,KAAG,OAezD,CAAC;AAEF;;;;;;;;;GASG;AACH,QAAA,MAAM,sBAAsB,GAC1B,QAAQ,EAAE,CAAC,MAAM,EACjB,SAAS,EAAE,CAAC,WAAW,KACtB,EAAE,CAAC,MAUL,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,iBAAiB,GACrB,SAAS,EAAE,CAAC,OAAO,EACnB,gBAAgB,MAAM,EACtB,cAAc,MAAM,KACnB,EAAE,CAAC,MAAM,GAAG,SA6Bd,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,uBAAuB,GAC3B,YAAY,EAAE,CAAC,UAAU,EACzB,SAAS,EAAE,CAAC,WAAW,EACvB,cAAc,EAAE,CAAC,MAAM,KACtB,OAgBF,CAAC;AAEF,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,GACzB,CAAC"}
@@ -0,0 +1,133 @@
1
+ import path from "node:path";
2
+ import * as ts from "typescript";
3
+ /**
4
+ * Normalizes an absolute file path for safe equality checks.
5
+ * @param inputPath Candidate path.
6
+ * @returns Normalized absolute path suitable for cross-platform comparisons.
7
+ * @example
8
+ * ```typescript
9
+ * const comparable = toComparableAbsolutePath("/repo/src/feature.ts");
10
+ * ```
11
+ */
12
+ const toComparableAbsolutePath = (inputPath) => {
13
+ const absolutePath = path.normalize(path.resolve(inputPath));
14
+ return absolutePath.toLowerCase();
15
+ };
16
+ /**
17
+ * Builds declaration-site keys for symbol identity matching.
18
+ * @param symbol Symbol being compared.
19
+ * @returns Declaration keys describing where this symbol is declared.
20
+ * @example
21
+ * ```typescript
22
+ * const keys = getDeclarationKeys(symbol);
23
+ * ```
24
+ */
25
+ const getDeclarationKeys = (symbol) => {
26
+ const declarations = symbol.declarations ?? [];
27
+ return new Set(declarations.map((declaration) => {
28
+ const sourceFilename = declaration.getSourceFile().fileName;
29
+ return `${sourceFilename}:${String(declaration.pos)}:${String(declaration.end)}`;
30
+ }));
31
+ };
32
+ /**
33
+ * Checks whether two symbols reference the same declaration site.
34
+ * @param left Left-hand symbol candidate.
35
+ * @param right Right-hand symbol candidate.
36
+ * @returns True when both symbols identify the same declaration.
37
+ * @example
38
+ * ```typescript
39
+ * const same = isSameSymbol(left, right);
40
+ * ```
41
+ */
42
+ const isSameSymbol = (left, right) => {
43
+ if (left === right) {
44
+ return true;
45
+ }
46
+ const leftKeys = getDeclarationKeys(left);
47
+ const rightKeys = getDeclarationKeys(right);
48
+ for (const key of leftKeys) {
49
+ if (rightKeys.has(key)) {
50
+ return true;
51
+ }
52
+ }
53
+ return false;
54
+ };
55
+ /**
56
+ * Resolves one symbol to its canonical target.
57
+ * @param symbol Candidate symbol.
58
+ * @param checker TypeScript checker.
59
+ * @returns Resolved canonical symbol.
60
+ * @example
61
+ * ```typescript
62
+ * const resolved = resolveCanonicalSymbol(symbol, checker);
63
+ * ```
64
+ */
65
+ const resolveCanonicalSymbol = (symbol, checker) => {
66
+ if ((symbol.flags & ts.SymbolFlags.Alias) === 0) {
67
+ return symbol;
68
+ }
69
+ try {
70
+ return checker.getAliasedSymbol(symbol);
71
+ }
72
+ catch {
73
+ return symbol;
74
+ }
75
+ };
76
+ /**
77
+ * Resolves one exported symbol by name from a source file.
78
+ * @param program TypeScript program.
79
+ * @param sourceFilename Source file path.
80
+ * @param exportedName Public name exposed by the module export list.
81
+ * @returns Symbol when found.
82
+ * @example
83
+ * ```typescript
84
+ * const symbol = getExportedSymbol(program, sourceFilename, "feature");
85
+ * ```
86
+ */
87
+ const getExportedSymbol = (program, sourceFilename, exportedName) => {
88
+ const checker = program.getTypeChecker();
89
+ const sourceFile = program
90
+ .getSourceFiles()
91
+ .find((file) => toComparableAbsolutePath(file.fileName) ===
92
+ toComparableAbsolutePath(sourceFilename));
93
+ if (sourceFile === void 0) {
94
+ return void 0;
95
+ }
96
+ const moduleSymbol = checker.getSymbolAtLocation(sourceFile);
97
+ if (moduleSymbol === void 0) {
98
+ return void 0;
99
+ }
100
+ const exportedSymbol = checker
101
+ .getExportsOfModule(moduleSymbol)
102
+ .find((symbol) => symbol.getName() === exportedName);
103
+ if (exportedSymbol === void 0) {
104
+ return void 0;
105
+ }
106
+ return resolveCanonicalSymbol(exportedSymbol, checker);
107
+ };
108
+ /**
109
+ * Checks whether one source file exports the target symbol.
110
+ * @param sourceFile Source file that may expose the symbol.
111
+ * @param checker TypeScript checker.
112
+ * @param targetSymbol Symbol being classified.
113
+ * @returns True when one module export resolves to the target symbol.
114
+ * @example
115
+ * ```typescript
116
+ * const exposed = sourceFileExportsSymbol(sourceFile, checker, targetSymbol);
117
+ * ```
118
+ */
119
+ const sourceFileExportsSymbol = (sourceFile, checker, targetSymbol) => {
120
+ const moduleSymbol = checker.getSymbolAtLocation(sourceFile);
121
+ if (moduleSymbol === void 0) {
122
+ return false;
123
+ }
124
+ for (const exportedSymbol of checker.getExportsOfModule(moduleSymbol)) {
125
+ const resolvedSymbol = resolveCanonicalSymbol(exportedSymbol, checker);
126
+ if (isSameSymbol(resolvedSymbol, targetSymbol)) {
127
+ return true;
128
+ }
129
+ }
130
+ return false;
131
+ };
132
+ export { getExportedSymbol, isSameSymbol, resolveCanonicalSymbol, sourceFileExportsSymbol, toComparableAbsolutePath, };
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLWV4cG9ydHMtc3ltYm9sLXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1leHBvcnRzL25vLXVudXNlZC1leHBvcnRzLXN5bWJvbC11dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFNBQWlCLEVBQVUsRUFBRTtJQUM3RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUU3RCxPQUFPLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFpQixFQUFlLEVBQUU7SUFDNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7SUFFL0MsT0FBTyxJQUFJLEdBQUcsQ0FDWixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUM1RCxPQUFPLEdBQUcsY0FBYyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ25GLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFlBQVksR0FBRyxDQUFDLElBQWUsRUFBRSxLQUFnQixF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Y0FBYyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCAqIGFzIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggZm9yIHNhZmUgZXF1YWxpdHkgY2hlY2tzLlxuICogQHBhcmFtIGlucHV0UGF0aCBDYW5kaWRhdGUgcGF0aC5cbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgYWJzb2x1dGUgcGF0aCBzdWl0YWJsZSBmb3IgY3Jvc3MtcGxhdGZvcm0gY29tcGFyaXNvbnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29tcGFyYWJsZSA9IHRvQ29tcGFyYWJsZUFic29sdXRlUGF0aChcIi9yZXBvL3NyYy9mZWF0dXJlLnRzXCIpO1xuICogYGBgXG4gKi9cbmNvbnN0IHRvQ29tcGFyYWJsZUFic29sdXRlUGF0aCA9IChpbnB1dFBhdGg6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgubm9ybWFsaXplKHBhdGgucmVzb2x2ZShpbnB1dFBhdGgpKTtcblxuICByZXR1cm4gYWJzb2x1dGVQYXRoLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBkZWNsYXJhdGlvbi1zaXRlIGtleXMgZm9yIHN5bWJvbCBpZGVudGl0eSBtYXRjaGluZy5cbiAqIEBwYXJhbSBzeW1ib2wgU3ltYm9sIGJlaW5nIGNvbXBhcmVkLlxuICogQHJldHVybnMgRGVjbGFyYXRpb24ga2V5cyBkZXNjcmliaW5nIHdoZXJlIHRoaXMgc3ltYm9sIGlzIGRlY2xhcmVkLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGtleXMgPSBnZXREZWNsYXJhdGlvbktleXMoc3ltYm9sKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXREZWNsYXJhdGlvbktleXMgPSAoc3ltYm9sOiB0cy5TeW1ib2wpOiBTZXQ8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN5bWJvbC5kZWNsYXJhdGlvbnMgPz8gW107XG5cbiAgcmV0dXJuIG5ldyBTZXQoXG4gICAgZGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZUZpbGVuYW1lID0gZGVjbGFyYXRpb24uZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lO1xuICAgICAgcmV0dXJuIGAke3NvdXJjZUZpbGVuYW1lfToke1N0cmluZyhkZWNsYXJhdGlvbi5wb3MpfToke1N0cmluZyhkZWNsYXJhdGlvbi5lbmQpfWA7XG4gICAgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHR3byBzeW1ib2xzIHJlZmVyZW5jZSB0aGUgc2FtZSBkZWNsYXJhdGlvbiBzaXRlLlxuICogQHBhcmFtIGxlZnQgTGVmdC1oYW5kIHN5bWJvbCBjYW5kaWRhdGUuXG4gKiBAcGFyYW0gcmlnaHQgUmlnaHQtaGFuZCBzeW1ib2wgY2FuZGlkYXRlLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIGJvdGggc3ltYm9scyBpZGVudGlmeSB0aGUgc2FtZSBkZWNsYXJhdGlvbi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzYW1lID0gaXNTYW1lU3ltYm9sKGxlZnQsIHJpZ2h0KTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1NhbWVTeW1ib2wgPSAobGVmdDogdHMuU3ltYm9sLCByaWdodDogdHMuU3ltYm9sKTogYm9vbGVhbiA9PiB7XG4gIGlmIChsZWZ0ID09PSByaWdodCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgbGVmdEtleXMgPSBnZXREZWNsYXJhdGlvbktleXMobGVmdCk7XG4gIGNvbnN0IHJpZ2h0S2V5cyA9IGdldERlY2xhcmF0aW9uS2V5cyhyaWdodCk7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgbGVmdEtleXMpIHtcbiAgICBpZiAocmlnaHRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIG9uZSBzeW1ib2wgdG8gaXRzIGNhbm9uaWNhbCB0YXJnZXQuXG4gKiBAcGFyYW0gc3ltYm9sIENhbmRpZGF0ZSBzeW1ib2wuXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IGNoZWNrZXIuXG4gKiBAcmV0dXJucyBSZXNvbHZlZCBjYW5vbmljYWwgc3ltYm9sLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbChzeW1ib2wsIGNoZWNrZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IHJlc29sdmVDYW5vbmljYWxTeW1ib2wgPSAoXG4gIHN5bWJvbDogdHMuU3ltYm9sLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbik6IHRzLlN5bWJvbCA9PiB7XG4gIGlmICgoc3ltYm9sLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuQWxpYXMpID09PSAwKSB7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbChzeW1ib2wpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIG9uZSBleHBvcnRlZCBzeW1ib2wgYnkgbmFtZSBmcm9tIGEgc291cmNlIGZpbGUuXG4gKiBAcGFyYW0gcHJvZ3JhbSBUeXBlU2NyaXB0IHByb2dyYW0uXG4gKiBAcGFyYW0gc291cmNlRmlsZW5hbWUgU291cmNlIGZpbGUgcGF0aC5cbiAqIEBwYXJhbSBleHBvcnRlZE5hbWUgUHVibGljIG5hbWUgZXhwb3NlZCBieSB0aGUgbW9kdWxlIGV4cG9ydCBsaXN0LlxuICogQHJldHVybnMgU3ltYm9sIHdoZW4gZm91bmQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3ltYm9sID0gZ2V0RXhwb3J0ZWRTeW1ib2wocHJvZ3JhbSwgc291cmNlRmlsZW5hbWUsIFwiZmVhdHVyZVwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRFeHBvcnRlZFN5bWJvbCA9IChcbiAgcHJvZ3JhbTogdHMuUHJvZ3JhbSxcbiAgc291cmNlRmlsZW5hbWU6IHN0cmluZyxcbiAgZXhwb3J0ZWROYW1lOiBzdHJpbmcsXG4pOiB0cy5TeW1ib2wgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBjaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBzb3VyY2VGaWxlID0gcHJvZ3JhbVxuICAgIC5nZXRTb3VyY2VGaWxlcygpXG4gICAgLmZpbmQoXG4gICAgICAoZmlsZSkgPT5cbiAgICAgICAgdG9Db21wYXJhYmxlQWJzb2x1dGVQYXRoKGZpbGUuZmlsZU5hbWUpID09PVxuICAgICAgICB0b0NvbXBhcmFibGVBYnNvbHV0ZVBhdGgoc291cmNlRmlsZW5hbWUpLFxuICAgICk7XG5cbiAgaWYgKHNvdXJjZUZpbGUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG5cbiAgaWYgKG1vZHVsZVN5bWJvbCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IGV4cG9ydGVkU3ltYm9sID0gY2hlY2tlclxuICAgIC5nZXRFeHBvcnRzT2ZNb2R1bGUobW9kdWxlU3ltYm9sKVxuICAgIC5maW5kKChzeW1ib2wpID0+IHN5bWJvbC5nZXROYW1lKCkgPT09IGV4cG9ydGVkTmFtZSk7XG5cbiAgaWYgKGV4cG9ydGVkU3ltYm9sID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVDYW5vbmljYWxTeW1ib2woZXhwb3J0ZWRTeW1ib2wsIGNoZWNrZXIpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBvbmUgc291cmNlIGZpbGUgZXhwb3J0cyB0aGUgdGFyZ2V0IHN5bWJvbC5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlIFNvdXJjZSBmaWxlIHRoYXQgbWF5IGV4cG9zZSB0aGUgc3ltYm9sLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCBjaGVja2VyLlxuICogQHBhcmFtIHRhcmdldFN5bWJvbCBTeW1ib2wgYmVpbmcgY2xhc3NpZmllZC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiBvbmUgbW9kdWxlIGV4cG9ydCByZXNvbHZlcyB0byB0aGUgdGFyZ2V0IHN5bWJvbC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBleHBvc2VkID0gc291cmNlRmlsZUV4cG9ydHNTeW1ib2woc291cmNlRmlsZSwgY2hlY2tlciwgdGFyZ2V0U3ltYm9sKTtcbiAqIGBgYFxuICovXG5jb25zdCBzb3VyY2VGaWxlRXhwb3J0c1N5bWJvbCA9IChcbiAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIHRhcmdldFN5bWJvbDogdHMuU3ltYm9sLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihzb3VyY2VGaWxlKTtcblxuICBpZiAobW9kdWxlU3ltYm9sID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGV4cG9ydGVkU3ltYm9sIG9mIGNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCkpIHtcbiAgICBjb25zdCByZXNvbHZlZFN5bWJvbCA9IHJlc29sdmVDYW5vbmljYWxTeW1ib2woZXhwb3J0ZWRTeW1ib2wsIGNoZWNrZXIpO1xuXG4gICAgaWYgKGlzU2FtZVN5bWJvbChyZXNvbHZlZFN5bWJvbCwgdGFyZ2V0U3ltYm9sKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IHtcbiAgZ2V0RXhwb3J0ZWRTeW1ib2wsXG4gIGlzU2FtZVN5bWJvbCxcbiAgcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbCxcbiAgc291cmNlRmlsZUV4cG9ydHNTeW1ib2wsXG4gIHRvQ29tcGFyYWJsZUFic29sdXRlUGF0aCxcbn07XG4iXX0=
@@ -1,26 +1,5 @@
1
- import type { AST, Rule } from "eslint";
2
1
  import * as ts from "typescript";
3
2
  import type { ExportedElement, ExportUsage, NoUnusedExportsState } from "./types.js";
4
- /**
5
- * Resolves TypeScript parser services program when available.
6
- * @param context Rule context.
7
- * @returns TypeScript program when available.
8
- * @example
9
- * ```typescript
10
- * const program = getTypeScriptProgram(context);
11
- * ```
12
- */
13
- declare const getTypeScriptProgram: (context: Rule.RuleContext) => ts.Program | undefined;
14
- /**
15
- * Collects exported elements from one program body.
16
- * @param body Program body statements.
17
- * @returns Exported elements in declaration order.
18
- * @example
19
- * ```typescript
20
- * const exported = collectExportedElements(program.body);
21
- * ```
22
- */
23
- declare const collectExportedElements: (body: AST.Program["body"]) => ExportedElement[];
24
3
  /**
25
4
  * Collects concrete usages of one exported element across the program.
26
5
  * @param program TypeScript program.
@@ -45,5 +24,5 @@ declare const collectCrossFileUsages: (program: ts.Program, sourceFilename: stri
45
24
  * ```
46
25
  */
47
26
  declare const classifyExportUsage: (usages: ExportUsage[]) => "production" | "test-only" | "unused";
48
- export { classifyExportUsage, collectCrossFileUsages, collectExportedElements, getTypeScriptProgram, };
49
- //# sourceMappingURL=no-unused-exports-utilities.d.ts.map
27
+ export { classifyExportUsage, collectCrossFileUsages };
28
+ //# sourceMappingURL=no-unused-exports-usage-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-unused-exports-usage-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-exports/no-unused-exports-usage-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAuEjB;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,sBAAsB,GAC1B,SAAS,EAAE,CAAC,OAAO,EACnB,gBAAgB,MAAM,EACtB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,iBAAiB,eAAe,KAC/B,WAAW,EAoDb,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,mBAAmB,GACvB,QAAQ,WAAW,EAAE,KACpB,YAAY,GAAG,WAAW,GAAG,QAY/B,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,106 @@
1
+ import path from "node:path";
2
+ import * as ts from "typescript";
3
+ import { isConcreteUsageIdentifier } from "./no-unused-exports-identifier-utilities.js";
4
+ import { isTestFile } from "./no-unused-exports-options.js";
5
+ import { collectPublicApiExposureUsages } from "./no-unused-exports-public-api-usage-utilities.js";
6
+ import { getExportedSymbol, isSameSymbol, resolveCanonicalSymbol, toComparableAbsolutePath, } from "./no-unused-exports-symbol-utilities.js";
7
+ /**
8
+ * Appends concrete usages from one source file into the accumulator.
9
+ * @param sourceFile Source file to scan.
10
+ * @param checker TypeScript checker.
11
+ * @param targetSymbol Export symbol being classified.
12
+ * @param exportedElement Export metadata.
13
+ * @param consumerIsTestFile Whether source file is a test file.
14
+ * @param usages Mutable usage accumulator.
15
+ * @example
16
+ * ```typescript
17
+ * collectConcreteUsagesFromSourceFile(sourceFile, checker, targetSymbolKey, exportedElement, false, usages);
18
+ * ```
19
+ */
20
+ const collectConcreteUsagesFromSourceFile = (sourceFile, checker, targetSymbol, exportedElement, consumerIsTestFile, usages) => {
21
+ const visitNode = (node) => {
22
+ if (!ts.isIdentifier(node)) {
23
+ ts.forEachChild(node, visitNode);
24
+ return;
25
+ }
26
+ if (!isConcreteUsageIdentifier(node, exportedElement.exportKind)) {
27
+ ts.forEachChild(node, visitNode);
28
+ return;
29
+ }
30
+ const isShorthandName = ts.isShorthandPropertyAssignment(node.parent) &&
31
+ node.parent.name === node;
32
+ const candidateSymbol = isShorthandName
33
+ ? checker.getShorthandAssignmentValueSymbol(node.parent)
34
+ : checker.getSymbolAtLocation(node);
35
+ if (candidateSymbol === void 0) {
36
+ ts.forEachChild(node, visitNode);
37
+ return;
38
+ }
39
+ const resolvedSymbol = resolveCanonicalSymbol(candidateSymbol, checker);
40
+ if (!isSameSymbol(resolvedSymbol, targetSymbol)) {
41
+ ts.forEachChild(node, visitNode);
42
+ return;
43
+ }
44
+ usages.push({ isTestFile: consumerIsTestFile });
45
+ ts.forEachChild(node, visitNode);
46
+ };
47
+ visitNode(sourceFile);
48
+ };
49
+ /**
50
+ * Collects concrete usages of one exported element across the program.
51
+ * @param program TypeScript program.
52
+ * @param sourceFilename Source filename where export is defined.
53
+ * @param state Normalized rule options.
54
+ * @param repoRoot Absolute repository root used for test-file classification.
55
+ * @param exportedElement Exported element to classify.
56
+ * @returns Concrete usages for the exported element.
57
+ * @example
58
+ * ```typescript
59
+ * const usages = collectCrossFileUsages(program, "/repo/src/feature.ts", state, "/repo", exportedElement);
60
+ * ```
61
+ */
62
+ const collectCrossFileUsages = (program, sourceFilename, state, repoRoot, exportedElement) => {
63
+ const checker = program.getTypeChecker();
64
+ const targetSymbol = getExportedSymbol(program, sourceFilename, exportedElement.exportedName);
65
+ if (targetSymbol === void 0) {
66
+ return [];
67
+ }
68
+ const normalizedSourceFilename = toComparableAbsolutePath(sourceFilename);
69
+ const normalizedRepoRoot = path.resolve(repoRoot);
70
+ const usages = collectPublicApiExposureUsages(program, sourceFilename, state, repoRoot, targetSymbol);
71
+ for (const sourceFile of program.getSourceFiles()) {
72
+ if (sourceFile.isDeclarationFile) {
73
+ continue;
74
+ }
75
+ const consumerFilename = path.resolve(sourceFile.fileName);
76
+ const normalizedConsumerFilename = toComparableAbsolutePath(consumerFilename);
77
+ if (normalizedConsumerFilename === normalizedSourceFilename) {
78
+ continue;
79
+ }
80
+ const isConsumerTestFile = isTestFile(consumerFilename, state, normalizedRepoRoot);
81
+ collectConcreteUsagesFromSourceFile(sourceFile, checker, targetSymbol, exportedElement, isConsumerTestFile, usages);
82
+ }
83
+ return usages;
84
+ };
85
+ /**
86
+ * Classifies one exported name based on cross-file usages.
87
+ * @param usages Collected usages.
88
+ * @returns Classification label.
89
+ * @example
90
+ * ```typescript
91
+ * const classification = classifyExportUsage("feature", usages);
92
+ * ```
93
+ */
94
+ const classifyExportUsage = (usages) => {
95
+ if (usages.length === 0) {
96
+ return "unused";
97
+ }
98
+ for (const usage of usages) {
99
+ if (!usage.isTestFile) {
100
+ return "production";
101
+ }
102
+ }
103
+ return "test-only";
104
+ };
105
+ export { classifyExportUsage, collectCrossFileUsages };
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLWV4cG9ydHMtdXNhZ2UtdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLWV4cG9ydHMvbm8tdW51c2VkLWV4cG9ydHMtdXNhZ2UtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQVFqQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDaEcsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLHdCQUF3QixHQUN6QixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sbUNBQW1DLEdBQUcsQ0FDMUMsVUFBeUIsRUFDekIsT0FBdUIsRUFDdkIsWUFBdUIsRUFDdkIsZUFBZ0MsRUFDaEMsa0JBQTJCLEVBQzNCLE1BQXFCLEVBQ2YsRUFBRTtJQUNSLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBYSxFQUFRLEVBQUU7UUFDeEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFD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a0IsRUFBRTtJQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuaW1wb3J0IHR5cGUge1xuICBFeHBvcnRlZEVsZW1lbnQsXG4gIEV4cG9ydFVzYWdlLFxuICBOb1VudXNlZEV4cG9ydHNTdGF0ZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHsgaXNDb25jcmV0ZVVzYWdlSWRlbnRpZmllciB9IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLWlkZW50aWZpZXItdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBpc1Rlc3RGaWxlIH0gZnJvbSBcIi4vbm8tdW51c2VkLWV4cG9ydHMtb3B0aW9uc1wiO1xuaW1wb3J0IHsgY29sbGVjdFB1YmxpY0FwaUV4cG9zdXJlVXNhZ2VzIH0gZnJvbSBcIi4vbm8tdW51c2VkLWV4cG9ydHMtcHVibGljLWFwaS11c2FnZS11dGlsaXRpZXNcIjtcbmltcG9ydCB7XG4gIGdldEV4cG9ydGVkU3ltYm9sLFxuICBpc1NhbWVTeW1ib2wsXG4gIHJlc29sdmVDYW5vbmljYWxTeW1ib2wsXG4gIHRvQ29tcGFyYWJsZUFic29sdXRlUGF0aCxcbn0gZnJvbSBcIi4vbm8tdW51c2VkLWV4cG9ydHMtc3ltYm9sLXV0aWxpdGllc1wiO1xuXG4vKipcbiAqIEFwcGVuZHMgY29uY3JldGUgdXNhZ2VzIGZyb20gb25lIHNvdXJjZSBmaWxlIGludG8gdGhlIGFjY3VtdWxhdG9yLlxuICogQHBhcmFtIHNvdXJjZUZpbGUgU291cmNlIGZpbGUgdG8gc2Nhbi5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgY2hlY2tlci5cbiAqIEBwYXJhbSB0YXJnZXRTeW1ib2wgRXhwb3J0IHN5bWJvbCBiZWluZyBjbGFzc2lmaWVkLlxuICogQHBhcmFtIGV4cG9ydGVkRWxlbWVudCBFeHBvcnQgbWV0YWRhdGEuXG4gKiBAcGFyYW0gY29uc3VtZXJJc1Rlc3RGaWxlIFdoZXRoZXIgc291cmNlIGZpbGUgaXMgYSB0ZXN0IGZpbGUuXG4gKiBAcGFyYW0gdXNhZ2VzIE11dGFibGUgdXNhZ2UgYWNjdW11bGF0b3IuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29sbGVjdENvbmNyZXRlVXNhZ2VzRnJvbVNvdXJjZUZpbGUoc291cmNlRmlsZSwgY2hlY2tlciwgdGFyZ2V0U3ltYm9sS2V5LCBleHBvcnRlZEVsZW1lbnQsIGZhbHNlLCB1c2FnZXMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbGxlY3RDb25jcmV0ZVVzYWdlc0Zyb21Tb3VyY2VGaWxlID0gKFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgdGFyZ2V0U3ltYm9sOiB0cy5TeW1ib2wsXG4gIGV4cG9ydGVkRWxlbWVudDogRXhwb3J0ZWRFbGVtZW50LFxuICBjb25zdW1lcklzVGVzdEZpbGU6IGJvb2xlYW4sXG4gIHVzYWdlczogRXhwb3J0VXNhZ2VbXSxcbik6IHZvaWQgPT4ge1xuICBjb25zdCB2aXNpdE5vZGUgPSAobm9kZTogdHMuTm9kZSk6IHZvaWQgPT4ge1xuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5vZGUpKSB7XG4gICAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ29uY3JldGVVc2FnZUlkZW50aWZpZXIobm9kZSwgZXhwb3J0ZWRFbGVtZW50LmV4cG9ydEtpbmQpKSB7XG4gICAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1Nob3J0aGFuZE5hbWUgPVxuICAgICAgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQobm9kZS5wYXJlbnQpICYmXG4gICAgICBub2RlLnBhcmVudC5uYW1lID09PSBub2RlO1xuXG4gICAgY29uc3QgY2FuZGlkYXRlU3ltYm9sID0gaXNTaG9ydGhhbmROYW1lXG4gICAgICA/IGNoZWNrZXIuZ2V0U2hvcnRoYW5kQXNzaWdubWVudFZhbHVlU3ltYm9sKG5vZGUucGFyZW50KVxuICAgICAgOiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG5cbiAgICBpZiAoY2FuZGlkYXRlU3ltYm9sID09PSB2b2lkIDApIHtcbiAgICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkU3ltYm9sID0gcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbChjYW5kaWRhdGVTeW1ib2wsIGNoZWNrZXIpO1xuXG4gICAgaWYgKCFpc1NhbWVTeW1ib2wocmVzb2x2ZWRTeW1ib2wsIHRhcmdldFN5bWJvbCkpIHtcbiAgICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzYWdlcy5wdXNoKHsgaXNUZXN0RmlsZTogY29uc3VtZXJJc1Rlc3RGaWxlIH0pO1xuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICB9O1xuXG4gIHZpc2l0Tm9kZShzb3VyY2VGaWxlKTtcbn07XG5cbi8qKlxuICogQ29sbGVjdHMgY29uY3JldGUgdXNhZ2VzIG9mIG9uZSBleHBvcnRlZCBlbGVtZW50IGFjcm9zcyB0aGUgcHJvZ3JhbS5cbiAqIEBwYXJhbSBwcm9ncmFtIFR5cGVTY3JpcHQgcHJvZ3JhbS5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlbmFtZSBTb3VyY2UgZmlsZW5hbWUgd2hlcmUgZXhwb3J0IGlzIGRlZmluZWQuXG4gKiBAcGFyYW0gc3RhdGUgTm9ybWFsaXplZCBydWxlIG9wdGlvbnMuXG4gKiBAcGFyYW0gcmVwb1Jvb3QgQWJzb2x1dGUgcmVwb3NpdG9yeSByb290IHVzZWQgZm9yIHRlc3QtZmlsZSBjbGFzc2lmaWNhdGlvbi5cbiAqIEBwYXJhbSBleHBvcnRlZEVsZW1lbnQgRXhwb3J0ZWQgZWxlbWVudCB0byBjbGFzc2lmeS5cbiAqIEByZXR1cm5zIENvbmNyZXRlIHVzYWdlcyBmb3IgdGhlIGV4cG9ydGVkIGVsZW1lbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdXNhZ2VzID0gY29sbGVjdENyb3NzRmlsZVVzYWdlcyhwcm9ncmFtLCBcIi9yZXBvL3NyYy9mZWF0dXJlLnRzXCIsIHN0YXRlLCBcIi9yZXBvXCIsIGV4cG9ydGVkRWxlbWVudCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgY29sbGVjdENyb3NzRmlsZVVzYWdlcyA9IChcbiAgcHJvZ3JhbTogdHMuUHJvZ3JhbSxcbiAgc291cmNlRmlsZW5hbWU6IHN0cmluZyxcbiAgc3RhdGU6IE5vVW51c2VkRXhwb3J0c1N0YXRlLFxuICByZXBvUm9vdDogc3RyaW5nLFxuICBleHBvcnRlZEVsZW1lbnQ6IEV4cG9ydGVkRWxlbWVudCxcbik6IEV4cG9ydFVzYWdlW10gPT4ge1xuICBjb25zdCBjaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCB0YXJnZXRTeW1ib2wgPSBnZXRFeHBvcnRlZFN5bWJvbChcbiAgICBwcm9ncmFtLFxuICAgIHNvdXJjZUZpbGVuYW1lLFxuICAgIGV4cG9ydGVkRWxlbWVudC5leHBvcnRlZE5hbWUsXG4gICk7XG5cbiAgaWYgKHRhcmdldFN5bWJvbCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZUZpbGVuYW1lID0gdG9Db21wYXJhYmxlQWJzb2x1dGVQYXRoKHNvdXJjZUZpbGVuYW1lKTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcG9Sb290ID0gcGF0aC5yZXNvbHZlKHJlcG9Sb290KTtcbiAgY29uc3QgdXNhZ2VzOiBFeHBvcnRVc2FnZVtdID0gY29sbGVjdFB1YmxpY0FwaUV4cG9zdXJlVXNhZ2VzKFxuICAgIHByb2dyYW0sXG4gICAgc291cmNlRmlsZW5hbWUsXG4gICAgc3RhdGUsXG4gICAgcmVwb1Jvb3QsXG4gICAgdGFyZ2V0U3ltYm9sLFxuICApO1xuXG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBpZiAoc291cmNlRmlsZS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3VtZXJGaWxlbmFtZSA9IHBhdGgucmVzb2x2ZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICBjb25zdCBub3JtYWxpemVkQ29uc3VtZXJGaWxlbmFtZSA9XG4gICAgICB0b0NvbXBhcmFibGVBYnNvbHV0ZVBhdGgoY29uc3VtZXJGaWxlbmFtZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZENvbnN1bWVyRmlsZW5hbWUgPT09IG5vcm1hbGl6ZWRTb3VyY2VGaWxlbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNDb25zdW1lclRlc3RGaWxlID0gaXNUZXN0RmlsZShcbiAgICAgIGNvbnN1bWVyRmlsZW5hbWUsXG4gICAgICBzdGF0ZSxcbiAgICAgIG5vcm1hbGl6ZWRSZXBvUm9vdCxcbiAgICApO1xuXG4gICAgY29sbGVjdENvbmNyZXRlVXNhZ2VzRnJvbVNvdXJjZUZpbGUoXG4gICAgICBzb3VyY2VGaWxlLFxuICAgICAgY2hlY2tlcixcbiAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgIGV4cG9ydGVkRWxlbWVudCxcbiAgICAgIGlzQ29uc3VtZXJUZXN0RmlsZSxcbiAgICAgIHVzYWdlcyxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVzYWdlcztcbn07XG5cbi8qKlxuICogQ2xhc3NpZmllcyBvbmUgZXhwb3J0ZWQgbmFtZSBiYXNlZCBvbiBjcm9zcy1maWxlIHVzYWdlcy5cbiAqIEBwYXJhbSB1c2FnZXMgQ29sbGVjdGVkIHVzYWdlcy5cbiAqIEByZXR1cm5zIENsYXNzaWZpY2F0aW9uIGxhYmVsLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlFeHBvcnRVc2FnZShcImZlYXR1cmVcIiwgdXNhZ2VzKTtcbiAqIGBgYFxuICovXG5jb25zdCBjbGFzc2lmeUV4cG9ydFVzYWdlID0gKFxuICB1c2FnZXM6IEV4cG9ydFVzYWdlW10sXG4pOiBcInByb2R1Y3Rpb25cIiB8IFwidGVzdC1vbmx5XCIgfCBcInVudXNlZFwiID0+IHtcbiAgaWYgKHVzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCJ1bnVzZWRcIjtcbiAgfVxuXG4gIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgaWYgKCF1c2FnZS5pc1Rlc3RGaWxlKSB7XG4gICAgICByZXR1cm4gXCJwcm9kdWN0aW9uXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFwidGVzdC1vbmx5XCI7XG59O1xuXG5leHBvcnQgeyBjbGFzc2lmeUV4cG9ydFVzYWdlLCBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzIH07XG4iXX0=
@@ -1,6 +1,8 @@
1
1
  import path from "node:path";
2
+ import { collectExportedElements } from "./no-unused-exports-declaration-utilities.js";
3
+ import { getTypeScriptProgram } from "./no-unused-exports-identifier-utilities.js";
2
4
  import { DEFAULT_PUBLIC_API_FILES, DEFAULT_TEST_FILE_PATTERNS, getOptions, isLintableFilename, isPublicApiFile, } from "./no-unused-exports-options.js";
3
- import { classifyExportUsage, collectCrossFileUsages, collectExportedElements, getTypeScriptProgram, } from "./no-unused-exports-utilities.js";
5
+ import { classifyExportUsage, collectCrossFileUsages, } from "./no-unused-exports-usage-utilities.js";
4
6
  /** ESLint rule flagging exports unused in production code. */
5
7
  const noUnusedExportsRule = {
6
8
  create(context) {
@@ -79,4 +81,4 @@ const noUnusedExportsRule = {
79
81
  },
80
82
  };
81
83
  export { noUnusedExportsRule };
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1leHBvcnRzL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRTdCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsZUFBZSxHQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixvQkFBb0IsR0FDckIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2Qyw4REFBOEQ7QUFDOUQsTUFBTSxtQkFBbUIsR0FBb0I7SUFDM0MsTUFBTSxDQUFDLE9BQXlCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUVsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5QyxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUVoRSxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sQ0FBQyxJQUFJO2dCQUNWLE1BQU0sZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsT0FBTztnQkFDVCxDQUFDO2dCQUVELEtBQUssTUFBTSxPQUFPLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FDN0Msc0JBQXNCLENBQ3BCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsS0FBSyxFQUNMLFdBQVcsRUFDWCxPQUFPLENBQ1IsQ0FDRixDQUFDO29CQUVGLElBQUksbUJBQW1CLEtBQUssWUFBWSxFQUFFLENBQUM7d0JBQ3pDLFNBQVM7b0JBQ1gsQ0FBQztvQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNiLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFO3dCQUM1QyxTQUFTLEVBQ1AsbUJBQW1CLEtBQUssV0FBVzs0QkFDakMsQ0FBQyxDQUFDLGlCQUFpQjs0QkFDbkIsQ0FBQyxDQUFDLGNBQWM7d0JBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtxQkFDbkIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLEVBQUU7UUFDSixjQUFjLEVBQUU7WUFDZDtnQkFDRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLHdCQUF3QixDQUFDO2dCQUM3QyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7YUFDbEQ7U0FDRjtRQUNELElBQUksRUFBRTtZQUNKLFdBQVcsRUFDVCxrRUFBa0U7WUFDcEUsV0FBVyxFQUFFLEtBQUs7WUFDbEIsR0FBRyxFQUFFLG9GQUFvRjtTQUMxRjtRQUNELFFBQVEsRUFBRTtZQUNSLFlBQVksRUFDVixpSEFBaUg7WUFDbkgsZUFBZSxFQUNiLGdIQUFnSDtTQUNuSDtRQUNELE1BQU0sRUFBRTtZQUNOO2dCQUNFLG9CQUFvQixFQUFFLEtBQUs7Z0JBQzNCLFVBQVUsRUFBRTtvQkFDVixjQUFjLEVBQUU7d0JBQ2QsV0FBVyxFQUFFLG9EQUFvRDt3QkFDakUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTt3QkFDekIsUUFBUSxFQUFFLENBQUM7d0JBQ1gsSUFBSSxFQUFFLE9BQU87cUJBQ2Q7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLFdBQVcsRUFDVCxnRUFBZ0U7d0JBQ2xFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7d0JBQ3pCLFFBQVEsRUFBRSxDQUFDO3dCQUNYLElBQUksRUFBRSxPQUFPO3FCQUNkO2lCQUNGO2dCQUNELElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRjtRQUNELElBQUksRUFBRSxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfUFVCTElDX0FQSV9GSUxFUyxcbiAgREVGQVVMVF9URVNUX0ZJTEVfUEFUVEVSTlMsXG4gIGdldE9wdGlvbnMsXG4gIGlzTGludGFibGVGaWxlbmFtZSxcbiAgaXNQdWJsaWNBcGlGaWxlLFxufSBmcm9tIFwiLi9uby11bnVzZWQtZXhwb3J0cy1vcHRpb25zXCI7XG5pbXBvcnQge1xuICBjbGFzc2lmeUV4cG9ydFVzYWdlLFxuICBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzLFxuICBjb2xsZWN0RXhwb3J0ZWRFbGVtZW50cyxcbiAgZ2V0VHlwZVNjcmlwdFByb2dyYW0sXG59IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLXV0aWxpdGllc1wiO1xuXG4vKiogRVNMaW50IHJ1bGUgZmxhZ2dpbmcgZXhwb3J0cyB1bnVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLiAqL1xuY29uc3Qgbm9VbnVzZWRFeHBvcnRzUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldE9wdGlvbnMoY29udGV4dC5vcHRpb25zKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGNvbnRleHQuZmlsZW5hbWU7XG5cbiAgICBpZiAoIWlzTGludGFibGVGaWxlbmFtZShmaWxlbmFtZSkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmFtID0gZ2V0VHlwZVNjcmlwdFByb2dyYW0oY29udGV4dCk7XG5cbiAgICBpZiAocHJvZ3JhbSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBwYXRoLnJlc29sdmUocHJvZ3JhbS5nZXRDdXJyZW50RGlyZWN0b3J5KCkpO1xuXG4gICAgaWYgKGlzUHVibGljQXBpRmlsZShmaWxlbmFtZSwgc3RhdGUsIHByb2plY3RSb290KSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXhwb3J0ZWRFbGVtZW50cyA9IGNvbGxlY3RFeHBvcnRlZEVsZW1lbnRzKG5vZGUuYm9keSk7XG5cbiAgICAgICAgaWYgKGV4cG9ydGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGV4cG9ydGVkRWxlbWVudHMpIHtcbiAgICAgICAgICBjb25zdCB1c2FnZUNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlFeHBvcnRVc2FnZShcbiAgICAgICAgICAgIGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXMoXG4gICAgICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodXNhZ2VDbGFzc2lmaWNhdGlvbiA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHsgZXhwb3J0ZWROYW1lOiBlbGVtZW50LmV4cG9ydGVkTmFtZSB9LFxuICAgICAgICAgICAgbWVzc2FnZUlkOlxuICAgICAgICAgICAgICB1c2FnZUNsYXNzaWZpY2F0aW9uID09PSBcInRlc3Qtb25seVwiXG4gICAgICAgICAgICAgICAgPyBcInVzZWRPbmx5SW5UZXN0c1wiXG4gICAgICAgICAgICAgICAgOiBcInVudXNlZEV4cG9ydFwiLFxuICAgICAgICAgICAgbm9kZTogZWxlbWVudC5ub2RlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkZWZhdWx0T3B0aW9uczogW1xuICAgICAge1xuICAgICAgICBwdWJsaWNBcGlGaWxlczogWy4uLkRFRkFVTFRfUFVCTElDX0FQSV9GSUxFU10sXG4gICAgICAgIHRlc3RGaWxlUGF0dGVybnM6IFsuLi5ERUZBVUxUX1RFU1RfRklMRV9QQVRURVJOU10sXG4gICAgICB9LFxuICAgIF0sXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGlzYWxsb3cgZXhwb3J0cyB0aGF0IGFyZSB1bnVzZWQgb3IgY29uc3VtZWQgb25seSBieSB0ZXN0IGZpbGVzLlwiLFxuICAgICAgcmVjb21tZW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJsb3RpL2VzbGludC1wbHVnaW4vYmxvYi9tYWluL2RvY3MvcnVsZXMvbm8tdW51c2VkLWV4cG9ydHMubWRcIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICB1bnVzZWRFeHBvcnQ6XG4gICAgICAgIFwiRXhwb3J0ICd7e2V4cG9ydGVkTmFtZX19JyBpcyBuZXZlciBjb25zdW1lZCBieSBhbnkgZmlsZSBpbiB0aGUgcHJvamVjdDsgbWFrZSBpdCBwcml2YXRlIGJ5IHJlbW92aW5nIHRoZSBleHBvcnQuXCIsXG4gICAgICB1c2VkT25seUluVGVzdHM6XG4gICAgICAgIFwiRXhwb3J0ICd7e2V4cG9ydGVkTmFtZX19JyBpcyBjb25zdW1lZCBvbmx5IGJ5IHRlc3QgZmlsZXM7IG1vdmUgaXQgdG8gdGhlIHRlc3QgZmlsZSBvciBhIHRlc3QgdXRpbGl0aWVzIGZvbGRlci5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwdWJsaWNBcGlGaWxlczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsZSBnbG9icyB0aGF0IGRlZmluZSBwdWJsaWMgQVBJIGV4cG9ydCBzdXJmYWNlcy5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGVzdEZpbGVQYXR0ZXJuczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiRmlsZSBnbG9icyB0cmVhdGVkIGFzIHRlc3RzIHdoZW4gY2xhc3NpZnlpbmcgZXhwb3J0IGNvbnN1bWVycy5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdHlwZTogXCJwcm9ibGVtXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBub1VudXNlZEV4cG9ydHNSdWxlIH07XG4iXX0=
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1leHBvcnRzL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRTdCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsZUFBZSxHQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsOERBQThEO0FBQzlELE1BQU0sbUJBQW1CLEdBQW9CO0lBQzNDLE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFFbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUMsSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFFaEUsSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2xELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU87WUFDTCxPQUFPLENBQUMsSUFBSTtnQkFDVixNQUFNLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFNUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ2xDLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQzdDLHNCQUFzQixDQUNwQixPQUFPLEVBQ1AsUUFBUSxFQUNSLEtBQUssRUFDTCxXQUFXLEVBQ1gsT0FBTyxDQUNSLENBQ0YsQ0FBQztvQkFFRixJQUFJLG1CQUFtQixLQUFLLFlBQVksRUFBRSxDQUFDO3dCQUN6QyxTQUFTO29CQUNYLENBQUM7b0JBRUQsT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDYixJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRTt3QkFDNUMsU0FBUyxFQUNQLG1CQUFtQixLQUFLLFdBQVc7NEJBQ2pDLENBQUMsQ0FBQyxpQkFBaUI7NEJBQ25CLENBQUMsQ0FBQyxjQUFjO3dCQUNwQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7cUJBQ25CLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osY0FBYyxFQUFFO1lBQ2Q7Z0JBQ0UsY0FBYyxFQUFFLENBQUMsR0FBRyx3QkFBd0IsQ0FBQztnQkFDN0MsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO2FBQ2xEO1NBQ0Y7UUFDRCxJQUFJLEVBQUU7WUFDSixXQUFXLEVBQ1Qsa0VBQWtFO1lBQ3BFLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLEdBQUcsRUFBRSxvRkFBb0Y7U0FDMUY7UUFDRCxRQUFRLEVBQUU7WUFDUixZQUFZLEVBQ1YsaUhBQWlIO1lBQ25ILGVBQWUsRUFDYixnSEFBZ0g7U0FDbkg7UUFDRCxNQUFNLEVBQUU7WUFDTjtnQkFDRSxvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixVQUFVLEVBQUU7b0JBQ1YsY0FBYyxFQUFFO3dCQUNkLFdBQVcsRUFBRSxvREFBb0Q7d0JBQ2pFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7d0JBQ3pCLFFBQVEsRUFBRSxDQUFDO3dCQUNYLElBQUksRUFBRSxPQUFPO3FCQUNkO29CQUNELGdCQUFnQixFQUFFO3dCQUNoQixXQUFXLEVBQ1QsZ0VBQWdFO3dCQUNsRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO3dCQUN6QixRQUFRLEVBQUUsQ0FBQzt3QkFDWCxJQUFJLEVBQUUsT0FBTztxQkFDZDtpQkFDRjtnQkFDRCxJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0Y7UUFDRCxJQUFJLEVBQUUsU0FBUztLQUNoQjtDQUNGLENBQUM7QUFFRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgeyBjb2xsZWN0RXhwb3J0ZWRFbGVtZW50cyB9IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLWRlY2xhcmF0aW9uLXV0aWxpdGllc1wiO1xuaW1wb3J0IHsgZ2V0VHlwZVNjcmlwdFByb2dyYW0gfSBmcm9tIFwiLi9uby11bnVzZWQtZXhwb3J0cy1pZGVudGlmaWVyLXV0aWxpdGllc1wiO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9QVUJMSUNfQVBJX0ZJTEVTLFxuICBERUZBVUxUX1RFU1RfRklMRV9QQVRURVJOUyxcbiAgZ2V0T3B0aW9ucyxcbiAgaXNMaW50YWJsZUZpbGVuYW1lLFxuICBpc1B1YmxpY0FwaUZpbGUsXG59IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLW9wdGlvbnNcIjtcbmltcG9ydCB7XG4gIGNsYXNzaWZ5RXhwb3J0VXNhZ2UsXG4gIGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXMsXG59IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLXVzYWdlLXV0aWxpdGllc1wiO1xuXG4vKiogRVNMaW50IHJ1bGUgZmxhZ2dpbmcgZXhwb3J0cyB1bnVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLiAqL1xuY29uc3Qgbm9VbnVzZWRFeHBvcnRzUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldE9wdGlvbnMoY29udGV4dC5vcHRpb25zKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGNvbnRleHQuZmlsZW5hbWU7XG5cbiAgICBpZiAoIWlzTGludGFibGVGaWxlbmFtZShmaWxlbmFtZSkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmFtID0gZ2V0VHlwZVNjcmlwdFByb2dyYW0oY29udGV4dCk7XG5cbiAgICBpZiAocHJvZ3JhbSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBwYXRoLnJlc29sdmUocHJvZ3JhbS5nZXRDdXJyZW50RGlyZWN0b3J5KCkpO1xuXG4gICAgaWYgKGlzUHVibGljQXBpRmlsZShmaWxlbmFtZSwgc3RhdGUsIHByb2plY3RSb290KSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXhwb3J0ZWRFbGVtZW50cyA9IGNvbGxlY3RFeHBvcnRlZEVsZW1lbnRzKG5vZGUuYm9keSk7XG5cbiAgICAgICAgaWYgKGV4cG9ydGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGV4cG9ydGVkRWxlbWVudHMpIHtcbiAgICAgICAgICBjb25zdCB1c2FnZUNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlFeHBvcnRVc2FnZShcbiAgICAgICAgICAgIGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXMoXG4gICAgICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodXNhZ2VDbGFzc2lmaWNhdGlvbiA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHsgZXhwb3J0ZWROYW1lOiBlbGVtZW50LmV4cG9ydGVkTmFtZSB9LFxuICAgICAgICAgICAgbWVzc2FnZUlkOlxuICAgICAgICAgICAgICB1c2FnZUNsYXNzaWZpY2F0aW9uID09PSBcInRlc3Qtb25seVwiXG4gICAgICAgICAgICAgICAgPyBcInVzZWRPbmx5SW5UZXN0c1wiXG4gICAgICAgICAgICAgICAgOiBcInVudXNlZEV4cG9ydFwiLFxuICAgICAgICAgICAgbm9kZTogZWxlbWVudC5ub2RlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkZWZhdWx0T3B0aW9uczogW1xuICAgICAge1xuICAgICAgICBwdWJsaWNBcGlGaWxlczogWy4uLkRFRkFVTFRfUFVCTElDX0FQSV9GSUxFU10sXG4gICAgICAgIHRlc3RGaWxlUGF0dGVybnM6IFsuLi5ERUZBVUxUX1RFU1RfRklMRV9QQVRURVJOU10sXG4gICAgICB9LFxuICAgIF0sXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGlzYWxsb3cgZXhwb3J0cyB0aGF0IGFyZSB1bnVzZWQgb3IgY29uc3VtZWQgb25seSBieSB0ZXN0IGZpbGVzLlwiLFxuICAgICAgcmVjb21tZW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJsb3RpL2VzbGludC1wbHVnaW4vYmxvYi9tYWluL2RvY3MvcnVsZXMvbm8tdW51c2VkLWV4cG9ydHMubWRcIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICB1bnVzZWRFeHBvcnQ6XG4gICAgICAgIFwiRXhwb3J0ICd7e2V4cG9ydGVkTmFtZX19JyBpcyBuZXZlciBjb25zdW1lZCBieSBhbnkgZmlsZSBpbiB0aGUgcHJvamVjdDsgbWFrZSBpdCBwcml2YXRlIGJ5IHJlbW92aW5nIHRoZSBleHBvcnQuXCIsXG4gICAgICB1c2VkT25seUluVGVzdHM6XG4gICAgICAgIFwiRXhwb3J0ICd7e2V4cG9ydGVkTmFtZX19JyBpcyBjb25zdW1lZCBvbmx5IGJ5IHRlc3QgZmlsZXM7IG1vdmUgaXQgdG8gdGhlIHRlc3QgZmlsZSBvciBhIHRlc3QgdXRpbGl0aWVzIGZvbGRlci5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwdWJsaWNBcGlGaWxlczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsZSBnbG9icyB0aGF0IGRlZmluZSBwdWJsaWMgQVBJIGV4cG9ydCBzdXJmYWNlcy5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGVzdEZpbGVQYXR0ZXJuczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiRmlsZSBnbG9icyB0cmVhdGVkIGFzIHRlc3RzIHdoZW4gY2xhc3NpZnlpbmcgZXhwb3J0IGNvbnN1bWVycy5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdHlwZTogXCJwcm9ibGVtXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBub1VudXNlZEV4cG9ydHNSdWxlIH07XG4iXX0=
@@ -1,3 +1,4 @@
1
1
  export { noMultipleDeclaratorsRule } from "./no-multiple-declarators/index.js";
2
+ export { noUselessDelegationRule } from "./no-useless-delegation/index.js";
2
3
  export { preferInterfaceTypesRule } from "./prefer-interface-types/index.js";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export { noMultipleDeclaratorsRule } from "./no-multiple-declarators/index.js";
2
+ export { noUselessDelegationRule } from "./no-useless-delegation/index.js";
2
3
  export { preferInterfaceTypesRule } from "./prefer-interface-types/index.js";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZG9tYWluL2NvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlIH0gZnJvbSBcIi4vbm8tbXVsdGlwbGUtZGVjbGFyYXRvcnNcIjtcbmV4cG9ydCB7IHByZWZlckludGVyZmFjZVR5cGVzUnVsZSB9IGZyb20gXCIuL3ByZWZlci1pbnRlcmZhY2UtdHlwZXNcIjtcbiJdfQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZG9tYWluL2NvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlIH0gZnJvbSBcIi4vbm8tbXVsdGlwbGUtZGVjbGFyYXRvcnNcIjtcbmV4cG9ydCB7IG5vVXNlbGVzc0RlbGVnYXRpb25SdWxlIH0gZnJvbSBcIi4vbm8tdXNlbGVzcy1kZWxlZ2F0aW9uXCI7XG5leHBvcnQgeyBwcmVmZXJJbnRlcmZhY2VUeXBlc1J1bGUgfSBmcm9tIFwiLi9wcmVmZXItaW50ZXJmYWNlLXR5cGVzXCI7XG4iXX0=
@@ -0,0 +1,58 @@
1
+ import type { Rule } from "eslint";
2
+ import type { FixableVariableDeclarationNode, RangedVariableDeclaratorNode, SourceCodeAccess, VariableDeclarationNode, VariableDeclaratorNode } from "./types.js";
3
+ /**
4
+ * Gets the source access wrapper from the ESLint context.
5
+ * @param context Rule execution context.
6
+ * @returns Source access helpers used by the fixer.
7
+ * @example
8
+ * ```typescript
9
+ * const sourceCode = getSourceCode(context);
10
+ * ```
11
+ */
12
+ declare const getSourceCode: (context: Rule.RuleContext) => SourceCodeAccess;
13
+ /**
14
+ * Reads the full source text for the active file.
15
+ * @param sourceCode Source access wrapper.
16
+ * @returns Full source text.
17
+ * @example
18
+ * ```typescript
19
+ * const sourceText = getSourceText(sourceCode);
20
+ * ```
21
+ */
22
+ declare const getSourceText: (sourceCode: SourceCodeAccess) => string;
23
+ /**
24
+ * Collects ranged declarators when every declarator exposes a range.
25
+ * @param declarations Declarators from the declaration node.
26
+ * @returns Declarators with confirmed ranges, or `undefined` when any range is missing.
27
+ * @example
28
+ * ```typescript
29
+ * const ranged = getRangedDeclarations(node.declarations ?? []);
30
+ * ```
31
+ */
32
+ declare const getRangedDeclarations: (declarations: readonly VariableDeclaratorNode[]) => readonly RangedVariableDeclaratorNode[] | undefined;
33
+ /**
34
+ * Determines whether a declaration can be safely rewritten.
35
+ * @param node Declaration node to inspect.
36
+ * @param declarations Declarators within the declaration.
37
+ * @param sourceText Full source text.
38
+ * @returns Whether the declaration is safe to autofix.
39
+ * @example
40
+ * ```typescript
41
+ * const fixable = canFix(node, declarations, sourceText);
42
+ * ```
43
+ */
44
+ declare const canFix: (node: VariableDeclarationNode, declarations: readonly VariableDeclaratorNode[], sourceText: string) => boolean;
45
+ /**
46
+ * Converts declarators into separate declaration statements.
47
+ * @param node Fixable declaration node.
48
+ * @param declarations Declarators that should be split.
49
+ * @param sourceCode Source access wrapper.
50
+ * @returns Replacement text for the full declaration.
51
+ * @example
52
+ * ```typescript
53
+ * const replacement = buildReplacement(node, declarations, sourceCode);
54
+ * ```
55
+ */
56
+ declare const buildReplacement: (node: FixableVariableDeclarationNode, declarations: readonly RangedVariableDeclaratorNode[], sourceCode: SourceCodeAccess) => string;
57
+ export { buildReplacement, canFix, getRangedDeclarations, getSourceCode, getSourceText, };
58
+ //# sourceMappingURL=rule-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/core/no-multiple-declarators/rule-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EACV,8BAA8B,EAG9B,4BAA4B,EAC5B,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAejB;;;;;;;;GAQG;AACH,QAAA,MAAM,aAAa,GAAI,SAAS,IAAI,CAAC,WAAW,KAAG,gBACA,CAAC;AAEpD;;;;;;;;GAQG;AACH,QAAA,MAAM,aAAa,GAAI,YAAY,gBAAgB,KAAG,MACwB,CAAC;AA6I/E;;;;;;;;GAQG;AACH,QAAA,MAAM,qBAAqB,GACzB,cAAc,SAAS,sBAAsB,EAAE,KAC9C,SAAS,4BAA4B,EAAE,GAAG,SAY5C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,MAAM,GACV,MAAM,uBAAuB,EAC7B,cAAc,SAAS,sBAAsB,EAAE,EAC/C,YAAY,MAAM,KACjB,OAiBF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,gBAAgB,GACpB,MAAM,8BAA8B,EACpC,cAAc,SAAS,4BAA4B,EAAE,EACrD,YAAY,gBAAgB,KAC3B,MAQF,CAAC;AAEF,OAAO,EACL,gBAAgB,EAChB,MAAM,EACN,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,CAAC"}