@codeperfect/eslint-plugin 1.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/README.md +26 -4
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{custom-rules.d.ts → application/custom-rules.d.ts} +3 -0
  4. package/dist/application/custom-rules.d.ts.map +1 -0
  5. package/dist/application/custom-rules.js +74 -0
  6. package/dist/application/index.d.ts +4 -0
  7. package/dist/application/index.d.ts.map +1 -0
  8. package/dist/application/index.js +3 -0
  9. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +56 -0
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -0
  12. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +149 -0
  13. package/dist/{architecture → domain/architecture}/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +4 -4
  14. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
  15. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +98 -0
  16. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +45 -0
  17. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
  18. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +64 -0
  19. package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +5 -4
  20. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
  21. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +87 -0
  22. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
  23. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +145 -0
  24. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +5 -0
  25. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -0
  26. package/dist/domain/architecture/consistent-barrel-files/index.js +4 -0
  27. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
  28. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +90 -0
  29. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +1 -1
  30. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
  31. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +91 -0
  32. package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +4 -6
  33. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
  34. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +95 -0
  35. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
  36. package/dist/domain/architecture/consistent-barrel-files/rule.js +51 -0
  37. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +4 -0
  38. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +1 -0
  39. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +4 -0
  40. package/dist/{architecture → domain/architecture}/consistent-barrel-files/test-helpers.d.ts +48 -48
  41. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
  42. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +20 -0
  43. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +1 -0
  44. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +25 -0
  45. package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +235 -0
  46. package/dist/domain/architecture/consistent-barrel-files/types.d.ts +19 -0
  47. package/dist/domain/architecture/consistent-barrel-files/types.d.ts.map +1 -0
  48. package/dist/domain/architecture/consistent-barrel-files/types.js +2 -0
  49. package/dist/{architecture → domain/architecture}/index.d.ts +1 -1
  50. package/dist/domain/architecture/index.d.ts.map +1 -0
  51. package/dist/domain/architecture/index.js +2 -0
  52. package/dist/{core → domain/core}/index.d.ts +2 -2
  53. package/dist/domain/core/index.d.ts.map +1 -0
  54. package/dist/domain/core/index.js +3 -0
  55. package/dist/domain/core/no-multiple-declarators/index.d.ts +2 -0
  56. package/dist/domain/core/no-multiple-declarators/index.d.ts.map +1 -0
  57. package/dist/domain/core/no-multiple-declarators/index.js +2 -0
  58. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +101 -0
  59. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +1 -0
  60. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +108 -0
  61. package/dist/{core → domain/core}/no-multiple-declarators/rule.d.ts +1 -0
  62. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -0
  63. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +35 -0
  64. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +1 -0
  65. package/dist/domain/core/no-multiple-declarators/rule.fixes.js +95 -0
  66. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +4 -0
  67. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +1 -0
  68. package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +4 -0
  69. package/dist/domain/core/no-multiple-declarators/rule.js +222 -0
  70. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +4 -0
  71. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +1 -0
  72. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +4 -0
  73. package/dist/domain/core/no-multiple-declarators/types.d.ts +77 -0
  74. package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -0
  75. package/dist/domain/core/no-multiple-declarators/types.js +38 -0
  76. package/dist/domain/core/prefer-interface-types/index.d.ts +2 -0
  77. package/dist/domain/core/prefer-interface-types/index.d.ts.map +1 -0
  78. package/dist/domain/core/prefer-interface-types/index.js +2 -0
  79. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -0
  80. package/dist/domain/core/prefer-interface-types/rule.js +148 -0
  81. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
  82. package/dist/domain/core/prefer-interface-types/test-helpers.js +116 -0
  83. package/dist/{custom-rule-documentation.d.ts → domain/custom-rule-documentation.d.ts} +3 -1
  84. package/dist/domain/custom-rule-documentation.d.ts.map +1 -0
  85. package/dist/domain/custom-rule-documentation.js +36 -0
  86. package/dist/domain/docs/index.d.ts +4 -0
  87. package/dist/domain/docs/index.d.ts.map +1 -0
  88. package/dist/domain/docs/index.js +4 -0
  89. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
  90. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
  91. package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities.d.ts +1 -1
  92. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
  93. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +146 -0
  94. package/dist/domain/docs/no-interface-member-docs/index.d.ts +2 -0
  95. package/dist/domain/docs/no-interface-member-docs/index.d.ts.map +1 -0
  96. package/dist/domain/docs/no-interface-member-docs/index.js +2 -0
  97. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-tags.d.ts +1 -1
  98. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
  99. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +101 -0
  100. package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-utilities.d.ts +1 -1
  101. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
  102. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +125 -0
  103. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -0
  104. package/dist/domain/docs/no-interface-member-docs/rule.js +171 -0
  105. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
  106. package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.js +2 -2
  107. package/dist/{docs → domain/docs}/no-interface-member-docs/types.d.ts +2 -2
  108. package/dist/domain/docs/no-interface-member-docs/types.d.ts.map +1 -0
  109. package/dist/domain/docs/no-interface-member-docs/types.js +2 -0
  110. package/dist/domain/docs/require-example-language/create-fixer.d.ts +5 -0
  111. package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +1 -0
  112. package/dist/domain/docs/require-example-language/create-fixer.js +5 -0
  113. package/dist/domain/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
  114. package/dist/domain/docs/require-example-language/empty-fence-fixes.js +169 -0
  115. package/dist/domain/docs/require-example-language/example-utilities.d.ts.map +1 -0
  116. package/dist/domain/docs/require-example-language/example-utilities.js +76 -0
  117. package/dist/{docs → domain/docs}/require-example-language/examples.d.ts +1 -1
  118. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -0
  119. package/dist/domain/docs/require-example-language/examples.js +181 -0
  120. package/dist/{docs → domain/docs}/require-example-language/fixes.d.ts +2 -2
  121. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -0
  122. package/dist/domain/docs/require-example-language/fixes.js +182 -0
  123. package/dist/domain/docs/require-example-language/index.d.ts +3 -0
  124. package/dist/domain/docs/require-example-language/index.d.ts.map +1 -0
  125. package/dist/domain/docs/require-example-language/index.js +2 -0
  126. package/dist/{docs → domain/docs}/require-example-language/reporting.d.ts +1 -1
  127. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -0
  128. package/dist/domain/docs/require-example-language/reporting.js +148 -0
  129. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -0
  130. package/dist/domain/docs/require-example-language/rule.js +37 -0
  131. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -0
  132. package/dist/domain/docs/require-example-language/types.js +2 -0
  133. package/dist/domain/docs/single-line-jsdoc/index.d.ts +2 -0
  134. package/dist/domain/docs/single-line-jsdoc/index.d.ts.map +1 -0
  135. package/dist/domain/docs/single-line-jsdoc/index.js +2 -0
  136. package/dist/domain/docs/single-line-jsdoc/rule.d.ts +4 -0
  137. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -0
  138. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +4 -0
  139. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +1 -0
  140. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +5 -0
  141. package/dist/domain/docs/single-line-jsdoc/rule.js +201 -0
  142. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +4 -0
  143. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +1 -0
  144. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +5 -0
  145. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
  146. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
  147. package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +1 -1
  148. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
  149. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
  150. package/dist/domain/docs/test-helpers.d.ts.map +1 -0
  151. package/dist/domain/docs/test-helpers.js +107 -0
  152. package/dist/domain/index.d.ts +6 -0
  153. package/dist/domain/index.d.ts.map +1 -0
  154. package/dist/domain/index.js +6 -0
  155. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +34 -0
  156. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -0
  157. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +145 -0
  158. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -0
  159. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +203 -0
  160. package/dist/domain/testing/aaa/analyzer.analysis.js +82 -0
  161. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts +4 -0
  162. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts.map +1 -0
  163. package/dist/domain/testing/aaa/analyzer.analysis.unsupported.js +4 -0
  164. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +18 -0
  165. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -0
  166. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts +4 -0
  167. package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts.map +1 -0
  168. package/dist/domain/testing/aaa/analyzer.assertions.destructured.js +4 -0
  169. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +95 -0
  170. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
  171. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +185 -0
  172. package/dist/domain/testing/aaa/analyzer.assertions.js +33 -0
  173. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +64 -0
  174. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
  175. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +105 -0
  176. package/dist/domain/testing/aaa/analyzer.classification.d.ts +16 -0
  177. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -0
  178. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +77 -0
  179. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
  180. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +203 -0
  181. package/dist/domain/testing/aaa/analyzer.classification.js +31 -0
  182. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +9 -0
  183. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +1 -0
  184. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +10 -0
  185. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts +4 -0
  186. package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts.map +1 -0
  187. package/dist/domain/testing/aaa/analyzer.classification.mutations.js +4 -0
  188. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +15 -0
  189. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
  190. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +34 -0
  191. package/dist/domain/testing/aaa/analyzer.d.ts +46 -0
  192. package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -0
  193. package/dist/domain/testing/aaa/analyzer.js +59 -0
  194. package/dist/domain/testing/aaa/analyzer.super.d.ts +106 -0
  195. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -0
  196. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +27 -0
  197. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
  198. package/dist/domain/testing/aaa/analyzer.super.helpers.js +66 -0
  199. package/dist/domain/testing/aaa/analyzer.super.js +211 -0
  200. package/dist/{testing → domain/testing}/aaa/index.d.ts +2 -2
  201. package/dist/domain/testing/aaa/index.d.ts.map +1 -0
  202. package/dist/domain/testing/aaa/index.js +2 -0
  203. package/dist/domain/testing/aaa/types.d.ts +58 -0
  204. package/dist/domain/testing/aaa/types.d.ts.map +1 -0
  205. package/dist/domain/testing/aaa/types.js +2 -0
  206. package/dist/domain/testing/assert-actual-expected-names/index.d.ts +2 -0
  207. package/dist/domain/testing/assert-actual-expected-names/index.d.ts.map +1 -0
  208. package/dist/domain/testing/assert-actual-expected-names/index.js +2 -0
  209. package/dist/{testing → domain/testing}/assert-actual-expected-names/rule.d.ts +1 -0
  210. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
  211. package/dist/domain/testing/assert-actual-expected-names/rule.js +116 -0
  212. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
  213. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
  214. package/dist/domain/testing/enforce-aaa-phase-purity/index.js +2 -0
  215. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts +13 -0
  216. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -0
  217. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +134 -0
  218. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +25 -0
  219. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -0
  220. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +138 -0
  221. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts +4 -0
  222. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts.map +1 -0
  223. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js +4 -0
  224. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts +4 -0
  225. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts.map +1 -0
  226. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js +4 -0
  227. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +4 -0
  228. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +1 -0
  229. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +4 -0
  230. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +14 -0
  231. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -0
  232. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +180 -0
  233. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +42 -0
  234. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +1 -0
  235. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +188 -0
  236. package/dist/{testing → domain/testing}/enforce-aaa-phase-purity/rule.d.ts +1 -0
  237. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
  238. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +37 -0
  239. package/dist/domain/testing/enforce-aaa-structure/index.d.ts +2 -0
  240. package/dist/domain/testing/enforce-aaa-structure/index.d.ts.map +1 -0
  241. package/dist/domain/testing/enforce-aaa-structure/index.js +2 -0
  242. package/dist/{testing → domain/testing}/enforce-aaa-structure/rule.d.ts +1 -0
  243. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
  244. package/dist/domain/testing/enforce-aaa-structure/rule.js +88 -0
  245. package/dist/{testing → domain/testing}/index.d.ts +9 -8
  246. package/dist/domain/testing/index.d.ts.map +1 -0
  247. package/dist/domain/testing/index.js +10 -0
  248. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +29 -0
  249. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -0
  250. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +90 -0
  251. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts +31 -0
  252. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -0
  253. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +43 -0
  254. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts +16 -0
  255. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -0
  256. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +205 -0
  257. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +28 -0
  258. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
  259. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +171 -0
  260. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts +2 -0
  261. package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
  262. package/dist/domain/testing/prefer-vi-mocked-import/index.js +2 -0
  263. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-bindings.d.ts +1 -1
  264. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
  265. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
  266. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-declarations.d.ts +2 -1
  267. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
  268. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +131 -0
  269. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
  270. package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
  271. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-imports.d.ts +1 -1
  272. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
  273. package/dist/domain/testing/prefer-vi-mocked-import/match-imports.js +156 -0
  274. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-rewrites.d.ts +1 -1
  275. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
  276. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
  277. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
  278. package/dist/domain/testing/prefer-vi-mocked-import/match-walk.js +62 -0
  279. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +26 -0
  280. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
  281. package/dist/domain/testing/prefer-vi-mocked-import/match.js +198 -0
  282. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +20 -0
  283. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +1 -0
  284. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +39 -0
  285. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
  286. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +39 -0
  287. package/dist/{testing → domain/testing}/prefer-vi-mocked-import/types.d.ts +1 -1
  288. package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
  289. package/dist/domain/testing/prefer-vi-mocked-import/types.js +2 -0
  290. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +97 -0
  291. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -0
  292. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +174 -0
  293. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +2 -0
  294. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +1 -0
  295. package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +2 -0
  296. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +14 -0
  297. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -0
  298. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +84 -0
  299. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +13 -0
  300. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -0
  301. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +195 -0
  302. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +25 -0
  303. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -0
  304. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +96 -0
  305. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +32 -0
  306. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +1 -0
  307. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +164 -0
  308. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +5 -0
  309. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -0
  310. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +4 -0
  311. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +1 -0
  312. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +4 -0
  313. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +4 -0
  314. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +1 -0
  315. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +4 -0
  316. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +88 -0
  317. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +4 -0
  318. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +1 -0
  319. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +4 -0
  320. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +24 -0
  321. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -0
  322. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +113 -0
  323. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +36 -0
  324. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +1 -0
  325. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +138 -0
  326. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +187 -0
  327. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -0
  328. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +2 -0
  329. package/dist/domain/testing/require-aaa-sections/index.d.ts +2 -0
  330. package/dist/domain/testing/require-aaa-sections/index.d.ts.map +1 -0
  331. package/dist/domain/testing/require-aaa-sections/index.js +2 -0
  332. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts +17 -0
  333. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +1 -0
  334. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +150 -0
  335. package/dist/{testing → domain/testing}/require-aaa-sections/rule.d.ts +1 -0
  336. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -0
  337. package/dist/domain/testing/require-aaa-sections/rule.js +134 -0
  338. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +104 -0
  339. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -0
  340. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +216 -0
  341. package/dist/domain/testing/require-act-result-capture/index.d.ts +2 -0
  342. package/dist/domain/testing/require-act-result-capture/index.d.ts.map +1 -0
  343. package/dist/domain/testing/require-act-result-capture/index.js +2 -0
  344. package/dist/{testing → domain/testing}/require-act-result-capture/rule.d.ts +1 -0
  345. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -0
  346. package/dist/domain/testing/require-act-result-capture/rule.js +109 -0
  347. package/dist/domain/testing/require-test-companion/index.d.ts +3 -0
  348. package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -0
  349. package/dist/domain/testing/require-test-companion/index.js +3 -0
  350. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-listeners.d.ts +1 -1
  351. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
  352. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +145 -0
  353. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
  354. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +113 -0
  355. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-test-helpers.d.ts +1 -1
  356. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
  357. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +184 -0
  358. package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-utilities.d.ts +1 -1
  359. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
  360. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +26 -0
  361. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -0
  362. package/dist/domain/testing/require-test-companion/rule.js +82 -0
  363. package/dist/domain/testing/require-test-companion/types.d.ts.map +1 -0
  364. package/dist/domain/testing/require-test-companion/types.js +2 -0
  365. package/dist/domain/testing/single-act-statement/index.d.ts +2 -0
  366. package/dist/domain/testing/single-act-statement/index.d.ts.map +1 -0
  367. package/dist/domain/testing/single-act-statement/index.js +2 -0
  368. package/dist/{testing → domain/testing}/single-act-statement/rule.d.ts +1 -0
  369. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -0
  370. package/dist/domain/testing/single-act-statement/rule.js +37 -0
  371. package/dist/index.d.ts +4 -5
  372. package/dist/index.d.ts.map +1 -1
  373. package/dist/index.js +3 -6
  374. package/dist/{codeperfect-plugin.d.ts → infrastructure/codeperfect-plugin.d.ts} +2 -0
  375. package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -0
  376. package/dist/infrastructure/codeperfect-plugin.js +30 -0
  377. package/dist/infrastructure/index.d.ts +5 -0
  378. package/dist/infrastructure/index.d.ts.map +1 -0
  379. package/dist/infrastructure/index.js +4 -0
  380. package/dist/infrastructure/presets.d.ts +18 -0
  381. package/dist/infrastructure/presets.d.ts.map +1 -0
  382. package/dist/infrastructure/presets.js +81 -0
  383. package/package.json +67 -32
  384. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +0 -1
  385. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +0 -131
  386. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +0 -48
  387. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +0 -1
  388. package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +0 -126
  389. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
  390. package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -90
  391. package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +0 -1
  392. package/dist/architecture/consistent-barrel-files/exports-only-rule.js +0 -218
  393. package/dist/architecture/consistent-barrel-files/index.d.ts +0 -5
  394. package/dist/architecture/consistent-barrel-files/index.d.ts.map +0 -1
  395. package/dist/architecture/consistent-barrel-files/index.js +0 -4
  396. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +0 -1
  397. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +0 -100
  398. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
  399. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -90
  400. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +0 -1
  401. package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +0 -154
  402. package/dist/architecture/consistent-barrel-files/rule.d.ts.map +0 -1
  403. package/dist/architecture/consistent-barrel-files/rule.js +0 -58
  404. package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
  405. package/dist/architecture/consistent-barrel-files/test-helpers.js +0 -229
  406. package/dist/architecture/consistent-barrel-files/types.d.ts +0 -25
  407. package/dist/architecture/consistent-barrel-files/types.d.ts.map +0 -1
  408. package/dist/architecture/consistent-barrel-files/types.js +0 -2
  409. package/dist/architecture/index.d.ts.map +0 -1
  410. package/dist/architecture/index.js +0 -2
  411. package/dist/benchmark-rules.d.ts +0 -83
  412. package/dist/benchmark-rules.d.ts.map +0 -1
  413. package/dist/benchmark-rules.js +0 -175
  414. package/dist/codeperfect-plugin.d.ts.map +0 -1
  415. package/dist/codeperfect-plugin.js +0 -29
  416. package/dist/core/index.d.ts.map +0 -1
  417. package/dist/core/index.js +0 -3
  418. package/dist/core/no-multiple-declarators/index.d.ts +0 -2
  419. package/dist/core/no-multiple-declarators/index.d.ts.map +0 -1
  420. package/dist/core/no-multiple-declarators/index.js +0 -2
  421. package/dist/core/no-multiple-declarators/rule.d.ts.map +0 -1
  422. package/dist/core/no-multiple-declarators/rule.js +0 -100
  423. package/dist/core/prefer-interface-types/index.d.ts +0 -2
  424. package/dist/core/prefer-interface-types/index.d.ts.map +0 -1
  425. package/dist/core/prefer-interface-types/index.js +0 -2
  426. package/dist/core/prefer-interface-types/rule.d.ts.map +0 -1
  427. package/dist/core/prefer-interface-types/rule.js +0 -145
  428. package/dist/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
  429. package/dist/core/prefer-interface-types/test-helpers.js +0 -116
  430. package/dist/custom-rule-documentation.d.ts.map +0 -1
  431. package/dist/custom-rule-documentation.js +0 -35
  432. package/dist/custom-rules.d.ts.map +0 -1
  433. package/dist/custom-rules.js +0 -70
  434. package/dist/docs/index.d.ts +0 -4
  435. package/dist/docs/index.d.ts.map +0 -1
  436. package/dist/docs/index.js +0 -4
  437. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
  438. package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
  439. package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +0 -1
  440. package/dist/docs/no-interface-member-docs/comment-utilities.js +0 -146
  441. package/dist/docs/no-interface-member-docs/index.d.ts +0 -2
  442. package/dist/docs/no-interface-member-docs/index.d.ts.map +0 -1
  443. package/dist/docs/no-interface-member-docs/index.js +0 -2
  444. package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +0 -1
  445. package/dist/docs/no-interface-member-docs/parameter-tags.js +0 -101
  446. package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +0 -1
  447. package/dist/docs/no-interface-member-docs/parameter-utilities.js +0 -125
  448. package/dist/docs/no-interface-member-docs/rule.d.ts.map +0 -1
  449. package/dist/docs/no-interface-member-docs/rule.js +0 -168
  450. package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
  451. package/dist/docs/no-interface-member-docs/types.d.ts.map +0 -1
  452. package/dist/docs/no-interface-member-docs/types.js +0 -2
  453. package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +0 -1
  454. package/dist/docs/require-example-language/empty-fence-fixes.js +0 -169
  455. package/dist/docs/require-example-language/example-utilities.d.ts.map +0 -1
  456. package/dist/docs/require-example-language/example-utilities.js +0 -76
  457. package/dist/docs/require-example-language/examples.d.ts.map +0 -1
  458. package/dist/docs/require-example-language/examples.js +0 -181
  459. package/dist/docs/require-example-language/fixes.d.ts.map +0 -1
  460. package/dist/docs/require-example-language/fixes.js +0 -182
  461. package/dist/docs/require-example-language/index.d.ts +0 -3
  462. package/dist/docs/require-example-language/index.d.ts.map +0 -1
  463. package/dist/docs/require-example-language/index.js +0 -2
  464. package/dist/docs/require-example-language/reporting.d.ts.map +0 -1
  465. package/dist/docs/require-example-language/reporting.js +0 -145
  466. package/dist/docs/require-example-language/rule.d.ts.map +0 -1
  467. package/dist/docs/require-example-language/rule.js +0 -34
  468. package/dist/docs/require-example-language/types.d.ts.map +0 -1
  469. package/dist/docs/require-example-language/types.js +0 -2
  470. package/dist/docs/single-line-jsdoc/index.d.ts +0 -2
  471. package/dist/docs/single-line-jsdoc/index.d.ts.map +0 -1
  472. package/dist/docs/single-line-jsdoc/index.js +0 -2
  473. package/dist/docs/single-line-jsdoc/rule.d.ts +0 -5
  474. package/dist/docs/single-line-jsdoc/rule.d.ts.map +0 -1
  475. package/dist/docs/single-line-jsdoc/rule.js +0 -196
  476. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +0 -1
  477. package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +0 -95
  478. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +0 -1
  479. package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +0 -140
  480. package/dist/docs/test-helpers.d.ts.map +0 -1
  481. package/dist/docs/test-helpers.js +0 -107
  482. package/dist/presets.d.ts +0 -10
  483. package/dist/presets.d.ts.map +0 -1
  484. package/dist/presets.js +0 -50
  485. package/dist/rules/index.d.ts +0 -5
  486. package/dist/rules/index.d.ts.map +0 -1
  487. package/dist/rules/index.js +0 -6
  488. package/dist/testing/aaa/analyzer.d.ts +0 -36
  489. package/dist/testing/aaa/analyzer.d.ts.map +0 -1
  490. package/dist/testing/aaa/analyzer.js +0 -490
  491. package/dist/testing/aaa/index.d.ts.map +0 -1
  492. package/dist/testing/aaa/index.js +0 -2
  493. package/dist/testing/aaa/types.d.ts +0 -31
  494. package/dist/testing/aaa/types.d.ts.map +0 -1
  495. package/dist/testing/aaa/types.js +0 -2
  496. package/dist/testing/assert-actual-expected-names/index.d.ts +0 -2
  497. package/dist/testing/assert-actual-expected-names/index.d.ts.map +0 -1
  498. package/dist/testing/assert-actual-expected-names/index.js +0 -2
  499. package/dist/testing/assert-actual-expected-names/rule.d.ts.map +0 -1
  500. package/dist/testing/assert-actual-expected-names/rule.js +0 -54
  501. package/dist/testing/enforce-aaa-phase-purity/index.d.ts +0 -2
  502. package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +0 -1
  503. package/dist/testing/enforce-aaa-phase-purity/index.js +0 -2
  504. package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
  505. package/dist/testing/enforce-aaa-phase-purity/rule.js +0 -110
  506. package/dist/testing/enforce-aaa-structure/index.d.ts +0 -2
  507. package/dist/testing/enforce-aaa-structure/index.d.ts.map +0 -1
  508. package/dist/testing/enforce-aaa-structure/index.js +0 -2
  509. package/dist/testing/enforce-aaa-structure/rule.d.ts.map +0 -1
  510. package/dist/testing/enforce-aaa-structure/rule.js +0 -48
  511. package/dist/testing/index.d.ts.map +0 -1
  512. package/dist/testing/index.js +0 -9
  513. package/dist/testing/prefer-vi-mocked-import/fix.d.ts +0 -16
  514. package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +0 -1
  515. package/dist/testing/prefer-vi-mocked-import/fix.js +0 -224
  516. package/dist/testing/prefer-vi-mocked-import/index.d.ts +0 -2
  517. package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +0 -1
  518. package/dist/testing/prefer-vi-mocked-import/index.js +0 -2
  519. package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +0 -1
  520. package/dist/testing/prefer-vi-mocked-import/match-bindings.js +0 -52
  521. package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +0 -1
  522. package/dist/testing/prefer-vi-mocked-import/match-declarations.js +0 -99
  523. package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +0 -1
  524. package/dist/testing/prefer-vi-mocked-import/match-helpers.js +0 -102
  525. package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +0 -1
  526. package/dist/testing/prefer-vi-mocked-import/match-imports.js +0 -156
  527. package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +0 -1
  528. package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +0 -119
  529. package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +0 -1
  530. package/dist/testing/prefer-vi-mocked-import/match-walk.js +0 -62
  531. package/dist/testing/prefer-vi-mocked-import/match.d.ts +0 -15
  532. package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +0 -1
  533. package/dist/testing/prefer-vi-mocked-import/match.js +0 -193
  534. package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +0 -1
  535. package/dist/testing/prefer-vi-mocked-import/rule.js +0 -32
  536. package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +0 -1
  537. package/dist/testing/prefer-vi-mocked-import/types.js +0 -2
  538. package/dist/testing/require-aaa-sections/index.d.ts +0 -2
  539. package/dist/testing/require-aaa-sections/index.d.ts.map +0 -1
  540. package/dist/testing/require-aaa-sections/index.js +0 -2
  541. package/dist/testing/require-aaa-sections/rule.d.ts.map +0 -1
  542. package/dist/testing/require-aaa-sections/rule.js +0 -111
  543. package/dist/testing/require-act-result-capture/index.d.ts +0 -2
  544. package/dist/testing/require-act-result-capture/index.d.ts.map +0 -1
  545. package/dist/testing/require-act-result-capture/index.js +0 -2
  546. package/dist/testing/require-act-result-capture/rule.d.ts.map +0 -1
  547. package/dist/testing/require-act-result-capture/rule.js +0 -34
  548. package/dist/testing/require-test-companion/index.d.ts +0 -3
  549. package/dist/testing/require-test-companion/index.d.ts.map +0 -1
  550. package/dist/testing/require-test-companion/index.js +0 -3
  551. package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +0 -1
  552. package/dist/testing/require-test-companion/require-test-companion-listeners.js +0 -145
  553. package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +0 -1
  554. package/dist/testing/require-test-companion/require-test-companion-options.js +0 -112
  555. package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
  556. package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +0 -183
  557. package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
  558. package/dist/testing/require-test-companion/require-test-companion-utilities.js +0 -26
  559. package/dist/testing/require-test-companion/rule.d.ts.map +0 -1
  560. package/dist/testing/require-test-companion/rule.js +0 -57
  561. package/dist/testing/require-test-companion/types.d.ts.map +0 -1
  562. package/dist/testing/require-test-companion/types.js +0 -2
  563. package/dist/testing/single-act-statement/index.d.ts +0 -2
  564. package/dist/testing/single-act-statement/index.d.ts.map +0 -1
  565. package/dist/testing/single-act-statement/index.js +0 -2
  566. package/dist/testing/single-act-statement/rule.d.ts.map +0 -1
  567. package/dist/testing/single-act-statement/rule.js +0 -33
  568. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule.d.ts +0 -0
  569. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +0 -0
  570. /package/dist/{architecture → domain/architecture}/consistent-barrel-files/rule.d.ts +0 -0
  571. /package/dist/{core → domain/core}/prefer-interface-types/rule.d.ts +0 -0
  572. /package/dist/{core → domain/core}/prefer-interface-types/test-helpers.d.ts +0 -0
  573. /package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -0
  574. /package/dist/{docs → domain/docs}/no-interface-member-docs/rule.d.ts +0 -0
  575. /package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.d.ts +0 -0
  576. /package/dist/{docs → domain/docs}/require-example-language/empty-fence-fixes.d.ts +0 -0
  577. /package/dist/{docs → domain/docs}/require-example-language/example-utilities.d.ts +0 -0
  578. /package/dist/{docs → domain/docs}/require-example-language/rule.d.ts +0 -0
  579. /package/dist/{docs → domain/docs}/require-example-language/types.d.ts +0 -0
  580. /package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-content.d.ts +0 -0
  581. /package/dist/{docs → domain/docs}/test-helpers.d.ts +0 -0
  582. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-helpers.d.ts +0 -0
  583. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-walk.d.ts +0 -0
  584. /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/rule.d.ts +0 -0
  585. /package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-options.d.ts +0 -0
  586. /package/dist/{testing → domain/testing}/require-test-companion/rule.d.ts +0 -0
  587. /package/dist/{testing → domain/testing}/require-test-companion/types.d.ts +0 -0
@@ -0,0 +1,52 @@
1
+ import { hasRange } from "./match-helpers.js";
2
+ /**
3
+ * Collects bindings from a mock factory object.
4
+ * @param objectExpression Returned object expression.
5
+ * @param declarations Known declarations by local name.
6
+ * @returns Collected bindings.
7
+ * @example
8
+ * ```typescript
9
+ * const bindings = collectBindings({ properties: [], type: "ObjectExpression" } as never, new Map());
10
+ * void bindings;
11
+ * ```
12
+ */
13
+ function collectBindings(objectExpression, declarations) {
14
+ return objectExpression.properties
15
+ .map((propertyNode) => toBinding(propertyNode, declarations))
16
+ .filter((binding) => binding !== void 0);
17
+ }
18
+ /**
19
+ * Converts one object property into a binding when supported.
20
+ * @param propertyNode Object property candidate.
21
+ * @param declarations Known declarations.
22
+ * @returns Binding when property matches the rule shape.
23
+ * @example
24
+ * ```typescript
25
+ * const binding = toBinding({ type: "SpreadElement" } as never, new Map());
26
+ * void binding;
27
+ * ```
28
+ */
29
+ function toBinding(propertyNode, declarations) {
30
+ if (propertyNode.type !== "Property" ||
31
+ propertyNode.key.type !== "Identifier") {
32
+ return void 0;
33
+ }
34
+ if (!hasRange(propertyNode) ||
35
+ !hasRange(propertyNode.key) ||
36
+ propertyNode.value.type !== "Identifier") {
37
+ return void 0;
38
+ }
39
+ if (!hasRange(propertyNode.value) ||
40
+ !declarations.has(propertyNode.value.name)) {
41
+ return void 0;
42
+ }
43
+ return {
44
+ exportedName: propertyNode.key.name,
45
+ localName: propertyNode.value.name,
46
+ propertyKeyRange: propertyNode.key.range,
47
+ propertyRange: propertyNode.range,
48
+ propertyValueRange: propertyNode.value.range,
49
+ };
50
+ }
51
+ export { collectBindings };
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtYmluZGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcHJlZmVyLXZpLW1vY2tlZC1pbXBvcnQvbWF0Y2gtYmluZGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLGVBQWUsQ0FDdEIsZ0JBQXlDLEVBQ3pDLFlBQXNDO0lBRXRDLE9BQU8sZ0JBQWdCLENBQUMsVUFBVTtTQUMvQixHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDNUQsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFzQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLFNBQVMsQ0FDaEIsWUFBb0QsRUFDcEQsWUFBc0M7SUFFdEMsSUFDRSxZQUFZLENBQUMsSUFBSSxLQUFLLFVBQVU7UUFDaEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUN0QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBQ0QsSUFDRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDdkIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUMzQixZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQ3hDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUNFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQzFDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxPQUFPO1FBQ0wsWUFBWSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSTtRQUNuQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBQ2xDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSztRQUN4QyxhQUFhLEVBQUUsWUFBWSxDQUFDLEtBQUs7UUFDakMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLO0tBQzdDLENBQUM7QUFDSixDQUFDO0FBRUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xuXG5pbXBvcnQgdHlwZSB7IEJpbmRpbmcsIERlY2xhcmF0aW9uIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHsgaGFzUmFuZ2UgfSBmcm9tIFwiLi9tYXRjaC1oZWxwZXJzXCI7XG5cbi8qKlxuICogQ29sbGVjdHMgYmluZGluZ3MgZnJvbSBhIG1vY2sgZmFjdG9yeSBvYmplY3QuXG4gKiBAcGFyYW0gb2JqZWN0RXhwcmVzc2lvbiBSZXR1cm5lZCBvYmplY3QgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBkZWNsYXJhdGlvbnMgS25vd24gZGVjbGFyYXRpb25zIGJ5IGxvY2FsIG5hbWUuXG4gKiBAcmV0dXJucyBDb2xsZWN0ZWQgYmluZGluZ3MuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYmluZGluZ3MgPSBjb2xsZWN0QmluZGluZ3MoeyBwcm9wZXJ0aWVzOiBbXSwgdHlwZTogXCJPYmplY3RFeHByZXNzaW9uXCIgfSBhcyBuZXZlciwgbmV3IE1hcCgpKTtcbiAqIHZvaWQgYmluZGluZ3M7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEJpbmRpbmdzKFxuICBvYmplY3RFeHByZXNzaW9uOiBFU1RyZWUuT2JqZWN0RXhwcmVzc2lvbixcbiAgZGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCBEZWNsYXJhdGlvbj4sXG4pOiBCaW5kaW5nW10ge1xuICByZXR1cm4gb2JqZWN0RXhwcmVzc2lvbi5wcm9wZXJ0aWVzXG4gICAgLm1hcCgocHJvcGVydHlOb2RlKSA9PiB0b0JpbmRpbmcocHJvcGVydHlOb2RlLCBkZWNsYXJhdGlvbnMpKVxuICAgIC5maWx0ZXIoKGJpbmRpbmcpOiBiaW5kaW5nIGlzIEJpbmRpbmcgPT4gYmluZGluZyAhPT0gdm9pZCAwKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgb2JqZWN0IHByb3BlcnR5IGludG8gYSBiaW5kaW5nIHdoZW4gc3VwcG9ydGVkLlxuICogQHBhcmFtIHByb3BlcnR5Tm9kZSBPYmplY3QgcHJvcGVydHkgY2FuZGlkYXRlLlxuICogQHBhcmFtIGRlY2xhcmF0aW9ucyBLbm93biBkZWNsYXJhdGlvbnMuXG4gKiBAcmV0dXJucyBCaW5kaW5nIHdoZW4gcHJvcGVydHkgbWF0Y2hlcyB0aGUgcnVsZSBzaGFwZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBiaW5kaW5nID0gdG9CaW5kaW5nKHsgdHlwZTogXCJTcHJlYWRFbGVtZW50XCIgfSBhcyBuZXZlciwgbmV3IE1hcCgpKTtcbiAqIHZvaWQgYmluZGluZztcbiAqIGBgYFxuICovXG5mdW5jdGlvbiB0b0JpbmRpbmcoXG4gIHByb3BlcnR5Tm9kZTogRVNUcmVlLlByb3BlcnR5IHwgRVNUcmVlLlNwcmVhZEVsZW1lbnQsXG4gIGRlY2xhcmF0aW9uczogTWFwPHN0cmluZywgRGVjbGFyYXRpb24+LFxuKTogQmluZGluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChcbiAgICBwcm9wZXJ0eU5vZGUudHlwZSAhPT0gXCJQcm9wZXJ0eVwiIHx8XG4gICAgcHJvcGVydHlOb2RlLmtleS50eXBlICE9PSBcIklkZW50aWZpZXJcIlxuICApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmIChcbiAgICAhaGFzUmFuZ2UocHJvcGVydHlOb2RlKSB8fFxuICAgICFoYXNSYW5nZShwcm9wZXJ0eU5vZGUua2V5KSB8fFxuICAgIHByb3BlcnR5Tm9kZS52YWx1ZS50eXBlICE9PSBcIklkZW50aWZpZXJcIlxuICApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIGlmIChcbiAgICAhaGFzUmFuZ2UocHJvcGVydHlOb2RlLnZhbHVlKSB8fFxuICAgICFkZWNsYXJhdGlvbnMuaGFzKHByb3BlcnR5Tm9kZS52YWx1ZS5uYW1lKVxuICApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRlZE5hbWU6IHByb3BlcnR5Tm9kZS5rZXkubmFtZSxcbiAgICBsb2NhbE5hbWU6IHByb3BlcnR5Tm9kZS52YWx1ZS5uYW1lLFxuICAgIHByb3BlcnR5S2V5UmFuZ2U6IHByb3BlcnR5Tm9kZS5rZXkucmFuZ2UsXG4gICAgcHJvcGVydHlSYW5nZTogcHJvcGVydHlOb2RlLnJhbmdlLFxuICAgIHByb3BlcnR5VmFsdWVSYW5nZTogcHJvcGVydHlOb2RlLnZhbHVlLnJhbmdlLFxuICB9O1xufVxuXG5leHBvcnQgeyBjb2xsZWN0QmluZGluZ3MgfTtcbiJdfQ==
@@ -1,9 +1,10 @@
1
1
  import type { Rule } from "eslint";
2
2
  import type * as ESTree from "estree";
3
- import type { Declaration } from "./types";
3
+ import type { Declaration } from "./types.js";
4
4
  /**
5
5
  * Collects top-level `const x = vi.fn(...)` declarations.
6
6
  * @param program Program node.
7
+ * @param sourceCode Source code wrapper used to inspect attached comments.
7
8
  * @returns Declarations by local name.
8
9
  * @example
9
10
  * ```typescript
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-declarations.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vi-mocked-import/match-declarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C;;;;;;;;;;GAUG;AACH,iBAAS,mBAAmB,CAC1B,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,UAAU,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAC1C,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAU1B;AA4JD,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { hasRange, isViFunctionCall } from "./match-helpers.js";
2
+ /**
3
+ * Collects top-level `const x = vi.fn(...)` declarations.
4
+ * @param program Program node.
5
+ * @param sourceCode Source code wrapper used to inspect attached comments.
6
+ * @returns Declarations by local name.
7
+ * @example
8
+ * ```typescript
9
+ * const declarations = collectDeclarations({ body: [], sourceType: "module", type: "Program" } as never);
10
+ * void declarations;
11
+ * ```
12
+ */
13
+ function collectDeclarations(program, sourceCode) {
14
+ const declarations = program.body
15
+ .map((statement) => toDeclaration(statement, sourceCode))
16
+ .filter((declaration) => declaration !== void 0);
17
+ return new Map(declarations.map((declaration) => [declaration.localName, declaration]));
18
+ }
19
+ /**
20
+ * Finds the earliest attached leading comment range for a declaration.
21
+ * @param commentsBefore Comments that appear before the declaration.
22
+ * @param sourceCode Source code wrapper used to inspect interstitial text.
23
+ * @param statementStart Original declaration start offset.
24
+ * @returns Earliest attached comment start, or the statement start.
25
+ * @example
26
+ * ```typescript
27
+ * const start = getAttachedCommentStart([], void 0, 10);
28
+ * void start;
29
+ * ```
30
+ */
31
+ function getAttachedCommentStart(commentsBefore, sourceCode, statementStart) {
32
+ let removalStart = statementStart;
33
+ let nextStart = statementStart;
34
+ for (const comment of commentsBefore.toReversed()) {
35
+ const commentStart = getNextAttachedCommentStart(comment, sourceCode, nextStart);
36
+ if (commentStart === void 0) {
37
+ break;
38
+ }
39
+ removalStart = commentStart;
40
+ nextStart = commentStart;
41
+ }
42
+ return removalStart;
43
+ }
44
+ /**
45
+ * Returns the next attached comment start when a comment remains linked to the declaration.
46
+ * @param comment Candidate leading comment.
47
+ * @param sourceCode Source code wrapper used to inspect interstitial text.
48
+ * @param nextStart Current boundary that the comment must attach to.
49
+ * @returns Comment start when attached, otherwise `undefined`.
50
+ * @example
51
+ * ```typescript
52
+ * const start = getNextAttachedCommentStart({ type: "Block", value: "x" } as never, void 0, 5);
53
+ * void start;
54
+ * ```
55
+ */
56
+ function getNextAttachedCommentStart(comment, sourceCode, nextStart) {
57
+ const commentRange = comment.range;
58
+ if (commentRange === void 0) {
59
+ return void 0;
60
+ }
61
+ const [commentStart, commentEnd] = commentRange;
62
+ const gapText = sourceCode?.text.slice(commentEnd, nextStart) ?? "";
63
+ return isAttachedLeadingGap(gapText) ? commentStart : void 0;
64
+ }
65
+ /**
66
+ * Returns the declaration removal range, including directly attached comments.
67
+ * @param statement Variable declaration statement.
68
+ * @param sourceCode Source code wrapper when available.
69
+ * @returns Statement range expanded to attached leading comments.
70
+ * @example
71
+ * ```typescript
72
+ * const range = getRemovalRange({ range: [5, 10], type: "VariableDeclaration" } as never);
73
+ * void range;
74
+ * ```
75
+ */
76
+ function getRemovalRange(statement, sourceCode) {
77
+ const [statementStart, statementEnd] = statement.range;
78
+ const commentsBefore = sourceCode?.getCommentsBefore(statement) ?? [];
79
+ const removalStart = getAttachedCommentStart(commentsBefore, sourceCode, statementStart);
80
+ return [removalStart, statementEnd];
81
+ }
82
+ /**
83
+ * Returns true when whitespace between a comment and declaration keeps them attached.
84
+ * @param gapText Source text between adjacent nodes.
85
+ * @returns True when the gap contains no blank line.
86
+ * @example
87
+ * ```typescript
88
+ * const ok = isAttachedLeadingGap("\n");
89
+ * void ok;
90
+ * ```
91
+ */
92
+ function isAttachedLeadingGap(gapText) {
93
+ return (/^[\t \r\n]*$/u.test(gapText) && !/(?:\r?\n)[\t ]*(?:\r?\n)/u.test(gapText));
94
+ }
95
+ /**
96
+ * Converts one top-level statement into a declaration when supported.
97
+ * @param statement Candidate statement.
98
+ * @param sourceCode Source code wrapper used to inspect attached comments.
99
+ * @returns Declaration when statement matches the rule shape.
100
+ * @example
101
+ * ```typescript
102
+ * const declaration = toDeclaration({ type: "EmptyStatement" } as never);
103
+ * void declaration;
104
+ * ```
105
+ */
106
+ function toDeclaration(statement, sourceCode) {
107
+ if (statement.type !== "VariableDeclaration" || statement.kind !== "const") {
108
+ return void 0;
109
+ }
110
+ if (!hasRange(statement) || statement.declarations.length !== 1) {
111
+ return void 0;
112
+ }
113
+ const [declarator] = statement.declarations;
114
+ if (declarator === void 0 ||
115
+ declarator.id.type !== "Identifier" ||
116
+ !hasRange(declarator.id) ||
117
+ declarator.init === null ||
118
+ declarator.init === void 0 ||
119
+ !hasRange(declarator.init) ||
120
+ !isViFunctionCall(declarator.init)) {
121
+ return void 0;
122
+ }
123
+ return {
124
+ declarationIdRange: declarator.id.range,
125
+ initializerRange: declarator.init.range,
126
+ localName: declarator.id.name,
127
+ statementRange: getRemovalRange(statement, sourceCode),
128
+ };
129
+ }
130
+ export { collectDeclarations };
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtZGVjbGFyYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL3ByZWZlci12aS1tb2NrZWQtaW1wb3J0L21hdGNoLWRlY2xhcmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0Q7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLE9BQXVCLEVBQ3ZCLFVBQTJDO0lBRTNDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJO1NBQzlCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN4RCxNQUFNLENBQ0wsQ0FBQyxXQUFXLEVBQThCLEVBQUUsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLENBQ3BFLENBQUM7SUFFSixPQUFPLElBQUksR0FBRyxDQUNaLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUN4RSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDOUIsY0FBeUMsRUFDekMsVUFBc0QsRUFDdEQsY0FBc0I7SUFFdEIsSUFBSSxZQUFZLEdBQUcsY0FBYyxDQUFDO0lBQ2xDLElBQUksU0FBUyxHQUFHLGNBQWMsQ0FBQztJQUUvQixLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ2xELE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUM5QyxPQUFPLEVBQ1AsVUFBVSxFQUNWLFNBQVMsQ0FDVixDQUFDO1FBQ0YsSUFBSSxZQUFZLEtBQUssS0FBSyxDQUFDLEVBQUUs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QWMsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztLQUN2RCxDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xuXG5pbXBvcnQgdHlwZSB7IERlY2xhcmF0aW9uIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuaW1wb3J0IHsgaGFzUmFuZ2UsIGlzVmlGdW5jdGlvbkNhbGwgfSBmcm9tIFwiLi9tYXRjaC1oZWxwZXJzXCI7XG5cbi8qKlxuICogQ29sbGVjdHMgdG9wLWxldmVsIGBjb25zdCB4ID0gdmkuZm4oLi4uKWAgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHByb2dyYW0gUHJvZ3JhbSBub2RlLlxuICogQHBhcmFtIHNvdXJjZUNvZGUgU291cmNlIGNvZGUgd3JhcHBlciB1c2VkIHRvIGluc3BlY3QgYXR0YWNoZWQgY29tbWVudHMuXG4gKiBAcmV0dXJucyBEZWNsYXJhdGlvbnMgYnkgbG9jYWwgbmFtZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBkZWNsYXJhdGlvbnMgPSBjb2xsZWN0RGVjbGFyYXRpb25zKHsgYm9keTogW10sIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsIHR5cGU6IFwiUHJvZ3JhbVwiIH0gYXMgbmV2ZXIpO1xuICogdm9pZCBkZWNsYXJhdGlvbnM7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY29sbGVjdERlY2xhcmF0aW9ucyhcbiAgcHJvZ3JhbTogRVNUcmVlLlByb2dyYW0sXG4gIHNvdXJjZUNvZGU/OiBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXSxcbik6IE1hcDxzdHJpbmcsIERlY2xhcmF0aW9uPiB7XG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHByb2dyYW0uYm9keVxuICAgIC5tYXAoKHN0YXRlbWVudCkgPT4gdG9EZWNsYXJhdGlvbihzdGF0ZW1lbnQsIHNvdXJjZUNvZGUpKVxuICAgIC5maWx0ZXIoXG4gICAgICAoZGVjbGFyYXRpb24pOiBkZWNsYXJhdGlvbiBpcyBEZWNsYXJhdGlvbiA9PiBkZWNsYXJhdGlvbiAhPT0gdm9pZCAwLFxuICAgICk7XG5cbiAgcmV0dXJuIG5ldyBNYXAoXG4gICAgZGVjbGFyYXRpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IFtkZWNsYXJhdGlvbi5sb2NhbE5hbWUsIGRlY2xhcmF0aW9uXSksXG4gICk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGVhcmxpZXN0IGF0dGFjaGVkIGxlYWRpbmcgY29tbWVudCByYW5nZSBmb3IgYSBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSBjb21tZW50c0JlZm9yZSBDb21tZW50cyB0aGF0IGFwcGVhciBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHNvdXJjZUNvZGUgU291cmNlIGNvZGUgd3JhcHBlciB1c2VkIHRvIGluc3BlY3QgaW50ZXJzdGl0aWFsIHRleHQuXG4gKiBAcGFyYW0gc3RhdGVtZW50U3RhcnQgT3JpZ2luYWwgZGVjbGFyYXRpb24gc3RhcnQgb2Zmc2V0LlxuICogQHJldHVybnMgRWFybGllc3QgYXR0YWNoZWQgY29tbWVudCBzdGFydCwgb3IgdGhlIHN0YXRlbWVudCBzdGFydC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzdGFydCA9IGdldEF0dGFjaGVkQ29tbWVudFN0YXJ0KFtdLCB2b2lkIDAsIDEwKTtcbiAqIHZvaWQgc3RhcnQ7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0QXR0YWNoZWRDb21tZW50U3RhcnQoXG4gIGNvbW1lbnRzQmVmb3JlOiByZWFkb25seSBFU1RyZWUuQ29tbWVudFtdLFxuICBzb3VyY2VDb2RlOiBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXSB8IHVuZGVmaW5lZCxcbiAgc3RhdGVtZW50U3RhcnQ6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGxldCByZW1vdmFsU3RhcnQgPSBzdGF0ZW1lbnRTdGFydDtcbiAgbGV0IG5leHRTdGFydCA9IHN0YXRlbWVudFN0YXJ0O1xuXG4gIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50c0JlZm9yZS50b1JldmVyc2VkKCkpIHtcbiAgICBjb25zdCBjb21tZW50U3RhcnQgPSBnZXROZXh0QXR0YWNoZWRDb21tZW50U3RhcnQoXG4gICAgICBjb21tZW50LFxuICAgICAgc291cmNlQ29kZSxcbiAgICAgIG5leHRTdGFydCxcbiAgICApO1xuICAgIGlmIChjb21tZW50U3RhcnQgPT09IHZvaWQgMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmVtb3ZhbFN0YXJ0ID0gY29tbWVudFN0YXJ0O1xuICAgIG5leHRTdGFydCA9IGNvbW1lbnRTdGFydDtcbiAgfVxuXG4gIHJldHVybiByZW1vdmFsU3RhcnQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmV4dCBhdHRhY2hlZCBjb21tZW50IHN0YXJ0IHdoZW4gYSBjb21tZW50IHJlbWFpbnMgbGlua2VkIHRvIHRoZSBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSBjb21tZW50IENhbmRpZGF0ZSBsZWFkaW5nIGNvbW1lbnQuXG4gKiBAcGFyYW0gc291cmNlQ29kZSBTb3VyY2UgY29kZSB3cmFwcGVyIHVzZWQgdG8gaW5zcGVjdCBpbnRlcnN0aXRpYWwgdGV4dC5cbiAqIEBwYXJhbSBuZXh0U3RhcnQgQ3VycmVudCBib3VuZGFyeSB0aGF0IHRoZSBjb21tZW50IG11c3QgYXR0YWNoIHRvLlxuICogQHJldHVybnMgQ29tbWVudCBzdGFydCB3aGVuIGF0dGFjaGVkLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc3RhcnQgPSBnZXROZXh0QXR0YWNoZWRDb21tZW50U3RhcnQoeyB0eXBlOiBcIkJsb2NrXCIsIHZhbHVlOiBcInhcIiB9IGFzIG5ldmVyLCB2b2lkIDAsIDUpO1xuICogdm9pZCBzdGFydDtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXROZXh0QXR0YWNoZWRDb21tZW50U3RhcnQoXG4gIGNvbW1lbnQ6IEVTVHJlZS5Db21tZW50LFxuICBzb3VyY2VDb2RlOiBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXSB8IHVuZGVmaW5lZCxcbiAgbmV4dFN0YXJ0OiBudW1iZXIsXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb21tZW50UmFuZ2UgPSBjb21tZW50LnJhbmdlO1xuXG4gIGlmIChjb21tZW50UmFuZ2UgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCBbY29tbWVudFN0YXJ0LCBjb21tZW50RW5kXSA9IGNvbW1lbnRSYW5nZTtcbiAgY29uc3QgZ2FwVGV4dCA9IHNvdXJjZUNvZGU/LnRleHQuc2xpY2UoY29tbWVudEVuZCwgbmV4dFN0YXJ0KSA/PyBcIlwiO1xuXG4gIHJldHVybiBpc0F0dGFjaGVkTGVhZGluZ0dhcChnYXBUZXh0KSA/IGNvbW1lbnRTdGFydCA6IHZvaWQgMDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWNsYXJhdGlvbiByZW1vdmFsIHJhbmdlLCBpbmNsdWRpbmcgZGlyZWN0bHkgYXR0YWNoZWQgY29tbWVudHMuXG4gKiBAcGFyYW0gc3RhdGVtZW50IFZhcmlhYmxlIGRlY2xhcmF0aW9uIHN0YXRlbWVudC5cbiAqIEBwYXJhbSBzb3VyY2VDb2RlIFNvdXJjZSBjb2RlIHdyYXBwZXIgd2hlbiBhdmFpbGFibGUuXG4gKiBAcmV0dXJucyBTdGF0ZW1lbnQgcmFuZ2UgZXhwYW5kZWQgdG8gYXR0YWNoZWQgbGVhZGluZyBjb21tZW50cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByYW5nZSA9IGdldFJlbW92YWxSYW5nZSh7IHJhbmdlOiBbNSwgMTBdLCB0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiB9IGFzIG5ldmVyKTtcbiAqIHZvaWQgcmFuZ2U7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0UmVtb3ZhbFJhbmdlKFxuICBzdGF0ZW1lbnQ6IEVTVHJlZS5WYXJpYWJsZURlY2xhcmF0aW9uICYge1xuICAgIC8qKiBTb3VyY2UgcmFuZ2UgZm9yIHRoZSBmdWxsIGRlY2xhcmF0aW9uIHN0YXRlbWVudC4gKi9cbiAgICByYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgfSxcbiAgc291cmNlQ29kZT86IFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdLFxuKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IFtzdGF0ZW1lbnRTdGFydCwgc3RhdGVtZW50RW5kXSA9IHN0YXRlbWVudC5yYW5nZTtcbiAgY29uc3QgY29tbWVudHNCZWZvcmUgPSBzb3VyY2VDb2RlPy5nZXRDb21tZW50c0JlZm9yZShzdGF0ZW1lbnQpID8/IFtdO1xuICBjb25zdCByZW1vdmFsU3RhcnQgPSBnZXRBdHRhY2hlZENvbW1lbnRTdGFydChcbiAgICBjb21tZW50c0JlZm9yZSxcbiAgICBzb3VyY2VDb2RlLFxuICAgIHN0YXRlbWVudFN0YXJ0LFxuICApO1xuXG4gIHJldHVybiBbcmVtb3ZhbFN0YXJ0LCBzdGF0ZW1lbnRFbmRdO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHdoaXRlc3BhY2UgYmV0d2VlbiBhIGNvbW1lbnQgYW5kIGRlY2xhcmF0aW9uIGtlZXBzIHRoZW0gYXR0YWNoZWQuXG4gKiBAcGFyYW0gZ2FwVGV4dCBTb3VyY2UgdGV4dCBiZXR3ZWVuIGFkamFjZW50IG5vZGVzLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBnYXAgY29udGFpbnMgbm8gYmxhbmsgbGluZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvayA9IGlzQXR0YWNoZWRMZWFkaW5nR2FwKFwiXFxuXCIpO1xuICogdm9pZCBvaztcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc0F0dGFjaGVkTGVhZGluZ0dhcChnYXBUZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAvXltcXHQgXFxyXFxuXSokL3UudGVzdChnYXBUZXh0KSAmJiAhLyg/Olxccj9cXG4pW1xcdCBdKig/Olxccj9cXG4pL3UudGVzdChnYXBUZXh0KVxuICApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSB0b3AtbGV2ZWwgc3RhdGVtZW50IGludG8gYSBkZWNsYXJhdGlvbiB3aGVuIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgQ2FuZGlkYXRlIHN0YXRlbWVudC5cbiAqIEBwYXJhbSBzb3VyY2VDb2RlIFNvdXJjZSBjb2RlIHdyYXBwZXIgdXNlZCB0byBpbnNwZWN0IGF0dGFjaGVkIGNvbW1lbnRzLlxuICogQHJldHVybnMgRGVjbGFyYXRpb24gd2hlbiBzdGF0ZW1lbnQgbWF0Y2hlcyB0aGUgcnVsZSBzaGFwZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBkZWNsYXJhdGlvbiA9IHRvRGVjbGFyYXRpb24oeyB0eXBlOiBcIkVtcHR5U3RhdGVtZW50XCIgfSBhcyBuZXZlcik7XG4gKiB2b2lkIGRlY2xhcmF0aW9uO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHRvRGVjbGFyYXRpb24oXG4gIHN0YXRlbWVudDogRVNUcmVlLlByb2dyYW1bXCJib2R5XCJdW251bWJlcl0sXG4gIHNvdXJjZUNvZGU/OiBSdWxlLlJ1bGVDb250ZXh0W1wic291cmNlQ29kZVwiXSxcbik6IERlY2xhcmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHN0YXRlbWVudC50eXBlICE9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiB8fCBzdGF0ZW1lbnQua2luZCAhPT0gXCJjb25zdFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBpZiAoIWhhc1JhbmdlKHN0YXRlbWVudCkgfHwgc3RhdGVtZW50LmRlY2xhcmF0aW9ucy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgW2RlY2xhcmF0b3JdID0gc3RhdGVtZW50LmRlY2xhcmF0aW9ucztcbiAgaWYgKFxuICAgIGRlY2xhcmF0b3IgPT09IHZvaWQgMCB8fFxuICAgIGRlY2xhcmF0b3IuaWQudHlwZSAhPT0gXCJJZGVudGlmaWVyXCIgfHxcbiAgICAhaGFzUmFuZ2UoZGVjbGFyYXRvci5pZCkgfHxcbiAgICBkZWNsYXJhdG9yLmluaXQgPT09IG51bGwgfHxcbiAgICBkZWNsYXJhdG9yLmluaXQgPT09IHZvaWQgMCB8fFxuICAgICFoYXNSYW5nZShkZWNsYXJhdG9yLmluaXQpIHx8XG4gICAgIWlzVmlGdW5jdGlvbkNhbGwoZGVjbGFyYXRvci5pbml0KVxuICApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkZWNsYXJhdGlvbklkUmFuZ2U6IGRlY2xhcmF0b3IuaWQucmFuZ2UsXG4gICAgaW5pdGlhbGl6ZXJSYW5nZTogZGVjbGFyYXRvci5pbml0LnJhbmdlLFxuICAgIGxvY2FsTmFtZTogZGVjbGFyYXRvci5pZC5uYW1lLFxuICAgIHN0YXRlbWVudFJhbmdlOiBnZXRSZW1vdmFsUmFuZ2Uoc3RhdGVtZW50LCBzb3VyY2VDb2RlKSxcbiAgfTtcbn1cblxuZXhwb3J0IHsgY29sbGVjdERlY2xhcmF0aW9ucyB9O1xuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vi-mocked-import/match-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAQtC,qCAAqC;AACrC,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9B,qCAAqC;AACrC,KAAK,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG;IAC7B,uCAAuC;IACvC,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;;;;;;;;GASG;AACH,iBAAS,sBAAsB,CAC7B,iBAAiB,EAAE,MAAM,CAAC,UAAU,GACnC,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAmBrC;AAED;;;;;;;;;GASG;AACH,iBAAS,kBAAkB,CACzB,cAAc,EAAE,MAAM,CAAC,UAAU,GAChC,MAAM,GAAG,SAAS,CAYpB;AAED;;;;;;;;;GASG;AACH,iBAAS,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAErD;AAED;;;;;;;;;GASG;AACH,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,SAAS,CAQtD;AAED;;;;;;;;;GASG;AACH,iBAAS,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,OAAO,CAevE;AAED,YAAY,EAAE,KAAK,EAAE,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,QAAQ,EACR,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Resolves the object literal returned from a mock factory.
3
+ * @param factoryExpression Factory expression from `vi.mock` or `vi.doMock`.
4
+ * @returns Returned object expression when present.
5
+ * @example
6
+ * ```typescript
7
+ * const result = getFactoryReturnObject({ type: "Identifier" } as never);
8
+ * void result;
9
+ * ```
10
+ */
11
+ function getFactoryReturnObject(factoryExpression) {
12
+ if (factoryExpression.type !== "ArrowFunctionExpression") {
13
+ return void 0;
14
+ }
15
+ const { body } = factoryExpression;
16
+ if (body.type === "ObjectExpression") {
17
+ return body;
18
+ }
19
+ if (body.type !== "BlockStatement") {
20
+ return void 0;
21
+ }
22
+ const returnStatement = body.body.find((statement) => statement.type === "ReturnStatement");
23
+ const returnArgument = returnStatement?.argument;
24
+ return returnArgument?.type === "ObjectExpression" ? returnArgument : void 0;
25
+ }
26
+ /**
27
+ * Extracts a module specifier string from a mock call argument.
28
+ * @param moduleArgument First argument of `vi.mock` or `vi.doMock`.
29
+ * @returns String module specifier when available.
30
+ * @example
31
+ * ```typescript
32
+ * const specifier = getModuleSpecifier({ type: "Literal", value: "./x" } as never);
33
+ * void specifier;
34
+ * ```
35
+ */
36
+ function getModuleSpecifier(moduleArgument) {
37
+ if (moduleArgument.type === "ImportExpression") {
38
+ const { source } = moduleArgument;
39
+ return source.type === "Literal" && typeof source.value === "string"
40
+ ? source.value
41
+ : void 0;
42
+ }
43
+ return moduleArgument.type === "Literal" &&
44
+ typeof moduleArgument.value === "string"
45
+ ? moduleArgument.value
46
+ : void 0;
47
+ }
48
+ /**
49
+ * Determines the newline sequence used in source text.
50
+ * @param sourceText Full source text.
51
+ * @returns Detected newline sequence.
52
+ * @example
53
+ * ```typescript
54
+ * const newline = getNewline("a\r\nb");
55
+ * void newline;
56
+ * ```
57
+ */
58
+ function getNewline(sourceText) {
59
+ return sourceText.includes("\r\n") ? "\r\n" : "\n";
60
+ }
61
+ /**
62
+ * Checks whether a node includes a numeric `range` tuple.
63
+ * @param node Node to inspect.
64
+ * @returns True when the node has a valid `range`.
65
+ * @example
66
+ * ```typescript
67
+ * const ok = hasRange({ range: [0, 1] } as never);
68
+ * void ok;
69
+ * ```
70
+ */
71
+ function hasRange(node) {
72
+ const rangeValue = node.range;
73
+ return (Array.isArray(rangeValue) &&
74
+ rangeValue.length === 2 &&
75
+ typeof rangeValue[0] === "number" &&
76
+ typeof rangeValue[1] === "number");
77
+ }
78
+ /**
79
+ * Returns true when an expression is a `vi.fn(...)` call.
80
+ * @param expression Expression to inspect.
81
+ * @returns True when the expression is a `vi.fn` call.
82
+ * @example
83
+ * ```typescript
84
+ * const ok = isViFunctionCall(null);
85
+ * void ok;
86
+ * ```
87
+ */
88
+ function isViFunctionCall(expression) {
89
+ if (expression?.type !== "CallExpression") {
90
+ return false;
91
+ }
92
+ if (expression.callee.type !== "MemberExpression") {
93
+ return false;
94
+ }
95
+ const { object, property } = expression.callee;
96
+ return (object.type === "Identifier" &&
97
+ object.name === "vi" &&
98
+ property.type === "Identifier" &&
99
+ property.name === "fn");
100
+ }
101
+ export { getFactoryReturnObject, getModuleSpecifier, getNewline, hasRange, isViFunctionCall, };
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9wcmVmZXItdmktbW9ja2VkLWltcG9ydC9tYXRjaC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixpQkFBb0M7SUFFcEMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7SUFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3BDLENBQUMsU0FBUyxFQUF1QyxFQUFFLENBQ2pELFNBQVMsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQ3ZDLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxlQUFlLEVBQUUsUUFBUSxDQUFDO0lBQ2pELE9BQU8sY0FBYyxFQUFFLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FDekIsY0FBaUM7SUFFakMsSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRO1lBQ2xFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUNkLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLEtBQUssU0FBUztRQUN0QyxPQUFPLGNBQWMsQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUN4QyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUs7UUFDdEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsVUFBVSxDQUFDLFVBQWtCO0lBQ3BDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsUUFBUSxDQUFDLElBQWlCO0lBQ2pDLE1BQU0sVUFBVSxHQUFJLElBQXNDLENBQUMsS0FBSyxDQUFDO0lBQ2pFLE9BQU8sQ0FDTCxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6QixVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDdkIsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtRQUNqQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxVQUFvQztJQUM1RCxJQUFJLFVBQVUsRUFBRSxJQUFJLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFLENBQUM7UUFDbEQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQy9DLE9BQU8sQ0FDTCxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVk7UUFDNUIsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJO1FBQ3BCLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWTtRQUM5QixRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FDdkIsQ0FBQztBQUNKLENBQUM7QUFHRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsUUFBUSxFQUNSLGdCQUFnQixHQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG5pbnRlcmZhY2UgT3B0aW9uYWxSYW5nZUZpZWxkIHtcbiAgLyoqIFBvdGVudGlhbCByYW5nZSBwYXlsb2FkIGZyb20gdW5rbm93biBub2RlLWxpa2UgdmFsdWVzLiAqL1xuICByYW5nZT86IHVua25vd247XG59XG5cbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cbnR5cGUgUmFuZ2UgPSBbbnVtYmVyLCBudW1iZXJdO1xuXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXG50eXBlIFJhbmdlTm9kZSA9IEVTVHJlZS5Ob2RlICYge1xuICAvKiogU291cmNlIHJhbmdlIHR1cGxlIGZvciB0aGUgbm9kZS4gKi9cbiAgcmFuZ2U6IFJhbmdlO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb2JqZWN0IGxpdGVyYWwgcmV0dXJuZWQgZnJvbSBhIG1vY2sgZmFjdG9yeS5cbiAqIEBwYXJhbSBmYWN0b3J5RXhwcmVzc2lvbiBGYWN0b3J5IGV4cHJlc3Npb24gZnJvbSBgdmkubW9ja2Agb3IgYHZpLmRvTW9ja2AuXG4gKiBAcmV0dXJucyBSZXR1cm5lZCBvYmplY3QgZXhwcmVzc2lvbiB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVzdWx0ID0gZ2V0RmFjdG9yeVJldHVybk9iamVjdCh7IHR5cGU6IFwiSWRlbnRpZmllclwiIH0gYXMgbmV2ZXIpO1xuICogdm9pZCByZXN1bHQ7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjdG9yeVJldHVybk9iamVjdChcbiAgZmFjdG9yeUV4cHJlc3Npb246IEVTVHJlZS5FeHByZXNzaW9uLFxuKTogRVNUcmVlLk9iamVjdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuICBpZiAoZmFjdG9yeUV4cHJlc3Npb24udHlwZSAhPT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IHsgYm9keSB9ID0gZmFjdG9yeUV4cHJlc3Npb247XG4gIGlmIChib2R5LnR5cGUgPT09IFwiT2JqZWN0RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cbiAgaWYgKGJvZHkudHlwZSAhPT0gXCJCbG9ja1N0YXRlbWVudFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IHJldHVyblN0YXRlbWVudCA9IGJvZHkuYm9keS5maW5kKFxuICAgIChzdGF0ZW1lbnQpOiBzdGF0ZW1lbnQgaXMgRVNUcmVlLlJldHVyblN0YXRlbWVudCA9PlxuICAgICAgc3RhdGVtZW50LnR5cGUgPT09IFwiUmV0dXJuU3RhdGVtZW50XCIsXG4gICk7XG4gIGNvbnN0IHJldHVybkFyZ3VtZW50ID0gcmV0dXJuU3RhdGVtZW50Py5hcmd1bWVudDtcbiAgcmV0dXJuIHJldHVybkFyZ3VtZW50Py50eXBlID09PSBcIk9iamVjdEV4cHJlc3Npb25cIiA/IHJldHVybkFyZ3VtZW50IDogdm9pZCAwO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgbW9kdWxlIHNwZWNpZmllciBzdHJpbmcgZnJvbSBhIG1vY2sgY2FsbCBhcmd1bWVudC5cbiAqIEBwYXJhbSBtb2R1bGVBcmd1bWVudCBGaXJzdCBhcmd1bWVudCBvZiBgdmkubW9ja2Agb3IgYHZpLmRvTW9ja2AuXG4gKiBAcmV0dXJucyBTdHJpbmcgbW9kdWxlIHNwZWNpZmllciB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBzcGVjaWZpZXIgPSBnZXRNb2R1bGVTcGVjaWZpZXIoeyB0eXBlOiBcIkxpdGVyYWxcIiwgdmFsdWU6IFwiLi94XCIgfSBhcyBuZXZlcik7XG4gKiB2b2lkIHNwZWNpZmllcjtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIoXG4gIG1vZHVsZUFyZ3VtZW50OiBFU1RyZWUuRXhwcmVzc2lvbixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChtb2R1bGVBcmd1bWVudC50eXBlID09PSBcIkltcG9ydEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IHsgc291cmNlIH0gPSBtb2R1bGVBcmd1bWVudDtcbiAgICByZXR1cm4gc291cmNlLnR5cGUgPT09IFwiTGl0ZXJhbFwiICYmIHR5cGVvZiBzb3VyY2UudmFsdWUgPT09IFwic3RyaW5nXCJcbiAgICAgID8gc291cmNlLnZhbHVlXG4gICAgICA6IHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiBtb2R1bGVBcmd1bWVudC50eXBlID09PSBcIkxpdGVyYWxcIiAmJlxuICAgIHR5cGVvZiBtb2R1bGVBcmd1bWVudC52YWx1ZSA9PT0gXCJzdHJpbmdcIlxuICAgID8gbW9kdWxlQXJndW1lbnQudmFsdWVcbiAgICA6IHZvaWQgMDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBuZXdsaW5lIHNlcXVlbmNlIHVzZWQgaW4gc291cmNlIHRleHQuXG4gKiBAcGFyYW0gc291cmNlVGV4dCBGdWxsIHNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMgRGV0ZWN0ZWQgbmV3bGluZSBzZXF1ZW5jZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBuZXdsaW5lID0gZ2V0TmV3bGluZShcImFcXHJcXG5iXCIpO1xuICogdm9pZCBuZXdsaW5lO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldE5ld2xpbmUoc291cmNlVGV4dDogc3RyaW5nKTogXCJcXG5cIiB8IFwiXFxyXFxuXCIge1xuICByZXR1cm4gc291cmNlVGV4dC5pbmNsdWRlcyhcIlxcclxcblwiKSA/IFwiXFxyXFxuXCIgOiBcIlxcblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpbmNsdWRlcyBhIG51bWVyaWMgYHJhbmdlYCB0dXBsZS5cbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgbm9kZSBoYXMgYSB2YWxpZCBgcmFuZ2VgLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9rID0gaGFzUmFuZ2UoeyByYW5nZTogWzAsIDFdIH0gYXMgbmV2ZXIpO1xuICogdm9pZCBvaztcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBoYXNSYW5nZShub2RlOiBFU1RyZWUuTm9kZSk6IG5vZGUgaXMgUmFuZ2VOb2RlIHtcbiAgY29uc3QgcmFuZ2VWYWx1ZSA9IChub2RlIGFzIHVua25vd24gYXMgT3B0aW9uYWxSYW5nZUZpZWxkKS5yYW5nZTtcbiAgcmV0dXJuIChcbiAgICBBcnJheS5pc0FycmF5KHJhbmdlVmFsdWUpICYmXG4gICAgcmFuZ2VWYWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICB0eXBlb2YgcmFuZ2VWYWx1ZVswXSA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiByYW5nZVZhbHVlWzFdID09PSBcIm51bWJlclwiXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gYW4gZXhwcmVzc2lvbiBpcyBhIGB2aS5mbiguLi4pYCBjYWxsLlxuICogQHBhcmFtIGV4cHJlc3Npb24gRXhwcmVzc2lvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBleHByZXNzaW9uIGlzIGEgYHZpLmZuYCBjYWxsLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9rID0gaXNWaUZ1bmN0aW9uQ2FsbChudWxsKTtcbiAqIHZvaWQgb2s7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gaXNWaUZ1bmN0aW9uQ2FsbChleHByZXNzaW9uOiBFU1RyZWUuRXhwcmVzc2lvbiB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKGV4cHJlc3Npb24/LnR5cGUgIT09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5jYWxsZWUudHlwZSAhPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IG9iamVjdCwgcHJvcGVydHkgfSA9IGV4cHJlc3Npb24uY2FsbGVlO1xuICByZXR1cm4gKFxuICAgIG9iamVjdC50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIG9iamVjdC5uYW1lID09PSBcInZpXCIgJiZcbiAgICBwcm9wZXJ0eS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIHByb3BlcnR5Lm5hbWUgPT09IFwiZm5cIlxuICApO1xufVxuXG5leHBvcnQgdHlwZSB7IFJhbmdlIH07XG5leHBvcnQge1xuICBnZXRGYWN0b3J5UmV0dXJuT2JqZWN0LFxuICBnZXRNb2R1bGVTcGVjaWZpZXIsXG4gIGdldE5ld2xpbmUsXG4gIGhhc1JhbmdlLFxuICBpc1ZpRnVuY3Rpb25DYWxsLFxufTtcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import type * as ESTree from "estree";
2
- import type { ImportPlan } from "./types";
2
+ import type { ImportPlan } from "./types.js";
3
3
  /**
4
4
  * Resolves whether imports should be updated in place or inserted.
5
5
  * @param program Program node to inspect.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-imports.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vi-mocked-import/match-imports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAwK1C;;;;;;;;;;;GAWG;AACH,iBAAS,iBAAiB,CACxB,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EAAE,GACd,UAAU,CASZ;AAqBD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { hasRange } from "./match-helpers.js";
2
+ /**
3
+ * Builds an import plan for insertion mode.
4
+ * @param moduleSpecifier Target module path.
5
+ * @param names Names to import.
6
+ * @param afterRange Range to insert after.
7
+ * @returns Insert plan payload.
8
+ * @example
9
+ * ```typescript
10
+ * const plan = createInsertPlan("./x", ["a"], [0, 1]);
11
+ * void plan;
12
+ * ```
13
+ */
14
+ function createInsertPlan(moduleSpecifier, names, afterRange) {
15
+ return afterRange === void 0
16
+ ? { insert: {}, moduleSpecifier, names }
17
+ : { insert: { afterRange }, moduleSpecifier, names };
18
+ }
19
+ /**
20
+ * Builds an import plan for update mode.
21
+ * @param statement Existing import declaration.
22
+ * @param moduleSpecifier Target module path.
23
+ * @param names Names to import.
24
+ * @returns Update plan payload.
25
+ * @example
26
+ * ```typescript
27
+ * const plan = createUpdatePlan({ specifiers: [], source: { type: "Literal", value: "./x" }, type: "ImportDeclaration", range: [0, 1] } as never, "./x", ["a"]);
28
+ * void plan;
29
+ * ```
30
+ */
31
+ function createUpdatePlan(statement, moduleSpecifier, names) {
32
+ if (hasNamespaceImport(statement)) {
33
+ return createInsertPlan(moduleSpecifier, names, statement.range);
34
+ }
35
+ const defaultImportName = getDefaultImportName(statement);
36
+ const baseUpdate = {
37
+ existingNamedImports: getNamedImports(statement),
38
+ range: statement.range,
39
+ };
40
+ const update = defaultImportName === void 0
41
+ ? baseUpdate
42
+ : { ...baseUpdate, defaultImportName };
43
+ return {
44
+ moduleSpecifier,
45
+ names,
46
+ update,
47
+ };
48
+ }
49
+ /**
50
+ * Returns the default import local name.
51
+ * @param statement Import declaration.
52
+ * @returns Default local name when present.
53
+ * @example
54
+ * ```typescript
55
+ * const localName = getDefaultImportName({ specifiers: [], type: "ImportDeclaration" } as never);
56
+ * void localName;
57
+ * ```
58
+ */
59
+ function getDefaultImportName(statement) {
60
+ const defaultSpecifier = statement.specifiers.find((specifier) => specifier.type === "ImportDefaultSpecifier");
61
+ return defaultSpecifier?.local.name;
62
+ }
63
+ /**
64
+ * Filters top-level import declarations that include a `range`.
65
+ * @param program Program node.
66
+ * @returns Import declarations with stable ranges.
67
+ * @example
68
+ * ```typescript
69
+ * const imports = getImportDeclarations({ body: [], sourceType: "module", type: "Program" } as never);
70
+ * void imports;
71
+ * ```
72
+ */
73
+ function getImportDeclarations(program) {
74
+ return program.body.filter((statement) => statement.type === "ImportDeclaration" && hasRange(statement));
75
+ }
76
+ /**
77
+ * Returns all named imports from a declaration.
78
+ * @param statement Import declaration.
79
+ * @returns Named import identifiers.
80
+ * @example
81
+ * ```typescript
82
+ * const named = getNamedImports({ specifiers: [], type: "ImportDeclaration" } as never);
83
+ * void named;
84
+ * ```
85
+ */
86
+ function getNamedImports(statement) {
87
+ return statement.specifiers.flatMap((specifier) => {
88
+ const importedName = toImportedName(specifier);
89
+ return importedName === void 0 ? [] : [importedName];
90
+ });
91
+ }
92
+ /**
93
+ * Checks whether an import includes a namespace specifier.
94
+ * @param statement Import declaration.
95
+ * @returns True when declaration includes `* as x` form.
96
+ * @example
97
+ * ```typescript
98
+ * const hasNamespace = hasNamespaceImport({ specifiers: [], type: "ImportDeclaration" } as never);
99
+ * void hasNamespace;
100
+ * ```
101
+ */
102
+ function hasNamespaceImport(statement) {
103
+ return statement.specifiers.some((specifier) => specifier.type === "ImportNamespaceSpecifier");
104
+ }
105
+ /**
106
+ * Checks whether an import declaration matches the mocked module.
107
+ * @param statement Import declaration candidate.
108
+ * @param moduleSpecifier Expected module path.
109
+ * @returns True when declaration targets the same module.
110
+ * @example
111
+ * ```typescript
112
+ * const matched = isMatchingImport({ source: { type: "Literal", value: "./x" }, type: "ImportDeclaration" } as never, "./x");
113
+ * void matched;
114
+ * ```
115
+ */
116
+ function isMatchingImport(statement, moduleSpecifier) {
117
+ const sourceValue = statement.source.value;
118
+ return typeof sourceValue === "string" && sourceValue === moduleSpecifier;
119
+ }
120
+ /**
121
+ * Resolves whether imports should be updated in place or inserted.
122
+ * @param program Program node to inspect.
123
+ * @param moduleSpecifier Target module path.
124
+ * @param names Import names that must exist.
125
+ * @returns Insert or update plan for the import section.
126
+ * @example
127
+ * ```typescript
128
+ * const plan = resolveImportPlan({ body: [], sourceType: "module", type: "Program" } as never, "./x", ["a"]);
129
+ * void plan;
130
+ * ```
131
+ */
132
+ function resolveImportPlan(program, moduleSpecifier, names) {
133
+ const imports = getImportDeclarations(program);
134
+ const existingImport = imports.find((statement) => isMatchingImport(statement, moduleSpecifier));
135
+ return existingImport === void 0
136
+ ? createInsertPlan(moduleSpecifier, names, imports.at(-1)?.range)
137
+ : createUpdatePlan(existingImport, moduleSpecifier, names);
138
+ }
139
+ /**
140
+ * Extracts imported identifier name from one specifier.
141
+ * @param specifier Import clause entry.
142
+ * @returns Imported identifier name.
143
+ * @example
144
+ * ```typescript
145
+ * const imported = toImportedName({ type: "ImportSpecifier", imported: { type: "Identifier", name: "x" } } as never);
146
+ * void imported;
147
+ * ```
148
+ */
149
+ function toImportedName(specifier) {
150
+ return specifier.type === "ImportSpecifier" &&
151
+ specifier.imported.type === "Identifier"
152
+ ? specifier.imported.name
153
+ : void 0;
154
+ }
155
+ export { resolveImportPlan };
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9wcmVmZXItdmktbW9ja2VkLWltcG9ydC9tYXRjaC1pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWUzQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsZ0JBQWdCLENBQ3ZCLGVBQXVCLEVBQ3ZCLEtBQWUsRUFDZixVQUE2QjtJQUU3QixPQUFPLFVBQVUsS0FBSyxLQUFLLENBQUM7UUFDMUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFO1FBQ3hDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLGdCQUFnQixDQUN2QixTQUFrQyxFQUNsQyxlQUF1QixFQUN2QixLQUFlO0lBRWYsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sZ0JBQWdCLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsTUFBTSxVQUFVLEdBQUc7UUFDakIsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUNoRCxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7S0FDdkIsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUNWLGlCQUFpQixLQUFLLEtBQUssQ0FBQztRQUMxQixDQUFDLENBQUMsVUFBVTtRQUNaLENBQUMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxFQUFFLGlC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cmVlIGZyb20gXCJlc3RyZWVcIjtcblxuaW1wb3J0IHR5cGUgeyBSYW5nZSB9IGZyb20gXCIuL21hdGNoLWhlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgSW1wb3J0UGxhbiB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmltcG9ydCB7IGhhc1JhbmdlIH0gZnJvbSBcIi4vbWF0Y2gtaGVscGVyc1wiO1xuXG4vKipcbiAqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGRlY2xhcmF0aW9uID0ge30gYXMgUmFuZ2VkSW1wb3J0RGVjbGFyYXRpb247XG4gKiB2b2lkIGRlY2xhcmF0aW9uO1xuICogYGBgXG4gKi9cbmludGVyZmFjZSBSYW5nZWRJbXBvcnREZWNsYXJhdGlvbiBleHRlbmRzIEVTVHJlZS5JbXBvcnREZWNsYXJhdGlvbiB7XG4gIC8qKiBJbXBvcnQgZGVjbGFyYXRpb24gc291cmNlIHJhbmdlLiAqL1xuICByYW5nZTogUmFuZ2U7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGltcG9ydCBwbGFuIGZvciBpbnNlcnRpb24gbW9kZS5cbiAqIEBwYXJhbSBtb2R1bGVTcGVjaWZpZXIgVGFyZ2V0IG1vZHVsZSBwYXRoLlxuICogQHBhcmFtIG5hbWVzIE5hbWVzIHRvIGltcG9ydC5cbiAqIEBwYXJhbSBhZnRlclJhbmdlIFJhbmdlIHRvIGluc2VydCBhZnRlci5cbiAqIEByZXR1cm5zIEluc2VydCBwbGFuIHBheWxvYWQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcGxhbiA9IGNyZWF0ZUluc2VydFBsYW4oXCIuL3hcIiwgW1wiYVwiXSwgWzAsIDFdKTtcbiAqIHZvaWQgcGxhbjtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnNlcnRQbGFuKFxuICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZyxcbiAgbmFtZXM6IHN0cmluZ1tdLFxuICBhZnRlclJhbmdlOiBSYW5nZSB8IHVuZGVmaW5lZCxcbik6IEltcG9ydFBsYW4ge1xuICByZXR1cm4gYWZ0ZXJSYW5nZSA9PT0gdm9pZCAwXG4gICAgPyB7IGluc2VydDoge30sIG1vZHVsZVNwZWNpZmllciwgbmFtZXMgfVxuICAgIDogeyBpbnNlcnQ6IHsgYWZ0ZXJSYW5nZSB9LCBtb2R1bGVTcGVjaWZpZXIsIG5hbWVzIH07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGltcG9ydCBwbGFuIGZvciB1cGRhdGUgbW9kZS5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgRXhpc3RpbmcgaW1wb3J0IGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIG1vZHVsZVNwZWNpZmllciBUYXJnZXQgbW9kdWxlIHBhdGguXG4gKiBAcGFyYW0gbmFtZXMgTmFtZXMgdG8gaW1wb3J0LlxuICogQHJldHVybnMgVXBkYXRlIHBsYW4gcGF5bG9hZC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBwbGFuID0gY3JlYXRlVXBkYXRlUGxhbih7IHNwZWNpZmllcnM6IFtdLCBzb3VyY2U6IHsgdHlwZTogXCJMaXRlcmFsXCIsIHZhbHVlOiBcIi4veFwiIH0sIHR5cGU6IFwiSW1wb3J0RGVjbGFyYXRpb25cIiwgcmFuZ2U6IFswLCAxXSB9IGFzIG5ldmVyLCBcIi4veFwiLCBbXCJhXCJdKTtcbiAqIHZvaWQgcGxhbjtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjcmVhdGVVcGRhdGVQbGFuKFxuICBzdGF0ZW1lbnQ6IFJhbmdlZEltcG9ydERlY2xhcmF0aW9uLFxuICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZyxcbiAgbmFtZXM6IHN0cmluZ1tdLFxuKTogSW1wb3J0UGxhbiB7XG4gIGlmIChoYXNOYW1lc3BhY2VJbXBvcnQoc3RhdGVtZW50KSkge1xuICAgIHJldHVybiBjcmVhdGVJbnNlcnRQbGFuKG1vZHVsZVNwZWNpZmllciwgbmFtZXMsIHN0YXRlbWVudC5yYW5nZSk7XG4gIH1cblxuICBjb25zdCBkZWZhdWx0SW1wb3J0TmFtZSA9IGdldERlZmF1bHRJbXBvcnROYW1lKHN0YXRlbWVudCk7XG4gIGNvbnN0IGJhc2VVcGRhdGUgPSB7XG4gICAgZXhpc3RpbmdOYW1lZEltcG9ydHM6IGdldE5hbWVkSW1wb3J0cyhzdGF0ZW1lbnQpLFxuICAgIHJhbmdlOiBzdGF0ZW1lbnQucmFuZ2UsXG4gIH07XG4gIGNvbnN0IHVwZGF0ZSA9XG4gICAgZGVmYXVsdEltcG9ydE5hbWUgPT09IHZvaWQgMFxuICAgICAgPyBiYXNlVXBkYXRlXG4gICAgICA6IHsgLi4uYmFzZVVwZGF0ZSwgZGVmYXVsdEltcG9ydE5hbWUgfTtcblxuICByZXR1cm4ge1xuICAgIG1vZHVsZVNwZWNpZmllcixcbiAgICBuYW1lcyxcbiAgICB1cGRhdGUsXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVmYXVsdCBpbXBvcnQgbG9jYWwgbmFtZS5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW1wb3J0IGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMgRGVmYXVsdCBsb2NhbCBuYW1lIHdoZW4gcHJlc2VudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBsb2NhbE5hbWUgPSBnZXREZWZhdWx0SW1wb3J0TmFtZSh7IHNwZWNpZmllcnM6IFtdLCB0eXBlOiBcIkltcG9ydERlY2xhcmF0aW9uXCIgfSBhcyBuZXZlcik7XG4gKiB2b2lkIGxvY2FsTmFtZTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0SW1wb3J0TmFtZShcbiAgc3RhdGVtZW50OiBFU1RyZWUuSW1wb3J0RGVjbGFyYXRpb24sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBkZWZhdWx0U3BlY2lmaWVyID0gc3RhdGVtZW50LnNwZWNpZmllcnMuZmluZChcbiAgICAoc3BlY2lmaWVyKTogc3BlY2lmaWVyIGlzIEVTVHJlZS5JbXBvcnREZWZhdWx0U3BlY2lmaWVyID0+XG4gICAgICBzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIsXG4gICk7XG4gIHJldHVybiBkZWZhdWx0U3BlY2lmaWVyPy5sb2NhbC5uYW1lO1xufVxuXG4vKipcbiAqIEZpbHRlcnMgdG9wLWxldmVsIGltcG9ydCBkZWNsYXJhdGlvbnMgdGhhdCBpbmNsdWRlIGEgYHJhbmdlYC5cbiAqIEBwYXJhbSBwcm9ncmFtIFByb2dyYW0gbm9kZS5cbiAqIEByZXR1cm5zIEltcG9ydCBkZWNsYXJhdGlvbnMgd2l0aCBzdGFibGUgcmFuZ2VzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGltcG9ydHMgPSBnZXRJbXBvcnREZWNsYXJhdGlvbnMoeyBib2R5OiBbXSwgc291cmNlVHlwZTogXCJtb2R1bGVcIiwgdHlwZTogXCJQcm9ncmFtXCIgfSBhcyBuZXZlcik7XG4gKiB2b2lkIGltcG9ydHM7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0SW1wb3J0RGVjbGFyYXRpb25zKFxuICBwcm9ncmFtOiBFU1RyZWUuUHJvZ3JhbSxcbik6IFJhbmdlZEltcG9ydERlY2xhcmF0aW9uW10ge1xuICByZXR1cm4gcHJvZ3JhbS5ib2R5LmZpbHRlcihcbiAgICAoc3RhdGVtZW50KTogc3RhdGVtZW50IGlzIFJhbmdlZEltcG9ydERlY2xhcmF0aW9uID0+XG4gICAgICBzdGF0ZW1lbnQudHlwZSA9PT0gXCJJbXBvcnREZWNsYXJhdGlvblwiICYmIGhhc1JhbmdlKHN0YXRlbWVudCksXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbGwgbmFtZWQgaW1wb3J0cyBmcm9tIGEgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0gc3RhdGVtZW50IEltcG9ydCBkZWNsYXJhdGlvbi5cbiAqIEByZXR1cm5zIE5hbWVkIGltcG9ydCBpZGVudGlmaWVycy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBuYW1lZCA9IGdldE5hbWVkSW1wb3J0cyh7IHNwZWNpZmllcnM6IFtdLCB0eXBlOiBcIkltcG9ydERlY2xhcmF0aW9uXCIgfSBhcyBuZXZlcik7XG4gKiB2b2lkIG5hbWVkO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldE5hbWVkSW1wb3J0cyhzdGF0ZW1lbnQ6IEVTVHJlZS5JbXBvcnREZWNsYXJhdGlvbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHN0YXRlbWVudC5zcGVjaWZpZXJzLmZsYXRNYXAoKHNwZWNpZmllcikgPT4ge1xuICAgIGNvbnN0IGltcG9ydGVkTmFtZSA9IHRvSW1wb3J0ZWROYW1lKHNwZWNpZmllcik7XG4gICAgcmV0dXJuIGltcG9ydGVkTmFtZSA9PT0gdm9pZCAwID8gW10gOiBbaW1wb3J0ZWROYW1lXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gaW1wb3J0IGluY2x1ZGVzIGEgbmFtZXNwYWNlIHNwZWNpZmllci5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW1wb3J0IGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIGRlY2xhcmF0aW9uIGluY2x1ZGVzIGAqIGFzIHhgIGZvcm0uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaGFzTmFtZXNwYWNlID0gaGFzTmFtZXNwYWNlSW1wb3J0KHsgc3BlY2lmaWVyczogW10sIHR5cGU6IFwiSW1wb3J0RGVjbGFyYXRpb25cIiB9IGFzIG5ldmVyKTtcbiAqIHZvaWQgaGFzTmFtZXNwYWNlO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGhhc05hbWVzcGFjZUltcG9ydChzdGF0ZW1lbnQ6IEVTVHJlZS5JbXBvcnREZWNsYXJhdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhdGVtZW50LnNwZWNpZmllcnMuc29tZShcbiAgICAoc3BlY2lmaWVyKSA9PiBzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXJcIixcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBpbXBvcnQgZGVjbGFyYXRpb24gbWF0Y2hlcyB0aGUgbW9ja2VkIG1vZHVsZS5cbiAqIEBwYXJhbSBzdGF0ZW1lbnQgSW1wb3J0IGRlY2xhcmF0aW9uIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSBtb2R1bGVTcGVjaWZpZXIgRXhwZWN0ZWQgbW9kdWxlIHBhdGguXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gZGVjbGFyYXRpb24gdGFyZ2V0cyB0aGUgc2FtZSBtb2R1bGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWF0Y2hlZCA9IGlzTWF0Y2hpbmdJbXBvcnQoeyBzb3VyY2U6IHsgdHlwZTogXCJMaXRlcmFsXCIsIHZhbHVlOiBcIi4veFwiIH0sIHR5cGU6IFwiSW1wb3J0RGVjbGFyYXRpb25cIiB9IGFzIG5ldmVyLCBcIi4veFwiKTtcbiAqIHZvaWQgbWF0Y2hlZDtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc01hdGNoaW5nSW1wb3J0KFxuICBzdGF0ZW1lbnQ6IEVTVHJlZS5JbXBvcnREZWNsYXJhdGlvbixcbiAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsXG4pOiBib29sZWFuIHtcbiAgY29uc3Qgc291cmNlVmFsdWUgPSBzdGF0ZW1lbnQuc291cmNlLnZhbHVlO1xuICByZXR1cm4gdHlwZW9mIHNvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiICYmIHNvdXJjZVZhbHVlID09PSBtb2R1bGVTcGVjaWZpZXI7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2hldGhlciBpbXBvcnRzIHNob3VsZCBiZSB1cGRhdGVkIGluIHBsYWNlIG9yIGluc2VydGVkLlxuICogQHBhcmFtIHByb2dyYW0gUHJvZ3JhbSBub2RlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gbW9kdWxlU3BlY2lmaWVyIFRhcmdldCBtb2R1bGUgcGF0aC5cbiAqIEBwYXJhbSBuYW1lcyBJbXBvcnQgbmFtZXMgdGhhdCBtdXN0IGV4aXN0LlxuICogQHJldHVybnMgSW5zZXJ0IG9yIHVwZGF0ZSBwbGFuIGZvciB0aGUgaW1wb3J0IHNlY3Rpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcGxhbiA9IHJlc29sdmVJbXBvcnRQbGFuKHsgYm9keTogW10sIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsIHR5cGU6IFwiUHJvZ3JhbVwiIH0gYXMgbmV2ZXIsIFwiLi94XCIsIFtcImFcIl0pO1xuICogdm9pZCBwbGFuO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbXBvcnRQbGFuKFxuICBwcm9ncmFtOiBFU1RyZWUuUHJvZ3JhbSxcbiAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsXG4gIG5hbWVzOiBzdHJpbmdbXSxcbik6IEltcG9ydFBsYW4ge1xuICBjb25zdCBpbXBvcnRzID0gZ2V0SW1wb3J0RGVjbGFyYXRpb25zKHByb2dyYW0pO1xuICBjb25zdCBleGlzdGluZ0ltcG9ydCA9IGltcG9ydHMuZmluZCgoc3RhdGVtZW50KSA9PlxuICAgIGlzTWF0Y2hpbmdJbXBvcnQoc3RhdGVtZW50LCBtb2R1bGVTcGVjaWZpZXIpLFxuICApO1xuXG4gIHJldHVybiBleGlzdGluZ0ltcG9ydCA9PT0gdm9pZCAwXG4gICAgPyBjcmVhdGVJbnNlcnRQbGFuKG1vZHVsZVNwZWNpZmllciwgbmFtZXMsIGltcG9ydHMuYXQoLTEpPy5yYW5nZSlcbiAgICA6IGNyZWF0ZVVwZGF0ZVBsYW4oZXhpc3RpbmdJbXBvcnQsIG1vZHVsZVNwZWNpZmllciwgbmFtZXMpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGltcG9ydGVkIGlkZW50aWZpZXIgbmFtZSBmcm9tIG9uZSBzcGVjaWZpZXIuXG4gKiBAcGFyYW0gc3BlY2lmaWVyIEltcG9ydCBjbGF1c2UgZW50cnkuXG4gKiBAcmV0dXJucyBJbXBvcnRlZCBpZGVudGlmaWVyIG5hbWUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaW1wb3J0ZWQgPSB0b0ltcG9ydGVkTmFtZSh7IHR5cGU6IFwiSW1wb3J0U3BlY2lmaWVyXCIsIGltcG9ydGVkOiB7IHR5cGU6IFwiSWRlbnRpZmllclwiLCBuYW1lOiBcInhcIiB9IH0gYXMgbmV2ZXIpO1xuICogdm9pZCBpbXBvcnRlZDtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiB0b0ltcG9ydGVkTmFtZShcbiAgc3BlY2lmaWVyOiBFU1RyZWUuSW1wb3J0RGVjbGFyYXRpb25bXCJzcGVjaWZpZXJzXCJdW251bWJlcl0sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc3BlY2lmaWVyLnR5cGUgPT09IFwiSW1wb3J0U3BlY2lmaWVyXCIgJiZcbiAgICBzcGVjaWZpZXIuaW1wb3J0ZWQudHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICA/IHNwZWNpZmllci5pbXBvcnRlZC5uYW1lXG4gICAgOiB2b2lkIDA7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVJbXBvcnRQbGFuIH07XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import type * as ESTree from "estree";
2
- import type { Binding, Declaration, MemberRewrite } from "./types";
2
+ import type { Binding, Declaration, MemberRewrite } from "./types.js";
3
3
  /**
4
4
  * Returns false if a binding local is used outside allowed rewrite sites.
5
5
  * @param program Program node containing mock usage.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-rewrites.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vi-mocked-import/match-rewrites.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAyBnE;;;;;;;;;;;GAWG;AACH,iBAAS,qBAAqB,CAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,uBAAuB,EAAE,GAAG,CAAC,MAAM,CAAC,EACpC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,OAAO,CAkBT;AAED;;;;;;;;;;;GAWG;AACH,iBAAS,kBAAkB,CACzB,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,QAAQ,EAAE,aAAa,EAAE,GACxB,GAAG,CAAC,MAAM,CAAC,CAkBb;AAED;;;;;;;;;;GAUG;AACH,iBAAS,qBAAqB,CAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,aAAa,EAAE,CAUjB;AAqCD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,CAAC"}