@codeperfect/eslint-plugin 1.0.0 → 2.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 (587) hide show
  1. package/README.md +26 -4
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{custom-rules.d.ts → application/custom-rules.d.ts} +3 -0
  4. package/dist/application/custom-rules.d.ts.map +1 -0
  5. package/dist/application/custom-rules.js +74 -0
  6. package/dist/application/index.d.ts +4 -0
  7. package/dist/application/index.d.ts.map +1 -0
  8. package/dist/application/index.js +3 -0
  9. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +56 -0
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -0
  12. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +149 -0
  13. package/dist/{architecture → domain/architecture}/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +4 -4
  14. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  15. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +98 -0
  16. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +45 -0
  17. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  18. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +64 -0
  19. package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +5 -4
  20. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  21. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +87 -0
  22. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  23. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +145 -0
  24. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +5 -0
  25. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  26. package/dist/domain/architecture/consistent-barrel-files/index.js +4 -0
  27. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  28. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +90 -0
  29. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +1 -1
  30. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  31. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +91 -0
  32. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +4 -6
  33. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  34. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +95 -0
  35. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  36. package/dist/domain/architecture/consistent-barrel-files/rule.js +51 -0
  37. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +4 -0
  38. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +1 -0
  39. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +4 -0
  40. package/dist/{architecture → domain/architecture}/consistent-barrel-files/test-helpers.d.ts +48 -48
  41. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  42. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +20 -0
  43. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +1 -0
  44. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +25 -0
  45. package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +235 -0
  46. package/dist/domain/architecture/consistent-barrel-files/types.d.ts +19 -0
  47. package/dist/domain/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  48. package/dist/domain/architecture/consistent-barrel-files/types.js +2 -0
  49. package/dist/{architecture → domain/architecture}/index.d.ts +1 -1
  50. package/dist/domain/architecture/index.d.ts.map +1 -0
  51. package/dist/domain/architecture/index.js +2 -0
  52. package/dist/{core → domain/core}/index.d.ts +2 -2
  53. package/dist/domain/core/index.d.ts.map +1 -0
  54. package/dist/domain/core/index.js +3 -0
  55. package/dist/domain/core/no-multiple-declarators/index.d.ts +2 -0
  56. package/dist/domain/core/no-multiple-declarators/index.d.ts.map +1 -0
  57. package/dist/domain/core/no-multiple-declarators/index.js +2 -0
  58. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +101 -0
  59. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +1 -0
  60. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +108 -0
  61. package/dist/{core → domain/core}/no-multiple-declarators/rule.d.ts +1 -0
  62. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -0
  63. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +35 -0
  64. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +1 -0
  65. package/dist/domain/core/no-multiple-declarators/rule.fixes.js +95 -0
  66. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +4 -0
  67. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +1 -0
  68. package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +4 -0
  69. package/dist/domain/core/no-multiple-declarators/rule.js +222 -0
  70. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +4 -0
  71. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +1 -0
  72. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +4 -0
  73. package/dist/domain/core/no-multiple-declarators/types.d.ts +77 -0
  74. package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -0
  75. package/dist/domain/core/no-multiple-declarators/types.js +38 -0
  76. package/dist/domain/core/prefer-interface-types/index.d.ts +2 -0
  77. package/dist/domain/core/prefer-interface-types/index.d.ts.map +1 -0
  78. package/dist/domain/core/prefer-interface-types/index.js +2 -0
  79. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -0
  80. package/dist/domain/core/prefer-interface-types/rule.js +148 -0
  81. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  82. package/dist/domain/core/prefer-interface-types/test-helpers.js +116 -0
  83. package/dist/{custom-rule-documentation.d.ts → domain/custom-rule-documentation.d.ts} +3 -1
  84. package/dist/domain/custom-rule-documentation.d.ts.map +1 -0
  85. package/dist/domain/custom-rule-documentation.js +36 -0
  86. package/dist/domain/docs/index.d.ts +4 -0
  87. package/dist/domain/docs/index.d.ts.map +1 -0
  88. package/dist/domain/docs/index.js +4 -0
  89. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  90. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  91. package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities.d.ts +1 -1
  92. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  93. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +146 -0
  94. package/dist/domain/docs/no-interface-member-docs/index.d.ts +2 -0
  95. package/dist/domain/docs/no-interface-member-docs/index.d.ts.map +1 -0
  96. package/dist/domain/docs/no-interface-member-docs/index.js +2 -0
  97. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-tags.d.ts +1 -1
  98. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  99. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +101 -0
  100. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-utilities.d.ts +1 -1
  101. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  102. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  103. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  104. package/dist/domain/docs/no-interface-member-docs/rule.js +171 -0
  105. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  106. package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.js +2 -2
  107. package/dist/{docs → domain/docs}/no-interface-member-docs/types.d.ts +2 -2
  108. package/dist/domain/docs/no-interface-member-docs/types.d.ts.map +1 -0
  109. package/dist/domain/docs/no-interface-member-docs/types.js +2 -0
  110. package/dist/domain/docs/require-example-language/create-fixer.d.ts +5 -0
  111. package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +1 -0
  112. package/dist/domain/docs/require-example-language/create-fixer.js +5 -0
  113. package/dist/domain/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  114. package/dist/domain/docs/require-example-language/empty-fence-fixes.js +169 -0
  115. package/dist/domain/docs/require-example-language/example-utilities.d.ts.map +1 -0
  116. package/dist/domain/docs/require-example-language/example-utilities.js +76 -0
  117. package/dist/{docs → domain/docs}/require-example-language/examples.d.ts +1 -1
  118. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -0
  119. package/dist/domain/docs/require-example-language/examples.js +181 -0
  120. package/dist/{docs → domain/docs}/require-example-language/fixes.d.ts +2 -2
  121. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -0
  122. package/dist/domain/docs/require-example-language/fixes.js +182 -0
  123. package/dist/domain/docs/require-example-language/index.d.ts +3 -0
  124. package/dist/domain/docs/require-example-language/index.d.ts.map +1 -0
  125. package/dist/domain/docs/require-example-language/index.js +2 -0
  126. package/dist/{docs → domain/docs}/require-example-language/reporting.d.ts +1 -1
  127. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -0
  128. package/dist/domain/docs/require-example-language/reporting.js +148 -0
  129. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -0
  130. package/dist/domain/docs/require-example-language/rule.js +37 -0
  131. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -0
  132. package/dist/domain/docs/require-example-language/types.js +2 -0
  133. package/dist/domain/docs/single-line-jsdoc/index.d.ts +2 -0
  134. package/dist/domain/docs/single-line-jsdoc/index.d.ts.map +1 -0
  135. package/dist/domain/docs/single-line-jsdoc/index.js +2 -0
  136. package/dist/domain/docs/single-line-jsdoc/rule.d.ts +4 -0
  137. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  138. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +4 -0
  139. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +1 -0
  140. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +5 -0
  141. package/dist/domain/docs/single-line-jsdoc/rule.js +201 -0
  142. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +4 -0
  143. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +1 -0
  144. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +5 -0
  145. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  146. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  147. package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +1 -1
  148. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  149. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  150. package/dist/domain/docs/test-helpers.d.ts.map +1 -0
  151. package/dist/domain/docs/test-helpers.js +107 -0
  152. package/dist/domain/index.d.ts +6 -0
  153. package/dist/domain/index.d.ts.map +1 -0
  154. package/dist/domain/index.js +6 -0
  155. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +34 -0
  156. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -0
  157. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +145 -0
  158. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -0
  159. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +203 -0
  160. package/dist/domain/testing/aaa/analyzer.analysis.js +82 -0
  161. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts +4 -0
  162. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts.map +1 -0
  163. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.js +4 -0
  164. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +18 -0
  165. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -0
  166. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts +4 -0
  167. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts.map +1 -0
  168. package/dist/domain/testing/aaa/analyzer.assertions.destructured.js +4 -0
  169. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +95 -0
  170. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
  171. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +185 -0
  172. package/dist/domain/testing/aaa/analyzer.assertions.js +33 -0
  173. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +64 -0
  174. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
  175. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +105 -0
  176. package/dist/domain/testing/aaa/analyzer.classification.d.ts +16 -0
  177. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -0
  178. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +77 -0
  179. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
  180. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +203 -0
  181. package/dist/domain/testing/aaa/analyzer.classification.js +31 -0
  182. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +9 -0
  183. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +1 -0
  184. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +10 -0
  185. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts +4 -0
  186. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts.map +1 -0
  187. package/dist/domain/testing/aaa/analyzer.classification.mutations.js +4 -0
  188. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +15 -0
  189. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
  190. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +34 -0
  191. package/dist/domain/testing/aaa/analyzer.d.ts +46 -0
  192. package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -0
  193. package/dist/domain/testing/aaa/analyzer.js +59 -0
  194. package/dist/domain/testing/aaa/analyzer.super.d.ts +106 -0
  195. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -0
  196. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +27 -0
  197. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
  198. package/dist/domain/testing/aaa/analyzer.super.helpers.js +66 -0
  199. package/dist/domain/testing/aaa/analyzer.super.js +211 -0
  200. package/dist/{testing → domain/testing}/aaa/index.d.ts +2 -2
  201. package/dist/domain/testing/aaa/index.d.ts.map +1 -0
  202. package/dist/domain/testing/aaa/index.js +2 -0
  203. package/dist/domain/testing/aaa/types.d.ts +58 -0
  204. package/dist/domain/testing/aaa/types.d.ts.map +1 -0
  205. package/dist/domain/testing/aaa/types.js +2 -0
  206. package/dist/domain/testing/assert-actual-expected-names/index.d.ts +2 -0
  207. package/dist/domain/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  208. package/dist/domain/testing/assert-actual-expected-names/index.js +2 -0
  209. package/dist/{testing → domain/testing}/assert-actual-expected-names/rule.d.ts +1 -0
  210. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  211. package/dist/domain/testing/assert-actual-expected-names/rule.js +116 -0
  212. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  213. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  214. package/dist/domain/testing/enforce-aaa-phase-purity/index.js +2 -0
  215. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts +13 -0
  216. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -0
  217. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +134 -0
  218. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +25 -0
  219. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -0
  220. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +138 -0
  221. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts +4 -0
  222. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts.map +1 -0
  223. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js +4 -0
  224. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts +4 -0
  225. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts.map +1 -0
  226. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js +4 -0
  227. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +4 -0
  228. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +1 -0
  229. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +4 -0
  230. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +14 -0
  231. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -0
  232. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +180 -0
  233. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +42 -0
  234. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +1 -0
  235. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +188 -0
  236. package/dist/{testing → domain/testing}/enforce-aaa-phase-purity/rule.d.ts +1 -0
  237. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  238. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +37 -0
  239. package/dist/domain/testing/enforce-aaa-structure/index.d.ts +2 -0
  240. package/dist/domain/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  241. package/dist/domain/testing/enforce-aaa-structure/index.js +2 -0
  242. package/dist/{testing → domain/testing}/enforce-aaa-structure/rule.d.ts +1 -0
  243. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  244. package/dist/domain/testing/enforce-aaa-structure/rule.js +88 -0
  245. package/dist/{testing → domain/testing}/index.d.ts +9 -8
  246. package/dist/domain/testing/index.d.ts.map +1 -0
  247. package/dist/domain/testing/index.js +10 -0
  248. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +29 -0
  249. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -0
  250. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +90 -0
  251. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts +31 -0
  252. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -0
  253. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +43 -0
  254. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts +16 -0
  255. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -0
  256. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +205 -0
  257. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +28 -0
  258. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  259. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +171 -0
  260. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  261. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  262. package/dist/domain/testing/prefer-vi-mocked-import/index.js +2 -0
  263. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-bindings.d.ts +1 -1
  264. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  265. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  266. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-declarations.d.ts +2 -1
  267. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  268. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +131 -0
  269. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  270. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  271. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-imports.d.ts +1 -1
  272. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  273. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  274. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-rewrites.d.ts +1 -1
  275. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  276. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  277. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  278. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  279. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +26 -0
  280. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  281. package/dist/domain/testing/prefer-vi-mocked-import/match.js +198 -0
  282. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +20 -0
  283. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +1 -0
  284. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +39 -0
  285. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  286. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +39 -0
  287. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/types.d.ts +1 -1
  288. package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  289. package/dist/domain/testing/prefer-vi-mocked-import/types.js +2 -0
  290. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +97 -0
  291. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -0
  292. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +174 -0
  293. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +2 -0
  294. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +1 -0
  295. package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +2 -0
  296. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +14 -0
  297. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -0
  298. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +84 -0
  299. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +13 -0
  300. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -0
  301. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +195 -0
  302. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +25 -0
  303. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -0
  304. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +96 -0
  305. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +32 -0
  306. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +1 -0
  307. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +164 -0
  308. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +5 -0
  309. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -0
  310. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +4 -0
  311. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +1 -0
  312. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +4 -0
  313. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +4 -0
  314. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +1 -0
  315. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +4 -0
  316. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +88 -0
  317. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +4 -0
  318. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +1 -0
  319. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +4 -0
  320. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +24 -0
  321. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -0
  322. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +113 -0
  323. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +36 -0
  324. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +1 -0
  325. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +138 -0
  326. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +187 -0
  327. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -0
  328. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +2 -0
  329. package/dist/domain/testing/require-aaa-sections/index.d.ts +2 -0
  330. package/dist/domain/testing/require-aaa-sections/index.d.ts.map +1 -0
  331. package/dist/domain/testing/require-aaa-sections/index.js +2 -0
  332. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts +17 -0
  333. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +1 -0
  334. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +150 -0
  335. package/dist/{testing → domain/testing}/require-aaa-sections/rule.d.ts +1 -0
  336. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -0
  337. package/dist/domain/testing/require-aaa-sections/rule.js +134 -0
  338. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +104 -0
  339. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -0
  340. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +216 -0
  341. package/dist/domain/testing/require-act-result-capture/index.d.ts +2 -0
  342. package/dist/domain/testing/require-act-result-capture/index.d.ts.map +1 -0
  343. package/dist/domain/testing/require-act-result-capture/index.js +2 -0
  344. package/dist/{testing → domain/testing}/require-act-result-capture/rule.d.ts +1 -0
  345. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -0
  346. package/dist/domain/testing/require-act-result-capture/rule.js +109 -0
  347. package/dist/domain/testing/require-test-companion/index.d.ts +3 -0
  348. package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -0
  349. package/dist/domain/testing/require-test-companion/index.js +3 -0
  350. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-listeners.d.ts +1 -1
  351. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  352. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  353. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  354. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +113 -0
  355. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-test-helpers.d.ts +1 -1
  356. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  357. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +184 -0
  358. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-utilities.d.ts +1 -1
  359. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  360. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  361. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -0
  362. package/dist/domain/testing/require-test-companion/rule.js +82 -0
  363. package/dist/domain/testing/require-test-companion/types.d.ts.map +1 -0
  364. package/dist/domain/testing/require-test-companion/types.js +2 -0
  365. package/dist/domain/testing/single-act-statement/index.d.ts +2 -0
  366. package/dist/domain/testing/single-act-statement/index.d.ts.map +1 -0
  367. package/dist/domain/testing/single-act-statement/index.js +2 -0
  368. package/dist/{testing → domain/testing}/single-act-statement/rule.d.ts +1 -0
  369. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -0
  370. package/dist/domain/testing/single-act-statement/rule.js +37 -0
  371. package/dist/index.d.ts +4 -5
  372. package/dist/index.d.ts.map +1 -1
  373. package/dist/index.js +3 -6
  374. package/dist/{codeperfect-plugin.d.ts → infrastructure/codeperfect-plugin.d.ts} +2 -0
  375. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -0
  376. package/dist/infrastructure/codeperfect-plugin.js +30 -0
  377. package/dist/infrastructure/index.d.ts +5 -0
  378. package/dist/infrastructure/index.d.ts.map +1 -0
  379. package/dist/infrastructure/index.js +4 -0
  380. package/dist/infrastructure/presets.d.ts +18 -0
  381. package/dist/infrastructure/presets.d.ts.map +1 -0
  382. package/dist/infrastructure/presets.js +81 -0
  383. package/package.json +67 -32
  384. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +0 -1
  385. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +0 -131
  386. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +0 -48
  387. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +0 -1
  388. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +0 -126
  389. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
  390. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -90
  391. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +0 -1
  392. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +0 -218
  393. package/dist/architecture/consistent-barrel-files/index.d.ts +0 -5
  394. package/dist/architecture/consistent-barrel-files/index.d.ts.map +0 -1
  395. package/dist/architecture/consistent-barrel-files/index.js +0 -4
  396. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +0 -1
  397. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +0 -100
  398. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
  399. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -90
  400. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +0 -1
  401. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +0 -154
  402. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +0 -1
  403. package/dist/architecture/consistent-barrel-files/rule.js +0 -58
  404. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
  405. package/dist/architecture/consistent-barrel-files/test-helpers.js +0 -229
  406. package/dist/architecture/consistent-barrel-files/types.d.ts +0 -25
  407. package/dist/architecture/consistent-barrel-files/types.d.ts.map +0 -1
  408. package/dist/architecture/consistent-barrel-files/types.js +0 -2
  409. package/dist/architecture/index.d.ts.map +0 -1
  410. package/dist/architecture/index.js +0 -2
  411. package/dist/benchmark-rules.d.ts +0 -83
  412. package/dist/benchmark-rules.d.ts.map +0 -1
  413. package/dist/benchmark-rules.js +0 -175
  414. package/dist/codeperfect-plugin.d.ts.map +0 -1
  415. package/dist/codeperfect-plugin.js +0 -29
  416. package/dist/core/index.d.ts.map +0 -1
  417. package/dist/core/index.js +0 -3
  418. package/dist/core/no-multiple-declarators/index.d.ts +0 -2
  419. package/dist/core/no-multiple-declarators/index.d.ts.map +0 -1
  420. package/dist/core/no-multiple-declarators/index.js +0 -2
  421. package/dist/core/no-multiple-declarators/rule.d.ts.map +0 -1
  422. package/dist/core/no-multiple-declarators/rule.js +0 -100
  423. package/dist/core/prefer-interface-types/index.d.ts +0 -2
  424. package/dist/core/prefer-interface-types/index.d.ts.map +0 -1
  425. package/dist/core/prefer-interface-types/index.js +0 -2
  426. package/dist/core/prefer-interface-types/rule.d.ts.map +0 -1
  427. package/dist/core/prefer-interface-types/rule.js +0 -145
  428. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
  429. package/dist/core/prefer-interface-types/test-helpers.js +0 -116
  430. package/dist/custom-rule-documentation.d.ts.map +0 -1
  431. package/dist/custom-rule-documentation.js +0 -35
  432. package/dist/custom-rules.d.ts.map +0 -1
  433. package/dist/custom-rules.js +0 -70
  434. package/dist/docs/index.d.ts +0 -4
  435. package/dist/docs/index.d.ts.map +0 -1
  436. package/dist/docs/index.js +0 -4
  437. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
  438. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
  439. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +0 -1
  440. package/dist/docs/no-interface-member-docs/comment-utilities.js +0 -146
  441. package/dist/docs/no-interface-member-docs/index.d.ts +0 -2
  442. package/dist/docs/no-interface-member-docs/index.d.ts.map +0 -1
  443. package/dist/docs/no-interface-member-docs/index.js +0 -2
  444. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +0 -1
  445. package/dist/docs/no-interface-member-docs/parameter-tags.js +0 -101
  446. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +0 -1
  447. package/dist/docs/no-interface-member-docs/parameter-utilities.js +0 -125
  448. package/dist/docs/no-interface-member-docs/rule.d.ts.map +0 -1
  449. package/dist/docs/no-interface-member-docs/rule.js +0 -168
  450. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
  451. package/dist/docs/no-interface-member-docs/types.d.ts.map +0 -1
  452. package/dist/docs/no-interface-member-docs/types.js +0 -2
  453. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +0 -1
  454. package/dist/docs/require-example-language/empty-fence-fixes.js +0 -169
  455. package/dist/docs/require-example-language/example-utilities.d.ts.map +0 -1
  456. package/dist/docs/require-example-language/example-utilities.js +0 -76
  457. package/dist/docs/require-example-language/examples.d.ts.map +0 -1
  458. package/dist/docs/require-example-language/examples.js +0 -181
  459. package/dist/docs/require-example-language/fixes.d.ts.map +0 -1
  460. package/dist/docs/require-example-language/fixes.js +0 -182
  461. package/dist/docs/require-example-language/index.d.ts +0 -3
  462. package/dist/docs/require-example-language/index.d.ts.map +0 -1
  463. package/dist/docs/require-example-language/index.js +0 -2
  464. package/dist/docs/require-example-language/reporting.d.ts.map +0 -1
  465. package/dist/docs/require-example-language/reporting.js +0 -145
  466. package/dist/docs/require-example-language/rule.d.ts.map +0 -1
  467. package/dist/docs/require-example-language/rule.js +0 -34
  468. package/dist/docs/require-example-language/types.d.ts.map +0 -1
  469. package/dist/docs/require-example-language/types.js +0 -2
  470. package/dist/docs/single-line-jsdoc/index.d.ts +0 -2
  471. package/dist/docs/single-line-jsdoc/index.d.ts.map +0 -1
  472. package/dist/docs/single-line-jsdoc/index.js +0 -2
  473. package/dist/docs/single-line-jsdoc/rule.d.ts +0 -5
  474. package/dist/docs/single-line-jsdoc/rule.d.ts.map +0 -1
  475. package/dist/docs/single-line-jsdoc/rule.js +0 -196
  476. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +0 -1
  477. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +0 -95
  478. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +0 -1
  479. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +0 -140
  480. package/dist/docs/test-helpers.d.ts.map +0 -1
  481. package/dist/docs/test-helpers.js +0 -107
  482. package/dist/presets.d.ts +0 -10
  483. package/dist/presets.d.ts.map +0 -1
  484. package/dist/presets.js +0 -50
  485. package/dist/rules/index.d.ts +0 -5
  486. package/dist/rules/index.d.ts.map +0 -1
  487. package/dist/rules/index.js +0 -6
  488. package/dist/testing/aaa/analyzer.d.ts +0 -36
  489. package/dist/testing/aaa/analyzer.d.ts.map +0 -1
  490. package/dist/testing/aaa/analyzer.js +0 -490
  491. package/dist/testing/aaa/index.d.ts.map +0 -1
  492. package/dist/testing/aaa/index.js +0 -2
  493. package/dist/testing/aaa/types.d.ts +0 -31
  494. package/dist/testing/aaa/types.d.ts.map +0 -1
  495. package/dist/testing/aaa/types.js +0 -2
  496. package/dist/testing/assert-actual-expected-names/index.d.ts +0 -2
  497. package/dist/testing/assert-actual-expected-names/index.d.ts.map +0 -1
  498. package/dist/testing/assert-actual-expected-names/index.js +0 -2
  499. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +0 -1
  500. package/dist/testing/assert-actual-expected-names/rule.js +0 -54
  501. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +0 -2
  502. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +0 -1
  503. package/dist/testing/enforce-aaa-phase-purity/index.js +0 -2
  504. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
  505. package/dist/testing/enforce-aaa-phase-purity/rule.js +0 -110
  506. package/dist/testing/enforce-aaa-structure/index.d.ts +0 -2
  507. package/dist/testing/enforce-aaa-structure/index.d.ts.map +0 -1
  508. package/dist/testing/enforce-aaa-structure/index.js +0 -2
  509. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +0 -1
  510. package/dist/testing/enforce-aaa-structure/rule.js +0 -48
  511. package/dist/testing/index.d.ts.map +0 -1
  512. package/dist/testing/index.js +0 -9
  513. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +0 -16
  514. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +0 -1
  515. package/dist/testing/prefer-vi-mocked-import/fix.js +0 -224
  516. package/dist/testing/prefer-vi-mocked-import/index.d.ts +0 -2
  517. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +0 -1
  518. package/dist/testing/prefer-vi-mocked-import/index.js +0 -2
  519. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +0 -1
  520. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +0 -52
  521. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +0 -1
  522. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +0 -99
  523. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +0 -1
  524. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +0 -102
  525. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +0 -1
  526. package/dist/testing/prefer-vi-mocked-import/match-imports.js +0 -156
  527. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +0 -1
  528. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +0 -119
  529. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +0 -1
  530. package/dist/testing/prefer-vi-mocked-import/match-walk.js +0 -62
  531. package/dist/testing/prefer-vi-mocked-import/match.d.ts +0 -15
  532. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +0 -1
  533. package/dist/testing/prefer-vi-mocked-import/match.js +0 -193
  534. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +0 -1
  535. package/dist/testing/prefer-vi-mocked-import/rule.js +0 -32
  536. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +0 -1
  537. package/dist/testing/prefer-vi-mocked-import/types.js +0 -2
  538. package/dist/testing/require-aaa-sections/index.d.ts +0 -2
  539. package/dist/testing/require-aaa-sections/index.d.ts.map +0 -1
  540. package/dist/testing/require-aaa-sections/index.js +0 -2
  541. package/dist/testing/require-aaa-sections/rule.d.ts.map +0 -1
  542. package/dist/testing/require-aaa-sections/rule.js +0 -111
  543. package/dist/testing/require-act-result-capture/index.d.ts +0 -2
  544. package/dist/testing/require-act-result-capture/index.d.ts.map +0 -1
  545. package/dist/testing/require-act-result-capture/index.js +0 -2
  546. package/dist/testing/require-act-result-capture/rule.d.ts.map +0 -1
  547. package/dist/testing/require-act-result-capture/rule.js +0 -34
  548. package/dist/testing/require-test-companion/index.d.ts +0 -3
  549. package/dist/testing/require-test-companion/index.d.ts.map +0 -1
  550. package/dist/testing/require-test-companion/index.js +0 -3
  551. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +0 -1
  552. package/dist/testing/require-test-companion/require-test-companion-listeners.js +0 -145
  553. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +0 -1
  554. package/dist/testing/require-test-companion/require-test-companion-options.js +0 -112
  555. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
  556. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +0 -183
  557. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
  558. package/dist/testing/require-test-companion/require-test-companion-utilities.js +0 -26
  559. package/dist/testing/require-test-companion/rule.d.ts.map +0 -1
  560. package/dist/testing/require-test-companion/rule.js +0 -57
  561. package/dist/testing/require-test-companion/types.d.ts.map +0 -1
  562. package/dist/testing/require-test-companion/types.js +0 -2
  563. package/dist/testing/single-act-statement/index.d.ts +0 -2
  564. package/dist/testing/single-act-statement/index.d.ts.map +0 -1
  565. package/dist/testing/single-act-statement/index.js +0 -2
  566. package/dist/testing/single-act-statement/rule.d.ts.map +0 -1
  567. package/dist/testing/single-act-statement/rule.js +0 -33
  568. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule.d.ts +0 -0
  569. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +0 -0
  570. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/rule.d.ts +0 -0
  571. /package/dist/{core → domain/core}/prefer-interface-types/rule.d.ts +0 -0
  572. /package/dist/{core → domain/core}/prefer-interface-types/test-helpers.d.ts +0 -0
  573. /package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -0
  574. /package/dist/{docs → domain/docs}/no-interface-member-docs/rule.d.ts +0 -0
  575. /package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.d.ts +0 -0
  576. /package/dist/{docs → domain/docs}/require-example-language/empty-fence-fixes.d.ts +0 -0
  577. /package/dist/{docs → domain/docs}/require-example-language/example-utilities.d.ts +0 -0
  578. /package/dist/{docs → domain/docs}/require-example-language/rule.d.ts +0 -0
  579. /package/dist/{docs → domain/docs}/require-example-language/types.d.ts +0 -0
  580. /package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-content.d.ts +0 -0
  581. /package/dist/{docs → domain/docs}/test-helpers.d.ts +0 -0
  582. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-helpers.d.ts +0 -0
  583. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-walk.d.ts +0 -0
  584. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/rule.d.ts +0 -0
  585. /package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-options.d.ts +0 -0
  586. /package/dist/{testing → domain/testing}/require-test-companion/rule.d.ts +0 -0
  587. /package/dist/{testing → domain/testing}/require-test-companion/types.d.ts +0 -0
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Checks isJsdocComment.
3
+ * @param comment Input comment value.
4
+ * @returns Return value output.
5
+ * @example
6
+ * ```typescript
7
+ * isJsdocComment();
8
+ * ```
9
+ */
10
+ const isJsdocComment = (comment) => comment.type === "Block" && comment.value.startsWith("*");
11
+ /**
12
+ * Gets getCommentEnd.
13
+ * @param comment Input comment value.
14
+ * @returns Return value output.
15
+ * @example
16
+ * ```typescript
17
+ * getCommentEnd();
18
+ * ```
19
+ */
20
+ const getCommentEnd = (comment) => {
21
+ const commentEnd = comment.range?.[1];
22
+ return typeof commentEnd === "number" ? commentEnd : void 0;
23
+ };
24
+ /**
25
+ * Finds the closest JSDoc comment before a node.
26
+ * @param comments Comment list to search.
27
+ * @param nodeStart Start offset of the node.
28
+ * @returns The closest JSDoc comment when present.
29
+ * @example
30
+ * ```typescript
31
+ * const comment = findClosestComment(comments, nodeStart);
32
+ * ```
33
+ */
34
+ const findClosestComment = (comments, nodeStart) => {
35
+ let closest = void 0;
36
+ let closestEnd = -1;
37
+ for (const comment of comments) {
38
+ const commentEnd = getCommentEnd(comment);
39
+ const shouldConsider = isJsdocComment(comment) && commentEnd !== void 0;
40
+ if (shouldConsider && commentEnd <= nodeStart && commentEnd > closestEnd) {
41
+ closest = comment;
42
+ closestEnd = commentEnd;
43
+ }
44
+ }
45
+ return closest;
46
+ };
47
+ /**
48
+ * Gets the closest JSDoc comment for a node.
49
+ * @param sourceCode Source code wrapper.
50
+ * @param node Node to inspect.
51
+ * @returns The closest JSDoc comment when present.
52
+ * @example
53
+ * ```typescript
54
+ * const comment = getJsdocComment(sourceCode, node);
55
+ * ```
56
+ */
57
+ const getJsdocComment = (sourceCode, node) => {
58
+ const comments = sourceCode.getAllComments();
59
+ const nodeStart = node.range?.[0];
60
+ if (comments.length === 0 || typeof nodeStart !== "number") {
61
+ return void 0;
62
+ }
63
+ return findClosestComment(comments, nodeStart);
64
+ };
65
+ /**
66
+ * Extracts the full text for a comment range.
67
+ * @param sourceCode Source code wrapper.
68
+ * @param comment Comment to read.
69
+ * @returns Comment contents from the source.
70
+ * @example
71
+ * ```typescript
72
+ * const text = getCommentText(sourceCode, comment);
73
+ * ```
74
+ */
75
+ const getCommentText = (sourceCode, comment) => {
76
+ const start = comment.range?.[0];
77
+ const end = comment.range?.[1];
78
+ if (typeof start !== "number" || typeof end !== "number") {
79
+ return "";
80
+ }
81
+ return sourceCode.text.slice(start, end);
82
+ };
83
+ /**
84
+ * Gets getCommentLines.
85
+ * @param commentText Input commentText value.
86
+ * @returns Return value output.
87
+ * @example
88
+ * ```typescript
89
+ * getCommentLines();
90
+ * ```
91
+ */
92
+ const getCommentLines = (commentText) => {
93
+ const lines = commentText.split(/\r?\n/u);
94
+ const results = [];
95
+ let offset = 0;
96
+ for (const line of lines) {
97
+ const lineEnd = offset + line.length;
98
+ const nextSlice = commentText.slice(lineEnd, lineEnd + 2);
99
+ const lineBreakLength = nextSlice.startsWith("\r\n")
100
+ ? 2
101
+ : nextSlice.startsWith("\n")
102
+ ? 1
103
+ : 0;
104
+ results.push({
105
+ end: lineEnd,
106
+ lineBreakLength,
107
+ start: offset,
108
+ text: line,
109
+ });
110
+ offset = lineEnd + lineBreakLength;
111
+ }
112
+ return results;
113
+ };
114
+ /**
115
+ * Builds a removal range for the specified comment line.
116
+ * @param commentStart Comment start offset in the source.
117
+ * @param commentText Full comment text.
118
+ * @param line Line metadata for the comment.
119
+ * @returns The range to remove.
120
+ * @example
121
+ * ```typescript
122
+ * const range = buildRemovalRange(0, commentText, line);
123
+ * ```
124
+ */
125
+ const buildRemovalRange = (commentStart, commentText, line) => {
126
+ if (line.lineBreakLength > 0) {
127
+ return [
128
+ commentStart + line.start,
129
+ commentStart + line.end + line.lineBreakLength,
130
+ ];
131
+ }
132
+ if (line.start > 0) {
133
+ const previousChar = commentText[line.start - 1];
134
+ const previousIsLineBreak = previousChar === "\n";
135
+ if (previousIsLineBreak) {
136
+ const lineBreakLength = line.start > 1 && commentText[line.start - 2] === "\r" ? 2 : 1;
137
+ return [
138
+ commentStart + line.start - lineBreakLength,
139
+ commentStart + line.end,
140
+ ];
141
+ }
142
+ }
143
+ return [commentStart + line.start, commentStart + line.end];
144
+ };
145
+ export { buildRemovalRange, getCommentLines, getCommentText, getJsdocComment };
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC11dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2RvY3Mvbm8taW50ZXJmYWNlLW1lbWJlci1kb2NzL2NvbW1lbnQtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFnQixFQUFXLEVBQUUsQ0FDbkQsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFNUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQWdCLEVBQXNCLEVBQUU7SUFDN0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRDLE9BQU8sT0FBTyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsUUFBbUIsRUFDbkIsU0FBaUIsRUFDSSxFQUFFO0lBQ3ZCLElBQUksT0FBTyxHQUF3QixLQUFLLENBQUMsQ0FBQztJQUMxQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVwQixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBRXhFLElBQUksY0FBYyxJQUFJLFVBQVUsSUFBSSxTQUFTLElBQUksVUFBVSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lB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R0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLG1CQUFtQixHQUFHLFlBQVksS0FBSyxJQUFJLENBQUM7UUFFbEQsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sZUFBZSxHQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLE9BQU87Z0JBQ0wsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBZTtnQkFDM0MsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHO2FBQ3hCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1lbnQsIENvbW1lbnRMaW5lIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBDaGVja3MgaXNKc2RvY0NvbW1lbnQuXG4gKiBAcGFyYW0gY29tbWVudCBJbnB1dCBjb21tZW50IHZhbHVlLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpc0pzZG9jQ29tbWVudCgpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzSnNkb2NDb21tZW50ID0gKGNvbW1lbnQ6IENvbW1lbnQpOiBib29sZWFuID0+XG4gIGNvbW1lbnQudHlwZSA9PT0gXCJCbG9ja1wiICYmIGNvbW1lbnQudmFsdWUuc3RhcnRzV2l0aChcIipcIik7XG5cbi8qKlxuICogR2V0cyBnZXRDb21tZW50RW5kLlxuICogQHBhcmFtIGNvbW1lbnQgSW5wdXQgY29tbWVudCB2YWx1ZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZ2V0Q29tbWVudEVuZCgpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldENvbW1lbnRFbmQgPSAoY29tbWVudDogQ29tbWVudCk6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGNvbW1lbnRFbmQgPSBjb21tZW50LnJhbmdlPy5bMV07XG5cbiAgcmV0dXJuIHR5cGVvZiBjb21tZW50RW5kID09PSBcIm51bWJlclwiID8gY29tbWVudEVuZCA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogRmluZHMgdGhlIGNsb3Nlc3QgSlNEb2MgY29tbWVudCBiZWZvcmUgYSBub2RlLlxuICogQHBhcmFtIGNvbW1lbnRzIENvbW1lbnQgbGlzdCB0byBzZWFyY2guXG4gKiBAcGFyYW0gbm9kZVN0YXJ0IFN0YXJ0IG9mZnNldCBvZiB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIFRoZSBjbG9zZXN0IEpTRG9jIGNvbW1lbnQgd2hlbiBwcmVzZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNvbW1lbnQgPSBmaW5kQ2xvc2VzdENvbW1lbnQoY29tbWVudHMsIG5vZGVTdGFydCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZmluZENsb3Nlc3RDb21tZW50ID0gKFxuICBjb21tZW50czogQ29tbWVudFtdLFxuICBub2RlU3RhcnQ6IG51bWJlcixcbik6IENvbW1lbnQgfCB1bmRlZmluZWQgPT4ge1xuICBsZXQgY2xvc2VzdDogQ29tbWVudCB8IHVuZGVmaW5lZCA9IHZvaWQgMDtcbiAgbGV0IGNsb3Nlc3RFbmQgPSAtMTtcblxuICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgY29tbWVudHMpIHtcbiAgICBjb25zdCBjb21tZW50RW5kID0gZ2V0Q29tbWVudEVuZChjb21tZW50KTtcbiAgICBjb25zdCBzaG91bGRDb25zaWRlciA9IGlzSnNkb2NDb21tZW50KGNvbW1lbnQpICYmIGNvbW1lbnRFbmQgIT09IHZvaWQgMDtcblxuICAgIGlmIChzaG91bGRDb25zaWRlciAmJiBjb21tZW50RW5kIDw9IG5vZGVTdGFydCAmJiBjb21tZW50RW5kID4gY2xvc2VzdEVuZCkge1xuICAgICAgY2xvc2VzdCA9IGNvbW1lbnQ7XG4gICAgICBjbG9zZXN0RW5kID0gY29tbWVudEVuZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xvc2VzdDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgY2xvc2VzdCBKU0RvYyBjb21tZW50IGZvciBhIG5vZGUuXG4gKiBAcGFyYW0gc291cmNlQ29kZSBTb3VyY2UgY29kZSB3cmFwcGVyLlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVGhlIGNsb3Nlc3QgSlNEb2MgY29tbWVudCB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29tbWVudCA9IGdldEpzZG9jQ29tbWVudChzb3VyY2VDb2RlLCBub2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRKc2RvY0NvbW1lbnQgPSAoXG4gIHNvdXJjZUNvZGU6IFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdLFxuICBub2RlOiBSdWxlLk5vZGUsXG4pOiBDb21tZW50IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgY29tbWVudHMgPSBzb3VyY2VDb2RlLmdldEFsbENvbW1lbnRzKCk7XG4gIGNvbnN0IG5vZGVTdGFydCA9IG5vZGUucmFuZ2U/LlswXTtcblxuICBpZiAoY29tbWVudHMubGVuZ3RoID09PSAwIHx8IHR5cGVvZiBub2RlU3RhcnQgIT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRDbG9zZXN0Q29tbWVudChjb21tZW50cywgbm9kZVN0YXJ0KTtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGZ1bGwgdGV4dCBmb3IgYSBjb21tZW50IHJhbmdlLlxuICogQHBhcmFtIHNvdXJjZUNvZGUgU291cmNlIGNvZGUgd3JhcHBlci5cbiAqIEBwYXJhbSBjb21tZW50IENvbW1lbnQgdG8gcmVhZC5cbiAqIEByZXR1cm5zIENvbW1lbnQgY29udGVudHMgZnJvbSB0aGUgc291cmNlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRleHQgPSBnZXRDb21tZW50VGV4dChzb3VyY2VDb2RlLCBjb21tZW50KTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRDb21tZW50VGV4dCA9IChcbiAgc291cmNlQ29kZTogUnVsZS5SdWxlQ29udGV4dFtcInNvdXJjZUNvZGVcIl0sXG4gIGNvbW1lbnQ6IENvbW1lbnQsXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzdGFydCA9IGNvbW1lbnQucmFuZ2U/LlswXTtcbiAgY29uc3QgZW5kID0gY29tbWVudC5yYW5nZT8uWzFdO1xuXG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGVuZCAhPT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUudGV4dC5zbGljZShzdGFydCwgZW5kKTtcbn07XG5cbi8qKlxuICogR2V0cyBnZXRDb21tZW50TGluZXMuXG4gKiBAcGFyYW0gY29tbWVudFRleHQgSW5wdXQgY29tbWVudFRleHQgdmFsdWUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGdldENvbW1lbnRMaW5lcygpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldENvbW1lbnRMaW5lcyA9IChjb21tZW50VGV4dDogc3RyaW5nKTogQ29tbWVudExpbmVbXSA9PiB7XG4gIGNvbnN0IGxpbmVzID0gY29tbWVudFRleHQuc3BsaXQoL1xccj9cXG4vdSk7XG4gIGNvbnN0IHJlc3VsdHM6IENvbW1lbnRMaW5lW10gPSBbXTtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgY29uc3QgbGluZUVuZCA9IG9mZnNldCArIGxpbmUubGVuZ3RoO1xuICAgIGNvbnN0IG5leHRTbGljZSA9IGNvbW1lbnRUZXh0LnNsaWNlKGxpbmVFbmQsIGxpbmVFbmQgKyAyKTtcbiAgICBjb25zdCBsaW5lQnJlYWtMZW5ndGggPSBuZXh0U2xpY2Uuc3RhcnRzV2l0aChcIlxcclxcblwiKVxuICAgICAgPyAyXG4gICAgICA6IG5leHRTbGljZS5zdGFydHNXaXRoKFwiXFxuXCIpXG4gICAgICAgID8gMVxuICAgICAgICA6IDA7XG5cbiAgICByZXN1bHRzLnB1c2goe1xuICAgICAgZW5kOiBsaW5lRW5kLFxuICAgICAgbGluZUJyZWFrTGVuZ3RoLFxuICAgICAgc3RhcnQ6IG9mZnNldCxcbiAgICAgIHRleHQ6IGxpbmUsXG4gICAgfSk7XG5cbiAgICBvZmZzZXQgPSBsaW5lRW5kICsgbGluZUJyZWFrTGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBhIHJlbW92YWwgcmFuZ2UgZm9yIHRoZSBzcGVjaWZpZWQgY29tbWVudCBsaW5lLlxuICogQHBhcmFtIGNvbW1lbnRTdGFydCBDb21tZW50IHN0YXJ0IG9mZnNldCBpbiB0aGUgc291cmNlLlxuICogQHBhcmFtIGNvbW1lbnRUZXh0IEZ1bGwgY29tbWVudCB0ZXh0LlxuICogQHBhcmFtIGxpbmUgTGluZSBtZXRhZGF0YSBmb3IgdGhlIGNvbW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgcmFuZ2UgdG8gcmVtb3ZlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJhbmdlID0gYnVpbGRSZW1vdmFsUmFuZ2UoMCwgY29tbWVudFRleHQsIGxpbmUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGJ1aWxkUmVtb3ZhbFJhbmdlID0gKFxuICBjb21tZW50U3RhcnQ6IG51bWJlcixcbiAgY29tbWVudFRleHQ6IHN0cmluZyxcbiAgbGluZTogQ29tbWVudExpbmUsXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgaWYgKGxpbmUubGluZUJyZWFrTGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBbXG4gICAgICBjb21tZW50U3RhcnQgKyBsaW5lLnN0YXJ0LFxuICAgICAgY29tbWVudFN0YXJ0ICsgbGluZS5lbmQgKyBsaW5lLmxpbmVCcmVha0xlbmd0aCxcbiAgICBdO1xuICB9XG5cbiAgaWYgKGxpbmUuc3RhcnQgPiAwKSB7XG4gICAgY29uc3QgcHJldmlvdXNDaGFyID0gY29tbWVudFRleHRbbGluZS5zdGFydCAtIDFdO1xuICAgIGNvbnN0IHByZXZpb3VzSXNMaW5lQnJlYWsgPSBwcmV2aW91c0NoYXIgPT09IFwiXFxuXCI7XG5cbiAgICBpZiAocHJldmlvdXNJc0xpbmVCcmVhaykge1xuICAgICAgY29uc3QgbGluZUJyZWFrTGVuZ3RoID1cbiAgICAgICAgbGluZS5zdGFydCA+IDEgJiYgY29tbWVudFRleHRbbGluZS5zdGFydCAtIDJdID09PSBcIlxcclwiID8gMiA6IDE7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBjb21tZW50U3RhcnQgKyBsaW5lLnN0YXJ0IC0gbGluZUJyZWFrTGVuZ3RoLFxuICAgICAgICBjb21tZW50U3RhcnQgKyBsaW5lLmVuZCxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtjb21tZW50U3RhcnQgKyBsaW5lLnN0YXJ0LCBjb21tZW50U3RhcnQgKyBsaW5lLmVuZF07XG59O1xuXG5leHBvcnQgeyBidWlsZFJlbW92YWxSYW5nZSwgZ2V0Q29tbWVudExpbmVzLCBnZXRDb21tZW50VGV4dCwgZ2V0SnNkb2NDb21tZW50IH07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export { noInterfaceMemberDocumentationRule } from "./rule.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/domain/docs/no-interface-member-docs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { noInterfaceMemberDocumentationRule } from "./rule.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2RvY3Mvbm8taW50ZXJmYWNlLW1lbWJlci1kb2NzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG4iXX0=
@@ -1,4 +1,4 @@
1
- import type { CommentLine, ParameterMemberTag } from "./types";
1
+ import type { CommentLine, ParameterMemberTag } from "./types.js";
2
2
  /**
3
3
  * Parses a `@param` tag line into a member tag when applicable.
4
4
  * @param line Comment line metadata.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-tags.d.ts","sourceRoot":"","sources":["../../../../src/domain/docs/no-interface-member-docs/parameter-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAoG/D;;;;;;;;GAQG;AACH,QAAA,MAAM,qBAAqB,GACzB,MAAM,WAAW,KAChB,kBAAkB,GAAG,SAmBvB,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,101 @@
1
+ /** Extracts the parameter name from an `@param` tag line. */
2
+ const parameterTagPattern = /@param\s+(?:\{[^}]*\}\s+)?(?<name>[^\s-]+)/u;
3
+ /**
4
+ * Defines stripJsdocLine.
5
+ * @param line Input line value.
6
+ * @returns Return value output.
7
+ * @example
8
+ * ```typescript
9
+ * stripJsdocLine();
10
+ * ```
11
+ */
12
+ const stripJsdocLine = (line) => line.replace(/^\s*\/?\**\s?/u, "").trim();
13
+ /**
14
+ * Defines stripDefaultValue.
15
+ * @param rawName Input rawName value.
16
+ * @returns Return value output.
17
+ * @example
18
+ * ```typescript
19
+ * stripDefaultValue();
20
+ * ```
21
+ */
22
+ const stripDefaultValue = (rawName) => {
23
+ const [head = ""] = rawName.split("=");
24
+ return head;
25
+ };
26
+ /**
27
+ * Normalizes normalizeParameterName.
28
+ * @param rawName Input rawName value.
29
+ * @returns Return value output.
30
+ * @example
31
+ * ```typescript
32
+ * normalizeParameterName();
33
+ * ```
34
+ */
35
+ const normalizeParameterName = (rawName) => stripDefaultValue(rawName)
36
+ .replace(/^\[/u, "")
37
+ .replace(/\]$/u, "")
38
+ .replace(/\?$/u, "");
39
+ /**
40
+ * Gets getParameterName.
41
+ * @param content Input content value.
42
+ * @returns Return value output.
43
+ * @example
44
+ * ```typescript
45
+ * getParameterName();
46
+ * ```
47
+ */
48
+ const getParameterName = (content) => {
49
+ if (!content.startsWith("@param")) {
50
+ return void 0;
51
+ }
52
+ const match = parameterTagPattern.exec(content);
53
+ const rawName = match?.groups?.["name"] ?? "";
54
+ const normalized = normalizeParameterName(rawName);
55
+ return normalized.length > 0 ? normalized : void 0;
56
+ };
57
+ /**
58
+ * Extracts member path details from a normalized parameter name.
59
+ * @param normalized Normalized parameter name.
60
+ * @returns Member path details when available.
61
+ * @example
62
+ * ```typescript
63
+ * const member = getMemberName("props.title");
64
+ * ```
65
+ */
66
+ const getMemberName = (normalized) => {
67
+ const dotIndex = normalized.indexOf(".");
68
+ if (dotIndex <= 0) {
69
+ return void 0;
70
+ }
71
+ const basename = normalized.slice(0, dotIndex);
72
+ const memberPath = normalized.slice(dotIndex + 1).trim();
73
+ return memberPath.length > 0 ? { basename, memberPath } : void 0;
74
+ };
75
+ /**
76
+ * Parses a `@param` tag line into a member tag when applicable.
77
+ * @param line Comment line metadata.
78
+ * @returns Parsed parameter member tag when present.
79
+ * @example
80
+ * ```typescript
81
+ * const tag = parseParameterTagLine(line);
82
+ * ```
83
+ */
84
+ const parseParameterTagLine = (line) => {
85
+ const content = stripJsdocLine(line.text);
86
+ const normalized = getParameterName(content);
87
+ if (normalized === void 0) {
88
+ return void 0;
89
+ }
90
+ const member = getMemberName(normalized);
91
+ if (member === void 0) {
92
+ return void 0;
93
+ }
94
+ return {
95
+ basename: member.basename,
96
+ fullName: normalized,
97
+ line,
98
+ };
99
+ };
100
+ export { parseParameterTagLine };
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLXRhZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL2RvY3Mvbm8taW50ZXJmYWNlLW1lbWJlci1kb2NzL3BhcmFtZXRlci10YWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLDZEQUE2RDtBQUM3RCxNQUFNLG1CQUFtQixHQUFHLDZDQUE2QyxDQUFDO0FBRTFFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRSxDQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBRTVDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQWUsRUFBVSxFQUFFO0lBQ3BELE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE9BQWUsRUFBVSxFQUFFLENBQ3pELGlCQUFpQixDQUFDLE9BQU8sQ0FBQztLQUN2QixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztLQUNuQixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztLQUNuQixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXpCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQWUsRUFBc0IsRUFBRTtJQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlDLE1BQU0sVUFBVSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5ELE9BQU8sVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUNwQixVQUFrQixFQVNkLEVBQUU7SUFDTixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXpDLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXpELE9BQU8sVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsSUFBaUIsRUFDZSxFQUFFO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFN0MsSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekMsSUFBSSxNQUFNLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPO1FBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLElBQUk7S0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbW1lbnRMaW5lLCBQYXJhbWV0ZXJNZW1iZXJUYWcgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKiogRXh0cmFjdHMgdGhlIHBhcmFtZXRlciBuYW1lIGZyb20gYW4gYEBwYXJhbWAgdGFnIGxpbmUuICovXG5jb25zdCBwYXJhbWV0ZXJUYWdQYXR0ZXJuID0gL0BwYXJhbVxccysoPzpcXHtbXn1dKlxcfVxccyspPyg/PG5hbWU+W15cXHMtXSspL3U7XG5cbi8qKlxuICogRGVmaW5lcyBzdHJpcEpzZG9jTGluZS5cbiAqIEBwYXJhbSBsaW5lIElucHV0IGxpbmUgdmFsdWUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHN0cmlwSnNkb2NMaW5lKCk7XG4gKiBgYGBcbiAqL1xuY29uc3Qgc3RyaXBKc2RvY0xpbmUgPSAobGluZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIGxpbmUucmVwbGFjZSgvXlxccypcXC8/XFwqKlxccz8vdSwgXCJcIikudHJpbSgpO1xuXG4vKipcbiAqIERlZmluZXMgc3RyaXBEZWZhdWx0VmFsdWUuXG4gKiBAcGFyYW0gcmF3TmFtZSBJbnB1dCByYXdOYW1lIHZhbHVlLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzdHJpcERlZmF1bHRWYWx1ZSgpO1xuICogYGBgXG4gKi9cbmNvbnN0IHN0cmlwRGVmYXVsdFZhbHVlID0gKHJhd05hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IFtoZWFkID0gXCJcIl0gPSByYXdOYW1lLnNwbGl0KFwiPVwiKTtcblxuICByZXR1cm4gaGVhZDtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBub3JtYWxpemVQYXJhbWV0ZXJOYW1lLlxuICogQHBhcmFtIHJhd05hbWUgSW5wdXQgcmF3TmFtZSB2YWx1ZS5cbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogbm9ybWFsaXplUGFyYW1ldGVyTmFtZSgpO1xuICogYGBgXG4gKi9cbmNvbnN0IG5vcm1hbGl6ZVBhcmFtZXRlck5hbWUgPSAocmF3TmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIHN0cmlwRGVmYXVsdFZhbHVlKHJhd05hbWUpXG4gICAgLnJlcGxhY2UoL15cXFsvdSwgXCJcIilcbiAgICAucmVwbGFjZSgvXFxdJC91LCBcIlwiKVxuICAgIC5yZXBsYWNlKC9cXD8kL3UsIFwiXCIpO1xuXG4vKipcbiAqIEdldHMgZ2V0UGFyYW1ldGVyTmFtZS5cbiAqIEBwYXJhbSBjb250ZW50IElucHV0IGNvbnRlbnQgdmFsdWUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGdldFBhcmFtZXRlck5hbWUoKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRQYXJhbWV0ZXJOYW1lID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghY29udGVudC5zdGFydHNXaXRoKFwiQHBhcmFtXCIpKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gcGFyYW1ldGVyVGFnUGF0dGVybi5leGVjKGNvbnRlbnQpO1xuICBjb25zdCByYXdOYW1lID0gbWF0Y2g/Lmdyb3Vwcz8uW1wibmFtZVwiXSA/PyBcIlwiO1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUGFyYW1ldGVyTmFtZShyYXdOYW1lKTtcblxuICByZXR1cm4gbm9ybWFsaXplZC5sZW5ndGggPiAwID8gbm9ybWFsaXplZCA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgbWVtYmVyIHBhdGggZGV0YWlscyBmcm9tIGEgbm9ybWFsaXplZCBwYXJhbWV0ZXIgbmFtZS5cbiAqIEBwYXJhbSBub3JtYWxpemVkIE5vcm1hbGl6ZWQgcGFyYW1ldGVyIG5hbWUuXG4gKiBAcmV0dXJucyBNZW1iZXIgcGF0aCBkZXRhaWxzIHdoZW4gYXZhaWxhYmxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1lbWJlciA9IGdldE1lbWJlck5hbWUoXCJwcm9wcy50aXRsZVwiKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRNZW1iZXJOYW1lID0gKFxuICBub3JtYWxpemVkOiBzdHJpbmcsXG4pOlxuICB8IHVuZGVmaW5lZFxuICB8IHtcbiAgICAgIC8qKiBCYXNlbmFtZSBmaWVsZCB2YWx1ZS4gKi9cbiAgICAgIGJhc2VuYW1lOiBzdHJpbmc7XG5cbiAgICAgIC8qKiBNZW1iZXJQYXRoIGZpZWxkIHZhbHVlLiAqL1xuICAgICAgbWVtYmVyUGF0aDogc3RyaW5nO1xuICAgIH0gPT4ge1xuICBjb25zdCBkb3RJbmRleCA9IG5vcm1hbGl6ZWQuaW5kZXhPZihcIi5cIik7XG5cbiAgaWYgKGRvdEluZGV4IDw9IDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgYmFzZW5hbWUgPSBub3JtYWxpemVkLnNsaWNlKDAsIGRvdEluZGV4KTtcbiAgY29uc3QgbWVtYmVyUGF0aCA9IG5vcm1hbGl6ZWQuc2xpY2UoZG90SW5kZXggKyAxKS50cmltKCk7XG5cbiAgcmV0dXJuIG1lbWJlclBhdGgubGVuZ3RoID4gMCA/IHsgYmFzZW5hbWUsIG1lbWJlclBhdGggfSA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogUGFyc2VzIGEgYEBwYXJhbWAgdGFnIGxpbmUgaW50byBhIG1lbWJlciB0YWcgd2hlbiBhcHBsaWNhYmxlLlxuICogQHBhcmFtIGxpbmUgQ29tbWVudCBsaW5lIG1ldGFkYXRhLlxuICogQHJldHVybnMgUGFyc2VkIHBhcmFtZXRlciBtZW1iZXIgdGFnIHdoZW4gcHJlc2VudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB0YWcgPSBwYXJzZVBhcmFtZXRlclRhZ0xpbmUobGluZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcGFyc2VQYXJhbWV0ZXJUYWdMaW5lID0gKFxuICBsaW5lOiBDb21tZW50TGluZSxcbik6IFBhcmFtZXRlck1lbWJlclRhZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBzdHJpcEpzZG9jTGluZShsaW5lLnRleHQpO1xuICBjb25zdCBub3JtYWxpemVkID0gZ2V0UGFyYW1ldGVyTmFtZShjb250ZW50KTtcblxuICBpZiAobm9ybWFsaXplZCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IG1lbWJlciA9IGdldE1lbWJlck5hbWUobm9ybWFsaXplZCk7XG5cbiAgaWYgKG1lbWJlciA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmFzZW5hbWU6IG1lbWJlci5iYXNlbmFtZSxcbiAgICBmdWxsTmFtZTogbm9ybWFsaXplZCxcbiAgICBsaW5lLFxuICB9O1xufTtcblxuZXhwb3J0IHsgcGFyc2VQYXJhbWV0ZXJUYWdMaW5lIH07XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import type { Rule } from "eslint";
2
- import type { TypeAnnotationNode } from "./types";
2
+ import type { TypeAnnotationNode } from "./types.js";
3
3
  /**
4
4
  * Builds a lookup of parameter names to type annotations.
5
5
  * @param node Function-like node.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/docs/no-interface-member-docs/parameter-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AA0KlD;;;;;;;;GAQG;AACH,QAAA,MAAM,sBAAsB,GAC1B,MAAM,IAAI,CAAC,IAAI,KACd,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAYhC,CAAC;AAEF;;;;;;;;GAQG;AACH,QAAA,MAAM,oBAAoB,GACxB,gBAAgB,kBAAkB,GAAG,SAAS,KAC7C,OAAqD,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Gets a type annotation node from an identifier.
3
+ * @param node Identifier node to inspect.
4
+ * @returns The type annotation node when present.
5
+ * @example
6
+ * ```typescript
7
+ * const annotation = getTypeAnnotationNode(identifier);
8
+ * ```
9
+ */
10
+ const getTypeAnnotationNode = (node) => node.typeAnnotation?.typeAnnotation;
11
+ /**
12
+ * Defines resolveParameterNode.
13
+ * @param node Input node value.
14
+ * @returns Return value output.
15
+ * @example
16
+ * ```typescript
17
+ * resolveParameterNode();
18
+ * ```
19
+ */
20
+ const resolveParameterNode = (node) => {
21
+ if (node === null || typeof node !== "object") {
22
+ return node;
23
+ }
24
+ const container = node;
25
+ if (container.argument !== void 0) {
26
+ return container.argument;
27
+ }
28
+ if (container.parameter !== void 0) {
29
+ return container.parameter;
30
+ }
31
+ if (container.type === "AssignmentPattern" && container.left !== void 0) {
32
+ return container.left;
33
+ }
34
+ return node;
35
+ };
36
+ /**
37
+ * Gets the parameter identifier for a parameter node.
38
+ * @param node Parameter node to inspect.
39
+ * @returns The identifier node when present.
40
+ * @example
41
+ * ```typescript
42
+ * const identifier = getParameterIdentifier(node);
43
+ * ```
44
+ */
45
+ const getParameterIdentifier = (node) => {
46
+ const resolved = resolveParameterNode(node);
47
+ if (resolved === null || typeof resolved !== "object") {
48
+ return void 0;
49
+ }
50
+ const identifier = resolved;
51
+ const { name } = identifier;
52
+ if (identifier.type !== "Identifier" || typeof name !== "string") {
53
+ return void 0;
54
+ }
55
+ return { ...identifier, name };
56
+ };
57
+ /**
58
+ * Gets parameter info for the given node.
59
+ * @param node Parameter node to inspect.
60
+ * @returns Parameter info when available.
61
+ * @example
62
+ * ```typescript
63
+ * const info = getParameterInfo(node);
64
+ * ```
65
+ */
66
+ const getParameterInfo = (node) => {
67
+ const identifier = getParameterIdentifier(node);
68
+ if (identifier === void 0) {
69
+ return void 0;
70
+ }
71
+ const typeAnnotation = getTypeAnnotationNode(identifier);
72
+ return typeAnnotation === void 0
73
+ ? { name: identifier.name }
74
+ : {
75
+ name: identifier.name,
76
+ typeAnnotation,
77
+ };
78
+ };
79
+ /**
80
+ * Gets getParameters.
81
+ * @param node Input node value.
82
+ * @returns Return value output.
83
+ * @example
84
+ * ```typescript
85
+ * getParameters();
86
+ * ```
87
+ */
88
+ const getParameters = (node) => {
89
+ if (node === null || typeof node !== "object") {
90
+ return [];
91
+ }
92
+ const typedNode = node;
93
+ return Array.isArray(typedNode.params) ? typedNode.params : [];
94
+ };
95
+ /**
96
+ * Builds a lookup of parameter names to type annotations.
97
+ * @param node Function-like node.
98
+ * @returns Lookup of parameter names to annotations.
99
+ * @example
100
+ * ```typescript
101
+ * const lookup = getParameterTypeLookup(node);
102
+ * ```
103
+ */
104
+ const getParameterTypeLookup = (node) => {
105
+ const lookup = new Map();
106
+ for (const parameter of getParameters(node)) {
107
+ const info = getParameterInfo(parameter);
108
+ if (info !== void 0 && info.typeAnnotation !== void 0) {
109
+ lookup.set(info.name, info.typeAnnotation);
110
+ }
111
+ }
112
+ return lookup;
113
+ };
114
+ /**
115
+ * Checks whether a type annotation is a named type reference.
116
+ * @param typeAnnotation Type annotation to inspect.
117
+ * @returns True when the annotation is a named reference.
118
+ * @example
119
+ * ```typescript
120
+ * const ok = isNamedTypeReference(annotation);
121
+ * ```
122
+ */
123
+ const isNamedTypeReference = (typeAnnotation) => typeAnnotation?.type === "TSTypeReference";
124
+ export { getParameterTypeLookup, isNamedTypeReference };
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vZG9jcy9uby1pbnRlcmZhY2UtbWVtYmVyLWRvY3MvcGFyYW1ldGVyLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1REE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQzVCLElBQW9CLEVBQ1ksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO0FBRXpFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQWEsRUFBVyxFQUFFO0lBQ3RELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUEwQixDQUFDO0lBRTdDLElBQUksU0FBUyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hFLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsQ0FDN0IsSUFBYSxFQUNvQixFQUFFO0lBQ25DLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVDLElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0RCxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxRQUEwQixDQUFDO0lBQzlDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFFNUIsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRSxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPLEVBQUUsR0FBRyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBYSxFQUE2QixFQUFFO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWhELElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekQsT0FBTyxjQUFjLEtBQUssS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFO1FBQzNCLENBQUMsQ0FBQztZQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixjQUFjO1NBQ2YsQ0FBQztBQUNSLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFhLEVBQWEsRUFBRTtJQUNqRCxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBd0IsQ0FBQztJQUUzQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQzdCLElBQWUsRUFDa0IsRUFBRTtJQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztJQUVyRCxLQUFLLE1BQU0sU0FBUyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQzNCLGNBQThDLEVBQ3JDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxLQUFLLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgdHlwZSB7IFR5cGVBbm5vdGF0aW9uTm9kZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBGdW5jdGlvbkxpa2VOb2RlIHtcbiAgLyoqIFBhcmFtcyBoZWxwZXIgdmFsdWUuICovXG4gIHBhcmFtcz86IHVua25vd25bXTtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIElkZW50aWZpZXJOb2RlIHtcbiAgLyoqIE5hbWUgaGVscGVyIHZhbHVlLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBUeXBlIGhlbHBlciB2YWx1ZS4gKi9cbiAgdHlwZT86IHN0cmluZztcblxuICAvKiogVHlwZUFubm90YXRpb24gaGVscGVyIHZhbHVlLiAqL1xuICB0eXBlQW5ub3RhdGlvbj86IHtcbiAgICAvKiogVHlwZUFubm90YXRpb24gaGVscGVyIHZhbHVlLiAqL1xuICAgIHR5cGVBbm5vdGF0aW9uPzogVHlwZUFubm90YXRpb25Ob2RlO1xuICB9O1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgTmFtZWRJZGVudGlmaWVyTm9kZSBleHRlbmRzIElkZW50aWZpZXJOb2RlIHtcbiAgLyoqIE5hbWUgZmllbGQgdmFsdWUuICovXG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFBhcmFtZXRlckNvbnRhaW5lciB7XG4gIC8qKiBBcmd1bWVudCBoZWxwZXIgdmFsdWUuICovXG4gIGFyZ3VtZW50PzogdW5rbm93bjtcblxuICAvKiogTGVmdCBoZWxwZXIgdmFsdWUuICovXG4gIGxlZnQ/OiB1bmtub3duO1xuXG4gIC8qKiBQYXJhbWV0ZXIgaGVscGVyIHZhbHVlLiAqL1xuICBwYXJhbWV0ZXI/OiB1bmtub3duO1xuXG4gIC8qKiBUeXBlIGhlbHBlciB2YWx1ZS4gKi9cbiAgdHlwZT86IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFBhcmFtZXRlckluZm8ge1xuICAvKiogTmFtZSBmaWVsZCB2YWx1ZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBUeXBlQW5ub3RhdGlvbiBoZWxwZXIgdmFsdWUuICovXG4gIHR5cGVBbm5vdGF0aW9uPzogVHlwZUFubm90YXRpb25Ob2RlO1xufVxuXG4vKipcbiAqIEdldHMgYSB0eXBlIGFubm90YXRpb24gbm9kZSBmcm9tIGFuIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0gbm9kZSBJZGVudGlmaWVyIG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRoZSB0eXBlIGFubm90YXRpb24gbm9kZSB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYW5ub3RhdGlvbiA9IGdldFR5cGVBbm5vdGF0aW9uTm9kZShpZGVudGlmaWVyKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRUeXBlQW5ub3RhdGlvbk5vZGUgPSAoXG4gIG5vZGU6IElkZW50aWZpZXJOb2RlLFxuKTogVHlwZUFubm90YXRpb25Ob2RlIHwgdW5kZWZpbmVkID0+IG5vZGUudHlwZUFubm90YXRpb24/LnR5cGVBbm5vdGF0aW9uO1xuXG4vKipcbiAqIERlZmluZXMgcmVzb2x2ZVBhcmFtZXRlck5vZGUuXG4gKiBAcGFyYW0gbm9kZSBJbnB1dCBub2RlIHZhbHVlLlxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXNvbHZlUGFyYW1ldGVyTm9kZSgpO1xuICogYGBgXG4gKi9cbmNvbnN0IHJlc29sdmVQYXJhbWV0ZXJOb2RlID0gKG5vZGU6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgdHlwZW9mIG5vZGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IG5vZGUgYXMgUGFyYW1ldGVyQ29udGFpbmVyO1xuXG4gIGlmIChjb250YWluZXIuYXJndW1lbnQgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiBjb250YWluZXIuYXJndW1lbnQ7XG4gIH1cblxuICBpZiAoY29udGFpbmVyLnBhcmFtZXRlciAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5wYXJhbWV0ZXI7XG4gIH1cblxuICBpZiAoY29udGFpbmVyLnR5cGUgPT09IFwiQXNzaWdubWVudFBhdHRlcm5cIiAmJiBjb250YWluZXIubGVmdCAhPT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5sZWZ0O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmFtZXRlciBpZGVudGlmaWVyIGZvciBhIHBhcmFtZXRlciBub2RlLlxuICogQHBhcmFtIG5vZGUgUGFyYW1ldGVyIG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRoZSBpZGVudGlmaWVyIG5vZGUgd2hlbiBwcmVzZW50LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGlkZW50aWZpZXIgPSBnZXRQYXJhbWV0ZXJJZGVudGlmaWVyKG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFBhcmFtZXRlcklkZW50aWZpZXIgPSAoXG4gIG5vZGU6IHVua25vd24sXG4pOiBOYW1lZElkZW50aWZpZXJOb2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUGFyYW1ldGVyTm9kZShub2RlKTtcblxuICBpZiAocmVzb2x2ZWQgPT09IG51bGwgfHwgdHlwZW9mIHJlc29sdmVkICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IGlkZW50aWZpZXIgPSByZXNvbHZlZCBhcyBJZGVudGlmaWVyTm9kZTtcbiAgY29uc3QgeyBuYW1lIH0gPSBpZGVudGlmaWVyO1xuXG4gIGlmIChpZGVudGlmaWVyLnR5cGUgIT09IFwiSWRlbnRpZmllclwiIHx8IHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiB7IC4uLmlkZW50aWZpZXIsIG5hbWUgfTtcbn07XG5cbi8qKlxuICogR2V0cyBwYXJhbWV0ZXIgaW5mbyBmb3IgdGhlIGdpdmVuIG5vZGUuXG4gKiBAcGFyYW0gbm9kZSBQYXJhbWV0ZXIgbm9kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgUGFyYW1ldGVyIGluZm8gd2hlbiBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaW5mbyA9IGdldFBhcmFtZXRlckluZm8obm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0UGFyYW1ldGVySW5mbyA9IChub2RlOiB1bmtub3duKTogUGFyYW1ldGVySW5mbyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBnZXRQYXJhbWV0ZXJJZGVudGlmaWVyKG5vZGUpO1xuXG4gIGlmIChpZGVudGlmaWVyID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgdHlwZUFubm90YXRpb24gPSBnZXRUeXBlQW5ub3RhdGlvbk5vZGUoaWRlbnRpZmllcik7XG5cbiAgcmV0dXJuIHR5cGVBbm5vdGF0aW9uID09PSB2b2lkIDBcbiAgICA/IHsgbmFtZTogaWRlbnRpZmllci5uYW1lIH1cbiAgICA6IHtcbiAgICAgICAgbmFtZTogaWRlbnRpZmllci5uYW1lLFxuICAgICAgICB0eXBlQW5ub3RhdGlvbixcbiAgICAgIH07XG59O1xuXG4vKipcbiAqIEdldHMgZ2V0UGFyYW1ldGVycy5cbiAqIEBwYXJhbSBub2RlIElucHV0IG5vZGUgdmFsdWUuXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGdldFBhcmFtZXRlcnMoKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRQYXJhbWV0ZXJzID0gKG5vZGU6IHVua25vd24pOiB1bmtub3duW10gPT4ge1xuICBpZiAobm9kZSA9PT0gbnVsbCB8fCB0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVkTm9kZSA9IG5vZGUgYXMgRnVuY3Rpb25MaWtlTm9kZTtcblxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0eXBlZE5vZGUucGFyYW1zKSA/IHR5cGVkTm9kZS5wYXJhbXMgOiBbXTtcbn07XG5cbi8qKlxuICogQnVpbGRzIGEgbG9va3VwIG9mIHBhcmFtZXRlciBuYW1lcyB0byB0eXBlIGFubm90YXRpb25zLlxuICogQHBhcmFtIG5vZGUgRnVuY3Rpb24tbGlrZSBub2RlLlxuICogQHJldHVybnMgTG9va3VwIG9mIHBhcmFtZXRlciBuYW1lcyB0byBhbm5vdGF0aW9ucy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBsb29rdXAgPSBnZXRQYXJhbWV0ZXJUeXBlTG9va3VwKG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldFBhcmFtZXRlclR5cGVMb29rdXAgPSAoXG4gIG5vZGU6IFJ1bGUuTm9kZSxcbik6IE1hcDxzdHJpbmcsIFR5cGVBbm5vdGF0aW9uTm9kZT4gPT4ge1xuICBjb25zdCBsb29rdXAgPSBuZXcgTWFwPHN0cmluZywgVHlwZUFubm90YXRpb25Ob2RlPigpO1xuXG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGdldFBhcmFtZXRlcnMobm9kZSkpIHtcbiAgICBjb25zdCBpbmZvID0gZ2V0UGFyYW1ldGVySW5mbyhwYXJhbWV0ZXIpO1xuXG4gICAgaWYgKGluZm8gIT09IHZvaWQgMCAmJiBpbmZvLnR5cGVBbm5vdGF0aW9uICE9PSB2b2lkIDApIHtcbiAgICAgIGxvb2t1cC5zZXQoaW5mby5uYW1lLCBpbmZvLnR5cGVBbm5vdGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9va3VwO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHR5cGUgYW5ub3RhdGlvbiBpcyBhIG5hbWVkIHR5cGUgcmVmZXJlbmNlLlxuICogQHBhcmFtIHR5cGVBbm5vdGF0aW9uIFR5cGUgYW5ub3RhdGlvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBhbm5vdGF0aW9uIGlzIGEgbmFtZWQgcmVmZXJlbmNlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9rID0gaXNOYW1lZFR5cGVSZWZlcmVuY2UoYW5ub3RhdGlvbik7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNOYW1lZFR5cGVSZWZlcmVuY2UgPSAoXG4gIHR5cGVBbm5vdGF0aW9uOiBUeXBlQW5ub3RhdGlvbk5vZGUgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuID0+IHR5cGVBbm5vdGF0aW9uPy50eXBlID09PSBcIlRTVHlwZVJlZmVyZW5jZVwiO1xuXG5leHBvcnQgeyBnZXRQYXJhbWV0ZXJUeXBlTG9va3VwLCBpc05hbWVkVHlwZVJlZmVyZW5jZSB9O1xuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/docs/no-interface-member-docs/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAgPnC,+EAA+E;AAC/E,QAAA,MAAM,kCAAkC,EAAE,IAAI,CAAC,UAgC9C,CAAC;AAEF,OAAO,EAAE,kCAAkC,EAAE,CAAC"}
@@ -0,0 +1,171 @@
1
+ import { buildRemovalRange, getCommentLines, getCommentText, getJsdocComment, } from "./comment-utilities.js";
2
+ import { parseParameterTagLine } from "./parameter-tags.js";
3
+ import { getParameterTypeLookup, isNamedTypeReference, } from "./parameter-utilities.js";
4
+ /**
5
+ * Checks whether a parameter member tag matches a named type reference.
6
+ * @param tag Parsed parameter member tag.
7
+ * @param parameterTypes Parameter type lookup.
8
+ * @returns True when the tag matches a named type reference.
9
+ * @example
10
+ * ```typescript
11
+ * const ok = isMatchingMemberTag(tag, parameterTypes);
12
+ * ```
13
+ */
14
+ const isMatchingMemberTag = (tag, parameterTypes) => {
15
+ if (tag === void 0) {
16
+ return false;
17
+ }
18
+ const parameterType = parameterTypes.get(tag.basename);
19
+ return isNamedTypeReference(parameterType);
20
+ };
21
+ /**
22
+ * Collects member tags from a JSDoc comment.
23
+ * @param commentText Full comment text.
24
+ * @param parameterTypes Parameter type lookup.
25
+ * @returns Member tags that match named type references.
26
+ * @example
27
+ * ```typescript
28
+ * const tags = collectMemberTags(commentText, parameterTypes);
29
+ * ```
30
+ */
31
+ const collectMemberTags = (commentText, parameterTypes) => getCommentLines(commentText)
32
+ .map((line) => parseParameterTagLine(line))
33
+ .filter((tag) => isMatchingMemberTag(tag, parameterTypes));
34
+ /**
35
+ * Reports interface member documentation entries for removal.
36
+ * @param context Rule execution context.
37
+ * @param details Collected rule details.
38
+ * @example
39
+ * ```typescript
40
+ * reportMemberDocumentation(context, details);
41
+ * ```
42
+ */
43
+ const reportMemberDocumentation = (context, details) => {
44
+ const { commentStart, commentText, memberTags, node } = details;
45
+ for (const tag of memberTags) {
46
+ const removalRange = buildRemovalRange(commentStart, commentText, tag.line);
47
+ context.report({
48
+ data: { parameterName: tag.fullName },
49
+ fix: (fixer) => fixer.removeRange(removalRange),
50
+ messageId: "interfaceMemberDoc",
51
+ node,
52
+ });
53
+ }
54
+ };
55
+ /**
56
+ * Gets parameter type references for a node.
57
+ * @param node Function-like node to inspect.
58
+ * @returns Parameter type lookup when present.
59
+ * @example
60
+ * ```typescript
61
+ * const lookup = getParameterTypes(node);
62
+ * ```
63
+ */
64
+ const getParameterTypes = (node) => {
65
+ const parameterTypes = getParameterTypeLookup(node);
66
+ return parameterTypes.size > 0 ? parameterTypes : void 0;
67
+ };
68
+ /**
69
+ * Resolves the JSDoc comment data for a node.
70
+ * @param sourceCode SourceCode wrapper.
71
+ * @param node Node to inspect.
72
+ * @returns JSDoc data when available.
73
+ * @example
74
+ * ```typescript
75
+ * const data = getJsdocData(sourceCode, node);
76
+ * ```
77
+ */
78
+ const getJsdocData = (sourceCode, node) => {
79
+ const comment = getJsdocComment(sourceCode, node);
80
+ if (comment === void 0) {
81
+ return void 0;
82
+ }
83
+ const commentStart = comment.range?.[0];
84
+ if (typeof commentStart !== "number") {
85
+ return void 0;
86
+ }
87
+ const text = getCommentText(sourceCode, comment);
88
+ return { comment, commentStart, text };
89
+ };
90
+ /**
91
+ * Resolves the member tag context for a node.
92
+ * @param context Rule execution context.
93
+ * @param node Node to inspect.
94
+ * @returns Member tag context when available.
95
+ * @example
96
+ * ```typescript
97
+ * const context = resolveMemberTagContext(context, node);
98
+ * ```
99
+ */
100
+ const resolveMemberTagContext = (context, node) => {
101
+ const parameterTypes = getParameterTypes(node);
102
+ const jsdocData = getJsdocData(context.sourceCode, node);
103
+ if (parameterTypes === void 0 || jsdocData === void 0) {
104
+ return void 0;
105
+ }
106
+ const memberTags = collectMemberTags(jsdocData.text, parameterTypes);
107
+ return memberTags.length > 0
108
+ ? {
109
+ comment: jsdocData.comment,
110
+ commentStart: jsdocData.commentStart,
111
+ commentText: jsdocData.text,
112
+ memberTags,
113
+ }
114
+ : void 0;
115
+ };
116
+ /**
117
+ * Handles function-like nodes for this rule.
118
+ * @param context Rule execution context.
119
+ * @param node Node to inspect.
120
+ * @example
121
+ * ```typescript
122
+ * handleFunctionLike(context, node);
123
+ * ```
124
+ */
125
+ const handleFunctionLike = (context, node) => {
126
+ const resolved = resolveMemberTagContext(context, node);
127
+ if (resolved === void 0) {
128
+ return;
129
+ }
130
+ reportMemberDocumentation(context, {
131
+ comment: resolved.comment,
132
+ commentStart: resolved.commentStart,
133
+ commentText: resolved.commentText,
134
+ memberTags: resolved.memberTags,
135
+ node,
136
+ sourceCode: context.sourceCode,
137
+ });
138
+ };
139
+ /** ESLint rule disallowing interface member documentation in `@param` tags. */
140
+ const noInterfaceMemberDocumentationRule = {
141
+ create(context) {
142
+ const listener = (node) => {
143
+ handleFunctionLike(context, node);
144
+ };
145
+ return {
146
+ ArrowFunctionExpression: listener,
147
+ FunctionDeclaration: listener,
148
+ FunctionExpression: listener,
149
+ TSCallSignatureDeclaration: listener,
150
+ TSConstructSignatureDeclaration: listener,
151
+ TSDeclareFunction: listener,
152
+ TSFunctionType: listener,
153
+ TSMethodSignature: listener,
154
+ };
155
+ },
156
+ meta: {
157
+ docs: {
158
+ description: "Disallow documenting interface members in @param tags; document them on the interface instead.",
159
+ recommended: false,
160
+ url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/no-interface-member-docs.md",
161
+ },
162
+ fixable: "code",
163
+ messages: {
164
+ interfaceMemberDoc: "Document interface members on the interface instead of using @param for {{parameterName}}.",
165
+ },
166
+ schema: [],
167
+ type: "problem",
168
+ },
169
+ };
170
+ export { noInterfaceMemberDocumentationRule };
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vZG9jcy9uby1pbnRlcmZhY2UtbWVtYmVyLWRvY3MvcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEVBQ2QsZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsb0JBQW9CLEdBQ3JCLE1BQU0sdUJBQXVCLENBQUM7QUF1Qi9COzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsR0FBbUMsRUFDbkMsY0FBK0MsRUFDcEIsRUFBRTtJQUM3QixJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXZELE9BQU8sb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixXQUFtQixFQUNuQixjQUErQyxFQUN6QixFQUFFLENBQ3hCLGVBQWUsQ0FBQyxXQUFXLENBQUM7S0FDekIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRS9EOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxDQUNoQyxPQUF5QixFQUN6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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWVudCwgUGFyYW1ldGVyTWVtYmVyVGFnLCBUeXBlQW5ub3RhdGlvbk5vZGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbXBvcnQge1xuICBidWlsZFJlbW92YWxSYW5nZSxcbiAgZ2V0Q29tbWVudExpbmVzLFxuICBnZXRDb21tZW50VGV4dCxcbiAgZ2V0SnNkb2NDb21tZW50LFxufSBmcm9tIFwiLi9jb21tZW50LXV0aWxpdGllc1wiO1xuaW1wb3J0IHsgcGFyc2VQYXJhbWV0ZXJUYWdMaW5lIH0gZnJvbSBcIi4vcGFyYW1ldGVyLXRhZ3NcIjtcbmltcG9ydCB7XG4gIGdldFBhcmFtZXRlclR5cGVMb29rdXAsXG4gIGlzTmFtZWRUeXBlUmVmZXJlbmNlLFxufSBmcm9tIFwiLi9wYXJhbWV0ZXItdXRpbGl0aWVzXCI7XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBSZXBvcnRNZW1iZXJEb2N1bWVudGF0aW9uQ29udGV4dCB7XG4gIC8qKiBDb21tZW50IGZpZWxkIHZhbHVlLiAqL1xuICBjb21tZW50OiBDb21tZW50O1xuXG4gIC8qKiBDb21tZW50U3RhcnQgZmllbGQgdmFsdWUuICovXG4gIGNvbW1lbnRTdGFydDogbnVtYmVyO1xuXG4gIC8qKiBDb21tZW50VGV4dCBmaWVsZCB2YWx1ZS4gKi9cbiAgY29tbWVudFRleHQ6IHN0cmluZztcblxuICAvKiogTWVtYmVyVGFncyBmaWVsZCB2YWx1ZS4gKi9cbiAgbWVtYmVyVGFnczogUGFyYW1ldGVyTWVtYmVyVGFnW107XG5cbiAgLyoqIE5vZGUgZmllbGQgdmFsdWUuICovXG4gIG5vZGU6IFJ1bGUuTm9kZTtcblxuICAvKiogU291cmNlQ29kZSBmaWVsZCB2YWx1ZS4gKi9cbiAgc291cmNlQ29kZTogUnVsZS5SdWxlQ29udGV4dFtcInNvdXJjZUNvZGVcIl07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBwYXJhbWV0ZXIgbWVtYmVyIHRhZyBtYXRjaGVzIGEgbmFtZWQgdHlwZSByZWZlcmVuY2UuXG4gKiBAcGFyYW0gdGFnIFBhcnNlZCBwYXJhbWV0ZXIgbWVtYmVyIHRhZy5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJUeXBlcyBQYXJhbWV0ZXIgdHlwZSBsb29rdXAuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHRhZyBtYXRjaGVzIGEgbmFtZWQgdHlwZSByZWZlcmVuY2UuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgb2sgPSBpc01hdGNoaW5nTWVtYmVyVGFnKHRhZywgcGFyYW1ldGVyVHlwZXMpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzTWF0Y2hpbmdNZW1iZXJUYWcgPSAoXG4gIHRhZzogUGFyYW1ldGVyTWVtYmVyVGFnIHwgdW5kZWZpbmVkLFxuICBwYXJhbWV0ZXJUeXBlczogTWFwPHN0cmluZywgVHlwZUFubm90YXRpb25Ob2RlPixcbik6IHRhZyBpcyBQYXJhbWV0ZXJNZW1iZXJUYWcgPT4ge1xuICBpZiAodGFnID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyVHlwZXMuZ2V0KHRhZy5iYXNlbmFtZSk7XG5cbiAgcmV0dXJuIGlzTmFtZWRUeXBlUmVmZXJlbmNlKHBhcmFtZXRlclR5cGUpO1xufTtcblxuLyoqXG4gKiBDb2xsZWN0cyBtZW1iZXIgdGFncyBmcm9tIGEgSlNEb2MgY29tbWVudC5cbiAqIEBwYXJhbSBjb21tZW50VGV4dCBGdWxsIGNvbW1lbnQgdGV4dC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJUeXBlcyBQYXJhbWV0ZXIgdHlwZSBsb29rdXAuXG4gKiBAcmV0dXJucyBNZW1iZXIgdGFncyB0aGF0IG1hdGNoIG5hbWVkIHR5cGUgcmVmZXJlbmNlcy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB0YWdzID0gY29sbGVjdE1lbWJlclRhZ3MoY29tbWVudFRleHQsIHBhcmFtZXRlclR5cGVzKTtcbiAqIGBgYFxuICovXG5jb25zdCBjb2xsZWN0TWVtYmVyVGFncyA9IChcbiAgY29tbWVudFRleHQ6IHN0cmluZyxcbiAgcGFyYW1ldGVyVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVBbm5vdGF0aW9uTm9kZT4sXG4pOiBQYXJhbWV0ZXJNZW1iZXJUYWdbXSA9PlxuICBnZXRDb21tZW50TGluZXMoY29tbWVudFRleHQpXG4gICAgLm1hcCgobGluZSkgPT4gcGFyc2VQYXJhbWV0ZXJUYWdMaW5lKGxpbmUpKVxuICAgIC5maWx0ZXIoKHRhZykgPT4gaXNNYXRjaGluZ01lbWJlclRhZyh0YWcsIHBhcmFtZXRlclR5cGVzKSk7XG5cbi8qKlxuICogUmVwb3J0cyBpbnRlcmZhY2UgbWVtYmVyIGRvY3VtZW50YXRpb24gZW50cmllcyBmb3IgcmVtb3ZhbC5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gZGV0YWlscyBDb2xsZWN0ZWQgcnVsZSBkZXRhaWxzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydE1lbWJlckRvY3VtZW50YXRpb24oY29udGV4dCwgZGV0YWlscyk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcmVwb3J0TWVtYmVyRG9jdW1lbnRhdGlvbiA9IChcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgZGV0YWlsczogUmVwb3J0TWVtYmVyRG9jdW1lbnRhdGlvbkNvbnRleHQsXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgeyBjb21tZW50U3RhcnQsIGNvbW1lbnRUZXh0LCBtZW1iZXJUYWdzLCBub2RlIH0gPSBkZXRhaWxzO1xuXG4gIGZvciAoY29uc3QgdGFnIG9mIG1lbWJlclRhZ3MpIHtcbiAgICBjb25zdCByZW1vdmFsUmFuZ2UgPSBidWlsZFJlbW92YWxSYW5nZShjb21tZW50U3RhcnQsIGNvbW1lbnRUZXh0LCB0YWcubGluZSk7XG5cbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IHBhcmFtZXRlck5hbWU6IHRhZy5mdWxsTmFtZSB9LFxuICAgICAgZml4OiAoZml4ZXI6IFJ1bGUuUnVsZUZpeGVyKTogUnVsZS5GaXggPT4gZml4ZXIucmVtb3ZlUmFuZ2UocmVtb3ZhbFJhbmdlKSxcbiAgICAgIG1lc3NhZ2VJZDogXCJpbnRlcmZhY2VNZW1iZXJEb2NcIixcbiAgICAgIG5vZGUsXG4gICAgfSk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0cyBwYXJhbWV0ZXIgdHlwZSByZWZlcmVuY2VzIGZvciBhIG5vZGUuXG4gKiBAcGFyYW0gbm9kZSBGdW5jdGlvbi1saWtlIG5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFBhcmFtZXRlciB0eXBlIGxvb2t1cCB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbG9va3VwID0gZ2V0UGFyYW1ldGVyVHlwZXMobm9kZSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgZ2V0UGFyYW1ldGVyVHlwZXMgPSAoXG4gIG5vZGU6IFJ1bGUuTm9kZSxcbik6IE1hcDxzdHJpbmcsIFR5cGVBbm5vdGF0aW9uTm9kZT4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBwYXJhbWV0ZXJUeXBlcyA9IGdldFBhcmFtZXRlclR5cGVMb29rdXAobm9kZSk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlclR5cGVzLnNpemUgPiAwID8gcGFyYW1ldGVyVHlwZXMgOiB2b2lkIDA7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBKU0RvYyBjb21tZW50IGRhdGEgZm9yIGEgbm9kZS5cbiAqIEBwYXJhbSBzb3VyY2VDb2RlIFNvdXJjZUNvZGUgd3JhcHBlci5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIEpTRG9jIGRhdGEgd2hlbiBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZGF0YSA9IGdldEpzZG9jRGF0YShzb3VyY2VDb2RlLCBub2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBnZXRKc2RvY0RhdGEgPSAoXG4gIHNvdXJjZUNvZGU6IFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdLFxuICBub2RlOiBSdWxlLk5vZGUsXG4pOlxuICB8IHVuZGVmaW5lZFxuICB8IHtcbiAgICAgIC8qKiBDb21tZW50IGZpZWxkIHZhbHVlLiAqL1xuICAgICAgY29tbWVudDogQ29tbWVudDtcblxuICAgICAgLyoqIENvbW1lbnRTdGFydCBmaWVsZCB2YWx1ZS4gKi9cbiAgICAgIGNvbW1lbnRTdGFydDogbnVtYmVyO1xuXG4gICAgICAvKiogVGV4dCBmaWVsZCB2YWx1ZS4gKi9cbiAgICAgIHRleHQ6IHN0cmluZztcbiAgICB9ID0+IHtcbiAgY29uc3QgY29tbWVudCA9IGdldEpzZG9jQ29tbWVudChzb3VyY2VDb2RlLCBub2RlKTtcblxuICBpZiAoY29tbWVudCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IGNvbW1lbnRTdGFydCA9IGNvbW1lbnQucmFuZ2U/LlswXTtcblxuICBpZiAodHlwZW9mIGNvbW1lbnRTdGFydCAhPT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCB0ZXh0ID0gZ2V0Q29tbWVudFRleHQoc291cmNlQ29kZSwgY29tbWVudCk7XG5cbiAgcmV0dXJuIHsgY29tbWVudCwgY29tbWVudFN0YXJ0LCB0ZXh0IH07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBtZW1iZXIgdGFnIGNvbnRleHQgZm9yIGEgbm9kZS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBNZW1iZXIgdGFnIGNvbnRleHQgd2hlbiBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29udGV4dCA9IHJlc29sdmVNZW1iZXJUYWdDb250ZXh0KGNvbnRleHQsIG5vZGUpO1xuICogYGBgXG4gKi9cbmNvbnN0IHJlc29sdmVNZW1iZXJUYWdDb250ZXh0ID0gKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBub2RlOiBSdWxlLk5vZGUsXG4pOlxuICB8IHVuZGVmaW5lZFxuICB8IHtcbiAgICAgIC8qKiBDb21tZW50IGZpZWxkIHZhbHVlLiAqL1xuICAgICAgY29tbWVudDogQ29tbWVudDtcblxuICAgICAgLyoqIENvbW1lbnRTdGFydCBmaWVsZCB2YWx1ZS4gKi9cbiAgICAgIGNvbW1lbnRTdGFydDogbnVtYmVyO1xuXG4gICAgICAvKiogQ29tbWVudFRleHQgZmllbGQgdmFsdWUuICovXG4gICAgICBjb21tZW50VGV4dDogc3RyaW5nO1xuXG4gICAgICAvKiogTWVtYmVyVGFncyBmaWVsZCB2YWx1ZS4gKi9cbiAgICAgIG1lbWJlclRhZ3M6IFBhcmFtZXRlck1lbWJlclRhZ1tdO1xuICAgIH0gPT4ge1xuICBjb25zdCBwYXJhbWV0ZXJUeXBlcyA9IGdldFBhcmFtZXRlclR5cGVzKG5vZGUpO1xuICBjb25zdCBqc2RvY0RhdGEgPSBnZXRKc2RvY0RhdGEoY29udGV4dC5zb3VyY2VDb2RlLCBub2RlKTtcblxuICBpZiAocGFyYW1ldGVyVHlwZXMgPT09IHZvaWQgMCB8fCBqc2RvY0RhdGEgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCBtZW1iZXJUYWdzID0gY29sbGVjdE1lbWJlclRhZ3MoanNkb2NEYXRhLnRleHQsIHBhcmFtZXRlclR5cGVzKTtcblxuICByZXR1cm4gbWVtYmVyVGFncy5sZW5ndGggPiAwXG4gICAgPyB7XG4gICAgICAgIGNvbW1lbnQ6IGpzZG9jRGF0YS5jb21tZW50LFxuICAgICAgICBjb21tZW50U3RhcnQ6IGpzZG9jRGF0YS5jb21tZW50U3RhcnQsXG4gICAgICAgIGNvbW1lbnRUZXh0OiBqc2RvY0RhdGEudGV4dCxcbiAgICAgICAgbWVtYmVyVGFncyxcbiAgICAgIH1cbiAgICA6IHZvaWQgMDtcbn07XG5cbi8qKlxuICogSGFuZGxlcyBmdW5jdGlvbi1saWtlIG5vZGVzIGZvciB0aGlzIHJ1bGUuXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGV4ZWN1dGlvbiBjb250ZXh0LlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBpbnNwZWN0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGhhbmRsZUZ1bmN0aW9uTGlrZShjb250ZXh0LCBub2RlKTtcbiAqIGBgYFxuICovXG5jb25zdCBoYW5kbGVGdW5jdGlvbkxpa2UgPSAoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIG5vZGU6IFJ1bGUuTm9kZSxcbik6IHZvaWQgPT4ge1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVNZW1iZXJUYWdDb250ZXh0KGNvbnRleHQsIG5vZGUpO1xuXG4gIGlmIChyZXNvbHZlZCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVwb3J0TWVtYmVyRG9jdW1lbnRhdGlvbihjb250ZXh0LCB7XG4gICAgY29tbWVudDogcmVzb2x2ZWQuY29tbWVudCxcbiAgICBjb21tZW50U3RhcnQ6IHJlc29sdmVkLmNvbW1lbnRTdGFydCxcbiAgICBjb21tZW50VGV4dDogcmVzb2x2ZWQuY29tbWVudFRleHQsXG4gICAgbWVtYmVyVGFnczogcmVzb2x2ZWQubWVtYmVyVGFncyxcbiAgICBub2RlLFxuICAgIHNvdXJjZUNvZGU6IGNvbnRleHQuc291cmNlQ29kZSxcbiAgfSk7XG59O1xuXG4vKiogRVNMaW50IHJ1bGUgZGlzYWxsb3dpbmcgaW50ZXJmYWNlIG1lbWJlciBkb2N1bWVudGF0aW9uIGluIGBAcGFyYW1gIHRhZ3MuICovXG5jb25zdCBub0ludGVyZmFjZU1lbWJlckRvY3VtZW50YXRpb25SdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQgPT4ge1xuICAgICAgaGFuZGxlRnVuY3Rpb25MaWtlKGNvbnRleHQsIG5vZGUpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGxpc3RlbmVyLFxuICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogbGlzdGVuZXIsXG4gICAgICBGdW5jdGlvbkV4cHJlc3Npb246IGxpc3RlbmVyLFxuICAgICAgVFNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb246IGxpc3RlbmVyLFxuICAgICAgVFNDb25zdHJ1Y3RTaWduYXR1cmVEZWNsYXJhdGlvbjogbGlzdGVuZXIsXG4gICAgICBUU0RlY2xhcmVGdW5jdGlvbjogbGlzdGVuZXIsXG4gICAgICBUU0Z1bmN0aW9uVHlwZTogbGlzdGVuZXIsXG4gICAgICBUU01ldGhvZFNpZ25hdHVyZTogbGlzdGVuZXIsXG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpc2FsbG93IGRvY3VtZW50aW5nIGludGVyZmFjZSBtZW1iZXJzIGluIEBwYXJhbSB0YWdzOyBkb2N1bWVudCB0aGVtIG9uIHRoZSBpbnRlcmZhY2UgaW5zdGVhZC5cIixcbiAgICAgIHJlY29tbWVuZGVkOiBmYWxzZSxcbiAgICAgIHVybDogXCJodHRwczovL2dpdGh1Yi5jb20vcGFybG90aS9lc2xpbnQtcGx1Z2luL2Jsb2IvbWFpbi9kb2NzL3J1bGVzL25vLWludGVyZmFjZS1tZW1iZXItZG9jcy5tZFwiLFxuICAgIH0sXG4gICAgZml4YWJsZTogXCJjb2RlXCIsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIGludGVyZmFjZU1lbWJlckRvYzpcbiAgICAgICAgXCJEb2N1bWVudCBpbnRlcmZhY2UgbWVtYmVycyBvbiB0aGUgaW50ZXJmYWNlIGluc3RlYWQgb2YgdXNpbmcgQHBhcmFtIGZvciB7e3BhcmFtZXRlck5hbWV9fS5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogXCJwcm9ibGVtXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBub0ludGVyZmFjZU1lbWJlckRvY3VtZW50YXRpb25SdWxlIH07XG4iXX0=