@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,187 @@
1
+ import type { ESLintUtils, TSESLint, TSESTree } from "@typescript-eslint/utils";
2
+ import type * as ts from "typescript";
3
+ /** Context used to build the final replacement for a matching mock object. */
4
+ interface BuildMatchResultContext {
5
+ /** TypeScript type checker used for assignability checks. */
6
+ checker: ts.TypeChecker;
7
+ /** Factory function supplied to `vi.mock` or `vi.doMock`. */
8
+ factoryArgument: FactoryFunctionExpression;
9
+ /** Static module specifier used by the mock call. */
10
+ moduleSpecifier: string;
11
+ /** Namespace alias for the module specifier, when a namespace import is present. */
12
+ namespaceAlias: string | undefined;
13
+ /** Returned object literal from the mock factory. */
14
+ objectExpression: TSESTree.ObjectExpression;
15
+ /** Property names already present in the rewritten object literal. */
16
+ propertyNames: Set<string>;
17
+ /** Nested property replacements collected for the object literal. */
18
+ replacements: PropertyReplacement[];
19
+ /** Expression returned by the mock factory. */
20
+ returnExpression: TSESTree.Expression;
21
+ /** Full source text of the current file. */
22
+ sourceText: string;
23
+ /** Target type inferred for the factory object. */
24
+ targetType: ts.Type;
25
+ }
26
+ /** Context required to replace one object literal property safely. */
27
+ interface BuildPropertyReplacementContext {
28
+ /** TypeScript type checker used for assignability checks. */
29
+ checker: ts.TypeChecker;
30
+ /** Stable property key name from the mock object literal. */
31
+ keyName: string;
32
+ /** Static module specifier used by the mock call. */
33
+ moduleSpecifier: string;
34
+ /** Namespace alias for the module specifier, when a namespace import is present. */
35
+ namespaceAlias: string | undefined;
36
+ /** Supported property being rewritten. */
37
+ property: SupportedProperty;
38
+ /** Parser services supplied by `@typescript-eslint`. */
39
+ services: ParserServices;
40
+ /** Full source text of the current file. */
41
+ sourceText: string;
42
+ /** Target property symbol from the imported module type. */
43
+ targetPropertySymbol: ts.Symbol;
44
+ }
45
+ /** Input required to analyze a `vi.mock` or `vi.doMock` call. */
46
+ interface CollectMatchContext {
47
+ /** Call expression currently being analyzed. */
48
+ callExpression: TSESTree.CallExpression;
49
+ /** TypeScript type checker used for assignability checks. */
50
+ checker: ts.TypeChecker;
51
+ /** Namespace imports present in the current file, keyed by module specifier. */
52
+ namespaceImports: ReadonlyMap<string, string>;
53
+ /** Parser services supplied by `@typescript-eslint`. */
54
+ services: ParserServices;
55
+ /** Full source text of the current file. */
56
+ sourceText: string;
57
+ }
58
+ /** Context used to collect nested property replacements. */
59
+ interface CollectPropertyReplacementsContext {
60
+ /** TypeScript type checker used for assignability checks. */
61
+ checker: ts.TypeChecker;
62
+ /** Static module specifier used by the mock call. */
63
+ moduleSpecifier: string;
64
+ /** Namespace alias for the module specifier, when a namespace import is present. */
65
+ namespaceAlias: string | undefined;
66
+ /** Returned object literal from the mock factory. */
67
+ objectExpression: TSESTree.ObjectExpression;
68
+ /** Parser services supplied by `@typescript-eslint`. */
69
+ services: ParserServices;
70
+ /** Full source text of the current file. */
71
+ sourceText: string;
72
+ /** Target type inferred for the factory object. */
73
+ targetType: ts.Type;
74
+ }
75
+ /** Function expressions supported as Vitest mock factories. */
76
+ type FactoryFunctionExpression = TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression;
77
+ /** Resolved inputs required to analyze a matching Vitest mock factory. */
78
+ interface FactoryMatchInput {
79
+ /** Factory function supplied to `vi.mock` or `vi.doMock`. */
80
+ factoryArgument: FactoryFunctionExpression;
81
+ /** Static module specifier used by the mock call. */
82
+ moduleSpecifier: string;
83
+ /** Returned object literal from the mock factory. */
84
+ objectExpression: TSESTree.ObjectExpression;
85
+ /** Expression returned by the mock factory. */
86
+ returnExpression: TSESTree.Expression;
87
+ }
88
+ /** Text replacement emitted for a matching factory object. */
89
+ interface MatchResult {
90
+ /** Replacement source text for the returned object expression. */
91
+ replacementText: string;
92
+ /** Absolute range of the return expression to replace. */
93
+ returnExpressionRange: TSESTree.Range;
94
+ }
95
+ /** Rule message identifiers emitted by this rule. */
96
+ type MessageIds = "preferVitestIncrementalCasts";
97
+ /** Normalized arguments extracted from a supported mock call. */
98
+ interface MockFactoryArguments {
99
+ /** Factory function supplied to `vi.mock` or `vi.doMock`. */
100
+ factoryArgument: FactoryFunctionExpression;
101
+ /** Static or import-expression module argument. */
102
+ moduleArgument: TSESTree.Expression;
103
+ }
104
+ /** Rule options accepted by this rule. */
105
+ type Options = [];
106
+ /** Context required to decide whether an outer cast is still needed. */
107
+ interface OuterCastContext {
108
+ /** TypeScript type checker used for assignability checks. */
109
+ checker: ts.TypeChecker;
110
+ /** Property names already present in the rewritten object literal. */
111
+ propertyNames: ReadonlySet<string>;
112
+ /** Target type inferred for the factory object. */
113
+ targetType: ts.Type;
114
+ }
115
+ /** Parser services resolved from the configured TypeScript parser. */
116
+ type ParserServices = ReturnType<typeof ESLintUtils.getParserServices>;
117
+ /** Individual replacement details for one property inside the object literal. */
118
+ interface PropertyReplacement {
119
+ /** Absolute range of the property inside the object literal. */
120
+ range: TSESTree.Range;
121
+ /** Replacement source text for the property. */
122
+ replacementText: string;
123
+ }
124
+ /** Replacement collection result for the object literal properties. */
125
+ interface PropertyReplacementCollection {
126
+ /** Property names already present in the rewritten object literal. */
127
+ propertyNames: Set<string>;
128
+ /** Nested property replacements collected for the object literal. */
129
+ replacements: PropertyReplacement[];
130
+ }
131
+ /** Context for resolving the target type of a mock factory object literal. */
132
+ interface ResolveFactoryTargetTypeContext {
133
+ /** Call expression currently being analyzed. */
134
+ callExpression: TSESTree.CallExpression;
135
+ /** TypeScript type checker used for assignability checks. */
136
+ checker: ts.TypeChecker;
137
+ /** Factory function supplied to `vi.mock` or `vi.doMock`. */
138
+ factoryArgument: FactoryFunctionExpression;
139
+ /** Returned object literal from the mock factory. */
140
+ objectExpression: TSESTree.ObjectExpression;
141
+ /** Parser services supplied by `@typescript-eslint`. */
142
+ services: ParserServices;
143
+ }
144
+ /** Context for determining whether shorthand syntax remains valid. */
145
+ interface ShorthandContext {
146
+ /** Expression used as the property's value. */
147
+ baseValue: TSESTree.Expression;
148
+ /** Stable property key name from the mock object literal. */
149
+ keyName: string;
150
+ /** Whether the property value needs a nested cast. */
151
+ needsCast: boolean;
152
+ /** Supported property being rewritten. */
153
+ property: SupportedProperty;
154
+ }
155
+ /** Object literal properties supported by the fixer. */
156
+ type SupportedProperty = Extract<TSESTree.ObjectLiteralElement, TSESTree.Property> & {
157
+ /** Indicates that computed property syntax is not allowed. */
158
+ computed: false;
159
+ /** Restricts the key to statically readable property names. */
160
+ key: SupportedPropertyKey;
161
+ /** Restricts the property to initializer syntax. */
162
+ kind: "init";
163
+ /** Indicates that method shorthand is not allowed. */
164
+ method: false;
165
+ /** Absolute range of the full property inside the source file. */
166
+ range: TSESTree.Range;
167
+ /** Expression value assigned to the property. */
168
+ value: SupportedPropertyValueRange & TSESTree.Expression;
169
+ };
170
+ /** Property keys supported by the fixer. */
171
+ type SupportedPropertyKey = (SupportedPropertyKeyRange & TSESTree.Identifier) | (SupportedPropertyKeyRange & TSESTree.Literal);
172
+ /** Stable property-key range metadata. */
173
+ interface SupportedPropertyKeyRange {
174
+ /** Absolute range of the property key inside the source file. */
175
+ range: TSESTree.Range;
176
+ }
177
+ /** Stable property-value range metadata. */
178
+ interface SupportedPropertyValueRange {
179
+ /** Absolute range of the property value inside the source file. */
180
+ range: TSESTree.Range;
181
+ }
182
+ /** Property-symbol lookup keyed by object literal property name. */
183
+ type TargetPropertyMap = ReadonlyMap<string, ts.Symbol>;
184
+ /** Typed rule context used by the typed RuleCreator wrapper. */
185
+ type TypedRuleContext = Readonly<TSESLint.RuleContext<MessageIds, Options>>;
186
+ export type { BuildMatchResultContext, BuildPropertyReplacementContext, CollectMatchContext, CollectPropertyReplacementsContext, FactoryFunctionExpression, FactoryMatchInput, MatchResult, MessageIds, MockFactoryArguments, Options, OuterCastContext, ParserServices, PropertyReplacement, PropertyReplacementCollection, ResolveFactoryTargetTypeContext, ShorthandContext, SupportedProperty, TargetPropertyMap, TypedRuleContext, };
187
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0cy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFU0xpbnRVdGlscywgVFNFU0xpbnQsIFRTRVNUcmVlIH0gZnJvbSBcIkB0eXBlc2NyaXB0LWVzbGludC91dGlsc1wiO1xyXG5pbXBvcnQgdHlwZSAqIGFzIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XHJcblxyXG4vKiogQ29udGV4dCB1c2VkIHRvIGJ1aWxkIHRoZSBmaW5hbCByZXBsYWNlbWVudCBmb3IgYSBtYXRjaGluZyBtb2NrIG9iamVjdC4gKi9cclxuaW50ZXJmYWNlIEJ1aWxkTWF0Y2hSZXN1bHRDb250ZXh0IHtcclxuICAvKiogVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgdXNlZCBmb3IgYXNzaWduYWJpbGl0eSBjaGVja3MuICovXHJcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXI7XHJcblxyXG4gIC8qKiBGYWN0b3J5IGZ1bmN0aW9uIHN1cHBsaWVkIHRvIGB2aS5tb2NrYCBvciBgdmkuZG9Nb2NrYC4gKi9cclxuICBmYWN0b3J5QXJndW1lbnQ6IEZhY3RvcnlGdW5jdGlvbkV4cHJlc3Npb247XHJcblxyXG4gIC8qKiBTdGF0aWMgbW9kdWxlIHNwZWNpZmllciB1c2VkIGJ5IHRoZSBtb2NrIGNhbGwuICovXHJcbiAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBOYW1lc3BhY2UgYWxpYXMgZm9yIHRoZSBtb2R1bGUgc3BlY2lmaWVyLCB3aGVuIGEgbmFtZXNwYWNlIGltcG9ydCBpcyBwcmVzZW50LiAqL1xyXG4gIG5hbWVzcGFjZUFsaWFzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKiBSZXR1cm5lZCBvYmplY3QgbGl0ZXJhbCBmcm9tIHRoZSBtb2NrIGZhY3RvcnkuICovXHJcbiAgb2JqZWN0RXhwcmVzc2lvbjogVFNFU1RyZWUuT2JqZWN0RXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFByb3BlcnR5IG5hbWVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcmV3cml0dGVuIG9iamVjdCBsaXRlcmFsLiAqL1xyXG4gIHByb3BlcnR5TmFtZXM6IFNldDxzdHJpbmc+O1xyXG5cclxuICAvKiogTmVzdGVkIHByb3BlcnR5IHJlcGxhY2VtZW50cyBjb2xsZWN0ZWQgZm9yIHRoZSBvYmplY3QgbGl0ZXJhbC4gKi9cclxuICByZXBsYWNlbWVudHM6IFByb3BlcnR5UmVwbGFjZW1lbnRbXTtcclxuXHJcbiAgLyoqIEV4cHJlc3Npb24gcmV0dXJuZWQgYnkgdGhlIG1vY2sgZmFjdG9yeS4gKi9cclxuICByZXR1cm5FeHByZXNzaW9uOiBUU0VTVHJlZS5FeHByZXNzaW9uO1xyXG5cclxuICAvKiogRnVsbCBzb3VyY2UgdGV4dCBvZiB0aGUgY3VycmVudCBmaWxlLiAqL1xyXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcclxuXHJcbiAgLyoqIFRhcmdldCB0eXBlIGluZmVycmVkIGZvciB0aGUgZmFjdG9yeSBvYmplY3QuICovXHJcbiAgdGFyZ2V0VHlwZTogdHMuVHlwZTtcclxufVxyXG5cclxuLyoqIENvbnRleHQgcmVxdWlyZWQgdG8gcmVwbGFjZSBvbmUgb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkgc2FmZWx5LiAqL1xyXG5pbnRlcmZhY2UgQnVpbGRQcm9wZXJ0eVJlcGxhY2VtZW50Q29udGV4dCB7XHJcbiAgLyoqIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHVzZWQgZm9yIGFzc2lnbmFiaWxpdHkgY2hlY2tzLiAqL1xyXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xyXG5cclxuICAvKiogU3RhYmxlIHByb3BlcnR5IGtleSBuYW1lIGZyb20gdGhlIG1vY2sgb2JqZWN0IGxpdGVyYWwuICovXHJcbiAga2V5TmFtZTogc3RyaW5nO1xyXG5cclxuICAvKiogU3RhdGljIG1vZHVsZSBzcGVjaWZpZXIgdXNlZCBieSB0aGUgbW9jayBjYWxsLiAqL1xyXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xyXG5cclxuICAvKiogTmFtZXNwYWNlIGFsaWFzIGZvciB0aGUgbW9kdWxlIHNwZWNpZmllciwgd2hlbiBhIG5hbWVzcGFjZSBpbXBvcnQgaXMgcHJlc2VudC4gKi9cclxuICBuYW1lc3BhY2VBbGlhczogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKiogU3VwcG9ydGVkIHByb3BlcnR5IGJlaW5nIHJld3JpdHRlbi4gKi9cclxuICBwcm9wZXJ0eTogU3VwcG9ydGVkUHJvcGVydHk7XHJcblxyXG4gIC8qKiBQYXJzZXIgc2VydmljZXMgc3VwcGxpZWQgYnkgYEB0eXBlc2NyaXB0LWVzbGludGAuICovXHJcbiAgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzO1xyXG5cclxuICAvKiogRnVsbCBzb3VyY2UgdGV4dCBvZiB0aGUgY3VycmVudCBmaWxlLiAqL1xyXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcclxuXHJcbiAgLyoqIFRhcmdldCBwcm9wZXJ0eSBzeW1ib2wgZnJvbSB0aGUgaW1wb3J0ZWQgbW9kdWxlIHR5cGUuICovXHJcbiAgdGFyZ2V0UHJvcGVydHlTeW1ib2w6IHRzLlN5bWJvbDtcclxufVxyXG5cclxuLyoqIElucHV0IHJlcXVpcmVkIHRvIGFuYWx5emUgYSBgdmkubW9ja2Agb3IgYHZpLmRvTW9ja2AgY2FsbC4gKi9cclxuaW50ZXJmYWNlIENvbGxlY3RNYXRjaENvbnRleHQge1xyXG4gIC8qKiBDYWxsIGV4cHJlc3Npb24gY3VycmVudGx5IGJlaW5nIGFuYWx5emVkLiAqL1xyXG4gIGNhbGxFeHByZXNzaW9uOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHVzZWQgZm9yIGFzc2lnbmFiaWxpdHkgY2hlY2tzLiAqL1xyXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xyXG5cclxuICAvKiogTmFtZXNwYWNlIGltcG9ydHMgcHJlc2VudCBpbiB0aGUgY3VycmVudCBmaWxlLCBrZXllZCBieSBtb2R1bGUgc3BlY2lmaWVyLiAqL1xyXG4gIG5hbWVzcGFjZUltcG9ydHM6IFJlYWRvbmx5TWFwPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgLyoqIFBhcnNlciBzZXJ2aWNlcyBzdXBwbGllZCBieSBgQHR5cGVzY3JpcHQtZXNsaW50YC4gKi9cclxuICBzZXJ2aWNlczogUGFyc2VyU2VydmljZXM7XHJcblxyXG4gIC8qKiBGdWxsIHNvdXJjZSB0ZXh0IG9mIHRoZSBjdXJyZW50IGZpbGUuICovXHJcbiAgc291cmNlVGV4dDogc3RyaW5nO1xyXG59XHJcblxyXG4vKiogQ29udGV4dCB1c2VkIHRvIGNvbGxlY3QgbmVzdGVkIHByb3BlcnR5IHJlcGxhY2VtZW50cy4gKi9cclxuaW50ZXJmYWNlIENvbGxlY3RQcm9wZXJ0eVJlcGxhY2VtZW50c0NvbnRleHQge1xyXG4gIC8qKiBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlciB1c2VkIGZvciBhc3NpZ25hYmlsaXR5IGNoZWNrcy4gKi9cclxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcjtcclxuXHJcbiAgLyoqIFN0YXRpYyBtb2R1bGUgc3BlY2lmaWVyIHVzZWQgYnkgdGhlIG1vY2sgY2FsbC4gKi9cclxuICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZztcclxuXHJcbiAgLyoqIE5hbWVzcGFjZSBhbGlhcyBmb3IgdGhlIG1vZHVsZSBzcGVjaWZpZXIsIHdoZW4gYSBuYW1lc3BhY2UgaW1wb3J0IGlzIHByZXNlbnQuICovXHJcbiAgbmFtZXNwYWNlQWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqIFJldHVybmVkIG9iamVjdCBsaXRlcmFsIGZyb20gdGhlIG1vY2sgZmFjdG9yeS4gKi9cclxuICBvYmplY3RFeHByZXNzaW9uOiBUU0VTVHJlZS5PYmplY3RFeHByZXNzaW9uO1xyXG5cclxuICAvKiogUGFyc2VyIHNlcnZpY2VzIHN1cHBsaWVkIGJ5IGBAdHlwZXNjcmlwdC1lc2xpbnRgLiAqL1xyXG4gIHNlcnZpY2VzOiBQYXJzZXJTZXJ2aWNlcztcclxuXHJcbiAgLyoqIEZ1bGwgc291cmNlIHRleHQgb2YgdGhlIGN1cnJlbnQgZmlsZS4gKi9cclxuICBzb3VyY2VUZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBUYXJnZXQgdHlwZSBpbmZlcnJlZCBmb3IgdGhlIGZhY3Rvcnkgb2JqZWN0LiAqL1xyXG4gIHRhcmdldFR5cGU6IHRzLlR5cGU7XHJcbn1cclxuXHJcbi8qKiBGdW5jdGlvbiBleHByZXNzaW9ucyBzdXBwb3J0ZWQgYXMgVml0ZXN0IG1vY2sgZmFjdG9yaWVzLiAqL1xyXG50eXBlIEZhY3RvcnlGdW5jdGlvbkV4cHJlc3Npb24gPVxyXG4gIHwgVFNFU1RyZWUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cclxuICB8IFRTRVNUcmVlLkZ1bmN0aW9uRXhwcmVzc2lvbjtcclxuXHJcbi8qKiBSZXNvbHZlZCBpbnB1dHMgcmVxdWlyZWQgdG8gYW5hbHl6ZSBhIG1hdGNoaW5nIFZpdGVzdCBtb2NrIGZhY3RvcnkuICovXHJcbmludGVyZmFjZSBGYWN0b3J5TWF0Y2hJbnB1dCB7XHJcbiAgLyoqIEZhY3RvcnkgZnVuY3Rpb24gc3VwcGxpZWQgdG8gYHZpLm1vY2tgIG9yIGB2aS5kb01vY2tgLiAqL1xyXG4gIGZhY3RvcnlBcmd1bWVudDogRmFjdG9yeUZ1bmN0aW9uRXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFN0YXRpYyBtb2R1bGUgc3BlY2lmaWVyIHVzZWQgYnkgdGhlIG1vY2sgY2FsbC4gKi9cclxuICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZztcclxuXHJcbiAgLyoqIFJldHVybmVkIG9iamVjdCBsaXRlcmFsIGZyb20gdGhlIG1vY2sgZmFjdG9yeS4gKi9cclxuICBvYmplY3RFeHByZXNzaW9uOiBUU0VTVHJlZS5PYmplY3RFeHByZXNzaW9uO1xyXG5cclxuICAvKiogRXhwcmVzc2lvbiByZXR1cm5lZCBieSB0aGUgbW9jayBmYWN0b3J5LiAqL1xyXG4gIHJldHVybkV4cHJlc3Npb246IFRTRVNUcmVlLkV4cHJlc3Npb247XHJcbn1cclxuXHJcbi8qKiBUZXh0IHJlcGxhY2VtZW50IGVtaXR0ZWQgZm9yIGEgbWF0Y2hpbmcgZmFjdG9yeSBvYmplY3QuICovXHJcbmludGVyZmFjZSBNYXRjaFJlc3VsdCB7XHJcbiAgLyoqIFJlcGxhY2VtZW50IHNvdXJjZSB0ZXh0IGZvciB0aGUgcmV0dXJuZWQgb2JqZWN0IGV4cHJlc3Npb24uICovXHJcbiAgcmVwbGFjZW1lbnRUZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBBYnNvbHV0ZSByYW5nZSBvZiB0aGUgcmV0dXJuIGV4cHJlc3Npb24gdG8gcmVwbGFjZS4gKi9cclxuICByZXR1cm5FeHByZXNzaW9uUmFuZ2U6IFRTRVNUcmVlLlJhbmdlO1xyXG59XHJcblxyXG4vKiogUnVsZSBtZXNzYWdlIGlkZW50aWZpZXJzIGVtaXR0ZWQgYnkgdGhpcyBydWxlLiAqL1xyXG50eXBlIE1lc3NhZ2VJZHMgPSBcInByZWZlclZpdGVzdEluY3JlbWVudGFsQ2FzdHNcIjtcclxuXHJcbi8qKiBOb3JtYWxpemVkIGFyZ3VtZW50cyBleHRyYWN0ZWQgZnJvbSBhIHN1cHBvcnRlZCBtb2NrIGNhbGwuICovXHJcbmludGVyZmFjZSBNb2NrRmFjdG9yeUFyZ3VtZW50cyB7XHJcbiAgLyoqIEZhY3RvcnkgZnVuY3Rpb24gc3VwcGxpZWQgdG8gYHZpLm1vY2tgIG9yIGB2aS5kb01vY2tgLiAqL1xyXG4gIGZhY3RvcnlBcmd1bWVudDogRmFjdG9yeUZ1bmN0aW9uRXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFN0YXRpYyBvciBpbXBvcnQtZXhwcmVzc2lvbiBtb2R1bGUgYXJndW1lbnQuICovXHJcbiAgbW9kdWxlQXJndW1lbnQ6IFRTRVNUcmVlLkV4cHJlc3Npb247XHJcbn1cclxuXHJcbi8qKiBSdWxlIG9wdGlvbnMgYWNjZXB0ZWQgYnkgdGhpcyBydWxlLiAqL1xyXG50eXBlIE9wdGlvbnMgPSBbXTtcclxuXHJcbi8qKiBDb250ZXh0IHJlcXVpcmVkIHRvIGRlY2lkZSB3aGV0aGVyIGFuIG91dGVyIGNhc3QgaXMgc3RpbGwgbmVlZGVkLiAqL1xyXG5pbnRlcmZhY2UgT3V0ZXJDYXN0Q29udGV4dCB7XHJcbiAgLyoqIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHVzZWQgZm9yIGFzc2lnbmFiaWxpdHkgY2hlY2tzLiAqL1xyXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xyXG5cclxuICAvKiogUHJvcGVydHkgbmFtZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSByZXdyaXR0ZW4gb2JqZWN0IGxpdGVyYWwuICovXHJcbiAgcHJvcGVydHlOYW1lczogUmVhZG9ubHlTZXQ8c3RyaW5nPjtcclxuXHJcbiAgLyoqIFRhcmdldCB0eXBlIGluZmVycmVkIGZvciB0aGUgZmFjdG9yeSBvYmplY3QuICovXHJcbiAgdGFyZ2V0VHlwZTogdHMuVHlwZTtcclxufVxyXG4vKiogUGFyc2VyIHNlcnZpY2VzIHJlc29sdmVkIGZyb20gdGhlIGNvbmZpZ3VyZWQgVHlwZVNjcmlwdCBwYXJzZXIuICovXHJcbnR5cGUgUGFyc2VyU2VydmljZXMgPSBSZXR1cm5UeXBlPHR5cGVvZiBFU0xpbnRVdGlscy5nZXRQYXJzZXJTZXJ2aWNlcz47XHJcbi8qKiBJbmRpdmlkdWFsIHJlcGxhY2VtZW50IGRldGFpbHMgZm9yIG9uZSBwcm9wZXJ0eSBpbnNpZGUgdGhlIG9iamVjdCBsaXRlcmFsLiAqL1xyXG5pbnRlcmZhY2UgUHJvcGVydHlSZXBsYWNlbWVudCB7XHJcbiAgLyoqIEFic29sdXRlIHJhbmdlIG9mIHRoZSBwcm9wZXJ0eSBpbnNpZGUgdGhlIG9iamVjdCBsaXRlcmFsLiAqL1xyXG4gIHJhbmdlOiBUU0VTVHJlZS5SYW5nZTtcclxuXHJcbiAgLyoqIFJlcGxhY2VtZW50IHNvdXJjZSB0ZXh0IGZvciB0aGUgcHJvcGVydHkuICovXHJcbiAgcmVwbGFjZW1lbnRUZXh0OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKiBSZXBsYWNlbWVudCBjb2xsZWN0aW9uIHJlc3VsdCBmb3IgdGhlIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXMuICovXHJcbmludGVyZmFjZSBQcm9wZXJ0eVJlcGxhY2VtZW50Q29sbGVjdGlvbiB7XHJcbiAgLyoqIFByb3BlcnR5IG5hbWVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcmV3cml0dGVuIG9iamVjdCBsaXRlcmFsLiAqL1xyXG4gIHByb3BlcnR5TmFtZXM6IFNldDxzdHJpbmc+O1xyXG5cclxuICAvKiogTmVzdGVkIHByb3BlcnR5IHJlcGxhY2VtZW50cyBjb2xsZWN0ZWQgZm9yIHRoZSBvYmplY3QgbGl0ZXJhbC4gKi9cclxuICByZXBsYWNlbWVudHM6IFByb3BlcnR5UmVwbGFjZW1lbnRbXTtcclxufVxyXG5cclxuLyoqIENvbnRleHQgZm9yIHJlc29sdmluZyB0aGUgdGFyZ2V0IHR5cGUgb2YgYSBtb2NrIGZhY3Rvcnkgb2JqZWN0IGxpdGVyYWwuICovXHJcbmludGVyZmFjZSBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0IHtcclxuICAvKiogQ2FsbCBleHByZXNzaW9uIGN1cnJlbnRseSBiZWluZyBhbmFseXplZC4gKi9cclxuICBjYWxsRXhwcmVzc2lvbjogVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb247XHJcblxyXG4gIC8qKiBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlciB1c2VkIGZvciBhc3NpZ25hYmlsaXR5IGNoZWNrcy4gKi9cclxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcjtcclxuXHJcbiAgLyoqIEZhY3RvcnkgZnVuY3Rpb24gc3VwcGxpZWQgdG8gYHZpLm1vY2tgIG9yIGB2aS5kb01vY2tgLiAqL1xyXG4gIGZhY3RvcnlBcmd1bWVudDogRmFjdG9yeUZ1bmN0aW9uRXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFJldHVybmVkIG9iamVjdCBsaXRlcmFsIGZyb20gdGhlIG1vY2sgZmFjdG9yeS4gKi9cclxuICBvYmplY3RFeHByZXNzaW9uOiBUU0VTVHJlZS5PYmplY3RFeHByZXNzaW9uO1xyXG5cclxuICAvKiogUGFyc2VyIHNlcnZpY2VzIHN1cHBsaWVkIGJ5IGBAdHlwZXNjcmlwdC1lc2xpbnRgLiAqL1xyXG4gIHNlcnZpY2VzOiBQYXJzZXJTZXJ2aWNlcztcclxufVxyXG4vKiogQ29udGV4dCBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBzaG9ydGhhbmQgc3ludGF4IHJlbWFpbnMgdmFsaWQuICovXHJcbmludGVyZmFjZSBTaG9ydGhhbmRDb250ZXh0IHtcclxuICAvKiogRXhwcmVzc2lvbiB1c2VkIGFzIHRoZSBwcm9wZXJ0eSdzIHZhbHVlLiAqL1xyXG4gIGJhc2VWYWx1ZTogVFNFU1RyZWUuRXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFN0YWJsZSBwcm9wZXJ0eSBrZXkgbmFtZSBmcm9tIHRoZSBtb2NrIG9iamVjdCBsaXRlcmFsLiAqL1xyXG4gIGtleU5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHByb3BlcnR5IHZhbHVlIG5lZWRzIGEgbmVzdGVkIGNhc3QuICovXHJcbiAgbmVlZHNDYXN0OiBib29sZWFuO1xyXG5cclxuICAvKiogU3VwcG9ydGVkIHByb3BlcnR5IGJlaW5nIHJld3JpdHRlbi4gKi9cclxuICBwcm9wZXJ0eTogU3VwcG9ydGVkUHJvcGVydHk7XHJcbn1cclxuLyoqIE9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBmaXhlci4gKi9cclxudHlwZSBTdXBwb3J0ZWRQcm9wZXJ0eSA9IEV4dHJhY3Q8XHJcbiAgVFNFU1RyZWUuT2JqZWN0TGl0ZXJhbEVsZW1lbnQsXHJcbiAgVFNFU1RyZWUuUHJvcGVydHlcclxuPiAmIHtcclxuICAvKiogSW5kaWNhdGVzIHRoYXQgY29tcHV0ZWQgcHJvcGVydHkgc3ludGF4IGlzIG5vdCBhbGxvd2VkLiAqL1xyXG4gIGNvbXB1dGVkOiBmYWxzZTtcclxuXHJcbiAgLyoqIFJlc3RyaWN0cyB0aGUga2V5IHRvIHN0YXRpY2FsbHkgcmVhZGFibGUgcHJvcGVydHkgbmFtZXMuICovXHJcbiAga2V5OiBTdXBwb3J0ZWRQcm9wZXJ0eUtleTtcclxuXHJcbiAgLyoqIFJlc3RyaWN0cyB0aGUgcHJvcGVydHkgdG8gaW5pdGlhbGl6ZXIgc3ludGF4LiAqL1xyXG4gIGtpbmQ6IFwiaW5pdFwiO1xyXG5cclxuICAvKiogSW5kaWNhdGVzIHRoYXQgbWV0aG9kIHNob3J0aGFuZCBpcyBub3QgYWxsb3dlZC4gKi9cclxuICBtZXRob2Q6IGZhbHNlO1xyXG5cclxuICAvKiogQWJzb2x1dGUgcmFuZ2Ugb2YgdGhlIGZ1bGwgcHJvcGVydHkgaW5zaWRlIHRoZSBzb3VyY2UgZmlsZS4gKi9cclxuICByYW5nZTogVFNFU1RyZWUuUmFuZ2U7XHJcblxyXG4gIC8qKiBFeHByZXNzaW9uIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBwcm9wZXJ0eS4gKi9cclxuICB2YWx1ZTogU3VwcG9ydGVkUHJvcGVydHlWYWx1ZVJhbmdlICYgVFNFU1RyZWUuRXhwcmVzc2lvbjtcclxufTtcclxuLyoqIFByb3BlcnR5IGtleXMgc3VwcG9ydGVkIGJ5IHRoZSBmaXhlci4gKi9cclxudHlwZSBTdXBwb3J0ZWRQcm9wZXJ0eUtleSA9XHJcbiAgfCAoU3VwcG9ydGVkUHJvcGVydHlLZXlSYW5nZSAmIFRTRVNUcmVlLklkZW50aWZpZXIpXHJcbiAgfCAoU3VwcG9ydGVkUHJvcGVydHlLZXlSYW5nZSAmIFRTRVNUcmVlLkxpdGVyYWwpO1xyXG4vKiogU3RhYmxlIHByb3BlcnR5LWtleSByYW5nZSBtZXRhZGF0YS4gKi9cclxuaW50ZXJmYWNlIFN1cHBvcnRlZFByb3BlcnR5S2V5UmFuZ2Uge1xyXG4gIC8qKiBBYnNvbHV0ZSByYW5nZSBvZiB0aGUgcHJvcGVydHkga2V5IGluc2lkZSB0aGUgc291cmNlIGZpbGUuICovXHJcbiAgcmFuZ2U6IFRTRVNUcmVlLlJhbmdlO1xyXG59XHJcbi8qKiBTdGFibGUgcHJvcGVydHktdmFsdWUgcmFuZ2UgbWV0YWRhdGEuICovXHJcbmludGVyZmFjZSBTdXBwb3J0ZWRQcm9wZXJ0eVZhbHVlUmFuZ2Uge1xyXG4gIC8qKiBBYnNvbHV0ZSByYW5nZSBvZiB0aGUgcHJvcGVydHkgdmFsdWUgaW5zaWRlIHRoZSBzb3VyY2UgZmlsZS4gKi9cclxuICByYW5nZTogVFNFU1RyZWUuUmFuZ2U7XHJcbn1cclxuLyoqIFByb3BlcnR5LXN5bWJvbCBsb29rdXAga2V5ZWQgYnkgb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkgbmFtZS4gKi9cclxudHlwZSBUYXJnZXRQcm9wZXJ0eU1hcCA9IFJlYWRvbmx5TWFwPHN0cmluZywgdHMuU3ltYm9sPjtcclxuXHJcbi8qKiBUeXBlZCBydWxlIGNvbnRleHQgdXNlZCBieSB0aGUgdHlwZWQgUnVsZUNyZWF0b3Igd3JhcHBlci4gKi9cclxudHlwZSBUeXBlZFJ1bGVDb250ZXh0ID0gUmVhZG9ubHk8VFNFU0xpbnQuUnVsZUNvbnRleHQ8TWVzc2FnZUlkcywgT3B0aW9ucz4+O1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIEJ1aWxkTWF0Y2hSZXN1bHRDb250ZXh0LFxyXG4gIEJ1aWxkUHJvcGVydHlSZXBsYWNlbWVudENvbnRleHQsXHJcbiAgQ29sbGVjdE1hdGNoQ29udGV4dCxcclxuICBDb2xsZWN0UHJvcGVydHlSZXBsYWNlbWVudHNDb250ZXh0LFxyXG4gIEZhY3RvcnlGdW5jdGlvbkV4cHJlc3Npb24sXHJcbiAgRmFjdG9yeU1hdGNoSW5wdXQsXHJcbiAgTWF0Y2hSZXN1bHQsXHJcbiAgTWVzc2FnZUlkcyxcclxuICBNb2NrRmFjdG9yeUFyZ3VtZW50cyxcclxuICBPcHRpb25zLFxyXG4gIE91dGVyQ2FzdENvbnRleHQsXHJcbiAgUGFyc2VyU2VydmljZXMsXHJcbiAgUHJvcGVydHlSZXBsYWNlbWVudCxcclxuICBQcm9wZXJ0eVJlcGxhY2VtZW50Q29sbGVjdGlvbixcclxuICBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0LFxyXG4gIFNob3J0aGFuZENvbnRleHQsXHJcbiAgU3VwcG9ydGVkUHJvcGVydHksXHJcbiAgVGFyZ2V0UHJvcGVydHlNYXAsXHJcbiAgVHlwZWRSdWxlQ29udGV4dCxcclxufTtcclxuIl19
@@ -0,0 +1,2 @@
1
+ export { requireAaaSectionsRule } from "./rule.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/require-aaa-sections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { requireAaaSectionsRule } from "./rule.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcmVxdWlyZS1hYWEtc2VjdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcmVxdWlyZUFhYVNlY3Rpb25zUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import type { Rule } from "eslint";
2
+ import type { AaaPhase, TestBlockAnalysis } from "../aaa/index.js";
3
+ /**
4
+ * Builds autofix edits for each missing AAA section marker.
5
+ * @param analysis Parsed test-block analysis.
6
+ * @param missingSections Missing AAA phases to insert.
7
+ * @param fixer ESLint fixer instance.
8
+ * @returns Fixes that add the missing section comments.
9
+ * @example
10
+ * ```typescript
11
+ * const fixes = buildMissingSectionFixes({ newline: "\n", sourceText: "value" } as never, ["Arrange"], {} as never);
12
+ * void fixes;
13
+ * ```
14
+ */
15
+ declare function buildMissingSectionFixes(analysis: TestBlockAnalysis, missingSections: readonly AaaPhase[], fixer: Rule.RuleFixer): Rule.Fix[];
16
+ export { buildMissingSectionFixes };
17
+ //# sourceMappingURL=missing-section-fixes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-section-fixes.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/require-aaa-sections/missing-section-fixes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAmG1D;;;;;;;;;;;GAWG;AACH,iBAAS,wBAAwB,CAC/B,QAAQ,EAAE,iBAAiB,EAC3B,eAAe,EAAE,SAAS,QAAQ,EAAE,EACpC,KAAK,EAAE,IAAI,CAAC,SAAS,GACpB,IAAI,CAAC,GAAG,EAAE,CAWZ;AA4GD,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,150 @@
1
+ import { aaaPhaseOrder, getLineStartRange } from "../aaa/index.js";
2
+ /**
3
+ * Groups missing phases by insertion offset.
4
+ * @param anchors Anchor statements available for insertion.
5
+ * @param missingSections Missing AAA phases to insert.
6
+ * @returns Map of source offsets to phases that should be inserted there.
7
+ * @example
8
+ * ```typescript
9
+ * const anchorMap = buildAnchorMap({ firstStatement: { range: [0, 1] } as never, lastStatement: { range: [2, 3] } as never, middleStatement: { range: [1, 2] } as never }, ["Arrange"]);
10
+ * void anchorMap;
11
+ * ```
12
+ */
13
+ function buildAnchorMap(anchors, missingSections) {
14
+ const anchorMap = new Map();
15
+ for (const phase of missingSections) {
16
+ const anchorNode = getAnchorNode(anchors, phase);
17
+ const existing = anchorMap.get(anchorNode.range[0]) ?? [];
18
+ existing.push(phase);
19
+ anchorMap.set(anchorNode.range[0], existing);
20
+ }
21
+ return anchorMap;
22
+ }
23
+ /**
24
+ * Builds one autofix that inserts missing section markers before a statement.
25
+ * @param input Composite input for one missing-section fix.
26
+ * @returns Fix that inserts the missing section marker text.
27
+ * @example
28
+ * ```typescript
29
+ * const fix = buildMissingSectionFix({ analysis: { newline: "\n", sourceText: "value" } as never, fixer: {} as never, offset: 0, phases: ["Arrange"] });
30
+ * void fix;
31
+ * ```
32
+ */
33
+ function buildMissingSectionFix(input) {
34
+ const { analysis, fixer, offset, phases } = input;
35
+ const sourceLines = analysis.sourceText.split(/\r\n|\n/u);
36
+ const sortedPhases = phases.toSorted((left, right) => aaaPhaseOrder[left] - aaaPhaseOrder[right]);
37
+ const statementLine = analysis.sourceText
38
+ .slice(0, offset)
39
+ .split(/\r\n|\n/u).length;
40
+ const lineStartRange = getLineStartRange(analysis.sourceText, statementLine);
41
+ const [previousLine = ""] = statementLine > 1
42
+ ? sourceLines.slice(statementLine - 2, statementLine - 1)
43
+ : [];
44
+ const needsLeadingBlankLine = shouldInsertLeadingBlankLine(sortedPhases, previousLine);
45
+ const [currentLine = ""] = sourceLines.slice(statementLine - 1, statementLine);
46
+ const indentation = getLineIndentation(currentLine);
47
+ return fixer.insertTextBeforeRange(lineStartRange, `${needsLeadingBlankLine ? analysis.newline : ""}${indentation}// ${sortedPhases.join(" & ")}${analysis.newline}`);
48
+ }
49
+ /**
50
+ * Builds autofix edits for each missing AAA section marker.
51
+ * @param analysis Parsed test-block analysis.
52
+ * @param missingSections Missing AAA phases to insert.
53
+ * @param fixer ESLint fixer instance.
54
+ * @returns Fixes that add the missing section comments.
55
+ * @example
56
+ * ```typescript
57
+ * const fixes = buildMissingSectionFixes({ newline: "\n", sourceText: "value" } as never, ["Arrange"], {} as never);
58
+ * void fixes;
59
+ * ```
60
+ */
61
+ function buildMissingSectionFixes(analysis, missingSections, fixer) {
62
+ const anchors = getSectionAnchors(analysis);
63
+ if (anchors === void 0) {
64
+ return [];
65
+ }
66
+ return [...buildAnchorMap(anchors, missingSections).entries()].map(([offset, phases]) => buildMissingSectionFix({ analysis, fixer, offset, phases }));
67
+ }
68
+ /**
69
+ * Selects the anchor statement used for one missing AAA phase.
70
+ * @param anchors Anchor statements available for insertion.
71
+ * @param phase Missing phase being inserted.
72
+ * @returns Statement node used as the insertion anchor.
73
+ * @example
74
+ * ```typescript
75
+ * const anchor = getAnchorNode({ firstStatement: {} as never, lastStatement: {} as never, middleStatement: {} as never }, "Arrange");
76
+ * void anchor;
77
+ * ```
78
+ */
79
+ function getAnchorNode(anchors, phase) {
80
+ switch (phase) {
81
+ case "Act": {
82
+ return anchors.middleStatement;
83
+ }
84
+ case "Arrange": {
85
+ return anchors.firstStatement;
86
+ }
87
+ case "Assert": {
88
+ return anchors.lastStatement;
89
+ }
90
+ default: {
91
+ return anchors.lastStatement;
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Reads the indentation prefix from a source line.
97
+ * @param lineText Source line text.
98
+ * @returns Leading whitespace for the line.
99
+ * @example
100
+ * ```typescript
101
+ * const indentation = getLineIndentation(" value");
102
+ * void indentation;
103
+ * ```
104
+ */
105
+ function getLineIndentation(lineText) {
106
+ const trimmedLine = lineText.trimStart();
107
+ return lineText.slice(0, lineText.length - trimmedLine.length);
108
+ }
109
+ /**
110
+ * Selects the statement nodes used as insertion anchors for missing sections.
111
+ * @param analysis Parsed test-block analysis.
112
+ * @returns Anchor statements for Arrange, Act, and Assert insertion.
113
+ * @example
114
+ * ```typescript
115
+ * const anchors = getSectionAnchors({ statements: [] } as never);
116
+ * void anchors;
117
+ * ```
118
+ */
119
+ function getSectionAnchors(analysis) {
120
+ const [firstStatementEntry] = analysis.statements;
121
+ const middleStatementEntry = analysis.statements[Math.min(analysis.statements.length - 1, Math.floor(analysis.statements.length / 2))];
122
+ const lastStatementEntry = analysis.statements.at(-1);
123
+ if (firstStatementEntry === void 0 ||
124
+ middleStatementEntry === void 0 ||
125
+ lastStatementEntry === void 0) {
126
+ return void 0;
127
+ }
128
+ return {
129
+ firstStatement: firstStatementEntry.node,
130
+ lastStatement: lastStatementEntry.node,
131
+ middleStatement: middleStatementEntry.node,
132
+ };
133
+ }
134
+ /**
135
+ * Determines whether a missing section insertion needs a blank line prefix.
136
+ * @param phases Missing phases inserted at the same offset.
137
+ * @param previousLine Source line immediately above the insertion point.
138
+ * @returns Whether the inserted marker should start with a blank line.
139
+ * @example
140
+ * ```typescript
141
+ * const actual = shouldInsertLeadingBlankLine(["Act"], "run();");
142
+ * void actual;
143
+ * ```
144
+ */
145
+ function shouldInsertLeadingBlankLine(phases, previousLine) {
146
+ return (phases.some((phase) => phase !== "Arrange") &&
147
+ previousLine.trim().length > 0);
148
+ }
149
+ export { buildMissingSectionFixes };
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2luZy1zZWN0aW9uLWZpeGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL3JlcXVpcmUtYWFhLXNlY3Rpb25zL21pc3Npbmctc2VjdGlvbi1maXhlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBNkIxRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxjQUFjLENBQ3JCLE9BQXlCLEVBQ3pCLGVBQW9DO0lBRXBDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBRWhELEtBQUssTUFBTSxLQUFLLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFMUQsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHNCQUFzQixDQUFDLEtBQTZCO0lBQzNELE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FD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ZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IEFhYVBoYXNlLCBUZXN0QmxvY2tBbmFseXNpcyB9IGZyb20gXCIuLi9hYWFcIjtcclxuXHJcbmltcG9ydCB7IGFhYVBoYXNlT3JkZXIsIGdldExpbmVTdGFydFJhbmdlIH0gZnJvbSBcIi4uL2FhYVwiO1xyXG5cclxuLyoqIENvbXBvc2l0ZSBpbnB1dCBmb3IgYnVpbGRpbmcgb25lIG1pc3Npbmctc2VjdGlvbiBmaXguICovXHJcbmludGVyZmFjZSBNaXNzaW5nU2VjdGlvbkZpeElucHV0IHtcclxuICAvKiogUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuICovXHJcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzO1xyXG5cclxuICAvKiogRVNMaW50IGZpeGVyIGluc3RhbmNlLiAqL1xyXG4gIGZpeGVyOiBSdWxlLlJ1bGVGaXhlcjtcclxuXHJcbiAgLyoqIFNvdXJjZSBvZmZzZXQgd2hlcmUgdGhlIHNlY3Rpb24gbWFya2VyIHNob3VsZCBiZSBpbnNlcnRlZC4gKi9cclxuICBvZmZzZXQ6IG51bWJlcjtcclxuXHJcbiAgLyoqIE1pc3NpbmcgcGhhc2VzIHRoYXQgc2hhcmUgdGhlIHNhbWUgaW5zZXJ0aW9uIG9mZnNldC4gKi9cclxuICBwaGFzZXM6IHJlYWRvbmx5IEFhYVBoYXNlW107XHJcbn1cclxuXHJcbi8qKiBBbmNob3Igc3RhdGVtZW50cyB1c2VkIHRvIHBsYWNlIG1pc3NpbmcgQUFBIHNlY3Rpb24gY29tbWVudHMuICovXHJcbmludGVyZmFjZSBTdGF0ZW1lbnRBbmNob3JzIHtcclxuICAvKiogRmlyc3Qgc3RhdGVtZW50IGF2YWlsYWJsZSBmb3IgYW4gQXJyYW5nZSBpbnNlcnRpb24uICovXHJcbiAgZmlyc3RTdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdW1wibm9kZVwiXTtcclxuXHJcbiAgLyoqIExhc3Qgc3RhdGVtZW50IGF2YWlsYWJsZSBmb3IgYW4gQXNzZXJ0IGluc2VydGlvbi4gKi9cclxuICBsYXN0U3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXVtcIm5vZGVcIl07XHJcblxyXG4gIC8qKiBNaWRkbGUgc3RhdGVtZW50IGF2YWlsYWJsZSBmb3IgYW4gQWN0IGluc2VydGlvbi4gKi9cclxuICBtaWRkbGVTdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdW1wibm9kZVwiXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBtaXNzaW5nIHBoYXNlcyBieSBpbnNlcnRpb24gb2Zmc2V0LlxyXG4gKiBAcGFyYW0gYW5jaG9ycyBBbmNob3Igc3RhdGVtZW50cyBhdmFpbGFibGUgZm9yIGluc2VydGlvbi5cclxuICogQHBhcmFtIG1pc3NpbmdTZWN0aW9ucyBNaXNzaW5nIEFBQSBwaGFzZXMgdG8gaW5zZXJ0LlxyXG4gKiBAcmV0dXJucyBNYXAgb2Ygc291cmNlIG9mZnNldHMgdG8gcGhhc2VzIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkIHRoZXJlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGFuY2hvck1hcCA9IGJ1aWxkQW5jaG9yTWFwKHsgZmlyc3RTdGF0ZW1lbnQ6IHsgcmFuZ2U6IFswLCAxXSB9IGFzIG5ldmVyLCBsYXN0U3RhdGVtZW50OiB7IHJhbmdlOiBbMiwgM10gfSBhcyBuZXZlciwgbWlkZGxlU3RhdGVtZW50OiB7IHJhbmdlOiBbMSwgMl0gfSBhcyBuZXZlciB9LCBbXCJBcnJhbmdlXCJdKTtcclxuICogdm9pZCBhbmNob3JNYXA7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gYnVpbGRBbmNob3JNYXAoXHJcbiAgYW5jaG9yczogU3RhdGVtZW50QW5jaG9ycyxcclxuICBtaXNzaW5nU2VjdGlvbnM6IHJlYWRvbmx5IEFhYVBoYXNlW10sXHJcbik6IE1hcDxudW1iZXIsIEFhYVBoYXNlW10+IHtcclxuICBjb25zdCBhbmNob3JNYXAgPSBuZXcgTWFwPG51bWJlciwgQWFhUGhhc2VbXT4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBwaGFzZSBvZiBtaXNzaW5nU2VjdGlvbnMpIHtcclxuICAgIGNvbnN0IGFuY2hvck5vZGUgPSBnZXRBbmNob3JOb2RlKGFuY2hvcnMsIHBoYXNlKTtcclxuICAgIGNvbnN0IGV4aXN0aW5nID0gYW5jaG9yTWFwLmdldChhbmNob3JOb2RlLnJhbmdlWzBdKSA/PyBbXTtcclxuXHJcbiAgICBleGlzdGluZy5wdXNoKHBoYXNlKTtcclxuICAgIGFuY2hvck1hcC5zZXQoYW5jaG9yTm9kZS5yYW5nZVswXSwgZXhpc3RpbmcpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFuY2hvck1hcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJ1aWxkcyBvbmUgYXV0b2ZpeCB0aGF0IGluc2VydHMgbWlzc2luZyBzZWN0aW9uIG1hcmtlcnMgYmVmb3JlIGEgc3RhdGVtZW50LlxyXG4gKiBAcGFyYW0gaW5wdXQgQ29tcG9zaXRlIGlucHV0IGZvciBvbmUgbWlzc2luZy1zZWN0aW9uIGZpeC5cclxuICogQHJldHVybnMgRml4IHRoYXQgaW5zZXJ0cyB0aGUgbWlzc2luZyBzZWN0aW9uIG1hcmtlciB0ZXh0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGZpeCA9IGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXgoeyBhbmFseXNpczogeyBuZXdsaW5lOiBcIlxcblwiLCBzb3VyY2VUZXh0OiBcInZhbHVlXCIgfSBhcyBuZXZlciwgZml4ZXI6IHt9IGFzIG5ldmVyLCBvZmZzZXQ6IDAsIHBoYXNlczogW1wiQXJyYW5nZVwiXSB9KTtcclxuICogdm9pZCBmaXg7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gYnVpbGRNaXNzaW5nU2VjdGlvbkZpeChpbnB1dDogTWlzc2luZ1NlY3Rpb25GaXhJbnB1dCk6IFJ1bGUuRml4IHtcclxuICBjb25zdCB7IGFuYWx5c2lzLCBmaXhlciwgb2Zmc2V0LCBwaGFzZXMgfSA9IGlucHV0O1xyXG4gIGNvbnN0IHNvdXJjZUxpbmVzID0gYW5hbHlzaXMuc291cmNlVGV4dC5zcGxpdCgvXFxyXFxufFxcbi91KTtcclxuICBjb25zdCBzb3J0ZWRQaGFzZXMgPSBwaGFzZXMudG9Tb3J0ZWQoXHJcbiAgICAobGVmdCwgcmlnaHQpID0+IGFhYVBoYXNlT3JkZXJbbGVmdF0gLSBhYWFQaGFzZU9yZGVyW3JpZ2h0XSxcclxuICApO1xyXG4gIGNvbnN0IHN0YXRlbWVudExpbmUgPSBhbmFseXNpcy5zb3VyY2VUZXh0XHJcbiAgICAuc2xpY2UoMCwgb2Zmc2V0KVxyXG4gICAgLnNwbGl0KC9cXHJcXG58XFxuL3UpLmxlbmd0aDtcclxuICBjb25zdCBsaW5lU3RhcnRSYW5nZSA9IGdldExpbmVTdGFydFJhbmdlKGFuYWx5c2lzLnNvdXJjZVRleHQsIHN0YXRlbWVudExpbmUpO1xyXG4gIGNvbnN0IFtwcmV2aW91c0xpbmUgPSBcIlwiXSA9XHJcbiAgICBzdGF0ZW1lbnRMaW5lID4gMVxyXG4gICAgICA/IHNvdXJjZUxpbmVzLnNsaWNlKHN0YXRlbWVudExpbmUgLSAyLCBzdGF0ZW1lbnRMaW5lIC0gMSlcclxuICAgICAgOiBbXTtcclxuICBjb25zdCBuZWVkc0xlYWRpbmdCbGFua0xpbmUgPSBzaG91bGRJbnNlcnRMZWFkaW5nQmxhbmtMaW5lKFxyXG4gICAgc29ydGVkUGhhc2VzLFxyXG4gICAgcHJldmlvdXNMaW5lLFxyXG4gICk7XHJcbiAgY29uc3QgW2N1cnJlbnRMaW5lID0gXCJcIl0gPSBzb3VyY2VMaW5lcy5zbGljZShcclxuICAgIHN0YXRlbWVudExpbmUgLSAxLFxyXG4gICAgc3RhdGVtZW50TGluZSxcclxuICApO1xyXG4gIGNvbnN0IGluZGVudGF0aW9uID0gZ2V0TGluZUluZGVudGF0aW9uKGN1cnJlbnRMaW5lKTtcclxuXHJcbiAgcmV0dXJuIGZpeGVyLmluc2VydFRleHRCZWZvcmVSYW5nZShcclxuICAgIGxpbmVTdGFydFJhbmdlLFxyXG4gICAgYCR7bmVlZHNMZWFkaW5nQmxhbmtMaW5lID8gYW5hbHlzaXMubmV3bGluZSA6IFwiXCJ9JHtpbmRlbnRhdGlvbn0vLyAke3NvcnRlZFBoYXNlcy5qb2luKFwiICYgXCIpfSR7YW5hbHlzaXMubmV3bGluZX1gLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsZHMgYXV0b2ZpeCBlZGl0cyBmb3IgZWFjaCBtaXNzaW5nIEFBQSBzZWN0aW9uIG1hcmtlci5cclxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxyXG4gKiBAcGFyYW0gbWlzc2luZ1NlY3Rpb25zIE1pc3NpbmcgQUFBIHBoYXNlcyB0byBpbnNlcnQuXHJcbiAqIEBwYXJhbSBmaXhlciBFU0xpbnQgZml4ZXIgaW5zdGFuY2UuXHJcbiAqIEByZXR1cm5zIEZpeGVzIHRoYXQgYWRkIHRoZSBtaXNzaW5nIHNlY3Rpb24gY29tbWVudHMuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgZml4ZXMgPSBidWlsZE1pc3NpbmdTZWN0aW9uRml4ZXMoeyBuZXdsaW5lOiBcIlxcblwiLCBzb3VyY2VUZXh0OiBcInZhbHVlXCIgfSBhcyBuZXZlciwgW1wiQXJyYW5nZVwiXSwge30gYXMgbmV2ZXIpO1xyXG4gKiB2b2lkIGZpeGVzO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlcyhcclxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXHJcbiAgbWlzc2luZ1NlY3Rpb25zOiByZWFkb25seSBBYWFQaGFzZVtdLFxyXG4gIGZpeGVyOiBSdWxlLlJ1bGVGaXhlcixcclxuKTogUnVsZS5GaXhbXSB7XHJcbiAgY29uc3QgYW5jaG9ycyA9IGdldFNlY3Rpb25BbmNob3JzKGFuYWx5c2lzKTtcclxuXHJcbiAgaWYgKGFuY2hvcnMgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIFsuLi5idWlsZEFuY2hvck1hcChhbmNob3JzLCBtaXNzaW5nU2VjdGlvbnMpLmVudHJpZXMoKV0ubWFwKFxyXG4gICAgKFtvZmZzZXQsIHBoYXNlc10pID0+XHJcbiAgICAgIGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXgoeyBhbmFseXNpcywgZml4ZXIsIG9mZnNldCwgcGhhc2VzIH0pLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZWxlY3RzIHRoZSBhbmNob3Igc3RhdGVtZW50IHVzZWQgZm9yIG9uZSBtaXNzaW5nIEFBQSBwaGFzZS5cclxuICogQHBhcmFtIGFuY2hvcnMgQW5jaG9yIHN0YXRlbWVudHMgYXZhaWxhYmxlIGZvciBpbnNlcnRpb24uXHJcbiAqIEBwYXJhbSBwaGFzZSBNaXNzaW5nIHBoYXNlIGJlaW5nIGluc2VydGVkLlxyXG4gKiBAcmV0dXJucyBTdGF0ZW1lbnQgbm9kZSB1c2VkIGFzIHRoZSBpbnNlcnRpb24gYW5jaG9yLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvck5vZGUoeyBmaXJzdFN0YXRlbWVudDoge30gYXMgbmV2ZXIsIGxhc3RTdGF0ZW1lbnQ6IHt9IGFzIG5ldmVyLCBtaWRkbGVTdGF0ZW1lbnQ6IHt9IGFzIG5ldmVyIH0sIFwiQXJyYW5nZVwiKTtcclxuICogdm9pZCBhbmNob3I7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QW5jaG9yTm9kZShcclxuICBhbmNob3JzOiBTdGF0ZW1lbnRBbmNob3JzLFxyXG4gIHBoYXNlOiBBYWFQaGFzZSxcclxuKTogU3RhdGVtZW50QW5jaG9yc1trZXlvZiBTdGF0ZW1lbnRBbmNob3JzXSB7XHJcbiAgc3dpdGNoIChwaGFzZSkge1xyXG4gICAgY2FzZSBcIkFjdFwiOiB7XHJcbiAgICAgIHJldHVybiBhbmNob3JzLm1pZGRsZVN0YXRlbWVudDtcclxuICAgIH1cclxuICAgIGNhc2UgXCJBcnJhbmdlXCI6IHtcclxuICAgICAgcmV0dXJuIGFuY2hvcnMuZmlyc3RTdGF0ZW1lbnQ7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiQXNzZXJ0XCI6IHtcclxuICAgICAgcmV0dXJuIGFuY2hvcnMubGFzdFN0YXRlbWVudDtcclxuICAgIH1cclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgcmV0dXJuIGFuY2hvcnMubGFzdFN0YXRlbWVudDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyB0aGUgaW5kZW50YXRpb24gcHJlZml4IGZyb20gYSBzb3VyY2UgbGluZS5cclxuICogQHBhcmFtIGxpbmVUZXh0IFNvdXJjZSBsaW5lIHRleHQuXHJcbiAqIEByZXR1cm5zIExlYWRpbmcgd2hpdGVzcGFjZSBmb3IgdGhlIGxpbmUuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgaW5kZW50YXRpb24gPSBnZXRMaW5lSW5kZW50YXRpb24oXCIgIHZhbHVlXCIpO1xyXG4gKiB2b2lkIGluZGVudGF0aW9uO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldExpbmVJbmRlbnRhdGlvbihsaW5lVGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmVUZXh0LnRyaW1TdGFydCgpO1xyXG5cclxuICByZXR1cm4gbGluZVRleHQuc2xpY2UoMCwgbGluZVRleHQubGVuZ3RoIC0gdHJpbW1lZExpbmUubGVuZ3RoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNlbGVjdHMgdGhlIHN0YXRlbWVudCBub2RlcyB1c2VkIGFzIGluc2VydGlvbiBhbmNob3JzIGZvciBtaXNzaW5nIHNlY3Rpb25zLlxyXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXHJcbiAqIEByZXR1cm5zIEFuY2hvciBzdGF0ZW1lbnRzIGZvciBBcnJhbmdlLCBBY3QsIGFuZCBBc3NlcnQgaW5zZXJ0aW9uLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGFuY2hvcnMgPSBnZXRTZWN0aW9uQW5jaG9ycyh7IHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xyXG4gKiB2b2lkIGFuY2hvcnM7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U2VjdGlvbkFuY2hvcnMoXHJcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxyXG4pOiBTdGF0ZW1lbnRBbmNob3JzIHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCBbZmlyc3RTdGF0ZW1lbnRFbnRyeV0gPSBhbmFseXNpcy5zdGF0ZW1lbnRzO1xyXG4gIGNvbnN0IG1pZGRsZVN0YXRlbWVudEVudHJ5ID1cclxuICAgIGFuYWx5c2lzLnN0YXRlbWVudHNbXHJcbiAgICAgIE1hdGgubWluKFxyXG4gICAgICAgIGFuYWx5c2lzLnN0YXRlbWVudHMubGVuZ3RoIC0gMSxcclxuICAgICAgICBNYXRoLmZsb29yKGFuYWx5c2lzLnN0YXRlbWVudHMubGVuZ3RoIC8gMiksXHJcbiAgICAgIClcclxuICAgIF07XHJcbiAgY29uc3QgbGFzdFN0YXRlbWVudEVudHJ5ID0gYW5hbHlzaXMuc3RhdGVtZW50cy5hdCgtMSk7XHJcblxyXG4gIGlmIChcclxuICAgIGZpcnN0U3RhdGVtZW50RW50cnkgPT09IHZvaWQgMCB8fFxyXG4gICAgbWlkZGxlU3RhdGVtZW50RW50cnkgPT09IHZvaWQgMCB8fFxyXG4gICAgbGFzdFN0YXRlbWVudEVudHJ5ID09PSB2b2lkIDBcclxuICApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgZmlyc3RTdGF0ZW1lbnQ6IGZpcnN0U3RhdGVtZW50RW50cnkubm9kZSxcclxuICAgIGxhc3RTdGF0ZW1lbnQ6IGxhc3RTdGF0ZW1lbnRFbnRyeS5ub2RlLFxyXG4gICAgbWlkZGxlU3RhdGVtZW50OiBtaWRkbGVTdGF0ZW1lbnRFbnRyeS5ub2RlLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBtaXNzaW5nIHNlY3Rpb24gaW5zZXJ0aW9uIG5lZWRzIGEgYmxhbmsgbGluZSBwcmVmaXguXHJcbiAqIEBwYXJhbSBwaGFzZXMgTWlzc2luZyBwaGFzZXMgaW5zZXJ0ZWQgYXQgdGhlIHNhbWUgb2Zmc2V0LlxyXG4gKiBAcGFyYW0gcHJldmlvdXNMaW5lIFNvdXJjZSBsaW5lIGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBpbnNlcnRpb24gcG9pbnQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGluc2VydGVkIG1hcmtlciBzaG91bGQgc3RhcnQgd2l0aCBhIGJsYW5rIGxpbmUuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgYWN0dWFsID0gc2hvdWxkSW5zZXJ0TGVhZGluZ0JsYW5rTGluZShbXCJBY3RcIl0sIFwicnVuKCk7XCIpO1xyXG4gKiB2b2lkIGFjdHVhbDtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBzaG91bGRJbnNlcnRMZWFkaW5nQmxhbmtMaW5lKFxyXG4gIHBoYXNlczogcmVhZG9ubHkgQWFhUGhhc2VbXSxcclxuICBwcmV2aW91c0xpbmU6IHN0cmluZyxcclxuKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHBoYXNlcy5zb21lKChwaGFzZSkgPT4gcGhhc2UgIT09IFwiQXJyYW5nZVwiKSAmJlxyXG4gICAgcHJldmlvdXNMaW5lLnRyaW0oKS5sZW5ndGggPiAwXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IHsgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzIH07XHJcbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import type { Rule } from "eslint";
2
+ /** Enforces explicit AAA section comments and spacing within supported test blocks. */
2
3
  declare const requireAaaSectionsRule: Rule.RuleModule;
3
4
  export { requireAaaSectionsRule };
4
5
  //# sourceMappingURL=rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/require-aaa-sections/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAYnC,uFAAuF;AACvF,QAAA,MAAM,sBAAsB,EAAE,IAAI,CAAC,UAoClC,CAAC;AAgJF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,134 @@
1
+ import { analyzeTestBlock, getLineStartRange, getPhaseBoundaryComments, hasBlankLineBeforeComment, } from "../aaa/index.js";
2
+ import { buildMissingSectionFixes } from "./missing-section-fixes.js";
3
+ /** Enforces explicit AAA section comments and spacing within supported test blocks. */
4
+ const requireAaaSectionsRule = {
5
+ create(context) {
6
+ return {
7
+ CallExpression(node) {
8
+ const analysis = analyzeTestBlock(context, node);
9
+ if (analysis === void 0) {
10
+ return;
11
+ }
12
+ reportMissingSections(context, analysis);
13
+ reportEmptySections(context, analysis);
14
+ reportCodeBeforeArrange(context, analysis);
15
+ reportBlankLineSeparators(context, analysis);
16
+ },
17
+ };
18
+ },
19
+ meta: {
20
+ docs: {
21
+ description: "Require strict // Arrange, // Act, and // Assert markers in supported test blocks.",
22
+ recommended: false,
23
+ url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/require-aaa-sections.md",
24
+ },
25
+ fixable: "code",
26
+ messages: {
27
+ blankLineBeforeSection: "Insert a blank line before the // {{section}} section comment.",
28
+ codeBeforeArrange: "Move setup statements below the first // Arrange section comment.",
29
+ emptySection: "The // {{section}} section must contain code; comments alone do not count.",
30
+ missingSections: "Add the missing AAA section comments: {{sections}}.",
31
+ },
32
+ schema: [],
33
+ type: "layout",
34
+ },
35
+ };
36
+ /**
37
+ * Reports section comments that are missing a blank line above them.
38
+ * @param context ESLint rule context.
39
+ * @param analysis Parsed test-block analysis.
40
+ * @example
41
+ * ```typescript
42
+ * reportBlankLineSeparators({ report() {} } as never, { sectionComments: [], sourceText: "" } as never);
43
+ * ```
44
+ */
45
+ function reportBlankLineSeparators(context, analysis) {
46
+ const firstSectionComment = analysis.sectionComments[0]?.comment;
47
+ for (const sectionComment of getPhaseBoundaryComments(analysis)) {
48
+ if (sectionComment.comment !== firstSectionComment &&
49
+ !hasBlankLineBeforeComment(analysis.sourceText, sectionComment.comment)) {
50
+ context.report({
51
+ data: { section: sectionComment.phases.join(" & ") },
52
+ fix: (fixer) => fixer.insertTextBeforeRange(getLineStartRange(analysis.sourceText, sectionComment.comment.loc.start.line), analysis.newline),
53
+ messageId: "blankLineBeforeSection",
54
+ node: sectionComment.comment,
55
+ });
56
+ }
57
+ }
58
+ }
59
+ /**
60
+ * Reports executable statements that appear before the first Arrange section.
61
+ * @param context ESLint rule context.
62
+ * @param analysis Parsed test-block analysis.
63
+ * @example
64
+ * ```typescript
65
+ * reportCodeBeforeArrange({ report() {} } as never, { sectionComments: [], statements: [] } as never);
66
+ * ```
67
+ */
68
+ function reportCodeBeforeArrange(context, analysis) {
69
+ const firstArrangeLine = analysis.sectionComments.find((sectionComment) => sectionComment.phases.includes("Arrange"))?.comment.loc.start.line;
70
+ if (firstArrangeLine === void 0) {
71
+ return;
72
+ }
73
+ const statementBeforeArrange = analysis.statements.find((statement) => statement.node.loc.start.line < firstArrangeLine);
74
+ if (statementBeforeArrange === void 0) {
75
+ return;
76
+ }
77
+ context.report({
78
+ messageId: "codeBeforeArrange",
79
+ node: statementBeforeArrange.node,
80
+ });
81
+ }
82
+ /**
83
+ * Reports Arrange sections that contain only comments or whitespace.
84
+ * @param context ESLint rule context.
85
+ * @param analysis Parsed test-block analysis.
86
+ * @example
87
+ * ```typescript
88
+ * reportEmptySections({ report() {} } as never, { sectionComments: [], statements: [] } as never);
89
+ * ```
90
+ */
91
+ function reportEmptySections(context, analysis) {
92
+ for (const [index, sectionComment] of analysis.sectionComments.entries()) {
93
+ const nextSectionLine = analysis.sectionComments[index + 1]?.comment.loc.start.line;
94
+ const hasArrangePhase = sectionComment.phases.includes("Arrange");
95
+ const hasCodeInSection = analysis.statements.some((statement) => {
96
+ const statementLine = statement.node.loc.start.line;
97
+ return (statementLine > sectionComment.comment.loc.start.line &&
98
+ (nextSectionLine === void 0 || statementLine < nextSectionLine));
99
+ });
100
+ if (hasArrangePhase && !hasCodeInSection) {
101
+ context.report({
102
+ data: { section: sectionComment.phases.join(" & ") },
103
+ messageId: "emptySection",
104
+ node: sectionComment.comment,
105
+ });
106
+ }
107
+ }
108
+ }
109
+ /**
110
+ * Reports any AAA section markers that are missing from a supported test block.
111
+ * @param context ESLint rule context.
112
+ * @param analysis Parsed test-block analysis.
113
+ * @example
114
+ * ```typescript
115
+ * reportMissingSections({ report() {} } as never, { sectionComments: [] } as never);
116
+ * ```
117
+ */
118
+ function reportMissingSections(context, analysis) {
119
+ const presentSections = new Set(analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases));
120
+ const missingSections = ["Arrange", "Act", "Assert"].filter((phase) => !presentSections.has(phase));
121
+ if (missingSections.length === 0) {
122
+ return;
123
+ }
124
+ context.report({
125
+ data: { sections: missingSections.join(", ") },
126
+ fix: analysis.bodyLineCount >= 3
127
+ ? (fixer) => buildMissingSectionFixes(analysis, missingSections, fixer)
128
+ : void 0,
129
+ messageId: "missingSections",
130
+ node: analysis.callExpression,
131
+ });
132
+ }
133
+ export { requireAaaSectionsRule };
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9yZXF1aXJlLWFhYS1zZWN0aW9ucy9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4Qix5QkFBeUIsR0FDMUIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsdUZBQXVGO0FBQ3ZGLE1BQU0sc0JBQXNCLEdBQW9CO0lBQzlDLE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPO1lBQ0wsY0FBYyxDQUFDLElBQUk7Z0JBQ2pCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsT0FBTztnQkFDVCxDQUFDO2dCQUVELHFCQUFxQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDekMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN2Qyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvQyxDQUFDO1NBQzBCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksRUFBRTtRQUNKLElBQUksRUFBRTtZQUNKLFdBQVcsRUFDVCxvRkFBb0Y7WUFDdEYsV0FBVyxFQUFFLEtBQUs7WUFDbEIsR0FBRyxFQUFFLHVGQUF1RjtTQUM3RjtRQUNELE9BQU8sRUFBRSxNQUFNO1FBQ2YsUUFBUSxFQUFFO1lBQ1Isc0JBQXNCLEVBQ3BCLGdFQUFnRTtZQUNsRSxpQkFBaUIsRUFDZixtRUFBbUU7WUFDckUsWUFBWSxFQUNWLDRFQUE0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QUFDLEVBQUU7UUFDOUMsR0FBRyxFQUNELFFBQVEsQ0FBQyxhQUFhLElBQUksQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQyxLQUFxQixFQUFjLEVBQUUsQ0FDcEMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUM7WUFDOUQsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNaLFNBQVMsRUFBRSxpQkFBaUI7UUFDNUIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxjQUFjO0tBQzlCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBUZXN0QmxvY2tBbmFseXNpcyB9IGZyb20gXCIuLi9hYWFcIjtcblxuaW1wb3J0IHtcbiAgYW5hbHl6ZVRlc3RCbG9jayxcbiAgZ2V0TGluZVN0YXJ0UmFuZ2UsXG4gIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyxcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCxcbn0gZnJvbSBcIi4uL2FhYVwiO1xuaW1wb3J0IHsgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzIH0gZnJvbSBcIi4vbWlzc2luZy1zZWN0aW9uLWZpeGVzXCI7XG5cbi8qKiBFbmZvcmNlcyBleHBsaWNpdCBBQUEgc2VjdGlvbiBjb21tZW50cyBhbmQgc3BhY2luZyB3aXRoaW4gc3VwcG9ydGVkIHRlc3QgYmxvY2tzLiAqL1xuY29uc3QgcmVxdWlyZUFhYVNlY3Rpb25zUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbmFseXNpcyA9IGFuYWx5emVUZXN0QmxvY2soY29udGV4dCwgbm9kZSk7XG4gICAgICAgIGlmIChhbmFseXNpcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwb3J0TWlzc2luZ1NlY3Rpb25zKGNvbnRleHQsIGFuYWx5c2lzKTtcbiAgICAgICAgcmVwb3J0RW1wdHlTZWN0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlKGNvbnRleHQsIGFuYWx5c2lzKTtcbiAgICAgICAgcmVwb3J0QmxhbmtMaW5lU2VwYXJhdG9ycyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICB9LFxuICAgIH0gc2F0aXNmaWVzIFJ1bGUuUnVsZUxpc3RlbmVyO1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUmVxdWlyZSBzdHJpY3QgLy8gQXJyYW5nZSwgLy8gQWN0LCBhbmQgLy8gQXNzZXJ0IG1hcmtlcnMgaW4gc3VwcG9ydGVkIHRlc3QgYmxvY2tzLlwiLFxuICAgICAgcmVjb21tZW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJsb3RpL2VzbGludC1wbHVnaW4vYmxvYi9tYWluL2RvY3MvcnVsZXMvcmVxdWlyZS1hYWEtc2VjdGlvbnMubWRcIixcbiAgICB9LFxuICAgIGZpeGFibGU6IFwiY29kZVwiLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBibGFua0xpbmVCZWZvcmVTZWN0aW9uOlxuICAgICAgICBcIkluc2VydCBhIGJsYW5rIGxpbmUgYmVmb3JlIHRoZSAvLyB7e3NlY3Rpb259fSBzZWN0aW9uIGNvbW1lbnQuXCIsXG4gICAgICBjb2RlQmVmb3JlQXJyYW5nZTpcbiAgICAgICAgXCJNb3ZlIHNldHVwIHN0YXRlbWVudHMgYmVsb3cgdGhlIGZpcnN0IC8vIEFycmFuZ2Ugc2VjdGlvbiBjb21tZW50LlwiLFxuICAgICAgZW1wdHlTZWN0aW9uOlxuICAgICAgICBcIlRoZSAvLyB7e3NlY3Rpb259fSBzZWN0aW9uIG11c3QgY29udGFpbiBjb2RlOyBjb21tZW50cyBhbG9uZSBkbyBub3QgY291bnQuXCIsXG4gICAgICBtaXNzaW5nU2VjdGlvbnM6IFwiQWRkIHRoZSBtaXNzaW5nIEFBQSBzZWN0aW9uIGNvbW1lbnRzOiB7e3NlY3Rpb25zfX0uXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwibGF5b3V0XCIsXG4gIH0sXG59O1xuXG4vKipcbiAqIFJlcG9ydHMgc2VjdGlvbiBjb21tZW50cyB0aGF0IGFyZSBtaXNzaW5nIGEgYmxhbmsgbGluZSBhYm92ZSB0aGVtLlxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXBvcnRCbGFua0xpbmVTZXBhcmF0b3JzKHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBzZWN0aW9uQ29tbWVudHM6IFtdLCBzb3VyY2VUZXh0OiBcIlwiIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydEJsYW5rTGluZVNlcGFyYXRvcnMoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBjb25zdCBmaXJzdFNlY3Rpb25Db21tZW50ID0gYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzWzBdPy5jb21tZW50O1xuXG4gIGZvciAoY29uc3Qgc2VjdGlvbkNvbW1lbnQgb2YgZ2V0UGhhc2VCb3VuZGFyeUNvbW1lbnRzKGFuYWx5c2lzKSkge1xuICAgIGlmIChcbiAgICAgIHNlY3Rpb25Db21tZW50LmNvbW1lbnQgIT09IGZpcnN0U2VjdGlvbkNvbW1lbnQgJiZcbiAgICAgICFoYXNCbGFua0xpbmVCZWZvcmVDb21tZW50KGFuYWx5c2lzLnNvdXJjZVRleHQsIHNlY3Rpb25Db21tZW50LmNvbW1lbnQpXG4gICAgKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIGRhdGE6IHsgc2VjdGlvbjogc2VjdGlvbkNvbW1lbnQucGhhc2VzLmpvaW4oXCIgJiBcIikgfSxcbiAgICAgICAgZml4OiAoZml4ZXIpID0+XG4gICAgICAgICAgZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZVJhbmdlKFxuICAgICAgICAgICAgZ2V0TGluZVN0YXJ0UmFuZ2UoXG4gICAgICAgICAgICAgIGFuYWx5c2lzLnNvdXJjZVRleHQsXG4gICAgICAgICAgICAgIHNlY3Rpb25Db21tZW50LmNvbW1lbnQubG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYW5hbHlzaXMubmV3bGluZSxcbiAgICAgICAgICApLFxuICAgICAgICBtZXNzYWdlSWQ6IFwiYmxhbmtMaW5lQmVmb3JlU2VjdGlvblwiLFxuICAgICAgICBub2RlOiBzZWN0aW9uQ29tbWVudC5jb21tZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBleGVjdXRhYmxlIHN0YXRlbWVudHMgdGhhdCBhcHBlYXIgYmVmb3JlIHRoZSBmaXJzdCBBcnJhbmdlIHNlY3Rpb24uXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlKHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBzZWN0aW9uQ29tbWVudHM6IFtdLCBzdGF0ZW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRDb2RlQmVmb3JlQXJyYW5nZShcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxuKTogdm9pZCB7XG4gIGNvbnN0IGZpcnN0QXJyYW5nZUxpbmUgPSBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuZmluZCgoc2VjdGlvbkNvbW1lbnQpID0+XG4gICAgc2VjdGlvbkNvbW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQXJyYW5nZVwiKSxcbiAgKT8uY29tbWVudC5sb2Muc3RhcnQubGluZTtcbiAgaWYgKGZpcnN0QXJyYW5nZUxpbmUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudEJlZm9yZUFycmFuZ2UgPSBhbmFseXNpcy5zdGF0ZW1lbnRzLmZpbmQoXG4gICAgKHN0YXRlbWVudCkgPT4gc3RhdGVtZW50Lm5vZGUubG9jLnN0YXJ0LmxpbmUgPCBmaXJzdEFycmFuZ2VMaW5lLFxuICApO1xuICBpZiAoc3RhdGVtZW50QmVmb3JlQXJyYW5nZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29udGV4dC5yZXBvcnQoe1xuICAgIG1lc3NhZ2VJZDogXCJjb2RlQmVmb3JlQXJyYW5nZVwiLFxuICAgIG5vZGU6IHN0YXRlbWVudEJlZm9yZUFycmFuZ2Uubm9kZSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmVwb3J0cyBBcnJhbmdlIHNlY3Rpb25zIHRoYXQgY29udGFpbiBvbmx5IGNvbW1lbnRzIG9yIHdoaXRlc3BhY2UuXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydEVtcHR5U2VjdGlvbnMoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10sIHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydEVtcHR5U2VjdGlvbnMoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtpbmRleCwgc2VjdGlvbkNvbW1lbnRdIG9mIGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBuZXh0U2VjdGlvbkxpbmUgPVxuICAgICAgYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzW2luZGV4ICsgMV0/LmNvbW1lbnQubG9jLnN0YXJ0LmxpbmU7XG4gICAgY29uc3QgaGFzQXJyYW5nZVBoYXNlID0gc2VjdGlvbkNvbW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQXJyYW5nZVwiKTtcbiAgICBjb25zdCBoYXNDb2RlSW5TZWN0aW9uID0gYW5hbHlzaXMuc3RhdGVtZW50cy5zb21lKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudExpbmUgPSBzdGF0ZW1lbnQubm9kZS5sb2Muc3RhcnQubGluZTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgc3RhdGVtZW50TGluZSA+IHNlY3Rpb25Db21tZW50LmNvbW1lbnQubG9jLnN0YXJ0LmxpbmUgJiZcbiAgICAgICAgKG5leHRTZWN0aW9uTGluZSA9PT0gdm9pZCAwIHx8IHN0YXRlbWVudExpbmUgPCBuZXh0U2VjdGlvbkxpbmUpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKGhhc0FycmFuZ2VQaGFzZSAmJiAhaGFzQ29kZUluU2VjdGlvbikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IHNlY3Rpb246IHNlY3Rpb25Db21tZW50LnBoYXNlcy5qb2luKFwiICYgXCIpIH0sXG4gICAgICAgIG1lc3NhZ2VJZDogXCJlbXB0eVNlY3Rpb25cIixcbiAgICAgICAgbm9kZTogc2VjdGlvbkNvbW1lbnQuY29tbWVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgYW55IEFBQSBzZWN0aW9uIG1hcmtlcnMgdGhhdCBhcmUgbWlzc2luZyBmcm9tIGEgc3VwcG9ydGVkIHRlc3QgYmxvY2suXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nU2VjdGlvbnMoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBjb25zdCBwcmVzZW50U2VjdGlvbnMgPSBuZXcgU2V0KFxuICAgIGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5mbGF0TWFwKChzZWN0aW9uQ29tbWVudCkgPT4gc2VjdGlvbkNvbW1lbnQucGhhc2VzKSxcbiAgKTtcbiAgY29uc3QgbWlzc2luZ1NlY3Rpb25zID0gKFtcIkFycmFuZ2VcIiwgXCJBY3RcIiwgXCJBc3NlcnRcIl0gYXMgY29uc3QpLmZpbHRlcihcbiAgICAocGhhc2UpID0+ICFwcmVzZW50U2VjdGlvbnMuaGFzKHBoYXNlKSxcbiAgKTtcblxuICBpZiAobWlzc2luZ1NlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KHtcbiAgICBkYXRhOiB7IHNlY3Rpb25zOiBtaXNzaW5nU2VjdGlvbnMuam9pbihcIiwgXCIpIH0sXG4gICAgZml4OlxuICAgICAgYW5hbHlzaXMuYm9keUxpbmVDb3VudCA+PSAzXG4gICAgICAgID8gKGZpeGVyOiBSdWxlLlJ1bGVGaXhlcik6IFJ1bGUuRml4W10gPT5cbiAgICAgICAgICAgIGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlcyhhbmFseXNpcywgbWlzc2luZ1NlY3Rpb25zLCBmaXhlcilcbiAgICAgICAgOiB2b2lkIDAsXG4gICAgbWVzc2FnZUlkOiBcIm1pc3NpbmdTZWN0aW9uc1wiLFxuICAgIG5vZGU6IGFuYWx5c2lzLmNhbGxFeHByZXNzaW9uLFxuICB9KTtcbn1cblxuZXhwb3J0IHsgcmVxdWlyZUFhYVNlY3Rpb25zUnVsZSB9O1xuIl19