@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,4 +1,199 @@
1
- /** Companion marker for the analyzer analysis helpers tests. */
2
- const analyzerAnalysisHelpersCompanion = true;
3
- export { analyzerAnalysisHelpersCompanion };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9hYWEvYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnRUFBZ0U7QUFDaEUsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7QUFFOUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29tcGFuaW9uIG1hcmtlciBmb3IgdGhlIGFuYWx5emVyIGFuYWx5c2lzIGhlbHBlcnMgdGVzdHMuICovXHJcbmNvbnN0IGFuYWx5emVyQW5hbHlzaXNIZWxwZXJzQ29tcGFuaW9uID0gdHJ1ZTtcclxuXHJcbmV4cG9ydCB7IGFuYWx5emVyQW5hbHlzaXNIZWxwZXJzQ29tcGFuaW9uIH07XHJcbiJdfQ==
1
+ /** Canonical ordering used when comparing AAA phases. */
2
+ const aaaPhaseOrder = {
3
+ Act: 1,
4
+ Arrange: 0,
5
+ Assert: 2,
6
+ };
7
+ /** Recognized AAA phase names. */
8
+ const phaseNames = ["Arrange", "Act", "Assert"];
9
+ /**
10
+ * Counts Act statements.
11
+ * @param analysis Input analysis value.
12
+ * @returns Return value output.
13
+ * @example
14
+ * ```typescript
15
+ * countActStatements(analysis);
16
+ * ```
17
+ */
18
+ function countActStatements(analysis) {
19
+ return getActTopLevelStatements(analysis).length;
20
+ }
21
+ /**
22
+ * Gets top-level statements that belong to the Act phase only.
23
+ * @param analysis Input analysis value.
24
+ * @returns Return value output.
25
+ * @example
26
+ * ```typescript
27
+ * getActTopLevelStatements(analysis);
28
+ * ```
29
+ */
30
+ function getActTopLevelStatements(analysis) {
31
+ return analysis.statements.filter((statement) => statement.phases.includes("Act") && !statement.phases.includes("Assert"));
32
+ }
33
+ /**
34
+ * Flattens section comments.
35
+ * @param analysis Input analysis value.
36
+ * @returns Return value output.
37
+ * @example
38
+ * ```typescript
39
+ * getFlattenedSections(analysis);
40
+ * ```
41
+ */
42
+ function getFlattenedSections(analysis) {
43
+ return analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases.map((phase) => ({
44
+ comment: sectionComment.comment,
45
+ phase,
46
+ })));
47
+ }
48
+ /**
49
+ * Gets the start range for a line.
50
+ * @param sourceText Input sourceText value.
51
+ * @param line Input line value.
52
+ * @returns Return value output.
53
+ * @example
54
+ * ```typescript
55
+ * getLineStartRange(sourceText, 2);
56
+ * ```
57
+ */
58
+ function getLineStartRange(sourceText, line) {
59
+ let currentLine = 1;
60
+ let currentOffset = 0;
61
+ for (const character of sourceText) {
62
+ if (currentLine === line) {
63
+ return [currentOffset, currentOffset];
64
+ }
65
+ if (character === "\n") {
66
+ currentLine += 1;
67
+ }
68
+ currentOffset += 1;
69
+ }
70
+ return [sourceText.length, sourceText.length];
71
+ }
72
+ /**
73
+ * Gets the newline sequence.
74
+ * @param text Input text value.
75
+ * @returns Return value output.
76
+ * @example
77
+ * ```typescript
78
+ * getNewline(sourceText);
79
+ * ```
80
+ */
81
+ function getNewline(text) {
82
+ return text.includes("\r\n") ? "\r\n" : "\n";
83
+ }
84
+ /**
85
+ * Gets phase-boundary comments.
86
+ * @param analysis Input analysis value.
87
+ * @returns Return value output.
88
+ * @example
89
+ * ```typescript
90
+ * getPhaseBoundaryComments(analysis);
91
+ * ```
92
+ */
93
+ function getPhaseBoundaryComments(analysis) {
94
+ return analysis.sectionComments.filter((sectionComment) => sectionComment.phases.some((phase) => phase === "Act" || phase === "Assert"));
95
+ }
96
+ /**
97
+ * Parses AAA phases from a comment.
98
+ * @param commentValue Input commentValue value.
99
+ * @returns Return value output.
100
+ * @example
101
+ * ```typescript
102
+ * getSectionPhases("Arrange & Act");
103
+ * ```
104
+ */
105
+ function getSectionPhases(commentValue) {
106
+ const trimmedComment = commentValue.trim();
107
+ if (trimmedComment.length === 0) {
108
+ return [];
109
+ }
110
+ const parts = trimmedComment.split(/\s*&\s*/u);
111
+ return parts.every((part) => isAaaPhase(part)) ? parts : [];
112
+ }
113
+ /**
114
+ * Gets the active phases for a statement.
115
+ * @param statement Input statement value.
116
+ * @param sectionComments Input sectionComments value.
117
+ * @returns Return value output.
118
+ * @example
119
+ * ```typescript
120
+ * getStatementPhases(statement, sectionComments);
121
+ * ```
122
+ */
123
+ function getStatementPhases(statement, sectionComments) {
124
+ const statementLine = statement.loc?.start.line;
125
+ if (statementLine === void 0) {
126
+ return [];
127
+ }
128
+ let currentPhases = [];
129
+ for (const sectionComment of sectionComments) {
130
+ if (sectionComment.comment.loc.start.line > statementLine) {
131
+ break;
132
+ }
133
+ currentPhases = sectionComment.phases;
134
+ }
135
+ return currentPhases;
136
+ }
137
+ /**
138
+ * Gets supported test call metadata.
139
+ * @param node Input node value.
140
+ * @returns Return value output.
141
+ * @example
142
+ * ```typescript
143
+ * getSupportedTestCall(node);
144
+ * ```
145
+ */
146
+ function getSupportedTestCall(node) {
147
+ const rootName = getTestRootName(node.callee);
148
+ if (rootName !== "it" && rootName !== "test") {
149
+ return void 0;
150
+ }
151
+ const callbackArgument = node.arguments.at(-1);
152
+ if (callbackArgument === void 0 ||
153
+ callbackArgument.type === "SpreadElement" ||
154
+ (callbackArgument.type !== "ArrowFunctionExpression" &&
155
+ callbackArgument.type !== "FunctionExpression") ||
156
+ callbackArgument.body.type !== "BlockStatement") {
157
+ return void 0;
158
+ }
159
+ return {
160
+ callback: callbackArgument,
161
+ callExpression: node,
162
+ };
163
+ }
164
+ /**
165
+ * Gets the root test callee name.
166
+ * @param callee Input callee value.
167
+ * @returns Return value output.
168
+ * @example
169
+ * ```typescript
170
+ * getTestRootName(callExpression.callee);
171
+ * ```
172
+ */
173
+ function getTestRootName(callee) {
174
+ if (callee.type === "CallExpression") {
175
+ return getTestRootName(callee.callee);
176
+ }
177
+ if (callee.type === "Identifier") {
178
+ return callee.name;
179
+ }
180
+ if (callee.type === "MemberExpression" && callee.object.type !== "Super") {
181
+ return getTestRootName(callee.object);
182
+ }
183
+ return void 0;
184
+ }
185
+ /**
186
+ * Checks whether a value is an AAA phase.
187
+ * @param value Input value value.
188
+ * @returns Return value output.
189
+ * @example
190
+ * ```typescript
191
+ * isAaaPhase("Arrange");
192
+ * ```
193
+ */
194
+ function isAaaPhase(value) {
195
+ return phaseNames.includes(value);
196
+ }
197
+ /** Companion marker for test isolation. */
198
+ export { aaaPhaseOrder, countActStatements, getActTopLevelStatements, getFlattenedSections, getLineStartRange, getNewline, getPhaseBoundaryComments, getSectionPhases, getStatementPhases, getSupportedTestCall, };
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9hYWEvYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSx5REFBeUQ7QUFDekQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsR0FBRyxFQUFFLENBQUM7SUFDTixPQUFPLEVBQUUsQ0FBQztJQUNWLE1BQU0sRUFBRSxDQUFDO0NBQ2tDLENBQUM7QUFFOUMsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLENBSTdDLENBQUM7QUEwQkY7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFFBQTJCO0lBQ3JELE9BQU8sd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25ELENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsd0JBQXdCLENBQy9CLFFBQStDO0lBRS9DLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQy9CLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDWixTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUMzRSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsUUFBb0Q7SUFFcEQsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQ3pELGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTztRQUMvQixLQUFLO0tBQ04sQ0FB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QUFDO0FBQ2hELENBQUM7QUFFRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNMLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuaW1wb3J0IHR5cGUge1xyXG4gIEFhYVBoYXNlLFxyXG4gIExvY2F0ZWROb2RlLFxyXG4gIFNvdXJjZUNvbW1lbnQsXHJcbiAgVGVzdEJsb2NrQW5hbHlzaXMsXHJcbn0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbi8qKiBDYW5vbmljYWwgb3JkZXJpbmcgdXNlZCB3aGVuIGNvbXBhcmluZyBBQUEgcGhhc2VzLiAqL1xyXG5jb25zdCBhYWFQaGFzZU9yZGVyID0ge1xyXG4gIEFjdDogMSxcclxuICBBcnJhbmdlOiAwLFxyXG4gIEFzc2VydDogMixcclxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPEFhYVBoYXNlLCBudW1iZXI+O1xyXG5cclxuLyoqIFJlY29nbml6ZWQgQUFBIHBoYXNlIG5hbWVzLiAqL1xyXG5jb25zdCBwaGFzZU5hbWVzID0gW1wiQXJyYW5nZVwiLCBcIkFjdFwiLCBcIkFzc2VydFwiXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgW1xyXG4gIEFhYVBoYXNlLFxyXG4gIEFhYVBoYXNlLFxyXG4gIEFhYVBoYXNlLFxyXG5dO1xyXG5cclxuLyoqIEhlbHBlciBzdGF0ZSBmb3IgZmxhdHRlbmVkIHNlY3Rpb24gY29tbWVudHMuICovXHJcbmludGVyZmFjZSBGbGF0dGVuZWRTZWN0aW9uIHtcclxuICAvKiogT3JpZ2luYWwgc291cmNlIGNvbW1lbnQgZm9yIHRoZSBzZWN0aW9uIG1hcmtlci4gKi9cclxuICBjb21tZW50OiBTb3VyY2VDb21tZW50O1xyXG4gIC8qKiBQaGFzZSByZXByZXNlbnRlZCBieSB0aGUgZmxhdHRlbmVkIHNlY3Rpb24gZW50cnkuICovXHJcbiAgcGhhc2U6IEFhYVBoYXNlO1xyXG59XHJcblxyXG4vKiogU3VwcG9ydGVkIGNhbGwtZXhwcmVzc2lvbiB3cmFwcGVyIGZvciBhbmFseXplZCB0ZXN0IGJsb2Nrcy4gKi9cclxuaW50ZXJmYWNlIFN1cHBvcnRlZFRlc3RDYWxsIHtcclxuICAvKiogQ2FsbGJhY2sgYXJndW1lbnQgdGhhdCBvd25zIHRoZSB0ZXN0IGJvZHkuICovXHJcbiAgY2FsbGJhY2s6IFN1cHBvcnRlZFRlc3RDYWxsYmFjaztcclxuICAvKiogT3JpZ2luYWwgYGl0YCBvciBgdGVzdGAgaW52b2NhdGlvbi4gKi9cclxuICBjYWxsRXhwcmVzc2lvbjogTG9jYXRlZE5vZGU8RVNUcmVlLkNhbGxFeHByZXNzaW9uPjtcclxufVxyXG5cclxuLyoqIFN1cHBvcnRlZCB0ZXN0IGNhbGxiYWNrIHNoYXBlIGZvciBgaXRgIGFuZCBgdGVzdGAgY2FsbHMuICovXHJcbnR5cGUgU3VwcG9ydGVkVGVzdENhbGxiYWNrID0gTG9jYXRlZE5vZGU8XHJcbiAgRVNUcmVlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uIHwgRVNUcmVlLkZ1bmN0aW9uRXhwcmVzc2lvblxyXG4+ICYge1xyXG4gIC8qKiBDYWxsYmFjayBib2R5IGJsb2NrIHVzZWQgZm9yIHNlY3Rpb24gYW5hbHlzaXMuICovXHJcbiAgYm9keTogTG9jYXRlZE5vZGU8RVNUcmVlLkJsb2NrU3RhdGVtZW50PjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3VudHMgQWN0IHN0YXRlbWVudHMuXHJcbiAqIEBwYXJhbSBhbmFseXNpcyBJbnB1dCBhbmFseXNpcyB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb3VudEFjdFN0YXRlbWVudHMoYW5hbHlzaXMpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvdW50QWN0U3RhdGVtZW50cyhhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMpOiBudW1iZXIge1xyXG4gIHJldHVybiBnZXRBY3RUb3BMZXZlbFN0YXRlbWVudHMoYW5hbHlzaXMpLmxlbmd0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdG9wLWxldmVsIHN0YXRlbWVudHMgdGhhdCBiZWxvbmcgdG8gdGhlIEFjdCBwaGFzZSBvbmx5LlxyXG4gKiBAcGFyYW0gYW5hbHlzaXMgSW5wdXQgYW5hbHlzaXMgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0QWN0VG9wTGV2ZWxTdGF0ZW1lbnRzKGFuYWx5c2lzKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBY3RUb3BMZXZlbFN0YXRlbWVudHMoXHJcbiAgYW5hbHlzaXM6IFBpY2s8VGVzdEJsb2NrQW5hbHlzaXMsIFwic3RhdGVtZW50c1wiPixcclxuKTogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdIHtcclxuICByZXR1cm4gYW5hbHlzaXMuc3RhdGVtZW50cy5maWx0ZXIoXHJcbiAgICAoc3RhdGVtZW50KSA9PlxyXG4gICAgICBzdGF0ZW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQWN0XCIpICYmICFzdGF0ZW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQXNzZXJ0XCIpLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGbGF0dGVucyBzZWN0aW9uIGNvbW1lbnRzLlxyXG4gKiBAcGFyYW0gYW5hbHlzaXMgSW5wdXQgYW5hbHlzaXMgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0RmxhdHRlbmVkU2VjdGlvbnMoYW5hbHlzaXMpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldEZsYXR0ZW5lZFNlY3Rpb25zKFxyXG4gIGFuYWx5c2lzOiBQaWNrPFRlc3RCbG9ja0FuYWx5c2lzLCBcInNlY3Rpb25Db21tZW50c1wiPixcclxuKTogRmxhdHRlbmVkU2VjdGlvbltdIHtcclxuICByZXR1cm4gYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmZsYXRNYXAoKHNlY3Rpb25Db21tZW50KSA9PlxyXG4gICAgc2VjdGlvbkNvbW1lbnQucGhhc2VzLm1hcCgocGhhc2UpID0+ICh7XHJcbiAgICAgIGNvbW1lbnQ6IHNlY3Rpb25Db21tZW50LmNvbW1lbnQsXHJcbiAgICAgIHBoYXNlLFxyXG4gICAgfSkpLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBzdGFydCByYW5nZSBmb3IgYSBsaW5lLlxyXG4gKiBAcGFyYW0gc291cmNlVGV4dCBJbnB1dCBzb3VyY2VUZXh0IHZhbHVlLlxyXG4gKiBAcGFyYW0gbGluZSBJbnB1dCBsaW5lIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldExpbmVTdGFydFJhbmdlKHNvdXJjZVRleHQsIDIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldExpbmVTdGFydFJhbmdlKHNvdXJjZVRleHQ6IHN0cmluZywgbGluZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XHJcbiAgbGV0IGN1cnJlbnRMaW5lID0gMTtcclxuICBsZXQgY3VycmVudE9mZnNldCA9IDA7XHJcbiAgZm9yIChjb25zdCBjaGFyYWN0ZXIgb2Ygc291cmNlVGV4dCkge1xyXG4gICAgaWYgKGN1cnJlbnRMaW5lID09PSBsaW5lKSB7XHJcbiAgICAgIHJldHVybiBbY3VycmVudE9mZnNldCwgY3VycmVudE9mZnNldF07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhcmFjdGVyID09PSBcIlxcblwiKSB7XHJcbiAgICAgIGN1cnJlbnRMaW5lICs9IDE7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50T2Zmc2V0ICs9IDE7XHJcbiAgfVxyXG4gIHJldHVybiBbc291cmNlVGV4dC5sZW5ndGgsIHNvdXJjZVRleHQubGVuZ3RoXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIG5ld2xpbmUgc2VxdWVuY2UuXHJcbiAqIEBwYXJhbSB0ZXh0IElucHV0IHRleHQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0TmV3bGluZShzb3VyY2VUZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXROZXdsaW5lKHRleHQ6IHN0cmluZyk6IFwiXFxuXCIgfCBcIlxcclxcblwiIHtcclxuICByZXR1cm4gdGV4dC5pbmNsdWRlcyhcIlxcclxcblwiKSA/IFwiXFxyXFxuXCIgOiBcIlxcblwiO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyBwaGFzZS1ib3VuZGFyeSBjb21tZW50cy5cclxuICogQHBhcmFtIGFuYWx5c2lzIElucHV0IGFuYWx5c2lzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyhhbmFseXNpcyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGhhc2VCb3VuZGFyeUNvbW1lbnRzKFxyXG4gIGFuYWx5c2lzOiBQaWNrPFRlc3RCbG9ja0FuYWx5c2lzLCBcInNlY3Rpb25Db21tZW50c1wiPixcclxuKTogVGVzdEJsb2NrQW5hbHlzaXNbXCJzZWN0aW9uQ29tbWVudHNcIl0ge1xyXG4gIHJldHVybiBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuZmlsdGVyKChzZWN0aW9uQ29tbWVudCkgPT5cclxuICAgIHNlY3Rpb25Db21tZW50LnBoYXNlcy5zb21lKFxyXG4gICAgICAocGhhc2UpID0+IHBoYXNlID09PSBcIkFjdFwiIHx8IHBoYXNlID09PSBcIkFzc2VydFwiLFxyXG4gICAgKSxcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIEFBQSBwaGFzZXMgZnJvbSBhIGNvbW1lbnQuXHJcbiAqIEBwYXJhbSBjb21tZW50VmFsdWUgSW5wdXQgY29tbWVudFZhbHVlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFNlY3Rpb25QaGFzZXMoXCJBcnJhbmdlICYgQWN0XCIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFNlY3Rpb25QaGFzZXMoY29tbWVudFZhbHVlOiBzdHJpbmcpOiBBYWFQaGFzZVtdIHtcclxuICBjb25zdCB0cmltbWVkQ29tbWVudCA9IGNvbW1lbnRWYWx1ZS50cmltKCk7XHJcbiAgaWYgKHRyaW1tZWRDb21tZW50Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBjb25zdCBwYXJ0cyA9IHRyaW1tZWRDb21tZW50LnNwbGl0KC9cXHMqJlxccyovdSk7XHJcbiAgcmV0dXJuIHBhcnRzLmV2ZXJ5KChwYXJ0KSA9PiBpc0FhYVBoYXNlKHBhcnQpKSA/IHBhcnRzIDogW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBhY3RpdmUgcGhhc2VzIGZvciBhIHN0YXRlbWVudC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBJbnB1dCBzdGF0ZW1lbnQgdmFsdWUuXHJcbiAqIEBwYXJhbSBzZWN0aW9uQ29tbWVudHMgSW5wdXQgc2VjdGlvbkNvbW1lbnRzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFN0YXRlbWVudFBoYXNlcyhzdGF0ZW1lbnQsIHNlY3Rpb25Db21tZW50cyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U3RhdGVtZW50UGhhc2VzKFxyXG4gIHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCxcclxuICBzZWN0aW9uQ29tbWVudHM6IFRlc3RCbG9ja0FuYWx5c2lzW1wic2VjdGlvbkNvbW1lbnRzXCJdLFxyXG4pOiBBYWFQaGFzZVtdIHtcclxuICBjb25zdCBzdGF0ZW1lbnRMaW5lID0gc3RhdGVtZW50LmxvYz8uc3RhcnQubGluZTtcclxuICBpZiAoc3RhdGVtZW50TGluZSA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIGxldCBjdXJyZW50UGhhc2VzOiBBYWFQaGFzZVtdID0gW107XHJcbiAgZm9yIChjb25zdCBzZWN0aW9uQ29tbWVudCBvZiBzZWN0aW9uQ29tbWVudHMpIHtcclxuICAgIGlmIChzZWN0aW9uQ29tbWVudC5jb21tZW50LmxvYy5zdGFydC5saW5lID4gc3RhdGVtZW50TGluZSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGN1cnJlbnRQaGFzZXMgPSBzZWN0aW9uQ29tbWVudC5waGFzZXM7XHJcbiAgfVxyXG4gIHJldHVybiBjdXJyZW50UGhhc2VzO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyBzdXBwb3J0ZWQgdGVzdCBjYWxsIG1ldGFkYXRhLlxyXG4gKiBAcGFyYW0gbm9kZSBJbnB1dCBub2RlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFN1cHBvcnRlZFRlc3RDYWxsKG5vZGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFRlc3RDYWxsKFxyXG4gIG5vZGU6IEVTVHJlZS5DYWxsRXhwcmVzc2lvbixcclxuKTogU3VwcG9ydGVkVGVzdENhbGwgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHJvb3ROYW1lID0gZ2V0VGVzdFJvb3ROYW1lKG5vZGUuY2FsbGVlKTtcclxuICBpZiAocm9vdE5hbWUgIT09IFwiaXRcIiAmJiByb290TmFtZSAhPT0gXCJ0ZXN0XCIpIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMuYXQoLTEpO1xyXG4gIGlmIChcclxuICAgIGNhbGxiYWNrQXJndW1lbnQgPT09IHZvaWQgMCB8fFxyXG4gICAgY2FsbGJhY2tBcmd1bWVudC50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIiB8fFxyXG4gICAgKGNhbGxiYWNrQXJndW1lbnQudHlwZSAhPT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiICYmXHJcbiAgICAgIGNhbGxiYWNrQXJndW1lbnQudHlwZSAhPT0gXCJGdW5jdGlvbkV4cHJlc3Npb25cIikgfHxcclxuICAgIGNhbGxiYWNrQXJndW1lbnQuYm9keS50eXBlICE9PSBcIkJsb2NrU3RhdGVtZW50XCJcclxuICApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrQXJndW1lbnQgYXMgU3VwcG9ydGVkVGVzdENhbGxiYWNrLFxyXG4gICAgY2FsbEV4cHJlc3Npb246IG5vZGUgYXMgTG9jYXRlZE5vZGU8RVNUcmVlLkNhbGxFeHByZXNzaW9uPixcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgcm9vdCB0ZXN0IGNhbGxlZSBuYW1lLlxyXG4gKiBAcGFyYW0gY2FsbGVlIElucHV0IGNhbGxlZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRUZXN0Um9vdE5hbWUoY2FsbEV4cHJlc3Npb24uY2FsbGVlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUZXN0Um9vdE5hbWUoXHJcbiAgY2FsbGVlOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb25bXCJjYWxsZWVcIl0sXHJcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgaWYgKGNhbGxlZS50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcclxuICAgIHJldHVybiBnZXRUZXN0Um9vdE5hbWUoY2FsbGVlLmNhbGxlZSk7XHJcbiAgfVxyXG4gIGlmIChjYWxsZWUudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcclxuICAgIHJldHVybiBjYWxsZWUubmFtZTtcclxuICB9XHJcbiAgaWYgKGNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiBjYWxsZWUub2JqZWN0LnR5cGUgIT09IFwiU3VwZXJcIikge1xyXG4gICAgcmV0dXJuIGdldFRlc3RSb290TmFtZShjYWxsZWUub2JqZWN0KTtcclxuICB9XHJcbiAgcmV0dXJuIHZvaWQgMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gQUFBIHBoYXNlLlxyXG4gKiBAcGFyYW0gdmFsdWUgSW5wdXQgdmFsdWUgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaXNBYWFQaGFzZShcIkFycmFuZ2VcIik7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNBYWFQaGFzZSh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgQWFhUGhhc2Uge1xyXG4gIHJldHVybiBwaGFzZU5hbWVzLmluY2x1ZGVzKHZhbHVlIGFzIEFhYVBoYXNlKTtcclxufVxyXG5cclxuLyoqIENvbXBhbmlvbiBtYXJrZXIgZm9yIHRlc3QgaXNvbGF0aW9uLiAqL1xyXG5leHBvcnQge1xyXG4gIGFhYVBoYXNlT3JkZXIsXHJcbiAgY291bnRBY3RTdGF0ZW1lbnRzLFxyXG4gIGdldEFjdFRvcExldmVsU3RhdGVtZW50cyxcclxuICBnZXRGbGF0dGVuZWRTZWN0aW9ucyxcclxuICBnZXRMaW5lU3RhcnRSYW5nZSxcclxuICBnZXROZXdsaW5lLFxyXG4gIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyxcclxuICBnZXRTZWN0aW9uUGhhc2VzLFxyXG4gIGdldFN0YXRlbWVudFBoYXNlcyxcclxuICBnZXRTdXBwb3J0ZWRUZXN0Q2FsbCxcclxufTtcclxuIl19
@@ -1,13 +1,7 @@
1
- /* eslint max-lines: ["error", 350] -- Mandatory multiline JSDoc for internal helpers pushes this split file over the default limit. */
1
+ import { getNewline, getSectionPhases, getStatementPhases, getSupportedTestCall, } from "./analyzer.analysis.helpers.js";
2
2
  import { isLocatedComment, isRangeWithin } from "./analyzer.super.js";
3
- /** Canonical ordering used when comparing AAA phases. */
4
- const aaaPhaseOrder = {
5
- Act: 1,
6
- Arrange: 0,
7
- Assert: 2,
8
- };
9
- /** Recognized AAA phase names. */
10
- const phaseNames = ["Arrange", "Act", "Assert"];
3
+ /** Memoized comment arrays keyed by ESLint source-code instances. */
4
+ const sourceCommentsCache = new WeakMap();
11
5
  /**
12
6
  * Analyzes supported AAA test blocks.
13
7
  * @param context Input context value.
@@ -25,11 +19,11 @@ function analyzeTestBlock(context, node) {
25
19
  }
26
20
  const { callback, callExpression } = testCall;
27
21
  const { sourceCode } = context;
28
- const sectionComments = sourceCode
29
- .getAllComments()
22
+ const sectionComments = getSourceComments(sourceCode)
30
23
  .filter((comment) => isLocatedComment(comment) &&
31
24
  comment.type === "Line" &&
32
25
  isRangeWithin(comment.range, callback.body.range) &&
26
+ !isInsideTopLevelStatement(comment, callback.body.body) &&
33
27
  getSectionPhases(comment.value).length > 0)
34
28
  .map((comment) => ({
35
29
  comment: comment,
@@ -53,195 +47,43 @@ function analyzeTestBlock(context, node) {
53
47
  };
54
48
  }
55
49
  /**
56
- * Counts Act statements.
57
- * @param analysis Input analysis value.
50
+ * Returns cached source comments for the active file.
51
+ * @param sourceCode Input sourceCode value.
58
52
  * @returns Return value output.
59
53
  * @example
60
54
  * ```typescript
61
- * countActStatements(analysis);
55
+ * getSourceComments(sourceCode);
62
56
  * ```
63
57
  */
64
- function countActStatements(analysis) {
65
- return analysis.statements.filter((statement) => statement.phases.includes("Act") &&
66
- (statement.node.type === "ExpressionStatement" ||
67
- statement.node.type === "VariableDeclaration")).length;
68
- }
69
- /**
70
- * Flattens section comments.
71
- * @param analysis Input analysis value.
72
- * @returns Return value output.
73
- * @example
74
- * ```typescript
75
- * getFlattenedSections(analysis);
76
- * ```
77
- */
78
- function getFlattenedSections(analysis) {
79
- return analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases.map((phase) => ({
80
- comment: sectionComment.comment,
81
- phase,
82
- })));
83
- }
84
- /**
85
- * Gets indentation at an offset.
86
- * @param sourceText Input sourceText value.
87
- * @param offset Input offset value.
88
- * @returns Return value output.
89
- * @example
90
- * ```typescript
91
- * getIndentationAtOffset(sourceText, 4);
92
- * ```
93
- */
94
- function getIndentationAtOffset(sourceText, offset) {
95
- const lineStart = sourceText.lastIndexOf("\n", Math.max(0, offset - 1)) + 1;
96
- const linePrefix = sourceText.slice(lineStart, offset);
97
- const trimmedPrefix = linePrefix.trimStart();
98
- return linePrefix.slice(0, linePrefix.length - trimmedPrefix.length);
99
- }
100
- /**
101
- * Gets the start range for a line.
102
- * @param sourceText Input sourceText value.
103
- * @param line Input line value.
104
- * @returns Return value output.
105
- * @example
106
- * ```typescript
107
- * getLineStartRange(sourceText, 2);
108
- * ```
109
- */
110
- function getLineStartRange(sourceText, line) {
111
- let currentLine = 1;
112
- let currentOffset = 0;
113
- for (const character of sourceText) {
114
- if (currentLine === line) {
115
- return [currentOffset, currentOffset];
116
- }
117
- if (character === "\n") {
118
- currentLine += 1;
119
- }
120
- currentOffset += 1;
58
+ function getSourceComments(sourceCode) {
59
+ const cachedComments = sourceCommentsCache.get(sourceCode);
60
+ if (cachedComments !== void 0) {
61
+ return cachedComments;
121
62
  }
122
- return [sourceText.length, sourceText.length];
123
- }
124
- /**
125
- * Gets the newline sequence.
126
- * @param text Input text value.
127
- * @returns Return value output.
128
- * @example
129
- * ```typescript
130
- * getNewline(sourceText);
131
- * ```
132
- */
133
- function getNewline(text) {
134
- return text.includes("\r\n") ? "\r\n" : "\n";
63
+ const loadedComments = sourceCode.getAllComments();
64
+ sourceCommentsCache.set(sourceCode, loadedComments);
65
+ return loadedComments;
135
66
  }
136
67
  /**
137
- * Gets phase-boundary comments.
138
- * @param analysis Input analysis value.
68
+ * Checks whether a comment is nested inside one top-level statement range.
69
+ * @param comment Input comment value.
70
+ * @param statements Input statements value.
139
71
  * @returns Return value output.
140
72
  * @example
141
73
  * ```typescript
142
- * getPhaseBoundaryComments(analysis);
74
+ * isInsideTopLevelStatement(comment, statements);
143
75
  * ```
144
76
  */
145
- function getPhaseBoundaryComments(analysis) {
146
- return analysis.sectionComments.filter((sectionComment) => sectionComment.phases.some((phase) => phase === "Act" || phase === "Assert"));
147
- }
148
- /**
149
- * Parses AAA phases from a comment.
150
- * @param commentValue Input commentValue value.
151
- * @returns Return value output.
152
- * @example
153
- * ```typescript
154
- * getSectionPhases("Arrange & Act");
155
- * ```
156
- */
157
- function getSectionPhases(commentValue) {
158
- const trimmedComment = commentValue.trim();
159
- if (trimmedComment.length === 0) {
160
- return [];
161
- }
162
- const parts = trimmedComment.split(/\s*&\s*/u);
163
- return parts.every((part) => isAaaPhase(part)) ? parts : [];
164
- }
165
- /**
166
- * Gets the active phases for a statement.
167
- * @param statement Input statement value.
168
- * @param sectionComments Input sectionComments value.
169
- * @returns Return value output.
170
- * @example
171
- * ```typescript
172
- * getStatementPhases(statement, sectionComments);
173
- * ```
174
- */
175
- function getStatementPhases(statement, sectionComments) {
176
- const statementLine = statement.loc?.start.line;
177
- if (statementLine === void 0) {
178
- return [];
179
- }
180
- let currentPhases = [];
181
- for (const sectionComment of sectionComments) {
182
- if (sectionComment.comment.loc.start.line > statementLine) {
183
- break;
77
+ function isInsideTopLevelStatement(comment, statements) {
78
+ const commentLine = comment.loc.start.line;
79
+ return statements.some((statement) => {
80
+ const statementStartLine = statement.loc?.start.line;
81
+ const statementEndLine = statement.loc?.end.line;
82
+ if (statementStartLine === void 0 || statementEndLine === void 0) {
83
+ return false;
184
84
  }
185
- currentPhases = sectionComment.phases;
186
- }
187
- return currentPhases;
188
- }
189
- /**
190
- * Gets supported test call metadata.
191
- * @param node Input node value.
192
- * @returns Return value output.
193
- * @example
194
- * ```typescript
195
- * getSupportedTestCall(node);
196
- * ```
197
- */
198
- function getSupportedTestCall(node) {
199
- const rootName = getTestRootName(node.callee);
200
- if (rootName !== "it" && rootName !== "test") {
201
- return void 0;
202
- }
203
- const callbackArgument = node.arguments.at(-1);
204
- if (callbackArgument === void 0 ||
205
- callbackArgument.type === "SpreadElement" ||
206
- (callbackArgument.type !== "ArrowFunctionExpression" &&
207
- callbackArgument.type !== "FunctionExpression") ||
208
- callbackArgument.body.type !== "BlockStatement") {
209
- return void 0;
210
- }
211
- return {
212
- callback: callbackArgument,
213
- callExpression: node,
214
- };
215
- }
216
- /**
217
- * Gets the root test callee name.
218
- * @param callee Input callee value.
219
- * @returns Return value output.
220
- * @example
221
- * ```typescript
222
- * getTestRootName(callExpression.callee);
223
- * ```
224
- */
225
- function getTestRootName(callee) {
226
- if (callee.type === "Identifier") {
227
- return callee.name;
228
- }
229
- if (callee.type === "MemberExpression" && callee.object.type !== "Super") {
230
- return getTestRootName(callee.object);
231
- }
232
- return void 0;
233
- }
234
- /**
235
- * Checks whether a value is an AAA phase.
236
- * @param value Input value value.
237
- * @returns Return value output.
238
- * @example
239
- * ```typescript
240
- * isAaaPhase("Arrange");
241
- * ```
242
- */
243
- function isAaaPhase(value) {
244
- return phaseNames.includes(value);
85
+ return commentLine >= statementStartLine && commentLine <= statementEndLine;
86
+ });
245
87
  }
246
- export { aaaPhaseOrder, analyzeTestBlock, countActStatements, getFlattenedSections, getIndentationAtOffset, getLineStartRange, getPhaseBoundaryComments, getSectionPhases, };
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvYWFhL2FuYWx5emVyLmFuYWx5c2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVJQUF1STtBQWF2SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkUseURBQXlEO0FBQ3pELE1BQU0sYUFBYSxHQUFHO0lBQ3BCLEdBQUcsRUFBRSxDQUFDO0lBQ04sT0FBTyxFQUFFLENBQUM7SUFDVixNQUFNLEVBQUUsQ0FBQztDQUNrQyxDQUFDO0FBRTlDLGtDQUFrQztBQUNsQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUk3QyxDQUFDO0FBMEJGOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsZ0JBQWdCLENBQ3ZCLE9BQXlCLEVBQ3pCLElBQTJCO0lBRTNCLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFDOUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvQixNQUFNLGVBQWUsR0FBeUMsVUFBVTtTQUNyRSxjQUFjLEVBQUU7U0FDaEIsTUFBTSxDQUNMLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDVixnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDekIsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNO1FBQ3ZCLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2pELGdCQUFnQixDQUFDLE9B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Z0JBQWdCLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDO1FBQ2pELGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQy9DLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPO1FBQ0wsUUFBUSxFQUFFLGdCQUF5QztRQUNuRCxjQUFjLEVBQUUsSUFBMEM7S0FDM0QsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZUFBZSxDQUN0QixNQUF1QztJQUV2QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDakMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDekUsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQWlCLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixnQkFBZ0IsR0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBtYXgtbGluZXM6IFtcImVycm9yXCIsIDM1MF0gLS0gTWFuZGF0b3J5IG11bHRpbGluZSBKU0RvYyBmb3IgaW50ZXJuYWwgaGVscGVycyBwdXNoZXMgdGhpcyBzcGxpdCBmaWxlIG92ZXIgdGhlIGRlZmF1bHQgbGltaXQuICovXHJcblxyXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcclxuXHJcbmltcG9ydCB0eXBlIHtcclxuICBBYWFQaGFzZSxcclxuICBMb2NhdGVkQ29tbWVudCxcclxuICBMb2NhdGVkTm9kZSxcclxuICBTb3VyY2VDb21tZW50LFxyXG4gIFRlc3RCbG9ja0FuYWx5c2lzLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5pbXBvcnQgeyBpc0xvY2F0ZWRDb21tZW50LCBpc1JhbmdlV2l0aGluIH0gZnJvbSBcIi4vYW5hbHl6ZXIuc3VwZXJcIjtcclxuXHJcbi8qKiBDYW5vbmljYWwgb3JkZXJpbmcgdXNlZCB3aGVuIGNvbXBhcmluZyBBQUEgcGhhc2VzLiAqL1xyXG5jb25zdCBhYWFQaGFzZU9yZGVyID0ge1xyXG4gIEFjdDogMSxcclxuICBBcnJhbmdlOiAwLFxyXG4gIEFzc2VydDogMixcclxufSBhcyBjb25zdCBzYXRpc2ZpZXMgUmVjb3JkPEFhYVBoYXNlLCBudW1iZXI+O1xyXG5cclxuLyoqIFJlY29nbml6ZWQgQUFBIHBoYXNlIG5hbWVzLiAqL1xyXG5jb25zdCBwaGFzZU5hbWVzID0gW1wiQXJyYW5nZVwiLCBcIkFjdFwiLCBcIkFzc2VydFwiXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgW1xyXG4gIEFhYVBoYXNlLFxyXG4gIEFhYVBoYXNlLFxyXG4gIEFhYVBoYXNlLFxyXG5dO1xyXG5cclxuLyoqIEhlbHBlciBzdGF0ZSBmb3IgZmxhdHRlbmVkIHNlY3Rpb24gY29tbWVudHMuICovXHJcbmludGVyZmFjZSBGbGF0dGVuZWRTZWN0aW9uIHtcclxuICAvKiogT3JpZ2luYWwgc291cmNlIGNvbW1lbnQgZm9yIHRoZSBzZWN0aW9uIG1hcmtlci4gKi9cclxuICBjb21tZW50OiBTb3VyY2VDb21tZW50O1xyXG4gIC8qKiBQaGFzZSByZXByZXNlbnRlZCBieSB0aGUgZmxhdHRlbmVkIHNlY3Rpb24gZW50cnkuICovXHJcbiAgcGhhc2U6IEFhYVBoYXNlO1xyXG59XHJcblxyXG4vKiogU3VwcG9ydGVkIGNhbGwtZXhwcmVzc2lvbiB3cmFwcGVyIGZvciBhbmFseXplZCB0ZXN0IGJsb2Nrcy4gKi9cclxuaW50ZXJmYWNlIFN1cHBvcnRlZFRlc3RDYWxsIHtcclxuICAvKiogQ2FsbGJhY2sgYXJndW1lbnQgdGhhdCBvd25zIHRoZSB0ZXN0IGJvZHkuICovXHJcbiAgY2FsbGJhY2s6IFN1cHBvcnRlZFRlc3RDYWxsYmFjaztcclxuICAvKiogT3JpZ2luYWwgYGl0YCBvciBgdGVzdGAgaW52b2NhdGlvbi4gKi9cclxuICBjYWxsRXhwcmVzc2lvbjogTG9jYXRlZE5vZGU8RVNUcmVlLkNhbGxFeHByZXNzaW9uPjtcclxufVxyXG5cclxuLyoqIFN1cHBvcnRlZCB0ZXN0IGNhbGxiYWNrIHNoYXBlIGZvciBgaXRgIGFuZCBgdGVzdGAgY2FsbHMuICovXHJcbnR5cGUgU3VwcG9ydGVkVGVzdENhbGxiYWNrID0gTG9jYXRlZE5vZGU8XHJcbiAgRVNUcmVlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uIHwgRVNUcmVlLkZ1bmN0aW9uRXhwcmVzc2lvblxyXG4+ICYge1xyXG4gIC8qKiBDYWxsYmFjayBib2R5IGJsb2NrIHVzZWQgZm9yIHNlY3Rpb24gYW5hbHlzaXMuICovXHJcbiAgYm9keTogTG9jYXRlZE5vZGU8RVNUcmVlLkJsb2NrU3RhdGVtZW50PjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbmFseXplcyBzdXBwb3J0ZWQgQUFBIHRlc3QgYmxvY2tzLlxyXG4gKiBAcGFyYW0gY29udGV4dCBJbnB1dCBjb250ZXh0IHZhbHVlLlxyXG4gKiBAcGFyYW0gbm9kZSBJbnB1dCBub2RlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGFuYWx5emVUZXN0QmxvY2soY29udGV4dCwgbm9kZSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gYW5hbHl6ZVRlc3RCbG9jayhcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIG5vZGU6IEVTVHJlZS5DYWxsRXhwcmVzc2lvbixcclxuKTogVGVzdEJsb2NrQW5hbHlzaXMgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHRlc3RDYWxsID0gZ2V0U3VwcG9ydGVkVGVzdENhbGwobm9kZSk7XHJcbiAgaWYgKHRlc3RDYWxsID09PSB2b2lkIDApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCB7IGNhbGxiYWNrLCBjYWxsRXhwcmVzc2lvbiB9ID0gdGVzdENhbGw7XHJcbiAgY29uc3QgeyBzb3VyY2VDb2RlIH0gPSBjb250ZXh0O1xyXG4gIGNvbnN0IHNlY3Rpb25Db21tZW50czogVGVzdEJsb2NrQW5hbHlzaXNbXCJzZWN0aW9uQ29tbWVudHNcIl0gPSBzb3VyY2VDb2RlXHJcbiAgICAuZ2V0QWxsQ29tbWVudHMoKVxyXG4gICAgLmZpbHRlcihcclxuICAgICAgKGNvbW1lbnQpID0+XHJcbiAgICAgICAgaXNMb2NhdGVkQ29tbWVudChjb21tZW50KSAmJlxyXG4gICAgICAgIGNvbW1lbnQudHlwZSA9PT0gXCJMaW5lXCIgJiZcclxuICAgICAgICBpc1JhbmdlV2l0aGluKGNvbW1lbnQucmFuZ2UsIGNhbGxiYWNrLmJvZHkucmFuZ2UpICYmXHJcbiAgICAgICAgZ2V0U2VjdGlvblBoYXNlcyhjb21tZW50LnZhbHVlKS5sZW5ndGggPiAwLFxyXG4gICAgKVxyXG4gICAgLm1hcCgoY29tbWVudCkgPT4gKHtcclxuICAgICAgY29tbWVudDogY29tbWVudCBhcyBMb2NhdGVkQ29tbWVudCxcclxuICAgICAgcGhhc2VzOiBnZXRTZWN0aW9uUGhhc2VzKGNvbW1lbnQudmFsdWUpLFxyXG4gICAgfSkpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgYm9keTogY2FsbGJhY2suYm9keSxcclxuICAgIGJvZHlMaW5lQ291bnQ6XHJcbiAgICAgIGNhbGxiYWNrLmJvZHkubG9jLmVuZC5saW5lIC0gY2FsbGJhY2suYm9keS5sb2Muc3RhcnQubGluZSAtIDEsXHJcbiAgICBjYWxsRXhwcmVzc2lvbixcclxuICAgIG5ld2xpbmU6IGdldE5ld2xpbmUoc291cmNlQ29kZS50ZXh0KSxcclxuICAgIHNlY3Rpb25Db21tZW50cyxcclxuICAgIHNvdXJjZVRleHQ6IHNvdXJjZUNvZGUudGV4dCxcclxuICAgIHN0YXRlbWVudHM6IGNhbGxiYWNrLmJvZHkuYm9keS5tYXAoKHN0YXRlbWVudCkgPT4ge1xyXG4gICAgICBjb25zdCBwaGFzZXMgPSBnZXRTdGF0ZW1lbnRQaGFzZXMoc3RhdGVtZW50LCBzZWN0aW9uQ29tbWVudHMpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGU6IHN0YXRlbWVudCBhcyBMb2NhdGVkTm9kZTxFU1RyZWUuU3RhdGVtZW50PixcclxuICAgICAgICBwaGFzZTogcGhhc2VzLmF0KC0xKSxcclxuICAgICAgICBwaGFzZXMsXHJcbiAgICAgIH07XHJcbiAgICB9KSxcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQ291bnRzIEFjdCBzdGF0ZW1lbnRzLlxyXG4gKiBAcGFyYW0gYW5hbHlzaXMgSW5wdXQgYW5hbHlzaXMgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY291bnRBY3RTdGF0ZW1lbnRzKGFuYWx5c2lzKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3VudEFjdFN0YXRlbWVudHMoYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzKTogbnVtYmVyIHtcclxuICByZXR1cm4gYW5hbHlzaXMuc3RhdGVtZW50cy5maWx0ZXIoXHJcbiAgICAoc3RhdGVtZW50KSA9PlxyXG4gICAgICBzdGF0ZW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQWN0XCIpICYmXHJcbiAgICAgIChzdGF0ZW1lbnQubm9kZS50eXBlID09PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fFxyXG4gICAgICAgIHN0YXRlbWVudC5ub2RlLnR5cGUgPT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSxcclxuICApLmxlbmd0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZsYXR0ZW5zIHNlY3Rpb24gY29tbWVudHMuXHJcbiAqIEBwYXJhbSBhbmFseXNpcyBJbnB1dCBhbmFseXNpcyB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRGbGF0dGVuZWRTZWN0aW9ucyhhbmFseXNpcyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0RmxhdHRlbmVkU2VjdGlvbnMoXHJcbiAgYW5hbHlzaXM6IFBpY2s8VGVzdEJsb2NrQW5hbHlzaXMsIFwic2VjdGlvbkNvbW1lbnRzXCI+LFxyXG4pOiBGbGF0dGVuZWRTZWN0aW9uW10ge1xyXG4gIHJldHVybiBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuZmxhdE1hcCgoc2VjdGlvbkNvbW1lbnQpID0+XHJcbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMubWFwKChwaGFzZSkgPT4gKHtcclxuICAgICAgY29tbWVudDogc2VjdGlvbkNvbW1lbnQuY29tbWVudCxcclxuICAgICAgcGhhc2UsXHJcbiAgICB9KSksXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgaW5kZW50YXRpb24gYXQgYW4gb2Zmc2V0LlxyXG4gKiBAcGFyYW0gc291cmNlVGV4dCBJbnB1dCBzb3VyY2VUZXh0IHZhbHVlLlxyXG4gKiBAcGFyYW0gb2Zmc2V0IElucHV0IG9mZnNldCB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRJbmRlbnRhdGlvbkF0T2Zmc2V0KHNvdXJjZVRleHQsIDQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldEluZGVudGF0aW9uQXRPZmZzZXQoc291cmNlVGV4dDogc3RyaW5nLCBvZmZzZXQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgbGluZVN0YXJ0ID0gc291cmNlVGV4dC5sYXN0SW5kZXhPZihcIlxcblwiLCBNYXRoLm1heCgwLCBvZmZzZXQgLSAxKSkgKyAxO1xyXG4gIGNvbnN0IGxpbmVQcmVmaXggPSBzb3VyY2VUZXh0LnNsaWNlKGxpbmVTdGFydCwgb2Zmc2V0KTtcclxuICBjb25zdCB0cmltbWVkUHJlZml4ID0gbGluZVByZWZpeC50cmltU3RhcnQoKTtcclxuXHJcbiAgcmV0dXJuIGxpbmVQcmVmaXguc2xpY2UoMCwgbGluZVByZWZpeC5sZW5ndGggLSB0cmltbWVkUHJlZml4Lmxlbmd0aCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBzdGFydCByYW5nZSBmb3IgYSBsaW5lLlxyXG4gKiBAcGFyYW0gc291cmNlVGV4dCBJbnB1dCBzb3VyY2VUZXh0IHZhbHVlLlxyXG4gKiBAcGFyYW0gbGluZSBJbnB1dCBsaW5lIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldExpbmVTdGFydFJhbmdlKHNvdXJjZVRleHQsIDIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldExpbmVTdGFydFJhbmdlKHNvdXJjZVRleHQ6IHN0cmluZywgbGluZTogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSB7XHJcbiAgbGV0IGN1cnJlbnRMaW5lID0gMTtcclxuICBsZXQgY3VycmVudE9mZnNldCA9IDA7XHJcbiAgZm9yIChjb25zdCBjaGFyYWN0ZXIgb2Ygc291cmNlVGV4dCkge1xyXG4gICAgaWYgKGN1cnJlbnRMaW5lID09PSBsaW5lKSB7XHJcbiAgICAgIHJldHVybiBbY3VycmVudE9mZnNldCwgY3VycmVudE9mZnNldF07XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhcmFjdGVyID09PSBcIlxcblwiKSB7XHJcbiAgICAgIGN1cnJlbnRMaW5lICs9IDE7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50T2Zmc2V0ICs9IDE7XHJcbiAgfVxyXG4gIHJldHVybiBbc291cmNlVGV4dC5sZW5ndGgsIHNvdXJjZVRleHQubGVuZ3RoXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIG5ld2xpbmUgc2VxdWVuY2UuXHJcbiAqIEBwYXJhbSB0ZXh0IElucHV0IHRleHQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0TmV3bGluZShzb3VyY2VUZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXROZXdsaW5lKHRleHQ6IHN0cmluZyk6IFwiXFxuXCIgfCBcIlxcclxcblwiIHtcclxuICByZXR1cm4gdGV4dC5pbmNsdWRlcyhcIlxcclxcblwiKSA/IFwiXFxyXFxuXCIgOiBcIlxcblwiO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyBwaGFzZS1ib3VuZGFyeSBjb21tZW50cy5cclxuICogQHBhcmFtIGFuYWx5c2lzIElucHV0IGFuYWx5c2lzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyhhbmFseXNpcyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGhhc2VCb3VuZGFyeUNvbW1lbnRzKFxyXG4gIGFuYWx5c2lzOiBQaWNrPFRlc3RCbG9ja0FuYWx5c2lzLCBcInNlY3Rpb25Db21tZW50c1wiPixcclxuKTogVGVzdEJsb2NrQW5hbHlzaXNbXCJzZWN0aW9uQ29tbWVudHNcIl0ge1xyXG4gIHJldHVybiBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuZmlsdGVyKChzZWN0aW9uQ29tbWVudCkgPT5cclxuICAgIHNlY3Rpb25Db21tZW50LnBoYXNlcy5zb21lKFxyXG4gICAgICAocGhhc2UpID0+IHBoYXNlID09PSBcIkFjdFwiIHx8IHBoYXNlID09PSBcIkFzc2VydFwiLFxyXG4gICAgKSxcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIEFBQSBwaGFzZXMgZnJvbSBhIGNvbW1lbnQuXHJcbiAqIEBwYXJhbSBjb21tZW50VmFsdWUgSW5wdXQgY29tbWVudFZhbHVlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFNlY3Rpb25QaGFzZXMoXCJBcnJhbmdlICYgQWN0XCIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFNlY3Rpb25QaGFzZXMoY29tbWVudFZhbHVlOiBzdHJpbmcpOiBBYWFQaGFzZVtdIHtcclxuICBjb25zdCB0cmltbWVkQ29tbWVudCA9IGNvbW1lbnRWYWx1ZS50cmltKCk7XHJcbiAgaWYgKHRyaW1tZWRDb21tZW50Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBjb25zdCBwYXJ0cyA9IHRyaW1tZWRDb21tZW50LnNwbGl0KC9cXHMqJlxccyovdSk7XHJcbiAgcmV0dXJuIHBhcnRzLmV2ZXJ5KChwYXJ0KSA9PiBpc0FhYVBoYXNlKHBhcnQpKSA/IHBhcnRzIDogW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBhY3RpdmUgcGhhc2VzIGZvciBhIHN0YXRlbWVudC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBJbnB1dCBzdGF0ZW1lbnQgdmFsdWUuXHJcbiAqIEBwYXJhbSBzZWN0aW9uQ29tbWVudHMgSW5wdXQgc2VjdGlvbkNvbW1lbnRzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFN0YXRlbWVudFBoYXNlcyhzdGF0ZW1lbnQsIHNlY3Rpb25Db21tZW50cyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U3RhdGVtZW50UGhhc2VzKFxyXG4gIHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCxcclxuICBzZWN0aW9uQ29tbWVudHM6IFRlc3RCbG9ja0FuYWx5c2lzW1wic2VjdGlvbkNvbW1lbnRzXCJdLFxyXG4pOiBBYWFQaGFzZVtdIHtcclxuICBjb25zdCBzdGF0ZW1lbnRMaW5lID0gc3RhdGVtZW50LmxvYz8uc3RhcnQubGluZTtcclxuICBpZiAoc3RhdGVtZW50TGluZSA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIGxldCBjdXJyZW50UGhhc2VzOiBBYWFQaGFzZVtdID0gW107XHJcbiAgZm9yIChjb25zdCBzZWN0aW9uQ29tbWVudCBvZiBzZWN0aW9uQ29tbWVudHMpIHtcclxuICAgIGlmIChzZWN0aW9uQ29tbWVudC5jb21tZW50LmxvYy5zdGFydC5saW5lID4gc3RhdGVtZW50TGluZSkge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGN1cnJlbnRQaGFzZXMgPSBzZWN0aW9uQ29tbWVudC5waGFzZXM7XHJcbiAgfVxyXG4gIHJldHVybiBjdXJyZW50UGhhc2VzO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyBzdXBwb3J0ZWQgdGVzdCBjYWxsIG1ldGFkYXRhLlxyXG4gKiBAcGFyYW0gbm9kZSBJbnB1dCBub2RlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFN1cHBvcnRlZFRlc3RDYWxsKG5vZGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFN1cHBvcnRlZFRlc3RDYWxsKFxyXG4gIG5vZGU6IEVTVHJlZS5DYWxsRXhwcmVzc2lvbixcclxuKTogU3VwcG9ydGVkVGVzdENhbGwgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHJvb3ROYW1lID0gZ2V0VGVzdFJvb3ROYW1lKG5vZGUuY2FsbGVlKTtcclxuICBpZiAocm9vdE5hbWUgIT09IFwiaXRcIiAmJiByb290TmFtZSAhPT0gXCJ0ZXN0XCIpIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICBjb25zdCBjYWxsYmFja0FyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMuYXQoLTEpO1xyXG4gIGlmIChcclxuICAgIGNhbGxiYWNrQXJndW1lbnQgPT09IHZvaWQgMCB8fFxyXG4gICAgY2FsbGJhY2tBcmd1bWVudC50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIiB8fFxyXG4gICAgKGNhbGxiYWNrQXJndW1lbnQudHlwZSAhPT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiICYmXHJcbiAgICAgIGNhbGxiYWNrQXJndW1lbnQudHlwZSAhPT0gXCJGdW5jdGlvbkV4cHJlc3Npb25cIikgfHxcclxuICAgIGNhbGxiYWNrQXJndW1lbnQuYm9keS50eXBlICE9PSBcIkJsb2NrU3RhdGVtZW50XCJcclxuICApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrQXJndW1lbnQgYXMgU3VwcG9ydGVkVGVzdENhbGxiYWNrLFxyXG4gICAgY2FsbEV4cHJlc3Npb246IG5vZGUgYXMgTG9jYXRlZE5vZGU8RVNUcmVlLkNhbGxFeHByZXNzaW9uPixcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgcm9vdCB0ZXN0IGNhbGxlZSBuYW1lLlxyXG4gKiBAcGFyYW0gY2FsbGVlIElucHV0IGNhbGxlZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRUZXN0Um9vdE5hbWUoY2FsbEV4cHJlc3Npb24uY2FsbGVlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUZXN0Um9vdE5hbWUoXHJcbiAgY2FsbGVlOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb25bXCJjYWxsZWVcIl0sXHJcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgaWYgKGNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xyXG4gICAgcmV0dXJuIGNhbGxlZS5uYW1lO1xyXG4gIH1cclxuICBpZiAoY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIGNhbGxlZS5vYmplY3QudHlwZSAhPT0gXCJTdXBlclwiKSB7XHJcbiAgICByZXR1cm4gZ2V0VGVzdFJvb3ROYW1lKGNhbGxlZS5vYmplY3QpO1xyXG4gIH1cclxuICByZXR1cm4gdm9pZCAwO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBBQUEgcGhhc2UuXHJcbiAqIEBwYXJhbSB2YWx1ZSBJbnB1dCB2YWx1ZSB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpc0FhYVBoYXNlKFwiQXJyYW5nZVwiKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0FhYVBoYXNlKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBBYWFQaGFzZSB7XHJcbiAgcmV0dXJuIHBoYXNlTmFtZXMuaW5jbHVkZXModmFsdWUgYXMgQWFhUGhhc2UpO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIGFhYVBoYXNlT3JkZXIsXHJcbiAgYW5hbHl6ZVRlc3RCbG9jayxcclxuICBjb3VudEFjdFN0YXRlbWVudHMsXHJcbiAgZ2V0RmxhdHRlbmVkU2VjdGlvbnMsXHJcbiAgZ2V0SW5kZW50YXRpb25BdE9mZnNldCxcclxuICBnZXRMaW5lU3RhcnRSYW5nZSxcclxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXHJcbiAgZ2V0U2VjdGlvblBoYXNlcyxcclxufTtcclxuZXhwb3J0IHR5cGUgeyBGbGF0dGVuZWRTZWN0aW9uIH07XHJcbiJdfQ==
88
+ export { analyzeTestBlock };
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYW5hbHlzaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvYWFhL2FuYWx5emVyLmFuYWx5c2lzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixvQkFBb0IsR0FDckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVbkUscUVBQXFFO0FBQ3JFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxPQUFPLEVBR3BDLENBQUM7QUFFSjs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLGdCQUFnQixDQUN2QixPQUF5QixFQUN6QixJQUEyQjtJQUUzQixNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxJQUFJLFFBQVEsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBQzlDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDL0IsTUFBTSxlQUFlLEdBQ25CLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztTQUMxQixNQUFNLENBQ0wsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNWLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN6QixPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU07UUFDdkIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDakQsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQzdDO1NBQ0EsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxPQUF5QjtRQUNsQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUN4QyxDQUFDLENBQUMsQ0FBQztJQUVSLE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDbkIsYUFBYSxFQUNYLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQy9ELGNBQWM7UUFDZCxPQUFPLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDcEMsZUFBZTtRQUNmLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSTtRQUMzQixVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzlELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFNBQTBDO2dCQUNoRCxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsTUFBTTthQUNQLENBQUM7UUFDSixDQUFDLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDeEIsVUFBOEI7SUFFOUIsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNELElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNuRCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRXBELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHlCQUF5QixDQUNoQyxPQUF1QixFQUN2QixVQUF1QztJQUV2QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFFM0MsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFFakQsSUFBSSxrQkFBa0IsS0FBSyxLQUFLLENBQUMsSUFBSSxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sV0FBVyxJQUFJLGtCQUFrQixJQUFJLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQztJQUM5RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcclxuaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBMb2NhdGVkQ29tbWVudCwgTG9jYXRlZE5vZGUsIFRlc3RCbG9ja0FuYWx5c2lzIH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0TmV3bGluZSxcclxuICBnZXRTZWN0aW9uUGhhc2VzLFxyXG4gIGdldFN0YXRlbWVudFBoYXNlcyxcclxuICBnZXRTdXBwb3J0ZWRUZXN0Q2FsbCxcclxufSBmcm9tIFwiLi9hbmFseXplci5hbmFseXNpcy5oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGlzTG9jYXRlZENvbW1lbnQsIGlzUmFuZ2VXaXRoaW4gfSBmcm9tIFwiLi9hbmFseXplci5zdXBlclwiO1xyXG5cclxuLyoqIFNvdXJjZSBjb21tZW50IHNoYXBlIHJldHVybmVkIGJ5IEVTTGludCBmb3Igb25lIGZpbGUuICovXHJcbnR5cGUgQW5hbHl6ZXJDb21tZW50ID0gUmV0dXJuVHlwZTxcclxuICBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXVtcImdldEFsbENvbW1lbnRzXCJdXHJcbj5bbnVtYmVyXTtcclxuXHJcbi8qKiBFU0xpbnQgc291cmNlLWNvZGUgc2VydmljZSByZWZlcmVuY2UgdXNlZCBmb3IgY29tbWVudCBjYWNoaW5nLiAqL1xyXG50eXBlIEFuYWx5emVyU291cmNlQ29kZSA9IFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdO1xyXG5cclxuLyoqIE1lbW9pemVkIGNvbW1lbnQgYXJyYXlzIGtleWVkIGJ5IEVTTGludCBzb3VyY2UtY29kZSBpbnN0YW5jZXMuICovXHJcbmNvbnN0IHNvdXJjZUNvbW1lbnRzQ2FjaGUgPSBuZXcgV2Vha01hcDxcclxuICBBbmFseXplclNvdXJjZUNvZGUsXHJcbiAgcmVhZG9ubHkgQW5hbHl6ZXJDb21tZW50W11cclxuPigpO1xyXG5cclxuLyoqXHJcbiAqIEFuYWx5emVzIHN1cHBvcnRlZCBBQUEgdGVzdCBibG9ja3MuXHJcbiAqIEBwYXJhbSBjb250ZXh0IElucHV0IGNvbnRleHQgdmFsdWUuXHJcbiAqIEBwYXJhbSBub2RlIElucHV0IG5vZGUgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogYW5hbHl6ZVRlc3RCbG9jayhjb250ZXh0LCBub2RlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBhbmFseXplVGVzdEJsb2NrKFxyXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXHJcbiAgbm9kZTogRVNUcmVlLkNhbGxFeHByZXNzaW9uLFxyXG4pOiBUZXN0QmxvY2tBbmFseXNpcyB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3QgdGVzdENhbGwgPSBnZXRTdXBwb3J0ZWRUZXN0Q2FsbChub2RlKTtcclxuICBpZiAodGVzdENhbGwgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIHZvaWQgMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IHsgY2FsbGJhY2ssIGNhbGxFeHByZXNzaW9uIH0gPSB0ZXN0Q2FsbDtcclxuICBjb25zdCB7IHNvdXJjZUNvZGUgfSA9IGNvbnRleHQ7XHJcbiAgY29uc3Qgc2VjdGlvbkNvbW1lbnRzOiBUZXN0QmxvY2tBbmFseXNpc1tcInNlY3Rpb25Db21tZW50c1wiXSA9XHJcbiAgICBnZXRTb3VyY2VDb21tZW50cyhzb3VyY2VDb2RlKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChjb21tZW50KSA9PlxyXG4gICAgICAgICAgaXNMb2NhdGVkQ29tbWVudChjb21tZW50KSAmJlxyXG4gICAgICAgICAgY29tbWVudC50eXBlID09PSBcIkxpbmVcIiAmJlxyXG4gICAgICAgICAgaXNSYW5nZVdpdGhpbihjb21tZW50LnJhbmdlLCBjYWxsYmFjay5ib2R5LnJhbmdlKSAmJlxyXG4gICAgICAgICAgIWlzSW5zaWRlVG9wTGV2ZWxTdGF0ZW1lbnQoY29tbWVudCwgY2FsbGJhY2suYm9keS5ib2R5KSAmJlxyXG4gICAgICAgICAgZ2V0U2VjdGlvblBoYXNlcyhjb21tZW50LnZhbHVlKS5sZW5ndGggPiAwLFxyXG4gICAgICApXHJcbiAgICAgIC5tYXAoKGNvbW1lbnQpID0+ICh7XHJcbiAgICAgICAgY29tbWVudDogY29tbWVudCBhcyBMb2NhdGVkQ29tbWVudCxcclxuICAgICAgICBwaGFzZXM6IGdldFNlY3Rpb25QaGFzZXMoY29tbWVudC52YWx1ZSksXHJcbiAgICAgIH0pKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGJvZHk6IGNhbGxiYWNrLmJvZHksXHJcbiAgICBib2R5TGluZUNvdW50OlxyXG4gICAgICBjYWxsYmFjay5ib2R5LmxvYy5lbmQubGluZSAtIGNhbGxiYWNrLmJvZHkubG9jLnN0YXJ0LmxpbmUgLSAxLFxyXG4gICAgY2FsbEV4cHJlc3Npb24sXHJcbiAgICBuZXdsaW5lOiBnZXROZXdsaW5lKHNvdXJjZUNvZGUudGV4dCksXHJcbiAgICBzZWN0aW9uQ29tbWVudHMsXHJcbiAgICBzb3VyY2VUZXh0OiBzb3VyY2VDb2RlLnRleHQsXHJcbiAgICBzdGF0ZW1lbnRzOiBjYWxsYmFjay5ib2R5LmJvZHkubWFwKChzdGF0ZW1lbnQpID0+IHtcclxuICAgICAgY29uc3QgcGhhc2VzID0gZ2V0U3RhdGVtZW50UGhhc2VzKHN0YXRlbWVudCwgc2VjdGlvbkNvbW1lbnRzKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlOiBzdGF0ZW1lbnQgYXMgTG9jYXRlZE5vZGU8RVNUcmVlLlN0YXRlbWVudD4sXHJcbiAgICAgICAgcGhhc2U6IHBoYXNlcy5hdCgtMSksXHJcbiAgICAgICAgcGhhc2VzLFxyXG4gICAgICB9O1xyXG4gICAgfSksXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgY2FjaGVkIHNvdXJjZSBjb21tZW50cyBmb3IgdGhlIGFjdGl2ZSBmaWxlLlxyXG4gKiBAcGFyYW0gc291cmNlQ29kZSBJbnB1dCBzb3VyY2VDb2RlIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGdldFNvdXJjZUNvbW1lbnRzKHNvdXJjZUNvZGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFNvdXJjZUNvbW1lbnRzKFxyXG4gIHNvdXJjZUNvZGU6IEFuYWx5emVyU291cmNlQ29kZSxcclxuKTogcmVhZG9ubHkgQW5hbHl6ZXJDb21tZW50W10ge1xyXG4gIGNvbnN0IGNhY2hlZENvbW1lbnRzID0gc291cmNlQ29tbWVudHNDYWNoZS5nZXQoc291cmNlQ29kZSk7XHJcbiAgaWYgKGNhY2hlZENvbW1lbnRzICE9PSB2b2lkIDApIHtcclxuICAgIHJldHVybiBjYWNoZWRDb21tZW50cztcclxuICB9XHJcblxyXG4gIGNvbnN0IGxvYWRlZENvbW1lbnRzID0gc291cmNlQ29kZS5nZXRBbGxDb21tZW50cygpO1xyXG4gIHNvdXJjZUNvbW1lbnRzQ2FjaGUuc2V0KHNvdXJjZUNvZGUsIGxvYWRlZENvbW1lbnRzKTtcclxuXHJcbiAgcmV0dXJuIGxvYWRlZENvbW1lbnRzO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgYSBjb21tZW50IGlzIG5lc3RlZCBpbnNpZGUgb25lIHRvcC1sZXZlbCBzdGF0ZW1lbnQgcmFuZ2UuXHJcbiAqIEBwYXJhbSBjb21tZW50IElucHV0IGNvbW1lbnQgdmFsdWUuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnRzIElucHV0IHN0YXRlbWVudHMgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaXNJbnNpZGVUb3BMZXZlbFN0YXRlbWVudChjb21tZW50LCBzdGF0ZW1lbnRzKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0luc2lkZVRvcExldmVsU3RhdGVtZW50KFxyXG4gIGNvbW1lbnQ6IExvY2F0ZWRDb21tZW50LFxyXG4gIHN0YXRlbWVudHM6IHJlYWRvbmx5IEVTVHJlZS5TdGF0ZW1lbnRbXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgY29tbWVudExpbmUgPSBjb21tZW50LmxvYy5zdGFydC5saW5lO1xyXG5cclxuICByZXR1cm4gc3RhdGVtZW50cy5zb21lKChzdGF0ZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHN0YXRlbWVudFN0YXJ0TGluZSA9IHN0YXRlbWVudC5sb2M/LnN0YXJ0LmxpbmU7XHJcbiAgICBjb25zdCBzdGF0ZW1lbnRFbmRMaW5lID0gc3RhdGVtZW50LmxvYz8uZW5kLmxpbmU7XHJcblxyXG4gICAgaWYgKHN0YXRlbWVudFN0YXJ0TGluZSA9PT0gdm9pZCAwIHx8IHN0YXRlbWVudEVuZExpbmUgPT09IHZvaWQgMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbW1lbnRMaW5lID49IHN0YXRlbWVudFN0YXJ0TGluZSAmJiBjb21tZW50TGluZSA8PSBzdGF0ZW1lbnRFbmRMaW5lO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgeyBhbmFseXplVGVzdEJsb2NrIH07XHJcbiJdfQ==
@@ -1,93 +1,2 @@
1
- import type * as ESTree from "estree";
2
- import type { LocatedNode, TestBlockAnalysis } from "./types.js";
3
- /** Identifier names extracted from an assertion statement. */
4
- interface AssertionIdentifiers {
5
- /** Identifier used as the actual value. */
6
- actual: string | undefined;
7
- /** Identifier used as the expected value. */
8
- expected: string | undefined;
9
- }
10
- /**
11
- * Collects Assert declarations.
12
- * @param analysis Input analysis value.
13
- * @returns Return value output.
14
- * @example
15
- * ```typescript
16
- * getAssertDeclaredIdentifiers(analysis);
17
- * ```
18
- */
19
- declare function getAssertDeclaredIdentifiers(analysis: TestBlockAnalysis): Map<string, LocatedNode<ESTree.Identifier>>;
20
- /**
21
- * Extracts assertion identifiers.
22
- * @param statement Input statement value.
23
- * @returns Return value output.
24
- * @example
25
- * ```typescript
26
- * getAssertionIdentifiers(statement);
27
- * ```
28
- */
29
- declare function getAssertionIdentifiers(statement: ESTree.Statement): AssertionIdentifiers;
30
- /**
31
- * Gets a statement expression.
32
- * @param statement Input statement value.
33
- * @returns Return value output.
34
- * @example
35
- * ```typescript
36
- * getStatementExpression(statement);
37
- * ```
38
- */
39
- declare function getStatementExpression(statement: ESTree.Statement): ESTree.Expression | undefined;
40
- /**
41
- * Checks for assertions.
42
- * @param statement Input statement value.
43
- * @returns Return value output.
44
- * @example
45
- * ```typescript
46
- * hasAssertion(statement);
47
- * ```
48
- */
49
- declare function hasAssertion(statement: ESTree.Statement): boolean;
50
- /**
51
- * Checks for action expressions.
52
- * @param expression Input expression value.
53
- * @returns Return value output.
54
- * @example
55
- * ```typescript
56
- * isActionExpression(expression);
57
- * ```
58
- */
59
- declare function isActionExpression(expression: ESTree.Expression | undefined): boolean;
60
- /**
61
- * Checks Assert statement validity.
62
- * @param statement Input statement value.
63
- * @returns Return value output.
64
- * @example
65
- * ```typescript
66
- * isValidAssertStatement(statement);
67
- * ```
68
- */
69
- declare function isValidAssertStatement(statement: ESTree.Statement): boolean;
70
- /**
71
- * Unwraps nested expressions.
72
- * @param expression Input expression value.
73
- * @returns Return value output.
74
- * @example
75
- * ```typescript
76
- * unwrapExpression(expression);
77
- * ```
78
- */
79
- declare function unwrapExpression(expression: ESTree.Expression | undefined): ESTree.Expression | undefined;
80
- /**
81
- * Checks AAA naming prefixes.
82
- * @param name Input name value.
83
- * @param prefix Input prefix value.
84
- * @returns Return value output.
85
- * @example
86
- * ```typescript
87
- * usesPrefix("actualResult", "actual");
88
- * ```
89
- */
90
- declare function usesPrefix(name: string, prefix: "actual" | "expected"): boolean;
91
- export { getAssertDeclaredIdentifiers, getAssertionIdentifiers, getStatementExpression, hasAssertion, isActionExpression, isValidAssertStatement, unwrapExpression, usesPrefix, };
92
- export type { AssertionIdentifiers };
1
+ export {};
93
2
  //# sourceMappingURL=analyzer.assertions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.assertions.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.assertions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAI9D,8DAA8D;AAC9D,UAAU,oBAAoB;IAC5B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAUD;;;;;;;;GAQG;AACH,iBAAS,4BAA4B,CACnC,QAAQ,EAAE,iBAAiB,GAC1B,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAkB7C;AAwBD;;;;;;;;GAQG;AACH,iBAAS,uBAAuB,CAC9B,SAAS,EAAE,MAAM,CAAC,SAAS,GAC1B,oBAAoB,CAqBtB;AAmFD;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAC7B,SAAS,EAAE,MAAM,CAAC,SAAS,GAC1B,MAAM,CAAC,UAAU,GAAG,SAAS,CAY/B;AAED;;;;;;;;GAQG;AACH,iBAAS,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAQ1D;AAqBD;;;;;;;;GAQG;AACH,iBAAS,kBAAkB,CACzB,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GACxC,OAAO,CAOT;AA8BD;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAmBpE;AAED;;;;;;;;GAQG;AACH,iBAAS,gBAAgB,CACvB,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GACxC,MAAM,CAAC,UAAU,GAAG,SAAS,CAQ/B;AAED;;;;;;;;;GASG;AACH,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAExE;AAED,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,GACX,CAAC;AACF,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"analyzer.assertions.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.assertions.ts"],"names":[],"mappings":""}