eslint-plugin-typefest 1.0.1

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 (578) hide show
  1. package/CHANGELOG.md +1814 -0
  2. package/LICENSE +21 -0
  3. package/README.md +282 -0
  4. package/dist/_internal/array-like-expression.d.ts +67 -0
  5. package/dist/_internal/array-like-expression.d.ts.map +1 -0
  6. package/dist/_internal/array-like-expression.js +179 -0
  7. package/dist/_internal/array-like-expression.js.map +1 -0
  8. package/dist/_internal/array-method-call-rule.d.ts +34 -0
  9. package/dist/_internal/array-method-call-rule.d.ts.map +1 -0
  10. package/dist/_internal/array-method-call-rule.js +49 -0
  11. package/dist/_internal/array-method-call-rule.js.map +1 -0
  12. package/dist/_internal/ast-node.d.ts +23 -0
  13. package/dist/_internal/ast-node.d.ts.map +1 -0
  14. package/dist/_internal/ast-node.js +38 -0
  15. package/dist/_internal/ast-node.js.map +1 -0
  16. package/dist/_internal/bounded-cache.d.ts +42 -0
  17. package/dist/_internal/bounded-cache.d.ts.map +1 -0
  18. package/dist/_internal/bounded-cache.js +57 -0
  19. package/dist/_internal/bounded-cache.js.map +1 -0
  20. package/dist/_internal/constrained-type-at-location.d.ts +31 -0
  21. package/dist/_internal/constrained-type-at-location.d.ts.map +1 -0
  22. package/dist/_internal/constrained-type-at-location.js +61 -0
  23. package/dist/_internal/constrained-type-at-location.js.map +1 -0
  24. package/dist/_internal/cycle-safe-linked-search.d.ts +48 -0
  25. package/dist/_internal/cycle-safe-linked-search.d.ts.map +1 -0
  26. package/dist/_internal/cycle-safe-linked-search.js +70 -0
  27. package/dist/_internal/cycle-safe-linked-search.js.map +1 -0
  28. package/dist/_internal/expression-boolean-memoizer.d.ts +17 -0
  29. package/dist/_internal/expression-boolean-memoizer.d.ts.map +1 -0
  30. package/dist/_internal/expression-boolean-memoizer.js +23 -0
  31. package/dist/_internal/expression-boolean-memoizer.js.map +1 -0
  32. package/dist/_internal/filter-callback.d.ts +56 -0
  33. package/dist/_internal/filter-callback.d.ts.map +1 -0
  34. package/dist/_internal/filter-callback.js +100 -0
  35. package/dist/_internal/filter-callback.js.map +1 -0
  36. package/dist/_internal/global-identifier-member-call.d.ts +23 -0
  37. package/dist/_internal/global-identifier-member-call.d.ts.map +1 -0
  38. package/dist/_internal/global-identifier-member-call.js +25 -0
  39. package/dist/_internal/global-identifier-member-call.js.map +1 -0
  40. package/dist/_internal/global-member-call-rule.d.ts +36 -0
  41. package/dist/_internal/global-member-call-rule.d.ts.map +1 -0
  42. package/dist/_internal/global-member-call-rule.js +52 -0
  43. package/dist/_internal/global-member-call-rule.js.map +1 -0
  44. package/dist/_internal/import-analysis.d.ts +45 -0
  45. package/dist/_internal/import-analysis.d.ts.map +1 -0
  46. package/dist/_internal/import-analysis.js +113 -0
  47. package/dist/_internal/import-analysis.js.map +1 -0
  48. package/dist/_internal/import-aware-fixes.d.ts +31 -0
  49. package/dist/_internal/import-aware-fixes.d.ts.map +1 -0
  50. package/dist/_internal/import-aware-fixes.js +38 -0
  51. package/dist/_internal/import-aware-fixes.js.map +1 -0
  52. package/dist/_internal/import-fix-coordinator.d.ts +43 -0
  53. package/dist/_internal/import-fix-coordinator.d.ts.map +1 -0
  54. package/dist/_internal/import-fix-coordinator.js +71 -0
  55. package/dist/_internal/import-fix-coordinator.js.map +1 -0
  56. package/dist/_internal/import-insertion.d.ts +27 -0
  57. package/dist/_internal/import-insertion.d.ts.map +1 -0
  58. package/dist/_internal/import-insertion.js +295 -0
  59. package/dist/_internal/import-insertion.js.map +1 -0
  60. package/dist/_internal/imported-type-aliases.d.ts +140 -0
  61. package/dist/_internal/imported-type-aliases.d.ts.map +1 -0
  62. package/dist/_internal/imported-type-aliases.js +316 -0
  63. package/dist/_internal/imported-type-aliases.js.map +1 -0
  64. package/dist/_internal/imported-value-symbols.d.ts +157 -0
  65. package/dist/_internal/imported-value-symbols.d.ts.map +1 -0
  66. package/dist/_internal/imported-value-symbols.js +478 -0
  67. package/dist/_internal/imported-value-symbols.js.map +1 -0
  68. package/dist/_internal/member-call.d.ts +53 -0
  69. package/dist/_internal/member-call.d.ts.map +1 -0
  70. package/dist/_internal/member-call.js +48 -0
  71. package/dist/_internal/member-call.js.map +1 -0
  72. package/dist/_internal/module-source.d.ts +11 -0
  73. package/dist/_internal/module-source.d.ts.map +1 -0
  74. package/dist/_internal/module-source.js +11 -0
  75. package/dist/_internal/module-source.js.map +1 -0
  76. package/dist/_internal/normalize-expression-text.d.ts +26 -0
  77. package/dist/_internal/normalize-expression-text.d.ts.map +1 -0
  78. package/dist/_internal/normalize-expression-text.js +182 -0
  79. package/dist/_internal/normalize-expression-text.js.map +1 -0
  80. package/dist/_internal/nullish-comparison.d.ts +43 -0
  81. package/dist/_internal/nullish-comparison.d.ts.map +1 -0
  82. package/dist/_internal/nullish-comparison.js +147 -0
  83. package/dist/_internal/nullish-comparison.js.map +1 -0
  84. package/dist/_internal/plugin-settings.d.ts +32 -0
  85. package/dist/_internal/plugin-settings.d.ts.map +1 -0
  86. package/dist/_internal/plugin-settings.js +118 -0
  87. package/dist/_internal/plugin-settings.js.map +1 -0
  88. package/dist/_internal/report-adapter.d.ts +25 -0
  89. package/dist/_internal/report-adapter.d.ts.map +1 -0
  90. package/dist/_internal/report-adapter.js +36 -0
  91. package/dist/_internal/report-adapter.js.map +1 -0
  92. package/dist/_internal/rule-catalog.d.ts +51 -0
  93. package/dist/_internal/rule-catalog.d.ts.map +1 -0
  94. package/dist/_internal/rule-catalog.js +162 -0
  95. package/dist/_internal/rule-catalog.js.map +1 -0
  96. package/dist/_internal/rule-docs-metadata.d.ts +37 -0
  97. package/dist/_internal/rule-docs-metadata.d.ts.map +1 -0
  98. package/dist/_internal/rule-docs-metadata.js +192 -0
  99. package/dist/_internal/rule-docs-metadata.js.map +1 -0
  100. package/dist/_internal/rule-docs-url.d.ts +15 -0
  101. package/dist/_internal/rule-docs-url.d.ts.map +1 -0
  102. package/dist/_internal/rule-docs-url.js +15 -0
  103. package/dist/_internal/rule-docs-url.js.map +1 -0
  104. package/dist/_internal/rule-reporting.d.ts +71 -0
  105. package/dist/_internal/rule-reporting.d.ts.map +1 -0
  106. package/dist/_internal/rule-reporting.js +89 -0
  107. package/dist/_internal/rule-reporting.js.map +1 -0
  108. package/dist/_internal/rules-registry.d.ts +14 -0
  109. package/dist/_internal/rules-registry.d.ts.map +1 -0
  110. package/dist/_internal/rules-registry.js +165 -0
  111. package/dist/_internal/rules-registry.js.map +1 -0
  112. package/dist/_internal/safe-type-operation.d.ts +89 -0
  113. package/dist/_internal/safe-type-operation.d.ts.map +1 -0
  114. package/dist/_internal/safe-type-operation.js +147 -0
  115. package/dist/_internal/safe-type-operation.js.map +1 -0
  116. package/dist/_internal/scope-resolution.d.ts +20 -0
  117. package/dist/_internal/scope-resolution.d.ts.map +1 -0
  118. package/dist/_internal/scope-resolution.js +21 -0
  119. package/dist/_internal/scope-resolution.js.map +1 -0
  120. package/dist/_internal/scope-variable.d.ts +17 -0
  121. package/dist/_internal/scope-variable.d.ts.map +1 -0
  122. package/dist/_internal/scope-variable.js +30 -0
  123. package/dist/_internal/scope-variable.js.map +1 -0
  124. package/dist/_internal/set-membership.d.ts +6 -0
  125. package/dist/_internal/set-membership.d.ts.map +1 -0
  126. package/dist/_internal/set-membership.js +11 -0
  127. package/dist/_internal/set-membership.js.map +1 -0
  128. package/dist/_internal/text-character.d.ts +18 -0
  129. package/dist/_internal/text-character.d.ts.map +1 -0
  130. package/dist/_internal/text-character.js +69 -0
  131. package/dist/_internal/text-character.js.map +1 -0
  132. package/dist/_internal/throw-consequent.d.ts +22 -0
  133. package/dist/_internal/throw-consequent.d.ts.map +1 -0
  134. package/dist/_internal/throw-consequent.js +48 -0
  135. package/dist/_internal/throw-consequent.js.map +1 -0
  136. package/dist/_internal/throw-type-error.d.ts +19 -0
  137. package/dist/_internal/throw-type-error.d.ts.map +1 -0
  138. package/dist/_internal/throw-type-error.js +24 -0
  139. package/dist/_internal/throw-type-error.js.map +1 -0
  140. package/dist/_internal/type-checker-compat.d.ts +80 -0
  141. package/dist/_internal/type-checker-compat.d.ts.map +1 -0
  142. package/dist/_internal/type-checker-compat.js +104 -0
  143. package/dist/_internal/type-checker-compat.js.map +1 -0
  144. package/dist/_internal/type-predicate-autofix-safety.d.ts +20 -0
  145. package/dist/_internal/type-predicate-autofix-safety.d.ts.map +1 -0
  146. package/dist/_internal/type-predicate-autofix-safety.js +58 -0
  147. package/dist/_internal/type-predicate-autofix-safety.js.map +1 -0
  148. package/dist/_internal/type-reference-node.d.ts +19 -0
  149. package/dist/_internal/type-reference-node.d.ts.map +1 -0
  150. package/dist/_internal/type-reference-node.js +14 -0
  151. package/dist/_internal/type-reference-node.js.map +1 -0
  152. package/dist/_internal/typed-member-call-rule.d.ts +35 -0
  153. package/dist/_internal/typed-member-call-rule.d.ts.map +1 -0
  154. package/dist/_internal/typed-member-call-rule.js +50 -0
  155. package/dist/_internal/typed-member-call-rule.js.map +1 -0
  156. package/dist/_internal/typed-path-telemetry.d.ts +58 -0
  157. package/dist/_internal/typed-path-telemetry.d.ts.map +1 -0
  158. package/dist/_internal/typed-path-telemetry.js +114 -0
  159. package/dist/_internal/typed-path-telemetry.js.map +1 -0
  160. package/dist/_internal/typed-rule.d.ts +142 -0
  161. package/dist/_internal/typed-rule.d.ts.map +1 -0
  162. package/dist/_internal/typed-rule.js +197 -0
  163. package/dist/_internal/typed-rule.js.map +1 -0
  164. package/dist/_internal/typefest-config-references.d.ts +45 -0
  165. package/dist/_internal/typefest-config-references.d.ts.map +1 -0
  166. package/dist/_internal/typefest-config-references.js +98 -0
  167. package/dist/_internal/typefest-config-references.js.map +1 -0
  168. package/dist/_internal/typescript-eslint-node-autofix.d.ts +32 -0
  169. package/dist/_internal/typescript-eslint-node-autofix.d.ts.map +1 -0
  170. package/dist/_internal/typescript-eslint-node-autofix.js +495 -0
  171. package/dist/_internal/typescript-eslint-node-autofix.js.map +1 -0
  172. package/dist/_internal/value-rewrite-autofix-safety.d.ts +33 -0
  173. package/dist/_internal/value-rewrite-autofix-safety.d.ts.map +1 -0
  174. package/dist/_internal/value-rewrite-autofix-safety.js +103 -0
  175. package/dist/_internal/value-rewrite-autofix-safety.js.map +1 -0
  176. package/dist/plugin.cjs +9718 -0
  177. package/dist/plugin.cjs.map +7 -0
  178. package/dist/plugin.d.cts +76 -0
  179. package/dist/plugin.d.ts +76 -0
  180. package/dist/plugin.d.ts.map +1 -0
  181. package/dist/plugin.js +206 -0
  182. package/dist/plugin.js.map +1 -0
  183. package/dist/rules/prefer-ts-extras-array-at.d.ts +13 -0
  184. package/dist/rules/prefer-ts-extras-array-at.d.ts.map +1 -0
  185. package/dist/rules/prefer-ts-extras-array-at.js +66 -0
  186. package/dist/rules/prefer-ts-extras-array-at.js.map +1 -0
  187. package/dist/rules/prefer-ts-extras-array-concat.d.ts +13 -0
  188. package/dist/rules/prefer-ts-extras-array-concat.d.ts.map +1 -0
  189. package/dist/rules/prefer-ts-extras-array-concat.js +66 -0
  190. package/dist/rules/prefer-ts-extras-array-concat.js.map +1 -0
  191. package/dist/rules/prefer-ts-extras-array-find-last-index.d.ts +13 -0
  192. package/dist/rules/prefer-ts-extras-array-find-last-index.d.ts.map +1 -0
  193. package/dist/rules/prefer-ts-extras-array-find-last-index.js +63 -0
  194. package/dist/rules/prefer-ts-extras-array-find-last-index.js.map +1 -0
  195. package/dist/rules/prefer-ts-extras-array-find-last.d.ts +13 -0
  196. package/dist/rules/prefer-ts-extras-array-find-last.d.ts.map +1 -0
  197. package/dist/rules/prefer-ts-extras-array-find-last.js +66 -0
  198. package/dist/rules/prefer-ts-extras-array-find-last.js.map +1 -0
  199. package/dist/rules/prefer-ts-extras-array-find.d.ts +13 -0
  200. package/dist/rules/prefer-ts-extras-array-find.d.ts.map +1 -0
  201. package/dist/rules/prefer-ts-extras-array-find.js +63 -0
  202. package/dist/rules/prefer-ts-extras-array-find.js.map +1 -0
  203. package/dist/rules/prefer-ts-extras-array-first.d.ts +13 -0
  204. package/dist/rules/prefer-ts-extras-array-first.d.ts.map +1 -0
  205. package/dist/rules/prefer-ts-extras-array-first.js +107 -0
  206. package/dist/rules/prefer-ts-extras-array-first.js.map +1 -0
  207. package/dist/rules/prefer-ts-extras-array-includes.d.ts +13 -0
  208. package/dist/rules/prefer-ts-extras-array-includes.d.ts.map +1 -0
  209. package/dist/rules/prefer-ts-extras-array-includes.js +89 -0
  210. package/dist/rules/prefer-ts-extras-array-includes.js.map +1 -0
  211. package/dist/rules/prefer-ts-extras-array-join.d.ts +13 -0
  212. package/dist/rules/prefer-ts-extras-array-join.d.ts.map +1 -0
  213. package/dist/rules/prefer-ts-extras-array-join.js +66 -0
  214. package/dist/rules/prefer-ts-extras-array-join.js.map +1 -0
  215. package/dist/rules/prefer-ts-extras-array-last.d.ts +8 -0
  216. package/dist/rules/prefer-ts-extras-array-last.d.ts.map +1 -0
  217. package/dist/rules/prefer-ts-extras-array-last.js +132 -0
  218. package/dist/rules/prefer-ts-extras-array-last.js.map +1 -0
  219. package/dist/rules/prefer-ts-extras-as-writable.d.ts +13 -0
  220. package/dist/rules/prefer-ts-extras-as-writable.d.ts.map +1 -0
  221. package/dist/rules/prefer-ts-extras-as-writable.js +110 -0
  222. package/dist/rules/prefer-ts-extras-as-writable.js.map +1 -0
  223. package/dist/rules/prefer-ts-extras-assert-defined.d.ts +13 -0
  224. package/dist/rules/prefer-ts-extras-assert-defined.d.ts.map +1 -0
  225. package/dist/rules/prefer-ts-extras-assert-defined.js +182 -0
  226. package/dist/rules/prefer-ts-extras-assert-defined.js.map +1 -0
  227. package/dist/rules/prefer-ts-extras-assert-error.d.ts +13 -0
  228. package/dist/rules/prefer-ts-extras-assert-error.d.ts.map +1 -0
  229. package/dist/rules/prefer-ts-extras-assert-error.js +152 -0
  230. package/dist/rules/prefer-ts-extras-assert-error.js.map +1 -0
  231. package/dist/rules/prefer-ts-extras-assert-present.d.ts +13 -0
  232. package/dist/rules/prefer-ts-extras-assert-present.d.ts.map +1 -0
  233. package/dist/rules/prefer-ts-extras-assert-present.js +266 -0
  234. package/dist/rules/prefer-ts-extras-assert-present.js.map +1 -0
  235. package/dist/rules/prefer-ts-extras-is-defined-filter.d.ts +13 -0
  236. package/dist/rules/prefer-ts-extras-is-defined-filter.d.ts.map +1 -0
  237. package/dist/rules/prefer-ts-extras-is-defined-filter.js +90 -0
  238. package/dist/rules/prefer-ts-extras-is-defined-filter.js.map +1 -0
  239. package/dist/rules/prefer-ts-extras-is-defined.d.ts +13 -0
  240. package/dist/rules/prefer-ts-extras-is-defined.d.ts.map +1 -0
  241. package/dist/rules/prefer-ts-extras-is-defined.js +179 -0
  242. package/dist/rules/prefer-ts-extras-is-defined.js.map +1 -0
  243. package/dist/rules/prefer-ts-extras-is-empty.d.ts +13 -0
  244. package/dist/rules/prefer-ts-extras-is-empty.d.ts.map +1 -0
  245. package/dist/rules/prefer-ts-extras-is-empty.js +116 -0
  246. package/dist/rules/prefer-ts-extras-is-empty.js.map +1 -0
  247. package/dist/rules/prefer-ts-extras-is-equal-type.d.ts +13 -0
  248. package/dist/rules/prefer-ts-extras-is-equal-type.d.ts.map +1 -0
  249. package/dist/rules/prefer-ts-extras-is-equal-type.js +138 -0
  250. package/dist/rules/prefer-ts-extras-is-equal-type.js.map +1 -0
  251. package/dist/rules/prefer-ts-extras-is-finite.d.ts +13 -0
  252. package/dist/rules/prefer-ts-extras-is-finite.d.ts.map +1 -0
  253. package/dist/rules/prefer-ts-extras-is-finite.js +61 -0
  254. package/dist/rules/prefer-ts-extras-is-finite.js.map +1 -0
  255. package/dist/rules/prefer-ts-extras-is-infinite.d.ts +8 -0
  256. package/dist/rules/prefer-ts-extras-is-infinite.d.ts.map +1 -0
  257. package/dist/rules/prefer-ts-extras-is-infinite.js +178 -0
  258. package/dist/rules/prefer-ts-extras-is-infinite.js.map +1 -0
  259. package/dist/rules/prefer-ts-extras-is-integer.d.ts +13 -0
  260. package/dist/rules/prefer-ts-extras-is-integer.d.ts.map +1 -0
  261. package/dist/rules/prefer-ts-extras-is-integer.js +61 -0
  262. package/dist/rules/prefer-ts-extras-is-integer.js.map +1 -0
  263. package/dist/rules/prefer-ts-extras-is-present-filter.d.ts +13 -0
  264. package/dist/rules/prefer-ts-extras-is-present-filter.d.ts.map +1 -0
  265. package/dist/rules/prefer-ts-extras-is-present-filter.js +216 -0
  266. package/dist/rules/prefer-ts-extras-is-present-filter.js.map +1 -0
  267. package/dist/rules/prefer-ts-extras-is-present.d.ts +13 -0
  268. package/dist/rules/prefer-ts-extras-is-present.d.ts.map +1 -0
  269. package/dist/rules/prefer-ts-extras-is-present.js +217 -0
  270. package/dist/rules/prefer-ts-extras-is-present.js.map +1 -0
  271. package/dist/rules/prefer-ts-extras-is-safe-integer.d.ts +13 -0
  272. package/dist/rules/prefer-ts-extras-is-safe-integer.d.ts.map +1 -0
  273. package/dist/rules/prefer-ts-extras-is-safe-integer.js +61 -0
  274. package/dist/rules/prefer-ts-extras-is-safe-integer.js.map +1 -0
  275. package/dist/rules/prefer-ts-extras-key-in.d.ts +13 -0
  276. package/dist/rules/prefer-ts-extras-key-in.d.ts.map +1 -0
  277. package/dist/rules/prefer-ts-extras-key-in.js +124 -0
  278. package/dist/rules/prefer-ts-extras-key-in.js.map +1 -0
  279. package/dist/rules/prefer-ts-extras-not.d.ts +13 -0
  280. package/dist/rules/prefer-ts-extras-not.d.ts.map +1 -0
  281. package/dist/rules/prefer-ts-extras-not.js +136 -0
  282. package/dist/rules/prefer-ts-extras-not.js.map +1 -0
  283. package/dist/rules/prefer-ts-extras-object-entries.d.ts +13 -0
  284. package/dist/rules/prefer-ts-extras-object-entries.d.ts.map +1 -0
  285. package/dist/rules/prefer-ts-extras-object-entries.js +59 -0
  286. package/dist/rules/prefer-ts-extras-object-entries.js.map +1 -0
  287. package/dist/rules/prefer-ts-extras-object-from-entries.d.ts +13 -0
  288. package/dist/rules/prefer-ts-extras-object-from-entries.d.ts.map +1 -0
  289. package/dist/rules/prefer-ts-extras-object-from-entries.js +59 -0
  290. package/dist/rules/prefer-ts-extras-object-from-entries.js.map +1 -0
  291. package/dist/rules/prefer-ts-extras-object-has-in.d.ts +13 -0
  292. package/dist/rules/prefer-ts-extras-object-has-in.d.ts.map +1 -0
  293. package/dist/rules/prefer-ts-extras-object-has-in.js +79 -0
  294. package/dist/rules/prefer-ts-extras-object-has-in.js.map +1 -0
  295. package/dist/rules/prefer-ts-extras-object-has-own.d.ts +13 -0
  296. package/dist/rules/prefer-ts-extras-object-has-own.d.ts.map +1 -0
  297. package/dist/rules/prefer-ts-extras-object-has-own.js +82 -0
  298. package/dist/rules/prefer-ts-extras-object-has-own.js.map +1 -0
  299. package/dist/rules/prefer-ts-extras-object-keys.d.ts +13 -0
  300. package/dist/rules/prefer-ts-extras-object-keys.d.ts.map +1 -0
  301. package/dist/rules/prefer-ts-extras-object-keys.js +59 -0
  302. package/dist/rules/prefer-ts-extras-object-keys.js.map +1 -0
  303. package/dist/rules/prefer-ts-extras-object-values.d.ts +13 -0
  304. package/dist/rules/prefer-ts-extras-object-values.d.ts.map +1 -0
  305. package/dist/rules/prefer-ts-extras-object-values.js +59 -0
  306. package/dist/rules/prefer-ts-extras-object-values.js.map +1 -0
  307. package/dist/rules/prefer-ts-extras-safe-cast-to.d.ts +13 -0
  308. package/dist/rules/prefer-ts-extras-safe-cast-to.d.ts.map +1 -0
  309. package/dist/rules/prefer-ts-extras-safe-cast-to.js +159 -0
  310. package/dist/rules/prefer-ts-extras-safe-cast-to.js.map +1 -0
  311. package/dist/rules/prefer-ts-extras-set-has.d.ts +13 -0
  312. package/dist/rules/prefer-ts-extras-set-has.d.ts.map +1 -0
  313. package/dist/rules/prefer-ts-extras-set-has.js +304 -0
  314. package/dist/rules/prefer-ts-extras-set-has.js.map +1 -0
  315. package/dist/rules/prefer-ts-extras-string-split.d.ts +13 -0
  316. package/dist/rules/prefer-ts-extras-string-split.d.ts.map +1 -0
  317. package/dist/rules/prefer-ts-extras-string-split.js +166 -0
  318. package/dist/rules/prefer-ts-extras-string-split.js.map +1 -0
  319. package/dist/rules/prefer-type-fest-abstract-constructor.d.ts +13 -0
  320. package/dist/rules/prefer-type-fest-abstract-constructor.d.ts.map +1 -0
  321. package/dist/rules/prefer-type-fest-abstract-constructor.js +65 -0
  322. package/dist/rules/prefer-type-fest-abstract-constructor.js.map +1 -0
  323. package/dist/rules/prefer-type-fest-arrayable.d.ts +13 -0
  324. package/dist/rules/prefer-type-fest-arrayable.d.ts.map +1 -0
  325. package/dist/rules/prefer-type-fest-arrayable.js +123 -0
  326. package/dist/rules/prefer-type-fest-arrayable.js.map +1 -0
  327. package/dist/rules/prefer-type-fest-async-return-type.d.ts +13 -0
  328. package/dist/rules/prefer-type-fest-async-return-type.d.ts.map +1 -0
  329. package/dist/rules/prefer-type-fest-async-return-type.js +92 -0
  330. package/dist/rules/prefer-type-fest-async-return-type.js.map +1 -0
  331. package/dist/rules/prefer-type-fest-conditional-pick.d.ts +13 -0
  332. package/dist/rules/prefer-type-fest-conditional-pick.d.ts.map +1 -0
  333. package/dist/rules/prefer-type-fest-conditional-pick.js +74 -0
  334. package/dist/rules/prefer-type-fest-conditional-pick.js.map +1 -0
  335. package/dist/rules/prefer-type-fest-constructor.d.ts +13 -0
  336. package/dist/rules/prefer-type-fest-constructor.d.ts.map +1 -0
  337. package/dist/rules/prefer-type-fest-constructor.js +67 -0
  338. package/dist/rules/prefer-type-fest-constructor.js.map +1 -0
  339. package/dist/rules/prefer-type-fest-except.d.ts +13 -0
  340. package/dist/rules/prefer-type-fest-except.d.ts.map +1 -0
  341. package/dist/rules/prefer-type-fest-except.js +105 -0
  342. package/dist/rules/prefer-type-fest-except.js.map +1 -0
  343. package/dist/rules/prefer-type-fest-if.d.ts +13 -0
  344. package/dist/rules/prefer-type-fest-if.d.ts.map +1 -0
  345. package/dist/rules/prefer-type-fest-if.js +79 -0
  346. package/dist/rules/prefer-type-fest-if.js.map +1 -0
  347. package/dist/rules/prefer-type-fest-iterable-element.d.ts +13 -0
  348. package/dist/rules/prefer-type-fest-iterable-element.d.ts.map +1 -0
  349. package/dist/rules/prefer-type-fest-iterable-element.js +76 -0
  350. package/dist/rules/prefer-type-fest-iterable-element.js.map +1 -0
  351. package/dist/rules/prefer-type-fest-json-array.d.ts +13 -0
  352. package/dist/rules/prefer-type-fest-json-array.d.ts.map +1 -0
  353. package/dist/rules/prefer-type-fest-json-array.js +164 -0
  354. package/dist/rules/prefer-type-fest-json-array.js.map +1 -0
  355. package/dist/rules/prefer-type-fest-json-object.d.ts +13 -0
  356. package/dist/rules/prefer-type-fest-json-object.d.ts.map +1 -0
  357. package/dist/rules/prefer-type-fest-json-object.js +102 -0
  358. package/dist/rules/prefer-type-fest-json-object.js.map +1 -0
  359. package/dist/rules/prefer-type-fest-json-primitive.d.ts +13 -0
  360. package/dist/rules/prefer-type-fest-json-primitive.d.ts.map +1 -0
  361. package/dist/rules/prefer-type-fest-json-primitive.js +112 -0
  362. package/dist/rules/prefer-type-fest-json-primitive.js.map +1 -0
  363. package/dist/rules/prefer-type-fest-json-value.d.ts +13 -0
  364. package/dist/rules/prefer-type-fest-json-value.d.ts.map +1 -0
  365. package/dist/rules/prefer-type-fest-json-value.js +109 -0
  366. package/dist/rules/prefer-type-fest-json-value.js.map +1 -0
  367. package/dist/rules/prefer-type-fest-keys-of-union.d.ts +13 -0
  368. package/dist/rules/prefer-type-fest-keys-of-union.d.ts.map +1 -0
  369. package/dist/rules/prefer-type-fest-keys-of-union.js +74 -0
  370. package/dist/rules/prefer-type-fest-keys-of-union.js.map +1 -0
  371. package/dist/rules/prefer-type-fest-literal-union.d.ts +13 -0
  372. package/dist/rules/prefer-type-fest-literal-union.d.ts.map +1 -0
  373. package/dist/rules/prefer-type-fest-literal-union.js +181 -0
  374. package/dist/rules/prefer-type-fest-literal-union.js.map +1 -0
  375. package/dist/rules/prefer-type-fest-merge-exclusive.d.ts +13 -0
  376. package/dist/rules/prefer-type-fest-merge-exclusive.d.ts.map +1 -0
  377. package/dist/rules/prefer-type-fest-merge-exclusive.js +63 -0
  378. package/dist/rules/prefer-type-fest-merge-exclusive.js.map +1 -0
  379. package/dist/rules/prefer-type-fest-non-empty-tuple.d.ts +13 -0
  380. package/dist/rules/prefer-type-fest-non-empty-tuple.d.ts.map +1 -0
  381. package/dist/rules/prefer-type-fest-non-empty-tuple.js +133 -0
  382. package/dist/rules/prefer-type-fest-non-empty-tuple.js.map +1 -0
  383. package/dist/rules/prefer-type-fest-omit-index-signature.d.ts +13 -0
  384. package/dist/rules/prefer-type-fest-omit-index-signature.d.ts.map +1 -0
  385. package/dist/rules/prefer-type-fest-omit-index-signature.js +74 -0
  386. package/dist/rules/prefer-type-fest-omit-index-signature.js.map +1 -0
  387. package/dist/rules/prefer-type-fest-partial-deep.d.ts +13 -0
  388. package/dist/rules/prefer-type-fest-partial-deep.d.ts.map +1 -0
  389. package/dist/rules/prefer-type-fest-partial-deep.js +63 -0
  390. package/dist/rules/prefer-type-fest-partial-deep.js.map +1 -0
  391. package/dist/rules/prefer-type-fest-primitive.d.ts +13 -0
  392. package/dist/rules/prefer-type-fest-primitive.d.ts.map +1 -0
  393. package/dist/rules/prefer-type-fest-primitive.js +102 -0
  394. package/dist/rules/prefer-type-fest-primitive.js.map +1 -0
  395. package/dist/rules/prefer-type-fest-promisable.d.ts +13 -0
  396. package/dist/rules/prefer-type-fest-promisable.d.ts.map +1 -0
  397. package/dist/rules/prefer-type-fest-promisable.js +167 -0
  398. package/dist/rules/prefer-type-fest-promisable.js.map +1 -0
  399. package/dist/rules/prefer-type-fest-readonly-deep.d.ts +13 -0
  400. package/dist/rules/prefer-type-fest-readonly-deep.d.ts.map +1 -0
  401. package/dist/rules/prefer-type-fest-readonly-deep.js +63 -0
  402. package/dist/rules/prefer-type-fest-readonly-deep.js.map +1 -0
  403. package/dist/rules/prefer-type-fest-require-all-or-none.d.ts +13 -0
  404. package/dist/rules/prefer-type-fest-require-all-or-none.d.ts.map +1 -0
  405. package/dist/rules/prefer-type-fest-require-all-or-none.js +75 -0
  406. package/dist/rules/prefer-type-fest-require-all-or-none.js.map +1 -0
  407. package/dist/rules/prefer-type-fest-require-at-least-one.d.ts +13 -0
  408. package/dist/rules/prefer-type-fest-require-at-least-one.d.ts.map +1 -0
  409. package/dist/rules/prefer-type-fest-require-at-least-one.js +74 -0
  410. package/dist/rules/prefer-type-fest-require-at-least-one.js.map +1 -0
  411. package/dist/rules/prefer-type-fest-require-exactly-one.d.ts +13 -0
  412. package/dist/rules/prefer-type-fest-require-exactly-one.d.ts.map +1 -0
  413. package/dist/rules/prefer-type-fest-require-exactly-one.js +102 -0
  414. package/dist/rules/prefer-type-fest-require-exactly-one.js.map +1 -0
  415. package/dist/rules/prefer-type-fest-require-one-or-none.d.ts +13 -0
  416. package/dist/rules/prefer-type-fest-require-one-or-none.d.ts.map +1 -0
  417. package/dist/rules/prefer-type-fest-require-one-or-none.js +74 -0
  418. package/dist/rules/prefer-type-fest-require-one-or-none.js.map +1 -0
  419. package/dist/rules/prefer-type-fest-required-deep.d.ts +13 -0
  420. package/dist/rules/prefer-type-fest-required-deep.d.ts.map +1 -0
  421. package/dist/rules/prefer-type-fest-required-deep.js +63 -0
  422. package/dist/rules/prefer-type-fest-required-deep.js.map +1 -0
  423. package/dist/rules/prefer-type-fest-schema.d.ts +13 -0
  424. package/dist/rules/prefer-type-fest-schema.d.ts.map +1 -0
  425. package/dist/rules/prefer-type-fest-schema.js +74 -0
  426. package/dist/rules/prefer-type-fest-schema.js.map +1 -0
  427. package/dist/rules/prefer-type-fest-set-non-nullable.d.ts +13 -0
  428. package/dist/rules/prefer-type-fest-set-non-nullable.d.ts.map +1 -0
  429. package/dist/rules/prefer-type-fest-set-non-nullable.js +74 -0
  430. package/dist/rules/prefer-type-fest-set-non-nullable.js.map +1 -0
  431. package/dist/rules/prefer-type-fest-set-optional.d.ts +13 -0
  432. package/dist/rules/prefer-type-fest-set-optional.d.ts.map +1 -0
  433. package/dist/rules/prefer-type-fest-set-optional.js +74 -0
  434. package/dist/rules/prefer-type-fest-set-optional.js.map +1 -0
  435. package/dist/rules/prefer-type-fest-set-readonly.d.ts +13 -0
  436. package/dist/rules/prefer-type-fest-set-readonly.d.ts.map +1 -0
  437. package/dist/rules/prefer-type-fest-set-readonly.js +74 -0
  438. package/dist/rules/prefer-type-fest-set-readonly.js.map +1 -0
  439. package/dist/rules/prefer-type-fest-set-required.d.ts +13 -0
  440. package/dist/rules/prefer-type-fest-set-required.d.ts.map +1 -0
  441. package/dist/rules/prefer-type-fest-set-required.js +74 -0
  442. package/dist/rules/prefer-type-fest-set-required.js.map +1 -0
  443. package/dist/rules/prefer-type-fest-simplify.d.ts +13 -0
  444. package/dist/rules/prefer-type-fest-simplify.d.ts.map +1 -0
  445. package/dist/rules/prefer-type-fest-simplify.js +75 -0
  446. package/dist/rules/prefer-type-fest-simplify.js.map +1 -0
  447. package/dist/rules/prefer-type-fest-tagged-brands.d.ts +13 -0
  448. package/dist/rules/prefer-type-fest-tagged-brands.d.ts.map +1 -0
  449. package/dist/rules/prefer-type-fest-tagged-brands.js +174 -0
  450. package/dist/rules/prefer-type-fest-tagged-brands.js.map +1 -0
  451. package/dist/rules/prefer-type-fest-tuple-of.d.ts +14 -0
  452. package/dist/rules/prefer-type-fest-tuple-of.d.ts.map +1 -0
  453. package/dist/rules/prefer-type-fest-tuple-of.js +132 -0
  454. package/dist/rules/prefer-type-fest-tuple-of.js.map +1 -0
  455. package/dist/rules/prefer-type-fest-unknown-array.d.ts +13 -0
  456. package/dist/rules/prefer-type-fest-unknown-array.d.ts.map +1 -0
  457. package/dist/rules/prefer-type-fest-unknown-array.js +111 -0
  458. package/dist/rules/prefer-type-fest-unknown-array.js.map +1 -0
  459. package/dist/rules/prefer-type-fest-unknown-map.d.ts +13 -0
  460. package/dist/rules/prefer-type-fest-unknown-map.d.ts.map +1 -0
  461. package/dist/rules/prefer-type-fest-unknown-map.js +82 -0
  462. package/dist/rules/prefer-type-fest-unknown-map.js.map +1 -0
  463. package/dist/rules/prefer-type-fest-unknown-record.d.ts +13 -0
  464. package/dist/rules/prefer-type-fest-unknown-record.d.ts.map +1 -0
  465. package/dist/rules/prefer-type-fest-unknown-record.js +77 -0
  466. package/dist/rules/prefer-type-fest-unknown-record.js.map +1 -0
  467. package/dist/rules/prefer-type-fest-unknown-set.d.ts +13 -0
  468. package/dist/rules/prefer-type-fest-unknown-set.d.ts.map +1 -0
  469. package/dist/rules/prefer-type-fest-unknown-set.js +81 -0
  470. package/dist/rules/prefer-type-fest-unknown-set.js.map +1 -0
  471. package/dist/rules/prefer-type-fest-unwrap-tagged.d.ts +13 -0
  472. package/dist/rules/prefer-type-fest-unwrap-tagged.d.ts.map +1 -0
  473. package/dist/rules/prefer-type-fest-unwrap-tagged.js +74 -0
  474. package/dist/rules/prefer-type-fest-unwrap-tagged.js.map +1 -0
  475. package/dist/rules/prefer-type-fest-value-of.d.ts +13 -0
  476. package/dist/rules/prefer-type-fest-value-of.d.ts.map +1 -0
  477. package/dist/rules/prefer-type-fest-value-of.js +74 -0
  478. package/dist/rules/prefer-type-fest-value-of.js.map +1 -0
  479. package/dist/rules/prefer-type-fest-writable-deep.d.ts +13 -0
  480. package/dist/rules/prefer-type-fest-writable-deep.d.ts.map +1 -0
  481. package/dist/rules/prefer-type-fest-writable-deep.js +64 -0
  482. package/dist/rules/prefer-type-fest-writable-deep.js.map +1 -0
  483. package/dist/rules/prefer-type-fest-writable.d.ts +13 -0
  484. package/dist/rules/prefer-type-fest-writable.d.ts.map +1 -0
  485. package/dist/rules/prefer-type-fest-writable.js +129 -0
  486. package/dist/rules/prefer-type-fest-writable.js.map +1 -0
  487. package/docs/rules/getting-started.md +74 -0
  488. package/docs/rules/guides/adoption-checklist.md +37 -0
  489. package/docs/rules/guides/preset-selection-strategy.md +87 -0
  490. package/docs/rules/guides/rollout-and-fix-safety.md +42 -0
  491. package/docs/rules/guides/snapshot-testing.md +121 -0
  492. package/docs/rules/guides/type-aware-linting-readiness.md +105 -0
  493. package/docs/rules/overview.md +49 -0
  494. package/docs/rules/prefer-ts-extras-array-at.md +132 -0
  495. package/docs/rules/prefer-ts-extras-array-concat.md +138 -0
  496. package/docs/rules/prefer-ts-extras-array-find-last-index.md +108 -0
  497. package/docs/rules/prefer-ts-extras-array-find-last.md +108 -0
  498. package/docs/rules/prefer-ts-extras-array-find.md +108 -0
  499. package/docs/rules/prefer-ts-extras-array-first.md +132 -0
  500. package/docs/rules/prefer-ts-extras-array-includes.md +135 -0
  501. package/docs/rules/prefer-ts-extras-array-join.md +132 -0
  502. package/docs/rules/prefer-ts-extras-array-last.md +132 -0
  503. package/docs/rules/prefer-ts-extras-as-writable.md +124 -0
  504. package/docs/rules/prefer-ts-extras-assert-defined.md +140 -0
  505. package/docs/rules/prefer-ts-extras-assert-error.md +147 -0
  506. package/docs/rules/prefer-ts-extras-assert-present.md +139 -0
  507. package/docs/rules/prefer-ts-extras-is-defined-filter.md +125 -0
  508. package/docs/rules/prefer-ts-extras-is-defined.md +147 -0
  509. package/docs/rules/prefer-ts-extras-is-empty.md +142 -0
  510. package/docs/rules/prefer-ts-extras-is-equal-type.md +144 -0
  511. package/docs/rules/prefer-ts-extras-is-finite.md +116 -0
  512. package/docs/rules/prefer-ts-extras-is-infinite.md +134 -0
  513. package/docs/rules/prefer-ts-extras-is-integer.md +116 -0
  514. package/docs/rules/prefer-ts-extras-is-present-filter.md +125 -0
  515. package/docs/rules/prefer-ts-extras-is-present.md +143 -0
  516. package/docs/rules/prefer-ts-extras-is-safe-integer.md +116 -0
  517. package/docs/rules/prefer-ts-extras-key-in.md +150 -0
  518. package/docs/rules/prefer-ts-extras-not.md +138 -0
  519. package/docs/rules/prefer-ts-extras-object-entries.md +130 -0
  520. package/docs/rules/prefer-ts-extras-object-from-entries.md +131 -0
  521. package/docs/rules/prefer-ts-extras-object-has-in.md +141 -0
  522. package/docs/rules/prefer-ts-extras-object-has-own.md +137 -0
  523. package/docs/rules/prefer-ts-extras-object-keys.md +127 -0
  524. package/docs/rules/prefer-ts-extras-object-values.md +128 -0
  525. package/docs/rules/prefer-ts-extras-safe-cast-to.md +130 -0
  526. package/docs/rules/prefer-ts-extras-set-has.md +203 -0
  527. package/docs/rules/prefer-ts-extras-string-split.md +133 -0
  528. package/docs/rules/prefer-type-fest-abstract-constructor.md +87 -0
  529. package/docs/rules/prefer-type-fest-arrayable.md +127 -0
  530. package/docs/rules/prefer-type-fest-async-return-type.md +117 -0
  531. package/docs/rules/prefer-type-fest-conditional-pick.md +140 -0
  532. package/docs/rules/prefer-type-fest-constructor.md +87 -0
  533. package/docs/rules/prefer-type-fest-except.md +231 -0
  534. package/docs/rules/prefer-type-fest-if.md +217 -0
  535. package/docs/rules/prefer-type-fest-iterable-element.md +170 -0
  536. package/docs/rules/prefer-type-fest-json-array.md +107 -0
  537. package/docs/rules/prefer-type-fest-json-object.md +107 -0
  538. package/docs/rules/prefer-type-fest-json-primitive.md +105 -0
  539. package/docs/rules/prefer-type-fest-json-value.md +107 -0
  540. package/docs/rules/prefer-type-fest-keys-of-union.md +139 -0
  541. package/docs/rules/prefer-type-fest-literal-union.md +118 -0
  542. package/docs/rules/prefer-type-fest-merge-exclusive.md +118 -0
  543. package/docs/rules/prefer-type-fest-non-empty-tuple.md +115 -0
  544. package/docs/rules/prefer-type-fest-omit-index-signature.md +196 -0
  545. package/docs/rules/prefer-type-fest-partial-deep.md +133 -0
  546. package/docs/rules/prefer-type-fest-primitive.md +106 -0
  547. package/docs/rules/prefer-type-fest-promisable.md +246 -0
  548. package/docs/rules/prefer-type-fest-readonly-deep.md +151 -0
  549. package/docs/rules/prefer-type-fest-require-all-or-none.md +149 -0
  550. package/docs/rules/prefer-type-fest-require-at-least-one.md +155 -0
  551. package/docs/rules/prefer-type-fest-require-exactly-one.md +240 -0
  552. package/docs/rules/prefer-type-fest-require-one-or-none.md +165 -0
  553. package/docs/rules/prefer-type-fest-required-deep.md +123 -0
  554. package/docs/rules/prefer-type-fest-schema.md +161 -0
  555. package/docs/rules/prefer-type-fest-set-non-nullable.md +145 -0
  556. package/docs/rules/prefer-type-fest-set-optional.md +133 -0
  557. package/docs/rules/prefer-type-fest-set-readonly.md +136 -0
  558. package/docs/rules/prefer-type-fest-set-required.md +140 -0
  559. package/docs/rules/prefer-type-fest-simplify.md +168 -0
  560. package/docs/rules/prefer-type-fest-tagged-brands.md +278 -0
  561. package/docs/rules/prefer-type-fest-tuple-of.md +250 -0
  562. package/docs/rules/prefer-type-fest-unknown-array.md +126 -0
  563. package/docs/rules/prefer-type-fest-unknown-map.md +123 -0
  564. package/docs/rules/prefer-type-fest-unknown-record.md +130 -0
  565. package/docs/rules/prefer-type-fest-unknown-set.md +123 -0
  566. package/docs/rules/prefer-type-fest-unwrap-tagged.md +133 -0
  567. package/docs/rules/prefer-type-fest-value-of.md +121 -0
  568. package/docs/rules/prefer-type-fest-writable-deep.md +113 -0
  569. package/docs/rules/prefer-type-fest-writable.md +139 -0
  570. package/docs/rules/presets/all.md +102 -0
  571. package/docs/rules/presets/index.md +124 -0
  572. package/docs/rules/presets/minimal.md +37 -0
  573. package/docs/rules/presets/recommended-type-checked.md +37 -0
  574. package/docs/rules/presets/recommended.md +116 -0
  575. package/docs/rules/presets/strict.md +98 -0
  576. package/docs/rules/presets/ts-extras-type-guards.md +45 -0
  577. package/docs/rules/presets/type-fest-types.md +68 -0
  578. package/package.json +574 -0
@@ -0,0 +1,100 @@
1
+ import { getParentNode } from "./ast-node.js";
2
+ import { setContainsValue } from "./set-membership.js";
3
+ /** Target method name used for callback-context detection. */
4
+ const FILTER_METHOD_NAME = "filter";
5
+ /**
6
+ * Narrows nodes to function-like callback expressions.
7
+ */
8
+ const isFunctionCallbackNode = (node) => node.type === "ArrowFunctionExpression" ||
9
+ node.type === "FunctionExpression";
10
+ /**
11
+ * Narrows call expressions to direct `.filter(...)` calls.
12
+ */
13
+ export const isFilterCallExpression = (expression) => !expression.optional &&
14
+ expression.callee.type === "MemberExpression" &&
15
+ !expression.callee.computed &&
16
+ !expression.callee.optional &&
17
+ expression.callee.property.type === "Identifier" &&
18
+ expression.callee.property.name === FILTER_METHOD_NAME;
19
+ /**
20
+ * Extract the first callback argument from a direct `.filter(...)` call.
21
+ *
22
+ * @param expression - Candidate call expression to inspect.
23
+ *
24
+ * @returns Callback expression when the call is a supported `.filter(...)`
25
+ * invocation and the first argument is an arrow/function expression;
26
+ * otherwise `null`.
27
+ */
28
+ export const getFilterCallbackFunctionArgument = (expression) => {
29
+ if (!isFilterCallExpression(expression)) {
30
+ return null;
31
+ }
32
+ const [firstArgument] = expression.arguments;
33
+ if (!firstArgument ||
34
+ (firstArgument.type !== "ArrowFunctionExpression" &&
35
+ firstArgument.type !== "FunctionExpression")) {
36
+ return null;
37
+ }
38
+ return firstArgument;
39
+ };
40
+ /**
41
+ * Extract a strict callback shape from direct `.filter(...)` calls.
42
+ *
43
+ * @param expression - Candidate call expression to inspect.
44
+ *
45
+ * @returns Structured callback match when supported; otherwise `null`.
46
+ */
47
+ export const getSingleParameterExpressionArrowFilterCallback = (expression) => {
48
+ const callback = getFilterCallbackFunctionArgument(expression);
49
+ if (callback?.type !== "ArrowFunctionExpression") {
50
+ return null;
51
+ }
52
+ if (callback.params.length !== 1) {
53
+ return null;
54
+ }
55
+ if (callback.body.type === "BlockStatement") {
56
+ return null;
57
+ }
58
+ const [parameter] = callback.params;
59
+ if (parameter?.type !== "Identifier") {
60
+ return null;
61
+ }
62
+ return {
63
+ callback: callback,
64
+ parameter,
65
+ };
66
+ };
67
+ /**
68
+ * Checks whether a node appears inside a callback passed as the first argument
69
+ * to a direct `.filter(...)` call.
70
+ *
71
+ * @param node - Node to inspect.
72
+ *
73
+ * @returns `true` when the node is inside a `.filter(...)` callback; otherwise
74
+ * `false`.
75
+ */
76
+ export const isWithinFilterCallback = (node) => {
77
+ let currentNode = node;
78
+ const visitedNodes = new Set();
79
+ while (currentNode) {
80
+ if (setContainsValue(visitedNodes, currentNode)) {
81
+ return false;
82
+ }
83
+ visitedNodes.add(currentNode);
84
+ if (isFunctionCallbackNode(currentNode)) {
85
+ const callbackParent = getParentNode(currentNode);
86
+ if (callbackParent?.type !== "CallExpression") {
87
+ currentNode = getParentNode(currentNode);
88
+ continue;
89
+ }
90
+ const [firstArgument] = callbackParent.arguments;
91
+ if (firstArgument === currentNode &&
92
+ isFilterCallExpression(callbackParent)) {
93
+ return true;
94
+ }
95
+ }
96
+ currentNode = getParentNode(currentNode);
97
+ }
98
+ return false;
99
+ };
100
+ //# sourceMappingURL=filter-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-callback.js","sourceRoot":"","sources":["../../src/_internal/filter-callback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Helpers for matching static member calls that resolve to global bindings.
4
+ */
5
+ import type { TSESLint, TSESTree } from "@typescript-eslint/utils";
6
+ import type { UnknownArray } from "type-fest";
7
+ import { type IdentifierMemberCallExpression } from "./member-call.js";
8
+ /**
9
+ * Match `GlobalName.memberName(...)` calls where `GlobalName` resolves to the
10
+ * unshadowed global binding.
11
+ *
12
+ * @param options - Rule context and candidate call details.
13
+ *
14
+ * @returns Narrowed call expression when matched against the global binding;
15
+ * otherwise `null`.
16
+ */
17
+ export declare const getGlobalIdentifierMemberCall: <MessageIds extends string, Options extends Readonly<UnknownArray>>({ context, memberName, node, objectName, }: Readonly<{
18
+ context: Readonly<TSESLint.RuleContext<MessageIds, Options>>;
19
+ memberName: string;
20
+ node: Readonly<TSESTree.CallExpression>;
21
+ objectName: string;
22
+ }>) => IdentifierMemberCallExpression | null;
23
+ //# sourceMappingURL=global-identifier-member-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-identifier-member-call.d.ts","sourceRoot":"","sources":["../../src/_internal/global-identifier-member-call.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAEH,KAAK,8BAA8B,EACtC,MAAM,kBAAkB,CAAC;AAG1B;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,GACtC,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,QAAQ,CAAC,YAAY,CAAC,EACxC,4CAKC,QAAQ,CAAC;IACR,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC,KAAG,8BAA8B,GAAG,IAkBrC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { getIdentifierMemberCall, } from "./member-call.js";
2
+ import { isGlobalIdentifierNamed } from "./typed-rule.js";
3
+ /**
4
+ * Match `GlobalName.memberName(...)` calls where `GlobalName` resolves to the
5
+ * unshadowed global binding.
6
+ *
7
+ * @param options - Rule context and candidate call details.
8
+ *
9
+ * @returns Narrowed call expression when matched against the global binding;
10
+ * otherwise `null`.
11
+ */
12
+ export const getGlobalIdentifierMemberCall = ({ context, memberName, node, objectName, }) => {
13
+ const memberCall = getIdentifierMemberCall({
14
+ memberName,
15
+ node,
16
+ objectName,
17
+ });
18
+ if (memberCall === null) {
19
+ return null;
20
+ }
21
+ return isGlobalIdentifierNamed(context, memberCall.callee.object, objectName)
22
+ ? memberCall
23
+ : null;
24
+ };
25
+ //# sourceMappingURL=global-identifier-member-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-identifier-member-call.js","sourceRoot":"","sources":["../../src/_internal/global-identifier-member-call.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,uBAAuB,GAE1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAG3C,EACE,OAAO,EACP,UAAU,EACV,IAAI,EACJ,UAAU,GAMZ,EAAyC,EAAE;IACzC,MAAM,UAAU,GAAG,uBAAuB,CAAC;QACvC,UAAU;QACV,IAAI;QACJ,UAAU;KACb,CAAC,CAAC;IAEH,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,uBAAuB,CAC1B,OAAO,EACP,UAAU,CAAC,MAAM,CAAC,MAAM,EACxB,UAAU,CACb;QACG,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared reporting helper for ts-extras global static member-call replacement
4
+ * rules.
5
+ */
6
+ import type { TSESLint, TSESTree } from "@typescript-eslint/utils";
7
+ import type { UnknownArray } from "type-fest";
8
+ import { type ImportedValueAliasMap } from "./imported-value-symbols.js";
9
+ /** Direct named value imports collection type from shared import helper. */
10
+ type DirectNamedValueImports = ImportedValueAliasMap;
11
+ /** Typed rule context shape for global-member call rules. */
12
+ type GlobalMemberRuleContext<MessageId extends string> = Readonly<TSESLint.RuleContext<MessageId, Readonly<UnknownArray>>>;
13
+ /**
14
+ * Match `GlobalName.memberName(...)` calls that resolve to unshadowed globals
15
+ * and report a standardized ts-extras replacement.
16
+ */
17
+ export declare const reportTsExtrasGlobalMemberCall: <MessageId extends string>({ canAutofix, context, importedName, imports, memberName, messageId, minimumArgumentCount, node, objectName, reportSuggestion, suggestionMessageId, }: Readonly<{
18
+ canAutofix?: (node: Readonly<TSESTree.CallExpression>) => boolean;
19
+ context: GlobalMemberRuleContext<MessageId>;
20
+ importedName: string;
21
+ imports: DirectNamedValueImports;
22
+ memberName: string;
23
+ messageId: MessageId;
24
+ minimumArgumentCount?: number;
25
+ node: Readonly<TSESTree.CallExpression>;
26
+ objectName: string;
27
+ reportSuggestion?: (input: Readonly<{
28
+ fix: TSESLint.ReportFixFunction;
29
+ messageId: MessageId;
30
+ node: Readonly<TSESTree.CallExpression>;
31
+ suggestionMessageId: MessageId;
32
+ }>) => void;
33
+ suggestionMessageId?: MessageId;
34
+ }>) => void;
35
+ export {};
36
+ //# sourceMappingURL=global-member-call-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-member-call-rule.d.ts","sourceRoot":"","sources":["../../src/_internal/global-member-call-rule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EAEH,KAAK,qBAAqB,EAC7B,MAAM,6BAA6B,CAAC;AAOrC,4EAA4E;AAC5E,KAAK,uBAAuB,GAAG,qBAAqB,CAAC;AAErD,6DAA6D;AAC7D,KAAK,uBAAuB,CAAC,SAAS,SAAS,MAAM,IAAI,QAAQ,CAC7D,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAC1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GAAI,SAAS,SAAS,MAAM,EAAE,uJAYtE,QAAQ,CAAC;IACR,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC;IAClE,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,uBAAuB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,CACf,KAAK,EAAE,QAAQ,CAAC;QACZ,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC;QAChC,SAAS,EAAE,SAAS,CAAC;QACrB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACxC,mBAAmB,EAAE,SAAS,CAAC;KAClC,CAAC,KACD,IAAI,CAAC;IACV,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACnC,CAAC,KAAG,IAmDJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { getGlobalIdentifierMemberCall } from "./global-identifier-member-call.js";
2
+ import { createSafeValueReferenceReplacementFix, } from "./imported-value-symbols.js";
3
+ import { TS_EXTRAS_MODULE_SOURCE } from "./module-source.js";
4
+ import { reportResolvedAutofixOrSuggestionOutcome, resolveAutofixOrSuggestionOutcome, } from "./rule-reporting.js";
5
+ /**
6
+ * Match `GlobalName.memberName(...)` calls that resolve to unshadowed globals
7
+ * and report a standardized ts-extras replacement.
8
+ */
9
+ export const reportTsExtrasGlobalMemberCall = ({ canAutofix, context, importedName, imports, memberName, messageId, minimumArgumentCount, node, objectName, reportSuggestion, suggestionMessageId, }) => {
10
+ const globalMemberCall = getGlobalIdentifierMemberCall({
11
+ context,
12
+ memberName,
13
+ node,
14
+ objectName,
15
+ });
16
+ if (globalMemberCall === null) {
17
+ return;
18
+ }
19
+ if (typeof minimumArgumentCount === "number" &&
20
+ node.arguments.length < minimumArgumentCount) {
21
+ return;
22
+ }
23
+ const shouldAutofix = canAutofix?.(node) ?? true;
24
+ const fix = createSafeValueReferenceReplacementFix({
25
+ context,
26
+ importedName,
27
+ imports,
28
+ sourceModuleName: TS_EXTRAS_MODULE_SOURCE,
29
+ targetNode: globalMemberCall.callee,
30
+ });
31
+ const outcome = resolveAutofixOrSuggestionOutcome({
32
+ canAutofix: shouldAutofix,
33
+ fix,
34
+ });
35
+ if (outcome.kind === "suggestion" && reportSuggestion !== undefined) {
36
+ reportSuggestion({
37
+ fix: outcome.fix,
38
+ messageId,
39
+ node,
40
+ suggestionMessageId: suggestionMessageId ?? messageId,
41
+ });
42
+ return;
43
+ }
44
+ reportResolvedAutofixOrSuggestionOutcome({
45
+ context,
46
+ messageId,
47
+ node,
48
+ outcome,
49
+ suggestionMessageId: suggestionMessageId ?? messageId,
50
+ });
51
+ };
52
+ //# sourceMappingURL=global-member-call-rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-member-call-rule.js","sourceRoot":"","sources":["../../src/_internal/global-member-call-rule.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EACH,sCAAsC,GAEzC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACH,wCAAwC,EACxC,iCAAiC,GACpC,MAAM,qBAAqB,CAAC;AAU7B;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAA2B,EACrE,UAAU,EACV,OAAO,EACP,YAAY,EACZ,OAAO,EACP,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,IAAI,EACJ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,GAoBrB,EAAQ,EAAE;IACR,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;QACnD,OAAO;QACP,UAAU;QACV,IAAI;QACJ,UAAU;KACb,CAAC,CAAC;IAEH,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,IACI,OAAO,oBAAoB,KAAK,QAAQ;QACxC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,oBAAoB,EAC9C,CAAC;QACC,OAAO;IACX,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACjD,MAAM,GAAG,GAAG,sCAAsC,CAAC;QAC/C,OAAO;QACP,YAAY;QACZ,OAAO;QACP,gBAAgB,EAAE,uBAAuB;QACzC,UAAU,EAAE,gBAAgB,CAAC,MAAM;KACtC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,iCAAiC,CAAC;QAC9C,UAAU,EAAE,aAAa;QACzB,GAAG;KACN,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAClE,gBAAgB,CAAC;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS;YACT,IAAI;YACJ,mBAAmB,EAAE,mBAAmB,IAAI,SAAS;SACxD,CAAC,CAAC;QAEH,OAAO;IACX,CAAC;IAED,wCAAwC,CAAC;QACrC,OAAO;QACP,SAAS;QACT,IAAI;QACJ,OAAO;QACP,mBAAmB,EAAE,mBAAmB,IAAI,SAAS;KACxD,CAAC,CAAC;AACP,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared import-declaration analysis utilities for rule internals.
4
+ */
5
+ import type { TSESLint, TSESTree } from "@typescript-eslint/utils";
6
+ /**
7
+ * Grouped mapping from imported symbol name to all local alias names.
8
+ */
9
+ export type NamedImportLocalNamesByImportedName = ReadonlyMap<string, ReadonlySet<string>>;
10
+ /**
11
+ * Flattened named-import binding metadata.
12
+ */
13
+ export type NamedImportSpecifierBinding = Readonly<{
14
+ declaration: Readonly<TSESTree.ImportDeclaration>;
15
+ importedName: string;
16
+ localName: string;
17
+ specifier: Readonly<TSESTree.ImportSpecifier>;
18
+ }>;
19
+ /**
20
+ * Check whether an import declaration points at a specific source module.
21
+ */
22
+ export declare const isImportDeclarationFromSource: (declaration: Readonly<TSESTree.ImportDeclaration>, sourceModuleName: string) => boolean;
23
+ /**
24
+ * Collect named import-specifier bindings from one module source.
25
+ */
26
+ export declare const collectNamedImportSpecifierBindingsFromSource: ({ allowTypeImportDeclaration, allowTypeImportSpecifier, sourceCode, sourceModuleName, }: Readonly<{
27
+ allowTypeImportDeclaration?: boolean;
28
+ allowTypeImportSpecifier?: boolean;
29
+ sourceCode: Readonly<TSESLint.SourceCode>;
30
+ sourceModuleName?: string;
31
+ }>) => readonly NamedImportSpecifierBinding[];
32
+ /**
33
+ * Collect named import local names grouped by imported symbol name.
34
+ */
35
+ export declare const collectNamedImportLocalNamesByImportedNameFromSource: ({ allowTypeImportDeclaration, allowTypeImportSpecifier, sourceCode, sourceModuleName, }: Readonly<{
36
+ allowTypeImportDeclaration?: boolean;
37
+ allowTypeImportSpecifier?: boolean;
38
+ sourceCode: Readonly<TSESLint.SourceCode>;
39
+ sourceModuleName?: string;
40
+ }>) => NamedImportLocalNamesByImportedName;
41
+ /**
42
+ * Collect namespace-import local names from one module source.
43
+ */
44
+ export declare const collectNamespaceImportLocalNamesFromSourceModule: (sourceCode: Readonly<TSESLint.SourceCode>, sourceModuleName: string) => ReadonlySet<string>;
45
+ //# sourceMappingURL=import-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-analysis.d.ts","sourceRoot":"","sources":["../../src/_internal/import-analysis.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAInE;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,WAAW,CACzD,MAAM,EACN,WAAW,CAAC,MAAM,CAAC,CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IAC/C,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;CACjD,CAAC,CAAC;AAoHH;;GAEG;AACH,eAAO,MAAM,6BAA6B,GACtC,aAAa,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EACjD,kBAAkB,MAAM,KACzB,OAAwD,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,6CAA6C,GAAI,yFAK3D,QAAQ,CAAC;IACR,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC,KAAG,SAAS,2BAA2B,EAiCxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oDAAoD,GAAI,yFAKlE,QAAQ,CAAC;IACR,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC,KAAG,mCAgCJ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gDAAgD,GACzD,YAAY,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EACzC,kBAAkB,MAAM,KACzB,WAAW,CAAC,MAAM,CAQpB,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { isDefined } from "ts-extras";
2
+ /**
3
+ * SourceCode-scoped cache for parsed import declarations.
4
+ */
5
+ const sourceImportAnalysisCache = new WeakMap();
6
+ /**
7
+ * Build and cache one import-analysis snapshot for the provided SourceCode.
8
+ */
9
+ const getSourceImportAnalysis = (sourceCode) => {
10
+ const existingAnalysis = sourceImportAnalysisCache.get(sourceCode);
11
+ if (isDefined(existingAnalysis)) {
12
+ return existingAnalysis;
13
+ }
14
+ const namedImportSpecifierBindings = [];
15
+ const mutableNamespaceLocalNamesBySourceModule = new Map();
16
+ for (const statement of sourceCode.ast.body) {
17
+ if (statement.type !== "ImportDeclaration") {
18
+ continue;
19
+ }
20
+ const sourceModuleName = typeof statement.source.value === "string"
21
+ ? statement.source.value
22
+ : undefined;
23
+ for (const specifier of statement.specifiers) {
24
+ if (specifier.type === "ImportSpecifier" &&
25
+ specifier.imported.type === "Identifier" &&
26
+ specifier.local.type === "Identifier") {
27
+ namedImportSpecifierBindings.push(Object.freeze({
28
+ declaration: statement,
29
+ importedName: specifier.imported.name,
30
+ localName: specifier.local.name,
31
+ specifier,
32
+ }));
33
+ continue;
34
+ }
35
+ if (specifier.type === "ImportNamespaceSpecifier" &&
36
+ isDefined(sourceModuleName)) {
37
+ const existingLocalNames = mutableNamespaceLocalNamesBySourceModule.get(sourceModuleName);
38
+ if (!isDefined(existingLocalNames)) {
39
+ mutableNamespaceLocalNamesBySourceModule.set(sourceModuleName, new Set([specifier.local.name]));
40
+ continue;
41
+ }
42
+ existingLocalNames.add(specifier.local.name);
43
+ }
44
+ }
45
+ }
46
+ const namespaceImportLocalNamesBySourceModule = new Map();
47
+ for (const [sourceModuleName, localNames,] of mutableNamespaceLocalNamesBySourceModule) {
48
+ namespaceImportLocalNamesBySourceModule.set(sourceModuleName, Object.freeze(new Set(localNames)));
49
+ }
50
+ const analysis = Object.freeze({
51
+ namedImportSpecifierBindings: Object.freeze(namedImportSpecifierBindings),
52
+ namespaceImportLocalNamesBySourceModule,
53
+ });
54
+ sourceImportAnalysisCache.set(sourceCode, analysis);
55
+ return analysis;
56
+ };
57
+ /**
58
+ * Check whether an import declaration points at a specific source module.
59
+ */
60
+ export const isImportDeclarationFromSource = (declaration, sourceModuleName) => declaration.source.value === sourceModuleName;
61
+ /**
62
+ * Collect named import-specifier bindings from one module source.
63
+ */
64
+ export const collectNamedImportSpecifierBindingsFromSource = ({ allowTypeImportDeclaration = true, allowTypeImportSpecifier = true, sourceCode, sourceModuleName, }) => {
65
+ const sourceImportAnalysis = getSourceImportAnalysis(sourceCode);
66
+ const bindings = [];
67
+ for (const binding of sourceImportAnalysis.namedImportSpecifierBindings) {
68
+ if (isDefined(sourceModuleName) &&
69
+ !isImportDeclarationFromSource(binding.declaration, sourceModuleName)) {
70
+ continue;
71
+ }
72
+ if (!allowTypeImportDeclaration &&
73
+ binding.declaration.importKind === "type") {
74
+ continue;
75
+ }
76
+ if (!allowTypeImportSpecifier &&
77
+ binding.specifier.importKind === "type") {
78
+ continue;
79
+ }
80
+ bindings.push(binding);
81
+ }
82
+ return bindings;
83
+ };
84
+ /**
85
+ * Collect named import local names grouped by imported symbol name.
86
+ */
87
+ export const collectNamedImportLocalNamesByImportedNameFromSource = ({ allowTypeImportDeclaration = true, allowTypeImportSpecifier = true, sourceCode, sourceModuleName, }) => {
88
+ const localNamesByImportedName = new Map();
89
+ const bindingCollectionOptions = {
90
+ allowTypeImportDeclaration,
91
+ allowTypeImportSpecifier,
92
+ sourceCode,
93
+ ...(isDefined(sourceModuleName) ? { sourceModuleName } : {}),
94
+ };
95
+ for (const binding of collectNamedImportSpecifierBindingsFromSource(bindingCollectionOptions)) {
96
+ const existingLocalNames = localNamesByImportedName.get(binding.importedName);
97
+ if (!isDefined(existingLocalNames)) {
98
+ localNamesByImportedName.set(binding.importedName, new Set([binding.localName]));
99
+ continue;
100
+ }
101
+ existingLocalNames.add(binding.localName);
102
+ }
103
+ return localNamesByImportedName;
104
+ };
105
+ /**
106
+ * Collect namespace-import local names from one module source.
107
+ */
108
+ export const collectNamespaceImportLocalNamesFromSourceModule = (sourceCode, sourceModuleName) => {
109
+ const sourceImportAnalysis = getSourceImportAnalysis(sourceCode);
110
+ const localNames = sourceImportAnalysis.namespaceImportLocalNamesBySourceModule.get(sourceModuleName);
111
+ return isDefined(localNames) ? new Set(localNames) : new Set();
112
+ };
113
+ //# sourceMappingURL=import-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-analysis.js","sourceRoot":"","sources":["../../src/_internal/import-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared composition helpers for import-aware report fix callbacks.
4
+ */
5
+ import type { TSESLint } from "@typescript-eslint/utils";
6
+ import type { ImportFixIntent, ImportInsertionDecision } from "./import-fix-coordinator.js";
7
+ /**
8
+ * Controls whether an autofix that must insert an import should also emit its
9
+ * replacement in the same report callback.
10
+ */
11
+ export type AutofixImportInsertionStrategy = "combined" | "separate-pass";
12
+ /**
13
+ * Build replacement/import fixer arrays according to an import-insertion
14
+ * coordination decision.
15
+ *
16
+ * @param options - Replacement and optional import-fix factories with the
17
+ * import-insertion decision for this report callback.
18
+ *
19
+ * @returns Ordered fix array (`import`, then `replacement`) when applicable;
20
+ * otherwise `null` when the fix must be suppressed.
21
+ */
22
+ export declare const createImportAwareFixes: ({ autofixImportInsertionStrategy, createImportFix, createReplacementFix, fixer, importInsertionDecision, reportFixIntent, requiresImportInsertion, }: Readonly<{
23
+ autofixImportInsertionStrategy?: AutofixImportInsertionStrategy | undefined;
24
+ createImportFix: (fixer: Readonly<TSESLint.RuleFixer>) => null | TSESLint.RuleFix;
25
+ createReplacementFix: (fixer: Readonly<TSESLint.RuleFixer>) => TSESLint.RuleFix;
26
+ fixer: Readonly<TSESLint.RuleFixer>;
27
+ importInsertionDecision: ImportInsertionDecision;
28
+ reportFixIntent?: ImportFixIntent | undefined;
29
+ requiresImportInsertion: boolean;
30
+ }>) => null | readonly TSESLint.RuleFix[];
31
+ //# sourceMappingURL=import-aware-fixes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-aware-fixes.d.ts","sourceRoot":"","sources":["../../src/_internal/import-aware-fixes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,KAAK,EACR,eAAe,EACf,uBAAuB,EAC1B,MAAM,6BAA6B,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,eAAe,CAAC;AAE1E;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GAAI,sJAQpC,QAAQ,CAAC;IACR,8BAA8B,CAAC,EAAE,8BAA8B,GAAG,SAAS,CAAC;IAC5E,eAAe,EAAE,CACb,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAClC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC7B,oBAAoB,EAAE,CAClB,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAClC,QAAQ,CAAC,OAAO,CAAC;IACtB,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC9C,uBAAuB,EAAE,OAAO,CAAC;CACpC,CAAC,KAAG,IAAI,GAAG,SAAS,QAAQ,CAAC,OAAO,EAkCpC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Build replacement/import fixer arrays according to an import-insertion
3
+ * coordination decision.
4
+ *
5
+ * @param options - Replacement and optional import-fix factories with the
6
+ * import-insertion decision for this report callback.
7
+ *
8
+ * @returns Ordered fix array (`import`, then `replacement`) when applicable;
9
+ * otherwise `null` when the fix must be suppressed.
10
+ */
11
+ export const createImportAwareFixes = ({ autofixImportInsertionStrategy = "combined", createImportFix, createReplacementFix, fixer, importInsertionDecision, reportFixIntent = "autofix", requiresImportInsertion, }) => {
12
+ if (requiresImportInsertion &&
13
+ reportFixIntent === "autofix" &&
14
+ autofixImportInsertionStrategy === "separate-pass") {
15
+ if (!importInsertionDecision.shouldIncludeImportInsertionFix) {
16
+ return null;
17
+ }
18
+ const importFix = createImportFix(fixer);
19
+ if (importFix === null) {
20
+ return null;
21
+ }
22
+ return [importFix];
23
+ }
24
+ if (!requiresImportInsertion) {
25
+ return [createReplacementFix(fixer)];
26
+ }
27
+ if (!importInsertionDecision.shouldIncludeImportInsertionFix) {
28
+ return importInsertionDecision.allowReplacementWithoutImportInsertion
29
+ ? [createReplacementFix(fixer)]
30
+ : null;
31
+ }
32
+ const importFix = createImportFix(fixer);
33
+ if (importFix === null) {
34
+ return null;
35
+ }
36
+ return [importFix, createReplacementFix(fixer)];
37
+ };
38
+ //# sourceMappingURL=import-aware-fixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-aware-fixes.js","sourceRoot":"","sources":["../../src/_internal/import-aware-fixes.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACnC,8BAA8B,GAAG,UAAU,EAC3C,eAAe,EACf,oBAAoB,EACpB,KAAK,EACL,uBAAuB,EACvB,eAAe,GAAG,SAAS,EAC3B,uBAAuB,GAazB,EAAsC,EAAE;IACtC,IACI,uBAAuB;QACvB,eAAe,KAAK,SAAS;QAC7B,8BAA8B,KAAK,eAAe,EACpD,CAAC;QACC,IAAI,CAAC,uBAAuB,CAAC,+BAA+B,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC3B,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,uBAAuB,CAAC,+BAA+B,EAAE,CAAC;QAC3D,OAAO,uBAAuB,CAAC,sCAAsC;YACjE,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared import-insertion coordination used by import-aware replacement fixers.
4
+ */
5
+ import type { TSESTree } from "@typescript-eslint/utils";
6
+ /** Classification for coordinated import insertion keys. */
7
+ export type ImportBindingKind = "type" | "value";
8
+ /**
9
+ * Delivery channel for a report fix callback.
10
+ *
11
+ * @remarks
12
+ * - `autofix`: fix supplied through `context.report({ fix })` and coordinated so
13
+ * only one report emits a specific import insertion per file/lint pass.
14
+ * - `suggestion`: fix supplied through `context.report({ suggest })`; each
15
+ * suggestion remains self-contained and therefore keeps import insertion.
16
+ */
17
+ export type ImportFixIntent = "autofix" | "suggestion";
18
+ /**
19
+ * Import-insertion planning decision for one report fix callback.
20
+ */
21
+ export type ImportInsertionDecision = Readonly<{
22
+ allowReplacementWithoutImportInsertion: boolean;
23
+ shouldIncludeImportInsertionFix: boolean;
24
+ }>;
25
+ /**
26
+ * Input options used to resolve import-insertion coordination decisions.
27
+ */
28
+ export type ImportInsertionDecisionOptions = Readonly<{
29
+ importBindingKind: ImportBindingKind;
30
+ importedName: string;
31
+ referenceNode: Readonly<TSESTree.Node>;
32
+ reportFixIntent: ImportFixIntent;
33
+ sourceModuleName: string;
34
+ }>;
35
+ /**
36
+ * Resolve import-insertion and replacement behavior for a report-fix callback.
37
+ *
38
+ * @remarks
39
+ * This decision is made during fixer construction (AST traversal) to keep
40
+ * behavior deterministic across repeated fix callback evaluation.
41
+ */
42
+ export declare function resolveImportInsertionDecisionForReportFix({ importBindingKind, importedName, referenceNode, reportFixIntent, sourceModuleName, }: ImportInsertionDecisionOptions): ImportInsertionDecision;
43
+ //# sourceMappingURL=import-fix-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-fix-coordinator.d.ts","sourceRoot":"","sources":["../../src/_internal/import-fix-coordinator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAOzD,4DAA4D;AAC5D,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,YAAY,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC3C,sCAAsC,EAAE,OAAO,CAAC;IAChD,+BAA+B,EAAE,OAAO,CAAC;CAC5C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IAClD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;CAC5B,CAAC,CAAC;AAoEH;;;;;;GAMG;AACH,wBAAgB,0CAA0C,CAAC,EACvD,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,GACnB,EAAE,8BAA8B,GAAG,uBAAuB,CA8B1D"}
@@ -0,0 +1,71 @@
1
+ import { isDefined } from "ts-extras";
2
+ import { getProgramNode } from "./ast-node.js";
3
+ import { isImportInsertionFixesDisabledForNode } from "./plugin-settings.js";
4
+ /** Program-scoped claimed import keys cache. */
5
+ const claimedImportKeysByProgram = new WeakMap();
6
+ /**
7
+ * Build a deterministic coordination key for one import binding.
8
+ */
9
+ const createImportCoordinationKey = ({ importBindingKind, importedName, sourceModuleName, }) => `${importBindingKind}\u0000${sourceModuleName}\u0000${importedName}`;
10
+ /**
11
+ * Claim a coordination key for one program and return whether this call made
12
+ * the first claim.
13
+ */
14
+ const claimImportCoordinationKeyForProgram = ({ coordinationKey, programNode, }) => {
15
+ const existingClaims = claimedImportKeysByProgram.get(programNode);
16
+ if (existingClaims?.has(coordinationKey) === true) {
17
+ return false;
18
+ }
19
+ if (!isDefined(existingClaims)) {
20
+ claimedImportKeysByProgram.set(programNode, new Set([coordinationKey]));
21
+ return true;
22
+ }
23
+ existingClaims.add(coordinationKey);
24
+ return true;
25
+ };
26
+ /**
27
+ * Decision when import insertion should be emitted and replacement is allowed.
28
+ */
29
+ const INCLUDE_IMPORT_INSERTION = {
30
+ allowReplacementWithoutImportInsertion: true,
31
+ shouldIncludeImportInsertionFix: true,
32
+ };
33
+ /**
34
+ * Decision when replacement depends on insertion and should be suppressed.
35
+ */
36
+ const SKIP_IMPORT_INSERTION_BLOCK_REPLACEMENT = {
37
+ allowReplacementWithoutImportInsertion: false,
38
+ shouldIncludeImportInsertionFix: false,
39
+ };
40
+ /**
41
+ * Resolve import-insertion and replacement behavior for a report-fix callback.
42
+ *
43
+ * @remarks
44
+ * This decision is made during fixer construction (AST traversal) to keep
45
+ * behavior deterministic across repeated fix callback evaluation.
46
+ */
47
+ export function resolveImportInsertionDecisionForReportFix({ importBindingKind, importedName, referenceNode, reportFixIntent, sourceModuleName, }) {
48
+ if (reportFixIntent === "suggestion") {
49
+ return INCLUDE_IMPORT_INSERTION;
50
+ }
51
+ if (isImportInsertionFixesDisabledForNode(referenceNode)) {
52
+ return SKIP_IMPORT_INSERTION_BLOCK_REPLACEMENT;
53
+ }
54
+ const programNode = getProgramNode(referenceNode);
55
+ if (!programNode) {
56
+ return INCLUDE_IMPORT_INSERTION;
57
+ }
58
+ const coordinationKey = createImportCoordinationKey({
59
+ importBindingKind,
60
+ importedName,
61
+ sourceModuleName,
62
+ });
63
+ if (!claimImportCoordinationKeyForProgram({
64
+ coordinationKey,
65
+ programNode,
66
+ })) {
67
+ return SKIP_IMPORT_INSERTION_BLOCK_REPLACEMENT;
68
+ }
69
+ return INCLUDE_IMPORT_INSERTION;
70
+ }
71
+ //# sourceMappingURL=import-fix-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-fix-coordinator.js","sourceRoot":"","sources":["../../src/_internal/import-fix-coordinator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,qCAAqC,EAAE,MAAM,sBAAsB,CAAC;AAsC7E,gDAAgD;AAChD,MAAM,0BAA0B,GAAG,IAAI,OAAO,EAG3C,CAAC;AAEJ;;GAEG;AACH,MAAM,2BAA2B,GAAG,CAAC,EACjC,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GAKlB,EAAU,EAAE,CACV,GAAG,iBAAiB,SAAS,gBAAgB,SAAS,YAAY,EAAE,CAAC;AAEzE;;;GAGG;AACH,MAAM,oCAAoC,GAAG,CAAC,EAC1C,eAAe,EACf,WAAW,GAIb,EAAW,EAAE;IACX,MAAM,cAAc,GAAG,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,cAAc,EAAE,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7B,0BAA0B,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAExE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAEpC,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,wBAAwB,GAA4B;IACtD,sCAAsC,EAAE,IAAI;IAC5C,+BAA+B,EAAE,IAAI;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,uCAAuC,GAA4B;IACrE,sCAAsC,EAAE,KAAK;IAC7C,+BAA+B,EAAE,KAAK;CACzC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,0CAA0C,CAAC,EACvD,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,GACa;IAC7B,IAAI,eAAe,KAAK,YAAY,EAAE,CAAC;QACnC,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAED,IAAI,qCAAqC,CAAC,aAAa,CAAC,EAAE,CAAC;QACvD,OAAO,uCAAuC,CAAC;IACnD,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAED,MAAM,eAAe,GAAG,2BAA2B,CAAC;QAChD,iBAAiB;QACjB,YAAY;QACZ,gBAAgB;KACnB,CAAC,CAAC;IAEH,IACI,CAAC,oCAAoC,CAAC;QAClC,eAAe;QACf,WAAW;KACd,CAAC,EACJ,CAAC;QACC,OAAO,uCAAuC,CAAC;IACnD,CAAC;IAED,OAAO,wBAAwB,CAAC;AACpC,CAAC"}