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,182 @@
1
+ import { isDefined, objectHasOwn, objectKeys } from "ts-extras";
2
+ import { setContainsValue } from "./set-membership.js";
3
+ /**
4
+ * ESTree metadata keys ignored during structural-equivalence checks.
5
+ */
6
+ const ignoredPropertyKeys = new Set([
7
+ "end",
8
+ "loc",
9
+ "parent",
10
+ "range",
11
+ "start",
12
+ ]);
13
+ /**
14
+ * Maximum recursive depth allowed during structural node-value comparisons.
15
+ *
16
+ * @remarks
17
+ * This guard avoids stack-overflow crashes on pathological, adversarially deep
18
+ * AST/type structures. Returning `false` in that case preserves lint-process
19
+ * stability by failing closed for autofix-equivalence checks.
20
+ */
21
+ const MAX_NODE_VALUE_COMPARISON_DEPTH = 256;
22
+ /**
23
+ * Check whether a value is object-like for structural comparisons.
24
+ */
25
+ const isComparableRecord = (value) => typeof value === "object" && value !== null;
26
+ /**
27
+ * Return stable comparable keys after stripping metadata properties.
28
+ */
29
+ const getComparableKeys = (value) => objectKeys(value).filter((key) => !setContainsValue(ignoredPropertyKeys, key));
30
+ /**
31
+ * Read comparable keys with per-comparison caching to reduce repeated
32
+ * key-filter allocations during deep traversals.
33
+ *
34
+ * @param value - Object candidate being compared.
35
+ * @param comparableKeysByObject - Per-comparison key cache.
36
+ *
37
+ * @returns Comparable key list with ESTree metadata keys removed.
38
+ */
39
+ const getCachedComparableKeys = (value, comparableKeysByObject) => {
40
+ const existingComparableKeys = comparableKeysByObject.get(value);
41
+ if (isDefined(existingComparableKeys)) {
42
+ return existingComparableKeys;
43
+ }
44
+ const comparableKeys = getComparableKeys(value);
45
+ comparableKeysByObject.set(value, comparableKeys);
46
+ return comparableKeys;
47
+ };
48
+ /**
49
+ * Unwrap transparent TypeScript expression wrappers.
50
+ *
51
+ * @param expression - Expression to normalize.
52
+ *
53
+ * @returns The innermost wrapped expression.
54
+ */
55
+ const unwrapTransparentExpression = (expression) => {
56
+ let currentExpression = expression;
57
+ const visitedExpressions = new Set();
58
+ while (true) {
59
+ if (setContainsValue(visitedExpressions, currentExpression)) {
60
+ return currentExpression;
61
+ }
62
+ visitedExpressions.add(currentExpression);
63
+ if (currentExpression.type === "TSAsExpression") {
64
+ currentExpression = currentExpression.expression;
65
+ continue;
66
+ }
67
+ if (currentExpression.type === "TSNonNullExpression") {
68
+ currentExpression = currentExpression.expression;
69
+ continue;
70
+ }
71
+ if (currentExpression.type === "TSSatisfiesExpression") {
72
+ currentExpression = currentExpression.expression;
73
+ continue;
74
+ }
75
+ if (currentExpression.type === "TSTypeAssertion") {
76
+ currentExpression = currentExpression.expression;
77
+ continue;
78
+ }
79
+ return currentExpression;
80
+ }
81
+ };
82
+ /**
83
+ * Records a compared object pair and reports whether that pair was already
84
+ * visited.
85
+ *
86
+ * @param left - Left-side object in the comparison pair.
87
+ * @param right - Right-side object in the comparison pair.
88
+ * @param seenPairs - Weakly-held pair-tracking cache for cycle-safe traversal.
89
+ *
90
+ * @returns `true` when this exact pair has already been processed.
91
+ */
92
+ const markAndCheckSeenPair = (left, right, seenPairs) => {
93
+ const seenRightNodes = seenPairs.get(left);
94
+ if (isDefined(seenRightNodes) && seenRightNodes.has(right)) {
95
+ return true;
96
+ }
97
+ if (isDefined(seenRightNodes)) {
98
+ seenRightNodes.add(right);
99
+ }
100
+ else {
101
+ seenPairs.set(left, new WeakSet([right]));
102
+ }
103
+ return false;
104
+ };
105
+ /**
106
+ * Deep structural comparison that is resilient to cycles and ESTree metadata
107
+ * fields.
108
+ *
109
+ * @param left - Left-side value.
110
+ * @param right - Right-side value.
111
+ * @param seenPairs - Pair cache used to break recursive cycles.
112
+ *
113
+ * @returns `true` when the values are structurally equivalent after metadata
114
+ * normalization.
115
+ */
116
+ const areEquivalentNodeValues = (left, right, seenPairs = new WeakMap(), comparableKeysByObject = new WeakMap(), depth = 0) => {
117
+ if (depth >= MAX_NODE_VALUE_COMPARISON_DEPTH) {
118
+ return false;
119
+ }
120
+ if (Object.is(left, right)) {
121
+ return true;
122
+ }
123
+ if (typeof left !== typeof right) {
124
+ return false;
125
+ }
126
+ if (left === null || right === null) {
127
+ return false;
128
+ }
129
+ if (Array.isArray(left) || Array.isArray(right)) {
130
+ if (!Array.isArray(left) || !Array.isArray(right)) {
131
+ return false;
132
+ }
133
+ if (markAndCheckSeenPair(left, right, seenPairs)) {
134
+ return true;
135
+ }
136
+ if (left.length !== right.length) {
137
+ return false;
138
+ }
139
+ return left.every((value, index) => areEquivalentNodeValues(value, right[index], seenPairs, comparableKeysByObject, depth + 1));
140
+ }
141
+ if (!isComparableRecord(left) || !isComparableRecord(right)) {
142
+ return false;
143
+ }
144
+ if (markAndCheckSeenPair(left, right, seenPairs)) {
145
+ return true;
146
+ }
147
+ const leftKeys = getCachedComparableKeys(left, comparableKeysByObject);
148
+ const rightKeys = getCachedComparableKeys(right, comparableKeysByObject);
149
+ const rightKeySet = new Set(rightKeys);
150
+ if (leftKeys.length !== rightKeys.length) {
151
+ return false;
152
+ }
153
+ if (leftKeys.some((key) => !setContainsValue(rightKeySet, key))) {
154
+ return false;
155
+ }
156
+ return leftKeys.every((key) => {
157
+ if (!objectHasOwn(left, key) || !objectHasOwn(right, key)) {
158
+ return false;
159
+ }
160
+ return areEquivalentNodeValues(left[key], right[key], seenPairs, comparableKeysByObject, depth + 1);
161
+ });
162
+ };
163
+ /**
164
+ * Compare two expressions for structural equivalence after unwrapping
165
+ * transparent TypeScript wrappers.
166
+ *
167
+ * @param left - Left-hand expression.
168
+ * @param right - Right-hand expression.
169
+ *
170
+ * @returns `true` when both expressions are structurally equivalent.
171
+ */
172
+ export const areEquivalentExpressions = (left, right) => areEquivalentNodeValues(unwrapTransparentExpression(left), unwrapTransparentExpression(right));
173
+ /**
174
+ * Compare two type nodes for structural equivalence.
175
+ *
176
+ * @param left - Left-hand type node.
177
+ * @param right - Right-hand type node.
178
+ *
179
+ * @returns `true` when both type nodes are structurally equivalent.
180
+ */
181
+ export const areEquivalentTypeNodes = (left, right) => areEquivalentNodeValues(left, right);
182
+ //# sourceMappingURL=normalize-expression-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-expression-text.js","sourceRoot":"","sources":["../../src/_internal/normalize-expression-text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Shared helpers for parsing and flattening nullish comparison expressions.
4
+ */
5
+ import type { TSESTree } from "@typescript-eslint/utils";
6
+ /**
7
+ * Normalized representation of one binary comparison against null/undefined.
8
+ */
9
+ export type NullishComparison = Readonly<{
10
+ comparedExpression: TSESTree.Expression;
11
+ kind: NullishComparisonKind;
12
+ operator: NullishComparisonOperator;
13
+ }>;
14
+ /** Nullish literal kinds supported by comparison extraction. */
15
+ export type NullishComparisonKind = "null" | "undefined";
16
+ /** Operators supported by nullish comparison extraction. */
17
+ export type NullishComparisonOperator = "!=" | "!==" | "==" | "===";
18
+ /**
19
+ * Flatten a logical-expression tree for one specific operator.
20
+ *
21
+ * @param options - Expression and logical operator to flatten.
22
+ *
23
+ * @returns Left-to-right list of terms participating in that operator chain.
24
+ */
25
+ export declare const flattenLogicalTerms: ({ expression, operator, }: Readonly<{
26
+ expression: Readonly<TSESTree.Expression>;
27
+ operator: "&&" | "||";
28
+ }>) => readonly TSESTree.Expression[];
29
+ /**
30
+ * Narrow a list of expressions to an exact two-term tuple.
31
+ */
32
+ export declare const isExpressionPair: (terms: readonly Readonly<TSESTree.Expression>[]) => terms is readonly [TSESTree.Expression, TSESTree.Expression];
33
+ /**
34
+ * Extract a normalized nullish comparison from an expression.
35
+ */
36
+ export declare const getNullishComparison: ({ allowedOperators, allowTypeofComparedIdentifierForUndefined, comparedIdentifierName, expression, isGlobalUndefinedIdentifier, }: Readonly<{
37
+ allowedOperators?: readonly NullishComparisonOperator[];
38
+ allowTypeofComparedIdentifierForUndefined?: boolean;
39
+ comparedIdentifierName?: string;
40
+ expression: Readonly<TSESTree.Expression>;
41
+ isGlobalUndefinedIdentifier: (expression: Readonly<TSESTree.Expression>) => boolean;
42
+ }>) => null | NullishComparison;
43
+ //# sourceMappingURL=nullish-comparison.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nullish-comparison.d.ts","sourceRoot":"","sources":["../../src/_internal/nullish-comparison.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAIzD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACrC,kBAAkB,EAAE,QAAQ,CAAC,UAAU,CAAC;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,EAAE,yBAAyB,CAAC;CACvC,CAAC,CAAC;AAEH,gEAAgE;AAChE,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,WAAW,CAAC;AAEzD,4DAA4D;AAC5D,MAAM,MAAM,yBAAyB,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAUpE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,2BAGjC,QAAQ,CAAC;IACR,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB,CAAC,KAAG,SAAS,QAAQ,CAAC,UAAU,EAuBhC,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GACzB,OAAO,SAAS,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAChD,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAChB,CAAC;AAiD/C;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,mIAMlC,QAAQ,CAAC;IACR,gBAAgB,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACxD,yCAAyC,CAAC,EAAE,OAAO,CAAC;IACpD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,2BAA2B,EAAE,CACzB,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,KACxC,OAAO,CAAC;CAChB,CAAC,KAAG,IAAI,GAAG,iBA+GX,CAAC"}
@@ -0,0 +1,147 @@
1
+ import { arrayIncludes, isDefined } from "ts-extras";
2
+ /** Default accepted operators for nullish comparison parsing. */
3
+ const defaultNullishComparisonOperators = [
4
+ "!=",
5
+ "!==",
6
+ "==",
7
+ "===",
8
+ ];
9
+ /**
10
+ * Flatten a logical-expression tree for one specific operator.
11
+ *
12
+ * @param options - Expression and logical operator to flatten.
13
+ *
14
+ * @returns Left-to-right list of terms participating in that operator chain.
15
+ */
16
+ export const flattenLogicalTerms = ({ expression, operator, }) => {
17
+ const flattenedTerms = [];
18
+ const pendingTerms = [expression];
19
+ while (pendingTerms.length > 0) {
20
+ const currentTerm = pendingTerms.pop();
21
+ if (!currentTerm) {
22
+ continue;
23
+ }
24
+ if (currentTerm.type === "LogicalExpression" &&
25
+ currentTerm.operator === operator) {
26
+ pendingTerms.push(currentTerm.right, currentTerm.left);
27
+ continue;
28
+ }
29
+ flattenedTerms.push(currentTerm);
30
+ }
31
+ return flattenedTerms;
32
+ };
33
+ const STRICT_NULLISH_TERM_COUNT = 2;
34
+ /**
35
+ * Narrow a list of expressions to an exact two-term tuple.
36
+ */
37
+ export const isExpressionPair = (terms) => terms.length === STRICT_NULLISH_TERM_COUNT;
38
+ /**
39
+ * Check whether an expression is the literal `null`.
40
+ */
41
+ const isNullLiteral = (expression) => expression.type === "Literal" && expression.value === null;
42
+ /**
43
+ * Check whether an expression is the string literal `"undefined"`.
44
+ */
45
+ const isUndefinedStringLiteral = (expression) => expression.type === "Literal" && expression.value === "undefined";
46
+ /**
47
+ * Check whether an expression is `typeof <identifierName>`.
48
+ */
49
+ const isTypeofIdentifierExpression = (expression, identifierName) => expression.type === "UnaryExpression" &&
50
+ expression.operator === "typeof" &&
51
+ expression.argument.type === "Identifier" &&
52
+ expression.argument.name === identifierName;
53
+ /**
54
+ * Narrow a binary-operator string to supported nullish comparison operators.
55
+ */
56
+ const isAllowedNullishComparisonOperator = (operator) => operator === "!=" ||
57
+ operator === "!==" ||
58
+ operator === "==" ||
59
+ operator === "===";
60
+ /**
61
+ * Narrow an ESTree expression-like union to regular expressions (excluding
62
+ * private identifiers).
63
+ */
64
+ const isExpressionNode = (expression) => expression.type !== "PrivateIdentifier";
65
+ /**
66
+ * Extract a normalized nullish comparison from an expression.
67
+ */
68
+ export const getNullishComparison = ({ allowedOperators = defaultNullishComparisonOperators, allowTypeofComparedIdentifierForUndefined = false, comparedIdentifierName, expression, isGlobalUndefinedIdentifier, }) => {
69
+ if (expression.type !== "BinaryExpression") {
70
+ return null;
71
+ }
72
+ if (!isAllowedNullishComparisonOperator(expression.operator)) {
73
+ return null;
74
+ }
75
+ if (allowedOperators !== defaultNullishComparisonOperators &&
76
+ !arrayIncludes(allowedOperators, expression.operator)) {
77
+ return null;
78
+ }
79
+ const matchesComparedExpression = (candidateExpression) => !isDefined(comparedIdentifierName) ||
80
+ (candidateExpression.type === "Identifier" &&
81
+ candidateExpression.name === comparedIdentifierName);
82
+ if (isNullLiteral(expression.right) &&
83
+ isExpressionNode(expression.left) &&
84
+ matchesComparedExpression(expression.left)) {
85
+ return {
86
+ comparedExpression: expression.left,
87
+ kind: "null",
88
+ operator: expression.operator,
89
+ };
90
+ }
91
+ if (isExpressionNode(expression.left) &&
92
+ isNullLiteral(expression.left) &&
93
+ isExpressionNode(expression.right) &&
94
+ matchesComparedExpression(expression.right)) {
95
+ return {
96
+ comparedExpression: expression.right,
97
+ kind: "null",
98
+ operator: expression.operator,
99
+ };
100
+ }
101
+ if (expression.right.type === "Identifier" &&
102
+ isGlobalUndefinedIdentifier(expression.right) &&
103
+ isExpressionNode(expression.left) &&
104
+ matchesComparedExpression(expression.left)) {
105
+ return {
106
+ comparedExpression: expression.left,
107
+ kind: "undefined",
108
+ operator: expression.operator,
109
+ };
110
+ }
111
+ if (expression.left.type === "Identifier" &&
112
+ isGlobalUndefinedIdentifier(expression.left) &&
113
+ isExpressionNode(expression.right) &&
114
+ matchesComparedExpression(expression.right)) {
115
+ return {
116
+ comparedExpression: expression.right,
117
+ kind: "undefined",
118
+ operator: expression.operator,
119
+ };
120
+ }
121
+ if (!isDefined(comparedIdentifierName) ||
122
+ !allowTypeofComparedIdentifierForUndefined) {
123
+ return null;
124
+ }
125
+ if (isExpressionNode(expression.left) &&
126
+ isExpressionNode(expression.right) &&
127
+ isTypeofIdentifierExpression(expression.left, comparedIdentifierName) &&
128
+ isUndefinedStringLiteral(expression.right)) {
129
+ return {
130
+ comparedExpression: expression.left.argument,
131
+ kind: "undefined",
132
+ operator: expression.operator,
133
+ };
134
+ }
135
+ if (isExpressionNode(expression.right) &&
136
+ isExpressionNode(expression.left) &&
137
+ isTypeofIdentifierExpression(expression.right, comparedIdentifierName) &&
138
+ isUndefinedStringLiteral(expression.left)) {
139
+ return {
140
+ comparedExpression: expression.right.argument,
141
+ kind: "undefined",
142
+ operator: expression.operator,
143
+ };
144
+ }
145
+ return null;
146
+ };
147
+ //# sourceMappingURL=nullish-comparison.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nullish-comparison.js","sourceRoot":"","sources":["../../src/_internal/nullish-comparison.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Parsing and memoization helpers for plugin-level runtime settings.
4
+ */
5
+ import type { TSESLint, TSESTree } from "@typescript-eslint/utils";
6
+ import type { UnknownArray } from "type-fest";
7
+ /**
8
+ * Normalized per-program settings consumed by fix-generation helpers.
9
+ */
10
+ type ProgramSettings = {
11
+ disableAllAutofixes: boolean;
12
+ disableImportInsertionFixes: boolean;
13
+ };
14
+ /**
15
+ * Register parsed plugin settings for the current file program.
16
+ *
17
+ * @param context - Active ESLint rule context.
18
+ *
19
+ * @returns Memoized immutable settings for the context's program node.
20
+ */
21
+ export declare const registerProgramSettingsForContext: (context: Readonly<TSESLint.RuleContext<string, UnknownArray>>) => Readonly<ProgramSettings>;
22
+ /**
23
+ * Determine whether import insertion autofixes are globally disabled for the
24
+ * file containing the provided node.
25
+ *
26
+ * @param node - AST node used to resolve the enclosing Program.
27
+ *
28
+ * @returns `true` when import insertion fixes should be suppressed.
29
+ */
30
+ export declare const isImportInsertionFixesDisabledForNode: (node: Readonly<TSESTree.Node>) => boolean;
31
+ export {};
32
+ //# sourceMappingURL=plugin-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-settings.d.ts","sourceRoot":"","sources":["../../src/_internal/plugin-settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,WAAW,CAAC;AAe1D;;GAEG;AACH,KAAK,eAAe,GAAG;IACnB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,2BAA2B,EAAE,OAAO,CAAC;CACxC,CAAC;AA0FF;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,GAC1C,SAAS,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,KAC9D,QAAQ,CAAC,eAAe,CA2B1B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qCAAqC,GAC9C,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAC9B,OASF,CAAC"}
@@ -0,0 +1,118 @@
1
+ import { isPresent, objectHasOwn } from "ts-extras";
2
+ import { getProgramNode } from "./ast-node.js";
3
+ /** Top-level `settings` key for this plugin. */
4
+ const TYPEFEST_SETTINGS_KEY = "typefest";
5
+ /** Flag that disables all plugin autofix behavior. */
6
+ const DISABLE_ALL_AUTOFIXES_KEY = "disableAllAutofixes";
7
+ /** Flag that disables import-insertion fix helpers only. */
8
+ const DISABLE_IMPORT_INSERTION_FIXES_KEY = "disableImportInsertionFixes";
9
+ /**
10
+ * Cache of parsed settings keyed by the Program node for the active file.
11
+ */
12
+ const settingsByProgram = new WeakMap();
13
+ /**
14
+ * Narrow an unknown value to a JSON-object-like record.
15
+ *
16
+ * @param value - Value to narrow.
17
+ *
18
+ * @returns `true` when the value is a non-null, non-array object.
19
+ */
20
+ const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
21
+ /**
22
+ * Extract the `settings.typefest` object when present and valid.
23
+ *
24
+ * @param settings - ESLint settings value from rule context.
25
+ *
26
+ * @returns Parsed `settings.typefest` object when valid; otherwise `null`.
27
+ */
28
+ const getTypefestSettings = (settings) => {
29
+ if (!isObject(settings)) {
30
+ return null;
31
+ }
32
+ const typefestSettings = settings[TYPEFEST_SETTINGS_KEY];
33
+ return isObject(typefestSettings) ? typefestSettings : null;
34
+ };
35
+ /**
36
+ * Read a strict boolean flag (`true`) from a JSON object by key.
37
+ *
38
+ * @param object - Source settings object.
39
+ * @param key - Flag key to read.
40
+ *
41
+ * @returns `true` only when the key exists and equals literal `true`.
42
+ */
43
+ const readBooleanFlag = (object, key) => objectHasOwn(object, key) && object[key] === true;
44
+ /**
45
+ * Reads the import-insertion disable flag from plugin settings.
46
+ *
47
+ * @param settings - ESLint settings value from rule context.
48
+ *
49
+ * @returns `true` when import insertion fixes are explicitly disabled.
50
+ */
51
+ const readDisableImportInsertionFixesFromSettings = (settings) => {
52
+ const typefestSettings = getTypefestSettings(settings);
53
+ if (!isPresent(typefestSettings)) {
54
+ return false;
55
+ }
56
+ return readBooleanFlag(typefestSettings, DISABLE_IMPORT_INSERTION_FIXES_KEY);
57
+ };
58
+ /**
59
+ * Reads the global autofix disable flag from plugin settings.
60
+ *
61
+ * @param settings - ESLint settings value from rule context.
62
+ *
63
+ * @returns `true` when all plugin autofixes are explicitly disabled.
64
+ */
65
+ const readDisableAllAutofixesFromSettings = (settings) => {
66
+ const typefestSettings = getTypefestSettings(settings);
67
+ if (!isPresent(typefestSettings)) {
68
+ return false;
69
+ }
70
+ return readBooleanFlag(typefestSettings, DISABLE_ALL_AUTOFIXES_KEY);
71
+ };
72
+ /**
73
+ * Guard values suitable for WeakMap object keys.
74
+ */
75
+ const isWeakMapKeyObject = (value) => typeof value === "object" && value !== null;
76
+ /**
77
+ * Register parsed plugin settings for the current file program.
78
+ *
79
+ * @param context - Active ESLint rule context.
80
+ *
81
+ * @returns Memoized immutable settings for the context's program node.
82
+ */
83
+ export const registerProgramSettingsForContext = (context) => {
84
+ const programNode = context.sourceCode.ast;
85
+ const disableAllAutofixes = readDisableAllAutofixesFromSettings(context.settings);
86
+ const disableImportInsertionFixes = disableAllAutofixes ||
87
+ readDisableImportInsertionFixesFromSettings(context.settings);
88
+ const parsedSettings = Object.freeze({
89
+ disableAllAutofixes,
90
+ disableImportInsertionFixes,
91
+ });
92
+ if (!isWeakMapKeyObject(programNode)) {
93
+ return parsedSettings;
94
+ }
95
+ const existingProgramSettings = settingsByProgram.get(programNode);
96
+ if (isPresent(existingProgramSettings)) {
97
+ return existingProgramSettings;
98
+ }
99
+ settingsByProgram.set(programNode, parsedSettings);
100
+ return parsedSettings;
101
+ };
102
+ /**
103
+ * Determine whether import insertion autofixes are globally disabled for the
104
+ * file containing the provided node.
105
+ *
106
+ * @param node - AST node used to resolve the enclosing Program.
107
+ *
108
+ * @returns `true` when import insertion fixes should be suppressed.
109
+ */
110
+ export const isImportInsertionFixesDisabledForNode = (node) => {
111
+ const programNode = getProgramNode(node);
112
+ if (!isPresent(programNode)) {
113
+ return false;
114
+ }
115
+ const settings = settingsByProgram.get(programNode);
116
+ return settings?.disableImportInsertionFixes === true;
117
+ };
118
+ //# sourceMappingURL=plugin-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-settings.js","sourceRoot":"","sources":["../../src/_internal/plugin-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Explicit report-adapter utilities for rule-level autofix policy handling.
4
+ */
5
+ import type { TSESLint } from "@typescript-eslint/utils";
6
+ import type { UnknownArray } from "type-fest";
7
+ /**
8
+ * Report callback type for a given message/options pair.
9
+ */
10
+ type ReportCallback<MessageIds extends string, Options extends Readonly<UnknownArray>> = TSESLint.RuleContext<MessageIds, Options>["report"];
11
+ /**
12
+ * Canonical report descriptor type for a given message/options pair.
13
+ */
14
+ type ReportDescriptor<MessageIds extends string, Options extends Readonly<UnknownArray>> = Parameters<ReportCallback<MessageIds, Options>>[0];
15
+ /**
16
+ * Remove top-level autofix from a report descriptor while preserving all other
17
+ * fields (including suggestions).
18
+ */
19
+ export declare const omitAutofixFromReportDescriptor: <MessageIds extends string, Options extends Readonly<UnknownArray>>(descriptor: Readonly<ReportDescriptor<MessageIds, Options>>) => ReportDescriptor<MessageIds, Options>;
20
+ /**
21
+ * Build a report callback that enforces no-top-level-autofix semantics.
22
+ */
23
+ export declare const createReportWithoutAutofixes: <MessageIds extends string, Options extends Readonly<UnknownArray>>(report: ReportCallback<MessageIds, Options>) => ReportCallback<MessageIds, Options>;
24
+ export {};
25
+ //# sourceMappingURL=report-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-adapter.d.ts","sourceRoot":"","sources":["../../src/_internal/report-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAI9C;;GAEG;AACH,KAAK,cAAc,CACf,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,QAAQ,CAAC,YAAY,CAAC,IACtC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;AAExD;;GAEG;AACH,KAAK,gBAAgB,CACjB,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,QAAQ,CAAC,YAAY,CAAC,IACtC,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAwBvD;;;GAGG;AACH,eAAO,MAAM,+BAA+B,GACxC,UAAU,SAAS,MAAM,EACzB,OAAO,SAAS,QAAQ,CAAC,YAAY,CAAC,EAEtC,YAAY,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAC5D,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAYtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,GACpC,UAAU,SAAS,MAAM,EAAE,OAAO,SAAS,QAAQ,CAAC,YAAY,CAAC,EAC9D,QAAQ,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,KAC5C,cAAc,CAAC,UAAU,EAAE,OAAO,CAGpC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { isDefined, objectHasOwn } from "ts-extras";
2
+ /**
3
+ * Determine whether a report descriptor has a callable own data-property `fix`
4
+ * value that can be safely omitted.
5
+ */
6
+ const hasCallableOwnFixDataProperty = (descriptor) => {
7
+ const ownFixDescriptor = Object.getOwnPropertyDescriptor(descriptor, "fix");
8
+ if (!isDefined(ownFixDescriptor)) {
9
+ return false;
10
+ }
11
+ if (!objectHasOwn(ownFixDescriptor, "value")) {
12
+ return false;
13
+ }
14
+ return typeof ownFixDescriptor.value === "function";
15
+ };
16
+ /**
17
+ * Remove top-level autofix from a report descriptor while preserving all other
18
+ * fields (including suggestions).
19
+ */
20
+ export const omitAutofixFromReportDescriptor = (descriptor) => {
21
+ if (!hasCallableOwnFixDataProperty(descriptor)) {
22
+ return descriptor;
23
+ }
24
+ const descriptorWithoutFix = {
25
+ ...descriptor,
26
+ };
27
+ delete descriptorWithoutFix.fix;
28
+ return descriptorWithoutFix;
29
+ };
30
+ /**
31
+ * Build a report callback that enforces no-top-level-autofix semantics.
32
+ */
33
+ export const createReportWithoutAutofixes = (report) => (descriptor) => {
34
+ report(omitAutofixFromReportDescriptor(descriptor));
35
+ };
36
+ //# sourceMappingURL=report-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-adapter.js","sourceRoot":"","sources":["../../src/_internal/report-adapter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAkBpD;;;GAGG;AACH,MAAM,6BAA6B,GAAG,CAIlC,UAA2D,EACpD,EAAE;IACT,MAAM,gBAAgB,GAAG,MAAM,CAAC,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5E,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,OAAO,gBAAgB,CAAC,KAAK,KAAK,UAAU,CAAC;AACxD,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAI3C,UAA2D,EACtB,EAAE;IACvC,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,oBAAoB,GAAG;QACzB,GAAG,UAAU;KAChB,CAAC;IAEF,OAAO,oBAAoB,CAAC,GAAG,CAAC;IAEhC,OAAO,oBAAoB,CAAC;AAChC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GACrC,CACI,MAA2C,EACR,EAAE,CACzC,CAAC,UAAU,EAAE,EAAE;IACX,MAAM,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC"}