@codeperfect/eslint-plugin 2.0.0 → 2.2.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 (301) hide show
  1. package/README.md +3 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/application/custom-rules.d.ts +8 -8
  4. package/dist/application/custom-rules.js +14 -14
  5. package/dist/application/index.d.ts +1 -1
  6. package/dist/application/index.d.ts.map +1 -1
  7. package/dist/application/index.js +2 -2
  8. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  9. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +3 -4
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -1
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +5 -3
  12. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -1
  13. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +17 -7
  14. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
  15. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +36 -4
  16. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +2 -0
  17. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -1
  18. package/dist/domain/architecture/consistent-barrel-files/index.js +3 -1
  19. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.d.ts +5 -0
  20. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.d.ts.map +1 -0
  21. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.js +247 -0
  22. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts +5 -0
  23. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts.map +1 -0
  24. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.js +136 -0
  25. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -1
  26. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +8 -3
  27. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
  28. package/dist/domain/architecture/consistent-barrel-files/rule.js +12 -5
  29. package/dist/domain/architecture/index.d.ts +2 -1
  30. package/dist/domain/architecture/index.d.ts.map +1 -1
  31. package/dist/domain/architecture/index.js +3 -2
  32. package/dist/domain/architecture/no-unused-exports/index.d.ts +3 -0
  33. package/dist/domain/architecture/no-unused-exports/index.d.ts.map +1 -0
  34. package/dist/domain/architecture/no-unused-exports/index.js +2 -0
  35. package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.d.ts +50 -0
  36. package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.d.ts.map +1 -0
  37. package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.js +141 -0
  38. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts +49 -0
  39. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts.map +1 -0
  40. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.js +608 -0
  41. package/dist/domain/architecture/no-unused-exports/rule.d.ts +5 -0
  42. package/dist/domain/architecture/no-unused-exports/rule.d.ts.map +1 -0
  43. package/dist/domain/architecture/no-unused-exports/rule.js +82 -0
  44. package/dist/domain/architecture/no-unused-exports/types.d.ts +32 -0
  45. package/dist/domain/architecture/no-unused-exports/types.d.ts.map +1 -0
  46. package/dist/domain/architecture/no-unused-exports/types.js +2 -0
  47. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  48. package/dist/domain/core/no-multiple-declarators/rule.js +58 -6
  49. package/dist/domain/core/no-multiple-declarators/types.d.ts +3 -1
  50. package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -1
  51. package/dist/domain/core/no-multiple-declarators/types.js +5 -2
  52. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -1
  53. package/dist/domain/core/prefer-interface-types/rule.js +94 -23
  54. package/dist/domain/custom-rule-documentation.d.ts +3 -14
  55. package/dist/domain/custom-rule-documentation.d.ts.map +1 -1
  56. package/dist/domain/custom-rule-documentation.js +3 -2
  57. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -1
  58. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +11 -2
  59. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -1
  60. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +1 -1
  61. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +1 -1
  62. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  63. package/dist/domain/docs/no-interface-member-docs/rule.js +12 -4
  64. package/dist/domain/docs/require-example-language/examples.d.ts +4 -15
  65. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -1
  66. package/dist/domain/docs/require-example-language/examples.js +119 -26
  67. package/dist/domain/docs/require-example-language/fixes.d.ts +1 -21
  68. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -1
  69. package/dist/domain/docs/require-example-language/fixes.js +5 -2
  70. package/dist/domain/docs/require-example-language/reporting.d.ts +2 -38
  71. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -1
  72. package/dist/domain/docs/require-example-language/reporting.js +2 -2
  73. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
  74. package/dist/domain/docs/require-example-language/rule.js +7 -3
  75. package/dist/domain/docs/require-example-language/types.d.ts +1 -1
  76. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -1
  77. package/dist/domain/docs/require-example-language/types.js +1 -1
  78. package/dist/domain/docs/single-line-jsdoc/rule.d.ts +1 -2
  79. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
  80. package/dist/domain/docs/single-line-jsdoc/rule.js +18 -13
  81. package/dist/domain/index.d.ts +2 -3
  82. package/dist/domain/index.d.ts.map +1 -1
  83. package/dist/domain/index.js +3 -4
  84. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +2 -78
  85. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -1
  86. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +121 -3
  87. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
  88. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +199 -4
  89. package/dist/domain/testing/aaa/analyzer.analysis.js +30 -188
  90. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +1 -92
  91. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -1
  92. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +93 -0
  93. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
  94. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +184 -0
  95. package/dist/domain/testing/aaa/analyzer.assertions.js +5 -283
  96. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +62 -0
  97. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
  98. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +106 -0
  99. package/dist/domain/testing/aaa/analyzer.classification.d.ts +1 -74
  100. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -1
  101. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +75 -0
  102. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
  103. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +202 -0
  104. package/dist/domain/testing/aaa/analyzer.classification.js +5 -201
  105. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +13 -0
  106. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
  107. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +32 -0
  108. package/dist/domain/testing/aaa/analyzer.super.d.ts +6 -13
  109. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
  110. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +14 -0
  111. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
  112. package/dist/domain/testing/aaa/analyzer.super.helpers.js +64 -0
  113. package/dist/domain/testing/aaa/analyzer.super.js +29 -61
  114. package/dist/domain/testing/aaa/index.d.ts +1 -2
  115. package/dist/domain/testing/aaa/index.d.ts.map +1 -1
  116. package/dist/domain/testing/aaa/index.js +2 -2
  117. package/dist/domain/testing/aaa/types.d.ts +1 -1
  118. package/dist/domain/testing/aaa/types.d.ts.map +1 -1
  119. package/dist/domain/testing/aaa/types.js +1 -1
  120. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -1
  121. package/dist/domain/testing/assert-actual-expected-names/rule.js +33 -5
  122. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -1
  123. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -1
  124. package/dist/domain/testing/enforce-aaa-phase-purity/index.js +3 -2
  125. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +1 -1
  126. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -1
  127. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +1 -1
  128. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +1 -1
  129. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -1
  130. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +78 -16
  131. package/dist/domain/testing/{require-aaa-sections → enforce-aaa-structure}/missing-section-fixes.d.ts +1 -1
  132. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.d.ts.map +1 -0
  133. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.js +150 -0
  134. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
  135. package/dist/domain/testing/enforce-aaa-structure/rule.js +165 -3
  136. package/dist/domain/testing/index.d.ts +0 -3
  137. package/dist/domain/testing/index.d.ts.map +1 -1
  138. package/dist/domain/testing/index.js +1 -4
  139. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +1 -15
  140. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -1
  141. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +2 -71
  142. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -1
  143. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +4 -2
  144. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +1 -13
  145. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -1
  146. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +3 -21
  147. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -1
  148. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +2 -1
  149. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -1
  150. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +1 -1
  151. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +6 -6
  152. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +1 -12
  153. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -1
  154. package/dist/domain/testing/prefer-vi-mocked-import/match.js +149 -15
  155. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
  156. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +6 -3
  157. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
  158. package/dist/domain/testing/require-act-result-capture/rule.js +42 -10
  159. package/dist/domain/testing/require-test-companion/index.d.ts +0 -1
  160. package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -1
  161. package/dist/domain/testing/require-test-companion/index.js +1 -2
  162. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts +2 -1
  163. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -1
  164. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +13 -58
  165. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts +2 -1
  166. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -1
  167. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +6 -5
  168. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -1
  169. package/dist/domain/testing/require-test-companion/rule.js +34 -9
  170. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -1
  171. package/dist/domain/testing/single-act-statement/rule.js +11 -5
  172. package/dist/index.d.ts +1 -1
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +2 -2
  175. package/dist/infrastructure/codeperfect-plugin.d.ts +6 -6
  176. package/dist/infrastructure/codeperfect-plugin.js +5 -5
  177. package/dist/infrastructure/presets.d.ts.map +1 -1
  178. package/dist/infrastructure/presets.js +23 -7
  179. package/package.json +37 -38
  180. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +0 -41
  181. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
  182. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -87
  183. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +0 -40
  184. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
  185. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -91
  186. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +0 -4
  187. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +0 -1
  188. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +0 -4
  189. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts +0 -141
  190. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
  191. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +0 -20
  192. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +0 -1
  193. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +0 -25
  194. package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +0 -235
  195. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +0 -101
  196. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +0 -1
  197. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +0 -108
  198. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +0 -35
  199. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +0 -1
  200. package/dist/domain/core/no-multiple-declarators/rule.fixes.js +0 -95
  201. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +0 -4
  202. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +0 -1
  203. package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +0 -4
  204. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +0 -4
  205. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +0 -1
  206. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +0 -4
  207. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts +0 -110
  208. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
  209. package/dist/domain/core/prefer-interface-types/test-helpers.js +0 -116
  210. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -89
  211. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
  212. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
  213. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts +0 -103
  214. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
  215. package/dist/domain/docs/no-interface-member-docs/test-helpers.js +0 -157
  216. package/dist/domain/docs/require-example-language/create-fixer.d.ts +0 -5
  217. package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +0 -1
  218. package/dist/domain/docs/require-example-language/create-fixer.js +0 -5
  219. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +0 -4
  220. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +0 -1
  221. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +0 -5
  222. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +0 -4
  223. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +0 -1
  224. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +0 -5
  225. package/dist/domain/docs/test-helpers.d.ts +0 -50
  226. package/dist/domain/docs/test-helpers.d.ts.map +0 -1
  227. package/dist/domain/docs/test-helpers.js +0 -107
  228. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +0 -9
  229. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +0 -1
  230. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +0 -10
  231. package/dist/domain/testing/aaa/analyzer.d.ts +0 -46
  232. package/dist/domain/testing/aaa/analyzer.d.ts.map +0 -1
  233. package/dist/domain/testing/aaa/analyzer.js +0 -59
  234. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +0 -4
  235. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +0 -1
  236. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +0 -4
  237. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +0 -42
  238. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +0 -1
  239. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +0 -188
  240. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts +0 -5
  241. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
  242. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +0 -34
  243. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +0 -20
  244. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +0 -1
  245. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +0 -39
  246. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +0 -86
  247. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +0 -1
  248. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +0 -150
  249. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +0 -2
  250. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +0 -1
  251. package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +0 -2
  252. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +0 -14
  253. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +0 -1
  254. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +0 -81
  255. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +0 -13
  256. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +0 -1
  257. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +0 -189
  258. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +0 -25
  259. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +0 -1
  260. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +0 -92
  261. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +0 -32
  262. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +0 -1
  263. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +0 -164
  264. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +0 -5
  265. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +0 -1
  266. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +0 -4
  267. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +0 -1
  268. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +0 -4
  269. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +0 -4
  270. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +0 -1
  271. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +0 -4
  272. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +0 -62
  273. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +0 -4
  274. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +0 -1
  275. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +0 -4
  276. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +0 -24
  277. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +0 -1
  278. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +0 -113
  279. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +0 -36
  280. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +0 -1
  281. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +0 -138
  282. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +0 -203
  283. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +0 -1
  284. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +0 -2
  285. package/dist/domain/testing/require-aaa-sections/index.d.ts +0 -2
  286. package/dist/domain/testing/require-aaa-sections/index.d.ts.map +0 -1
  287. package/dist/domain/testing/require-aaa-sections/index.js +0 -2
  288. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +0 -1
  289. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +0 -150
  290. package/dist/domain/testing/require-aaa-sections/rule.d.ts +0 -5
  291. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +0 -1
  292. package/dist/domain/testing/require-aaa-sections/rule.js +0 -129
  293. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +0 -104
  294. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +0 -1
  295. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +0 -217
  296. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts +0 -51
  297. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
  298. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +0 -184
  299. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts +0 -28
  300. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
  301. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +0 -26
@@ -1,203 +0,0 @@
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
- /** Returned object literal from the mock factory. */
12
- objectExpression: TSESTree.ObjectExpression;
13
- /** Property names already present in the rewritten object literal. */
14
- propertyNames: Set<string>;
15
- /** Nested property replacements collected for the object literal. */
16
- replacements: PropertyReplacement[];
17
- /** Expression returned by the mock factory. */
18
- returnExpression: TSESTree.Expression;
19
- /** Full source text of the current file. */
20
- sourceText: string;
21
- /** Target type inferred for the factory object. */
22
- targetType: ts.Type;
23
- }
24
- /** Context required to replace one object literal property safely. */
25
- interface BuildPropertyReplacementContext {
26
- /** TypeScript type checker used for assignability checks. */
27
- checker: ts.TypeChecker;
28
- /** Stable property key name from the mock object literal. */
29
- keyName: string;
30
- /** Static module specifier used by the mock call. */
31
- moduleSpecifier: string;
32
- /** Supported property being rewritten. */
33
- property: SupportedProperty;
34
- /** Parser services supplied by `@typescript-eslint`. */
35
- services: ParserServices;
36
- /** Full source text of the current file. */
37
- sourceText: string;
38
- /** Target property symbol from the imported module type. */
39
- targetPropertySymbol: ts.Symbol;
40
- }
41
- /** Input required to analyze a `vi.mock` or `vi.doMock` call. */
42
- interface CollectMatchContext {
43
- /** Call expression currently being analyzed. */
44
- callExpression: TSESTree.CallExpression;
45
- /** TypeScript type checker used for assignability checks. */
46
- checker: ts.TypeChecker;
47
- /** Parser services supplied by `@typescript-eslint`. */
48
- services: ParserServices;
49
- /** Full source text of the current file. */
50
- sourceText: string;
51
- }
52
- /** Context used to collect nested property replacements. */
53
- interface CollectPropertyReplacementsContext {
54
- /** TypeScript type checker used for assignability checks. */
55
- checker: ts.TypeChecker;
56
- /** Static module specifier used by the mock call. */
57
- moduleSpecifier: string;
58
- /** Returned object literal from the mock factory. */
59
- objectExpression: TSESTree.ObjectExpression;
60
- /** Parser services supplied by `@typescript-eslint`. */
61
- services: ParserServices;
62
- /** Full source text of the current file. */
63
- sourceText: string;
64
- /** Target type inferred for the factory object. */
65
- targetType: ts.Type;
66
- }
67
- /** Function expressions supported as Vitest mock factories. */
68
- type FactoryFunctionExpression = TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression;
69
- /** Resolved inputs required to analyze a matching Vitest mock factory. */
70
- interface FactoryMatchInput {
71
- /** Factory function supplied to `vi.mock` or `vi.doMock`. */
72
- factoryArgument: FactoryFunctionExpression;
73
- /** Static module specifier used by the mock call. */
74
- moduleSpecifier: string;
75
- /** Returned object literal from the mock factory. */
76
- objectExpression: TSESTree.ObjectExpression;
77
- /** Expression returned by the mock factory. */
78
- returnExpression: TSESTree.Expression;
79
- }
80
- /** Context used to inspect one callable signature for a mock factory. */
81
- interface MatchingSignatureReturnTypeContext {
82
- /** TypeScript type checker used for assignability checks. */
83
- checker: ts.TypeChecker;
84
- /** First mock-call argument node. */
85
- firstArgument: ts.Node;
86
- /** Type resolved for the first mock-call argument. */
87
- firstArgumentType: ts.Type;
88
- /** Callable signature being inspected. */
89
- signature: ts.Signature;
90
- /** TypeScript node for the factory callback argument. */
91
- tsFactoryArgument: ts.Node;
92
- }
93
- /** Text replacement emitted for a matching factory object. */
94
- interface MatchResult {
95
- /** Replacement source text for the returned object expression. */
96
- replacementText: string;
97
- /** Absolute range of the return expression to replace. */
98
- returnExpressionRange: TSESTree.Range;
99
- }
100
- /** Rule message identifiers emitted by this rule. */
101
- type MessageIds = "preferVitestIncrementalCasts";
102
- /** Normalized arguments extracted from a supported mock call. */
103
- interface MockFactoryArguments {
104
- /** Factory function supplied to `vi.mock` or `vi.doMock`. */
105
- factoryArgument: FactoryFunctionExpression;
106
- /** Static or import-expression module argument. */
107
- moduleArgument: TSESTree.Expression;
108
- }
109
- /** Rule options accepted by this rule. */
110
- type Options = [];
111
- /** Context required to decide whether an outer cast is still needed. */
112
- interface OuterCastContext {
113
- /** TypeScript type checker used for assignability checks. */
114
- checker: ts.TypeChecker;
115
- /** Property names already present in the rewritten object literal. */
116
- propertyNames: ReadonlySet<string>;
117
- /** Target type inferred for the factory object. */
118
- targetType: ts.Type;
119
- }
120
- /** Parser services resolved from the configured TypeScript parser. */
121
- type ParserServices = ReturnType<typeof ESLintUtils.getParserServices>;
122
- /** Individual replacement details for one property inside the object literal. */
123
- interface PropertyReplacement {
124
- /** Absolute range of the property inside the object literal. */
125
- range: TSESTree.Range;
126
- /** Replacement source text for the property. */
127
- replacementText: string;
128
- }
129
- /** Replacement collection result for the object literal properties. */
130
- interface PropertyReplacementCollection {
131
- /** Property names already present in the rewritten object literal. */
132
- propertyNames: Set<string>;
133
- /** Nested property replacements collected for the object literal. */
134
- replacements: PropertyReplacement[];
135
- }
136
- /** Context for resolving the target type of a mock factory object literal. */
137
- interface ResolveFactoryTargetTypeContext {
138
- /** Call expression currently being analyzed. */
139
- callExpression: TSESTree.CallExpression;
140
- /** TypeScript type checker used for assignability checks. */
141
- checker: ts.TypeChecker;
142
- /** Factory function supplied to `vi.mock` or `vi.doMock`. */
143
- factoryArgument: FactoryFunctionExpression;
144
- /** Returned object literal from the mock factory. */
145
- objectExpression: TSESTree.ObjectExpression;
146
- /** Parser services supplied by `@typescript-eslint`. */
147
- services: ParserServices;
148
- }
149
- /** Context for determining whether shorthand syntax remains valid. */
150
- interface ShorthandContext {
151
- /** Expression used as the property's value. */
152
- baseValue: TSESTree.Expression;
153
- /** Stable property key name from the mock object literal. */
154
- keyName: string;
155
- /** Whether the property value needs a nested cast. */
156
- needsCast: boolean;
157
- /** Supported property being rewritten. */
158
- property: SupportedProperty;
159
- }
160
- /** Normalized inputs used when matching callable Vitest signatures. */
161
- interface SignatureMatchInputs {
162
- /** Type resolved for the mock callee expression. */
163
- calleeType: ts.Type;
164
- /** First mock-call argument node. */
165
- firstArgument: ts.Node;
166
- /** Type resolved for the first mock-call argument. */
167
- firstArgumentType: ts.Type;
168
- /** TypeScript node for the factory callback argument. */
169
- tsFactoryArgument: ts.Node;
170
- }
171
- /** Object literal properties supported by the fixer. */
172
- type SupportedProperty = Extract<TSESTree.ObjectLiteralElement, TSESTree.Property> & {
173
- /** Indicates that computed property syntax is not allowed. */
174
- computed: false;
175
- /** Restricts the key to statically readable property names. */
176
- key: SupportedPropertyKey;
177
- /** Restricts the property to initializer syntax. */
178
- kind: "init";
179
- /** Indicates that method shorthand is not allowed. */
180
- method: false;
181
- /** Absolute range of the full property inside the source file. */
182
- range: TSESTree.Range;
183
- /** Expression value assigned to the property. */
184
- value: SupportedPropertyValueRange & TSESTree.Expression;
185
- };
186
- /** Property keys supported by the fixer. */
187
- type SupportedPropertyKey = (SupportedPropertyKeyRange & TSESTree.Identifier) | (SupportedPropertyKeyRange & TSESTree.Literal);
188
- /** Stable property-key range metadata. */
189
- interface SupportedPropertyKeyRange {
190
- /** Absolute range of the property key inside the source file. */
191
- range: TSESTree.Range;
192
- }
193
- /** Stable property-value range metadata. */
194
- interface SupportedPropertyValueRange {
195
- /** Absolute range of the property value inside the source file. */
196
- range: TSESTree.Range;
197
- }
198
- /** Property-symbol lookup keyed by object literal property name. */
199
- type TargetPropertyMap = ReadonlyMap<string, ts.Symbol>;
200
- /** Typed rule context used by the typed RuleCreator wrapper. */
201
- type TypedRuleContext = Readonly<TSESLint.RuleContext<MessageIds, Options>>;
202
- export type { BuildMatchResultContext, BuildPropertyReplacementContext, CollectMatchContext, CollectPropertyReplacementsContext, FactoryFunctionExpression, FactoryMatchInput, MatchingSignatureReturnTypeContext, MatchResult, MessageIds, MockFactoryArguments, Options, OuterCastContext, ParserServices, PropertyReplacement, PropertyReplacementCollection, ResolveFactoryTargetTypeContext, ShorthandContext, SignatureMatchInputs, SupportedProperty, TargetPropertyMap, TypedRuleContext, };
203
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0cy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFU0xpbnRVdGlscywgVFNFU0xpbnQsIFRTRVNUcmVlIH0gZnJvbSBcIkB0eXBlc2NyaXB0LWVzbGludC91dGlsc1wiO1xyXG5pbXBvcnQgdHlwZSAqIGFzIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XHJcblxyXG4vKiogQ29udGV4dCB1c2VkIHRvIGJ1aWxkIHRoZSBmaW5hbCByZXBsYWNlbWVudCBmb3IgYSBtYXRjaGluZyBtb2NrIG9iamVjdC4gKi9cclxuaW50ZXJmYWNlIEJ1aWxkTWF0Y2hSZXN1bHRDb250ZXh0IHtcclxuICAvKiogVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgdXNlZCBmb3IgYXNzaWduYWJpbGl0eSBjaGVja3MuICovXHJcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXI7XHJcblxyXG4gIC8qKiBGYWN0b3J5IGZ1bmN0aW9uIHN1cHBsaWVkIHRvIGB2aS5tb2NrYCBvciBgdmkuZG9Nb2NrYC4gKi9cclxuICBmYWN0b3J5QXJndW1lbnQ6IEZhY3RvcnlGdW5jdGlvbkV4cHJlc3Npb247XHJcblxyXG4gIC8qKiBTdGF0aWMgbW9kdWxlIHNwZWNpZmllciB1c2VkIGJ5IHRoZSBtb2NrIGNhbGwuICovXHJcbiAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBSZXR1cm5lZCBvYmplY3QgbGl0ZXJhbCBmcm9tIHRoZSBtb2NrIGZhY3RvcnkuICovXHJcbiAgb2JqZWN0RXhwcmVzc2lvbjogVFNFU1RyZWUuT2JqZWN0RXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFByb3BlcnR5IG5hbWVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcmV3cml0dGVuIG9iamVjdCBsaXRlcmFsLiAqL1xyXG4gIHByb3BlcnR5TmFtZXM6IFNldDxzdHJpbmc+O1xyXG5cclxuICAvKiogTmVzdGVkIHByb3BlcnR5IHJlcGxhY2VtZW50cyBjb2xsZWN0ZWQgZm9yIHRoZSBvYmplY3QgbGl0ZXJhbC4gKi9cclxuICByZXBsYWNlbWVudHM6IFByb3BlcnR5UmVwbGFjZW1lbnRbXTtcclxuXHJcbiAgLyoqIEV4cHJlc3Npb24gcmV0dXJuZWQgYnkgdGhlIG1vY2sgZmFjdG9yeS4gKi9cclxuICByZXR1cm5FeHByZXNzaW9uOiBUU0VTVHJlZS5FeHByZXNzaW9uO1xyXG5cclxuICAvKiogRnVsbCBzb3VyY2UgdGV4dCBvZiB0aGUgY3VycmVudCBmaWxlLiAqL1xyXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcclxuXHJcbiAgLyoqIFRhcmdldCB0eXBlIGluZmVycmVkIGZvciB0aGUgZmFjdG9yeSBvYmplY3QuICovXHJcbiAgdGFyZ2V0VHlwZTogdHMuVHlwZTtcclxufVxyXG5cclxuLyoqIENvbnRleHQgcmVxdWlyZWQgdG8gcmVwbGFjZSBvbmUgb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkgc2FmZWx5LiAqL1xyXG5pbnRlcmZhY2UgQnVpbGRQcm9wZXJ0eVJlcGxhY2VtZW50Q29udGV4dCB7XHJcbiAgLyoqIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHVzZWQgZm9yIGFzc2lnbmFiaWxpdHkgY2hlY2tzLiAqL1xyXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xyXG5cclxuICAvKiogU3RhYmxlIHByb3BlcnR5IGtleSBuYW1lIGZyb20gdGhlIG1vY2sgb2JqZWN0IGxpdGVyYWwuICovXHJcbiAga2V5TmFtZTogc3RyaW5nO1xyXG5cclxuICAvKiogU3RhdGljIG1vZHVsZSBzcGVjaWZpZXIgdXNlZCBieSB0aGUgbW9jayBjYWxsLiAqL1xyXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xyXG5cclxuICAvKiogU3VwcG9ydGVkIHByb3BlcnR5IGJlaW5nIHJld3JpdHRlbi4gKi9cclxuICBwcm9wZXJ0eTogU3VwcG9ydGVkUHJvcGVydHk7XHJcblxyXG4gIC8qKiBQYXJzZXIgc2VydmljZXMgc3VwcGxpZWQgYnkgYEB0eXBlc2NyaXB0LWVzbGludGAuICovXHJcbiAgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzO1xyXG5cclxuICAvKiogRnVsbCBzb3VyY2UgdGV4dCBvZiB0aGUgY3VycmVudCBmaWxlLiAqL1xyXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcclxuXHJcbiAgLyoqIFRhcmdldCBwcm9wZXJ0eSBzeW1ib2wgZnJvbSB0aGUgaW1wb3J0ZWQgbW9kdWxlIHR5cGUuICovXHJcbiAgdGFyZ2V0UHJvcGVydHlTeW1ib2w6IHRzLlN5bWJvbDtcclxufVxyXG5cclxuLyoqIElucHV0IHJlcXVpcmVkIHRvIGFuYWx5emUgYSBgdmkubW9ja2Agb3IgYHZpLmRvTW9ja2AgY2FsbC4gKi9cclxuaW50ZXJmYWNlIENvbGxlY3RNYXRjaENvbnRleHQge1xyXG4gIC8qKiBDYWxsIGV4cHJlc3Npb24gY3VycmVudGx5IGJlaW5nIGFuYWx5emVkLiAqL1xyXG4gIGNhbGxFeHByZXNzaW9uOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHVzZWQgZm9yIGFzc2lnbmFiaWxpdHkgY2hlY2tzLiAqL1xyXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xyXG5cclxuICAvKiogUGFyc2VyIHNlcnZpY2VzIHN1cHBsaWVkIGJ5IGBAdHlwZXNjcmlwdC1lc2xpbnRgLiAqL1xyXG4gIHNlcnZpY2VzOiBQYXJzZXJTZXJ2aWNlcztcclxuXHJcbiAgLyoqIEZ1bGwgc291cmNlIHRleHQgb2YgdGhlIGN1cnJlbnQgZmlsZS4gKi9cclxuICBzb3VyY2VUZXh0OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKiBDb250ZXh0IHVzZWQgdG8gY29sbGVjdCBuZXN0ZWQgcHJvcGVydHkgcmVwbGFjZW1lbnRzLiAqL1xyXG5pbnRlcmZhY2UgQ29sbGVjdFByb3BlcnR5UmVwbGFjZW1lbnRzQ29udGV4dCB7XHJcbiAgLyoqIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHVzZWQgZm9yIGFzc2lnbmFiaWxpdHkgY2hlY2tzLiAqL1xyXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xyXG5cclxuICAvKiogU3RhdGljIG1vZHVsZSBzcGVjaWZpZXIgdXNlZCBieSB0aGUgbW9jayBjYWxsLiAqL1xyXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xyXG5cclxuICAvKiogUmV0dXJuZWQgb2JqZWN0IGxpdGVyYWwgZnJvbSB0aGUgbW9jayBmYWN0b3J5LiAqL1xyXG4gIG9iamVjdEV4cHJlc3Npb246IFRTRVNUcmVlLk9iamVjdEV4cHJlc3Npb247XHJcblxyXG4gIC8qKiBQYXJzZXIgc2VydmljZXMgc3VwcGxpZWQgYnkgYEB0eXBlc2NyaXB0LWVzbGludGAuICovXHJcbiAgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzO1xyXG5cclxuICAvKiogRnVsbCBzb3VyY2UgdGV4dCBvZiB0aGUgY3VycmVudCBmaWxlLiAqL1xyXG4gIHNvdXJjZVRleHQ6IHN0cmluZztcclxuXHJcbiAgLyoqIFRhcmdldCB0eXBlIGluZmVycmVkIGZvciB0aGUgZmFjdG9yeSBvYmplY3QuICovXHJcbiAgdGFyZ2V0VHlwZTogdHMuVHlwZTtcclxufVxyXG5cclxuLyoqIEZ1bmN0aW9uIGV4cHJlc3Npb25zIHN1cHBvcnRlZCBhcyBWaXRlc3QgbW9jayBmYWN0b3JpZXMuICovXHJcbnR5cGUgRmFjdG9yeUZ1bmN0aW9uRXhwcmVzc2lvbiA9XHJcbiAgfCBUU0VTVHJlZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblxyXG4gIHwgVFNFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uO1xyXG5cclxuLyoqIFJlc29sdmVkIGlucHV0cyByZXF1aXJlZCB0byBhbmFseXplIGEgbWF0Y2hpbmcgVml0ZXN0IG1vY2sgZmFjdG9yeS4gKi9cclxuaW50ZXJmYWNlIEZhY3RvcnlNYXRjaElucHV0IHtcclxuICAvKiogRmFjdG9yeSBmdW5jdGlvbiBzdXBwbGllZCB0byBgdmkubW9ja2Agb3IgYHZpLmRvTW9ja2AuICovXHJcbiAgZmFjdG9yeUFyZ3VtZW50OiBGYWN0b3J5RnVuY3Rpb25FeHByZXNzaW9uO1xyXG5cclxuICAvKiogU3RhdGljIG1vZHVsZSBzcGVjaWZpZXIgdXNlZCBieSB0aGUgbW9jayBjYWxsLiAqL1xyXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xyXG5cclxuICAvKiogUmV0dXJuZWQgb2JqZWN0IGxpdGVyYWwgZnJvbSB0aGUgbW9jayBmYWN0b3J5LiAqL1xyXG4gIG9iamVjdEV4cHJlc3Npb246IFRTRVNUcmVlLk9iamVjdEV4cHJlc3Npb247XHJcblxyXG4gIC8qKiBFeHByZXNzaW9uIHJldHVybmVkIGJ5IHRoZSBtb2NrIGZhY3RvcnkuICovXHJcbiAgcmV0dXJuRXhwcmVzc2lvbjogVFNFU1RyZWUuRXhwcmVzc2lvbjtcclxufVxyXG5cclxuLyoqIENvbnRleHQgdXNlZCB0byBpbnNwZWN0IG9uZSBjYWxsYWJsZSBzaWduYXR1cmUgZm9yIGEgbW9jayBmYWN0b3J5LiAqL1xyXG5pbnRlcmZhY2UgTWF0Y2hpbmdTaWduYXR1cmVSZXR1cm5UeXBlQ29udGV4dCB7XHJcbiAgLyoqIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHVzZWQgZm9yIGFzc2lnbmFiaWxpdHkgY2hlY2tzLiAqL1xyXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xyXG5cclxuICAvKiogRmlyc3QgbW9jay1jYWxsIGFyZ3VtZW50IG5vZGUuICovXHJcbiAgZmlyc3RBcmd1bWVudDogdHMuTm9kZTtcclxuXHJcbiAgLyoqIFR5cGUgcmVzb2x2ZWQgZm9yIHRoZSBmaXJzdCBtb2NrLWNhbGwgYXJndW1lbnQuICovXHJcbiAgZmlyc3RBcmd1bWVudFR5cGU6IHRzLlR5cGU7XHJcblxyXG4gIC8qKiBDYWxsYWJsZSBzaWduYXR1cmUgYmVpbmcgaW5zcGVjdGVkLiAqL1xyXG4gIHNpZ25hdHVyZTogdHMuU2lnbmF0dXJlO1xyXG5cclxuICAvKiogVHlwZVNjcmlwdCBub2RlIGZvciB0aGUgZmFjdG9yeSBjYWxsYmFjayBhcmd1bWVudC4gKi9cclxuICB0c0ZhY3RvcnlBcmd1bWVudDogdHMuTm9kZTtcclxufVxyXG5cclxuLyoqIFRleHQgcmVwbGFjZW1lbnQgZW1pdHRlZCBmb3IgYSBtYXRjaGluZyBmYWN0b3J5IG9iamVjdC4gKi9cclxuaW50ZXJmYWNlIE1hdGNoUmVzdWx0IHtcclxuICAvKiogUmVwbGFjZW1lbnQgc291cmNlIHRleHQgZm9yIHRoZSByZXR1cm5lZCBvYmplY3QgZXhwcmVzc2lvbi4gKi9cclxuICByZXBsYWNlbWVudFRleHQ6IHN0cmluZztcclxuXHJcbiAgLyoqIEFic29sdXRlIHJhbmdlIG9mIHRoZSByZXR1cm4gZXhwcmVzc2lvbiB0byByZXBsYWNlLiAqL1xyXG4gIHJldHVybkV4cHJlc3Npb25SYW5nZTogVFNFU1RyZWUuUmFuZ2U7XHJcbn1cclxuXHJcbi8qKiBSdWxlIG1lc3NhZ2UgaWRlbnRpZmllcnMgZW1pdHRlZCBieSB0aGlzIHJ1bGUuICovXHJcbnR5cGUgTWVzc2FnZUlkcyA9IFwicHJlZmVyVml0ZXN0SW5jcmVtZW50YWxDYXN0c1wiO1xyXG5cclxuLyoqIE5vcm1hbGl6ZWQgYXJndW1lbnRzIGV4dHJhY3RlZCBmcm9tIGEgc3VwcG9ydGVkIG1vY2sgY2FsbC4gKi9cclxuaW50ZXJmYWNlIE1vY2tGYWN0b3J5QXJndW1lbnRzIHtcclxuICAvKiogRmFjdG9yeSBmdW5jdGlvbiBzdXBwbGllZCB0byBgdmkubW9ja2Agb3IgYHZpLmRvTW9ja2AuICovXHJcbiAgZmFjdG9yeUFyZ3VtZW50OiBGYWN0b3J5RnVuY3Rpb25FeHByZXNzaW9uO1xyXG5cclxuICAvKiogU3RhdGljIG9yIGltcG9ydC1leHByZXNzaW9uIG1vZHVsZSBhcmd1bWVudC4gKi9cclxuICBtb2R1bGVBcmd1bWVudDogVFNFU1RyZWUuRXhwcmVzc2lvbjtcclxufVxyXG5cclxuLyoqIFJ1bGUgb3B0aW9ucyBhY2NlcHRlZCBieSB0aGlzIHJ1bGUuICovXHJcbnR5cGUgT3B0aW9ucyA9IFtdO1xyXG5cclxuLyoqIENvbnRleHQgcmVxdWlyZWQgdG8gZGVjaWRlIHdoZXRoZXIgYW4gb3V0ZXIgY2FzdCBpcyBzdGlsbCBuZWVkZWQuICovXHJcbmludGVyZmFjZSBPdXRlckNhc3RDb250ZXh0IHtcclxuICAvKiogVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgdXNlZCBmb3IgYXNzaWduYWJpbGl0eSBjaGVja3MuICovXHJcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXI7XHJcblxyXG4gIC8qKiBQcm9wZXJ0eSBuYW1lcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHJld3JpdHRlbiBvYmplY3QgbGl0ZXJhbC4gKi9cclxuICBwcm9wZXJ0eU5hbWVzOiBSZWFkb25seVNldDxzdHJpbmc+O1xyXG5cclxuICAvKiogVGFyZ2V0IHR5cGUgaW5mZXJyZWQgZm9yIHRoZSBmYWN0b3J5IG9iamVjdC4gKi9cclxuICB0YXJnZXRUeXBlOiB0cy5UeXBlO1xyXG59XHJcbi8qKiBQYXJzZXIgc2VydmljZXMgcmVzb2x2ZWQgZnJvbSB0aGUgY29uZmlndXJlZCBUeXBlU2NyaXB0IHBhcnNlci4gKi9cclxudHlwZSBQYXJzZXJTZXJ2aWNlcyA9IFJldHVyblR5cGU8dHlwZW9mIEVTTGludFV0aWxzLmdldFBhcnNlclNlcnZpY2VzPjtcclxuLyoqIEluZGl2aWR1YWwgcmVwbGFjZW1lbnQgZGV0YWlscyBmb3Igb25lIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0IGxpdGVyYWwuICovXHJcbmludGVyZmFjZSBQcm9wZXJ0eVJlcGxhY2VtZW50IHtcclxuICAvKiogQWJzb2x1dGUgcmFuZ2Ugb2YgdGhlIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0IGxpdGVyYWwuICovXHJcbiAgcmFuZ2U6IFRTRVNUcmVlLlJhbmdlO1xyXG5cclxuICAvKiogUmVwbGFjZW1lbnQgc291cmNlIHRleHQgZm9yIHRoZSBwcm9wZXJ0eS4gKi9cclxuICByZXBsYWNlbWVudFRleHQ6IHN0cmluZztcclxufVxyXG5cclxuLyoqIFJlcGxhY2VtZW50IGNvbGxlY3Rpb24gcmVzdWx0IGZvciB0aGUgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllcy4gKi9cclxuaW50ZXJmYWNlIFByb3BlcnR5UmVwbGFjZW1lbnRDb2xsZWN0aW9uIHtcclxuICAvKiogUHJvcGVydHkgbmFtZXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSByZXdyaXR0ZW4gb2JqZWN0IGxpdGVyYWwuICovXHJcbiAgcHJvcGVydHlOYW1lczogU2V0PHN0cmluZz47XHJcblxyXG4gIC8qKiBOZXN0ZWQgcHJvcGVydHkgcmVwbGFjZW1lbnRzIGNvbGxlY3RlZCBmb3IgdGhlIG9iamVjdCBsaXRlcmFsLiAqL1xyXG4gIHJlcGxhY2VtZW50czogUHJvcGVydHlSZXBsYWNlbWVudFtdO1xyXG59XHJcblxyXG4vKiogQ29udGV4dCBmb3IgcmVzb2x2aW5nIHRoZSB0YXJnZXQgdHlwZSBvZiBhIG1vY2sgZmFjdG9yeSBvYmplY3QgbGl0ZXJhbC4gKi9cclxuaW50ZXJmYWNlIFJlc29sdmVGYWN0b3J5VGFyZ2V0VHlwZUNvbnRleHQge1xyXG4gIC8qKiBDYWxsIGV4cHJlc3Npb24gY3VycmVudGx5IGJlaW5nIGFuYWx5emVkLiAqL1xyXG4gIGNhbGxFeHByZXNzaW9uOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcclxuXHJcbiAgLyoqIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIHVzZWQgZm9yIGFzc2lnbmFiaWxpdHkgY2hlY2tzLiAqL1xyXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xyXG5cclxuICAvKiogRmFjdG9yeSBmdW5jdGlvbiBzdXBwbGllZCB0byBgdmkubW9ja2Agb3IgYHZpLmRvTW9ja2AuICovXHJcbiAgZmFjdG9yeUFyZ3VtZW50OiBGYWN0b3J5RnVuY3Rpb25FeHByZXNzaW9uO1xyXG5cclxuICAvKiogUmV0dXJuZWQgb2JqZWN0IGxpdGVyYWwgZnJvbSB0aGUgbW9jayBmYWN0b3J5LiAqL1xyXG4gIG9iamVjdEV4cHJlc3Npb246IFRTRVNUcmVlLk9iamVjdEV4cHJlc3Npb247XHJcblxyXG4gIC8qKiBQYXJzZXIgc2VydmljZXMgc3VwcGxpZWQgYnkgYEB0eXBlc2NyaXB0LWVzbGludGAuICovXHJcbiAgc2VydmljZXM6IFBhcnNlclNlcnZpY2VzO1xyXG59XHJcbi8qKiBDb250ZXh0IGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIHNob3J0aGFuZCBzeW50YXggcmVtYWlucyB2YWxpZC4gKi9cclxuaW50ZXJmYWNlIFNob3J0aGFuZENvbnRleHQge1xyXG4gIC8qKiBFeHByZXNzaW9uIHVzZWQgYXMgdGhlIHByb3BlcnR5J3MgdmFsdWUuICovXHJcbiAgYmFzZVZhbHVlOiBUU0VTVHJlZS5FeHByZXNzaW9uO1xyXG5cclxuICAvKiogU3RhYmxlIHByb3BlcnR5IGtleSBuYW1lIGZyb20gdGhlIG1vY2sgb2JqZWN0IGxpdGVyYWwuICovXHJcbiAga2V5TmFtZTogc3RyaW5nO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgcHJvcGVydHkgdmFsdWUgbmVlZHMgYSBuZXN0ZWQgY2FzdC4gKi9cclxuICBuZWVkc0Nhc3Q6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBTdXBwb3J0ZWQgcHJvcGVydHkgYmVpbmcgcmV3cml0dGVuLiAqL1xyXG4gIHByb3BlcnR5OiBTdXBwb3J0ZWRQcm9wZXJ0eTtcclxufVxyXG4vKiogTm9ybWFsaXplZCBpbnB1dHMgdXNlZCB3aGVuIG1hdGNoaW5nIGNhbGxhYmxlIFZpdGVzdCBzaWduYXR1cmVzLiAqL1xyXG5pbnRlcmZhY2UgU2lnbmF0dXJlTWF0Y2hJbnB1dHMge1xyXG4gIC8qKiBUeXBlIHJlc29sdmVkIGZvciB0aGUgbW9jayBjYWxsZWUgZXhwcmVzc2lvbi4gKi9cclxuICBjYWxsZWVUeXBlOiB0cy5UeXBlO1xyXG5cclxuICAvKiogRmlyc3QgbW9jay1jYWxsIGFyZ3VtZW50IG5vZGUuICovXHJcbiAgZmlyc3RBcmd1bWVudDogdHMuTm9kZTtcclxuXHJcbiAgLyoqIFR5cGUgcmVzb2x2ZWQgZm9yIHRoZSBmaXJzdCBtb2NrLWNhbGwgYXJndW1lbnQuICovXHJcbiAgZmlyc3RBcmd1bWVudFR5cGU6IHRzLlR5cGU7XHJcblxyXG4gIC8qKiBUeXBlU2NyaXB0IG5vZGUgZm9yIHRoZSBmYWN0b3J5IGNhbGxiYWNrIGFyZ3VtZW50LiAqL1xyXG4gIHRzRmFjdG9yeUFyZ3VtZW50OiB0cy5Ob2RlO1xyXG59XHJcbi8qKiBPYmplY3QgbGl0ZXJhbCBwcm9wZXJ0aWVzIHN1cHBvcnRlZCBieSB0aGUgZml4ZXIuICovXHJcbnR5cGUgU3VwcG9ydGVkUHJvcGVydHkgPSBFeHRyYWN0PFxyXG4gIFRTRVNUcmVlLk9iamVjdExpdGVyYWxFbGVtZW50LFxyXG4gIFRTRVNUcmVlLlByb3BlcnR5XHJcbj4gJiB7XHJcbiAgLyoqIEluZGljYXRlcyB0aGF0IGNvbXB1dGVkIHByb3BlcnR5IHN5bnRheCBpcyBub3QgYWxsb3dlZC4gKi9cclxuICBjb21wdXRlZDogZmFsc2U7XHJcblxyXG4gIC8qKiBSZXN0cmljdHMgdGhlIGtleSB0byBzdGF0aWNhbGx5IHJlYWRhYmxlIHByb3BlcnR5IG5hbWVzLiAqL1xyXG4gIGtleTogU3VwcG9ydGVkUHJvcGVydHlLZXk7XHJcblxyXG4gIC8qKiBSZXN0cmljdHMgdGhlIHByb3BlcnR5IHRvIGluaXRpYWxpemVyIHN5bnRheC4gKi9cclxuICBraW5kOiBcImluaXRcIjtcclxuXHJcbiAgLyoqIEluZGljYXRlcyB0aGF0IG1ldGhvZCBzaG9ydGhhbmQgaXMgbm90IGFsbG93ZWQuICovXHJcbiAgbWV0aG9kOiBmYWxzZTtcclxuXHJcbiAgLyoqIEFic29sdXRlIHJhbmdlIG9mIHRoZSBmdWxsIHByb3BlcnR5IGluc2lkZSB0aGUgc291cmNlIGZpbGUuICovXHJcbiAgcmFuZ2U6IFRTRVNUcmVlLlJhbmdlO1xyXG5cclxuICAvKiogRXhwcmVzc2lvbiB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgcHJvcGVydHkuICovXHJcbiAgdmFsdWU6IFN1cHBvcnRlZFByb3BlcnR5VmFsdWVSYW5nZSAmIFRTRVNUcmVlLkV4cHJlc3Npb247XHJcbn07XHJcbi8qKiBQcm9wZXJ0eSBrZXlzIHN1cHBvcnRlZCBieSB0aGUgZml4ZXIuICovXHJcbnR5cGUgU3VwcG9ydGVkUHJvcGVydHlLZXkgPVxyXG4gIHwgKFN1cHBvcnRlZFByb3BlcnR5S2V5UmFuZ2UgJiBUU0VTVHJlZS5JZGVudGlmaWVyKVxyXG4gIHwgKFN1cHBvcnRlZFByb3BlcnR5S2V5UmFuZ2UgJiBUU0VTVHJlZS5MaXRlcmFsKTtcclxuLyoqIFN0YWJsZSBwcm9wZXJ0eS1rZXkgcmFuZ2UgbWV0YWRhdGEuICovXHJcbmludGVyZmFjZSBTdXBwb3J0ZWRQcm9wZXJ0eUtleVJhbmdlIHtcclxuICAvKiogQWJzb2x1dGUgcmFuZ2Ugb2YgdGhlIHByb3BlcnR5IGtleSBpbnNpZGUgdGhlIHNvdXJjZSBmaWxlLiAqL1xyXG4gIHJhbmdlOiBUU0VTVHJlZS5SYW5nZTtcclxufVxyXG4vKiogU3RhYmxlIHByb3BlcnR5LXZhbHVlIHJhbmdlIG1ldGFkYXRhLiAqL1xyXG5pbnRlcmZhY2UgU3VwcG9ydGVkUHJvcGVydHlWYWx1ZVJhbmdlIHtcclxuICAvKiogQWJzb2x1dGUgcmFuZ2Ugb2YgdGhlIHByb3BlcnR5IHZhbHVlIGluc2lkZSB0aGUgc291cmNlIGZpbGUuICovXHJcbiAgcmFuZ2U6IFRTRVNUcmVlLlJhbmdlO1xyXG59XHJcbi8qKiBQcm9wZXJ0eS1zeW1ib2wgbG9va3VwIGtleWVkIGJ5IG9iamVjdCBsaXRlcmFsIHByb3BlcnR5IG5hbWUuICovXHJcbnR5cGUgVGFyZ2V0UHJvcGVydHlNYXAgPSBSZWFkb25seU1hcDxzdHJpbmcsIHRzLlN5bWJvbD47XHJcblxyXG4vKiogVHlwZWQgcnVsZSBjb250ZXh0IHVzZWQgYnkgdGhlIHR5cGVkIFJ1bGVDcmVhdG9yIHdyYXBwZXIuICovXHJcbnR5cGUgVHlwZWRSdWxlQ29udGV4dCA9IFJlYWRvbmx5PFRTRVNMaW50LlJ1bGVDb250ZXh0PE1lc3NhZ2VJZHMsIE9wdGlvbnM+PjtcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBCdWlsZE1hdGNoUmVzdWx0Q29udGV4dCxcclxuICBCdWlsZFByb3BlcnR5UmVwbGFjZW1lbnRDb250ZXh0LFxyXG4gIENvbGxlY3RNYXRjaENvbnRleHQsXHJcbiAgQ29sbGVjdFByb3BlcnR5UmVwbGFjZW1lbnRzQ29udGV4dCxcclxuICBGYWN0b3J5RnVuY3Rpb25FeHByZXNzaW9uLFxyXG4gIEZhY3RvcnlNYXRjaElucHV0LFxyXG4gIE1hdGNoaW5nU2lnbmF0dXJlUmV0dXJuVHlwZUNvbnRleHQsXHJcbiAgTWF0Y2hSZXN1bHQsXHJcbiAgTWVzc2FnZUlkcyxcclxuICBNb2NrRmFjdG9yeUFyZ3VtZW50cyxcclxuICBPcHRpb25zLFxyXG4gIE91dGVyQ2FzdENvbnRleHQsXHJcbiAgUGFyc2VyU2VydmljZXMsXHJcbiAgUHJvcGVydHlSZXBsYWNlbWVudCxcclxuICBQcm9wZXJ0eVJlcGxhY2VtZW50Q29sbGVjdGlvbixcclxuICBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0LFxyXG4gIFNob3J0aGFuZENvbnRleHQsXHJcbiAgU2lnbmF0dXJlTWF0Y2hJbnB1dHMsXHJcbiAgU3VwcG9ydGVkUHJvcGVydHksXHJcbiAgVGFyZ2V0UHJvcGVydHlNYXAsXHJcbiAgVHlwZWRSdWxlQ29udGV4dCxcclxufTtcclxuIl19
@@ -1,2 +0,0 @@
1
- export { requireAaaSectionsRule } from "./rule.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
1
- export { requireAaaSectionsRule } from "./rule.js";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcmVxdWlyZS1hYWEtc2VjdGlvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcmVxdWlyZUFhYVNlY3Rpb25zUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbiJdfQ==
@@ -1 +0,0 @@
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"}
@@ -1,150 +0,0 @@
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,5 +0,0 @@
1
- import type { Rule } from "eslint";
2
- /** Enforces explicit AAA section comments and spacing within supported test blocks. */
3
- declare const requireAaaSectionsRule: Rule.RuleModule;
4
- export { requireAaaSectionsRule };
5
- //# sourceMappingURL=rule.d.ts.map
@@ -1 +0,0 @@
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;AAanC,uFAAuF;AACvF,QAAA,MAAM,sBAAsB,EAAE,IAAI,CAAC,UAkClC,CAAC;AA6IF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1,129 +0,0 @@
1
- import { createRuleDocumentation } from "../../custom-rule-documentation.js";
2
- import { analyzeTestBlock, getLineStartRange, getPhaseBoundaryComments, hasBlankLineBeforeComment, } from "../aaa/index.js";
3
- import { buildMissingSectionFixes } from "./missing-section-fixes.js";
4
- /** Enforces explicit AAA section comments and spacing within supported test blocks. */
5
- const requireAaaSectionsRule = {
6
- create(context) {
7
- return {
8
- CallExpression(node) {
9
- const analysis = analyzeTestBlock(context, node);
10
- if (analysis === void 0) {
11
- return;
12
- }
13
- reportMissingSections(context, analysis);
14
- reportEmptySections(context, analysis);
15
- reportCodeBeforeArrange(context, analysis);
16
- reportBlankLineSeparators(context, analysis);
17
- },
18
- };
19
- },
20
- meta: {
21
- docs: createRuleDocumentation("require-aaa-sections", "Require strict // Arrange, // Act, and // Assert markers in supported test blocks."),
22
- fixable: "code",
23
- messages: {
24
- blankLineBeforeSection: "Insert a blank line before the // {{section}} section comment.",
25
- codeBeforeArrange: "Move setup statements below the first // Arrange section comment.",
26
- emptySection: "The // {{section}} section must contain code; comments alone do not count.",
27
- missingSections: "Add the missing AAA section comments: {{sections}}.",
28
- },
29
- schema: [],
30
- type: "layout",
31
- },
32
- };
33
- /**
34
- * Reports section comments that are missing a blank line above them.
35
- * @param context ESLint rule context.
36
- * @param analysis Parsed test-block analysis.
37
- * @example
38
- * ```typescript
39
- * reportBlankLineSeparators({ report() {} } as never, { sectionComments: [], sourceText: "" } as never);
40
- * ```
41
- */
42
- function reportBlankLineSeparators(context, analysis) {
43
- for (const sectionComment of getPhaseBoundaryComments(analysis)) {
44
- if (!hasBlankLineBeforeComment(analysis.sourceText, sectionComment.comment)) {
45
- context.report({
46
- data: { section: sectionComment.phases.join(" & ") },
47
- fix: (fixer) => fixer.insertTextBeforeRange(getLineStartRange(analysis.sourceText, sectionComment.comment.loc.start.line), analysis.newline),
48
- messageId: "blankLineBeforeSection",
49
- node: sectionComment.comment,
50
- });
51
- }
52
- }
53
- }
54
- /**
55
- * Reports executable statements that appear before the first Arrange section.
56
- * @param context ESLint rule context.
57
- * @param analysis Parsed test-block analysis.
58
- * @example
59
- * ```typescript
60
- * reportCodeBeforeArrange({ report() {} } as never, { sectionComments: [], statements: [] } as never);
61
- * ```
62
- */
63
- function reportCodeBeforeArrange(context, analysis) {
64
- const firstArrangeLine = analysis.sectionComments.find((sectionComment) => sectionComment.phases.includes("Arrange"))?.comment.loc.start.line;
65
- if (firstArrangeLine === void 0) {
66
- return;
67
- }
68
- const statementBeforeArrange = analysis.statements.find((statement) => statement.node.loc.start.line < firstArrangeLine);
69
- if (statementBeforeArrange === void 0) {
70
- return;
71
- }
72
- context.report({
73
- messageId: "codeBeforeArrange",
74
- node: statementBeforeArrange.node,
75
- });
76
- }
77
- /**
78
- * Reports Arrange sections that contain only comments or whitespace.
79
- * @param context ESLint rule context.
80
- * @param analysis Parsed test-block analysis.
81
- * @example
82
- * ```typescript
83
- * reportEmptySections({ report() {} } as never, { sectionComments: [], statements: [] } as never);
84
- * ```
85
- */
86
- function reportEmptySections(context, analysis) {
87
- for (const [index, sectionComment] of analysis.sectionComments.entries()) {
88
- const nextSectionLine = analysis.sectionComments[index + 1]?.comment.loc.start.line;
89
- const hasArrangePhase = sectionComment.phases.includes("Arrange");
90
- const hasCodeInSection = analysis.statements.some((statement) => {
91
- const statementLine = statement.node.loc.start.line;
92
- return (statementLine > sectionComment.comment.loc.start.line &&
93
- (nextSectionLine === void 0 || statementLine < nextSectionLine));
94
- });
95
- if (hasArrangePhase && !hasCodeInSection) {
96
- context.report({
97
- data: { section: sectionComment.phases.join(" & ") },
98
- messageId: "emptySection",
99
- node: sectionComment.comment,
100
- });
101
- }
102
- }
103
- }
104
- /**
105
- * Reports any AAA section markers that are missing from a supported test block.
106
- * @param context ESLint rule context.
107
- * @param analysis Parsed test-block analysis.
108
- * @example
109
- * ```typescript
110
- * reportMissingSections({ report() {} } as never, { sectionComments: [] } as never);
111
- * ```
112
- */
113
- function reportMissingSections(context, analysis) {
114
- const presentSections = new Set(analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases));
115
- const missingSections = ["Arrange", "Act", "Assert"].filter((phase) => !presentSections.has(phase));
116
- if (missingSections.length === 0) {
117
- return;
118
- }
119
- context.report({
120
- data: { sections: missingSections.join(", ") },
121
- fix: analysis.bodyLineCount >= 3
122
- ? (fixer) => buildMissingSectionFixes(analysis, missingSections, fixer)
123
- : void 0,
124
- messageId: "missingSections",
125
- node: analysis.callExpression,
126
- });
127
- }
128
- export { requireAaaSectionsRule };
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9yZXF1aXJlLWFhYS1zZWN0aW9ucy9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4Qix5QkFBeUIsR0FDMUIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsdUZBQXVGO0FBQ3ZGLE1BQU0sc0JBQXNCLEdBQW9CO0lBQzlDLE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPO1lBQ0wsY0FBYyxDQUFDLElBQUk7Z0JBQ2pCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsT0FBTztnQkFDVCxDQUFDO2dCQUVELHFCQUFxQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDekMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN2Qyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvQyxDQUFDO1NBQzBCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksRUFBRTtRQUNKLElBQUksRUFBRSx1QkFBdUIsQ0FDM0Isc0JBQXNCLEVBQ3RCLG9GQUFvRixDQUNyRjtRQUNELE9BQU8sRUFBRSxNQUFNO1FBQ2YsUUFBUSxFQUFFO1lBQ1Isc0JBQXNCLEVBQ3BCLGdFQUFnRTtZQUNsRSxpQkFBaUIsRUFDZixtRUFBbUU7WUFDckUsWUFB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Q3BDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDO1lBQzlELENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDWixTQUFTLEVBQUUsaUJBQWlCO1FBQzVCLElBQUksRUFBRSxRQUFRLENBQUMsY0FBYztLQUM5QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB0eXBlIHsgVGVzdEJsb2NrQW5hbHlzaXMgfSBmcm9tIFwiLi4vYWFhXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbS1ydWxlLWRvY3VtZW50YXRpb25cIjtcbmltcG9ydCB7XG4gIGFuYWx5emVUZXN0QmxvY2ssXG4gIGdldExpbmVTdGFydFJhbmdlLFxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXG4gIGhhc0JsYW5rTGluZUJlZm9yZUNvbW1lbnQsXG59IGZyb20gXCIuLi9hYWFcIjtcbmltcG9ydCB7IGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlcyB9IGZyb20gXCIuL21pc3Npbmctc2VjdGlvbi1maXhlc1wiO1xuXG4vKiogRW5mb3JjZXMgZXhwbGljaXQgQUFBIHNlY3Rpb24gY29tbWVudHMgYW5kIHNwYWNpbmcgd2l0aGluIHN1cHBvcnRlZCB0ZXN0IGJsb2Nrcy4gKi9cbmNvbnN0IHJlcXVpcmVBYWFTZWN0aW9uc1J1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBSdWxlLlJ1bGVMaXN0ZW5lciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplVGVzdEJsb2NrKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICBpZiAoYW5hbHlzaXMgPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydEVtcHR5U2VjdGlvbnMoY29udGV4dCwgYW5hbHlzaXMpO1xuICAgICAgICByZXBvcnRDb2RlQmVmb3JlQXJyYW5nZShjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydEJsYW5rTGluZVNlcGFyYXRvcnMoY29udGV4dCwgYW5hbHlzaXMpO1xuICAgICAgfSxcbiAgICB9IHNhdGlzZmllcyBSdWxlLlJ1bGVMaXN0ZW5lcjtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uKFxuICAgICAgXCJyZXF1aXJlLWFhYS1zZWN0aW9uc1wiLFxuICAgICAgXCJSZXF1aXJlIHN0cmljdCAvLyBBcnJhbmdlLCAvLyBBY3QsIGFuZCAvLyBBc3NlcnQgbWFya2VycyBpbiBzdXBwb3J0ZWQgdGVzdCBibG9ja3MuXCIsXG4gICAgKSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBtZXNzYWdlczoge1xuICAgICAgYmxhbmtMaW5lQmVmb3JlU2VjdGlvbjpcbiAgICAgICAgXCJJbnNlcnQgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBjb21tZW50LlwiLFxuICAgICAgY29kZUJlZm9yZUFycmFuZ2U6XG4gICAgICAgIFwiTW92ZSBzZXR1cCBzdGF0ZW1lbnRzIGJlbG93IHRoZSBmaXJzdCAvLyBBcnJhbmdlIHNlY3Rpb24gY29tbWVudC5cIixcbiAgICAgIGVtcHR5U2VjdGlvbjpcbiAgICAgICAgXCJUaGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBtdXN0IGNvbnRhaW4gY29kZTsgY29tbWVudHMgYWxvbmUgZG8gbm90IGNvdW50LlwiLFxuICAgICAgbWlzc2luZ1NlY3Rpb25zOiBcIkFkZCB0aGUgbWlzc2luZyBBQUEgc2VjdGlvbiBjb21tZW50czoge3tzZWN0aW9uc319LlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiBcImxheW91dFwiLFxuICB9LFxufTtcblxuLyoqXG4gKiBSZXBvcnRzIHNlY3Rpb24gY29tbWVudHMgdGhhdCBhcmUgbWlzc2luZyBhIGJsYW5rIGxpbmUgYWJvdmUgdGhlbS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0QmxhbmtMaW5lU2VwYXJhdG9ycyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSwgc291cmNlVGV4dDogXCJcIiB9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRCbGFua0xpbmVTZXBhcmF0b3JzKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBzZWN0aW9uQ29tbWVudCBvZiBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMoYW5hbHlzaXMpKSB7XG4gICAgaWYgKFxuICAgICAgIWhhc0JsYW5rTGluZUJlZm9yZUNvbW1lbnQoYW5hbHlzaXMuc291cmNlVGV4dCwgc2VjdGlvbkNvbW1lbnQuY29tbWVudClcbiAgICApIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBzZWN0aW9uOiBzZWN0aW9uQ29tbWVudC5waGFzZXMuam9pbihcIiAmIFwiKSB9LFxuICAgICAgICBmaXg6IChmaXhlcikgPT5cbiAgICAgICAgICBmaXhlci5pbnNlcnRUZXh0QmVmb3JlUmFuZ2UoXG4gICAgICAgICAgICBnZXRMaW5lU3RhcnRSYW5nZShcbiAgICAgICAgICAgICAgYW5hbHlzaXMuc291cmNlVGV4dCxcbiAgICAgICAgICAgICAgc2VjdGlvbkNvbW1lbnQuY29tbWVudC5sb2Muc3RhcnQubGluZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBhbmFseXNpcy5uZXdsaW5lLFxuICAgICAgICAgICksXG4gICAgICAgIG1lc3NhZ2VJZDogXCJibGFua0xpbmVCZWZvcmVTZWN0aW9uXCIsXG4gICAgICAgIG5vZGU6IHNlY3Rpb25Db21tZW50LmNvbW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIGV4ZWN1dGFibGUgc3RhdGVtZW50cyB0aGF0IGFwcGVhciBiZWZvcmUgdGhlIGZpcnN0IEFycmFuZ2Ugc2VjdGlvbi5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0Q29kZUJlZm9yZUFycmFuZ2UoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10sIHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgY29uc3QgZmlyc3RBcnJhbmdlTGluZSA9IGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5maW5kKChzZWN0aW9uQ29tbWVudCkgPT5cbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBcnJhbmdlXCIpLFxuICApPy5jb21tZW50LmxvYy5zdGFydC5saW5lO1xuICBpZiAoZmlyc3RBcnJhbmdlTGluZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50QmVmb3JlQXJyYW5nZSA9IGFuYWx5c2lzLnN0YXRlbWVudHMuZmluZChcbiAgICAoc3RhdGVtZW50KSA9PiBzdGF0ZW1lbnQubm9kZS5sb2Muc3RhcnQubGluZSA8IGZpcnN0QXJyYW5nZUxpbmUsXG4gICk7XG4gIGlmIChzdGF0ZW1lbnRCZWZvcmVBcnJhbmdlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZXh0LnJlcG9ydCh7XG4gICAgbWVzc2FnZUlkOiBcImNvZGVCZWZvcmVBcnJhbmdlXCIsXG4gICAgbm9kZTogc3RhdGVtZW50QmVmb3JlQXJyYW5nZS5ub2RlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIEFycmFuZ2Ugc2VjdGlvbnMgdGhhdCBjb250YWluIG9ubHkgY29tbWVudHMgb3Igd2hpdGVzcGFjZS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0RW1wdHlTZWN0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSwgc3RhdGVtZW50czogW10gfSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0RW1wdHlTZWN0aW9ucyhcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgW2luZGV4LCBzZWN0aW9uQ29tbWVudF0gb2YgYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5leHRTZWN0aW9uTGluZSA9XG4gICAgICBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHNbaW5kZXggKyAxXT8uY29tbWVudC5sb2Muc3RhcnQubGluZTtcbiAgICBjb25zdCBoYXNBcnJhbmdlUGhhc2UgPSBzZWN0aW9uQ29tbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBcnJhbmdlXCIpO1xuICAgIGNvbnN0IGhhc0NvZGVJblNlY3Rpb24gPSBhbmFseXNpcy5zdGF0ZW1lbnRzLnNvbWUoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50TGluZSA9IHN0YXRlbWVudC5ub2RlLmxvYy5zdGFydC5saW5lO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdGF0ZW1lbnRMaW5lID4gc2VjdGlvbkNvbW1lbnQuY29tbWVudC5sb2Muc3RhcnQubGluZSAmJlxuICAgICAgICAobmV4dFNlY3Rpb25MaW5lID09PSB2b2lkIDAgfHwgc3RhdGVtZW50TGluZSA8IG5leHRTZWN0aW9uTGluZSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoaGFzQXJyYW5nZVBoYXNlICYmICFoYXNDb2RlSW5TZWN0aW9uKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIGRhdGE6IHsgc2VjdGlvbjogc2VjdGlvbkNvbW1lbnQucGhhc2VzLmpvaW4oXCIgJiBcIikgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBcImVtcHR5U2VjdGlvblwiLFxuICAgICAgICBub2RlOiBzZWN0aW9uQ29tbWVudC5jb21tZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBhbnkgQUFBIHNlY3Rpb24gbWFya2VycyB0aGF0IGFyZSBtaXNzaW5nIGZyb20gYSBzdXBwb3J0ZWQgdGVzdCBibG9jay5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0TWlzc2luZ1NlY3Rpb25zKHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBzZWN0aW9uQ29tbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyhcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxuKTogdm9pZCB7XG4gIGNvbnN0IHByZXNlbnRTZWN0aW9ucyA9IG5ldyBTZXQoXG4gICAgYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmZsYXRNYXAoKHNlY3Rpb25Db21tZW50KSA9PiBzZWN0aW9uQ29tbWVudC5waGFzZXMpLFxuICApO1xuICBjb25zdCBtaXNzaW5nU2VjdGlvbnMgPSAoW1wiQXJyYW5nZVwiLCBcIkFjdFwiLCBcIkFzc2VydFwiXSBhcyBjb25zdCkuZmlsdGVyKFxuICAgIChwaGFzZSkgPT4gIXByZXNlbnRTZWN0aW9ucy5oYXMocGhhc2UpLFxuICApO1xuXG4gIGlmIChtaXNzaW5nU2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29udGV4dC5yZXBvcnQoe1xuICAgIGRhdGE6IHsgc2VjdGlvbnM6IG1pc3NpbmdTZWN0aW9ucy5qb2luKFwiLCBcIikgfSxcbiAgICBmaXg6XG4gICAgICBhbmFseXNpcy5ib2R5TGluZUNvdW50ID49IDNcbiAgICAgICAgPyAoZml4ZXI6IFJ1bGUuUnVsZUZpeGVyKTogUnVsZS5GaXhbXSA9PlxuICAgICAgICAgICAgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzKGFuYWx5c2lzLCBtaXNzaW5nU2VjdGlvbnMsIGZpeGVyKVxuICAgICAgICA6IHZvaWQgMCxcbiAgICBtZXNzYWdlSWQ6IFwibWlzc2luZ1NlY3Rpb25zXCIsXG4gICAgbm9kZTogYW5hbHlzaXMuY2FsbEV4cHJlc3Npb24sXG4gIH0pO1xufVxuXG5leHBvcnQgeyByZXF1aXJlQWFhU2VjdGlvbnNSdWxlIH07XG4iXX0=