@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,62 +0,0 @@
1
- import { ESLintUtils } from "@typescript-eslint/utils";
2
- import { createRuleDocumentation } from "../../custom-rule-documentation.js";
3
- import { collectMatch } from "./match.js";
4
- /**
5
- * Resolves TypeScript parser services when the rule runs on a typed file.
6
- * @param context ESLint rule context.
7
- * @returns Parser services when TypeScript services are available.
8
- * @example
9
- * ```typescript
10
- * const services = getParserServices(context);
11
- * ```
12
- */
13
- function getParserServices(context) {
14
- try {
15
- return ESLintUtils.getParserServices(context);
16
- }
17
- catch {
18
- return void 0;
19
- }
20
- }
21
- /** Enforces minimal nested casts for `vi.mock` and `vi.doMock` factory objects. */
22
- const preferVitestIncrementalCastsRule = ESLintUtils.RuleCreator.withoutDocs({
23
- create(context) {
24
- const services = getParserServices(context);
25
- if (services === void 0 || services.program === null) {
26
- return {};
27
- }
28
- const checker = services.program.getTypeChecker();
29
- const sourceText = context.sourceCode.text;
30
- return {
31
- CallExpression(node) {
32
- const match = collectMatch({
33
- callExpression: node,
34
- checker,
35
- services,
36
- sourceText,
37
- });
38
- if (match === void 0) {
39
- return;
40
- }
41
- context.report({
42
- fix: (fixer) => fixer.replaceTextRange(match.returnExpressionRange, match.replacementText),
43
- messageId: "preferVitestIncrementalCasts",
44
- node,
45
- });
46
- },
47
- };
48
- },
49
- defaultOptions: [],
50
- meta: {
51
- docs: createRuleDocumentation("prefer-vitest-incremental-casts", "Prefer minimal nested casts in vi.mock/vi.doMock factory return objects when TypeScript rejects the module shape."),
52
- fixable: "code",
53
- messages: {
54
- preferVitestIncrementalCasts: "Normalize the mock factory to the smallest stable set of nested casts needed for the module type.",
55
- },
56
- schema: [],
57
- type: "suggestion",
58
- },
59
- name: "prefer-vitest-incremental-casts",
60
- });
61
- export { preferVitestIncrementalCastsRule };
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9wcmVmZXItdml0ZXN0LWluY3JlbWVudGFsLWNhc3RzL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBU3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdkM7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixPQUF5QjtJQUV6QixJQUFJLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixNQUFNLGdDQUFnQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUcxRTtJQUNBLE1BQU0sQ0FBQyxPQUFPO1FBQ1osTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUMsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBRTNDLE9BQU87WUFDTCxjQUFjLENBQUMsSUFBSTtnQkFDakIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDO29CQUN6QixjQUFjLEVBQUUsSUFBSTtvQkFDcEIsT0FBTztvQkFDUCxRQUFRO29CQUNSLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUNiLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2IsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixLQUFLLENBQUMscUJBQXFCLEVBQzNCLEtBQUssQ0FBQyxlQUFlLENBQ3RCO29CQUNILFNBQVMsRUFBRSw4QkFBOEI7b0JBQ3pDLElBQUk7aUJBQ0wsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFDbEIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLHVCQUF1QixDQUMzQixpQ0FBaUMsRUFDakMsbUhBQW1ILENBQ3BIO1FBQ0QsT0FBTyxFQUFFLE1BQU07UUFDZixRQUFRLEVBQUU7WUFDUiw0QkFBNEIsRUFDMUIsbUdBQW1HO1NBQ3RHO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsWUFBWTtLQUNuQjtJQUNELElBQUksRUFBRSxpQ0FBaUM7Q0FDeEMsQ0FBK0IsQ0FBQztBQUVqQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgRVNMaW50VXRpbHMgfSBmcm9tIFwiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzXCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVzc2FnZUlkcyxcbiAgT3B0aW9ucyxcbiAgUGFyc2VyU2VydmljZXMsXG4gIFR5cGVkUnVsZUNvbnRleHQsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbS1ydWxlLWRvY3VtZW50YXRpb25cIjtcbmltcG9ydCB7IGNvbGxlY3RNYXRjaCB9IGZyb20gXCIuL21hdGNoXCI7XG5cbi8qKlxuICogUmVzb2x2ZXMgVHlwZVNjcmlwdCBwYXJzZXIgc2VydmljZXMgd2hlbiB0aGUgcnVsZSBydW5zIG9uIGEgdHlwZWQgZmlsZS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBQYXJzZXIgc2VydmljZXMgd2hlbiBUeXBlU2NyaXB0IHNlcnZpY2VzIGFyZSBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VydmljZXMgPSBnZXRQYXJzZXJTZXJ2aWNlcyhjb250ZXh0KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRQYXJzZXJTZXJ2aWNlcyhcbiAgY29udGV4dDogVHlwZWRSdWxlQ29udGV4dCxcbik6IFBhcnNlclNlcnZpY2VzIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRVNMaW50VXRpbHMuZ2V0UGFyc2VyU2VydmljZXMoY29udGV4dCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbn1cblxuLyoqIEVuZm9yY2VzIG1pbmltYWwgbmVzdGVkIGNhc3RzIGZvciBgdmkubW9ja2AgYW5kIGB2aS5kb01vY2tgIGZhY3Rvcnkgb2JqZWN0cy4gKi9cbmNvbnN0IHByZWZlclZpdGVzdEluY3JlbWVudGFsQ2FzdHNSdWxlID0gRVNMaW50VXRpbHMuUnVsZUNyZWF0b3Iud2l0aG91dERvY3M8XG4gIE9wdGlvbnMsXG4gIE1lc3NhZ2VJZHNcbj4oe1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gZ2V0UGFyc2VyU2VydmljZXMoY29udGV4dCk7XG5cbiAgICBpZiAoc2VydmljZXMgPT09IHZvaWQgMCB8fCBzZXJ2aWNlcy5wcm9ncmFtID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tlciA9IHNlcnZpY2VzLnByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgICBjb25zdCBzb3VyY2VUZXh0ID0gY29udGV4dC5zb3VyY2VDb2RlLnRleHQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbGxlY3RNYXRjaCh7XG4gICAgICAgICAgY2FsbEV4cHJlc3Npb246IG5vZGUsXG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICBzb3VyY2VUZXh0LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2ggPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXg6IChmaXhlcikgPT5cbiAgICAgICAgICAgIGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgICAgICAgIG1hdGNoLnJldHVybkV4cHJlc3Npb25SYW5nZSxcbiAgICAgICAgICAgICAgbWF0Y2gucmVwbGFjZW1lbnRUZXh0LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBtZXNzYWdlSWQ6IFwicHJlZmVyVml0ZXN0SW5jcmVtZW50YWxDYXN0c1wiLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxuICBkZWZhdWx0T3B0aW9uczogW10sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbihcbiAgICAgIFwicHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0c1wiLFxuICAgICAgXCJQcmVmZXIgbWluaW1hbCBuZXN0ZWQgY2FzdHMgaW4gdmkubW9jay92aS5kb01vY2sgZmFjdG9yeSByZXR1cm4gb2JqZWN0cyB3aGVuIFR5cGVTY3JpcHQgcmVqZWN0cyB0aGUgbW9kdWxlIHNoYXBlLlwiLFxuICAgICksXG4gICAgZml4YWJsZTogXCJjb2RlXCIsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIHByZWZlclZpdGVzdEluY3JlbWVudGFsQ2FzdHM6XG4gICAgICAgIFwiTm9ybWFsaXplIHRoZSBtb2NrIGZhY3RvcnkgdG8gdGhlIHNtYWxsZXN0IHN0YWJsZSBzZXQgb2YgbmVzdGVkIGNhc3RzIG5lZWRlZCBmb3IgdGhlIG1vZHVsZSB0eXBlLlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiBcInN1Z2dlc3Rpb25cIixcbiAgfSxcbiAgbmFtZTogXCJwcmVmZXItdml0ZXN0LWluY3JlbWVudGFsLWNhc3RzXCIsXG59KSBhcyB1bmtub3duIGFzIFJ1bGUuUnVsZU1vZHVsZTtcblxuZXhwb3J0IHsgcHJlZmVyVml0ZXN0SW5jcmVtZW50YWxDYXN0c1J1bGUgfTtcbiJdfQ==
@@ -1,4 +0,0 @@
1
- /** Suite name for the signature-fallback companion spec. */
2
- declare const ruleSignatureFallbackSuiteName = "prefer-vitest-incremental-casts rule signature fallback";
3
- export { ruleSignatureFallbackSuiteName };
4
- //# sourceMappingURL=rule.signature-fallback.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.signature-fallback.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,QAAA,MAAM,8BAA8B,4DACuB,CAAC;AAE5D,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
@@ -1,4 +0,0 @@
1
- /** Suite name for the signature-fallback companion spec. */
2
- const ruleSignatureFallbackSuiteName = "prefer-vitest-incremental-casts rule signature fallback";
3
- export { ruleSignatureFallbackSuiteName };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5zaWduYXR1cmUtZmFsbGJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0cy9ydWxlLnNpZ25hdHVyZS1mYWxsYmFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsTUFBTSw4QkFBOEIsR0FDbEMseURBQXlELENBQUM7QUFFNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU3VpdGUgbmFtZSBmb3IgdGhlIHNpZ25hdHVyZS1mYWxsYmFjayBjb21wYW5pb24gc3BlYy4gKi9cclxuY29uc3QgcnVsZVNpZ25hdHVyZUZhbGxiYWNrU3VpdGVOYW1lID1cclxuICBcInByZWZlci12aXRlc3QtaW5jcmVtZW50YWwtY2FzdHMgcnVsZSBzaWduYXR1cmUgZmFsbGJhY2tcIjtcclxuXHJcbmV4cG9ydCB7IHJ1bGVTaWduYXR1cmVGYWxsYmFja1N1aXRlTmFtZSB9O1xyXG4iXX0=
@@ -1,24 +0,0 @@
1
- import type * as ts from "typescript";
2
- import type { OuterCastContext, ResolveFactoryTargetTypeContext } from "./types.js";
3
- /**
4
- * Determines whether the object literal still needs an outer cast.
5
- * @param context Data used to decide whether the full object needs casting.
6
- * @returns True when the full object still needs casting.
7
- * @example
8
- * ```typescript
9
- * const needsOuterCast = isOuterCastRequired(context);
10
- * ```
11
- */
12
- declare function isOuterCastRequired(context: OuterCastContext): boolean;
13
- /**
14
- * Resolves the target type the factory object should satisfy.
15
- * @param context Type-resolution inputs for the current mock factory.
16
- * @returns Target type for the rewritten object literal.
17
- * @example
18
- * ```typescript
19
- * const targetType = resolveFactoryTargetType(context);
20
- * ```
21
- */
22
- declare function resolveFactoryTargetType(context: ResolveFactoryTargetTypeContext): ts.Type | undefined;
23
- export { isOuterCastRequired, resolveFactoryTargetType };
24
- //# sourceMappingURL=type-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/type-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,KAAK,EAEV,gBAAgB,EAChB,+BAA+B,EAEhC,MAAM,SAAS,CAAC;AA2IjB;;;;;;;;GAQG;AACH,iBAAS,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAE/D;AAED;;;;;;;;GAQG;AACH,iBAAS,wBAAwB,CAC/B,OAAO,EAAE,+BAA+B,GACvC,EAAE,CAAC,IAAI,GAAG,SAAS,CAKrB;AAED,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,113 +0,0 @@
1
- import { SignatureKind } from "typescript";
2
- import { isOuterCastRequired as isOuterCastRequiredImpl, normalizeObjectLikeType, resolveFactoryReturnType, } from "./type-shape-helpers.js";
3
- /**
4
- * Reads the contextual type assigned to the returned mock object literal.
5
- * @param context Type-resolution inputs for the current mock factory.
6
- * @returns Contextual object-like type when TypeScript provides one.
7
- * @example
8
- * ```typescript
9
- * const targetType = getContextualFactoryTargetType(context);
10
- * ```
11
- */
12
- function getContextualFactoryTargetType(context) {
13
- const { checker, objectExpression, services } = context;
14
- return normalizeObjectLikeType(checker, checker.getContextualType(services.esTreeNodeToTSNodeMap.get(objectExpression)));
15
- }
16
- /**
17
- * Resolves the factory return type for one compatible mock signature.
18
- * @param context Inputs required to inspect one callable signature.
19
- * @returns Normalized object-like return type when the signature matches.
20
- * @example
21
- * ```typescript
22
- * const returnType = getMatchingSignatureReturnType(context);
23
- * ```
24
- */
25
- function getMatchingSignatureReturnType(context) {
26
- const { checker, firstArgument, firstArgumentType, signature, tsFactoryArgument, } = context;
27
- const [specifierParameter, factoryParameter] = signature.getParameters();
28
- if (specifierParameter === void 0 || factoryParameter === void 0) {
29
- return void 0;
30
- }
31
- const specifierParameterType = checker.getTypeOfSymbolAtLocation(specifierParameter, firstArgument);
32
- if (!checker.isTypeAssignableTo(firstArgumentType, specifierParameterType)) {
33
- return void 0;
34
- }
35
- return resolveFactoryReturnType(checker, checker.getTypeOfSymbolAtLocation(factoryParameter, tsFactoryArgument));
36
- }
37
- /**
38
- * Resolves a target type by matching the mock call against callable signatures.
39
- * @param context Type-resolution inputs for the current mock factory.
40
- * @returns Object-like return type inferred from the matched signature.
41
- * @example
42
- * ```typescript
43
- * const targetType = getSignatureFactoryTargetType(context);
44
- * ```
45
- */
46
- function getSignatureFactoryTargetType(context) {
47
- const signatureMatchInputs = getSignatureMatchInputs(context);
48
- if (signatureMatchInputs === void 0) {
49
- return void 0;
50
- }
51
- for (const signature of context.checker.getSignaturesOfType(signatureMatchInputs.calleeType, SignatureKind.Call)) {
52
- const returnType = getMatchingSignatureReturnType({
53
- checker: context.checker,
54
- firstArgument: signatureMatchInputs.firstArgument,
55
- firstArgumentType: signatureMatchInputs.firstArgumentType,
56
- signature,
57
- tsFactoryArgument: signatureMatchInputs.tsFactoryArgument,
58
- });
59
- if (returnType !== void 0) {
60
- return returnType;
61
- }
62
- }
63
- return void 0;
64
- }
65
- /**
66
- * Collects the TypeScript nodes and types needed for signature matching.
67
- * @param context Type-resolution inputs for the current mock factory.
68
- * @returns Normalized signature-matching inputs when the call has a first argument.
69
- * @example
70
- * ```typescript
71
- * const inputs = getSignatureMatchInputs(context);
72
- * ```
73
- */
74
- function getSignatureMatchInputs(context) {
75
- const tsCallExpression = context.services.esTreeNodeToTSNodeMap.get(context.callExpression);
76
- const [firstArgument] = tsCallExpression.arguments;
77
- if (firstArgument === void 0) {
78
- return void 0;
79
- }
80
- return {
81
- calleeType: context.checker.getTypeAtLocation(tsCallExpression.expression),
82
- firstArgument,
83
- firstArgumentType: context.checker.getTypeAtLocation(firstArgument),
84
- tsFactoryArgument: context.services.esTreeNodeToTSNodeMap.get(context.factoryArgument),
85
- };
86
- }
87
- /**
88
- * Determines whether the object literal still needs an outer cast.
89
- * @param context Data used to decide whether the full object needs casting.
90
- * @returns True when the full object still needs casting.
91
- * @example
92
- * ```typescript
93
- * const needsOuterCast = isOuterCastRequired(context);
94
- * ```
95
- */
96
- function isOuterCastRequired(context) {
97
- return isOuterCastRequiredImpl(context);
98
- }
99
- /**
100
- * Resolves the target type the factory object should satisfy.
101
- * @param context Type-resolution inputs for the current mock factory.
102
- * @returns Target type for the rewritten object literal.
103
- * @example
104
- * ```typescript
105
- * const targetType = resolveFactoryTargetType(context);
106
- * ```
107
- */
108
- function resolveFactoryTargetType(context) {
109
- return (getContextualFactoryTargetType(context) ??
110
- getSignatureFactoryTargetType(context));
111
- }
112
- export { isOuterCastRequired, resolveFactoryTargetType };
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL3ByZWZlci12aXRlc3QtaW5jcmVtZW50YWwtY2FzdHMvdHlwZS1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFTM0MsT0FBTyxFQUNMLG1CQUFtQixJQUFJLHVCQUF1QixFQUM5Qyx1QkFBdUIsRUFDdkIsd0JBQXdCLEdBQ3pCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUI7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDhCQUE4QixDQUNyQyxPQUF3QztJQUV4QyxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV4RCxPQUFPLHVCQUF1QixDQUM1QixPQUFPLEVBQ1AsT0FBTyxDQUFDLGlCQUFpQixDQUN2QixRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQ3JELENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsOEJBQThCLENBQ3JDLE9BQTJDO0lBRTNDLE1BQU0sRUFDSixPQUFPLEVBQ1AsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLEdBQUcsT0FBTyxDQUFDO0lBQ1osTUFBTSxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRXpFLElBQUksa0JBQWtCLEtBQUssS0FBSyxDQUFDLElBQUksZ0JBQWdCLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FDOUQsa0JBQWtCLEVBQ2xCLGFBQWEsQ0FDZCxDQUFDO0lBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7UUFDM0UsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyx3QkFBd0IsQ0FDN0IsT0FBTyxFQUNQLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUN2RSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDcEMsT0FBd0M7SUFFeEMsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU5RCxJQUFJLG9CQUFvQixLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEMsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUN6RCxvQkFBb0IsQ0FBQyxVQUFVLEVBQy9CLGFBQWEsQ0FBQyxJQUFJLENBQ25CLEVBQUUsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDO1lBQ2hELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixhQUFhLEVBQUUsb0JBQW9CLENBQUMsYUFBYTtZQUNqRCxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQyxpQkFBaUI7WUFDekQsU0FBUztZQUNULGlCQUFpQixFQUFFLG9CQUFvQixDQUFDLGlCQUFpQjtTQUMxRCxDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHVCQUF1QixDQUM5QixPQUF3QztJQUV4QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUNqRSxPQUFPLENBQUMsY0FBYyxDQUN2QixDQUFDO0lBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUVuRCxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU87UUFDTCxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7UUFDMUUsYUFBYTtRQUNiLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBQ25FLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUMzRCxPQUFPLENBQUMsZUFBZSxDQUN4QjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLE9BQXlCO0lBQ3BELE9BQU8sdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FDL0IsT0FBd0M7SUFFeEMsT0FBTyxDQUNMLDhCQUE4QixDQUFDLE9BQU8sQ0FBQztRQUN2Qyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FDdkMsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcclxuXHJcbmltcG9ydCB7IFNpZ25hdHVyZUtpbmQgfSBmcm9tIFwidHlwZXNjcmlwdFwiO1xyXG5cclxuaW1wb3J0IHR5cGUge1xyXG4gIE1hdGNoaW5nU2lnbmF0dXJlUmV0dXJuVHlwZUNvbnRleHQsXHJcbiAgT3V0ZXJDYXN0Q29udGV4dCxcclxuICBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0LFxyXG4gIFNpZ25hdHVyZU1hdGNoSW5wdXRzLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIGlzT3V0ZXJDYXN0UmVxdWlyZWQgYXMgaXNPdXRlckNhc3RSZXF1aXJlZEltcGwsXHJcbiAgbm9ybWFsaXplT2JqZWN0TGlrZVR5cGUsXHJcbiAgcmVzb2x2ZUZhY3RvcnlSZXR1cm5UeXBlLFxyXG59IGZyb20gXCIuL3R5cGUtc2hhcGUtaGVscGVyc1wiO1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIHRoZSBjb250ZXh0dWFsIHR5cGUgYXNzaWduZWQgdG8gdGhlIHJldHVybmVkIG1vY2sgb2JqZWN0IGxpdGVyYWwuXHJcbiAqIEBwYXJhbSBjb250ZXh0IFR5cGUtcmVzb2x1dGlvbiBpbnB1dHMgZm9yIHRoZSBjdXJyZW50IG1vY2sgZmFjdG9yeS5cclxuICogQHJldHVybnMgQ29udGV4dHVhbCBvYmplY3QtbGlrZSB0eXBlIHdoZW4gVHlwZVNjcmlwdCBwcm92aWRlcyBvbmUuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgdGFyZ2V0VHlwZSA9IGdldENvbnRleHR1YWxGYWN0b3J5VGFyZ2V0VHlwZShjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb250ZXh0dWFsRmFjdG9yeVRhcmdldFR5cGUoXHJcbiAgY29udGV4dDogUmVzb2x2ZUZhY3RvcnlUYXJnZXRUeXBlQ29udGV4dCxcclxuKTogdHMuVHlwZSB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3QgeyBjaGVja2VyLCBvYmplY3RFeHByZXNzaW9uLCBzZXJ2aWNlcyB9ID0gY29udGV4dDtcclxuXHJcbiAgcmV0dXJuIG5vcm1hbGl6ZU9iamVjdExpa2VUeXBlKFxyXG4gICAgY2hlY2tlcixcclxuICAgIGNoZWNrZXIuZ2V0Q29udGV4dHVhbFR5cGUoXHJcbiAgICAgIHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQob2JqZWN0RXhwcmVzc2lvbiksXHJcbiAgICApLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlcyB0aGUgZmFjdG9yeSByZXR1cm4gdHlwZSBmb3Igb25lIGNvbXBhdGlibGUgbW9jayBzaWduYXR1cmUuXHJcbiAqIEBwYXJhbSBjb250ZXh0IElucHV0cyByZXF1aXJlZCB0byBpbnNwZWN0IG9uZSBjYWxsYWJsZSBzaWduYXR1cmUuXHJcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgb2JqZWN0LWxpa2UgcmV0dXJuIHR5cGUgd2hlbiB0aGUgc2lnbmF0dXJlIG1hdGNoZXMuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgcmV0dXJuVHlwZSA9IGdldE1hdGNoaW5nU2lnbmF0dXJlUmV0dXJuVHlwZShjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRNYXRjaGluZ1NpZ25hdHVyZVJldHVyblR5cGUoXHJcbiAgY29udGV4dDogTWF0Y2hpbmdTaWduYXR1cmVSZXR1cm5UeXBlQ29udGV4dCxcclxuKTogdHMuVHlwZSB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3Qge1xyXG4gICAgY2hlY2tlcixcclxuICAgIGZpcnN0QXJndW1lbnQsXHJcbiAgICBmaXJzdEFyZ3VtZW50VHlwZSxcclxuICAgIHNpZ25hdHVyZSxcclxuICAgIHRzRmFjdG9yeUFyZ3VtZW50LFxyXG4gIH0gPSBjb250ZXh0O1xyXG4gIGNvbnN0IFtzcGVjaWZpZXJQYXJhbWV0ZXIsIGZhY3RvcnlQYXJhbWV0ZXJdID0gc2lnbmF0dXJlLmdldFBhcmFtZXRlcnMoKTtcclxuXHJcbiAgaWYgKHNwZWNpZmllclBhcmFtZXRlciA9PT0gdm9pZCAwIHx8IGZhY3RvcnlQYXJhbWV0ZXIgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIHZvaWQgMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IHNwZWNpZmllclBhcmFtZXRlclR5cGUgPSBjaGVja2VyLmdldFR5cGVPZlN5bWJvbEF0TG9jYXRpb24oXHJcbiAgICBzcGVjaWZpZXJQYXJhbWV0ZXIsXHJcbiAgICBmaXJzdEFyZ3VtZW50LFxyXG4gICk7XHJcblxyXG4gIGlmICghY2hlY2tlci5pc1R5cGVBc3NpZ25hYmxlVG8oZmlyc3RBcmd1bWVudFR5cGUsIHNwZWNpZmllclBhcmFtZXRlclR5cGUpKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc29sdmVGYWN0b3J5UmV0dXJuVHlwZShcclxuICAgIGNoZWNrZXIsXHJcbiAgICBjaGVja2VyLmdldFR5cGVPZlN5bWJvbEF0TG9jYXRpb24oZmFjdG9yeVBhcmFtZXRlciwgdHNGYWN0b3J5QXJndW1lbnQpLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlcyBhIHRhcmdldCB0eXBlIGJ5IG1hdGNoaW5nIHRoZSBtb2NrIGNhbGwgYWdhaW5zdCBjYWxsYWJsZSBzaWduYXR1cmVzLlxyXG4gKiBAcGFyYW0gY29udGV4dCBUeXBlLXJlc29sdXRpb24gaW5wdXRzIGZvciB0aGUgY3VycmVudCBtb2NrIGZhY3RvcnkuXHJcbiAqIEByZXR1cm5zIE9iamVjdC1saWtlIHJldHVybiB0eXBlIGluZmVycmVkIGZyb20gdGhlIG1hdGNoZWQgc2lnbmF0dXJlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IHRhcmdldFR5cGUgPSBnZXRTaWduYXR1cmVGYWN0b3J5VGFyZ2V0VHlwZShjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTaWduYXR1cmVGYWN0b3J5VGFyZ2V0VHlwZShcclxuICBjb250ZXh0OiBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0LFxyXG4pOiB0cy5UeXBlIHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCBzaWduYXR1cmVNYXRjaElucHV0cyA9IGdldFNpZ25hdHVyZU1hdGNoSW5wdXRzKGNvbnRleHQpO1xyXG5cclxuICBpZiAoc2lnbmF0dXJlTWF0Y2hJbnB1dHMgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIHZvaWQgMDtcclxuICB9XHJcblxyXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIGNvbnRleHQuY2hlY2tlci5nZXRTaWduYXR1cmVzT2ZUeXBlKFxyXG4gICAgc2lnbmF0dXJlTWF0Y2hJbnB1dHMuY2FsbGVlVHlwZSxcclxuICAgIFNpZ25hdHVyZUtpbmQuQ2FsbCxcclxuICApKSB7XHJcbiAgICBjb25zdCByZXR1cm5UeXBlID0gZ2V0TWF0Y2hpbmdTaWduYXR1cmVSZXR1cm5UeXBlKHtcclxuICAgICAgY2hlY2tlcjogY29udGV4dC5jaGVja2VyLFxyXG4gICAgICBmaXJzdEFyZ3VtZW50OiBzaWduYXR1cmVNYXRjaElucHV0cy5maXJzdEFyZ3VtZW50LFxyXG4gICAgICBmaXJzdEFyZ3VtZW50VHlwZTogc2lnbmF0dXJlTWF0Y2hJbnB1dHMuZmlyc3RBcmd1bWVudFR5cGUsXHJcbiAgICAgIHNpZ25hdHVyZSxcclxuICAgICAgdHNGYWN0b3J5QXJndW1lbnQ6IHNpZ25hdHVyZU1hdGNoSW5wdXRzLnRzRmFjdG9yeUFyZ3VtZW50LFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHJldHVyblR5cGUgIT09IHZvaWQgMCkge1xyXG4gICAgICByZXR1cm4gcmV0dXJuVHlwZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB2b2lkIDA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyB0aGUgVHlwZVNjcmlwdCBub2RlcyBhbmQgdHlwZXMgbmVlZGVkIGZvciBzaWduYXR1cmUgbWF0Y2hpbmcuXHJcbiAqIEBwYXJhbSBjb250ZXh0IFR5cGUtcmVzb2x1dGlvbiBpbnB1dHMgZm9yIHRoZSBjdXJyZW50IG1vY2sgZmFjdG9yeS5cclxuICogQHJldHVybnMgTm9ybWFsaXplZCBzaWduYXR1cmUtbWF0Y2hpbmcgaW5wdXRzIHdoZW4gdGhlIGNhbGwgaGFzIGEgZmlyc3QgYXJndW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgaW5wdXRzID0gZ2V0U2lnbmF0dXJlTWF0Y2hJbnB1dHMoY29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U2lnbmF0dXJlTWF0Y2hJbnB1dHMoXHJcbiAgY29udGV4dDogUmVzb2x2ZUZhY3RvcnlUYXJnZXRUeXBlQ29udGV4dCxcclxuKTogU2lnbmF0dXJlTWF0Y2hJbnB1dHMgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHRzQ2FsbEV4cHJlc3Npb24gPSBjb250ZXh0LnNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQoXHJcbiAgICBjb250ZXh0LmNhbGxFeHByZXNzaW9uLFxyXG4gICk7XHJcbiAgY29uc3QgW2ZpcnN0QXJndW1lbnRdID0gdHNDYWxsRXhwcmVzc2lvbi5hcmd1bWVudHM7XHJcblxyXG4gIGlmIChmaXJzdEFyZ3VtZW50ID09PSB2b2lkIDApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2FsbGVlVHlwZTogY29udGV4dC5jaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHRzQ2FsbEV4cHJlc3Npb24uZXhwcmVzc2lvbiksXHJcbiAgICBmaXJzdEFyZ3VtZW50LFxyXG4gICAgZmlyc3RBcmd1bWVudFR5cGU6IGNvbnRleHQuY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihmaXJzdEFyZ3VtZW50KSxcclxuICAgIHRzRmFjdG9yeUFyZ3VtZW50OiBjb250ZXh0LnNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQoXHJcbiAgICAgIGNvbnRleHQuZmFjdG9yeUFyZ3VtZW50LFxyXG4gICAgKSxcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBvYmplY3QgbGl0ZXJhbCBzdGlsbCBuZWVkcyBhbiBvdXRlciBjYXN0LlxyXG4gKiBAcGFyYW0gY29udGV4dCBEYXRhIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGZ1bGwgb2JqZWN0IG5lZWRzIGNhc3RpbmcuXHJcbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgZnVsbCBvYmplY3Qgc3RpbGwgbmVlZHMgY2FzdGluZy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBuZWVkc091dGVyQ2FzdCA9IGlzT3V0ZXJDYXN0UmVxdWlyZWQoY29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNPdXRlckNhc3RSZXF1aXJlZChjb250ZXh0OiBPdXRlckNhc3RDb250ZXh0KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIGlzT3V0ZXJDYXN0UmVxdWlyZWRJbXBsKGNvbnRleHQpO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZXMgdGhlIHRhcmdldCB0eXBlIHRoZSBmYWN0b3J5IG9iamVjdCBzaG91bGQgc2F0aXNmeS5cclxuICogQHBhcmFtIGNvbnRleHQgVHlwZS1yZXNvbHV0aW9uIGlucHV0cyBmb3IgdGhlIGN1cnJlbnQgbW9jayBmYWN0b3J5LlxyXG4gKiBAcmV0dXJucyBUYXJnZXQgdHlwZSBmb3IgdGhlIHJld3JpdHRlbiBvYmplY3QgbGl0ZXJhbC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCB0YXJnZXRUeXBlID0gcmVzb2x2ZUZhY3RvcnlUYXJnZXRUeXBlKGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVGYWN0b3J5VGFyZ2V0VHlwZShcclxuICBjb250ZXh0OiBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0LFxyXG4pOiB0cy5UeXBlIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gKFxyXG4gICAgZ2V0Q29udGV4dHVhbEZhY3RvcnlUYXJnZXRUeXBlKGNvbnRleHQpID8/XHJcbiAgICBnZXRTaWduYXR1cmVGYWN0b3J5VGFyZ2V0VHlwZShjb250ZXh0KVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCB7IGlzT3V0ZXJDYXN0UmVxdWlyZWQsIHJlc29sdmVGYWN0b3J5VGFyZ2V0VHlwZSB9O1xyXG4iXX0=
@@ -1,36 +0,0 @@
1
- import type * as ts from "typescript";
2
- import type { OuterCastContext } from "./types.js";
3
- /**
4
- * Determines whether the object literal still needs an outer cast.
5
- * @param context Data used to decide whether the full object needs casting.
6
- * @returns True when the full object still needs casting.
7
- * @example
8
- * ```typescript
9
- * const needsOuterCast = isOuterCastRequired(context);
10
- * ```
11
- */
12
- declare function isOuterCastRequired(context: OuterCastContext): boolean;
13
- /**
14
- * Narrows a target type to the object-like type the fixer can reason about.
15
- * @param checker TypeScript type checker instance.
16
- * @param targetType Candidate target type.
17
- * @returns Object-like type when the target can be normalized safely.
18
- * @example
19
- * ```typescript
20
- * const normalizedType = normalizeObjectLikeType(checker, targetType);
21
- * ```
22
- */
23
- declare function normalizeObjectLikeType(checker: ts.TypeChecker, targetType: ts.Type | undefined): ts.Type | undefined;
24
- /**
25
- * Resolves the factory function's returned object type from its call signatures.
26
- * @param checker TypeScript type checker instance.
27
- * @param factoryParameterType Type of the factory callback parameter.
28
- * @returns Normalized object-like return type when one is available.
29
- * @example
30
- * ```typescript
31
- * const returnType = resolveFactoryReturnType(checker, factoryParameterType);
32
- * ```
33
- */
34
- declare function resolveFactoryReturnType(checker: ts.TypeChecker, factoryParameterType: ts.Type): ts.Type | undefined;
35
- export { isOuterCastRequired, normalizeObjectLikeType, resolveFactoryReturnType, };
36
- //# sourceMappingURL=type-shape-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-shape-helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAYtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAoGhD;;;;;;;;GAQG;AACH,iBAAS,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAoB/D;AAED;;;;;;;;;GASG;AACH,iBAAS,uBAAuB,CAC9B,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,UAAU,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,GAC9B,EAAE,CAAC,IAAI,GAAG,SAAS,CAqBrB;AAED;;;;;;;;;GASG;AACH,iBAAS,wBAAwB,CAC/B,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,oBAAoB,EAAE,EAAE,CAAC,IAAI,GAC5B,EAAE,CAAC,IAAI,GAAG,SAAS,CAgBrB;AAED,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,GACzB,CAAC"}
@@ -1,138 +0,0 @@
1
- import { isMethodDeclaration, isMethodSignature, isParameter, isPropertyDeclaration, isPropertySignature, SignatureKind, SymbolFlags, } from "typescript";
2
- /**
3
- * Selects a single object-like branch from a union when one exists.
4
- * @param checker TypeScript type checker instance.
5
- * @param unionType Union type to inspect.
6
- * @returns The single object-like branch when the union is unambiguous.
7
- * @example
8
- * ```typescript
9
- * const branch = getSingleUnionObjectLikeType(checker, unionType);
10
- * ```
11
- */
12
- function getSingleUnionObjectLikeType(checker, unionType) {
13
- const objectLikeTypes = unionType.types.filter((type) => hasObjectShape(checker, type));
14
- return objectLikeTypes.length === 1 ? objectLikeTypes[0] : void 0;
15
- }
16
- /**
17
- * Detects whether a TypeScript type has an object-like surface.
18
- * @param checker TypeScript type checker instance.
19
- * @param targetType Candidate target type.
20
- * @returns True when the type exposes properties or callable signatures.
21
- * @example
22
- * ```typescript
23
- * const objectLike = hasObjectShape(checker, targetType);
24
- * ```
25
- */
26
- function hasObjectShape(checker, targetType) {
27
- return (checker.getPropertiesOfType(targetType).length > 0 ||
28
- checker.getSignaturesOfType(targetType, SignatureKind.Call).length > 0 ||
29
- checker.getSignaturesOfType(targetType, SignatureKind.Construct).length > 0);
30
- }
31
- /**
32
- * Checks whether a TypeScript symbol flag is present without using bitwise syntax.
33
- * @param flags Symbol flag bitset to inspect.
34
- * @param flag Specific flag to test.
35
- * @returns True when the flag is present in the bitset.
36
- * @example
37
- * ```typescript
38
- * const hasOptionalFlag = hasSymbolFlag(SymbolFlags.Optional, SymbolFlags.Optional);
39
- * ```
40
- */
41
- function hasSymbolFlag(flags, flag) {
42
- return Math.trunc(flags / flag) % 2 === 1;
43
- }
44
- /**
45
- * Determines whether a symbol represents an optional object property.
46
- * @param propertySymbol Property symbol being checked.
47
- * @returns True when a declaration marks the property as optional.
48
- * @example
49
- * ```typescript
50
- * const optional = isOptionalSymbol(propertySymbol);
51
- * ```
52
- */
53
- function isOptionalSymbol(propertySymbol) {
54
- const flags = typeof propertySymbol.getFlags === "function"
55
- ? propertySymbol.getFlags()
56
- : (propertySymbol.flags ?? 0);
57
- if (hasSymbolFlag(flags, SymbolFlags.Optional)) {
58
- return true;
59
- }
60
- const declarations = propertySymbol.getDeclarations() ?? [];
61
- return declarations.some((declaration) => {
62
- if (isParameter(declaration) ||
63
- isPropertyDeclaration(declaration) ||
64
- isPropertySignature(declaration) ||
65
- isMethodDeclaration(declaration) ||
66
- isMethodSignature(declaration)) {
67
- return declaration.questionToken !== void 0;
68
- }
69
- return false;
70
- });
71
- }
72
- /**
73
- * Determines whether the object literal still needs an outer cast.
74
- * @param context Data used to decide whether the full object needs casting.
75
- * @returns True when the full object still needs casting.
76
- * @example
77
- * ```typescript
78
- * const needsOuterCast = isOuterCastRequired(context);
79
- * ```
80
- */
81
- function isOuterCastRequired(context) {
82
- const { checker, propertyNames, targetType } = context;
83
- if (checker.getSignaturesOfType(targetType, SignatureKind.Call).length > 0) {
84
- return true;
85
- }
86
- if (checker.getSignaturesOfType(targetType, SignatureKind.Construct).length > 0) {
87
- return true;
88
- }
89
- return checker
90
- .getPropertiesOfType(targetType)
91
- .some((propertySymbol) => !isOptionalSymbol(propertySymbol) &&
92
- !propertyNames.has(propertySymbol.getName()));
93
- }
94
- /**
95
- * Narrows a target type to the object-like type the fixer can reason about.
96
- * @param checker TypeScript type checker instance.
97
- * @param targetType Candidate target type.
98
- * @returns Object-like type when the target can be normalized safely.
99
- * @example
100
- * ```typescript
101
- * const normalizedType = normalizeObjectLikeType(checker, targetType);
102
- * ```
103
- */
104
- function normalizeObjectLikeType(checker, targetType) {
105
- if (targetType === void 0) {
106
- return void 0;
107
- }
108
- const resolvedType = checker.getAwaitedType(targetType);
109
- if (resolvedType === void 0) {
110
- return void 0;
111
- }
112
- const directObjectLikeType = [resolvedType].find((type) => hasObjectShape(checker, type));
113
- return (directObjectLikeType ??
114
- (resolvedType.isUnion()
115
- ? getSingleUnionObjectLikeType(checker, resolvedType)
116
- : void 0));
117
- }
118
- /**
119
- * Resolves the factory function's returned object type from its call signatures.
120
- * @param checker TypeScript type checker instance.
121
- * @param factoryParameterType Type of the factory callback parameter.
122
- * @returns Normalized object-like return type when one is available.
123
- * @example
124
- * ```typescript
125
- * const returnType = resolveFactoryReturnType(checker, factoryParameterType);
126
- * ```
127
- */
128
- function resolveFactoryReturnType(checker, factoryParameterType) {
129
- for (const factorySignature of checker.getSignaturesOfType(factoryParameterType, SignatureKind.Call)) {
130
- const normalizedReturnType = normalizeObjectLikeType(checker, checker.getReturnTypeOfSignature(factorySignature));
131
- if (normalizedReturnType !== void 0) {
132
- return normalizedReturnType;
133
- }
134
- }
135
- return void 0;
136
- }
137
- export { isOuterCastRequired, normalizeObjectLikeType, resolveFactoryReturnType, };
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zaGFwZS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL3ByZWZlci12aXRlc3QtaW5jcmVtZW50YWwtY2FzdHMvdHlwZS1zaGFwZS1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixXQUFXLEdBQ1osTUFBTSxZQUFZLENBQUM7QUFhcEI7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FDbkMsT0FBdUIsRUFDdkIsU0FBdUI7SUFFdkIsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN0RCxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUM5QixDQUFDO0lBRUYsT0FBTyxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBdUIsRUFBRSxVQUFtQjtJQUNsRSxPQUFPLENBQ0wsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3RFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBYSxFQUFFLElBQWlCO0lBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLGNBQXlCO0lBQ2pELE1BQU0sS0FBSyxHQUNULE9BQU8sY0FBYyxDQUFDLFFBQVEsS0FBSyxVQUFVO1FBQzNDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1FBQzNCLENBQUMsQ0FBQyxDQUFFLGNBQTBDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRS9ELElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMvQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRTVELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ3ZDLElBQ0UsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUN4QixxQkFBcUIsQ0FBQyxXQUFXLENBQUM7WUFDbEMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ2hDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUNoQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsRUFDOUIsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsbUJBQW1CLENBQUMsT0FBeUI7SUFDcEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXZELElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQ0UsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0UsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sT0FBTztTQUNYLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztTQUMvQixJQUFJLENBQ0gsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNqQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztRQUNqQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQy9DLENBQUM7QUFDTixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDOUIsT0FBdUIsRUFDdkIsVUFBK0I7SUFFL0IsSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhELElBQUksWUFBWSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3hELGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQzlCLENBQUM7SUFFRixPQUFPLENBQ0wsb0JBQW9CO1FBQ3BCLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUNyQixDQUFDLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztZQUNyRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDWixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsd0JBQXdCLENBQy9CLE9BQXVCLEVBQ3ZCLG9CQUE2QjtJQUU3QixLQUFLLE1BQU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUN4RCxvQkFBb0IsRUFDcEIsYUFBYSxDQUFDLElBQUksQ0FDbkIsRUFBRSxDQUFDO1FBQ0YsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FDbEQsT0FBTyxFQUNQLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNuRCxDQUFDO1FBRUYsSUFBSSxvQkFBb0IsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcclxuICBpc01ldGhvZFNpZ25hdHVyZSxcclxuICBpc1BhcmFtZXRlcixcclxuICBpc1Byb3BlcnR5RGVjbGFyYXRpb24sXHJcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcclxuICBTaWduYXR1cmVLaW5kLFxyXG4gIFN5bWJvbEZsYWdzLFxyXG59IGZyb20gXCJ0eXBlc2NyaXB0XCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IE91dGVyQ2FzdENvbnRleHQgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuLyoqIE1pbmltYWwgc3ltYm9sLWZsYWcgc2hhcGUgdXNlZCBieSB1bml0LXRlc3QgZG91Ymxlcy4gKi9cclxuaW50ZXJmYWNlIFN5bWJvbFdpdGhPcHRpb25hbEZsYWdzIHtcclxuICAvKiogT3B0aW9uYWwgbnVtZXJpYyBmbGFnIGJpdHNldCBzdXBwbGllZCBieSB0ZXN0IGRvdWJsZXMuICovXHJcbiAgZmxhZ3M/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBPcHRpb25hbCBnZXR0ZXIgdXNlZCBieSByZWFsIFR5cGVTY3JpcHQgc3ltYm9scy4gKi9cclxuICBnZXRGbGFncz86ICgpID0+IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNlbGVjdHMgYSBzaW5nbGUgb2JqZWN0LWxpa2UgYnJhbmNoIGZyb20gYSB1bmlvbiB3aGVuIG9uZSBleGlzdHMuXHJcbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIGluc3RhbmNlLlxyXG4gKiBAcGFyYW0gdW5pb25UeXBlIFVuaW9uIHR5cGUgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMgVGhlIHNpbmdsZSBvYmplY3QtbGlrZSBicmFuY2ggd2hlbiB0aGUgdW5pb24gaXMgdW5hbWJpZ3VvdXMuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgYnJhbmNoID0gZ2V0U2luZ2xlVW5pb25PYmplY3RMaWtlVHlwZShjaGVja2VyLCB1bmlvblR5cGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFNpbmdsZVVuaW9uT2JqZWN0TGlrZVR5cGUoXHJcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXHJcbiAgdW5pb25UeXBlOiB0cy5VbmlvblR5cGUsXHJcbik6IHRzLlR5cGUgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IG9iamVjdExpa2VUeXBlcyA9IHVuaW9uVHlwZS50eXBlcy5maWx0ZXIoKHR5cGUpID0+XHJcbiAgICBoYXNPYmplY3RTaGFwZShjaGVja2VyLCB0eXBlKSxcclxuICApO1xyXG5cclxuICByZXR1cm4gb2JqZWN0TGlrZVR5cGVzLmxlbmd0aCA9PT0gMSA/IG9iamVjdExpa2VUeXBlc1swXSA6IHZvaWQgMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIERldGVjdHMgd2hldGhlciBhIFR5cGVTY3JpcHQgdHlwZSBoYXMgYW4gb2JqZWN0LWxpa2Ugc3VyZmFjZS5cclxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB0YXJnZXRUeXBlIENhbmRpZGF0ZSB0YXJnZXQgdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB0eXBlIGV4cG9zZXMgcHJvcGVydGllcyBvciBjYWxsYWJsZSBzaWduYXR1cmVzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IG9iamVjdExpa2UgPSBoYXNPYmplY3RTaGFwZShjaGVja2VyLCB0YXJnZXRUeXBlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNPYmplY3RTaGFwZShjaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgdGFyZ2V0VHlwZTogdHMuVHlwZSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBjaGVja2VyLmdldFByb3BlcnRpZXNPZlR5cGUodGFyZ2V0VHlwZSkubGVuZ3RoID4gMCB8fFxyXG4gICAgY2hlY2tlci5nZXRTaWduYXR1cmVzT2ZUeXBlKHRhcmdldFR5cGUsIFNpZ25hdHVyZUtpbmQuQ2FsbCkubGVuZ3RoID4gMCB8fFxyXG4gICAgY2hlY2tlci5nZXRTaWduYXR1cmVzT2ZUeXBlKHRhcmdldFR5cGUsIFNpZ25hdHVyZUtpbmQuQ29uc3RydWN0KS5sZW5ndGggPiAwXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIGEgVHlwZVNjcmlwdCBzeW1ib2wgZmxhZyBpcyBwcmVzZW50IHdpdGhvdXQgdXNpbmcgYml0d2lzZSBzeW50YXguXHJcbiAqIEBwYXJhbSBmbGFncyBTeW1ib2wgZmxhZyBiaXRzZXQgdG8gaW5zcGVjdC5cclxuICogQHBhcmFtIGZsYWcgU3BlY2lmaWMgZmxhZyB0byB0ZXN0LlxyXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGZsYWcgaXMgcHJlc2VudCBpbiB0aGUgYml0c2V0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGhhc09wdGlvbmFsRmxhZyA9IGhhc1N5bWJvbEZsYWcoU3ltYm9sRmxhZ3MuT3B0aW9uYWwsIFN5bWJvbEZsYWdzLk9wdGlvbmFsKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNTeW1ib2xGbGFnKGZsYWdzOiBudW1iZXIsIGZsYWc6IFN5bWJvbEZsYWdzKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIE1hdGgudHJ1bmMoZmxhZ3MgLyBmbGFnKSAlIDIgPT09IDE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzeW1ib2wgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBvYmplY3QgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSBwcm9wZXJ0eVN5bWJvbCBQcm9wZXJ0eSBzeW1ib2wgYmVpbmcgY2hlY2tlZC5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIGEgZGVjbGFyYXRpb24gbWFya3MgdGhlIHByb3BlcnR5IGFzIG9wdGlvbmFsLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IG9wdGlvbmFsID0gaXNPcHRpb25hbFN5bWJvbChwcm9wZXJ0eVN5bWJvbCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNPcHRpb25hbFN5bWJvbChwcm9wZXJ0eVN5bWJvbDogdHMuU3ltYm9sKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgZmxhZ3MgPVxyXG4gICAgdHlwZW9mIHByb3BlcnR5U3ltYm9sLmdldEZsYWdzID09PSBcImZ1bmN0aW9uXCJcclxuICAgICAgPyBwcm9wZXJ0eVN5bWJvbC5nZXRGbGFncygpXHJcbiAgICAgIDogKChwcm9wZXJ0eVN5bWJvbCBhcyBTeW1ib2xXaXRoT3B0aW9uYWxGbGFncykuZmxhZ3MgPz8gMCk7XHJcblxyXG4gIGlmIChoYXNTeW1ib2xGbGFnKGZsYWdzLCBTeW1ib2xGbGFncy5PcHRpb25hbCkpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZGVjbGFyYXRpb25zID0gcHJvcGVydHlTeW1ib2wuZ2V0RGVjbGFyYXRpb25zKCkgPz8gW107XHJcblxyXG4gIHJldHVybiBkZWNsYXJhdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IHtcclxuICAgIGlmIChcclxuICAgICAgaXNQYXJhbWV0ZXIoZGVjbGFyYXRpb24pIHx8XHJcbiAgICAgIGlzUHJvcGVydHlEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHxcclxuICAgICAgaXNQcm9wZXJ0eVNpZ25hdHVyZShkZWNsYXJhdGlvbikgfHxcclxuICAgICAgaXNNZXRob2REZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHxcclxuICAgICAgaXNNZXRob2RTaWduYXR1cmUoZGVjbGFyYXRpb24pXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLnF1ZXN0aW9uVG9rZW4gIT09IHZvaWQgMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG9iamVjdCBsaXRlcmFsIHN0aWxsIG5lZWRzIGFuIG91dGVyIGNhc3QuXHJcbiAqIEBwYXJhbSBjb250ZXh0IERhdGEgdXNlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgZnVsbCBvYmplY3QgbmVlZHMgY2FzdGluZy5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBmdWxsIG9iamVjdCBzdGlsbCBuZWVkcyBjYXN0aW5nLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IG5lZWRzT3V0ZXJDYXN0ID0gaXNPdXRlckNhc3RSZXF1aXJlZChjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc091dGVyQ2FzdFJlcXVpcmVkKGNvbnRleHQ6IE91dGVyQ2FzdENvbnRleHQpOiBib29sZWFuIHtcclxuICBjb25zdCB7IGNoZWNrZXIsIHByb3BlcnR5TmFtZXMsIHRhcmdldFR5cGUgfSA9IGNvbnRleHQ7XHJcblxyXG4gIGlmIChjaGVja2VyLmdldFNpZ25hdHVyZXNPZlR5cGUodGFyZ2V0VHlwZSwgU2lnbmF0dXJlS2luZC5DYWxsKS5sZW5ndGggPiAwKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIGNoZWNrZXIuZ2V0U2lnbmF0dXJlc09mVHlwZSh0YXJnZXRUeXBlLCBTaWduYXR1cmVLaW5kLkNvbnN0cnVjdCkubGVuZ3RoID4gMFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2hlY2tlclxyXG4gICAgLmdldFByb3BlcnRpZXNPZlR5cGUodGFyZ2V0VHlwZSlcclxuICAgIC5zb21lKFxyXG4gICAgICAocHJvcGVydHlTeW1ib2wpID0+XHJcbiAgICAgICAgIWlzT3B0aW9uYWxTeW1ib2wocHJvcGVydHlTeW1ib2wpICYmXHJcbiAgICAgICAgIXByb3BlcnR5TmFtZXMuaGFzKHByb3BlcnR5U3ltYm9sLmdldE5hbWUoKSksXHJcbiAgICApO1xyXG59XHJcblxyXG4vKipcclxuICogTmFycm93cyBhIHRhcmdldCB0eXBlIHRvIHRoZSBvYmplY3QtbGlrZSB0eXBlIHRoZSBmaXhlciBjYW4gcmVhc29uIGFib3V0LlxyXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlciBpbnN0YW5jZS5cclxuICogQHBhcmFtIHRhcmdldFR5cGUgQ2FuZGlkYXRlIHRhcmdldCB0eXBlLlxyXG4gKiBAcmV0dXJucyBPYmplY3QtbGlrZSB0eXBlIHdoZW4gdGhlIHRhcmdldCBjYW4gYmUgbm9ybWFsaXplZCBzYWZlbHkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3Qgbm9ybWFsaXplZFR5cGUgPSBub3JtYWxpemVPYmplY3RMaWtlVHlwZShjaGVja2VyLCB0YXJnZXRUeXBlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBub3JtYWxpemVPYmplY3RMaWtlVHlwZShcclxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcclxuICB0YXJnZXRUeXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkLFxyXG4pOiB0cy5UeXBlIHwgdW5kZWZpbmVkIHtcclxuICBpZiAodGFyZ2V0VHlwZSA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVzb2x2ZWRUeXBlID0gY2hlY2tlci5nZXRBd2FpdGVkVHlwZSh0YXJnZXRUeXBlKTtcclxuXHJcbiAgaWYgKHJlc29sdmVkVHlwZSA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZGlyZWN0T2JqZWN0TGlrZVR5cGUgPSBbcmVzb2x2ZWRUeXBlXS5maW5kKCh0eXBlKSA9PlxyXG4gICAgaGFzT2JqZWN0U2hhcGUoY2hlY2tlciwgdHlwZSksXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGRpcmVjdE9iamVjdExpa2VUeXBlID8/XHJcbiAgICAocmVzb2x2ZWRUeXBlLmlzVW5pb24oKVxyXG4gICAgICA/IGdldFNpbmdsZVVuaW9uT2JqZWN0TGlrZVR5cGUoY2hlY2tlciwgcmVzb2x2ZWRUeXBlKVxyXG4gICAgICA6IHZvaWQgMClcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZXMgdGhlIGZhY3RvcnkgZnVuY3Rpb24ncyByZXR1cm5lZCBvYmplY3QgdHlwZSBmcm9tIGl0cyBjYWxsIHNpZ25hdHVyZXMuXHJcbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIGluc3RhbmNlLlxyXG4gKiBAcGFyYW0gZmFjdG9yeVBhcmFtZXRlclR5cGUgVHlwZSBvZiB0aGUgZmFjdG9yeSBjYWxsYmFjayBwYXJhbWV0ZXIuXHJcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgb2JqZWN0LWxpa2UgcmV0dXJuIHR5cGUgd2hlbiBvbmUgaXMgYXZhaWxhYmxlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IHJldHVyblR5cGUgPSByZXNvbHZlRmFjdG9yeVJldHVyblR5cGUoY2hlY2tlciwgZmFjdG9yeVBhcmFtZXRlclR5cGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVGYWN0b3J5UmV0dXJuVHlwZShcclxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcclxuICBmYWN0b3J5UGFyYW1ldGVyVHlwZTogdHMuVHlwZSxcclxuKTogdHMuVHlwZSB8IHVuZGVmaW5lZCB7XHJcbiAgZm9yIChjb25zdCBmYWN0b3J5U2lnbmF0dXJlIG9mIGNoZWNrZXIuZ2V0U2lnbmF0dXJlc09mVHlwZShcclxuICAgIGZhY3RvcnlQYXJhbWV0ZXJUeXBlLFxyXG4gICAgU2lnbmF0dXJlS2luZC5DYWxsLFxyXG4gICkpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXR1cm5UeXBlID0gbm9ybWFsaXplT2JqZWN0TGlrZVR5cGUoXHJcbiAgICAgIGNoZWNrZXIsXHJcbiAgICAgIGNoZWNrZXIuZ2V0UmV0dXJuVHlwZU9mU2lnbmF0dXJlKGZhY3RvcnlTaWduYXR1cmUpLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAobm9ybWFsaXplZFJldHVyblR5cGUgIT09IHZvaWQgMCkge1xyXG4gICAgICByZXR1cm4gbm9ybWFsaXplZFJldHVyblR5cGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdm9pZCAwO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIGlzT3V0ZXJDYXN0UmVxdWlyZWQsXHJcbiAgbm9ybWFsaXplT2JqZWN0TGlrZVR5cGUsXHJcbiAgcmVzb2x2ZUZhY3RvcnlSZXR1cm5UeXBlLFxyXG59O1xyXG4iXX0=