@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
@@ -0,0 +1,62 @@
1
+ import type * as ESTree from "estree";
2
+ /** Raw assertion operands extracted from a call expression. */
3
+ interface AssertionOperands {
4
+ /** Expression used as the actual operand. */
5
+ actual: ESTree.Expression | undefined;
6
+ /** Expression used as the expected operand. */
7
+ expected: ESTree.Expression | undefined;
8
+ }
9
+ /**
10
+ * Gets assert operands.
11
+ * @param expression Input expression value.
12
+ * @returns Return value output.
13
+ * @example
14
+ * ```typescript
15
+ * getAssertOperands(expression);
16
+ * ```
17
+ */
18
+ declare function getAssertOperands(expression: ESTree.CallExpression): AssertionOperands | undefined;
19
+ /**
20
+ * Gets expect operands.
21
+ * @param expression Input expression value.
22
+ * @returns Return value output.
23
+ * @example
24
+ * ```typescript
25
+ * getExpectOperands(expression);
26
+ * ```
27
+ */
28
+ declare function getExpectOperands(expression: ESTree.CallExpression): AssertionOperands | undefined;
29
+ /**
30
+ * Gets an identifier name.
31
+ * @param expression Input expression value.
32
+ * @returns Return value output.
33
+ * @example
34
+ * ```typescript
35
+ * getIdentifierName(expression);
36
+ * ```
37
+ */
38
+ declare function getIdentifierName(expression: ESTree.Expression | undefined): string | undefined;
39
+ /**
40
+ * Checks whether an assertion evaluates the actual operand inline.
41
+ * @param expression Assertion call expression to inspect.
42
+ * @param isActionExpression Predicate that identifies action-like expressions.
43
+ * @returns True when the assertion actual operand performs action-like work.
44
+ * @example
45
+ * ```typescript
46
+ * const actual = hasEvaluatedAssertionActual(expression, () => true);
47
+ * void actual;
48
+ * ```
49
+ */
50
+ declare function hasEvaluatedAssertionActual(expression: ESTree.CallExpression, isActionExpression: (expression: ESTree.Expression | undefined) => boolean): boolean;
51
+ /**
52
+ * Checks for assertion calls.
53
+ * @param node Input node value.
54
+ * @returns Return value output.
55
+ * @example
56
+ * ```typescript
57
+ * isAssertionCall(node);
58
+ * ```
59
+ */
60
+ declare function isAssertionCall(node: ESTree.CallExpression): boolean;
61
+ export { getAssertOperands, getExpectOperands, getIdentifierName, hasEvaluatedAssertionActual, isAssertionCall, };
62
+ //# sourceMappingURL=analyzer.assertions.operands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.assertions.operands.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.assertions.operands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,+DAA+D;AAC/D,UAAU,iBAAiB;IACzB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IACtC,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,CAAC,cAAc,GAChC,iBAAiB,GAAG,SAAS,CAe/B;AAED;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,CAAC,cAAc,GAChC,iBAAiB,GAAG,SAAS,CA4B/B;AAED;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CACxB,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GACxC,MAAM,GAAG,SAAS,CAEpB;AAED;;;;;;;;;;GAUG;AACH,iBAAS,2BAA2B,CAClC,UAAU,EAAE,MAAM,CAAC,cAAc,EACjC,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,KAAK,OAAO,GACzE,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,iBAAS,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAyB7D;AAED,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,GAChB,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Gets assert operands.
3
+ * @param expression Input expression value.
4
+ * @returns Return value output.
5
+ * @example
6
+ * ```typescript
7
+ * getAssertOperands(expression);
8
+ * ```
9
+ */
10
+ function getAssertOperands(expression) {
11
+ if (expression.callee.type === "MemberExpression" &&
12
+ expression.callee.object.type === "Identifier" &&
13
+ expression.callee.object.name === "assert") {
14
+ const [actual, expected] = expression.arguments;
15
+ if (actual?.type !== "SpreadElement" &&
16
+ expected?.type !== "SpreadElement") {
17
+ return { actual, expected };
18
+ }
19
+ }
20
+ return void 0;
21
+ }
22
+ /**
23
+ * Gets expect operands.
24
+ * @param expression Input expression value.
25
+ * @returns Return value output.
26
+ * @example
27
+ * ```typescript
28
+ * getExpectOperands(expression);
29
+ * ```
30
+ */
31
+ function getExpectOperands(expression) {
32
+ if (expression.callee.type === "Identifier" &&
33
+ expression.callee.name === "expect") {
34
+ const [actual] = expression.arguments;
35
+ return actual?.type === "SpreadElement"
36
+ ? { actual: void 0, expected: void 0 }
37
+ : { actual, expected: void 0 };
38
+ }
39
+ if (expression.callee.type === "MemberExpression" &&
40
+ expression.callee.object.type === "CallExpression") {
41
+ const nestedOperands = getExpectOperands(expression.callee.object);
42
+ if (nestedOperands === void 0) {
43
+ return void 0;
44
+ }
45
+ const [expected] = expression.arguments;
46
+ return expected?.type === "SpreadElement"
47
+ ? nestedOperands
48
+ : { actual: nestedOperands.actual, expected };
49
+ }
50
+ return void 0;
51
+ }
52
+ /**
53
+ * Gets an identifier name.
54
+ * @param expression Input expression value.
55
+ * @returns Return value output.
56
+ * @example
57
+ * ```typescript
58
+ * getIdentifierName(expression);
59
+ * ```
60
+ */
61
+ function getIdentifierName(expression) {
62
+ return expression?.type === "Identifier" ? expression.name : void 0;
63
+ }
64
+ /**
65
+ * Checks whether an assertion evaluates the actual operand inline.
66
+ * @param expression Assertion call expression to inspect.
67
+ * @param isActionExpression Predicate that identifies action-like expressions.
68
+ * @returns True when the assertion actual operand performs action-like work.
69
+ * @example
70
+ * ```typescript
71
+ * const actual = hasEvaluatedAssertionActual(expression, () => true);
72
+ * void actual;
73
+ * ```
74
+ */
75
+ function hasEvaluatedAssertionActual(expression, isActionExpression) {
76
+ const operands = getExpectOperands(expression) ?? getAssertOperands(expression);
77
+ return operands !== void 0 && isActionExpression(operands.actual);
78
+ }
79
+ /**
80
+ * Checks for assertion calls.
81
+ * @param node Input node value.
82
+ * @returns Return value output.
83
+ * @example
84
+ * ```typescript
85
+ * isAssertionCall(node);
86
+ * ```
87
+ */
88
+ function isAssertionCall(node) {
89
+ if (node.callee.type === "Identifier") {
90
+ return (node.callee.name === "expect" ||
91
+ node.callee.name === "assert" ||
92
+ node.callee.name === "assertType" ||
93
+ node.callee.name === "expectTypeOf");
94
+ }
95
+ if (node.callee.type !== "MemberExpression") {
96
+ return false;
97
+ }
98
+ if (node.callee.object.type === "Identifier" &&
99
+ node.callee.object.name === "assert") {
100
+ return true;
101
+ }
102
+ return (node.callee.object.type === "CallExpression" &&
103
+ isAssertionCall(node.callee.object));
104
+ }
105
+ export { getAssertOperands, getExpectOperands, getIdentifierName, hasEvaluatedAssertionActual, isAssertionCall, };
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuYXNzZXJ0aW9ucy5vcGVyYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9hYWEvYW5hbHl6ZXIuYXNzZXJ0aW9ucy5vcGVyYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQTs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsaUJBQWlCLENBQ3hCLFVBQWlDO0lBRWpDLElBQ0UsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCO1FBQzdDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZO1FBQzlDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQzFDLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDaEQsSUFDRSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWU7WUFDaEMsUUFBUSxFQUFFLElBQUksS0FBSyxlQUFlLEVBQ2xDLENBQUM7WUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixVQUFpQztJQUVqQyxJQUNFLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVk7UUFDdkMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUNuQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDdEMsT0FBTyxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWU7WUFDckMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN0QyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQ0UsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCO1FBQzdDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFDbEQsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUV4QyxPQUFPLFFBQVEsRUFBRSxJQUFJLEtBQUssZUFBZTtZQUN2QyxDQUFDLENBQUMsY0FBYztZQUNoQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixVQUF5QztJQUV6QyxPQUFPLFVBQVUsRUFBRSxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsMkJBQTJCLENBQ2xDLFVBQWlDLEVBQ2pDLGtCQUEwRTtJQUUxRSxNQUFNLFFBQVEsR0FDWixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVqRSxPQUFPLFFBQVEsS0FBSyxLQUFLLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxlQUFlLENBQUMsSUFBMkI7SUFDbEQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUN0QyxPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVk7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQ3BDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQjtRQUM1QyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FDcEMsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsMkJBQTJCLEVBQzNCLGVBQWUsR0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcclxuXHJcbi8qKiBSYXcgYXNzZXJ0aW9uIG9wZXJhbmRzIGV4dHJhY3RlZCBmcm9tIGEgY2FsbCBleHByZXNzaW9uLiAqL1xyXG5pbnRlcmZhY2UgQXNzZXJ0aW9uT3BlcmFuZHMge1xyXG4gIC8qKiBFeHByZXNzaW9uIHVzZWQgYXMgdGhlIGFjdHVhbCBvcGVyYW5kLiAqL1xyXG4gIGFjdHVhbDogRVNUcmVlLkV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XHJcbiAgLyoqIEV4cHJlc3Npb24gdXNlZCBhcyB0aGUgZXhwZWN0ZWQgb3BlcmFuZC4gKi9cclxuICBleHBlY3RlZDogRVNUcmVlLkV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIGFzc2VydCBvcGVyYW5kcy5cclxuICogQHBhcmFtIGV4cHJlc3Npb24gSW5wdXQgZXhwcmVzc2lvbiB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRBc3NlcnRPcGVyYW5kcyhleHByZXNzaW9uKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBc3NlcnRPcGVyYW5kcyhcclxuICBleHByZXNzaW9uOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb24sXHJcbik6IEFzc2VydGlvbk9wZXJhbmRzIHwgdW5kZWZpbmVkIHtcclxuICBpZiAoXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJlxyXG4gICAgZXhwcmVzc2lvbi5jYWxsZWUub2JqZWN0LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS5vYmplY3QubmFtZSA9PT0gXCJhc3NlcnRcIlxyXG4gICkge1xyXG4gICAgY29uc3QgW2FjdHVhbCwgZXhwZWN0ZWRdID0gZXhwcmVzc2lvbi5hcmd1bWVudHM7XHJcbiAgICBpZiAoXHJcbiAgICAgIGFjdHVhbD8udHlwZSAhPT0gXCJTcHJlYWRFbGVtZW50XCIgJiZcclxuICAgICAgZXhwZWN0ZWQ/LnR5cGUgIT09IFwiU3ByZWFkRWxlbWVudFwiXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHsgYWN0dWFsLCBleHBlY3RlZCB9O1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdm9pZCAwO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyBleHBlY3Qgb3BlcmFuZHMuXHJcbiAqIEBwYXJhbSBleHByZXNzaW9uIElucHV0IGV4cHJlc3Npb24gdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogZ2V0RXhwZWN0T3BlcmFuZHMoZXhwcmVzc2lvbik7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0RXhwZWN0T3BlcmFuZHMoXHJcbiAgZXhwcmVzc2lvbjogRVNUcmVlLkNhbGxFeHByZXNzaW9uLFxyXG4pOiBBc3NlcnRpb25PcGVyYW5kcyB8IHVuZGVmaW5lZCB7XHJcbiAgaWYgKFxyXG4gICAgZXhwcmVzc2lvbi5jYWxsZWUudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcclxuICAgIGV4cHJlc3Npb24uY2FsbGVlLm5hbWUgPT09IFwiZXhwZWN0XCJcclxuICApIHtcclxuICAgIGNvbnN0IFthY3R1YWxdID0gZXhwcmVzc2lvbi5hcmd1bWVudHM7XHJcbiAgICByZXR1cm4gYWN0dWFsPy50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIlxyXG4gICAgICA/IHsgYWN0dWFsOiB2b2lkIDAsIGV4cGVjdGVkOiB2b2lkIDAgfVxyXG4gICAgICA6IHsgYWN0dWFsLCBleHBlY3RlZDogdm9pZCAwIH07XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJlxyXG4gICAgZXhwcmVzc2lvbi5jYWxsZWUub2JqZWN0LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIlxyXG4gICkge1xyXG4gICAgY29uc3QgbmVzdGVkT3BlcmFuZHMgPSBnZXRFeHBlY3RPcGVyYW5kcyhleHByZXNzaW9uLmNhbGxlZS5vYmplY3QpO1xyXG4gICAgaWYgKG5lc3RlZE9wZXJhbmRzID09PSB2b2lkIDApIHtcclxuICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBbZXhwZWN0ZWRdID0gZXhwcmVzc2lvbi5hcmd1bWVudHM7XHJcblxyXG4gICAgcmV0dXJuIGV4cGVjdGVkPy50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIlxyXG4gICAgICA/IG5lc3RlZE9wZXJhbmRzXHJcbiAgICAgIDogeyBhY3R1YWw6IG5lc3RlZE9wZXJhbmRzLmFjdHVhbCwgZXhwZWN0ZWQgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiB2b2lkIDA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIGFuIGlkZW50aWZpZXIgbmFtZS5cclxuICogQHBhcmFtIGV4cHJlc3Npb24gSW5wdXQgZXhwcmVzc2lvbiB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRJZGVudGlmaWVyTmFtZShleHByZXNzaW9uKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRJZGVudGlmaWVyTmFtZShcclxuICBleHByZXNzaW9uOiBFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCxcclxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gZXhwcmVzc2lvbj8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgPyBleHByZXNzaW9uLm5hbWUgOiB2b2lkIDA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBhbiBhc3NlcnRpb24gZXZhbHVhdGVzIHRoZSBhY3R1YWwgb3BlcmFuZCBpbmxpbmUuXHJcbiAqIEBwYXJhbSBleHByZXNzaW9uIEFzc2VydGlvbiBjYWxsIGV4cHJlc3Npb24gdG8gaW5zcGVjdC5cclxuICogQHBhcmFtIGlzQWN0aW9uRXhwcmVzc2lvbiBQcmVkaWNhdGUgdGhhdCBpZGVudGlmaWVzIGFjdGlvbi1saWtlIGV4cHJlc3Npb25zLlxyXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGFzc2VydGlvbiBhY3R1YWwgb3BlcmFuZCBwZXJmb3JtcyBhY3Rpb24tbGlrZSB3b3JrLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGFjdHVhbCA9IGhhc0V2YWx1YXRlZEFzc2VydGlvbkFjdHVhbChleHByZXNzaW9uLCAoKSA9PiB0cnVlKTtcclxuICogdm9pZCBhY3R1YWw7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaGFzRXZhbHVhdGVkQXNzZXJ0aW9uQWN0dWFsKFxyXG4gIGV4cHJlc3Npb246IEVTVHJlZS5DYWxsRXhwcmVzc2lvbixcclxuICBpc0FjdGlvbkV4cHJlc3Npb246IChleHByZXNzaW9uOiBFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbixcclxuKTogYm9vbGVhbiB7XHJcbiAgY29uc3Qgb3BlcmFuZHMgPVxyXG4gICAgZ2V0RXhwZWN0T3BlcmFuZHMoZXhwcmVzc2lvbikgPz8gZ2V0QXNzZXJ0T3BlcmFuZHMoZXhwcmVzc2lvbik7XHJcblxyXG4gIHJldHVybiBvcGVyYW5kcyAhPT0gdm9pZCAwICYmIGlzQWN0aW9uRXhwcmVzc2lvbihvcGVyYW5kcy5hY3R1YWwpO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBhc3NlcnRpb24gY2FsbHMuXHJcbiAqIEBwYXJhbSBub2RlIElucHV0IG5vZGUgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaXNBc3NlcnRpb25DYWxsKG5vZGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzQXNzZXJ0aW9uQ2FsbChub2RlOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb24pOiBib29sZWFuIHtcclxuICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09IFwiZXhwZWN0XCIgfHxcclxuICAgICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gXCJhc3NlcnRcIiB8fFxyXG4gICAgICBub2RlLmNhbGxlZS5uYW1lID09PSBcImFzc2VydFR5cGVcIiB8fFxyXG4gICAgICBub2RlLmNhbGxlZS5uYW1lID09PSBcImV4cGVjdFR5cGVPZlwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgIT09IFwiTWVtYmVyRXhwcmVzc2lvblwiKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICBub2RlLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcclxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC5uYW1lID09PSBcImFzc2VydFwiXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBub2RlLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gXCJDYWxsRXhwcmVzc2lvblwiICYmXHJcbiAgICBpc0Fzc2VydGlvbkNhbGwobm9kZS5jYWxsZWUub2JqZWN0KVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgZ2V0QXNzZXJ0T3BlcmFuZHMsXHJcbiAgZ2V0RXhwZWN0T3BlcmFuZHMsXHJcbiAgZ2V0SWRlbnRpZmllck5hbWUsXHJcbiAgaGFzRXZhbHVhdGVkQXNzZXJ0aW9uQWN0dWFsLFxyXG4gIGlzQXNzZXJ0aW9uQ2FsbCxcclxufTtcclxuIl19
@@ -1,75 +1,2 @@
1
- import type * as ESTree from "estree";
2
- import type { SourceComment } from "./types.js";
3
- /**
4
- * Checks for async logic.
5
- * @param statement Input statement value.
6
- * @returns Return value output.
7
- * @example
8
- * ```typescript
9
- * hasAsyncLogic(statement);
10
- * ```
11
- */
12
- declare function hasAsyncLogic(statement: ESTree.Statement): boolean;
13
- /**
14
- * Checks for await usage.
15
- * @param statement Input statement value.
16
- * @returns Return value output.
17
- * @example
18
- * ```typescript
19
- * hasAwait(statement);
20
- * ```
21
- */
22
- declare function hasAwait(statement: ESTree.Statement): boolean;
23
- /**
24
- * Checks for blank lines before comments.
25
- * @param sourceText Input sourceText value.
26
- * @param comment Input comment value.
27
- * @returns Return value output.
28
- * @example
29
- * ```typescript
30
- * hasBlankLineBeforeComment(sourceText, comment);
31
- * ```
32
- */
33
- declare function hasBlankLineBeforeComment(sourceText: string, comment: SourceComment): boolean;
34
- /**
35
- * Checks for capturable Act results.
36
- * @param statement Input statement value.
37
- * @returns Return value output.
38
- * @example
39
- * ```typescript
40
- * hasCapturableActResult(statement);
41
- * ```
42
- */
43
- declare function hasCapturableActResult(statement: ESTree.Statement): boolean;
44
- /**
45
- * Checks for mutation.
46
- * @param statement Input statement value.
47
- * @returns Return value output.
48
- * @example
49
- * ```typescript
50
- * hasMutation(statement);
51
- * ```
52
- */
53
- declare function hasMutation(statement: ESTree.Statement): boolean;
54
- /**
55
- * Checks for meaningful Act statements.
56
- * @param statement Input statement value.
57
- * @returns Return value output.
58
- * @example
59
- * ```typescript
60
- * isMeaningfulActStatement(statement);
61
- * ```
62
- */
63
- declare function isMeaningfulActStatement(statement: ESTree.Statement): boolean;
64
- /**
65
- * Checks for setup-like statements.
66
- * @param statement Input statement value.
67
- * @returns Return value output.
68
- * @example
69
- * ```typescript
70
- * isSetupLikeStatement(statement);
71
- * ```
72
- */
73
- declare function isSetupLikeStatement(statement: ESTree.Statement): boolean;
74
- export { hasAsyncLogic, hasAwait, hasBlankLineBeforeComment, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, };
1
+ export {};
75
2
  //# sourceMappingURL=analyzer.classification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.classification.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.classification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAsB7C;;;;;;;;GAQG;AACH,iBAAS,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CA4B3D;AAED;;;;;;;;GAQG;AACH,iBAAS,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAUtD;AAED;;;;;;;;;GASG;AACH,iBAAS,yBAAyB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAST;AAED;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAmBpE;AAED;;;;;;;;GAQG;AACH,iBAAS,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CA2BzD;AAED;;;;;;;;GAQG;AACH,iBAAS,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAWtE;AAwBD;;;;;;;;GAQG;AACH,iBAAS,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAgBlE;AAgCD,OAAO,EACL,aAAa,EACb,QAAQ,EACR,yBAAyB,EACzB,sBAAsB,EACtB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,GACrB,CAAC"}
1
+ {"version":3,"file":"analyzer.classification.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.classification.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import type * as ESTree from "estree";
2
+ import type { SourceComment } from "./types.js";
3
+ /**
4
+ * Checks for async logic.
5
+ * @param statement Input statement value.
6
+ * @returns Return value output.
7
+ * @example
8
+ * ```typescript
9
+ * hasAsyncLogic(statement);
10
+ * ```
11
+ */
12
+ declare function hasAsyncLogic(statement: ESTree.Statement): boolean;
13
+ /**
14
+ * Checks for await usage.
15
+ * @param statement Input statement value.
16
+ * @returns Return value output.
17
+ * @example
18
+ * ```typescript
19
+ * hasAwait(statement);
20
+ * ```
21
+ */
22
+ declare function hasAwait(statement: ESTree.Statement): boolean;
23
+ /**
24
+ * Checks for blank lines before comments.
25
+ * @param sourceText Input sourceText value.
26
+ * @param comment Input comment value.
27
+ * @returns Return value output.
28
+ * @example
29
+ * ```typescript
30
+ * hasBlankLineBeforeComment(sourceText, comment);
31
+ * ```
32
+ */
33
+ declare function hasBlankLineBeforeComment(sourceText: string, comment: SourceComment): boolean;
34
+ /**
35
+ * Checks for capturable Act results.
36
+ * @param statement Input statement value.
37
+ * @returns Return value output.
38
+ * @example
39
+ * ```typescript
40
+ * hasCapturableActResult(statement);
41
+ * ```
42
+ */
43
+ declare function hasCapturableActResult(statement: ESTree.Statement): boolean;
44
+ /**
45
+ * Checks for mutation.
46
+ * @param statement Input statement value.
47
+ * @returns Return value output.
48
+ * @example
49
+ * ```typescript
50
+ * hasMutation(statement);
51
+ * ```
52
+ */
53
+ declare function hasMutation(statement: ESTree.Statement): boolean;
54
+ /**
55
+ * Checks for meaningful Act statements.
56
+ * @param statement Input statement value.
57
+ * @returns Return value output.
58
+ * @example
59
+ * ```typescript
60
+ * isMeaningfulActStatement(statement);
61
+ * ```
62
+ */
63
+ declare function isMeaningfulActStatement(statement: ESTree.Statement): boolean;
64
+ /**
65
+ * Checks for setup-like statements.
66
+ * @param statement Input statement value.
67
+ * @returns Return value output.
68
+ * @example
69
+ * ```typescript
70
+ * isSetupLikeStatement(statement);
71
+ * ```
72
+ */
73
+ declare function isSetupLikeStatement(statement: ESTree.Statement): boolean;
74
+ export { hasAsyncLogic, hasAwait, hasBlankLineBeforeComment, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, };
75
+ //# sourceMappingURL=analyzer.classification.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.classification.helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/aaa/analyzer.classification.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAuB7C;;;;;;;;GAQG;AACH,iBAAS,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAwB3D;AAED;;;;;;;;GAQG;AACH,iBAAS,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAQtD;AAED;;;;;;;;;GASG;AACH,iBAAS,yBAAyB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,GACrB,OAAO,CAOT;AAED;;;;;;;;GAQG;AACH,iBAAS,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAepE;AAED;;;;;;;;GAQG;AACH,iBAAS,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAuBzD;AAED;;;;;;;;GAQG;AACH,iBAAS,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAUtE;AAwBD;;;;;;;;GAQG;AACH,iBAAS,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAYlE;AA8BD,OAAO,EACL,aAAa,EACb,QAAQ,EACR,yBAAyB,EACzB,sBAAsB,EACtB,WAAW,EACX,wBAAwB,EACxB,oBAAoB,GACrB,CAAC"}
@@ -0,0 +1,202 @@
1
+ import { getStatementExpression, hasAssertion, isActionExpression, unwrapExpression, } from "./analyzer.assertions.helpers.js";
2
+ import { visitStatementWithoutDeferredBodies } from "./analyzer.classification.traversal.js";
3
+ import { arrayMutationMethods, getExpressionName, getInvokedName, isCallableExpression, isLocatedComment, isUtilityConstructor, isUtilityNamedCall, isUtilityNamespaceCall, isVoidLikeMethodName, voidLikeMethodNames, } from "./analyzer.super.js";
4
+ import { visitNode } from "./analyzer.super.helpers.js";
5
+ /**
6
+ * Checks for async logic.
7
+ * @param statement Input statement value.
8
+ * @returns Return value output.
9
+ * @example
10
+ * ```typescript
11
+ * hasAsyncLogic(statement);
12
+ * ```
13
+ */
14
+ function hasAsyncLogic(statement) {
15
+ let foundAsyncLogic = false;
16
+ visitStatementWithoutDeferredBodies(statement, (node) => {
17
+ if (node.type === "AwaitExpression") {
18
+ foundAsyncLogic = true;
19
+ return;
20
+ }
21
+ if (node.type === "CallExpression" &&
22
+ node.callee.type === "MemberExpression" &&
23
+ node.callee.property.type === "Identifier" &&
24
+ ["catch", "finally", "then"].includes(node.callee.property.name)) {
25
+ foundAsyncLogic = true;
26
+ return;
27
+ }
28
+ if (node.type === "NewExpression" &&
29
+ getExpressionName(node.callee) === "Promise") {
30
+ foundAsyncLogic = true;
31
+ }
32
+ });
33
+ return foundAsyncLogic;
34
+ }
35
+ /**
36
+ * Checks for await usage.
37
+ * @param statement Input statement value.
38
+ * @returns Return value output.
39
+ * @example
40
+ * ```typescript
41
+ * hasAwait(statement);
42
+ * ```
43
+ */
44
+ function hasAwait(statement) {
45
+ let foundAwait = false;
46
+ visitStatementWithoutDeferredBodies(statement, (node) => {
47
+ if (node.type === "AwaitExpression") {
48
+ foundAwait = true;
49
+ }
50
+ });
51
+ return foundAwait;
52
+ }
53
+ /**
54
+ * Checks for blank lines before comments.
55
+ * @param sourceText Input sourceText value.
56
+ * @param comment Input comment value.
57
+ * @returns Return value output.
58
+ * @example
59
+ * ```typescript
60
+ * hasBlankLineBeforeComment(sourceText, comment);
61
+ * ```
62
+ */
63
+ function hasBlankLineBeforeComment(sourceText, comment) {
64
+ if (!isLocatedComment(comment)) {
65
+ return true;
66
+ }
67
+ const lines = sourceText.split(/\r\n|\n/u);
68
+ const previousLine = lines[comment.loc.start.line - 2];
69
+ return previousLine === void 0 || previousLine.trim().length === 0;
70
+ }
71
+ /**
72
+ * Checks for capturable Act results.
73
+ * @param statement Input statement value.
74
+ * @returns Return value output.
75
+ * @example
76
+ * ```typescript
77
+ * hasCapturableActResult(statement);
78
+ * ```
79
+ */
80
+ function hasCapturableActResult(statement) {
81
+ if (statement.type !== "ExpressionStatement") {
82
+ return false;
83
+ }
84
+ const expression = unwrapExpression(statement.expression);
85
+ if (!isActionExpression(expression) || isUtilityLikeExpression(expression)) {
86
+ return false;
87
+ }
88
+ const calleeName = getInvokedName(expression);
89
+ return (calleeName === void 0 ||
90
+ (!voidLikeMethodNames.has(calleeName) && !isVoidLikeMethodName(calleeName)));
91
+ }
92
+ /**
93
+ * Checks for mutation.
94
+ * @param statement Input statement value.
95
+ * @returns Return value output.
96
+ * @example
97
+ * ```typescript
98
+ * hasMutation(statement);
99
+ * ```
100
+ */
101
+ function hasMutation(statement) {
102
+ let foundMutation = false;
103
+ visitNode(statement, (node) => {
104
+ if (node.type === "AssignmentExpression" ||
105
+ node.type === "UpdateExpression" ||
106
+ node.type === "UnaryExpression") {
107
+ if (node.type !== "UnaryExpression" || node.operator === "delete") {
108
+ foundMutation = true;
109
+ }
110
+ return;
111
+ }
112
+ if (node.type === "CallExpression" &&
113
+ node.callee.type === "MemberExpression" &&
114
+ node.callee.property.type === "Identifier" &&
115
+ arrayMutationMethods.has(node.callee.property.name)) {
116
+ foundMutation = true;
117
+ }
118
+ });
119
+ return foundMutation;
120
+ }
121
+ /**
122
+ * Checks for meaningful Act statements.
123
+ * @param statement Input statement value.
124
+ * @returns Return value output.
125
+ * @example
126
+ * ```typescript
127
+ * isMeaningfulActStatement(statement);
128
+ * ```
129
+ */
130
+ function isMeaningfulActStatement(statement) {
131
+ const expression = getStatementExpression(statement);
132
+ if (expression === void 0) {
133
+ return false;
134
+ }
135
+ return (isActionExpression(expression) &&
136
+ !isUtilityLikeExpression(expression) &&
137
+ !hasAssertion(statement));
138
+ }
139
+ /**
140
+ * Checks for rule create calls.
141
+ * @param expression Input expression value.
142
+ * @returns Return value output.
143
+ * @example
144
+ * ```typescript
145
+ * isRuleCreateInvocation(expression);
146
+ * ```
147
+ */
148
+ function isRuleCreateInvocation(expression) {
149
+ return (expression.type === "CallExpression" &&
150
+ expression.callee.type === "MemberExpression" &&
151
+ expression.callee.object.type === "Identifier" &&
152
+ expression.callee.property.type === "Identifier" &&
153
+ expression.callee.property.name === "create" &&
154
+ expression.callee.object.name.endsWith("Rule"));
155
+ }
156
+ /**
157
+ * Checks for setup-like statements.
158
+ * @param statement Input statement value.
159
+ * @returns Return value output.
160
+ * @example
161
+ * ```typescript
162
+ * isSetupLikeStatement(statement);
163
+ * ```
164
+ */
165
+ function isSetupLikeStatement(statement) {
166
+ if (statement.type === "VariableDeclaration") {
167
+ return statement.declarations.every((declaration) => {
168
+ if (declaration.init === null) {
169
+ return true;
170
+ }
171
+ const init = unwrapExpression(declaration.init);
172
+ return !isActionExpression(init) || isUtilityLikeExpression(init);
173
+ });
174
+ }
175
+ const expression = getStatementExpression(statement);
176
+ return expression !== void 0 && isUtilityLikeExpression(expression);
177
+ }
178
+ /**
179
+ * Checks for utility-like expressions.
180
+ * @param expression Input expression value.
181
+ * @returns Return value output.
182
+ * @example
183
+ * ```typescript
184
+ * isUtilityLikeExpression(expression);
185
+ * ```
186
+ */
187
+ function isUtilityLikeExpression(expression) {
188
+ const unwrappedExpression = unwrapExpression(expression);
189
+ if (!isCallableExpression(unwrappedExpression)) {
190
+ return false;
191
+ }
192
+ const calleeName = getExpressionName(unwrappedExpression.callee);
193
+ if (calleeName === void 0) {
194
+ return false;
195
+ }
196
+ return (!isRuleCreateInvocation(unwrappedExpression) &&
197
+ (isUtilityConstructor(unwrappedExpression, calleeName) ||
198
+ isUtilityNamedCall(calleeName) ||
199
+ isUtilityNamespaceCall(unwrappedExpression)));
200
+ }
201
+ export { hasAsyncLogic, hasAwait, hasBlankLineBeforeComment, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, };
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24uaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9hYWEvYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24uaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsZ0JBQWdCLEdBQ2pCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUYsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLG1CQUFtQixHQUNwQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsYUFBYSxDQUFDLFNBQTJCO0lBQ2hELElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztJQUM1QixtQ0FBbUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN0RCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztZQUNwQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQjtZQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxrQkFBa0I7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFlBQVk7WUFDMUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxD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QW9CLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDO1lBQ3BELGtCQUFrQixDQUFDLFVBQVUsQ0FBQztZQUM5QixzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQy9DLENBQUM7QUFDSixDQUFDO0FBRUQsT0FBTyxFQUNMLGFBQWEsRUFDYixRQUFRLEVBQ1IseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsd0JBQXdCLEVBQ3hCLG9CQUFvQixHQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBTb3VyY2VDb21tZW50IH0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0U3RhdGVtZW50RXhwcmVzc2lvbixcclxuICBoYXNBc3NlcnRpb24sXHJcbiAgaXNBY3Rpb25FeHByZXNzaW9uLFxyXG4gIHVud3JhcEV4cHJlc3Npb24sXHJcbn0gZnJvbSBcIi4vYW5hbHl6ZXIuYXNzZXJ0aW9ucy5oZWxwZXJzXCI7XHJcbmltcG9ydCB7IHZpc2l0U3RhdGVtZW50V2l0aG91dERlZmVycmVkQm9kaWVzIH0gZnJvbSBcIi4vYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24udHJhdmVyc2FsXCI7XHJcbmltcG9ydCB7XHJcbiAgYXJyYXlNdXRhdGlvbk1ldGhvZHMsXHJcbiAgZ2V0RXhwcmVzc2lvbk5hbWUsXHJcbiAgZ2V0SW52b2tlZE5hbWUsXHJcbiAgaXNDYWxsYWJsZUV4cHJlc3Npb24sXHJcbiAgaXNMb2NhdGVkQ29tbWVudCxcclxuICBpc1V0aWxpdHlDb25zdHJ1Y3RvcixcclxuICBpc1V0aWxpdHlOYW1lZENhbGwsXHJcbiAgaXNVdGlsaXR5TmFtZXNwYWNlQ2FsbCxcclxuICBpc1ZvaWRMaWtlTWV0aG9kTmFtZSxcclxuICB2b2lkTGlrZU1ldGhvZE5hbWVzLFxyXG59IGZyb20gXCIuL2FuYWx5emVyLnN1cGVyXCI7XHJcbmltcG9ydCB7IHZpc2l0Tm9kZSB9IGZyb20gXCIuL2FuYWx5emVyLnN1cGVyLmhlbHBlcnNcIjtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIGFzeW5jIGxvZ2ljLlxyXG4gKiBAcGFyYW0gc3RhdGVtZW50IElucHV0IHN0YXRlbWVudCB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBoYXNBc3luY0xvZ2ljKHN0YXRlbWVudCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaGFzQXN5bmNMb2dpYyhzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQpOiBib29sZWFuIHtcclxuICBsZXQgZm91bmRBc3luY0xvZ2ljID0gZmFsc2U7XHJcbiAgdmlzaXRTdGF0ZW1lbnRXaXRob3V0RGVmZXJyZWRCb2RpZXMoc3RhdGVtZW50LCAobm9kZSkgPT4ge1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gXCJBd2FpdEV4cHJlc3Npb25cIikge1xyXG4gICAgICBmb3VuZEFzeW5jTG9naWMgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIG5vZGUudHlwZSA9PT0gXCJDYWxsRXhwcmVzc2lvblwiICYmXHJcbiAgICAgIG5vZGUuY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXHJcbiAgICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXHJcbiAgICAgIFtcImNhdGNoXCIsIFwiZmluYWxseVwiLCBcInRoZW5cIl0uaW5jbHVkZXMobm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSlcclxuICAgICkge1xyXG4gICAgICBmb3VuZEFzeW5jTG9naWMgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIG5vZGUudHlwZSA9PT0gXCJOZXdFeHByZXNzaW9uXCIgJiZcclxuICAgICAgZ2V0RXhwcmVzc2lvbk5hbWUobm9kZS5jYWxsZWUpID09PSBcIlByb21pc2VcIlxyXG4gICAgKSB7XHJcbiAgICAgIGZvdW5kQXN5bmNMb2dpYyA9IHRydWU7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGZvdW5kQXN5bmNMb2dpYztcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgYXdhaXQgdXNhZ2UuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW5wdXQgc3RhdGVtZW50IHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGhhc0F3YWl0KHN0YXRlbWVudCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaGFzQXdhaXQoc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XHJcbiAgbGV0IGZvdW5kQXdhaXQgPSBmYWxzZTtcclxuICB2aXNpdFN0YXRlbWVudFdpdGhvdXREZWZlcnJlZEJvZGllcyhzdGF0ZW1lbnQsIChub2RlKSA9PiB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSBcIkF3YWl0RXhwcmVzc2lvblwiKSB7XHJcbiAgICAgIGZvdW5kQXdhaXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiBmb3VuZEF3YWl0O1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBibGFuayBsaW5lcyBiZWZvcmUgY29tbWVudHMuXHJcbiAqIEBwYXJhbSBzb3VyY2VUZXh0IElucHV0IHNvdXJjZVRleHQgdmFsdWUuXHJcbiAqIEBwYXJhbSBjb21tZW50IElucHV0IGNvbW1lbnQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudChzb3VyY2VUZXh0LCBjb21tZW50KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNCbGFua0xpbmVCZWZvcmVDb21tZW50KFxyXG4gIHNvdXJjZVRleHQ6IHN0cmluZyxcclxuICBjb21tZW50OiBTb3VyY2VDb21tZW50LFxyXG4pOiBib29sZWFuIHtcclxuICBpZiAoIWlzTG9jYXRlZENvbW1lbnQoY29tbWVudCkpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBjb25zdCBsaW5lcyA9IHNvdXJjZVRleHQuc3BsaXQoL1xcclxcbnxcXG4vdSk7XHJcbiAgY29uc3QgcHJldmlvdXNMaW5lID0gbGluZXNbY29tbWVudC5sb2Muc3RhcnQubGluZSAtIDJdO1xyXG4gIHJldHVybiBwcmV2aW91c0xpbmUgPT09IHZvaWQgMCB8fCBwcmV2aW91c0xpbmUudHJpbSgpLmxlbmd0aCA9PT0gMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgY2FwdHVyYWJsZSBBY3QgcmVzdWx0cy5cclxuICogQHBhcmFtIHN0YXRlbWVudCBJbnB1dCBzdGF0ZW1lbnQgdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdChzdGF0ZW1lbnQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGhhc0NhcHR1cmFibGVBY3RSZXN1bHQoc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XHJcbiAgaWYgKHN0YXRlbWVudC50eXBlICE9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBjb25zdCBleHByZXNzaW9uID0gdW53cmFwRXhwcmVzc2lvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbik7XHJcbiAgaWYgKCFpc0FjdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikgfHwgaXNVdGlsaXR5TGlrZUV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgY29uc3QgY2FsbGVlTmFtZSA9IGdldEludm9rZWROYW1lKFxyXG4gICAgZXhwcmVzc2lvbiBhcyBFU1RyZWUuQ2FsbEV4cHJlc3Npb24gfCBFU1RyZWUuTmV3RXhwcmVzc2lvbixcclxuICApO1xyXG4gIHJldHVybiAoXHJcbiAgICBjYWxsZWVOYW1lID09PSB2b2lkIDAgfHxcclxuICAgICghdm9pZExpa2VNZXRob2ROYW1lcy5oYXMoY2FsbGVlTmFtZSkgJiYgIWlzVm9pZExpa2VNZXRob2ROYW1lKGNhbGxlZU5hbWUpKVxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgZm9yIG11dGF0aW9uLlxyXG4gKiBAcGFyYW0gc3RhdGVtZW50IElucHV0IHN0YXRlbWVudCB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBoYXNNdXRhdGlvbihzdGF0ZW1lbnQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGhhc011dGF0aW9uKHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCk6IGJvb2xlYW4ge1xyXG4gIGxldCBmb3VuZE11dGF0aW9uID0gZmFsc2U7XHJcbiAgdmlzaXROb2RlKHN0YXRlbWVudCwgKG5vZGUpID0+IHtcclxuICAgIGlmIChcclxuICAgICAgbm9kZS50eXBlID09PSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgfHxcclxuICAgICAgbm9kZS50eXBlID09PSBcIlVwZGF0ZUV4cHJlc3Npb25cIiB8fFxyXG4gICAgICBub2RlLnR5cGUgPT09IFwiVW5hcnlFeHByZXNzaW9uXCJcclxuICAgICkge1xyXG4gICAgICBpZiAobm9kZS50eXBlICE9PSBcIlVuYXJ5RXhwcmVzc2lvblwiIHx8IG5vZGUub3BlcmF0b3IgPT09IFwiZGVsZXRlXCIpIHtcclxuICAgICAgICBmb3VuZE11dGF0aW9uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIG5vZGUudHlwZSA9PT0gXCJDYWxsRXhwcmVzc2lvblwiICYmXHJcbiAgICAgIG5vZGUuY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXHJcbiAgICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXHJcbiAgICAgIGFycmF5TXV0YXRpb25NZXRob2RzLmhhcyhub2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lKVxyXG4gICAgKSB7XHJcbiAgICAgIGZvdW5kTXV0YXRpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiBmb3VuZE11dGF0aW9uO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBtZWFuaW5nZnVsIEFjdCBzdGF0ZW1lbnRzLlxyXG4gKiBAcGFyYW0gc3RhdGVtZW50IElucHV0IHN0YXRlbWVudCB2YWx1ZS5cclxuICogQHJldHVybnMgUmV0dXJuIHZhbHVlIG91dHB1dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpc01lYW5pbmdmdWxBY3RTdGF0ZW1lbnQoc3RhdGVtZW50KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc01lYW5pbmdmdWxBY3RTdGF0ZW1lbnQoc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XHJcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGdldFN0YXRlbWVudEV4cHJlc3Npb24oc3RhdGVtZW50KTtcclxuICBpZiAoZXhwcmVzc2lvbiA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHJldHVybiAoXHJcbiAgICBpc0FjdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikgJiZcclxuICAgICFpc1V0aWxpdHlMaWtlRXhwcmVzc2lvbihleHByZXNzaW9uKSAmJlxyXG4gICAgIWhhc0Fzc2VydGlvbihzdGF0ZW1lbnQpXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgcnVsZSBjcmVhdGUgY2FsbHMuXHJcbiAqIEBwYXJhbSBleHByZXNzaW9uIElucHV0IGV4cHJlc3Npb24gdmFsdWUuXHJcbiAqIEByZXR1cm5zIFJldHVybiB2YWx1ZSBvdXRwdXQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaXNSdWxlQ3JlYXRlSW52b2NhdGlvbihleHByZXNzaW9uKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1J1bGVDcmVhdGVJbnZvY2F0aW9uKFxyXG4gIGV4cHJlc3Npb246IEVTVHJlZS5DYWxsRXhwcmVzc2lvbiB8IEVTVHJlZS5OZXdFeHByZXNzaW9uLFxyXG4pOiBib29sZWFuIHtcclxuICByZXR1cm4gKFxyXG4gICAgZXhwcmVzc2lvbi50eXBlID09PSBcIkNhbGxFeHByZXNzaW9uXCIgJiZcclxuICAgIGV4cHJlc3Npb24uY2FsbGVlLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS5vYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcclxuICAgIGV4cHJlc3Npb24uY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS5wcm9wZXJ0eS5uYW1lID09PSBcImNyZWF0ZVwiICYmXHJcbiAgICBleHByZXNzaW9uLmNhbGxlZS5vYmplY3QubmFtZS5lbmRzV2l0aChcIlJ1bGVcIilcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGZvciBzZXR1cC1saWtlIHN0YXRlbWVudHMuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW5wdXQgc3RhdGVtZW50IHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGlzU2V0dXBMaWtlU3RhdGVtZW50KHN0YXRlbWVudCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNTZXR1cExpa2VTdGF0ZW1lbnQoc3RhdGVtZW50OiBFU1RyZWUuU3RhdGVtZW50KTogYm9vbGVhbiB7XHJcbiAgaWYgKHN0YXRlbWVudC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xyXG4gICAgcmV0dXJuIHN0YXRlbWVudC5kZWNsYXJhdGlvbnMuZXZlcnkoKGRlY2xhcmF0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChkZWNsYXJhdGlvbi5pbml0ID09PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5pdCA9IHVud3JhcEV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdCk7XHJcbiAgICAgIHJldHVybiAhaXNBY3Rpb25FeHByZXNzaW9uKGluaXQpIHx8IGlzVXRpbGl0eUxpa2VFeHByZXNzaW9uKGluaXQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBnZXRTdGF0ZW1lbnRFeHByZXNzaW9uKHN0YXRlbWVudCk7XHJcbiAgcmV0dXJuIGV4cHJlc3Npb24gIT09IHZvaWQgMCAmJiBpc1V0aWxpdHlMaWtlRXhwcmVzc2lvbihleHByZXNzaW9uKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBmb3IgdXRpbGl0eS1saWtlIGV4cHJlc3Npb25zLlxyXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBJbnB1dCBleHByZXNzaW9uIHZhbHVlLlxyXG4gKiBAcmV0dXJucyBSZXR1cm4gdmFsdWUgb3V0cHV0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGlzVXRpbGl0eUxpa2VFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzVXRpbGl0eUxpa2VFeHByZXNzaW9uKFxyXG4gIGV4cHJlc3Npb246IEVTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkLFxyXG4pOiBib29sZWFuIHtcclxuICBjb25zdCB1bndyYXBwZWRFeHByZXNzaW9uID0gdW53cmFwRXhwcmVzc2lvbihleHByZXNzaW9uKTtcclxuICBpZiAoIWlzQ2FsbGFibGVFeHByZXNzaW9uKHVud3JhcHBlZEV4cHJlc3Npb24pKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGNvbnN0IGNhbGxlZU5hbWUgPSBnZXRFeHByZXNzaW9uTmFtZSh1bndyYXBwZWRFeHByZXNzaW9uLmNhbGxlZSk7XHJcbiAgaWYgKGNhbGxlZU5hbWUgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICByZXR1cm4gKFxyXG4gICAgIWlzUnVsZUNyZWF0ZUludm9jYXRpb24odW53cmFwcGVkRXhwcmVzc2lvbikgJiZcclxuICAgIChpc1V0aWxpdHlDb25zdHJ1Y3Rvcih1bndyYXBwZWRFeHByZXNzaW9uLCBjYWxsZWVOYW1lKSB8fFxyXG4gICAgICBpc1V0aWxpdHlOYW1lZENhbGwoY2FsbGVlTmFtZSkgfHxcclxuICAgICAgaXNVdGlsaXR5TmFtZXNwYWNlQ2FsbCh1bndyYXBwZWRFeHByZXNzaW9uKSlcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIGhhc0FzeW5jTG9naWMsXHJcbiAgaGFzQXdhaXQsXHJcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCxcclxuICBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0LFxyXG4gIGhhc011dGF0aW9uLFxyXG4gIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudCxcclxuICBpc1NldHVwTGlrZVN0YXRlbWVudCxcclxufTtcclxuIl19