@codeperfect/eslint-plugin 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/README.md +3 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/application/custom-rules.d.ts +8 -8
  4. package/dist/application/custom-rules.js +14 -14
  5. package/dist/application/index.d.ts +1 -1
  6. package/dist/application/index.d.ts.map +1 -1
  7. package/dist/application/index.js +2 -2
  8. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  9. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +3 -4
  10. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -1
  11. package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +5 -3
  12. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -1
  13. package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +17 -7
  14. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
  15. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +36 -4
  16. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +2 -0
  17. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -1
  18. package/dist/domain/architecture/consistent-barrel-files/index.js +3 -1
  19. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.d.ts +5 -0
  20. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.d.ts.map +1 -0
  21. package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.js +247 -0
  22. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts +5 -0
  23. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts.map +1 -0
  24. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.js +136 -0
  25. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -1
  26. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +8 -3
  27. package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
  28. package/dist/domain/architecture/consistent-barrel-files/rule.js +12 -5
  29. package/dist/domain/architecture/index.d.ts +2 -1
  30. package/dist/domain/architecture/index.d.ts.map +1 -1
  31. package/dist/domain/architecture/index.js +3 -2
  32. package/dist/domain/architecture/no-unused-exports/index.d.ts +3 -0
  33. package/dist/domain/architecture/no-unused-exports/index.d.ts.map +1 -0
  34. package/dist/domain/architecture/no-unused-exports/index.js +2 -0
  35. package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.d.ts +50 -0
  36. package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.d.ts.map +1 -0
  37. package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.js +141 -0
  38. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts +49 -0
  39. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts.map +1 -0
  40. package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.js +608 -0
  41. package/dist/domain/architecture/no-unused-exports/rule.d.ts +5 -0
  42. package/dist/domain/architecture/no-unused-exports/rule.d.ts.map +1 -0
  43. package/dist/domain/architecture/no-unused-exports/rule.js +82 -0
  44. package/dist/domain/architecture/no-unused-exports/types.d.ts +32 -0
  45. package/dist/domain/architecture/no-unused-exports/types.d.ts.map +1 -0
  46. package/dist/domain/architecture/no-unused-exports/types.js +2 -0
  47. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  48. package/dist/domain/core/no-multiple-declarators/rule.js +58 -6
  49. package/dist/domain/core/no-multiple-declarators/types.d.ts +3 -1
  50. package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -1
  51. package/dist/domain/core/no-multiple-declarators/types.js +5 -2
  52. package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -1
  53. package/dist/domain/core/prefer-interface-types/rule.js +94 -23
  54. package/dist/domain/custom-rule-documentation.d.ts +3 -14
  55. package/dist/domain/custom-rule-documentation.d.ts.map +1 -1
  56. package/dist/domain/custom-rule-documentation.js +3 -2
  57. package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -1
  58. package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +11 -2
  59. package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -1
  60. package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +1 -1
  61. package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +1 -1
  62. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  63. package/dist/domain/docs/no-interface-member-docs/rule.js +12 -4
  64. package/dist/domain/docs/require-example-language/examples.d.ts +4 -15
  65. package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -1
  66. package/dist/domain/docs/require-example-language/examples.js +119 -26
  67. package/dist/domain/docs/require-example-language/fixes.d.ts +1 -21
  68. package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -1
  69. package/dist/domain/docs/require-example-language/fixes.js +5 -2
  70. package/dist/domain/docs/require-example-language/reporting.d.ts +2 -38
  71. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -1
  72. package/dist/domain/docs/require-example-language/reporting.js +2 -2
  73. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
  74. package/dist/domain/docs/require-example-language/rule.js +7 -3
  75. package/dist/domain/docs/require-example-language/types.d.ts +1 -1
  76. package/dist/domain/docs/require-example-language/types.d.ts.map +1 -1
  77. package/dist/domain/docs/require-example-language/types.js +1 -1
  78. package/dist/domain/docs/single-line-jsdoc/rule.d.ts +1 -2
  79. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
  80. package/dist/domain/docs/single-line-jsdoc/rule.js +18 -13
  81. package/dist/domain/index.d.ts +2 -3
  82. package/dist/domain/index.d.ts.map +1 -1
  83. package/dist/domain/index.js +3 -4
  84. package/dist/domain/testing/aaa/analyzer.analysis.d.ts +2 -78
  85. package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -1
  86. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +121 -3
  87. package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
  88. package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +199 -4
  89. package/dist/domain/testing/aaa/analyzer.analysis.js +30 -188
  90. package/dist/domain/testing/aaa/analyzer.assertions.d.ts +1 -92
  91. package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -1
  92. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +93 -0
  93. package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
  94. package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +184 -0
  95. package/dist/domain/testing/aaa/analyzer.assertions.js +5 -283
  96. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +62 -0
  97. package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
  98. package/dist/domain/testing/aaa/analyzer.assertions.operands.js +106 -0
  99. package/dist/domain/testing/aaa/analyzer.classification.d.ts +1 -74
  100. package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -1
  101. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +75 -0
  102. package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
  103. package/dist/domain/testing/aaa/analyzer.classification.helpers.js +202 -0
  104. package/dist/domain/testing/aaa/analyzer.classification.js +5 -201
  105. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +13 -0
  106. package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
  107. package/dist/domain/testing/aaa/analyzer.classification.traversal.js +32 -0
  108. package/dist/domain/testing/aaa/analyzer.super.d.ts +6 -13
  109. package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
  110. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +14 -0
  111. package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
  112. package/dist/domain/testing/aaa/analyzer.super.helpers.js +64 -0
  113. package/dist/domain/testing/aaa/analyzer.super.js +29 -61
  114. package/dist/domain/testing/aaa/index.d.ts +1 -2
  115. package/dist/domain/testing/aaa/index.d.ts.map +1 -1
  116. package/dist/domain/testing/aaa/index.js +2 -2
  117. package/dist/domain/testing/aaa/types.d.ts +1 -1
  118. package/dist/domain/testing/aaa/types.d.ts.map +1 -1
  119. package/dist/domain/testing/aaa/types.js +1 -1
  120. package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -1
  121. package/dist/domain/testing/assert-actual-expected-names/rule.js +33 -5
  122. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -1
  123. package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -1
  124. package/dist/domain/testing/enforce-aaa-phase-purity/index.js +3 -2
  125. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +1 -1
  126. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -1
  127. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +1 -1
  128. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +1 -1
  129. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -1
  130. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +78 -16
  131. package/dist/domain/testing/{require-aaa-sections → enforce-aaa-structure}/missing-section-fixes.d.ts +1 -1
  132. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.d.ts.map +1 -0
  133. package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.js +150 -0
  134. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
  135. package/dist/domain/testing/enforce-aaa-structure/rule.js +165 -3
  136. package/dist/domain/testing/index.d.ts +0 -3
  137. package/dist/domain/testing/index.d.ts.map +1 -1
  138. package/dist/domain/testing/index.js +1 -4
  139. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +1 -15
  140. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -1
  141. package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +2 -71
  142. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -1
  143. package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +4 -2
  144. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +1 -13
  145. package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -1
  146. package/dist/domain/testing/prefer-vi-mocked-import/fix.js +3 -21
  147. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -1
  148. package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +2 -1
  149. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -1
  150. package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +1 -1
  151. package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +6 -6
  152. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +1 -12
  153. package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -1
  154. package/dist/domain/testing/prefer-vi-mocked-import/match.js +149 -15
  155. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
  156. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +6 -3
  157. package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
  158. package/dist/domain/testing/require-act-result-capture/rule.js +42 -10
  159. package/dist/domain/testing/require-test-companion/index.d.ts +0 -1
  160. package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -1
  161. package/dist/domain/testing/require-test-companion/index.js +1 -2
  162. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts +2 -1
  163. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -1
  164. package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +13 -58
  165. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts +2 -1
  166. package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -1
  167. package/dist/domain/testing/require-test-companion/require-test-companion-options.js +6 -5
  168. package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -1
  169. package/dist/domain/testing/require-test-companion/rule.js +34 -9
  170. package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -1
  171. package/dist/domain/testing/single-act-statement/rule.js +11 -5
  172. package/dist/index.d.ts +1 -1
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +2 -2
  175. package/dist/infrastructure/codeperfect-plugin.d.ts +6 -6
  176. package/dist/infrastructure/codeperfect-plugin.js +5 -5
  177. package/dist/infrastructure/presets.d.ts.map +1 -1
  178. package/dist/infrastructure/presets.js +23 -7
  179. package/package.json +37 -38
  180. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +0 -41
  181. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
  182. package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -87
  183. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +0 -40
  184. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
  185. package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -91
  186. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +0 -4
  187. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +0 -1
  188. package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +0 -4
  189. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts +0 -141
  190. package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
  191. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +0 -20
  192. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +0 -1
  193. package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +0 -25
  194. package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +0 -235
  195. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +0 -101
  196. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +0 -1
  197. package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +0 -108
  198. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +0 -35
  199. package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +0 -1
  200. package/dist/domain/core/no-multiple-declarators/rule.fixes.js +0 -95
  201. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +0 -4
  202. package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +0 -1
  203. package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +0 -4
  204. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +0 -4
  205. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +0 -1
  206. package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +0 -4
  207. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts +0 -110
  208. package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
  209. package/dist/domain/core/prefer-interface-types/test-helpers.js +0 -116
  210. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -89
  211. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
  212. package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
  213. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts +0 -103
  214. package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
  215. package/dist/domain/docs/no-interface-member-docs/test-helpers.js +0 -157
  216. package/dist/domain/docs/require-example-language/create-fixer.d.ts +0 -5
  217. package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +0 -1
  218. package/dist/domain/docs/require-example-language/create-fixer.js +0 -5
  219. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +0 -4
  220. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +0 -1
  221. package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +0 -5
  222. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +0 -4
  223. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +0 -1
  224. package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +0 -5
  225. package/dist/domain/docs/test-helpers.d.ts +0 -50
  226. package/dist/domain/docs/test-helpers.d.ts.map +0 -1
  227. package/dist/domain/docs/test-helpers.js +0 -107
  228. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +0 -9
  229. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +0 -1
  230. package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +0 -10
  231. package/dist/domain/testing/aaa/analyzer.d.ts +0 -46
  232. package/dist/domain/testing/aaa/analyzer.d.ts.map +0 -1
  233. package/dist/domain/testing/aaa/analyzer.js +0 -59
  234. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +0 -4
  235. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +0 -1
  236. package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +0 -4
  237. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +0 -42
  238. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +0 -1
  239. package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +0 -188
  240. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts +0 -5
  241. package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
  242. package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +0 -34
  243. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +0 -20
  244. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +0 -1
  245. package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +0 -39
  246. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +0 -86
  247. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +0 -1
  248. package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +0 -150
  249. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +0 -2
  250. package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +0 -1
  251. package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +0 -2
  252. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +0 -14
  253. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +0 -1
  254. package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +0 -81
  255. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +0 -13
  256. package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +0 -1
  257. package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +0 -189
  258. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +0 -25
  259. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +0 -1
  260. package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +0 -92
  261. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +0 -32
  262. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +0 -1
  263. package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +0 -164
  264. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +0 -5
  265. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +0 -1
  266. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +0 -4
  267. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +0 -1
  268. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +0 -4
  269. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +0 -4
  270. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +0 -1
  271. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +0 -4
  272. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +0 -62
  273. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +0 -4
  274. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +0 -1
  275. package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +0 -4
  276. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +0 -24
  277. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +0 -1
  278. package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +0 -113
  279. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +0 -36
  280. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +0 -1
  281. package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +0 -138
  282. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +0 -203
  283. package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +0 -1
  284. package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +0 -2
  285. package/dist/domain/testing/require-aaa-sections/index.d.ts +0 -2
  286. package/dist/domain/testing/require-aaa-sections/index.d.ts.map +0 -1
  287. package/dist/domain/testing/require-aaa-sections/index.js +0 -2
  288. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +0 -1
  289. package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +0 -150
  290. package/dist/domain/testing/require-aaa-sections/rule.d.ts +0 -5
  291. package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +0 -1
  292. package/dist/domain/testing/require-aaa-sections/rule.js +0 -129
  293. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +0 -104
  294. package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +0 -1
  295. package/dist/domain/testing/require-aaa-sections/rule.reporting.js +0 -217
  296. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts +0 -51
  297. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
  298. package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +0 -184
  299. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts +0 -28
  300. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
  301. package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +0 -26
@@ -1,189 +0,0 @@
1
- import { getPropertyName, isSupportedProperty, shouldWrapImplicitObject, } from "./ast-helpers.js";
2
- import { getFactoryMatchInput } from "./match-input.js";
3
- import { applyTextReplacements, buildPropertyReplacement, } from "./replacement-helpers.js";
4
- import { isOuterCastRequired, resolveFactoryTargetType } from "./type-helpers.js";
5
- /**
6
- * Records one property replacement when the source text must change.
7
- * @param propertyNames Property names already handled for the object literal.
8
- * @param replacements Replacement entries collected so far.
9
- * @param replacementContext Replacement context for the current property.
10
- * @example
11
- * ```typescript
12
- * appendPropertyReplacement(new Set(), [], replacementContext);
13
- * ```
14
- */
15
- function appendPropertyReplacement(propertyNames, replacements, replacementContext) {
16
- propertyNames.add(replacementContext.keyName);
17
- const replacement = buildPropertyReplacement(replacementContext);
18
- if (replacement !== void 0) {
19
- replacements.push(replacement);
20
- }
21
- }
22
- /**
23
- * Builds the final match result for a rewritten object literal.
24
- * @param context Data required to build the final replacement.
25
- * @returns Final match result when the object text changes.
26
- * @example
27
- * ```typescript
28
- * const match = buildMatchResult(context);
29
- * ```
30
- */
31
- function buildMatchResult(context) {
32
- const objectText = applyTextReplacements(context.sourceText.slice(context.objectExpression.range[0], context.objectExpression.range[1]), context.replacements, context.objectExpression.range[0]);
33
- const replacementText = createReplacementText(context, objectText);
34
- const originalText = context.sourceText.slice(context.returnExpression.range[0], context.returnExpression.range[1]);
35
- return originalText === replacementText
36
- ? void 0
37
- : {
38
- replacementText,
39
- returnExpressionRange: context.returnExpression.range,
40
- };
41
- }
42
- /**
43
- * Collects nested replacements for all supported object literal properties.
44
- * @param context Data required to analyze supported object properties.
45
- * @param properties Supported object literal properties to rewrite.
46
- * @returns Property replacements when every property can be handled safely.
47
- * @example
48
- * ```typescript
49
- * const collection = buildPropertyReplacementCollection(context, properties);
50
- * ```
51
- */
52
- function buildPropertyReplacementCollection(context, properties) {
53
- const propertyNames = new Set();
54
- const replacements = [];
55
- const targetProperties = createTargetPropertyMap(context);
56
- for (const property of properties) {
57
- const replacementContext = createPropertyReplacementContext(context, property, targetProperties);
58
- if (replacementContext === void 0) {
59
- return void 0;
60
- }
61
- appendPropertyReplacement(propertyNames, replacements, replacementContext);
62
- }
63
- return { propertyNames, replacements };
64
- }
65
- /**
66
- * Collects a fix match for a supported Vitest mock factory call.
67
- * @param context Match collection context.
68
- * @returns Match result when the object literal can be safely rewritten.
69
- * @example
70
- * ```typescript
71
- * const match = collectMatch(context);
72
- * ```
73
- */
74
- function collectMatch(context) {
75
- const factoryMatchInput = getFactoryMatchInput(context.callExpression);
76
- if (factoryMatchInput === void 0) {
77
- return void 0;
78
- }
79
- const targetType = resolveFactoryTargetType({
80
- callExpression: context.callExpression,
81
- checker: context.checker,
82
- factoryArgument: factoryMatchInput.factoryArgument,
83
- objectExpression: factoryMatchInput.objectExpression,
84
- services: context.services,
85
- });
86
- if (targetType === void 0) {
87
- return void 0;
88
- }
89
- const collectedReplacements = collectPropertyReplacements({
90
- checker: context.checker,
91
- moduleSpecifier: factoryMatchInput.moduleSpecifier,
92
- objectExpression: factoryMatchInput.objectExpression,
93
- services: context.services,
94
- sourceText: context.sourceText,
95
- targetType,
96
- });
97
- return collectedReplacements === void 0
98
- ? void 0
99
- : buildMatchResult({
100
- checker: context.checker,
101
- factoryArgument: factoryMatchInput.factoryArgument,
102
- moduleSpecifier: factoryMatchInput.moduleSpecifier,
103
- objectExpression: factoryMatchInput.objectExpression,
104
- propertyNames: collectedReplacements.propertyNames,
105
- replacements: collectedReplacements.replacements,
106
- returnExpression: factoryMatchInput.returnExpression,
107
- sourceText: context.sourceText,
108
- targetType,
109
- });
110
- }
111
- /**
112
- * Collects nested replacements for all supported object literal properties.
113
- * @param context Data required to analyze supported object properties.
114
- * @returns Property replacements when every property can be handled safely.
115
- * @example
116
- * ```typescript
117
- * const collection = collectPropertyReplacements(context);
118
- * ```
119
- */
120
- function collectPropertyReplacements(context) {
121
- const properties = context.objectExpression.properties.filter((property) => isSupportedProperty(property));
122
- return properties.length === context.objectExpression.properties.length
123
- ? buildPropertyReplacementCollection(context, properties)
124
- : void 0;
125
- }
126
- /**
127
- * Creates replacement inputs for one supported object literal property.
128
- * @param context Data required to analyze supported object properties.
129
- * @param property Supported property from the returned object literal.
130
- * @param targetProperties Target-property lookup keyed by property name.
131
- * @returns Replacement inputs when the property can be handled safely.
132
- * @example
133
- * ```typescript
134
- * const replacementContext = createPropertyReplacementContext(context, property, targetProperties);
135
- * ```
136
- */
137
- function createPropertyReplacementContext(context, property, targetProperties) {
138
- const keyName = getPropertyName(property.key);
139
- const targetPropertySymbol = keyName === void 0 ? void 0 : targetProperties.get(keyName);
140
- return keyName === void 0 || targetPropertySymbol === void 0
141
- ? void 0
142
- : {
143
- checker: context.checker,
144
- keyName,
145
- moduleSpecifier: context.moduleSpecifier,
146
- property,
147
- services: context.services,
148
- sourceText: context.sourceText,
149
- targetPropertySymbol,
150
- };
151
- }
152
- /**
153
- * Creates the final replacement text for the returned object expression.
154
- * @param context Data required to build the final replacement.
155
- * @param objectText Rewritten object literal text.
156
- * @returns Final replacement text for the factory return expression.
157
- * @example
158
- * ```typescript
159
- * const text = createReplacementText(context, "({})");
160
- * ```
161
- */
162
- function createReplacementText(context, objectText) {
163
- if (isOuterCastRequired({
164
- checker: context.checker,
165
- propertyNames: context.propertyNames,
166
- targetType: context.targetType,
167
- })) {
168
- return `(${objectText}) as typeof import(${JSON.stringify(context.moduleSpecifier)})`;
169
- }
170
- return shouldWrapImplicitObject(context.factoryArgument, context.returnExpression, context.objectExpression)
171
- ? `(${objectText})`
172
- : objectText;
173
- }
174
- /**
175
- * Builds the lookup of target properties from the inferred target type.
176
- * @param context Data required to analyze supported object properties.
177
- * @returns Target-property lookup keyed by property name.
178
- * @example
179
- * ```typescript
180
- * const targetProperties = createTargetPropertyMap(context);
181
- * ```
182
- */
183
- function createTargetPropertyMap(context) {
184
- return new Map(context.checker
185
- .getPropertiesOfType(context.targetType)
186
- .map((propertySymbol) => [propertySymbol.getName(), propertySymbol]));
187
- }
188
- export { collectMatch };
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0cy9tYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLG1CQUFtQixFQUNuQix3QkFBd0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsd0JBQXdCLEdBQ3pCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0U7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FDaEMsYUFBMEIsRUFDMUIsWUFBbUMsRUFDbkMsa0JBQW1EO0lBRW5ELGFBQWEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFOUMsTUFBTSxXQUFXLEdBQUcsd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUVqRSxJQUFJLFdBQVcsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZ0JBQWdCLENBQ3ZCLE9BQWdDO0lBRWhDLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUN0QyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FDdEIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDakMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDbEMsRUFDRCxPQUFPLENBQUMsWUFBWSxFQUNwQixPQUFPLENB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T0FBTyxDQUFDLGVBQWU7WUFDeEMsUUFBUTtZQUNSLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDOUIsb0JBQW9CO1NBQ3JCLENBQUM7QUFDUixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsT0FBZ0MsRUFDaEMsVUFBa0I7SUFFbEIsSUFDRSxtQkFBbUIsQ0FBQztRQUNsQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1FBQ3BDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtLQUMvQixDQUFDLEVBQ0YsQ0FBQztRQUNELE9BQU8sSUFBSSxVQUFVLHNCQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxPQUFPLHdCQUF3QixDQUM3QixPQUFPLENBQUMsZUFBZSxFQUN2QixPQUFPLENBQUMsZ0JBQWdCLEVBQ3hCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDekI7UUFDQyxDQUFDLENBQUMsSUFBSSxVQUFVLEdBQUc7UUFDbkIsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHVCQUF1QixDQUM5QixPQUEyQztJQUUzQyxPQUFPLElBQUksR0FBRyxDQUNaLE9BQU8sQ0FBQyxPQUFPO1NBQ1osbUJBQW1CLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUN2QyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQ3ZFLENBQUM7QUFDSixDQUFDO0FBRUQsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xyXG4gIEJ1aWxkTWF0Y2hSZXN1bHRDb250ZXh0LFxyXG4gIEJ1aWxkUHJvcGVydHlSZXBsYWNlbWVudENvbnRleHQsXHJcbiAgQ29sbGVjdE1hdGNoQ29udGV4dCxcclxuICBDb2xsZWN0UHJvcGVydHlSZXBsYWNlbWVudHNDb250ZXh0LFxyXG4gIE1hdGNoUmVzdWx0LFxyXG4gIFByb3BlcnR5UmVwbGFjZW1lbnQsXHJcbiAgUHJvcGVydHlSZXBsYWNlbWVudENvbGxlY3Rpb24sXHJcbiAgU3VwcG9ydGVkUHJvcGVydHksXHJcbiAgVGFyZ2V0UHJvcGVydHlNYXAsXHJcbn0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0UHJvcGVydHlOYW1lLFxyXG4gIGlzU3VwcG9ydGVkUHJvcGVydHksXHJcbiAgc2hvdWxkV3JhcEltcGxpY2l0T2JqZWN0LFxyXG59IGZyb20gXCIuL2FzdC1oZWxwZXJzXCI7XHJcbmltcG9ydCB7IGdldEZhY3RvcnlNYXRjaElucHV0IH0gZnJvbSBcIi4vbWF0Y2gtaW5wdXRcIjtcclxuaW1wb3J0IHtcclxuICBhcHBseVRleHRSZXBsYWNlbWVudHMsXHJcbiAgYnVpbGRQcm9wZXJ0eVJlcGxhY2VtZW50LFxyXG59IGZyb20gXCIuL3JlcGxhY2VtZW50LWhlbHBlcnNcIjtcclxuaW1wb3J0IHsgaXNPdXRlckNhc3RSZXF1aXJlZCwgcmVzb2x2ZUZhY3RvcnlUYXJnZXRUeXBlIH0gZnJvbSBcIi4vdHlwZS1oZWxwZXJzXCI7XHJcblxyXG4vKipcclxuICogUmVjb3JkcyBvbmUgcHJvcGVydHkgcmVwbGFjZW1lbnQgd2hlbiB0aGUgc291cmNlIHRleHQgbXVzdCBjaGFuZ2UuXHJcbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWVzIFByb3BlcnR5IG5hbWVzIGFscmVhZHkgaGFuZGxlZCBmb3IgdGhlIG9iamVjdCBsaXRlcmFsLlxyXG4gKiBAcGFyYW0gcmVwbGFjZW1lbnRzIFJlcGxhY2VtZW50IGVudHJpZXMgY29sbGVjdGVkIHNvIGZhci5cclxuICogQHBhcmFtIHJlcGxhY2VtZW50Q29udGV4dCBSZXBsYWNlbWVudCBjb250ZXh0IGZvciB0aGUgY3VycmVudCBwcm9wZXJ0eS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBhcHBlbmRQcm9wZXJ0eVJlcGxhY2VtZW50KG5ldyBTZXQoKSwgW10sIHJlcGxhY2VtZW50Q29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gYXBwZW5kUHJvcGVydHlSZXBsYWNlbWVudChcclxuICBwcm9wZXJ0eU5hbWVzOiBTZXQ8c3RyaW5nPixcclxuICByZXBsYWNlbWVudHM6IFByb3BlcnR5UmVwbGFjZW1lbnRbXSxcclxuICByZXBsYWNlbWVudENvbnRleHQ6IEJ1aWxkUHJvcGVydHlSZXBsYWNlbWVudENvbnRleHQsXHJcbik6IHZvaWQge1xyXG4gIHByb3BlcnR5TmFtZXMuYWRkKHJlcGxhY2VtZW50Q29udGV4dC5rZXlOYW1lKTtcclxuXHJcbiAgY29uc3QgcmVwbGFjZW1lbnQgPSBidWlsZFByb3BlcnR5UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRDb250ZXh0KTtcclxuXHJcbiAgaWYgKHJlcGxhY2VtZW50ICE9PSB2b2lkIDApIHtcclxuICAgIHJlcGxhY2VtZW50cy5wdXNoKHJlcGxhY2VtZW50KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsZHMgdGhlIGZpbmFsIG1hdGNoIHJlc3VsdCBmb3IgYSByZXdyaXR0ZW4gb2JqZWN0IGxpdGVyYWwuXHJcbiAqIEBwYXJhbSBjb250ZXh0IERhdGEgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIGZpbmFsIHJlcGxhY2VtZW50LlxyXG4gKiBAcmV0dXJucyBGaW5hbCBtYXRjaCByZXN1bHQgd2hlbiB0aGUgb2JqZWN0IHRleHQgY2hhbmdlcy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBtYXRjaCA9IGJ1aWxkTWF0Y2hSZXN1bHQoY29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gYnVpbGRNYXRjaFJlc3VsdChcclxuICBjb250ZXh0OiBCdWlsZE1hdGNoUmVzdWx0Q29udGV4dCxcclxuKTogTWF0Y2hSZXN1bHQgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IG9iamVjdFRleHQgPSBhcHBseVRleHRSZXBsYWNlbWVudHMoXHJcbiAgICBjb250ZXh0LnNvdXJjZVRleHQuc2xpY2UoXHJcbiAgICAgIGNvbnRleHQub2JqZWN0RXhwcmVzc2lvbi5yYW5nZVswXSxcclxuICAgICAgY29udGV4dC5vYmplY3RFeHByZXNzaW9uLnJhbmdlWzFdLFxyXG4gICAgKSxcclxuICAgIGNvbnRleHQucmVwbGFjZW1lbnRzLFxyXG4gICAgY29udGV4dC5vYmplY3RFeHByZXNzaW9uLnJhbmdlWzBdLFxyXG4gICk7XHJcbiAgY29uc3QgcmVwbGFjZW1lbnRUZXh0ID0gY3JlYXRlUmVwbGFjZW1lbnRUZXh0KGNvbnRleHQsIG9iamVjdFRleHQpO1xyXG4gIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGNvbnRleHQuc291cmNlVGV4dC5zbGljZShcclxuICAgIGNvbnRleHQucmV0dXJuRXhwcmVzc2lvbi5yYW5nZVswXSxcclxuICAgIGNvbnRleHQucmV0dXJuRXhwcmVzc2lvbi5yYW5nZVsxXSxcclxuICApO1xyXG5cclxuICByZXR1cm4gb3JpZ2luYWxUZXh0ID09PSByZXBsYWNlbWVudFRleHRcclxuICAgID8gdm9pZCAwXHJcbiAgICA6IHtcclxuICAgICAgICByZXBsYWNlbWVudFRleHQsXHJcbiAgICAgICAgcmV0dXJuRXhwcmVzc2lvblJhbmdlOiBjb250ZXh0LnJldHVybkV4cHJlc3Npb24ucmFuZ2UsXHJcbiAgICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBuZXN0ZWQgcmVwbGFjZW1lbnRzIGZvciBhbGwgc3VwcG9ydGVkIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXMuXHJcbiAqIEBwYXJhbSBjb250ZXh0IERhdGEgcmVxdWlyZWQgdG8gYW5hbHl6ZSBzdXBwb3J0ZWQgb2JqZWN0IHByb3BlcnRpZXMuXHJcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIFN1cHBvcnRlZCBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0aWVzIHRvIHJld3JpdGUuXHJcbiAqIEByZXR1cm5zIFByb3BlcnR5IHJlcGxhY2VtZW50cyB3aGVuIGV2ZXJ5IHByb3BlcnR5IGNhbiBiZSBoYW5kbGVkIHNhZmVseS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBjb2xsZWN0aW9uID0gYnVpbGRQcm9wZXJ0eVJlcGxhY2VtZW50Q29sbGVjdGlvbihjb250ZXh0LCBwcm9wZXJ0aWVzKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBidWlsZFByb3BlcnR5UmVwbGFjZW1lbnRDb2xsZWN0aW9uKFxyXG4gIGNvbnRleHQ6IENvbGxlY3RQcm9wZXJ0eVJlcGxhY2VtZW50c0NvbnRleHQsXHJcbiAgcHJvcGVydGllczogcmVhZG9ubHkgU3VwcG9ydGVkUHJvcGVydHlbXSxcclxuKTogUHJvcGVydHlSZXBsYWNlbWVudENvbGxlY3Rpb24gfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICBjb25zdCByZXBsYWNlbWVudHM6IFByb3BlcnR5UmVwbGFjZW1lbnRbXSA9IFtdO1xyXG4gIGNvbnN0IHRhcmdldFByb3BlcnRpZXMgPSBjcmVhdGVUYXJnZXRQcm9wZXJ0eU1hcChjb250ZXh0KTtcclxuXHJcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XHJcbiAgICBjb25zdCByZXBsYWNlbWVudENvbnRleHQgPSBjcmVhdGVQcm9wZXJ0eVJlcGxhY2VtZW50Q29udGV4dChcclxuICAgICAgY29udGV4dCxcclxuICAgICAgcHJvcGVydHksXHJcbiAgICAgIHRhcmdldFByb3BlcnRpZXMsXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChyZXBsYWNlbWVudENvbnRleHQgPT09IHZvaWQgMCkge1xyXG4gICAgICByZXR1cm4gdm9pZCAwO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZFByb3BlcnR5UmVwbGFjZW1lbnQocHJvcGVydHlOYW1lcywgcmVwbGFjZW1lbnRzLCByZXBsYWNlbWVudENvbnRleHQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgcHJvcGVydHlOYW1lcywgcmVwbGFjZW1lbnRzIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBhIGZpeCBtYXRjaCBmb3IgYSBzdXBwb3J0ZWQgVml0ZXN0IG1vY2sgZmFjdG9yeSBjYWxsLlxyXG4gKiBAcGFyYW0gY29udGV4dCBNYXRjaCBjb2xsZWN0aW9uIGNvbnRleHQuXHJcbiAqIEByZXR1cm5zIE1hdGNoIHJlc3VsdCB3aGVuIHRoZSBvYmplY3QgbGl0ZXJhbCBjYW4gYmUgc2FmZWx5IHJld3JpdHRlbi5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBtYXRjaCA9IGNvbGxlY3RNYXRjaChjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0TWF0Y2goY29udGV4dDogQ29sbGVjdE1hdGNoQ29udGV4dCk6IE1hdGNoUmVzdWx0IHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCBmYWN0b3J5TWF0Y2hJbnB1dCA9IGdldEZhY3RvcnlNYXRjaElucHV0KGNvbnRleHQuY2FsbEV4cHJlc3Npb24pO1xyXG5cclxuICBpZiAoZmFjdG9yeU1hdGNoSW5wdXQgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIHZvaWQgMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IHRhcmdldFR5cGUgPSByZXNvbHZlRmFjdG9yeVRhcmdldFR5cGUoe1xyXG4gICAgY2FsbEV4cHJlc3Npb246IGNvbnRleHQuY2FsbEV4cHJlc3Npb24sXHJcbiAgICBjaGVja2VyOiBjb250ZXh0LmNoZWNrZXIsXHJcbiAgICBmYWN0b3J5QXJndW1lbnQ6IGZhY3RvcnlNYXRjaElucHV0LmZhY3RvcnlBcmd1bWVudCxcclxuICAgIG9iamVjdEV4cHJlc3Npb246IGZhY3RvcnlNYXRjaElucHV0Lm9iamVjdEV4cHJlc3Npb24sXHJcbiAgICBzZXJ2aWNlczogY29udGV4dC5zZXJ2aWNlcyxcclxuICB9KTtcclxuXHJcbiAgaWYgKHRhcmdldFR5cGUgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIHZvaWQgMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbGxlY3RlZFJlcGxhY2VtZW50cyA9IGNvbGxlY3RQcm9wZXJ0eVJlcGxhY2VtZW50cyh7XHJcbiAgICBjaGVja2VyOiBjb250ZXh0LmNoZWNrZXIsXHJcbiAgICBtb2R1bGVTcGVjaWZpZXI6IGZhY3RvcnlNYXRjaElucHV0Lm1vZHVsZVNwZWNpZmllcixcclxuICAgIG9iamVjdEV4cHJlc3Npb246IGZhY3RvcnlNYXRjaElucHV0Lm9iamVjdEV4cHJlc3Npb24sXHJcbiAgICBzZXJ2aWNlczogY29udGV4dC5zZXJ2aWNlcyxcclxuICAgIHNvdXJjZVRleHQ6IGNvbnRleHQuc291cmNlVGV4dCxcclxuICAgIHRhcmdldFR5cGUsXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBjb2xsZWN0ZWRSZXBsYWNlbWVudHMgPT09IHZvaWQgMFxyXG4gICAgPyB2b2lkIDBcclxuICAgIDogYnVpbGRNYXRjaFJlc3VsdCh7XHJcbiAgICAgICAgY2hlY2tlcjogY29udGV4dC5jaGVja2VyLFxyXG4gICAgICAgIGZhY3RvcnlBcmd1bWVudDogZmFjdG9yeU1hdGNoSW5wdXQuZmFjdG9yeUFyZ3VtZW50LFxyXG4gICAgICAgIG1vZHVsZVNwZWNpZmllcjogZmFjdG9yeU1hdGNoSW5wdXQubW9kdWxlU3BlY2lmaWVyLFxyXG4gICAgICAgIG9iamVjdEV4cHJlc3Npb246IGZhY3RvcnlNYXRjaElucHV0Lm9iamVjdEV4cHJlc3Npb24sXHJcbiAgICAgICAgcHJvcGVydHlOYW1lczogY29sbGVjdGVkUmVwbGFjZW1lbnRzLnByb3BlcnR5TmFtZXMsXHJcbiAgICAgICAgcmVwbGFjZW1lbnRzOiBjb2xsZWN0ZWRSZXBsYWNlbWVudHMucmVwbGFjZW1lbnRzLFxyXG4gICAgICAgIHJldHVybkV4cHJlc3Npb246IGZhY3RvcnlNYXRjaElucHV0LnJldHVybkV4cHJlc3Npb24sXHJcbiAgICAgICAgc291cmNlVGV4dDogY29udGV4dC5zb3VyY2VUZXh0LFxyXG4gICAgICAgIHRhcmdldFR5cGUsXHJcbiAgICAgIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgbmVzdGVkIHJlcGxhY2VtZW50cyBmb3IgYWxsIHN1cHBvcnRlZCBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0aWVzLlxyXG4gKiBAcGFyYW0gY29udGV4dCBEYXRhIHJlcXVpcmVkIHRvIGFuYWx5emUgc3VwcG9ydGVkIG9iamVjdCBwcm9wZXJ0aWVzLlxyXG4gKiBAcmV0dXJucyBQcm9wZXJ0eSByZXBsYWNlbWVudHMgd2hlbiBldmVyeSBwcm9wZXJ0eSBjYW4gYmUgaGFuZGxlZCBzYWZlbHkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3RQcm9wZXJ0eVJlcGxhY2VtZW50cyhjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0UHJvcGVydHlSZXBsYWNlbWVudHMoXHJcbiAgY29udGV4dDogQ29sbGVjdFByb3BlcnR5UmVwbGFjZW1lbnRzQ29udGV4dCxcclxuKTogUHJvcGVydHlSZXBsYWNlbWVudENvbGxlY3Rpb24gfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHByb3BlcnRpZXMgPSBjb250ZXh0Lm9iamVjdEV4cHJlc3Npb24ucHJvcGVydGllcy5maWx0ZXIoKHByb3BlcnR5KSA9PlxyXG4gICAgaXNTdXBwb3J0ZWRQcm9wZXJ0eShwcm9wZXJ0eSksXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHByb3BlcnRpZXMubGVuZ3RoID09PSBjb250ZXh0Lm9iamVjdEV4cHJlc3Npb24ucHJvcGVydGllcy5sZW5ndGhcclxuICAgID8gYnVpbGRQcm9wZXJ0eVJlcGxhY2VtZW50Q29sbGVjdGlvbihjb250ZXh0LCBwcm9wZXJ0aWVzKVxyXG4gICAgOiB2b2lkIDA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIHJlcGxhY2VtZW50IGlucHV0cyBmb3Igb25lIHN1cHBvcnRlZCBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIGNvbnRleHQgRGF0YSByZXF1aXJlZCB0byBhbmFseXplIHN1cHBvcnRlZCBvYmplY3QgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHByb3BlcnR5IFN1cHBvcnRlZCBwcm9wZXJ0eSBmcm9tIHRoZSByZXR1cm5lZCBvYmplY3QgbGl0ZXJhbC5cclxuICogQHBhcmFtIHRhcmdldFByb3BlcnRpZXMgVGFyZ2V0LXByb3BlcnR5IGxvb2t1cCBrZXllZCBieSBwcm9wZXJ0eSBuYW1lLlxyXG4gKiBAcmV0dXJucyBSZXBsYWNlbWVudCBpbnB1dHMgd2hlbiB0aGUgcHJvcGVydHkgY2FuIGJlIGhhbmRsZWQgc2FmZWx5LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IHJlcGxhY2VtZW50Q29udGV4dCA9IGNyZWF0ZVByb3BlcnR5UmVwbGFjZW1lbnRDb250ZXh0KGNvbnRleHQsIHByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0aWVzKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVQcm9wZXJ0eVJlcGxhY2VtZW50Q29udGV4dChcclxuICBjb250ZXh0OiBDb2xsZWN0UHJvcGVydHlSZXBsYWNlbWVudHNDb250ZXh0LFxyXG4gIHByb3BlcnR5OiBTdXBwb3J0ZWRQcm9wZXJ0eSxcclxuICB0YXJnZXRQcm9wZXJ0aWVzOiBUYXJnZXRQcm9wZXJ0eU1hcCxcclxuKTogQnVpbGRQcm9wZXJ0eVJlcGxhY2VtZW50Q29udGV4dCB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3Qga2V5TmFtZSA9IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eS5rZXkpO1xyXG4gIGNvbnN0IHRhcmdldFByb3BlcnR5U3ltYm9sID1cclxuICAgIGtleU5hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldFByb3BlcnRpZXMuZ2V0KGtleU5hbWUpO1xyXG5cclxuICByZXR1cm4ga2V5TmFtZSA9PT0gdm9pZCAwIHx8IHRhcmdldFByb3BlcnR5U3ltYm9sID09PSB2b2lkIDBcclxuICAgID8gdm9pZCAwXHJcbiAgICA6IHtcclxuICAgICAgICBjaGVja2VyOiBjb250ZXh0LmNoZWNrZXIsXHJcbiAgICAgICAga2V5TmFtZSxcclxuICAgICAgICBtb2R1bGVTcGVjaWZpZXI6IGNvbnRleHQubW9kdWxlU3BlY2lmaWVyLFxyXG4gICAgICAgIHByb3BlcnR5LFxyXG4gICAgICAgIHNlcnZpY2VzOiBjb250ZXh0LnNlcnZpY2VzLFxyXG4gICAgICAgIHNvdXJjZVRleHQ6IGNvbnRleHQuc291cmNlVGV4dCxcclxuICAgICAgICB0YXJnZXRQcm9wZXJ0eVN5bWJvbCxcclxuICAgICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgdGhlIGZpbmFsIHJlcGxhY2VtZW50IHRleHQgZm9yIHRoZSByZXR1cm5lZCBvYmplY3QgZXhwcmVzc2lvbi5cclxuICogQHBhcmFtIGNvbnRleHQgRGF0YSByZXF1aXJlZCB0byBidWlsZCB0aGUgZmluYWwgcmVwbGFjZW1lbnQuXHJcbiAqIEBwYXJhbSBvYmplY3RUZXh0IFJld3JpdHRlbiBvYmplY3QgbGl0ZXJhbCB0ZXh0LlxyXG4gKiBAcmV0dXJucyBGaW5hbCByZXBsYWNlbWVudCB0ZXh0IGZvciB0aGUgZmFjdG9yeSByZXR1cm4gZXhwcmVzc2lvbi5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCB0ZXh0ID0gY3JlYXRlUmVwbGFjZW1lbnRUZXh0KGNvbnRleHQsIFwiKHt9KVwiKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVSZXBsYWNlbWVudFRleHQoXHJcbiAgY29udGV4dDogQnVpbGRNYXRjaFJlc3VsdENvbnRleHQsXHJcbiAgb2JqZWN0VGV4dDogc3RyaW5nLFxyXG4pOiBzdHJpbmcge1xyXG4gIGlmIChcclxuICAgIGlzT3V0ZXJDYXN0UmVxdWlyZWQoe1xyXG4gICAgICBjaGVja2VyOiBjb250ZXh0LmNoZWNrZXIsXHJcbiAgICAgIHByb3BlcnR5TmFtZXM6IGNvbnRleHQucHJvcGVydHlOYW1lcyxcclxuICAgICAgdGFyZ2V0VHlwZTogY29udGV4dC50YXJnZXRUeXBlLFxyXG4gICAgfSlcclxuICApIHtcclxuICAgIHJldHVybiBgKCR7b2JqZWN0VGV4dH0pIGFzIHR5cGVvZiBpbXBvcnQoJHtKU09OLnN0cmluZ2lmeShjb250ZXh0Lm1vZHVsZVNwZWNpZmllcil9KWA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc2hvdWxkV3JhcEltcGxpY2l0T2JqZWN0KFxyXG4gICAgY29udGV4dC5mYWN0b3J5QXJndW1lbnQsXHJcbiAgICBjb250ZXh0LnJldHVybkV4cHJlc3Npb24sXHJcbiAgICBjb250ZXh0Lm9iamVjdEV4cHJlc3Npb24sXHJcbiAgKVxyXG4gICAgPyBgKCR7b2JqZWN0VGV4dH0pYFxyXG4gICAgOiBvYmplY3RUZXh0O1xyXG59XHJcblxyXG4vKipcclxuICogQnVpbGRzIHRoZSBsb29rdXAgb2YgdGFyZ2V0IHByb3BlcnRpZXMgZnJvbSB0aGUgaW5mZXJyZWQgdGFyZ2V0IHR5cGUuXHJcbiAqIEBwYXJhbSBjb250ZXh0IERhdGEgcmVxdWlyZWQgdG8gYW5hbHl6ZSBzdXBwb3J0ZWQgb2JqZWN0IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRhcmdldC1wcm9wZXJ0eSBsb29rdXAga2V5ZWQgYnkgcHJvcGVydHkgbmFtZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCB0YXJnZXRQcm9wZXJ0aWVzID0gY3JlYXRlVGFyZ2V0UHJvcGVydHlNYXAoY29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlVGFyZ2V0UHJvcGVydHlNYXAoXHJcbiAgY29udGV4dDogQ29sbGVjdFByb3BlcnR5UmVwbGFjZW1lbnRzQ29udGV4dCxcclxuKTogVGFyZ2V0UHJvcGVydHlNYXAge1xyXG4gIHJldHVybiBuZXcgTWFwKFxyXG4gICAgY29udGV4dC5jaGVja2VyXHJcbiAgICAgIC5nZXRQcm9wZXJ0aWVzT2ZUeXBlKGNvbnRleHQudGFyZ2V0VHlwZSlcclxuICAgICAgLm1hcCgocHJvcGVydHlTeW1ib2wpID0+IFtwcm9wZXJ0eVN5bWJvbC5nZXROYW1lKCksIHByb3BlcnR5U3ltYm9sXSksXHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IHsgY29sbGVjdE1hdGNoIH07XHJcbiJdfQ==
@@ -1,25 +0,0 @@
1
- import type { BuildPropertyReplacementContext, PropertyReplacement } from "./types.js";
2
- /**
3
- * Applies the collected property replacements in reverse source order.
4
- * @param text Original object literal source text.
5
- * @param replacements Replacement operations for the object literal.
6
- * @param offset Absolute start offset of the object literal.
7
- * @returns Updated object literal source text.
8
- * @example
9
- * ```typescript
10
- * const objectText = applyTextReplacements(text, replacements, offset);
11
- * ```
12
- */
13
- declare function applyTextReplacements(text: string, replacements: readonly PropertyReplacement[], offset: number): string;
14
- /**
15
- * Builds the replacement entry when a property's source text must change.
16
- * @param context Data needed to rewrite one supported object property.
17
- * @returns Replacement details when the property text changes.
18
- * @example
19
- * ```typescript
20
- * const replacement = buildPropertyReplacement(context);
21
- * ```
22
- */
23
- declare function buildPropertyReplacement(context: BuildPropertyReplacementContext): PropertyReplacement | undefined;
24
- export { applyTextReplacements, buildPropertyReplacement };
25
- //# sourceMappingURL=replacement-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replacement-helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,+BAA+B,EAC/B,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAIjB;;;;;;;;;;GAUG;AACH,iBAAS,qBAAqB,CAC5B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,mBAAmB,EAAE,EAC5C,MAAM,EAAE,MAAM,GACb,MAAM,CAaR;AAED;;;;;;;;GAQG;AACH,iBAAS,wBAAwB,CAC/B,OAAO,EAAE,+BAA+B,GACvC,mBAAmB,GAAG,SAAS,CAWjC;AA2ED,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,92 +0,0 @@
1
- import { canUseShorthand, unwrapExpression } from "./ast-helpers.js";
2
- /**
3
- * Applies the collected property replacements in reverse source order.
4
- * @param text Original object literal source text.
5
- * @param replacements Replacement operations for the object literal.
6
- * @param offset Absolute start offset of the object literal.
7
- * @returns Updated object literal source text.
8
- * @example
9
- * ```typescript
10
- * const objectText = applyTextReplacements(text, replacements, offset);
11
- * ```
12
- */
13
- function applyTextReplacements(text, replacements, offset) {
14
- let currentText = text;
15
- for (const replacement of replacements.toSorted((left, right) => right.range[0] - left.range[0])) {
16
- const start = replacement.range[0] - offset;
17
- const end = replacement.range[1] - offset;
18
- currentText = `${currentText.slice(0, start)}${replacement.replacementText}${currentText.slice(end)}`;
19
- }
20
- return currentText;
21
- }
22
- /**
23
- * Builds the replacement entry when a property's source text must change.
24
- * @param context Data needed to rewrite one supported object property.
25
- * @returns Replacement details when the property text changes.
26
- * @example
27
- * ```typescript
28
- * const replacement = buildPropertyReplacement(context);
29
- * ```
30
- */
31
- function buildPropertyReplacement(context) {
32
- const replacementText = buildReplacementText(context);
33
- const propertyRange = context.property.range;
34
- const originalText = context.sourceText.slice(propertyRange[0], propertyRange[1]);
35
- return originalText === replacementText
36
- ? void 0
37
- : { range: propertyRange, replacementText };
38
- }
39
- /**
40
- * Builds the final source text for one object literal property.
41
- * @param context Property replacement context.
42
- * @returns Rewritten property text.
43
- * @example
44
- * ```typescript
45
- * const replacementText = buildReplacementText(context);
46
- * ```
47
- */
48
- function buildReplacementText(context) {
49
- const { keyName, moduleSpecifier, property, sourceText } = context;
50
- const baseValue = unwrapExpression(property.value);
51
- const baseValueText = sourceText.slice(baseValue.range[0], baseValue.range[1]);
52
- const keyText = sourceText.slice(property.key.range[0], property.key.range[1]);
53
- const needsCast = isPropertyCastRequired(context, baseValue);
54
- const valueText = needsCast
55
- ? `${baseValueText} as ${getPropertyTypeText(moduleSpecifier, keyName)}`
56
- : baseValueText;
57
- return canUseShorthand({ baseValue, keyName, needsCast, property })
58
- ? keyName
59
- : `${keyText}: ${valueText}`;
60
- }
61
- /**
62
- * Builds the imported property type expression used for a nested cast.
63
- * @param moduleSpecifier Static module specifier used by the mock.
64
- * @param keyName Property name being cast.
65
- * @returns Type expression for the imported property.
66
- * @example
67
- * ```typescript
68
- * const propertyType = getPropertyTypeText("fixture-module", "parser");
69
- * ```
70
- */
71
- function getPropertyTypeText(moduleSpecifier, keyName) {
72
- return `typeof import(${JSON.stringify(moduleSpecifier)})[${JSON.stringify(keyName)}]`;
73
- }
74
- /**
75
- * Determines whether a property value still needs a nested cast.
76
- * @param context Property replacement context.
77
- * @param baseValue Unwrapped property value expression.
78
- * @returns True when the property value is not assignable to the target type.
79
- * @example
80
- * ```typescript
81
- * const needsCast = isPropertyCastRequired(context, baseValue);
82
- * ```
83
- */
84
- function isPropertyCastRequired(context, baseValue) {
85
- const tsBaseValueNode = context.services.esTreeNodeToTSNodeMap.get(baseValue);
86
- const tsPropertyKeyNode = context.services.esTreeNodeToTSNodeMap.get(context.property.key);
87
- const sourceType = context.checker.getTypeAtLocation(tsBaseValueNode);
88
- const propertyTargetType = context.checker.getTypeOfSymbolAtLocation(context.targetPropertySymbol, tsPropertyKeyNode);
89
- return !context.checker.isTypeAssignableTo(sourceType, propertyTargetType);
90
- }
91
- export { applyTextReplacements, buildPropertyReplacement };
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZW1lbnQtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9wcmVmZXItdml0ZXN0LWluY3JlbWVudGFsLWNhc3RzL3JlcGxhY2VtZW50LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRTs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsSUFBWSxFQUNaLFlBQTRDLEVBQzVDLE1BQWM7SUFFZCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFdkIsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUM3QyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDaEQsRUFBRSxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFFMUMsV0FBVyxHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDeEcsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsd0JBQXdCLENBQy9CLE9BQXdDO0lBRXhDLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzdDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUMzQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ2hCLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQztJQUVGLE9BQU8sWUFBWSxLQUFLLGVBQWU7UUFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNSLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsT0FBd0M7SUFFeEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuRSxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FDcEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDbEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDbkIsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQzlCLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNyQixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDdEIsQ0FBQztJQUNGLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RCxNQUFNLFNBQVMsR0FBRyxTQUFTO1FBQ3pCLENBQUMsQ0FBQyxHQUFHLGFBQWEsT0FBTyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDeEUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUVsQixPQUFPLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxPQUFPO1FBQ1QsQ0FBQyxDQUFDLEdBQUcsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLGVBQXVCLEVBQUUsT0FBZTtJQUNuRSxPQUFPLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUN6RixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FDN0IsT0FBd0MsRUFDeEMsU0FBK0Q7SUFFL0QsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUUsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ3JCLENBQUM7SUFDRixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FDbEUsT0FBTyxDQUFDLG9CQUFvQixFQUM1QixpQkFBaUIsQ0FDbEIsQ0FBQztJQUVGLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcclxuICBCdWlsZFByb3BlcnR5UmVwbGFjZW1lbnRDb250ZXh0LFxyXG4gIFByb3BlcnR5UmVwbGFjZW1lbnQsXHJcbn0gZnJvbSBcIi4vdHlwZXNcIjtcclxuXHJcbmltcG9ydCB7IGNhblVzZVNob3J0aGFuZCwgdW53cmFwRXhwcmVzc2lvbiB9IGZyb20gXCIuL2FzdC1oZWxwZXJzXCI7XHJcblxyXG4vKipcclxuICogQXBwbGllcyB0aGUgY29sbGVjdGVkIHByb3BlcnR5IHJlcGxhY2VtZW50cyBpbiByZXZlcnNlIHNvdXJjZSBvcmRlci5cclxuICogQHBhcmFtIHRleHQgT3JpZ2luYWwgb2JqZWN0IGxpdGVyYWwgc291cmNlIHRleHQuXHJcbiAqIEBwYXJhbSByZXBsYWNlbWVudHMgUmVwbGFjZW1lbnQgb3BlcmF0aW9ucyBmb3IgdGhlIG9iamVjdCBsaXRlcmFsLlxyXG4gKiBAcGFyYW0gb2Zmc2V0IEFic29sdXRlIHN0YXJ0IG9mZnNldCBvZiB0aGUgb2JqZWN0IGxpdGVyYWwuXHJcbiAqIEByZXR1cm5zIFVwZGF0ZWQgb2JqZWN0IGxpdGVyYWwgc291cmNlIHRleHQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3Qgb2JqZWN0VGV4dCA9IGFwcGx5VGV4dFJlcGxhY2VtZW50cyh0ZXh0LCByZXBsYWNlbWVudHMsIG9mZnNldCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gYXBwbHlUZXh0UmVwbGFjZW1lbnRzKFxyXG4gIHRleHQ6IHN0cmluZyxcclxuICByZXBsYWNlbWVudHM6IHJlYWRvbmx5IFByb3BlcnR5UmVwbGFjZW1lbnRbXSxcclxuICBvZmZzZXQ6IG51bWJlcixcclxuKTogc3RyaW5nIHtcclxuICBsZXQgY3VycmVudFRleHQgPSB0ZXh0O1xyXG5cclxuICBmb3IgKGNvbnN0IHJlcGxhY2VtZW50IG9mIHJlcGxhY2VtZW50cy50b1NvcnRlZChcclxuICAgIChsZWZ0LCByaWdodCkgPT4gcmlnaHQucmFuZ2VbMF0gLSBsZWZ0LnJhbmdlWzBdLFxyXG4gICkpIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gcmVwbGFjZW1lbnQucmFuZ2VbMF0gLSBvZmZzZXQ7XHJcbiAgICBjb25zdCBlbmQgPSByZXBsYWNlbWVudC5yYW5nZVsxXSAtIG9mZnNldDtcclxuXHJcbiAgICBjdXJyZW50VGV4dCA9IGAke2N1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KX0ke3JlcGxhY2VtZW50LnJlcGxhY2VtZW50VGV4dH0ke2N1cnJlbnRUZXh0LnNsaWNlKGVuZCl9YDtcclxuICB9XHJcblxyXG4gIHJldHVybiBjdXJyZW50VGV4dDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJ1aWxkcyB0aGUgcmVwbGFjZW1lbnQgZW50cnkgd2hlbiBhIHByb3BlcnR5J3Mgc291cmNlIHRleHQgbXVzdCBjaGFuZ2UuXHJcbiAqIEBwYXJhbSBjb250ZXh0IERhdGEgbmVlZGVkIHRvIHJld3JpdGUgb25lIHN1cHBvcnRlZCBvYmplY3QgcHJvcGVydHkuXHJcbiAqIEByZXR1cm5zIFJlcGxhY2VtZW50IGRldGFpbHMgd2hlbiB0aGUgcHJvcGVydHkgdGV4dCBjaGFuZ2VzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IHJlcGxhY2VtZW50ID0gYnVpbGRQcm9wZXJ0eVJlcGxhY2VtZW50KGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGJ1aWxkUHJvcGVydHlSZXBsYWNlbWVudChcclxuICBjb250ZXh0OiBCdWlsZFByb3BlcnR5UmVwbGFjZW1lbnRDb250ZXh0LFxyXG4pOiBQcm9wZXJ0eVJlcGxhY2VtZW50IHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCByZXBsYWNlbWVudFRleHQgPSBidWlsZFJlcGxhY2VtZW50VGV4dChjb250ZXh0KTtcclxuICBjb25zdCBwcm9wZXJ0eVJhbmdlID0gY29udGV4dC5wcm9wZXJ0eS5yYW5nZTtcclxuICBjb25zdCBvcmlnaW5hbFRleHQgPSBjb250ZXh0LnNvdXJjZVRleHQuc2xpY2UoXHJcbiAgICBwcm9wZXJ0eVJhbmdlWzBdLFxyXG4gICAgcHJvcGVydHlSYW5nZVsxXSxcclxuICApO1xyXG5cclxuICByZXR1cm4gb3JpZ2luYWxUZXh0ID09PSByZXBsYWNlbWVudFRleHRcclxuICAgID8gdm9pZCAwXHJcbiAgICA6IHsgcmFuZ2U6IHByb3BlcnR5UmFuZ2UsIHJlcGxhY2VtZW50VGV4dCB9O1xyXG59XHJcblxyXG4vKipcclxuICogQnVpbGRzIHRoZSBmaW5hbCBzb3VyY2UgdGV4dCBmb3Igb25lIG9iamVjdCBsaXRlcmFsIHByb3BlcnR5LlxyXG4gKiBAcGFyYW0gY29udGV4dCBQcm9wZXJ0eSByZXBsYWNlbWVudCBjb250ZXh0LlxyXG4gKiBAcmV0dXJucyBSZXdyaXR0ZW4gcHJvcGVydHkgdGV4dC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCByZXBsYWNlbWVudFRleHQgPSBidWlsZFJlcGxhY2VtZW50VGV4dChjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBidWlsZFJlcGxhY2VtZW50VGV4dChcclxuICBjb250ZXh0OiBCdWlsZFByb3BlcnR5UmVwbGFjZW1lbnRDb250ZXh0LFxyXG4pOiBzdHJpbmcge1xyXG4gIGNvbnN0IHsga2V5TmFtZSwgbW9kdWxlU3BlY2lmaWVyLCBwcm9wZXJ0eSwgc291cmNlVGV4dCB9ID0gY29udGV4dDtcclxuICBjb25zdCBiYXNlVmFsdWUgPSB1bndyYXBFeHByZXNzaW9uKHByb3BlcnR5LnZhbHVlKTtcclxuICBjb25zdCBiYXNlVmFsdWVUZXh0ID0gc291cmNlVGV4dC5zbGljZShcclxuICAgIGJhc2VWYWx1ZS5yYW5nZVswXSxcclxuICAgIGJhc2VWYWx1ZS5yYW5nZVsxXSxcclxuICApO1xyXG4gIGNvbnN0IGtleVRleHQgPSBzb3VyY2VUZXh0LnNsaWNlKFxyXG4gICAgcHJvcGVydHkua2V5LnJhbmdlWzBdLFxyXG4gICAgcHJvcGVydHkua2V5LnJhbmdlWzFdLFxyXG4gICk7XHJcbiAgY29uc3QgbmVlZHNDYXN0ID0gaXNQcm9wZXJ0eUNhc3RSZXF1aXJlZChjb250ZXh0LCBiYXNlVmFsdWUpO1xyXG4gIGNvbnN0IHZhbHVlVGV4dCA9IG5lZWRzQ2FzdFxyXG4gICAgPyBgJHtiYXNlVmFsdWVUZXh0fSBhcyAke2dldFByb3BlcnR5VHlwZVRleHQobW9kdWxlU3BlY2lmaWVyLCBrZXlOYW1lKX1gXHJcbiAgICA6IGJhc2VWYWx1ZVRleHQ7XHJcblxyXG4gIHJldHVybiBjYW5Vc2VTaG9ydGhhbmQoeyBiYXNlVmFsdWUsIGtleU5hbWUsIG5lZWRzQ2FzdCwgcHJvcGVydHkgfSlcclxuICAgID8ga2V5TmFtZVxyXG4gICAgOiBgJHtrZXlUZXh0fTogJHt2YWx1ZVRleHR9YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJ1aWxkcyB0aGUgaW1wb3J0ZWQgcHJvcGVydHkgdHlwZSBleHByZXNzaW9uIHVzZWQgZm9yIGEgbmVzdGVkIGNhc3QuXHJcbiAqIEBwYXJhbSBtb2R1bGVTcGVjaWZpZXIgU3RhdGljIG1vZHVsZSBzcGVjaWZpZXIgdXNlZCBieSB0aGUgbW9jay5cclxuICogQHBhcmFtIGtleU5hbWUgUHJvcGVydHkgbmFtZSBiZWluZyBjYXN0LlxyXG4gKiBAcmV0dXJucyBUeXBlIGV4cHJlc3Npb24gZm9yIHRoZSBpbXBvcnRlZCBwcm9wZXJ0eS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBwcm9wZXJ0eVR5cGUgPSBnZXRQcm9wZXJ0eVR5cGVUZXh0KFwiZml4dHVyZS1tb2R1bGVcIiwgXCJwYXJzZXJcIik7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UHJvcGVydHlUeXBlVGV4dChtb2R1bGVTcGVjaWZpZXI6IHN0cmluZywga2V5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gYHR5cGVvZiBpbXBvcnQoJHtKU09OLnN0cmluZ2lmeShtb2R1bGVTcGVjaWZpZXIpfSlbJHtKU09OLnN0cmluZ2lmeShrZXlOYW1lKX1dYDtcclxufVxyXG5cclxuLyoqXHJcbiAqIERldGVybWluZXMgd2hldGhlciBhIHByb3BlcnR5IHZhbHVlIHN0aWxsIG5lZWRzIGEgbmVzdGVkIGNhc3QuXHJcbiAqIEBwYXJhbSBjb250ZXh0IFByb3BlcnR5IHJlcGxhY2VtZW50IGNvbnRleHQuXHJcbiAqIEBwYXJhbSBiYXNlVmFsdWUgVW53cmFwcGVkIHByb3BlcnR5IHZhbHVlIGV4cHJlc3Npb24uXHJcbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgbm90IGFzc2lnbmFibGUgdG8gdGhlIHRhcmdldCB0eXBlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IG5lZWRzQ2FzdCA9IGlzUHJvcGVydHlDYXN0UmVxdWlyZWQoY29udGV4dCwgYmFzZVZhbHVlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1Byb3BlcnR5Q2FzdFJlcXVpcmVkKFxyXG4gIGNvbnRleHQ6IEJ1aWxkUHJvcGVydHlSZXBsYWNlbWVudENvbnRleHQsXHJcbiAgYmFzZVZhbHVlOiBCdWlsZFByb3BlcnR5UmVwbGFjZW1lbnRDb250ZXh0W1wicHJvcGVydHlcIl1bXCJ2YWx1ZVwiXSxcclxuKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgdHNCYXNlVmFsdWVOb2RlID0gY29udGV4dC5zZXJ2aWNlcy5lc1RyZWVOb2RlVG9UU05vZGVNYXAuZ2V0KGJhc2VWYWx1ZSk7XHJcbiAgY29uc3QgdHNQcm9wZXJ0eUtleU5vZGUgPSBjb250ZXh0LnNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQoXHJcbiAgICBjb250ZXh0LnByb3BlcnR5LmtleSxcclxuICApO1xyXG4gIGNvbnN0IHNvdXJjZVR5cGUgPSBjb250ZXh0LmNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24odHNCYXNlVmFsdWVOb2RlKTtcclxuICBjb25zdCBwcm9wZXJ0eVRhcmdldFR5cGUgPSBjb250ZXh0LmNoZWNrZXIuZ2V0VHlwZU9mU3ltYm9sQXRMb2NhdGlvbihcclxuICAgIGNvbnRleHQudGFyZ2V0UHJvcGVydHlTeW1ib2wsXHJcbiAgICB0c1Byb3BlcnR5S2V5Tm9kZSxcclxuICApO1xyXG5cclxuICByZXR1cm4gIWNvbnRleHQuY2hlY2tlci5pc1R5cGVBc3NpZ25hYmxlVG8oc291cmNlVHlwZSwgcHJvcGVydHlUYXJnZXRUeXBlKTtcclxufVxyXG5cclxuZXhwb3J0IHsgYXBwbHlUZXh0UmVwbGFjZW1lbnRzLCBidWlsZFByb3BlcnR5UmVwbGFjZW1lbnQgfTtcclxuIl19
@@ -1,32 +0,0 @@
1
- import type { Linter } from "eslint";
2
- /** Type definition for rule data. */
3
- interface FixRunResult {
4
- /** Lint messages produced during the run. */
5
- messages: Linter.LintMessage[];
6
- /** Output code after fixes. */
7
- output: string;
8
- }
9
- /**
10
- * Removes temporary fixture projects created during rule tests.
11
- * @returns Promise that resolves after cleanup completes.
12
- * @example
13
- * ```typescript
14
- * await cleanupTemporaryDirectories();
15
- * ```
16
- */
17
- declare const cleanupTemporaryDirectories: () => Promise<void>;
18
- /**
19
- * Runs the rule with autofix enabled inside a temporary typed fixture project.
20
- * @param code Source code passed to ESLint.
21
- * @param declarationText Ambient declarations used by the fixture project.
22
- * @returns Fixed output and lint messages.
23
- * @throws {Error} When ESLint does not return a lint result.
24
- * @example
25
- * ```typescript
26
- * const result = await runFix("vi.doMock(import(\"fixture-module\"), () => ({}));\n");
27
- * void result;
28
- * ```
29
- */
30
- declare const runFix: (code: string, declarationText?: string) => Promise<FixRunResult>;
31
- export { cleanupTemporaryDirectories, runFix };
32
- //# sourceMappingURL=rule-test-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule-test-helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUrC,qCAAqC;AACrC,UAAU,YAAY;IACpB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IAE/B,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAgJD;;;;;;;GAOG;AACH,QAAA,MAAM,2BAA2B,QAAa,OAAO,CAAC,IAAI,CAQzD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,MAAM,GACV,MAAM,MAAM,EACZ,wBAAwC,KACvC,OAAO,CAAC,YAAY,CAuBtB,CAAC;AAEF,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAAE,CAAC"}
@@ -1,164 +0,0 @@
1
- import { ESLint } from "eslint";
2
- import { mkdtemp, rm, writeFile } from "node:fs/promises";
3
- import { tmpdir } from "node:os";
4
- import path from "node:path";
5
- import { parser } from "typescript-eslint";
6
- import { preferVitestIncrementalCastsRule } from "./rule.js";
7
- /** Ambient declarations used by the typed fixture project. */
8
- const defaultDeclarationText = [
9
- 'declare module "fixture-module" {',
10
- " export const configs: { disableTypeChecked: { rules: string[]; strict: boolean } };",
11
- " export const extra: number;",
12
- " export const parser: { parseForESLint(code: string): { ast: string } };",
13
- " export const plugin: { meta: { name: string } };",
14
- "}",
15
- "",
16
- "declare const vi: {",
17
- ' doMock(specifier: Promise<typeof import("fixture-module")>, factory: () => typeof import("fixture-module")): void;',
18
- ' doMock(specifier: Promise<typeof import("fixture-module")>, factory: () => Partial<typeof import("fixture-module")>): void;',
19
- ' doMock(specifier: Promise<typeof import("fixture-module")>, factory: () => Promise<Partial<typeof import("fixture-module")>>): void;',
20
- ' mock(specifier: Promise<typeof import("fixture-module")>, factory: () => typeof import("fixture-module")): void;',
21
- ' mock(specifier: Promise<typeof import("fixture-module")>, factory: () => Partial<typeof import("fixture-module")>): void;',
22
- ' mock(specifier: Promise<typeof import("fixture-module")>, factory: (importOriginal: () => Promise<typeof import("fixture-module")>) => Promise<Partial<typeof import("fixture-module")>>): void;',
23
- "};",
24
- "",
25
- ].join("\n");
26
- /** Temporary fixture directories pending cleanup. */
27
- const temporaryDirectories = [];
28
- /**
29
- * Creates the fixture tsconfig text used by typed rule runs.
30
- * @returns Serialized tsconfig file contents.
31
- * @example
32
- * ```typescript
33
- * const tsconfigText = createTsconfigText();
34
- * void tsconfigText;
35
- * ```
36
- */
37
- const createTsconfigText = () => JSON.stringify({
38
- compilerOptions: {
39
- module: "esnext",
40
- moduleResolution: "bundler",
41
- noEmit: true,
42
- strict: true,
43
- target: "esnext",
44
- },
45
- include: ["**/*.ts", "**/*.d.ts"],
46
- }, void 0, 2);
47
- /**
48
- * Creates the typed ESLint instance used by the rule tests.
49
- * @param directory Fixture directory that becomes ESLint cwd.
50
- * @param tsconfigPath Path to the generated fixture tsconfig.
51
- * @returns ESLint instance configured for the typed rule.
52
- * @example
53
- * ```typescript
54
- * const eslint = createTypedRuleEslint("/tmp/project", "/tmp/project/tsconfig.json");
55
- * void eslint;
56
- * ```
57
- */
58
- const createTypedRuleEslint = (directory, tsconfigPath) => new ESLint({
59
- cwd: directory,
60
- fix: true,
61
- ignore: false,
62
- overrideConfig: [
63
- {
64
- files: ["**/*.ts"],
65
- languageOptions: {
66
- parser,
67
- parserOptions: {
68
- ecmaVersion: 2022,
69
- project: [tsconfigPath],
70
- sourceType: "module",
71
- tsconfigRootDir: directory,
72
- },
73
- },
74
- plugins: {
75
- codeperfect: {
76
- rules: {
77
- "prefer-vitest-incremental-casts": preferVitestIncrementalCastsRule,
78
- },
79
- },
80
- },
81
- rules: {
82
- "codeperfect/prefer-vitest-incremental-casts": "error",
83
- },
84
- },
85
- ],
86
- overrideConfigFile: true,
87
- });
88
- /**
89
- * Creates the temporary fixture project used by typed helper runs.
90
- * @param declarationText Ambient declarations used by the fixture project.
91
- * @returns Fresh fixture project state.
92
- * @example
93
- * ```typescript
94
- * const fixtureProject = await createFixtureProject(defaultDeclarationText);
95
- * void fixtureProject;
96
- * ```
97
- */
98
- const createFixtureProject = async (declarationText) => {
99
- const directory = await mkdtemp(path.join(tmpdir(), "codeperfect-rule-"));
100
- const globalsPath = path.join(directory, "globals.d.ts");
101
- const tsconfigPath = path.join(directory, "tsconfig.json");
102
- temporaryDirectories.push(directory);
103
- await Promise.all([
104
- writeFile(globalsPath, declarationText, "utf8"),
105
- writeFile(tsconfigPath, createTsconfigText(), "utf8"),
106
- ]);
107
- return { directory, tsconfigPath };
108
- };
109
- /**
110
- * Creates a unique file path for one isolated lint run.
111
- * @param directory Temporary fixture directory.
112
- * @returns Unique file path for the current run.
113
- * @example
114
- * ```typescript
115
- * createRunFilePath("/tmp/project");
116
- * ```
117
- */
118
- const createRunFilePath = (directory) => path.join(directory, "example.spec.ts");
119
- /**
120
- * Removes temporary fixture projects created during rule tests.
121
- * @returns Promise that resolves after cleanup completes.
122
- * @example
123
- * ```typescript
124
- * await cleanupTemporaryDirectories();
125
- * ```
126
- */
127
- const cleanupTemporaryDirectories = async () => {
128
- await Promise.all(temporaryDirectories
129
- .splice(0)
130
- .map(async (directory) => rm(directory, { force: true, recursive: true })));
131
- };
132
- /**
133
- * Runs the rule with autofix enabled inside a temporary typed fixture project.
134
- * @param code Source code passed to ESLint.
135
- * @param declarationText Ambient declarations used by the fixture project.
136
- * @returns Fixed output and lint messages.
137
- * @throws {Error} When ESLint does not return a lint result.
138
- * @example
139
- * ```typescript
140
- * const result = await runFix("vi.doMock(import(\"fixture-module\"), () => ({}));\n");
141
- * void result;
142
- * ```
143
- */
144
- const runFix = async (code, declarationText = defaultDeclarationText) => {
145
- const fixtureProject = await createFixtureProject(declarationText);
146
- const filePath = createRunFilePath(fixtureProject.directory);
147
- const eslint = createTypedRuleEslint(fixtureProject.directory, fixtureProject.tsconfigPath);
148
- await writeFile(filePath, code, "utf8");
149
- try {
150
- const [result] = await eslint.lintText(code, { filePath });
151
- if (result === void 0) {
152
- throw new Error("Expected ESLint to return a lint result.");
153
- }
154
- return {
155
- messages: result.messages,
156
- output: result.output ?? code,
157
- };
158
- }
159
- finally {
160
- await rm(fixtureProject.directory, { force: true, recursive: true });
161
- }
162
- };
163
- export { cleanupTemporaryDirectories, runFix };
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS10ZXN0LWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0cy9ydWxlLXRlc3QtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFvQjFELDhEQUE4RDtBQUM5RCxNQUFNLHNCQUFzQixHQUFHO0lBQzdCLG1DQUFtQztJQUNuQyx1RkFBdUY7SUFDdkYsK0JBQStCO0lBQy9CLDJFQUEyRTtJQUMzRSxvREFBb0Q7SUFDcEQsR0FBRztJQUNILEVBQUU7SUFDRixxQkFBcUI7SUFDckIsc0hBQXNIO0lBQ3RILCtIQUErSDtJQUMvSCx3SUFBd0k7SUFDeEksb0hBQW9IO0lBQ3BILDZIQUE2SDtJQUM3SCxvTUFBb007SUFDcE0sSUFBSTtJQUNKLEVBQUU7Q0FDSCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUViLHFEQUFxRDtBQUNyRCxNQUFNLG9CQUFvQixHQUFhLEVBQUUsQ0FBQztBQUUxQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsR0FBVyxFQUFFLENBQ3RDLElBQUksQ0FBQyxTQUFTLENBQ1o7SUFDRSxlQUFlLEVBQUU7UUFDZixNQUFNLEVBQUUsUUFBUTtRQUNoQixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLE1BQU0sRUFBRSxJQUFJO1FBQ1osTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsUUFBUTtLQUNqQjtJQUNELE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUM7Q0FDbEMsRUFDRCxLQUFLLENBQUMsRUFDTixDQUFDLENBQ0YsQ0FBQztBQUVKOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQzVCLFNBQWlCLEVBQ2pCLFlBQW9CLEVBQ1osRUFBRSxDQUNWLElBQUksTUFBTSxDQUFDO0lBQ1QsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsSUFBSTtJQUNULE1BQU0sRUFBRSxLQUFLO0lBQ2IsY0FBYyxFQUFFO1FBQ2Q7WUFDRSxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDbEIsZUFBZSxFQUFFO2dCQUNmLE1BQU07Z0JBQ04sYUFBYSxFQUFFO29CQUNiLFdBQVcsRUFBRSxJQUFJO29CQUNqQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFVBQVUsRUFBRSxRQUFRO29CQUNwQixlQUFlLEVBQUUsU0FBUztpQkFDM0I7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUU7b0JBQ1gsS0FBSyxFQUFFO3dCQUNMLGlDQUFpQyxFQUMvQixnQ0FBZ0M7cUJBQ25DO2lCQUNGO2FBQ0Y7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsNkNBQTZDLEVBQUUsT0FBTzthQUN2RDtTQUNGO0tBQ0Y7SUFDRCxrQkFBa0IsRUFBRSxJQUFJO0NBQ3pCLENBQUMsQ0FBQztBQUVMOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUNoQyxlQUF1QixFQUNFLEVBQUU7SUFDM0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFM0Qsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNoQixTQUFTLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUM7UUFDL0MsU0FBUyxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sQ0FBQztLQUN0RCxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQWlCLEVBQVUsRUFBRSxDQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBRTFDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLDJCQUEyQixHQUFHLEtBQUssSUFBbUIsRUFBRTtJQUM1RCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2Ysb0JBQW9CO1NBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDVCxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQ3ZCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUNoRCxDQUNKLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sTUFBTSxHQUFHLEtBQUssRUFDbEIsSUFBWSxFQUNaLGVBQWUsR0FBRyxzQkFBc0IsRUFDakIsRUFBRTtJQUN6QixNQUFNLGNBQWMsR0FBRyxNQUFNLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3RCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FDbEMsY0FBYyxDQUFDLFNBQVMsRUFDeEIsY0FBYyxDQUFDLFlBQVksQ0FDNUIsQ0FBQztJQUVGLE1BQU0sU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTNELElBQUksTUFBTSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUk7U0FDOUIsQ0FBQztJQUNKLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxFQUFFLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xyXG5cclxuaW1wb3J0IHsgRVNMaW50IH0gZnJvbSBcImVzbGludFwiO1xyXG5pbXBvcnQgeyBta2R0ZW1wLCBybSwgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcclxuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcclxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xyXG5pbXBvcnQgeyBwYXJzZXIgfSBmcm9tIFwidHlwZXNjcmlwdC1lc2xpbnRcIjtcclxuXHJcbmltcG9ydCB7IHByZWZlclZpdGVzdEluY3JlbWVudGFsQ2FzdHNSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xyXG5cclxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xyXG5pbnRlcmZhY2UgRml4UnVuUmVzdWx0IHtcclxuICAvKiogTGludCBtZXNzYWdlcyBwcm9kdWNlZCBkdXJpbmcgdGhlIHJ1bi4gKi9cclxuICBtZXNzYWdlczogTGludGVyLkxpbnRNZXNzYWdlW107XHJcblxyXG4gIC8qKiBPdXRwdXQgY29kZSBhZnRlciBmaXhlcy4gKi9cclxuICBvdXRwdXQ6IHN0cmluZztcclxufVxyXG5cclxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgcnVsZSBkYXRhLiAqL1xyXG5pbnRlcmZhY2UgRml4dHVyZVByb2plY3Qge1xyXG4gIC8qKiBUZW1wb3JhcnkgZml4dHVyZSBkaXJlY3RvcnkgcGF0aC4gKi9cclxuICBkaXJlY3Rvcnk6IHN0cmluZztcclxuXHJcbiAgLyoqIEZpeHR1cmUgdHNjb25maWcgcGF0aCB1c2VkIGJ5IHR5cGVkIEVTTGludC4gKi9cclxuICB0c2NvbmZpZ1BhdGg6IHN0cmluZztcclxufVxyXG5cclxuLyoqIEFtYmllbnQgZGVjbGFyYXRpb25zIHVzZWQgYnkgdGhlIHR5cGVkIGZpeHR1cmUgcHJvamVjdC4gKi9cclxuY29uc3QgZGVmYXVsdERlY2xhcmF0aW9uVGV4dCA9IFtcclxuICAnZGVjbGFyZSBtb2R1bGUgXCJmaXh0dXJlLW1vZHVsZVwiIHsnLFxyXG4gIFwiICBleHBvcnQgY29uc3QgY29uZmlnczogeyBkaXNhYmxlVHlwZUNoZWNrZWQ6IHsgcnVsZXM6IHN0cmluZ1tdOyBzdHJpY3Q6IGJvb2xlYW4gfSB9O1wiLFxyXG4gIFwiICBleHBvcnQgY29uc3QgZXh0cmE6IG51bWJlcjtcIixcclxuICBcIiAgZXhwb3J0IGNvbnN0IHBhcnNlcjogeyBwYXJzZUZvckVTTGludChjb2RlOiBzdHJpbmcpOiB7IGFzdDogc3RyaW5nIH0gfTtcIixcclxuICBcIiAgZXhwb3J0IGNvbnN0IHBsdWdpbjogeyBtZXRhOiB7IG5hbWU6IHN0cmluZyB9IH07XCIsXHJcbiAgXCJ9XCIsXHJcbiAgXCJcIixcclxuICBcImRlY2xhcmUgY29uc3Qgdmk6IHtcIixcclxuICAnICBkb01vY2soc3BlY2lmaWVyOiBQcm9taXNlPHR5cGVvZiBpbXBvcnQoXCJmaXh0dXJlLW1vZHVsZVwiKT4sIGZhY3Rvcnk6ICgpID0+IHR5cGVvZiBpbXBvcnQoXCJmaXh0dXJlLW1vZHVsZVwiKSk6IHZvaWQ7JyxcclxuICAnICBkb01vY2soc3BlY2lmaWVyOiBQcm9taXNlPHR5cGVvZiBpbXBvcnQoXCJmaXh0dXJlLW1vZHVsZVwiKT4sIGZhY3Rvcnk6ICgpID0+IFBhcnRpYWw8dHlwZW9mIGltcG9ydChcImZpeHR1cmUtbW9kdWxlXCIpPik6IHZvaWQ7JyxcclxuICAnICBkb01vY2soc3BlY2lmaWVyOiBQcm9taXNlPHR5cGVvZiBpbXBvcnQoXCJmaXh0dXJlLW1vZHVsZVwiKT4sIGZhY3Rvcnk6ICgpID0+IFByb21pc2U8UGFydGlhbDx0eXBlb2YgaW1wb3J0KFwiZml4dHVyZS1tb2R1bGVcIik+Pik6IHZvaWQ7JyxcclxuICAnICBtb2NrKHNwZWNpZmllcjogUHJvbWlzZTx0eXBlb2YgaW1wb3J0KFwiZml4dHVyZS1tb2R1bGVcIik+LCBmYWN0b3J5OiAoKSA9PiB0eXBlb2YgaW1wb3J0KFwiZml4dHVyZS1tb2R1bGVcIikpOiB2b2lkOycsXHJcbiAgJyAgbW9jayhzcGVjaWZpZXI6IFByb21pc2U8dHlwZW9mIGltcG9ydChcImZpeHR1cmUtbW9kdWxlXCIpPiwgZmFjdG9yeTogKCkgPT4gUGFydGlhbDx0eXBlb2YgaW1wb3J0KFwiZml4dHVyZS1tb2R1bGVcIik+KTogdm9pZDsnLFxyXG4gICcgIG1vY2soc3BlY2lmaWVyOiBQcm9taXNlPHR5cGVvZiBpbXBvcnQoXCJmaXh0dXJlLW1vZHVsZVwiKT4sIGZhY3Rvcnk6IChpbXBvcnRPcmlnaW5hbDogKCkgPT4gUHJvbWlzZTx0eXBlb2YgaW1wb3J0KFwiZml4dHVyZS1tb2R1bGVcIik+KSA9PiBQcm9taXNlPFBhcnRpYWw8dHlwZW9mIGltcG9ydChcImZpeHR1cmUtbW9kdWxlXCIpPj4pOiB2b2lkOycsXHJcbiAgXCJ9O1wiLFxyXG4gIFwiXCIsXHJcbl0uam9pbihcIlxcblwiKTtcclxuXHJcbi8qKiBUZW1wb3JhcnkgZml4dHVyZSBkaXJlY3RvcmllcyBwZW5kaW5nIGNsZWFudXAuICovXHJcbmNvbnN0IHRlbXBvcmFyeURpcmVjdG9yaWVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgdGhlIGZpeHR1cmUgdHNjb25maWcgdGV4dCB1c2VkIGJ5IHR5cGVkIHJ1bGUgcnVucy5cclxuICogQHJldHVybnMgU2VyaWFsaXplZCB0c2NvbmZpZyBmaWxlIGNvbnRlbnRzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IHRzY29uZmlnVGV4dCA9IGNyZWF0ZVRzY29uZmlnVGV4dCgpO1xyXG4gKiB2b2lkIHRzY29uZmlnVGV4dDtcclxuICogYGBgXHJcbiAqL1xyXG5jb25zdCBjcmVhdGVUc2NvbmZpZ1RleHQgPSAoKTogc3RyaW5nID0+XHJcbiAgSlNPTi5zdHJpbmdpZnkoXHJcbiAgICB7XHJcbiAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xyXG4gICAgICAgIG1vZHVsZTogXCJlc25leHRcIixcclxuICAgICAgICBtb2R1bGVSZXNvbHV0aW9uOiBcImJ1bmRsZXJcIixcclxuICAgICAgICBub0VtaXQ6IHRydWUsXHJcbiAgICAgICAgc3RyaWN0OiB0cnVlLFxyXG4gICAgICAgIHRhcmdldDogXCJlc25leHRcIixcclxuICAgICAgfSxcclxuICAgICAgaW5jbHVkZTogW1wiKiovKi50c1wiLCBcIioqLyouZC50c1wiXSxcclxuICAgIH0sXHJcbiAgICB2b2lkIDAsXHJcbiAgICAyLFxyXG4gICk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyB0aGUgdHlwZWQgRVNMaW50IGluc3RhbmNlIHVzZWQgYnkgdGhlIHJ1bGUgdGVzdHMuXHJcbiAqIEBwYXJhbSBkaXJlY3RvcnkgRml4dHVyZSBkaXJlY3RvcnkgdGhhdCBiZWNvbWVzIEVTTGludCBjd2QuXHJcbiAqIEBwYXJhbSB0c2NvbmZpZ1BhdGggUGF0aCB0byB0aGUgZ2VuZXJhdGVkIGZpeHR1cmUgdHNjb25maWcuXHJcbiAqIEByZXR1cm5zIEVTTGludCBpbnN0YW5jZSBjb25maWd1cmVkIGZvciB0aGUgdHlwZWQgcnVsZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBlc2xpbnQgPSBjcmVhdGVUeXBlZFJ1bGVFc2xpbnQoXCIvdG1wL3Byb2plY3RcIiwgXCIvdG1wL3Byb2plY3QvdHNjb25maWcuanNvblwiKTtcclxuICogdm9pZCBlc2xpbnQ7XHJcbiAqIGBgYFxyXG4gKi9cclxuY29uc3QgY3JlYXRlVHlwZWRSdWxlRXNsaW50ID0gKFxyXG4gIGRpcmVjdG9yeTogc3RyaW5nLFxyXG4gIHRzY29uZmlnUGF0aDogc3RyaW5nLFxyXG4pOiBFU0xpbnQgPT5cclxuICBuZXcgRVNMaW50KHtcclxuICAgIGN3ZDogZGlyZWN0b3J5LFxyXG4gICAgZml4OiB0cnVlLFxyXG4gICAgaWdub3JlOiBmYWxzZSxcclxuICAgIG92ZXJyaWRlQ29uZmlnOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxlczogW1wiKiovKi50c1wiXSxcclxuICAgICAgICBsYW5ndWFnZU9wdGlvbnM6IHtcclxuICAgICAgICAgIHBhcnNlcixcclxuICAgICAgICAgIHBhcnNlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgZWNtYVZlcnNpb246IDIwMjIsXHJcbiAgICAgICAgICAgIHByb2plY3Q6IFt0c2NvbmZpZ1BhdGhdLFxyXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiBcIm1vZHVsZVwiLFxyXG4gICAgICAgICAgICB0c2NvbmZpZ1Jvb3REaXI6IGRpcmVjdG9yeSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwbHVnaW5zOiB7XHJcbiAgICAgICAgICBjb2RlcGVyZmVjdDoge1xyXG4gICAgICAgICAgICBydWxlczoge1xyXG4gICAgICAgICAgICAgIFwicHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0c1wiOlxyXG4gICAgICAgICAgICAgICAgcHJlZmVyVml0ZXN0SW5jcmVtZW50YWxDYXN0c1J1bGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcnVsZXM6IHtcclxuICAgICAgICAgIFwiY29kZXBlcmZlY3QvcHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0c1wiOiBcImVycm9yXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgICBvdmVycmlkZUNvbmZpZ0ZpbGU6IHRydWUsXHJcbiAgfSk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyB0aGUgdGVtcG9yYXJ5IGZpeHR1cmUgcHJvamVjdCB1c2VkIGJ5IHR5cGVkIGhlbHBlciBydW5zLlxyXG4gKiBAcGFyYW0gZGVjbGFyYXRpb25UZXh0IEFtYmllbnQgZGVjbGFyYXRpb25zIHVzZWQgYnkgdGhlIGZpeHR1cmUgcHJvamVjdC5cclxuICogQHJldHVybnMgRnJlc2ggZml4dHVyZSBwcm9qZWN0IHN0YXRlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGZpeHR1cmVQcm9qZWN0ID0gYXdhaXQgY3JlYXRlRml4dHVyZVByb2plY3QoZGVmYXVsdERlY2xhcmF0aW9uVGV4dCk7XHJcbiAqIHZvaWQgZml4dHVyZVByb2plY3Q7XHJcbiAqIGBgYFxyXG4gKi9cclxuY29uc3QgY3JlYXRlRml4dHVyZVByb2plY3QgPSBhc3luYyAoXHJcbiAgZGVjbGFyYXRpb25UZXh0OiBzdHJpbmcsXHJcbik6IFByb21pc2U8Rml4dHVyZVByb2plY3Q+ID0+IHtcclxuICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBta2R0ZW1wKHBhdGguam9pbih0bXBkaXIoKSwgXCJjb2RlcGVyZmVjdC1ydWxlLVwiKSk7XHJcbiAgY29uc3QgZ2xvYmFsc1BhdGggPSBwYXRoLmpvaW4oZGlyZWN0b3J5LCBcImdsb2JhbHMuZC50c1wiKTtcclxuICBjb25zdCB0c2NvbmZpZ1BhdGggPSBwYXRoLmpvaW4oZGlyZWN0b3J5LCBcInRzY29uZmlnLmpzb25cIik7XHJcblxyXG4gIHRlbXBvcmFyeURpcmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5KTtcclxuICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICB3cml0ZUZpbGUoZ2xvYmFsc1BhdGgsIGRlY2xhcmF0aW9uVGV4dCwgXCJ1dGY4XCIpLFxyXG4gICAgd3JpdGVGaWxlKHRzY29uZmlnUGF0aCwgY3JlYXRlVHNjb25maWdUZXh0KCksIFwidXRmOFwiKSxcclxuICBdKTtcclxuXHJcbiAgcmV0dXJuIHsgZGlyZWN0b3J5LCB0c2NvbmZpZ1BhdGggfTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgdW5pcXVlIGZpbGUgcGF0aCBmb3Igb25lIGlzb2xhdGVkIGxpbnQgcnVuLlxyXG4gKiBAcGFyYW0gZGlyZWN0b3J5IFRlbXBvcmFyeSBmaXh0dXJlIGRpcmVjdG9yeS5cclxuICogQHJldHVybnMgVW5pcXVlIGZpbGUgcGF0aCBmb3IgdGhlIGN1cnJlbnQgcnVuLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNyZWF0ZVJ1bkZpbGVQYXRoKFwiL3RtcC9wcm9qZWN0XCIpO1xyXG4gKiBgYGBcclxuICovXHJcbmNvbnN0IGNyZWF0ZVJ1bkZpbGVQYXRoID0gKGRpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nID0+XHJcbiAgcGF0aC5qb2luKGRpcmVjdG9yeSwgXCJleGFtcGxlLnNwZWMudHNcIik7XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyB0ZW1wb3JhcnkgZml4dHVyZSBwcm9qZWN0cyBjcmVhdGVkIGR1cmluZyBydWxlIHRlc3RzLlxyXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgY2xlYW51cCBjb21wbGV0ZXMuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogYXdhaXQgY2xlYW51cFRlbXBvcmFyeURpcmVjdG9yaWVzKCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuY29uc3QgY2xlYW51cFRlbXBvcmFyeURpcmVjdG9yaWVzID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgdGVtcG9yYXJ5RGlyZWN0b3JpZXNcclxuICAgICAgLnNwbGljZSgwKVxyXG4gICAgICAubWFwKGFzeW5jIChkaXJlY3RvcnkpID0+XHJcbiAgICAgICAgcm0oZGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSksXHJcbiAgICAgICksXHJcbiAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSdW5zIHRoZSBydWxlIHdpdGggYXV0b2ZpeCBlbmFibGVkIGluc2lkZSBhIHRlbXBvcmFyeSB0eXBlZCBmaXh0dXJlIHByb2plY3QuXHJcbiAqIEBwYXJhbSBjb2RlIFNvdXJjZSBjb2RlIHBhc3NlZCB0byBFU0xpbnQuXHJcbiAqIEBwYXJhbSBkZWNsYXJhdGlvblRleHQgQW1iaWVudCBkZWNsYXJhdGlvbnMgdXNlZCBieSB0aGUgZml4dHVyZSBwcm9qZWN0LlxyXG4gKiBAcmV0dXJucyBGaXhlZCBvdXRwdXQgYW5kIGxpbnQgbWVzc2FnZXMuXHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIEVTTGludCBkb2VzIG5vdCByZXR1cm4gYSBsaW50IHJlc3VsdC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5GaXgoXCJ2aS5kb01vY2soaW1wb3J0KFxcXCJmaXh0dXJlLW1vZHVsZVxcXCIpLCAoKSA9PiAoe30pKTtcXG5cIik7XHJcbiAqIHZvaWQgcmVzdWx0O1xyXG4gKiBgYGBcclxuICovXHJcbmNvbnN0IHJ1bkZpeCA9IGFzeW5jIChcclxuICBjb2RlOiBzdHJpbmcsXHJcbiAgZGVjbGFyYXRpb25UZXh0ID0gZGVmYXVsdERlY2xhcmF0aW9uVGV4dCxcclxuKTogUHJvbWlzZTxGaXhSdW5SZXN1bHQ+ID0+IHtcclxuICBjb25zdCBmaXh0dXJlUHJvamVjdCA9IGF3YWl0IGNyZWF0ZUZpeHR1cmVQcm9qZWN0KGRlY2xhcmF0aW9uVGV4dCk7XHJcbiAgY29uc3QgZmlsZVBhdGggPSBjcmVhdGVSdW5GaWxlUGF0aChmaXh0dXJlUHJvamVjdC5kaXJlY3RvcnkpO1xyXG4gIGNvbnN0IGVzbGludCA9IGNyZWF0ZVR5cGVkUnVsZUVzbGludChcclxuICAgIGZpeHR1cmVQcm9qZWN0LmRpcmVjdG9yeSxcclxuICAgIGZpeHR1cmVQcm9qZWN0LnRzY29uZmlnUGF0aCxcclxuICApO1xyXG5cclxuICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIGNvZGUsIFwidXRmOFwiKTtcclxuICB0cnkge1xyXG4gICAgY29uc3QgW3Jlc3VsdF0gPSBhd2FpdCBlc2xpbnQubGludFRleHQoY29kZSwgeyBmaWxlUGF0aCB9KTtcclxuXHJcbiAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgRVNMaW50IHRvIHJldHVybiBhIGxpbnQgcmVzdWx0LlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXNzYWdlczogcmVzdWx0Lm1lc3NhZ2VzLFxyXG4gICAgICBvdXRwdXQ6IHJlc3VsdC5vdXRwdXQgPz8gY29kZSxcclxuICAgIH07XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGF3YWl0IHJtKGZpeHR1cmVQcm9qZWN0LmRpcmVjdG9yeSwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCB7IGNsZWFudXBUZW1wb3JhcnlEaXJlY3RvcmllcywgcnVuRml4IH07XHJcbiJdfQ==
@@ -1,5 +0,0 @@
1
- import type { Rule } from "eslint";
2
- /** Enforces minimal nested casts for `vi.mock` and `vi.doMock` factory objects. */
3
- declare const preferVitestIncrementalCastsRule: Rule.RuleModule;
4
- export { preferVitestIncrementalCastsRule };
5
- //# sourceMappingURL=rule.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiCnC,mFAAmF;AACnF,QAAA,MAAM,gCAAgC,EAsDrB,IAAI,CAAC,UAAU,CAAC;AAEjC,OAAO,EAAE,gCAAgC,EAAE,CAAC"}
@@ -1,4 +0,0 @@
1
- /** Suite name for the guardrail-focused companion spec. */
2
- declare const ruleGuardrailsSuiteName = "prefer-vitest-incremental-casts rule guardrails";
3
- export { ruleGuardrailsSuiteName };
4
- //# sourceMappingURL=rule.guardrails.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.guardrails.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,QAAA,MAAM,uBAAuB,oDACsB,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1,4 +0,0 @@
1
- /** Suite name for the guardrail-focused companion spec. */
2
- const ruleGuardrailsSuiteName = "prefer-vitest-incremental-casts rule guardrails";
3
- export { ruleGuardrailsSuiteName };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5ndWFyZHJhaWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL3ByZWZlci12aXRlc3QtaW5jcmVtZW50YWwtY2FzdHMvcnVsZS5ndWFyZHJhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJEQUEyRDtBQUMzRCxNQUFNLHVCQUF1QixHQUMzQixpREFBaUQsQ0FBQztBQUVwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBTdWl0ZSBuYW1lIGZvciB0aGUgZ3VhcmRyYWlsLWZvY3VzZWQgY29tcGFuaW9uIHNwZWMuICovXHJcbmNvbnN0IHJ1bGVHdWFyZHJhaWxzU3VpdGVOYW1lID1cclxuICBcInByZWZlci12aXRlc3QtaW5jcmVtZW50YWwtY2FzdHMgcnVsZSBndWFyZHJhaWxzXCI7XHJcblxyXG5leHBvcnQgeyBydWxlR3VhcmRyYWlsc1N1aXRlTmFtZSB9O1xyXG4iXX0=
@@ -1,4 +0,0 @@
1
- /** Suite name for the input-shape-focused companion spec. */
2
- declare const ruleInputShapesSuiteName = "prefer-vitest-incremental-casts rule input shapes";
3
- export { ruleInputShapesSuiteName };
4
- //# sourceMappingURL=rule.input-shapes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.input-shapes.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,QAAA,MAAM,wBAAwB,sDACuB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,4 +0,0 @@
1
- /** Suite name for the input-shape-focused companion spec. */
2
- const ruleInputShapesSuiteName = "prefer-vitest-incremental-casts rule input shapes";
3
- export { ruleInputShapesSuiteName };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5pbnB1dC1zaGFwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0cy9ydWxlLmlucHV0LXNoYXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2REFBNkQ7QUFDN0QsTUFBTSx3QkFBd0IsR0FDNUIsbURBQW1ELENBQUM7QUFFdEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU3VpdGUgbmFtZSBmb3IgdGhlIGlucHV0LXNoYXBlLWZvY3VzZWQgY29tcGFuaW9uIHNwZWMuICovXHJcbmNvbnN0IHJ1bGVJbnB1dFNoYXBlc1N1aXRlTmFtZSA9XHJcbiAgXCJwcmVmZXItdml0ZXN0LWluY3JlbWVudGFsLWNhc3RzIHJ1bGUgaW5wdXQgc2hhcGVzXCI7XHJcblxyXG5leHBvcnQgeyBydWxlSW5wdXRTaGFwZXNTdWl0ZU5hbWUgfTtcclxuIl19