@codeperfect/eslint-plugin 1.0.0 → 2.0.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 (557) hide show
  1. package/README.md +26 -4
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{custom-rules.d.ts → application/custom-rules.d.ts} +3 -0
  4. package/dist/application/custom-rules.d.ts.map +1 -0
  5. package/dist/application/custom-rules.js +74 -0
  6. package/dist/application/index.d.ts +4 -0
  7. package/dist/application/index.d.ts.map +1 -0
  8. package/dist/application/index.js +3 -0
  9. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +56 -0
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -0
  12. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +149 -0
  13. package/dist/{architecture → domain/architecture}/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +4 -4
  14. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  15. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +98 -0
  16. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +45 -0
  17. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  18. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +64 -0
  19. package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +5 -4
  20. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  21. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +87 -0
  22. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  23. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +140 -0
  24. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +5 -0
  25. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  26. package/dist/domain/architecture/consistent-barrel-files/index.js +4 -0
  27. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  28. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +85 -0
  29. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +1 -1
  30. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  31. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +91 -0
  32. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +4 -6
  33. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  34. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +95 -0
  35. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  36. package/dist/domain/architecture/consistent-barrel-files/rule.js +43 -0
  37. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +4 -0
  38. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +1 -0
  39. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +4 -0
  40. package/dist/{architecture → domain/architecture}/consistent-barrel-files/test-helpers.d.ts +48 -48
  41. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  42. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +20 -0
  43. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +1 -0
  44. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +25 -0
  45. package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +235 -0
  46. package/dist/domain/architecture/consistent-barrel-files/types.d.ts +19 -0
  47. package/dist/domain/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  48. package/dist/domain/architecture/consistent-barrel-files/types.js +2 -0
  49. package/dist/{architecture → domain/architecture}/index.d.ts +1 -1
  50. package/dist/domain/architecture/index.d.ts.map +1 -0
  51. package/dist/domain/architecture/index.js +2 -0
  52. package/dist/{core → domain/core}/index.d.ts +2 -2
  53. package/dist/domain/core/index.d.ts.map +1 -0
  54. package/dist/domain/core/index.js +3 -0
  55. package/dist/domain/core/no-multiple-declarators/index.d.ts +2 -0
  56. package/dist/domain/core/no-multiple-declarators/index.d.ts.map +1 -0
  57. package/dist/domain/core/no-multiple-declarators/index.js +2 -0
  58. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +101 -0
  59. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +1 -0
  60. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +108 -0
  61. package/dist/{core → domain/core}/no-multiple-declarators/rule.d.ts +1 -0
  62. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -0
  63. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +35 -0
  64. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +1 -0
  65. package/dist/domain/core/no-multiple-declarators/rule.fixes.js +95 -0
  66. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +4 -0
  67. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +1 -0
  68. package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +4 -0
  69. package/dist/domain/core/no-multiple-declarators/rule.js +219 -0
  70. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +4 -0
  71. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +1 -0
  72. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +4 -0
  73. package/dist/domain/core/no-multiple-declarators/types.d.ts +77 -0
  74. package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -0
  75. package/dist/domain/core/no-multiple-declarators/types.js +38 -0
  76. package/dist/domain/core/prefer-interface-types/index.d.ts +2 -0
  77. package/dist/domain/core/prefer-interface-types/index.d.ts.map +1 -0
  78. package/dist/domain/core/prefer-interface-types/index.js +2 -0
  79. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -0
  80. package/dist/domain/core/prefer-interface-types/rule.js +145 -0
  81. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  82. package/dist/domain/core/prefer-interface-types/test-helpers.js +116 -0
  83. package/dist/{custom-rule-documentation.d.ts → domain/custom-rule-documentation.d.ts} +1 -1
  84. package/dist/domain/custom-rule-documentation.d.ts.map +1 -0
  85. package/dist/domain/custom-rule-documentation.js +35 -0
  86. package/dist/domain/docs/index.d.ts +4 -0
  87. package/dist/domain/docs/index.d.ts.map +1 -0
  88. package/dist/domain/docs/index.js +4 -0
  89. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  90. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  91. package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities.d.ts +1 -1
  92. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  93. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +146 -0
  94. package/dist/domain/docs/no-interface-member-docs/index.d.ts +2 -0
  95. package/dist/domain/docs/no-interface-member-docs/index.d.ts.map +1 -0
  96. package/dist/domain/docs/no-interface-member-docs/index.js +2 -0
  97. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-tags.d.ts +1 -1
  98. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  99. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +101 -0
  100. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-utilities.d.ts +1 -1
  101. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  102. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  103. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  104. package/dist/domain/docs/no-interface-member-docs/rule.js +168 -0
  105. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  106. package/dist/domain/docs/no-interface-member-docs/test-helpers.js +157 -0
  107. package/dist/{docs → domain/docs}/no-interface-member-docs/types.d.ts +2 -2
  108. package/dist/domain/docs/no-interface-member-docs/types.d.ts.map +1 -0
  109. package/dist/domain/docs/no-interface-member-docs/types.js +2 -0
  110. package/dist/domain/docs/require-example-language/create-fixer.d.ts +5 -0
  111. package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +1 -0
  112. package/dist/domain/docs/require-example-language/create-fixer.js +5 -0
  113. package/dist/domain/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  114. package/dist/domain/docs/require-example-language/empty-fence-fixes.js +169 -0
  115. package/dist/domain/docs/require-example-language/example-utilities.d.ts.map +1 -0
  116. package/dist/domain/docs/require-example-language/example-utilities.js +76 -0
  117. package/dist/{docs → domain/docs}/require-example-language/examples.d.ts +1 -1
  118. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -0
  119. package/dist/domain/docs/require-example-language/examples.js +181 -0
  120. package/dist/{docs → domain/docs}/require-example-language/fixes.d.ts +2 -2
  121. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -0
  122. package/dist/domain/docs/require-example-language/fixes.js +182 -0
  123. package/dist/domain/docs/require-example-language/index.d.ts +3 -0
  124. package/dist/domain/docs/require-example-language/index.d.ts.map +1 -0
  125. package/dist/domain/docs/require-example-language/index.js +2 -0
  126. package/dist/{docs → domain/docs}/require-example-language/reporting.d.ts +1 -1
  127. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -0
  128. package/dist/domain/docs/require-example-language/reporting.js +148 -0
  129. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -0
  130. package/dist/domain/docs/require-example-language/rule.js +34 -0
  131. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -0
  132. package/dist/domain/docs/require-example-language/types.js +2 -0
  133. package/dist/domain/docs/single-line-jsdoc/index.d.ts +2 -0
  134. package/dist/domain/docs/single-line-jsdoc/index.d.ts.map +1 -0
  135. package/dist/domain/docs/single-line-jsdoc/index.js +2 -0
  136. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  137. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +4 -0
  138. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +1 -0
  139. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +5 -0
  140. package/dist/domain/docs/single-line-jsdoc/rule.js +196 -0
  141. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +4 -0
  142. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +1 -0
  143. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +5 -0
  144. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  145. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  146. package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +1 -1
  147. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  148. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  149. package/dist/domain/docs/test-helpers.d.ts.map +1 -0
  150. package/dist/domain/docs/test-helpers.js +107 -0
  151. package/dist/domain/index.d.ts +6 -0
  152. package/dist/domain/index.d.ts.map +1 -0
  153. package/dist/domain/index.js +6 -0
  154. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +92 -0
  155. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -0
  156. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +4 -0
  157. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -0
  158. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +4 -0
  159. package/dist/domain/testing/aaa/analyzer.analysis.js +247 -0
  160. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +93 -0
  161. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -0
  162. package/dist/domain/testing/aaa/analyzer.assertions.js +283 -0
  163. package/dist/domain/testing/aaa/analyzer.classification.d.ts +75 -0
  164. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -0
  165. package/dist/domain/testing/aaa/analyzer.classification.js +201 -0
  166. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +9 -0
  167. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +1 -0
  168. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +10 -0
  169. package/dist/domain/testing/aaa/analyzer.d.ts +46 -0
  170. package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -0
  171. package/dist/domain/testing/aaa/analyzer.js +59 -0
  172. package/dist/domain/testing/aaa/analyzer.super.d.ts +107 -0
  173. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -0
  174. package/dist/domain/testing/aaa/analyzer.super.js +228 -0
  175. package/dist/{testing → domain/testing}/aaa/index.d.ts +2 -2
  176. package/dist/domain/testing/aaa/index.d.ts.map +1 -0
  177. package/dist/domain/testing/aaa/index.js +2 -0
  178. package/dist/domain/testing/aaa/types.d.ts +58 -0
  179. package/dist/domain/testing/aaa/types.d.ts.map +1 -0
  180. package/dist/domain/testing/aaa/types.js +2 -0
  181. package/dist/domain/testing/assert-actual-expected-names/index.d.ts +2 -0
  182. package/dist/domain/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  183. package/dist/domain/testing/assert-actual-expected-names/index.js +2 -0
  184. package/dist/{testing → domain/testing}/assert-actual-expected-names/rule.d.ts +1 -0
  185. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  186. package/dist/domain/testing/assert-actual-expected-names/rule.js +113 -0
  187. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  188. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  189. package/dist/domain/testing/enforce-aaa-phase-purity/index.js +2 -0
  190. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts +13 -0
  191. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -0
  192. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +134 -0
  193. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +25 -0
  194. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -0
  195. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +138 -0
  196. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +4 -0
  197. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +1 -0
  198. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +4 -0
  199. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +14 -0
  200. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -0
  201. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +180 -0
  202. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +42 -0
  203. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +1 -0
  204. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +188 -0
  205. package/dist/{testing → domain/testing}/enforce-aaa-phase-purity/rule.d.ts +1 -0
  206. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  207. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +34 -0
  208. package/dist/domain/testing/enforce-aaa-structure/index.d.ts +2 -0
  209. package/dist/domain/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  210. package/dist/domain/testing/enforce-aaa-structure/index.js +2 -0
  211. package/dist/{testing → domain/testing}/enforce-aaa-structure/rule.d.ts +1 -0
  212. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  213. package/dist/domain/testing/enforce-aaa-structure/rule.js +85 -0
  214. package/dist/{testing → domain/testing}/index.d.ts +9 -8
  215. package/dist/domain/testing/index.d.ts.map +1 -0
  216. package/dist/domain/testing/index.js +10 -0
  217. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +29 -0
  218. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -0
  219. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +90 -0
  220. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts +31 -0
  221. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -0
  222. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +43 -0
  223. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts +16 -0
  224. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -0
  225. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +205 -0
  226. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +28 -0
  227. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  228. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +171 -0
  229. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  230. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  231. package/dist/domain/testing/prefer-vi-mocked-import/index.js +2 -0
  232. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-bindings.d.ts +1 -1
  233. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  234. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  235. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-declarations.d.ts +2 -1
  236. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  237. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +131 -0
  238. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  239. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  240. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-imports.d.ts +1 -1
  241. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  242. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  243. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-rewrites.d.ts +1 -1
  244. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  245. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  246. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  247. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  248. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +26 -0
  249. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  250. package/dist/domain/testing/prefer-vi-mocked-import/match.js +198 -0
  251. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +20 -0
  252. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +1 -0
  253. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +39 -0
  254. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  255. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +36 -0
  256. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/types.d.ts +1 -1
  257. package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  258. package/dist/domain/testing/prefer-vi-mocked-import/types.js +2 -0
  259. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +86 -0
  260. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -0
  261. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +150 -0
  262. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +2 -0
  263. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +1 -0
  264. package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +2 -0
  265. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +14 -0
  266. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -0
  267. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +81 -0
  268. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +13 -0
  269. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -0
  270. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +189 -0
  271. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +25 -0
  272. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -0
  273. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +92 -0
  274. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +32 -0
  275. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +1 -0
  276. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +164 -0
  277. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +5 -0
  278. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -0
  279. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +4 -0
  280. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +1 -0
  281. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +4 -0
  282. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +4 -0
  283. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +1 -0
  284. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +4 -0
  285. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +62 -0
  286. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +4 -0
  287. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +1 -0
  288. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +4 -0
  289. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +24 -0
  290. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -0
  291. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +113 -0
  292. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +36 -0
  293. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +1 -0
  294. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +138 -0
  295. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +203 -0
  296. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -0
  297. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +2 -0
  298. package/dist/domain/testing/require-aaa-sections/index.d.ts +2 -0
  299. package/dist/domain/testing/require-aaa-sections/index.d.ts.map +1 -0
  300. package/dist/domain/testing/require-aaa-sections/index.js +2 -0
  301. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts +17 -0
  302. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +1 -0
  303. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +150 -0
  304. package/dist/{testing → domain/testing}/require-aaa-sections/rule.d.ts +1 -0
  305. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -0
  306. package/dist/domain/testing/require-aaa-sections/rule.js +129 -0
  307. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +104 -0
  308. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -0
  309. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +217 -0
  310. package/dist/domain/testing/require-act-result-capture/index.d.ts +2 -0
  311. package/dist/domain/testing/require-act-result-capture/index.d.ts.map +1 -0
  312. package/dist/domain/testing/require-act-result-capture/index.js +2 -0
  313. package/dist/{testing → domain/testing}/require-act-result-capture/rule.d.ts +1 -0
  314. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -0
  315. package/dist/domain/testing/require-act-result-capture/rule.js +106 -0
  316. package/dist/domain/testing/require-test-companion/index.d.ts +3 -0
  317. package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -0
  318. package/dist/domain/testing/require-test-companion/index.js +3 -0
  319. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-listeners.d.ts +1 -1
  320. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  321. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  322. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  323. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +113 -0
  324. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-test-helpers.d.ts +1 -1
  325. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  326. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +184 -0
  327. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-utilities.d.ts +1 -1
  328. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  329. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  330. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -0
  331. package/dist/domain/testing/require-test-companion/rule.js +57 -0
  332. package/dist/domain/testing/require-test-companion/types.d.ts.map +1 -0
  333. package/dist/domain/testing/require-test-companion/types.js +2 -0
  334. package/dist/domain/testing/single-act-statement/index.d.ts +2 -0
  335. package/dist/domain/testing/single-act-statement/index.d.ts.map +1 -0
  336. package/dist/domain/testing/single-act-statement/index.js +2 -0
  337. package/dist/{testing → domain/testing}/single-act-statement/rule.d.ts +1 -0
  338. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -0
  339. package/dist/domain/testing/single-act-statement/rule.js +34 -0
  340. package/dist/index.d.ts +4 -5
  341. package/dist/index.d.ts.map +1 -1
  342. package/dist/index.js +3 -6
  343. package/dist/{codeperfect-plugin.d.ts → infrastructure/codeperfect-plugin.d.ts} +2 -0
  344. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -0
  345. package/dist/infrastructure/codeperfect-plugin.js +30 -0
  346. package/dist/infrastructure/index.d.ts +5 -0
  347. package/dist/infrastructure/index.d.ts.map +1 -0
  348. package/dist/infrastructure/index.js +4 -0
  349. package/dist/infrastructure/presets.d.ts +18 -0
  350. package/dist/infrastructure/presets.d.ts.map +1 -0
  351. package/dist/infrastructure/presets.js +81 -0
  352. package/package.json +54 -27
  353. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +0 -1
  354. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +0 -131
  355. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +0 -48
  356. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +0 -1
  357. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +0 -126
  358. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
  359. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -90
  360. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +0 -1
  361. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +0 -218
  362. package/dist/architecture/consistent-barrel-files/index.d.ts +0 -5
  363. package/dist/architecture/consistent-barrel-files/index.d.ts.map +0 -1
  364. package/dist/architecture/consistent-barrel-files/index.js +0 -4
  365. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +0 -1
  366. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +0 -100
  367. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
  368. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -90
  369. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +0 -1
  370. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +0 -154
  371. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +0 -1
  372. package/dist/architecture/consistent-barrel-files/rule.js +0 -58
  373. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
  374. package/dist/architecture/consistent-barrel-files/test-helpers.js +0 -229
  375. package/dist/architecture/consistent-barrel-files/types.d.ts +0 -25
  376. package/dist/architecture/consistent-barrel-files/types.d.ts.map +0 -1
  377. package/dist/architecture/consistent-barrel-files/types.js +0 -2
  378. package/dist/architecture/index.d.ts.map +0 -1
  379. package/dist/architecture/index.js +0 -2
  380. package/dist/benchmark-rules.d.ts +0 -83
  381. package/dist/benchmark-rules.d.ts.map +0 -1
  382. package/dist/benchmark-rules.js +0 -175
  383. package/dist/codeperfect-plugin.d.ts.map +0 -1
  384. package/dist/codeperfect-plugin.js +0 -29
  385. package/dist/core/index.d.ts.map +0 -1
  386. package/dist/core/index.js +0 -3
  387. package/dist/core/no-multiple-declarators/index.d.ts +0 -2
  388. package/dist/core/no-multiple-declarators/index.d.ts.map +0 -1
  389. package/dist/core/no-multiple-declarators/index.js +0 -2
  390. package/dist/core/no-multiple-declarators/rule.d.ts.map +0 -1
  391. package/dist/core/no-multiple-declarators/rule.js +0 -100
  392. package/dist/core/prefer-interface-types/index.d.ts +0 -2
  393. package/dist/core/prefer-interface-types/index.d.ts.map +0 -1
  394. package/dist/core/prefer-interface-types/index.js +0 -2
  395. package/dist/core/prefer-interface-types/rule.d.ts.map +0 -1
  396. package/dist/core/prefer-interface-types/rule.js +0 -145
  397. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
  398. package/dist/core/prefer-interface-types/test-helpers.js +0 -116
  399. package/dist/custom-rule-documentation.d.ts.map +0 -1
  400. package/dist/custom-rule-documentation.js +0 -35
  401. package/dist/custom-rules.d.ts.map +0 -1
  402. package/dist/custom-rules.js +0 -70
  403. package/dist/docs/index.d.ts +0 -4
  404. package/dist/docs/index.d.ts.map +0 -1
  405. package/dist/docs/index.js +0 -4
  406. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
  407. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
  408. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +0 -1
  409. package/dist/docs/no-interface-member-docs/comment-utilities.js +0 -146
  410. package/dist/docs/no-interface-member-docs/index.d.ts +0 -2
  411. package/dist/docs/no-interface-member-docs/index.d.ts.map +0 -1
  412. package/dist/docs/no-interface-member-docs/index.js +0 -2
  413. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +0 -1
  414. package/dist/docs/no-interface-member-docs/parameter-tags.js +0 -101
  415. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +0 -1
  416. package/dist/docs/no-interface-member-docs/parameter-utilities.js +0 -125
  417. package/dist/docs/no-interface-member-docs/rule.d.ts.map +0 -1
  418. package/dist/docs/no-interface-member-docs/rule.js +0 -168
  419. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
  420. package/dist/docs/no-interface-member-docs/test-helpers.js +0 -157
  421. package/dist/docs/no-interface-member-docs/types.d.ts.map +0 -1
  422. package/dist/docs/no-interface-member-docs/types.js +0 -2
  423. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +0 -1
  424. package/dist/docs/require-example-language/empty-fence-fixes.js +0 -169
  425. package/dist/docs/require-example-language/example-utilities.d.ts.map +0 -1
  426. package/dist/docs/require-example-language/example-utilities.js +0 -76
  427. package/dist/docs/require-example-language/examples.d.ts.map +0 -1
  428. package/dist/docs/require-example-language/examples.js +0 -181
  429. package/dist/docs/require-example-language/fixes.d.ts.map +0 -1
  430. package/dist/docs/require-example-language/fixes.js +0 -182
  431. package/dist/docs/require-example-language/index.d.ts +0 -3
  432. package/dist/docs/require-example-language/index.d.ts.map +0 -1
  433. package/dist/docs/require-example-language/index.js +0 -2
  434. package/dist/docs/require-example-language/reporting.d.ts.map +0 -1
  435. package/dist/docs/require-example-language/reporting.js +0 -145
  436. package/dist/docs/require-example-language/rule.d.ts.map +0 -1
  437. package/dist/docs/require-example-language/rule.js +0 -34
  438. package/dist/docs/require-example-language/types.d.ts.map +0 -1
  439. package/dist/docs/require-example-language/types.js +0 -2
  440. package/dist/docs/single-line-jsdoc/index.d.ts +0 -2
  441. package/dist/docs/single-line-jsdoc/index.d.ts.map +0 -1
  442. package/dist/docs/single-line-jsdoc/index.js +0 -2
  443. package/dist/docs/single-line-jsdoc/rule.d.ts.map +0 -1
  444. package/dist/docs/single-line-jsdoc/rule.js +0 -196
  445. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +0 -1
  446. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +0 -95
  447. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +0 -1
  448. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +0 -140
  449. package/dist/docs/test-helpers.d.ts.map +0 -1
  450. package/dist/docs/test-helpers.js +0 -107
  451. package/dist/presets.d.ts +0 -10
  452. package/dist/presets.d.ts.map +0 -1
  453. package/dist/presets.js +0 -50
  454. package/dist/rules/index.d.ts +0 -5
  455. package/dist/rules/index.d.ts.map +0 -1
  456. package/dist/rules/index.js +0 -6
  457. package/dist/testing/aaa/analyzer.d.ts +0 -36
  458. package/dist/testing/aaa/analyzer.d.ts.map +0 -1
  459. package/dist/testing/aaa/analyzer.js +0 -490
  460. package/dist/testing/aaa/index.d.ts.map +0 -1
  461. package/dist/testing/aaa/index.js +0 -2
  462. package/dist/testing/aaa/types.d.ts +0 -31
  463. package/dist/testing/aaa/types.d.ts.map +0 -1
  464. package/dist/testing/aaa/types.js +0 -2
  465. package/dist/testing/assert-actual-expected-names/index.d.ts +0 -2
  466. package/dist/testing/assert-actual-expected-names/index.d.ts.map +0 -1
  467. package/dist/testing/assert-actual-expected-names/index.js +0 -2
  468. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +0 -1
  469. package/dist/testing/assert-actual-expected-names/rule.js +0 -54
  470. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +0 -2
  471. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +0 -1
  472. package/dist/testing/enforce-aaa-phase-purity/index.js +0 -2
  473. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
  474. package/dist/testing/enforce-aaa-phase-purity/rule.js +0 -110
  475. package/dist/testing/enforce-aaa-structure/index.d.ts +0 -2
  476. package/dist/testing/enforce-aaa-structure/index.d.ts.map +0 -1
  477. package/dist/testing/enforce-aaa-structure/index.js +0 -2
  478. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +0 -1
  479. package/dist/testing/enforce-aaa-structure/rule.js +0 -48
  480. package/dist/testing/index.d.ts.map +0 -1
  481. package/dist/testing/index.js +0 -9
  482. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +0 -16
  483. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +0 -1
  484. package/dist/testing/prefer-vi-mocked-import/fix.js +0 -224
  485. package/dist/testing/prefer-vi-mocked-import/index.d.ts +0 -2
  486. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +0 -1
  487. package/dist/testing/prefer-vi-mocked-import/index.js +0 -2
  488. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +0 -1
  489. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +0 -52
  490. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +0 -1
  491. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +0 -99
  492. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +0 -1
  493. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +0 -102
  494. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +0 -1
  495. package/dist/testing/prefer-vi-mocked-import/match-imports.js +0 -156
  496. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +0 -1
  497. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +0 -119
  498. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +0 -1
  499. package/dist/testing/prefer-vi-mocked-import/match-walk.js +0 -62
  500. package/dist/testing/prefer-vi-mocked-import/match.d.ts +0 -15
  501. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +0 -1
  502. package/dist/testing/prefer-vi-mocked-import/match.js +0 -193
  503. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +0 -1
  504. package/dist/testing/prefer-vi-mocked-import/rule.js +0 -32
  505. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +0 -1
  506. package/dist/testing/prefer-vi-mocked-import/types.js +0 -2
  507. package/dist/testing/require-aaa-sections/index.d.ts +0 -2
  508. package/dist/testing/require-aaa-sections/index.d.ts.map +0 -1
  509. package/dist/testing/require-aaa-sections/index.js +0 -2
  510. package/dist/testing/require-aaa-sections/rule.d.ts.map +0 -1
  511. package/dist/testing/require-aaa-sections/rule.js +0 -111
  512. package/dist/testing/require-act-result-capture/index.d.ts +0 -2
  513. package/dist/testing/require-act-result-capture/index.d.ts.map +0 -1
  514. package/dist/testing/require-act-result-capture/index.js +0 -2
  515. package/dist/testing/require-act-result-capture/rule.d.ts.map +0 -1
  516. package/dist/testing/require-act-result-capture/rule.js +0 -34
  517. package/dist/testing/require-test-companion/index.d.ts +0 -3
  518. package/dist/testing/require-test-companion/index.d.ts.map +0 -1
  519. package/dist/testing/require-test-companion/index.js +0 -3
  520. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +0 -1
  521. package/dist/testing/require-test-companion/require-test-companion-listeners.js +0 -145
  522. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +0 -1
  523. package/dist/testing/require-test-companion/require-test-companion-options.js +0 -112
  524. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
  525. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +0 -183
  526. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
  527. package/dist/testing/require-test-companion/require-test-companion-utilities.js +0 -26
  528. package/dist/testing/require-test-companion/rule.d.ts.map +0 -1
  529. package/dist/testing/require-test-companion/rule.js +0 -57
  530. package/dist/testing/require-test-companion/types.d.ts.map +0 -1
  531. package/dist/testing/require-test-companion/types.js +0 -2
  532. package/dist/testing/single-act-statement/index.d.ts +0 -2
  533. package/dist/testing/single-act-statement/index.d.ts.map +0 -1
  534. package/dist/testing/single-act-statement/index.js +0 -2
  535. package/dist/testing/single-act-statement/rule.d.ts.map +0 -1
  536. package/dist/testing/single-act-statement/rule.js +0 -33
  537. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule.d.ts +0 -0
  538. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +0 -0
  539. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/rule.d.ts +0 -0
  540. /package/dist/{core → domain/core}/prefer-interface-types/rule.d.ts +0 -0
  541. /package/dist/{core → domain/core}/prefer-interface-types/test-helpers.d.ts +0 -0
  542. /package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -0
  543. /package/dist/{docs → domain/docs}/no-interface-member-docs/rule.d.ts +0 -0
  544. /package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.d.ts +0 -0
  545. /package/dist/{docs → domain/docs}/require-example-language/empty-fence-fixes.d.ts +0 -0
  546. /package/dist/{docs → domain/docs}/require-example-language/example-utilities.d.ts +0 -0
  547. /package/dist/{docs → domain/docs}/require-example-language/rule.d.ts +0 -0
  548. /package/dist/{docs → domain/docs}/require-example-language/types.d.ts +0 -0
  549. /package/dist/{docs → domain/docs}/single-line-jsdoc/rule.d.ts +0 -0
  550. /package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-content.d.ts +0 -0
  551. /package/dist/{docs → domain/docs}/test-helpers.d.ts +0 -0
  552. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-helpers.d.ts +0 -0
  553. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-walk.d.ts +0 -0
  554. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/rule.d.ts +0 -0
  555. /package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-options.d.ts +0 -0
  556. /package/dist/{testing → domain/testing}/require-test-companion/rule.d.ts +0 -0
  557. /package/dist/{testing → domain/testing}/require-test-companion/types.d.ts +0 -0
@@ -1,62 +0,0 @@
1
- /**
2
- * Returns child nodes for a given AST node.
3
- * @param node Source node.
4
- * @returns Flattened list of child nodes.
5
- * @example
6
- * ```typescript
7
- * const childNodes = getChildNodes({ type: "Program", body: [], sourceType: "module" } as never);
8
- * void childNodes;
9
- * ```
10
- */
11
- function getChildNodes(node) {
12
- const values = Object.entries(node)
13
- .filter(([key]) => key !== "parent")
14
- .map(([, value]) => value);
15
- return values.flatMap((value) => toNodeList(value));
16
- }
17
- /**
18
- * Checks whether a value is an ESTree node.
19
- * @param value Arbitrary value from node property iteration.
20
- * @returns True when the value has node-like shape.
21
- * @example
22
- * ```typescript
23
- * const ok = isNode({ type: "Identifier", name: "x" });
24
- * void ok;
25
- * ```
26
- */
27
- function isNode(value) {
28
- return typeof value === "object" && value !== null && "type" in value;
29
- }
30
- /**
31
- * Converts an unknown value into a list of AST nodes.
32
- * @param value Arbitrary value from the AST object graph.
33
- * @returns Node list extracted from arrays or single values.
34
- * @example
35
- * ```typescript
36
- * const list = toNodeList([{ type: "Identifier", name: "x" }] as never);
37
- * void list;
38
- * ```
39
- */
40
- function toNodeList(value) {
41
- if (Array.isArray(value)) {
42
- return value.filter((nodeValue) => isNode(nodeValue));
43
- }
44
- return isNode(value) ? [value] : [];
45
- }
46
- /**
47
- * Visits a node and all nested child nodes.
48
- * @param node Root node to visit.
49
- * @param visitor Callback run for each visited node.
50
- * @example
51
- * ```typescript
52
- * walkNode({ type: "Program", body: [], sourceType: "module" } as never, () => {});
53
- * ```
54
- */
55
- function walkNode(node, visitor) {
56
- visitor(node);
57
- for (const childNode of getChildNodes(node)) {
58
- walkNode(childNode, visitor);
59
- }
60
- }
61
- export { walkNode };
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtd2Fsay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3ByZWZlci12aS1tb2NrZWQtaW1wb3J0L21hdGNoLXdhbGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxhQUFhLENBQUMsSUFBaUI7SUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUEwQyxDQUFDO1NBQ3RFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7U0FDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLE1BQU0sQ0FBQyxLQUFjO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQztBQUN4RSxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxVQUFVLENBQUMsS0FBYztJQUNoQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQTRCLEVBQUUsQ0FDMUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxRQUFRLENBQ2YsSUFBaUIsRUFDakIsT0FBMkM7SUFFM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsS0FBSyxNQUFNLFNBQVMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM1QyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xuXG4vKipcbiAqIFJldHVybnMgY2hpbGQgbm9kZXMgZm9yIGEgZ2l2ZW4gQVNUIG5vZGUuXG4gKiBAcGFyYW0gbm9kZSBTb3VyY2Ugbm9kZS5cbiAqIEByZXR1cm5zIEZsYXR0ZW5lZCBsaXN0IG9mIGNoaWxkIG5vZGVzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNoaWxkTm9kZXMgPSBnZXRDaGlsZE5vZGVzKHsgdHlwZTogXCJQcm9ncmFtXCIsIGJvZHk6IFtdLCBzb3VyY2VUeXBlOiBcIm1vZHVsZVwiIH0gYXMgbmV2ZXIpO1xuICogdm9pZCBjaGlsZE5vZGVzO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldENoaWxkTm9kZXMobm9kZTogRVNUcmVlLk5vZGUpOiBFU1RyZWUuTm9kZVtdIHtcbiAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmVudHJpZXMobm9kZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgIT09IFwicGFyZW50XCIpXG4gICAgLm1hcCgoWywgdmFsdWVdKSA9PiB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZXMuZmxhdE1hcCgodmFsdWUpID0+IHRvTm9kZUxpc3QodmFsdWUpKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhbHVlIGlzIGFuIEVTVHJlZSBub2RlLlxuICogQHBhcmFtIHZhbHVlIEFyYml0cmFyeSB2YWx1ZSBmcm9tIG5vZGUgcHJvcGVydHkgaXRlcmF0aW9uLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgbm9kZS1saWtlIHNoYXBlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9rID0gaXNOb2RlKHsgdHlwZTogXCJJZGVudGlmaWVyXCIsIG5hbWU6IFwieFwiIH0pO1xuICogdm9pZCBvaztcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc05vZGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFU1RyZWUuTm9kZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgXCJ0eXBlXCIgaW4gdmFsdWU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gdW5rbm93biB2YWx1ZSBpbnRvIGEgbGlzdCBvZiBBU1Qgbm9kZXMuXG4gKiBAcGFyYW0gdmFsdWUgQXJiaXRyYXJ5IHZhbHVlIGZyb20gdGhlIEFTVCBvYmplY3QgZ3JhcGguXG4gKiBAcmV0dXJucyBOb2RlIGxpc3QgZXh0cmFjdGVkIGZyb20gYXJyYXlzIG9yIHNpbmdsZSB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbGlzdCA9IHRvTm9kZUxpc3QoW3sgdHlwZTogXCJJZGVudGlmaWVyXCIsIG5hbWU6IFwieFwiIH1dIGFzIG5ldmVyKTtcbiAqIHZvaWQgbGlzdDtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiB0b05vZGVMaXN0KHZhbHVlOiB1bmtub3duKTogRVNUcmVlLk5vZGVbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5maWx0ZXIoKG5vZGVWYWx1ZSk6IG5vZGVWYWx1ZSBpcyBFU1RyZWUuTm9kZSA9PlxuICAgICAgaXNOb2RlKG5vZGVWYWx1ZSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBpc05vZGUodmFsdWUpID8gW3ZhbHVlXSA6IFtdO1xufVxuXG4vKipcbiAqIFZpc2l0cyBhIG5vZGUgYW5kIGFsbCBuZXN0ZWQgY2hpbGQgbm9kZXMuXG4gKiBAcGFyYW0gbm9kZSBSb290IG5vZGUgdG8gdmlzaXQuXG4gKiBAcGFyYW0gdmlzaXRvciBDYWxsYmFjayBydW4gZm9yIGVhY2ggdmlzaXRlZCBub2RlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHdhbGtOb2RlKHsgdHlwZTogXCJQcm9ncmFtXCIsIGJvZHk6IFtdLCBzb3VyY2VUeXBlOiBcIm1vZHVsZVwiIH0gYXMgbmV2ZXIsICgpID0+IHt9KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiB3YWxrTm9kZShcbiAgbm9kZTogRVNUcmVlLk5vZGUsXG4gIHZpc2l0b3I6IChjdXJyZW50Tm9kZTogRVNUcmVlLk5vZGUpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgdmlzaXRvcihub2RlKTtcbiAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2YgZ2V0Q2hpbGROb2Rlcyhub2RlKSkge1xuICAgIHdhbGtOb2RlKGNoaWxkTm9kZSwgdmlzaXRvcik7XG4gIH1cbn1cblxuZXhwb3J0IHsgd2Fsa05vZGUgfTtcbiJdfQ==
@@ -1,15 +0,0 @@
1
- import type { Rule } from "eslint";
2
- import type { RuleMatch } from "./types";
3
- /**
4
- * Collects the first applicable rule match from the file.
5
- * @param context Rule context.
6
- * @returns Collected match when pattern is found.
7
- * @example
8
- * ```typescript
9
- * const match = collectMatch({ sourceCode: { ast: { body: [], sourceType: "module", type: "Program" }, text: "" } } as never);
10
- * void match;
11
- * ```
12
- */
13
- declare function collectMatch(context: Rule.RuleContext): RuleMatch | undefined;
14
- export { collectMatch };
15
- //# sourceMappingURL=match.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../../src/testing/prefer-vi-mocked-import/match.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAwFzC;;;;;;;;;GASG;AACH,iBAAS,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,GAAG,SAAS,CAItE;AA6KD,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,193 +0,0 @@
1
- import { collectBindings } from "./match-bindings";
2
- import { collectDeclarations } from "./match-declarations";
3
- import { getFactoryReturnObject, getModuleSpecifier, getNewline, hasRange, } from "./match-helpers";
4
- import { resolveImportPlan } from "./match-imports";
5
- import { areLocalsSafeToInline, buildAllowedRanges, collectMemberRewrites, } from "./match-rewrites";
6
- /**
7
- * Builds a full rule match from seed data.
8
- * @param context Rule context.
9
- * @param program Program node.
10
- * @param seed Seed data.
11
- * @returns Rule match when safe.
12
- * @example
13
- * ```typescript
14
- * const match = buildMatch({ sourceCode: { text: "" } } as never, { body: [], sourceType: "module", type: "Program" } as never, { factoryObject: { properties: [], type: "ObjectExpression" }, mockStatement: { expression: { arguments: [], type: "CallExpression" }, type: "ExpressionStatement" }, moduleSpecifier: "./x", specifierExpression: { range: [0, 1], type: "Literal", value: "./x" } as never });
15
- * void match;
16
- * ```
17
- */
18
- function buildMatch(context, program, seed) {
19
- const declarations = collectDeclarations(program, context.sourceCode);
20
- const bindings = collectBindings(seed.factoryObject, declarations);
21
- if (bindings.length === 0) {
22
- return void 0;
23
- }
24
- const memberRewrites = collectMemberRewrites(program, toLocalMap(bindings));
25
- const localNames = new Set(bindings.map((binding) => binding.localName));
26
- const allowedRanges = buildAllowedRanges(bindings, declarations, memberRewrites);
27
- if (!areLocalsSafeToInline(program, allowedRanges, localNames)) {
28
- return void 0;
29
- }
30
- return {
31
- bindings,
32
- declarations,
33
- importPlan: resolveImportPlan(program, seed.moduleSpecifier, getImportNames(bindings)),
34
- memberRewrites,
35
- mockSpecifierIsImportExpression: seed.specifierExpression.type === "ImportExpression",
36
- mockSpecifierRange: seed.specifierExpression.range,
37
- moduleSpecifier: seed.moduleSpecifier,
38
- newline: getNewline(context.sourceCode.text),
39
- node: seed.mockStatement,
40
- sourceText: context.sourceCode.text,
41
- };
42
- }
43
- /**
44
- * Collects the first applicable rule match from the file.
45
- * @param context Rule context.
46
- * @returns Collected match when pattern is found.
47
- * @example
48
- * ```typescript
49
- * const match = collectMatch({ sourceCode: { ast: { body: [], sourceType: "module", type: "Program" }, text: "" } } as never);
50
- * void match;
51
- * ```
52
- */
53
- function collectMatch(context) {
54
- const program = context.sourceCode.ast;
55
- const seed = collectSeed(program);
56
- return seed === void 0 ? void 0 : buildMatch(context, program, seed);
57
- }
58
- /**
59
- * Collects seed data needed to build a full match.
60
- * @param program Program node.
61
- * @returns Match seed.
62
- * @example
63
- * ```typescript
64
- * const seed = collectSeed({ body: [], sourceType: "module", type: "Program" } as never);
65
- * void seed;
66
- * ```
67
- */
68
- function collectSeed(program) {
69
- const mockStatement = findMockStatement(program);
70
- if (mockStatement === void 0) {
71
- return void 0;
72
- }
73
- const { expression } = mockStatement;
74
- if (expression.type !== "CallExpression") {
75
- return void 0;
76
- }
77
- const callArguments = getMockCallArguments(expression);
78
- if (callArguments === void 0) {
79
- return void 0;
80
- }
81
- return createSeed(mockStatement, callArguments[0], callArguments[1]);
82
- }
83
- /**
84
- * Creates seed data from validated call arguments.
85
- * @param mockStatement Matched `vi.mock` statement.
86
- * @param specifierExpression First argument expression.
87
- * @param factoryExpression Factory callback expression.
88
- * @returns Match seed when arguments are supported.
89
- * @example
90
- * ```typescript
91
- * const seed = createSeed({ expression: { arguments: [], type: "CallExpression" }, type: "ExpressionStatement" } as never, { type: "Literal", value: "./x" } as never, { body: { properties: [], type: "ObjectExpression" }, type: "ArrowFunctionExpression" } as never);
92
- * void seed;
93
- * ```
94
- */
95
- function createSeed(mockStatement, specifierExpression, factoryExpression) {
96
- if (!hasRange(specifierExpression)) {
97
- return void 0;
98
- }
99
- const moduleSpecifier = getModuleSpecifier(specifierExpression);
100
- const factoryObject = getFactoryReturnObject(factoryExpression);
101
- return moduleSpecifier === void 0 || factoryObject === void 0
102
- ? void 0
103
- : { factoryObject, mockStatement, moduleSpecifier, specifierExpression };
104
- }
105
- /**
106
- * Returns the first top-level `vi.mock` or `vi.doMock` statement.
107
- * @param program Program node.
108
- * @returns Matching expression statement.
109
- * @example
110
- * ```typescript
111
- * const statement = findMockStatement({ body: [], sourceType: "module", type: "Program" } as never);
112
- * void statement;
113
- * ```
114
- */
115
- function findMockStatement(program) {
116
- return program.body.find((statement) => isMockExpressionStatement(statement));
117
- }
118
- /**
119
- * Returns sorted unique import names from bindings.
120
- * @param bindings Bindings list.
121
- * @returns Sorted import names.
122
- * @example
123
- * ```typescript
124
- * const names = getImportNames([]);
125
- * void names;
126
- * ```
127
- */
128
- function getImportNames(bindings) {
129
- return [
130
- ...new Set(bindings.map((binding) => binding.exportedName)),
131
- ].toSorted();
132
- }
133
- /**
134
- * Returns mock call arguments when both arguments are supported expressions.
135
- * @param expression Call expression node.
136
- * @returns First and second call arguments.
137
- * @example
138
- * ```typescript
139
- * const args = getMockCallArguments({ arguments: [], type: "CallExpression" } as never);
140
- * void args;
141
- * ```
142
- */
143
- function getMockCallArguments(expression) {
144
- const [firstArgument, secondArgument] = expression.arguments;
145
- if (firstArgument === void 0 || secondArgument === void 0) {
146
- return void 0;
147
- }
148
- if (firstArgument.type === "SpreadElement" ||
149
- secondArgument.type === "SpreadElement") {
150
- return void 0;
151
- }
152
- return [firstArgument, secondArgument];
153
- }
154
- /**
155
- * Checks whether a statement is a supported mock expression statement.
156
- * @param statement Candidate statement.
157
- * @returns True when statement is a supported mock call.
158
- * @example
159
- * ```typescript
160
- * const ok = isMockExpressionStatement({ type: "EmptyStatement" } as never);
161
- * void ok;
162
- * ```
163
- */
164
- function isMockExpressionStatement(statement) {
165
- if (statement.type !== "ExpressionStatement") {
166
- return false;
167
- }
168
- const { expression } = statement;
169
- if (expression.type !== "CallExpression" ||
170
- expression.callee.type !== "MemberExpression") {
171
- return false;
172
- }
173
- const { object, property } = expression.callee;
174
- return (object.type === "Identifier" &&
175
- object.name === "vi" &&
176
- property.type === "Identifier" &&
177
- (property.name === "mock" || property.name === "doMock"));
178
- }
179
- /**
180
- * Creates local-to-exported mapping from bindings.
181
- * @param bindings Bindings list.
182
- * @returns Mapping used for rewrite lookup.
183
- * @example
184
- * ```typescript
185
- * const map = toLocalMap([]);
186
- * void map;
187
- * ```
188
- */
189
- function toLocalMap(bindings) {
190
- return new Map(bindings.map((binding) => [binding.localName, binding.exportedName]));
191
- }
192
- export { collectMatch };
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9wcmVmZXItdmktbW9ja2VkLWltcG9ydC9tYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCLHFCQUFxQixHQUN0QixNQUFNLGtCQUFrQixDQUFDO0FBb0IxQjs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsVUFBVSxDQUNqQixPQUF5QixFQUN6QixPQUF1QixFQUN2QixJQUFlO0lBRWYsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1B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QUNwQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFDN0MsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUMvQyxPQUFPLENBQ0wsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZO1FBQzVCLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSTtRQUNwQixRQUFRLENBQUMsSUFBSSxLQUFLLFlBQVk7UUFDOUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsVUFBVSxDQUFDLFFBQStCO0lBQ2pELE9BQU8sSUFBSSxHQUFHLENBQ1osUUFBUSxDQUFDLEdBQUcsQ0FDVixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQVUsQ0FDaEUsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCB0eXBlICogYXMgRVNUcmVlIGZyb20gXCJlc3RyZWVcIjtcblxuaW1wb3J0IHR5cGUgeyBSdWxlTWF0Y2ggfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5pbXBvcnQgeyBjb2xsZWN0QmluZGluZ3MgfSBmcm9tIFwiLi9tYXRjaC1iaW5kaW5nc1wiO1xuaW1wb3J0IHsgY29sbGVjdERlY2xhcmF0aW9ucyB9IGZyb20gXCIuL21hdGNoLWRlY2xhcmF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgZ2V0RmFjdG9yeVJldHVybk9iamVjdCxcbiAgZ2V0TW9kdWxlU3BlY2lmaWVyLFxuICBnZXROZXdsaW5lLFxuICBoYXNSYW5nZSxcbn0gZnJvbSBcIi4vbWF0Y2gtaGVscGVyc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUltcG9ydFBsYW4gfSBmcm9tIFwiLi9tYXRjaC1pbXBvcnRzXCI7XG5pbXBvcnQge1xuICBhcmVMb2NhbHNTYWZlVG9JbmxpbmUsXG4gIGJ1aWxkQWxsb3dlZFJhbmdlcyxcbiAgY29sbGVjdE1lbWJlclJld3JpdGVzLFxufSBmcm9tIFwiLi9tYXRjaC1yZXdyaXRlc1wiO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgTWF0Y2hTZWVkIHtcbiAgLyoqIFJldHVybmVkIG9iamVjdCBleHByZXNzaW9uIGZyb20gdGhlIG1vY2sgZmFjdG9yeS4gKi9cbiAgZmFjdG9yeU9iamVjdDogRVNUcmVlLk9iamVjdEV4cHJlc3Npb247XG5cbiAgLyoqIEV4cHJlc3Npb24gc3RhdGVtZW50IGNvbnRhaW5pbmcgYHZpLm1vY2tgIG9yIGB2aS5kb01vY2tgLiAqL1xuICBtb2NrU3RhdGVtZW50OiBFU1RyZWUuRXhwcmVzc2lvblN0YXRlbWVudDtcblxuICAvKiogTW9kdWxlIHBhdGggc3RyaW5nIGV4dHJhY3RlZCBmcm9tIHRoZSBmaXJzdCBtb2NrIGFyZ3VtZW50LiAqL1xuICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZztcblxuICAvKiogT3JpZ2luYWwgZmlyc3QgYXJndW1lbnQgbm9kZSwgaW5jbHVkaW5nIGByYW5nZWAsIGZvciBmaXhlciB1c2UuICovXG4gIHNwZWNpZmllckV4cHJlc3Npb246IEVTVHJlZS5FeHByZXNzaW9uICYge1xuICAgIC8qKiBTb3VyY2UgcmFuZ2UgZm9yIHRoZSBtb2NrIHNwZWNpZmllciBleHByZXNzaW9uLiAqL1xuICAgIHJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGZ1bGwgcnVsZSBtYXRjaCBmcm9tIHNlZWQgZGF0YS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBwcm9ncmFtIFByb2dyYW0gbm9kZS5cbiAqIEBwYXJhbSBzZWVkIFNlZWQgZGF0YS5cbiAqIEByZXR1cm5zIFJ1bGUgbWF0Y2ggd2hlbiBzYWZlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1hdGNoID0gYnVpbGRNYXRjaCh7IHNvdXJjZUNvZGU6IHsgdGV4dDogXCJcIiB9IH0gYXMgbmV2ZXIsIHsgYm9keTogW10sIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsIHR5cGU6IFwiUHJvZ3JhbVwiIH0gYXMgbmV2ZXIsIHsgZmFjdG9yeU9iamVjdDogeyBwcm9wZXJ0aWVzOiBbXSwgdHlwZTogXCJPYmplY3RFeHByZXNzaW9uXCIgfSwgbW9ja1N0YXRlbWVudDogeyBleHByZXNzaW9uOiB7IGFyZ3VtZW50czogW10sIHR5cGU6IFwiQ2FsbEV4cHJlc3Npb25cIiB9LCB0eXBlOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB9LCBtb2R1bGVTcGVjaWZpZXI6IFwiLi94XCIsIHNwZWNpZmllckV4cHJlc3Npb246IHsgcmFuZ2U6IFswLCAxXSwgdHlwZTogXCJMaXRlcmFsXCIsIHZhbHVlOiBcIi4veFwiIH0gYXMgbmV2ZXIgfSk7XG4gKiB2b2lkIG1hdGNoO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTWF0Y2goXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIHByb2dyYW06IEVTVHJlZS5Qcm9ncmFtLFxuICBzZWVkOiBNYXRjaFNlZWQsXG4pOiBSdWxlTWF0Y2ggfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBjb2xsZWN0RGVjbGFyYXRpb25zKHByb2dyYW0sIGNvbnRleHQuc291cmNlQ29kZSk7XG4gIGNvbnN0IGJpbmRpbmdzID0gY29sbGVjdEJpbmRpbmdzKHNlZWQuZmFjdG9yeU9iamVjdCwgZGVjbGFyYXRpb25zKTtcbiAgaWYgKGJpbmRpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCBtZW1iZXJSZXdyaXRlcyA9IGNvbGxlY3RNZW1iZXJSZXdyaXRlcyhwcm9ncmFtLCB0b0xvY2FsTWFwKGJpbmRpbmdzKSk7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSBuZXcgU2V0KGJpbmRpbmdzLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5sb2NhbE5hbWUpKTtcbiAgY29uc3QgYWxsb3dlZFJhbmdlcyA9IGJ1aWxkQWxsb3dlZFJhbmdlcyhcbiAgICBiaW5kaW5ncyxcbiAgICBkZWNsYXJhdGlvbnMsXG4gICAgbWVtYmVyUmV3cml0ZXMsXG4gICk7XG4gIGlmICghYXJlTG9jYWxzU2FmZVRvSW5saW5lKHByb2dyYW0sIGFsbG93ZWRSYW5nZXMsIGxvY2FsTmFtZXMpKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmluZGluZ3MsXG4gICAgZGVjbGFyYXRpb25zLFxuICAgIGltcG9ydFBsYW46IHJlc29sdmVJbXBvcnRQbGFuKFxuICAgICAgcHJvZ3JhbSxcbiAgICAgIHNlZWQubW9kdWxlU3BlY2lmaWVyLFxuICAgICAgZ2V0SW1wb3J0TmFtZXMoYmluZGluZ3MpLFxuICAgICksXG4gICAgbWVtYmVyUmV3cml0ZXMsXG4gICAgbW9ja1NwZWNpZmllcklzSW1wb3J0RXhwcmVzc2lvbjpcbiAgICAgIHNlZWQuc3BlY2lmaWVyRXhwcmVzc2lvbi50eXBlID09PSBcIkltcG9ydEV4cHJlc3Npb25cIixcbiAgICBtb2NrU3BlY2lmaWVyUmFuZ2U6IHNlZWQuc3BlY2lmaWVyRXhwcmVzc2lvbi5yYW5nZSxcbiAgICBtb2R1bGVTcGVjaWZpZXI6IHNlZWQubW9kdWxlU3BlY2lmaWVyLFxuICAgIG5ld2xpbmU6IGdldE5ld2xpbmUoY29udGV4dC5zb3VyY2VDb2RlLnRleHQpLFxuICAgIG5vZGU6IHNlZWQubW9ja1N0YXRlbWVudCBhcyB1bmtub3duIGFzIFJ1bGUuTm9kZSxcbiAgICBzb3VyY2VUZXh0OiBjb250ZXh0LnNvdXJjZUNvZGUudGV4dCxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyB0aGUgZmlyc3QgYXBwbGljYWJsZSBydWxlIG1hdGNoIGZyb20gdGhlIGZpbGUuXG4gKiBAcGFyYW0gY29udGV4dCBSdWxlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBDb2xsZWN0ZWQgbWF0Y2ggd2hlbiBwYXR0ZXJuIGlzIGZvdW5kLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1hdGNoID0gY29sbGVjdE1hdGNoKHsgc291cmNlQ29kZTogeyBhc3Q6IHsgYm9keTogW10sIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsIHR5cGU6IFwiUHJvZ3JhbVwiIH0sIHRleHQ6IFwiXCIgfSB9IGFzIG5ldmVyKTtcbiAqIHZvaWQgbWF0Y2g7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY29sbGVjdE1hdGNoKGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBSdWxlTWF0Y2ggfCB1bmRlZmluZWQge1xuICBjb25zdCBwcm9ncmFtID0gY29udGV4dC5zb3VyY2VDb2RlLmFzdCBhcyBFU1RyZWUuUHJvZ3JhbTtcbiAgY29uc3Qgc2VlZCA9IGNvbGxlY3RTZWVkKHByb2dyYW0pO1xuICByZXR1cm4gc2VlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYnVpbGRNYXRjaChjb250ZXh0LCBwcm9ncmFtLCBzZWVkKTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBzZWVkIGRhdGEgbmVlZGVkIHRvIGJ1aWxkIGEgZnVsbCBtYXRjaC5cbiAqIEBwYXJhbSBwcm9ncmFtIFByb2dyYW0gbm9kZS5cbiAqIEByZXR1cm5zIE1hdGNoIHNlZWQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VlZCA9IGNvbGxlY3RTZWVkKHsgYm9keTogW10sIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsIHR5cGU6IFwiUHJvZ3JhbVwiIH0gYXMgbmV2ZXIpO1xuICogdm9pZCBzZWVkO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTZWVkKHByb2dyYW06IEVTVHJlZS5Qcm9ncmFtKTogTWF0Y2hTZWVkIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbW9ja1N0YXRlbWVudCA9IGZpbmRNb2NrU3RhdGVtZW50KHByb2dyYW0pO1xuICBpZiAobW9ja1N0YXRlbWVudCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IHsgZXhwcmVzc2lvbiB9ID0gbW9ja1N0YXRlbWVudDtcbiAgaWYgKGV4cHJlc3Npb24udHlwZSAhPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IGNhbGxBcmd1bWVudHMgPSBnZXRNb2NrQ2FsbEFyZ3VtZW50cyhleHByZXNzaW9uKTtcbiAgaWYgKGNhbGxBcmd1bWVudHMgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU2VlZChtb2NrU3RhdGVtZW50LCBjYWxsQXJndW1lbnRzWzBdLCBjYWxsQXJndW1lbnRzWzFdKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHNlZWQgZGF0YSBmcm9tIHZhbGlkYXRlZCBjYWxsIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBtb2NrU3RhdGVtZW50IE1hdGNoZWQgYHZpLm1vY2tgIHN0YXRlbWVudC5cbiAqIEBwYXJhbSBzcGVjaWZpZXJFeHByZXNzaW9uIEZpcnN0IGFyZ3VtZW50IGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZmFjdG9yeUV4cHJlc3Npb24gRmFjdG9yeSBjYWxsYmFjayBleHByZXNzaW9uLlxuICogQHJldHVybnMgTWF0Y2ggc2VlZCB3aGVuIGFyZ3VtZW50cyBhcmUgc3VwcG9ydGVkLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlZWQgPSBjcmVhdGVTZWVkKHsgZXhwcmVzc2lvbjogeyBhcmd1bWVudHM6IFtdLCB0eXBlOiBcIkNhbGxFeHByZXNzaW9uXCIgfSwgdHlwZTogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfSBhcyBuZXZlciwgeyB0eXBlOiBcIkxpdGVyYWxcIiwgdmFsdWU6IFwiLi94XCIgfSBhcyBuZXZlciwgeyBib2R5OiB7IHByb3BlcnRpZXM6IFtdLCB0eXBlOiBcIk9iamVjdEV4cHJlc3Npb25cIiB9LCB0eXBlOiBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIgfSBhcyBuZXZlcik7XG4gKiB2b2lkIHNlZWQ7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VlZChcbiAgbW9ja1N0YXRlbWVudDogRVNUcmVlLkV4cHJlc3Npb25TdGF0ZW1lbnQsXG4gIHNwZWNpZmllckV4cHJlc3Npb246IEVTVHJlZS5FeHByZXNzaW9uLFxuICBmYWN0b3J5RXhwcmVzc2lvbjogRVNUcmVlLkV4cHJlc3Npb24sXG4pOiBNYXRjaFNlZWQgfCB1bmRlZmluZWQge1xuICBpZiAoIWhhc1JhbmdlKHNwZWNpZmllckV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IGdldE1vZHVsZVNwZWNpZmllcihzcGVjaWZpZXJFeHByZXNzaW9uKTtcbiAgY29uc3QgZmFjdG9yeU9iamVjdCA9IGdldEZhY3RvcnlSZXR1cm5PYmplY3QoZmFjdG9yeUV4cHJlc3Npb24pO1xuICByZXR1cm4gbW9kdWxlU3BlY2lmaWVyID09PSB2b2lkIDAgfHwgZmFjdG9yeU9iamVjdCA9PT0gdm9pZCAwXG4gICAgPyB2b2lkIDBcbiAgICA6IHsgZmFjdG9yeU9iamVjdCwgbW9ja1N0YXRlbWVudCwgbW9kdWxlU3BlY2lmaWVyLCBzcGVjaWZpZXJFeHByZXNzaW9uIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3QgdG9wLWxldmVsIGB2aS5tb2NrYCBvciBgdmkuZG9Nb2NrYCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0gcHJvZ3JhbSBQcm9ncmFtIG5vZGUuXG4gKiBAcmV0dXJucyBNYXRjaGluZyBleHByZXNzaW9uIHN0YXRlbWVudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGF0ZW1lbnQgPSBmaW5kTW9ja1N0YXRlbWVudCh7IGJvZHk6IFtdLCBzb3VyY2VUeXBlOiBcIm1vZHVsZVwiLCB0eXBlOiBcIlByb2dyYW1cIiB9IGFzIG5ldmVyKTtcbiAqIHZvaWQgc3RhdGVtZW50O1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGZpbmRNb2NrU3RhdGVtZW50KFxuICBwcm9ncmFtOiBFU1RyZWUuUHJvZ3JhbSxcbik6IEVTVHJlZS5FeHByZXNzaW9uU3RhdGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHByb2dyYW0uYm9keS5maW5kKFxuICAgIChzdGF0ZW1lbnQpOiBzdGF0ZW1lbnQgaXMgRVNUcmVlLkV4cHJlc3Npb25TdGF0ZW1lbnQgPT5cbiAgICAgIGlzTW9ja0V4cHJlc3Npb25TdGF0ZW1lbnQoc3RhdGVtZW50KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHNvcnRlZCB1bmlxdWUgaW1wb3J0IG5hbWVzIGZyb20gYmluZGluZ3MuXG4gKiBAcGFyYW0gYmluZGluZ3MgQmluZGluZ3MgbGlzdC5cbiAqIEByZXR1cm5zIFNvcnRlZCBpbXBvcnQgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbmFtZXMgPSBnZXRJbXBvcnROYW1lcyhbXSk7XG4gKiB2b2lkIG5hbWVzO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldEltcG9ydE5hbWVzKGJpbmRpbmdzOiBSdWxlTWF0Y2hbXCJiaW5kaW5nc1wiXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5uZXcgU2V0KGJpbmRpbmdzLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5leHBvcnRlZE5hbWUpKSxcbiAgXS50b1NvcnRlZCgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgbW9jayBjYWxsIGFyZ3VtZW50cyB3aGVuIGJvdGggYXJndW1lbnRzIGFyZSBzdXBwb3J0ZWQgZXhwcmVzc2lvbnMuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBDYWxsIGV4cHJlc3Npb24gbm9kZS5cbiAqIEByZXR1cm5zIEZpcnN0IGFuZCBzZWNvbmQgY2FsbCBhcmd1bWVudHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYXJncyA9IGdldE1vY2tDYWxsQXJndW1lbnRzKHsgYXJndW1lbnRzOiBbXSwgdHlwZTogXCJDYWxsRXhwcmVzc2lvblwiIH0gYXMgbmV2ZXIpO1xuICogdm9pZCBhcmdzO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldE1vY2tDYWxsQXJndW1lbnRzKFxuICBleHByZXNzaW9uOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb24sXG4pOiBbRVNUcmVlLkV4cHJlc3Npb24sIEVTVHJlZS5FeHByZXNzaW9uXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IFtmaXJzdEFyZ3VtZW50LCBzZWNvbmRBcmd1bWVudF0gPSBleHByZXNzaW9uLmFyZ3VtZW50cztcbiAgaWYgKGZpcnN0QXJndW1lbnQgPT09IHZvaWQgMCB8fCBzZWNvbmRBcmd1bWVudCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBpZiAoXG4gICAgZmlyc3RBcmd1bWVudC50eXBlID09PSBcIlNwcmVhZEVsZW1lbnRcIiB8fFxuICAgIHNlY29uZEFyZ3VtZW50LnR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiXG4gICkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICByZXR1cm4gW2ZpcnN0QXJndW1lbnQsIHNlY29uZEFyZ3VtZW50XTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHN0YXRlbWVudCBpcyBhIHN1cHBvcnRlZCBtb2NrIGV4cHJlc3Npb24gc3RhdGVtZW50LlxuICogQHBhcmFtIHN0YXRlbWVudCBDYW5kaWRhdGUgc3RhdGVtZW50LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHN0YXRlbWVudCBpcyBhIHN1cHBvcnRlZCBtb2NrIGNhbGwuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgb2sgPSBpc01vY2tFeHByZXNzaW9uU3RhdGVtZW50KHsgdHlwZTogXCJFbXB0eVN0YXRlbWVudFwiIH0gYXMgbmV2ZXIpO1xuICogdm9pZCBvaztcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc01vY2tFeHByZXNzaW9uU3RhdGVtZW50KFxuICBzdGF0ZW1lbnQ6IEVTVHJlZS5Qcm9ncmFtW1wiYm9keVwiXVtudW1iZXJdLFxuKTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZW1lbnQudHlwZSAhPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IGV4cHJlc3Npb24gfSA9IHN0YXRlbWVudDtcbiAgaWYgKFxuICAgIGV4cHJlc3Npb24udHlwZSAhPT0gXCJDYWxsRXhwcmVzc2lvblwiIHx8XG4gICAgZXhwcmVzc2lvbi5jYWxsZWUudHlwZSAhPT0gXCJNZW1iZXJFeHByZXNzaW9uXCJcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgeyBvYmplY3QsIHByb3BlcnR5IH0gPSBleHByZXNzaW9uLmNhbGxlZTtcbiAgcmV0dXJuIChcbiAgICBvYmplY3QudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICBvYmplY3QubmFtZSA9PT0gXCJ2aVwiICYmXG4gICAgcHJvcGVydHkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAocHJvcGVydHkubmFtZSA9PT0gXCJtb2NrXCIgfHwgcHJvcGVydHkubmFtZSA9PT0gXCJkb01vY2tcIilcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGxvY2FsLXRvLWV4cG9ydGVkIG1hcHBpbmcgZnJvbSBiaW5kaW5ncy5cbiAqIEBwYXJhbSBiaW5kaW5ncyBCaW5kaW5ncyBsaXN0LlxuICogQHJldHVybnMgTWFwcGluZyB1c2VkIGZvciByZXdyaXRlIGxvb2t1cC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtYXAgPSB0b0xvY2FsTWFwKFtdKTtcbiAqIHZvaWQgbWFwO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHRvTG9jYWxNYXAoYmluZGluZ3M6IFJ1bGVNYXRjaFtcImJpbmRpbmdzXCJdKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBuZXcgTWFwKFxuICAgIGJpbmRpbmdzLm1hcChcbiAgICAgIChiaW5kaW5nKSA9PiBbYmluZGluZy5sb2NhbE5hbWUsIGJpbmRpbmcuZXhwb3J0ZWROYW1lXSBhcyBjb25zdCxcbiAgICApLFxuICApO1xufVxuXG5leHBvcnQgeyBjb2xsZWN0TWF0Y2ggfTtcbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/testing/prefer-vi-mocked-import/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAMnC,6EAA6E;AAC7E,QAAA,MAAM,wBAAwB,EAAE,IAAI,CAAC,UA+BpC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,32 +0,0 @@
1
- import { createRuleDocumentation } from "../../custom-rule-documentation";
2
- import { buildFix } from "./fix";
3
- import { collectMatch } from "./match";
4
- /** Enforce inline `vi.fn()` mocks inside `vi.mock`/`vi.doMock` factories. */
5
- const preferViMockedImportRule = {
6
- create(context) {
7
- return {
8
- Program: () => {
9
- const match = collectMatch(context);
10
- if (match === void 0) {
11
- return;
12
- }
13
- context.report({
14
- fix: (fixer) => buildFix(match, fixer),
15
- messageId: "preferViMockedImport",
16
- node: match.node,
17
- });
18
- },
19
- };
20
- },
21
- meta: {
22
- docs: createRuleDocumentation("prefer-vi-mocked-import", "Prefer inlining vi.fn mocks in vi.mock/vi.doMock factories and using vi.mocked(...)."),
23
- fixable: "code",
24
- messages: {
25
- preferViMockedImport: "Inline vi.fn mocks in the vi.mock/vi.doMock factory and use vi.mocked(...) for calls.",
26
- },
27
- schema: [],
28
- type: "suggestion",
29
- },
30
- };
31
- export { preferViMockedImportRule };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3ByZWZlci12aS1tb2NrZWQtaW1wb3J0L3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXZDLDZFQUE2RTtBQUM3RSxNQUFNLHdCQUF3QixHQUFvQjtJQUNoRCxNQUFNLENBQUMsT0FBeUI7UUFDOUIsT0FBTztZQUNMLE9BQU8sRUFBRSxHQUFTLEVBQUU7Z0JBQ2xCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFcEMsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDckIsT0FBTztnQkFDVCxDQUFDO2dCQUVELE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ2IsR0FBRyxFQUFFLENBQUMsS0FBcUIsRUFBYyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7b0JBQ2xFLFNBQVMsRUFBRSxzQkFBc0I7b0JBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDakIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztTQUMwQixDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsdUJBQXVCLENBQzNCLHlCQUF5QixFQUN6QixzRkFBc0YsQ0FDdkY7UUFDRCxPQUFPLEVBQUUsTUFBTTtRQUNmLFFBQVEsRUFBRTtZQUNSLG9CQUFvQixFQUNsQix1RkFBdUY7U0FDMUY7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxZQUFZO0tBQ25CO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgeyBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbiB9IGZyb20gXCIuLi8uLi9jdXN0b20tcnVsZS1kb2N1bWVudGF0aW9uXCI7XG5pbXBvcnQgeyBidWlsZEZpeCB9IGZyb20gXCIuL2ZpeFwiO1xuaW1wb3J0IHsgY29sbGVjdE1hdGNoIH0gZnJvbSBcIi4vbWF0Y2hcIjtcblxuLyoqIEVuZm9yY2UgaW5saW5lIGB2aS5mbigpYCBtb2NrcyBpbnNpZGUgYHZpLm1vY2tgL2B2aS5kb01vY2tgIGZhY3Rvcmllcy4gKi9cbmNvbnN0IHByZWZlclZpTW9ja2VkSW1wb3J0UnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgUHJvZ3JhbTogKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbGxlY3RNYXRjaChjb250ZXh0KTtcblxuICAgICAgICBpZiAobWF0Y2ggPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXg6IChmaXhlcjogUnVsZS5SdWxlRml4ZXIpOiBSdWxlLkZpeFtdID0+IGJ1aWxkRml4KG1hdGNoLCBmaXhlciksXG4gICAgICAgICAgbWVzc2FnZUlkOiBcInByZWZlclZpTW9ja2VkSW1wb3J0XCIsXG4gICAgICAgICAgbm9kZTogbWF0Y2gubm9kZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0gc2F0aXNmaWVzIFJ1bGUuUnVsZUxpc3RlbmVyO1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogY3JlYXRlUnVsZURvY3VtZW50YXRpb24oXG4gICAgICBcInByZWZlci12aS1tb2NrZWQtaW1wb3J0XCIsXG4gICAgICBcIlByZWZlciBpbmxpbmluZyB2aS5mbiBtb2NrcyBpbiB2aS5tb2NrL3ZpLmRvTW9jayBmYWN0b3JpZXMgYW5kIHVzaW5nIHZpLm1vY2tlZCguLi4pLlwiLFxuICAgICksXG4gICAgZml4YWJsZTogXCJjb2RlXCIsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIHByZWZlclZpTW9ja2VkSW1wb3J0OlxuICAgICAgICBcIklubGluZSB2aS5mbiBtb2NrcyBpbiB0aGUgdmkubW9jay92aS5kb01vY2sgZmFjdG9yeSBhbmQgdXNlIHZpLm1vY2tlZCguLi4pIGZvciBjYWxscy5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogXCJzdWdnZXN0aW9uXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGUgfTtcbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/testing/prefer-vi-mocked-import/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qCAAqC;AACrC,UAAU,OAAO;IACf,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAElB,mDAAmD;IACnD,gBAAgB,EAAE,KAAK,CAAC;IAExB,oDAAoD;IACpD,aAAa,EAAE,KAAK,CAAC;IAErB,kEAAkE;IAClE,kBAAkB,EAAE,KAAK,CAAC;CAC3B;AAED,qCAAqC;AACrC,UAAU,WAAW;IACnB,4EAA4E;IAC5E,kBAAkB,EAAE,KAAK,CAAC;IAE1B,mEAAmE;IACnE,gBAAgB,EAAE,KAAK,CAAC;IAExB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,6CAA6C;IAC7C,cAAc,EAAE,KAAK,CAAC;CACvB;AAED,qCAAqC;AACrC,UAAU,gBAAgB;IACxB,wDAAwD;IACxD,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,qCAAqC;AACrC,UAAU,UAAU;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAE1B,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IAExB,mDAAmD;IACnD,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,qCAAqC;AACrC,UAAU,gBAAgB;IACxB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,8CAA8C;IAC9C,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B,gDAAgD;IAChD,KAAK,EAAE,KAAK,CAAC;CACd;AAED,qCAAqC;AACrC,UAAU,aAAa;IACrB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IAErB,oEAAoE;IACpE,gBAAgB,EAAE,KAAK,CAAC;CACzB;AAED,qCAAqC;AACrC,UAAU,SAAS;IACjB,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,EAAE,CAAC;IAEpB,kCAAkC;IAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEvC,oCAAoC;IACpC,UAAU,EAAE,UAAU,CAAC;IAEvB,qDAAqD;IACrD,cAAc,EAAE,aAAa,EAAE,CAAC;IAEhC,+DAA+D;IAC/D,+BAA+B,EAAE,OAAO,CAAC;IAEzC,4DAA4D;IAC5D,kBAAkB,EAAE,KAAK,CAAC;IAE1B,qCAAqC;IACrC,eAAe,EAAE,MAAM,CAAC;IAExB,mDAAmD;IACnD,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC;IAEvB,iCAAiC;IACjC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;IAEhB,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9wcmVmZXItdmktbW9ja2VkLWltcG9ydC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgdHlwZSB7IFJhbmdlIH0gZnJvbSBcIi4vbWF0Y2gtaGVscGVyc1wiO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgQmluZGluZyB7XG4gIC8qKiBOYW1lIG9mIHRoZSBtb2NrZWQgZXhwb3J0IChvYmplY3QgcHJvcGVydHkga2V5KS4gKi9cbiAgZXhwb3J0ZWROYW1lOiBzdHJpbmc7XG5cbiAgLyoqIExvY2FsIHZhcmlhYmxlIG5hbWUgcmVmZXJlbmNlZCBpbiB0aGUgbW9jayBmYWN0b3J5IG9iamVjdC4gKi9cbiAgbG9jYWxOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFJhbmdlIG9mIHRoZSBvYmplY3QgcHJvcGVydHkga2V5IGlkZW50aWZpZXIuICovXG4gIHByb3BlcnR5S2V5UmFuZ2U6IFJhbmdlO1xuXG4gIC8qKiBGdWxsIHJhbmdlIG9mIHRoZSBvYmplY3QgcHJvcGVydHkgdG8gcmVwbGFjZS4gKi9cbiAgcHJvcGVydHlSYW5nZTogUmFuZ2U7XG5cbiAgLyoqIFJhbmdlIG9mIHRoZSBpZGVudGlmaWVyIHRoYXQgcmVmZXJlbmNlcyB0aGUgbG9jYWwgdmFyaWFibGUuICovXG4gIHByb3BlcnR5VmFsdWVSYW5nZTogUmFuZ2U7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBEZWNsYXJhdGlvbiB7XG4gIC8qKiBSYW5nZSBvZiB0aGUgaWRlbnRpZmllciBiZWluZyBkZWNsYXJlZCAoZS5nLiBgeGAgaW4gYGNvbnN0IHggPSAuLi5gKS4gKi9cbiAgZGVjbGFyYXRpb25JZFJhbmdlOiBSYW5nZTtcblxuICAvKiogUmFuZ2Ugb2YgdGhlIGluaXRpYWxpemVyIGV4cHJlc3Npb24gKHRoZSBgdmkuZm4oLi4uKWAgY2FsbCkuICovXG4gIGluaXRpYWxpemVyUmFuZ2U6IFJhbmdlO1xuXG4gIC8qKiBMb2NhbCB2YXJpYWJsZSBuYW1lLiAqL1xuICBsb2NhbE5hbWU6IHN0cmluZztcblxuICAvKiogUmFuZ2Ugb2YgdGhlIGZ1bGwgc3RhdGVtZW50IHRvIHJlbW92ZS4gKi9cbiAgc3RhdGVtZW50UmFuZ2U6IFJhbmdlO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgSW1wb3J0SW5zZXJ0UGxhbiB7XG4gIC8qKiBSYW5nZSBvZiB0aGUgbGFzdCBpbXBvcnQgc3RhdGVtZW50LCB3aGVuIHByZXNlbnQuICovXG4gIGFmdGVyUmFuZ2U/OiBSYW5nZTtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIEltcG9ydFBsYW4ge1xuICAvKiogSW5zZXJ0IHBsYW4gd2hlbiBubyBjb21wYXRpYmxlIGltcG9ydCBleGlzdHMuICovXG4gIGluc2VydD86IEltcG9ydEluc2VydFBsYW47XG5cbiAgLyoqIE1vZHVsZSBzcGVjaWZpZXIgdG8gaW1wb3J0IGZyb20uICovXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xuXG4gIC8qKiBOYW1lcyB0aGF0IG11c3QgYmUgaW1wb3J0ZWQgZnJvbSB0aGUgbW9kdWxlLiAqL1xuICBuYW1lczogc3RyaW5nW107XG5cbiAgLyoqIFVwZGF0ZSBwbGFuIHdoZW4gYW4gaW1wb3J0IGNhbiBiZSB1cGRhdGVkIGluLXBsYWNlLiAqL1xuICB1cGRhdGU/OiBJbXBvcnRVcGRhdGVQbGFuO1xufVxuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgSW1wb3J0VXBkYXRlUGxhbiB7XG4gIC8qKiBEZWZhdWx0IGltcG9ydCBsb2NhbCBuYW1lLCB3aGVuIHByZXNlbnQuICovXG4gIGRlZmF1bHRJbXBvcnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBFeGlzdGluZyBuYW1lZCBpbXBvcnRzIGZyb20gdGhlIG1vZHVsZS4gKi9cbiAgZXhpc3RpbmdOYW1lZEltcG9ydHM6IHN0cmluZ1tdO1xuXG4gIC8qKiBSYW5nZSBvZiB0aGUgaW1wb3J0IHN0YXRlbWVudCB0byByZXBsYWNlLiAqL1xuICByYW5nZTogUmFuZ2U7XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbmludGVyZmFjZSBNZW1iZXJSZXdyaXRlIHtcbiAgLyoqIEV4cG9ydGVkIG5hbWUgdG8gdXNlIGluc2lkZSBgdmkubW9ja2VkKC4uLilgLiAqL1xuICBleHBvcnRlZE5hbWU6IHN0cmluZztcblxuICAvKiogUmFuZ2Ugb2YgdGhlIGlkZW50aWZpZXIgdXNlZCBhcyB0aGUgbWVtYmVyLWV4cHJlc3Npb24gb2JqZWN0LiAqL1xuICBsb2NhbE9iamVjdFJhbmdlOiBSYW5nZTtcbn1cblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xuaW50ZXJmYWNlIFJ1bGVNYXRjaCB7XG4gIC8qKiBCaW5kaW5ncyB0aGF0IGNhbiBiZSBpbmxpbmVkIGludG8gdGhlIG1vY2sgZmFjdG9yeS4gKi9cbiAgYmluZGluZ3M6IEJpbmRpbmdbXTtcblxuICAvKiogRGVjbGFyYXRpb25zIGJ5IGxvY2FsIG5hbWUuICovXG4gIGRlY2xhcmF0aW9uczogTWFwPHN0cmluZywgRGVjbGFyYXRpb24+O1xuXG4gIC8qKiBJbXBvcnQgaW5zZXJ0aW9uL3VwZGF0ZSBwbGFuLiAqL1xuICBpbXBvcnRQbGFuOiBJbXBvcnRQbGFuO1xuXG4gIC8qKiBNZW1iZXItZXhwcmVzc2lvbiByZXdyaXRlcyBmb3IgYC5tb2NrKmAgY2FsbHMuICovXG4gIG1lbWJlclJld3JpdGVzOiBNZW1iZXJSZXdyaXRlW107XG5cbiAgLyoqIFRydWUgd2hlbiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYWxyZWFkeSBgaW1wb3J0KFwiLi4uXCIpYC4gKi9cbiAgbW9ja1NwZWNpZmllcklzSW1wb3J0RXhwcmVzc2lvbjogYm9vbGVhbjtcblxuICAvKiogUmFuZ2Ugb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGB2aS5tb2NrYC9gdmkuZG9Nb2NrYC4gKi9cbiAgbW9ja1NwZWNpZmllclJhbmdlOiBSYW5nZTtcblxuICAvKiogTW9kdWxlIHNwZWNpZmllciBiZWluZyBtb2NrZWQuICovXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xuXG4gIC8qKiBQcmVmZXJyZWQgbmV3bGluZSBzZXF1ZW5jZSB1c2VkIGJ5IHRoZSBmaWxlLiAqL1xuICBuZXdsaW5lOiBcIlxcblwiIHwgXCJcXHJcXG5cIjtcblxuICAvKiogTm9kZSB0byB1c2UgZm9yIHJlcG9ydGluZy4gKi9cbiAgbm9kZTogUnVsZS5Ob2RlO1xuXG4gIC8qKiBGdWxsIHNvdXJjZSB0ZXh0LiAqL1xuICBzb3VyY2VUZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIHsgQmluZGluZywgRGVjbGFyYXRpb24sIEltcG9ydFBsYW4sIE1lbWJlclJld3JpdGUsIFJ1bGVNYXRjaCB9O1xuIl19
@@ -1,2 +0,0 @@
1
- export { requireAaaSectionsRule } from "./rule";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/require-aaa-sections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,2 +0,0 @@
1
- export { requireAaaSectionsRule } from "./rule";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9yZXF1aXJlLWFhYS1zZWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyByZXF1aXJlQWFhU2VjdGlvbnNSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/testing/require-aaa-sections/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAcnC,QAAA,MAAM,sBAAsB,EAAE,IAAI,CAAC,UA+BlC,CAAC;AAiJF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1,111 +0,0 @@
1
- import { createRuleDocumentation } from "../../custom-rule-documentation";
2
- import { aaaPhaseOrder, analyzeTestBlock, getLineStartRange, getPhaseBoundaryComments, hasBlankLineBeforeComment, } from "../aaa";
3
- const requireAaaSectionsRule = {
4
- create(context) {
5
- return {
6
- CallExpression(node) {
7
- const analysis = analyzeTestBlock(context, node);
8
- if (analysis === void 0) {
9
- return;
10
- }
11
- reportMissingSections(context, analysis);
12
- reportCodeBeforeArrange(context, analysis);
13
- reportBlankLineSeparators(context, analysis);
14
- },
15
- };
16
- },
17
- meta: {
18
- docs: createRuleDocumentation("require-aaa-sections", "Require strict // Arrange, // Act, and // Assert markers in supported test blocks."),
19
- fixable: "code",
20
- messages: {
21
- blankLineBeforeSection: "Insert a blank line before the // {{section}} section comment.",
22
- codeBeforeArrange: "Move setup statements below the first // Arrange section comment.",
23
- missingSections: "Add the missing AAA section comments: {{sections}}.",
24
- },
25
- schema: [],
26
- type: "layout",
27
- },
28
- };
29
- function reportBlankLineSeparators(context, analysis) {
30
- for (const sectionComment of getPhaseBoundaryComments(analysis)) {
31
- if (hasBlankLineBeforeComment(analysis.sourceText, sectionComment.comment)) {
32
- continue;
33
- }
34
- context.report({
35
- data: { section: sectionComment.phases.join(" & ") },
36
- fix: (fixer) => fixer.insertTextBeforeRange(getLineStartRange(analysis.sourceText, sectionComment.comment.loc.start.line), analysis.newline),
37
- messageId: "blankLineBeforeSection",
38
- node: sectionComment.comment,
39
- });
40
- }
41
- }
42
- function reportCodeBeforeArrange(context, analysis) {
43
- const firstArrangeLine = analysis.sectionComments.find((sectionComment) => sectionComment.phases.includes("Arrange"))?.comment.loc.start.line;
44
- if (firstArrangeLine === void 0) {
45
- return;
46
- }
47
- const statementBeforeArrange = analysis.statements.find((statement) => statement.node.loc.start.line < firstArrangeLine);
48
- if (statementBeforeArrange === void 0) {
49
- return;
50
- }
51
- context.report({
52
- messageId: "codeBeforeArrange",
53
- node: statementBeforeArrange.node,
54
- });
55
- }
56
- function reportMissingSections(context, analysis) {
57
- const presentSections = new Set(analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases));
58
- const missingSections = ["Arrange", "Act", "Assert"].filter((phase) => !presentSections.has(phase));
59
- if (missingSections.length === 0) {
60
- return;
61
- }
62
- context.report({
63
- data: { sections: missingSections.join(", ") },
64
- fix: analysis.bodyLineCount >= 3
65
- ? (fixer) => buildMissingSectionFixes(analysis, missingSections, fixer)
66
- : null,
67
- messageId: "missingSections",
68
- node: analysis.callExpression,
69
- });
70
- }
71
- function buildMissingSectionFixes(analysis, missingSections, fixer) {
72
- if (analysis.statements.length === 0) {
73
- return [];
74
- }
75
- const anchorMap = new Map();
76
- const sourceLines = analysis.sourceText.split(/\r\n|\n/u);
77
- const firstStatement = analysis.statements[0]?.node;
78
- const middleStatement = analysis.statements[Math.min(analysis.statements.length - 1, Math.floor(analysis.statements.length / 2))]?.node;
79
- const lastStatement = analysis.statements.at(-1)?.node;
80
- for (const phase of missingSections) {
81
- const anchorNode = phase === "Arrange"
82
- ? firstStatement
83
- : phase === "Act"
84
- ? middleStatement
85
- : lastStatement;
86
- /* v8 ignore start -- guarded by the empty-statements early return above. */
87
- if (anchorNode === void 0) {
88
- continue;
89
- }
90
- /* v8 ignore stop */
91
- const existing = anchorMap.get(anchorNode.range[0]) ?? [];
92
- existing.push(phase);
93
- anchorMap.set(anchorNode.range[0], existing);
94
- }
95
- return [...anchorMap.entries()].map(([offset, phases]) => {
96
- const sortedPhases = phases.toSorted((left, right) => aaaPhaseOrder[left] - aaaPhaseOrder[right]);
97
- const statementLine = analysis.sourceText
98
- .slice(0, offset)
99
- .split(/\r\n|\n/u).length;
100
- /* v8 ignore start -- fixer anchors always point to real statement lines in analyzed test blocks. */
101
- const previousLine = sourceLines[statementLine - 2] ?? "";
102
- const lineStartRange = getLineStartRange(analysis.sourceText, statementLine);
103
- const needsLeadingBlankLine = sortedPhases.some((phase) => phase !== "Arrange") &&
104
- previousLine.trim().length > 0;
105
- const indentation = /^\s*/u.exec(sourceLines[statementLine - 1] ?? "")?.[0] ?? "";
106
- /* v8 ignore stop */
107
- return fixer.insertTextBeforeRange(lineStartRange, `${needsLeadingBlankLine ? analysis.newline : ""}${indentation}// ${sortedPhases.join(" & ")}${analysis.newline}`);
108
- });
109
- }
110
- export { requireAaaSectionsRule };
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3JlcXVpcmUtYWFhLXNlY3Rpb25zL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsRUFFaEIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4Qix5QkFBeUIsR0FDMUIsTUFBTSxRQUFRLENBQUM7QUFFaEIsTUFBTSxzQkFBc0IsR0FBb0I7SUFDOUMsTUFBTSxDQUFDLE9BQXlCO1FBQzlCLE9BQU87WUFDTCxjQUFjLENBQUMsSUFBSTtnQkFDakIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLFFBQVEsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN4QixPQUFPO2dCQUNULENBQUM7Z0JBRUQscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN6Qyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvQyxDQUFDO1NBQzBCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksRUFBRTtRQUNKLElBQUksRUFBRSx1QkFBdUIsQ0FDM0Isc0JBQXNCLEVBQ3RCLG9GQUFvRixDQUNyRjtRQUNELE9BQU8sRUFBRSxNQUFNO1FBQ2YsUUFBUSxFQUFFO1lBQ1Isc0JBQXNCLEVBQ3BCLGdFQUFnRTtZQUNsRSxpQkFBaUIsRUFDZixtRUFBbUU7WUFDckUsZUFBZSxFQUFFLHFEQUFxRDtTQUN2RTtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFFBQVE7S0FDZjtDQUNGLENBQUM7QUFFRixTQUFTLHlCQUF5QixDQUNoQyxPQUF5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Q0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hFLG9CQUFvQjtRQUVwQixPQUFPLEtBQUssQ0FBQyxxQkFBcUIsQ0FDaEMsY0FBYyxFQUNkLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxXQUFXLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQ2xILENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBBYWFQaGFzZSwgVGVzdEJsb2NrQW5hbHlzaXMgfSBmcm9tIFwiLi4vYWFhXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbS1ydWxlLWRvY3VtZW50YXRpb25cIjtcbmltcG9ydCB7XG4gIGFhYVBoYXNlT3JkZXIsXG4gIGFuYWx5emVUZXN0QmxvY2ssXG4gIGdldEluZGVudGF0aW9uQXRPZmZzZXQsXG4gIGdldExpbmVTdGFydFJhbmdlLFxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXG4gIGhhc0JsYW5rTGluZUJlZm9yZUNvbW1lbnQsXG59IGZyb20gXCIuLi9hYWFcIjtcblxuY29uc3QgcmVxdWlyZUFhYVNlY3Rpb25zUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbmFseXNpcyA9IGFuYWx5emVUZXN0QmxvY2soY29udGV4dCwgbm9kZSk7XG4gICAgICAgIGlmIChhbmFseXNpcyA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwb3J0TWlzc2luZ1NlY3Rpb25zKGNvbnRleHQsIGFuYWx5c2lzKTtcbiAgICAgICAgcmVwb3J0Q29kZUJlZm9yZUFycmFuZ2UoY29udGV4dCwgYW5hbHlzaXMpO1xuICAgICAgICByZXBvcnRCbGFua0xpbmVTZXBhcmF0b3JzKGNvbnRleHQsIGFuYWx5c2lzKTtcbiAgICAgIH0sXG4gICAgfSBzYXRpc2ZpZXMgUnVsZS5SdWxlTGlzdGVuZXI7XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbihcbiAgICAgIFwicmVxdWlyZS1hYWEtc2VjdGlvbnNcIixcbiAgICAgIFwiUmVxdWlyZSBzdHJpY3QgLy8gQXJyYW5nZSwgLy8gQWN0LCBhbmQgLy8gQXNzZXJ0IG1hcmtlcnMgaW4gc3VwcG9ydGVkIHRlc3QgYmxvY2tzLlwiLFxuICAgICksXG4gICAgZml4YWJsZTogXCJjb2RlXCIsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIGJsYW5rTGluZUJlZm9yZVNlY3Rpb246XG4gICAgICAgIFwiSW5zZXJ0IGEgYmxhbmsgbGluZSBiZWZvcmUgdGhlIC8vIHt7c2VjdGlvbn19IHNlY3Rpb24gY29tbWVudC5cIixcbiAgICAgIGNvZGVCZWZvcmVBcnJhbmdlOlxuICAgICAgICBcIk1vdmUgc2V0dXAgc3RhdGVtZW50cyBiZWxvdyB0aGUgZmlyc3QgLy8gQXJyYW5nZSBzZWN0aW9uIGNvbW1lbnQuXCIsXG4gICAgICBtaXNzaW5nU2VjdGlvbnM6IFwiQWRkIHRoZSBtaXNzaW5nIEFBQSBzZWN0aW9uIGNvbW1lbnRzOiB7e3NlY3Rpb25zfX0uXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwibGF5b3V0XCIsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiByZXBvcnRCbGFua0xpbmVTZXBhcmF0b3JzKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBzZWN0aW9uQ29tbWVudCBvZiBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMoYW5hbHlzaXMpKSB7XG4gICAgaWYgKFxuICAgICAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudChhbmFseXNpcy5zb3VyY2VUZXh0LCBzZWN0aW9uQ29tbWVudC5jb21tZW50KVxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgZGF0YTogeyBzZWN0aW9uOiBzZWN0aW9uQ29tbWVudC5waGFzZXMuam9pbihcIiAmIFwiKSB9LFxuICAgICAgZml4OiAoZml4ZXIpID0+XG4gICAgICAgIGZpeGVyLmluc2VydFRleHRCZWZvcmVSYW5nZShcbiAgICAgICAgICBnZXRMaW5lU3RhcnRSYW5nZShcbiAgICAgICAgICAgIGFuYWx5c2lzLnNvdXJjZVRleHQsXG4gICAgICAgICAgICBzZWN0aW9uQ29tbWVudC5jb21tZW50LmxvYy5zdGFydC5saW5lLFxuICAgICAgICAgICksXG4gICAgICAgICAgYW5hbHlzaXMubmV3bGluZSxcbiAgICAgICAgKSxcbiAgICAgIG1lc3NhZ2VJZDogXCJibGFua0xpbmVCZWZvcmVTZWN0aW9uXCIsXG4gICAgICBub2RlOiBzZWN0aW9uQ29tbWVudC5jb21tZW50LFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgY29uc3QgZmlyc3RBcnJhbmdlTGluZSA9IGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5maW5kKChzZWN0aW9uQ29tbWVudCkgPT5cbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBcnJhbmdlXCIpLFxuICApPy5jb21tZW50LmxvYy5zdGFydC5saW5lO1xuICBpZiAoZmlyc3RBcnJhbmdlTGluZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50QmVmb3JlQXJyYW5nZSA9IGFuYWx5c2lzLnN0YXRlbWVudHMuZmluZChcbiAgICAoc3RhdGVtZW50KSA9PiBzdGF0ZW1lbnQubm9kZS5sb2Muc3RhcnQubGluZSA8IGZpcnN0QXJyYW5nZUxpbmUsXG4gICk7XG4gIGlmIChzdGF0ZW1lbnRCZWZvcmVBcnJhbmdlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZXh0LnJlcG9ydCh7XG4gICAgbWVzc2FnZUlkOiBcImNvZGVCZWZvcmVBcnJhbmdlXCIsXG4gICAgbm9kZTogc3RhdGVtZW50QmVmb3JlQXJyYW5nZS5ub2RlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVwb3J0TWlzc2luZ1NlY3Rpb25zKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgY29uc3QgcHJlc2VudFNlY3Rpb25zID0gbmV3IFNldChcbiAgICBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuZmxhdE1hcCgoc2VjdGlvbkNvbW1lbnQpID0+IHNlY3Rpb25Db21tZW50LnBoYXNlcyksXG4gICk7XG4gIGNvbnN0IG1pc3NpbmdTZWN0aW9ucyA9IChbXCJBcnJhbmdlXCIsIFwiQWN0XCIsIFwiQXNzZXJ0XCJdIGFzIGNvbnN0KS5maWx0ZXIoXG4gICAgKHBoYXNlKSA9PiAhcHJlc2VudFNlY3Rpb25zLmhhcyhwaGFzZSksXG4gICk7XG5cbiAgaWYgKG1pc3NpbmdTZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZXh0LnJlcG9ydCh7XG4gICAgZGF0YTogeyBzZWN0aW9uczogbWlzc2luZ1NlY3Rpb25zLmpvaW4oXCIsIFwiKSB9LFxuICAgIGZpeDpcbiAgICAgIGFuYWx5c2lzLmJvZHlMaW5lQ291bnQgPj0gM1xuICAgICAgICA/IChmaXhlcikgPT4gYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzKGFuYWx5c2lzLCBtaXNzaW5nU2VjdGlvbnMsIGZpeGVyKVxuICAgICAgICA6IG51bGwsXG4gICAgbWVzc2FnZUlkOiBcIm1pc3NpbmdTZWN0aW9uc1wiLFxuICAgIG5vZGU6IGFuYWx5c2lzLmNhbGxFeHByZXNzaW9uLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzKFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4gIG1pc3NpbmdTZWN0aW9uczogcmVhZG9ubHkgQWFhUGhhc2VbXSxcbiAgZml4ZXI6IFJ1bGUuUnVsZUZpeGVyLFxuKTogUnVsZS5GaXhbXSB7XG4gIGlmIChhbmFseXNpcy5zdGF0ZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGFuY2hvck1hcCA9IG5ldyBNYXA8bnVtYmVyLCBBYWFQaGFzZVtdPigpO1xuICBjb25zdCBzb3VyY2VMaW5lcyA9IGFuYWx5c2lzLnNvdXJjZVRleHQuc3BsaXQoL1xcclxcbnxcXG4vdSk7XG4gIGNvbnN0IGZpcnN0U3RhdGVtZW50ID0gYW5hbHlzaXMuc3RhdGVtZW50c1swXT8ubm9kZTtcbiAgY29uc3QgbWlkZGxlU3RhdGVtZW50ID1cbiAgICBhbmFseXNpcy5zdGF0ZW1lbnRzW1xuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGFuYWx5c2lzLnN0YXRlbWVudHMubGVuZ3RoIC0gMSxcbiAgICAgICAgTWF0aC5mbG9vcihhbmFseXNpcy5zdGF0ZW1lbnRzLmxlbmd0aCAvIDIpLFxuICAgICAgKVxuICAgIF0/Lm5vZGU7XG4gIGNvbnN0IGxhc3RTdGF0ZW1lbnQgPSBhbmFseXNpcy5zdGF0ZW1lbnRzLmF0KC0xKT8ubm9kZTtcblxuICBmb3IgKGNvbnN0IHBoYXNlIG9mIG1pc3NpbmdTZWN0aW9ucykge1xuICAgIGNvbnN0IGFuY2hvck5vZGUgPVxuICAgICAgcGhhc2UgPT09IFwiQXJyYW5nZVwiXG4gICAgICAgID8gZmlyc3RTdGF0ZW1lbnRcbiAgICAgICAgOiBwaGFzZSA9PT0gXCJBY3RcIlxuICAgICAgICAgID8gbWlkZGxlU3RhdGVtZW50XG4gICAgICAgICAgOiBsYXN0U3RhdGVtZW50O1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBndWFyZGVkIGJ5IHRoZSBlbXB0eS1zdGF0ZW1lbnRzIGVhcmx5IHJldHVybiBhYm92ZS4gKi9cbiAgICBpZiAoYW5jaG9yTm9kZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICAgIGNvbnN0IGV4aXN0aW5nID0gYW5jaG9yTWFwLmdldChhbmNob3JOb2RlLnJhbmdlWzBdKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKHBoYXNlKTtcbiAgICBhbmNob3JNYXAuc2V0KGFuY2hvck5vZGUucmFuZ2VbMF0sIGV4aXN0aW5nKTtcbiAgfVxuXG4gIHJldHVybiBbLi4uYW5jaG9yTWFwLmVudHJpZXMoKV0ubWFwKChbb2Zmc2V0LCBwaGFzZXNdKSA9PiB7XG4gICAgY29uc3Qgc29ydGVkUGhhc2VzID0gcGhhc2VzLnRvU29ydGVkKFxuICAgICAgKGxlZnQsIHJpZ2h0KSA9PiBhYWFQaGFzZU9yZGVyW2xlZnRdIC0gYWFhUGhhc2VPcmRlcltyaWdodF0sXG4gICAgKTtcbiAgICBjb25zdCBzdGF0ZW1lbnRMaW5lID0gYW5hbHlzaXMuc291cmNlVGV4dFxuICAgICAgLnNsaWNlKDAsIG9mZnNldClcbiAgICAgIC5zcGxpdCgvXFxyXFxufFxcbi91KS5sZW5ndGg7XG4gICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIGZpeGVyIGFuY2hvcnMgYWx3YXlzIHBvaW50IHRvIHJlYWwgc3RhdGVtZW50IGxpbmVzIGluIGFuYWx5emVkIHRlc3QgYmxvY2tzLiAqL1xuICAgIGNvbnN0IHByZXZpb3VzTGluZSA9IHNvdXJjZUxpbmVzW3N0YXRlbWVudExpbmUgLSAyXSA/PyBcIlwiO1xuICAgIGNvbnN0IGxpbmVTdGFydFJhbmdlID0gZ2V0TGluZVN0YXJ0UmFuZ2UoXG4gICAgICBhbmFseXNpcy5zb3VyY2VUZXh0LFxuICAgICAgc3RhdGVtZW50TGluZSxcbiAgICApO1xuICAgIGNvbnN0IG5lZWRzTGVhZGluZ0JsYW5rTGluZSA9XG4gICAgICBzb3J0ZWRQaGFzZXMuc29tZSgocGhhc2UpID0+IHBoYXNlICE9PSBcIkFycmFuZ2VcIikgJiZcbiAgICAgIHByZXZpb3VzTGluZS50cmltKCkubGVuZ3RoID4gMDtcbiAgICBjb25zdCBpbmRlbnRhdGlvbiA9XG4gICAgICAvXlxccyovdS5leGVjKHNvdXJjZUxpbmVzW3N0YXRlbWVudExpbmUgLSAxXSA/PyBcIlwiKT8uWzBdID8/IFwiXCI7XG4gICAgLyogdjggaWdub3JlIHN0b3AgKi9cblxuICAgIHJldHVybiBmaXhlci5pbnNlcnRUZXh0QmVmb3JlUmFuZ2UoXG4gICAgICBsaW5lU3RhcnRSYW5nZSxcbiAgICAgIGAke25lZWRzTGVhZGluZ0JsYW5rTGluZSA/IGFuYWx5c2lzLm5ld2xpbmUgOiBcIlwifSR7aW5kZW50YXRpb259Ly8gJHtzb3J0ZWRQaGFzZXMuam9pbihcIiAmIFwiKX0ke2FuYWx5c2lzLm5ld2xpbmV9YCxcbiAgICApO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgcmVxdWlyZUFhYVNlY3Rpb25zUnVsZSB9O1xuIl19
@@ -1,2 +0,0 @@
1
- export { requireActResultCaptureRule } from "./rule";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/require-act-result-capture/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,2 +0,0 @@
1
- export { requireActResultCaptureRule } from "./rule";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9yZXF1aXJlLWFjdC1yZXN1bHQtY2FwdHVyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyByZXF1aXJlQWN0UmVzdWx0Q2FwdHVyZVJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG4iXX0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../src/testing/require-act-result-capture/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAKnC,QAAA,MAAM,2BAA2B,EAAE,IAAI,CAAC,UAqCvC,CAAC;AAEF,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -1,34 +0,0 @@
1
- import { createRuleDocumentation } from "../../custom-rule-documentation";
2
- import { analyzeTestBlock, hasCapturableActResult } from "../aaa";
3
- const requireActResultCaptureRule = {
4
- create(context) {
5
- return {
6
- CallExpression(node) {
7
- const analysis = analyzeTestBlock(context, node);
8
- if (analysis === void 0) {
9
- return;
10
- }
11
- for (const statement of analysis.statements) {
12
- if (statement.phase !== "Act" ||
13
- !hasCapturableActResult(statement.node)) {
14
- continue;
15
- }
16
- context.report({
17
- messageId: "captureActResult",
18
- node: statement.node,
19
- });
20
- }
21
- },
22
- };
23
- },
24
- meta: {
25
- docs: createRuleDocumentation("require-act-result-capture", "Require non-void Act expressions to store the observed result before assertions."),
26
- messages: {
27
- captureActResult: "Capture the // Act result in a named variable before asserting on it.",
28
- },
29
- schema: [],
30
- type: "suggestion",
31
- },
32
- };
33
- export { requireActResultCaptureRule };
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3JlcXVpcmUtYWN0LXJlc3VsdC1jYXB0dXJlL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWxFLE1BQU0sMkJBQTJCLEdBQW9CO0lBQ25ELE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPO1lBQ0wsY0FBYyxDQUFDLElBQUk7Z0JBQ2pCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsT0FBTztnQkFDVCxDQUFDO2dCQUVELEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM1QyxJQUNFLFNBQVMsQ0FBQyxLQUFLLEtBQUssS0FBSzt3QkFDekIsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ3ZDLENBQUM7d0JBQ0QsU0FBUztvQkFDWCxDQUFDO29CQUVELE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ2IsU0FBUyxFQUFFLGtCQUFrQjt3QkFDN0IsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO3FCQUNyQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7U0FDMEIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLHVCQUF1QixDQUMzQiw0QkFBNEIsRUFDNUIsa0ZBQWtGLENBQ25GO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsZ0JBQWdCLEVBQ2QsdUVBQXVFO1NBQzFFO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsWUFBWTtLQUNuQjtDQUNGLENBQUM7QUFFRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgY3JlYXRlUnVsZURvY3VtZW50YXRpb24gfSBmcm9tIFwiLi4vLi4vY3VzdG9tLXJ1bGUtZG9jdW1lbnRhdGlvblwiO1xuaW1wb3J0IHsgYW5hbHl6ZVRlc3RCbG9jaywgaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdCB9IGZyb20gXCIuLi9hYWFcIjtcblxuY29uc3QgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFuYWx5c2lzID0gYW5hbHl6ZVRlc3RCbG9jayhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgaWYgKGFuYWx5c2lzID09PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbmFseXNpcy5zdGF0ZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhdGVtZW50LnBoYXNlICE9PSBcIkFjdFwiIHx8XG4gICAgICAgICAgICAhaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdChzdGF0ZW1lbnQubm9kZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJjYXB0dXJlQWN0UmVzdWx0XCIsXG4gICAgICAgICAgICBub2RlOiBzdGF0ZW1lbnQubm9kZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9IHNhdGlzZmllcyBSdWxlLlJ1bGVMaXN0ZW5lcjtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uKFxuICAgICAgXCJyZXF1aXJlLWFjdC1yZXN1bHQtY2FwdHVyZVwiLFxuICAgICAgXCJSZXF1aXJlIG5vbi12b2lkIEFjdCBleHByZXNzaW9ucyB0byBzdG9yZSB0aGUgb2JzZXJ2ZWQgcmVzdWx0IGJlZm9yZSBhc3NlcnRpb25zLlwiLFxuICAgICksXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIGNhcHR1cmVBY3RSZXN1bHQ6XG4gICAgICAgIFwiQ2FwdHVyZSB0aGUgLy8gQWN0IHJlc3VsdCBpbiBhIG5hbWVkIHZhcmlhYmxlIGJlZm9yZSBhc3NlcnRpbmcgb24gaXQuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwic3VnZ2VzdGlvblwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlIH07XG4iXX0=
@@ -1,3 +0,0 @@
1
- export { buildListenerForFilename, getOptions, } from "./require-test-companion-utilities";
2
- export { requireTestCompanionRule } from "./rule";
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/require-test-companion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,UAAU,GACX,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC"}
@@ -1,3 +0,0 @@
1
- export { buildListenerForFilename, getOptions, } from "./require-test-companion-utilities";
2
- export { requireTestCompanionRule } from "./rule";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9yZXF1aXJlLXRlc3QtY29tcGFuaW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsVUFBVSxHQUNYLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgYnVpbGRMaXN0ZW5lckZvckZpbGVuYW1lLFxuICBnZXRPcHRpb25zLFxufSBmcm9tIFwiLi9yZXF1aXJlLXRlc3QtY29tcGFuaW9uLXV0aWxpdGllc1wiO1xuZXhwb3J0IHsgcmVxdWlyZVRlc3RDb21wYW5pb25SdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"require-test-companion-listeners.d.ts","sourceRoot":"","sources":["../../../src/testing/require-test-companion/require-test-companion-listeners.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAKnC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAuLlF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,wBAAwB,GAC5B,SAAS,IAAI,CAAC,WAAW,EACzB,UAAU,MAAM,EAChB,SAAS,yBAAyB,KACjC,IAAI,CAAC,YAuBP,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}