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,74 @@
1
+ ---
2
+ title: Getting Started
3
+ description: Enable eslint-plugin-typefest quickly in Flat Config.
4
+ ---
5
+
6
+ # Getting Started
7
+
8
+ Install the plugin:
9
+
10
+ ```bash
11
+ npm install --save-dev eslint-plugin-typefest typescript
12
+ ```
13
+
14
+ Enable one preset in your Flat Config:
15
+
16
+ ```ts
17
+ import typefest from "eslint-plugin-typefest";
18
+
19
+ export default [
20
+ typefest.configs.recommended,
21
+ ];
22
+ ```
23
+
24
+ `recommended` does not require type information.
25
+
26
+ If you want the same baseline plus type-aware helper rules, use
27
+ `typefest.configs["recommended-type-checked"]`.
28
+
29
+ ## Alternative: manual scoped setup
30
+
31
+ If you prefer to apply plugin rules inside your own file-scoped config object, spread the preset rules manually.
32
+
33
+ ```ts
34
+ import tsParser from "@typescript-eslint/parser";
35
+ import typefest from "eslint-plugin-typefest";
36
+
37
+ export default [
38
+ {
39
+ files: ["**/*.{ts,tsx,mts,cts}"],
40
+ languageOptions: {
41
+ parser: tsParser,
42
+ parserOptions: {
43
+ ecmaVersion: "latest",
44
+ // Enable only when using a type-aware preset.
45
+ // projectService: true,
46
+ sourceType: "module",
47
+ },
48
+ },
49
+ plugins: {
50
+ typefest,
51
+ },
52
+ rules: {
53
+ ...typefest.configs.recommended.rules,
54
+ },
55
+ },
56
+ ];
57
+ ```
58
+
59
+ Use this pattern when you only extend rules and want full control over parser setup per scope.
60
+
61
+ ## Recommended rollout
62
+
63
+ 1. Start with `recommended` (or `minimal` if you want low initial noise).
64
+ 2. Fix violations in small batches.
65
+ 3. Move to `recommended-type-checked` when you are ready for typed rules.
66
+ 4. Move to `strict` once your baseline is stable.
67
+ 5. Use `all` only when you explicitly want every rule, including experimental rules.
68
+
69
+ ## Need a subset instead of a full preset?
70
+
71
+ - πŸ’  `typefest.configs["type-fest/types"]`
72
+ - ✴️ `typefest.configs["ts-extras/type-guards"]`
73
+
74
+ See the **Presets** section in this sidebar for details and examples.
@@ -0,0 +1,37 @@
1
+ ---
2
+ title: Rule adoption checklist
3
+ description: Practical checklist for adopting eslint-plugin-typefest rules with low risk.
4
+ ---
5
+
6
+ # Rule adoption checklist
7
+
8
+ Use this checklist when rolling out one or more rules across an existing codebase.
9
+
10
+ ## Before enabling rules
11
+
12
+ 1. Identify the target package/folder scope.
13
+ 2. Run ESLint in report-only mode to estimate violation count.
14
+ 3. Confirm your CI, tests, and typecheck are green before refactoring.
15
+ 4. Decide whether this rollout is autofix-first or manual-first.
16
+
17
+ ## During migration
18
+
19
+ 1. Apply changes in small batches (per folder/package).
20
+ 2. Keep each PR focused on one rule family when possible.
21
+ 3. Re-run tests and typecheck after each batch.
22
+ 4. Flag behavior-sensitive replacements for reviewer attention.
23
+
24
+ ## After migration
25
+
26
+ 1. Switch rule severity from `warn` to `error`.
27
+ 2. Remove local disables added during migration.
28
+ 3. Add one representative example to internal team docs.
29
+ 4. Track regressions by keeping the rule enabled in CI.
30
+
31
+ ## Suggested PR checklist
32
+
33
+ - [ ] Only target files for this migration are changed.
34
+ - [ ] Tests pass after each replacement batch.
35
+ - [ ] Typecheck passes after each replacement batch.
36
+ - [ ] Reviewer notes include runtime-sensitive replacements.
37
+ - [ ] Final lint run has no new violations for the migrated rule(s).
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: Preset selection strategy
3
+ description: Choose the right eslint-plugin-typefest preset and roll it out with minimal migration risk.
4
+ ---
5
+
6
+ # Preset selection strategy
7
+
8
+ This guide helps teams pick a preset based on migration tolerance, type-checking maturity, and rollout velocity.
9
+
10
+ ## Decision checkpoints
11
+
12
+ Use these checkpoints before choosing a preset:
13
+
14
+ 1. **Type information availability**: Do you run ESLint with project-aware type services in CI/local workflows?
15
+ 2. **Migration bandwidth**: Can the team handle broad replacement churn this quarter?
16
+ 3. **Runtime sensitivity**: Do you need to review behavior-sensitive changes manually before broad adoption?
17
+ 4. **Convergence target**: Do you intend to land on `strict`/`all`, or stay at a stable baseline?
18
+
19
+ ## Recommended starting points
20
+
21
+ ### `minimal`
22
+
23
+ Choose this when:
24
+
25
+ - You need the lowest-friction baseline.
26
+ - You want immediate value with minimal code churn.
27
+
28
+ ### `recommended`
29
+
30
+ Choose this when:
31
+
32
+ - You want broader coverage but still pragmatic defaults.
33
+ - You can absorb moderate migration effort.
34
+
35
+ ### `recommended-type-checked`
36
+
37
+ Choose this when:
38
+
39
+ - Type services are already stable in your lint pipeline.
40
+ - You want stronger guidance on typed guard/helper patterns.
41
+
42
+ ### `strict`
43
+
44
+ Choose this when:
45
+
46
+ - Your codebase already enforces high lint/type discipline.
47
+ - You prefer stronger consistency constraints over minimal churn.
48
+
49
+ ### `all`
50
+
51
+ Choose this when:
52
+
53
+ - You want full plugin coverage and can manage incremental cleanup.
54
+ - You actively maintain migration and suppression hygiene.
55
+
56
+ ### Domain overlays
57
+
58
+ Layer these when they match your codebase goals:
59
+
60
+ - `type-fest/types`
61
+ - `ts-extras/type-guards`
62
+
63
+ ## Rollout playbook
64
+
65
+ 1. Start with `warn` for one target folder/package.
66
+ 2. Record baseline violations and identify high-churn rule families.
67
+ 3. Run autofix in scoped batches, then run full tests/typecheck.
68
+ 4. Promote to `error` after each batch reaches zero violations.
69
+ 5. Repeat until all target folders are converged.
70
+
71
+ ## Validation gates
72
+
73
+ - `npm run lint`
74
+ - `npm run typecheck`
75
+ - `npm run test`
76
+
77
+ For monorepos, run package-level gates first, then full-repo gates.
78
+
79
+ ## Escalation policy
80
+
81
+ If a rule creates migration risk or noisy output:
82
+
83
+ 1. Keep the preset enabled.
84
+ 2. Temporarily lower that single rule to `warn` or `off` with a tracking note.
85
+ 3. Re-enable after targeted remediation.
86
+
87
+ This preserves preset consistency while avoiding long-lived blind spots.
@@ -0,0 +1,42 @@
1
+ ---
2
+ title: Rollout and fix safety
3
+ description: Guidance for phased rollout, fix safety, and manual verification.
4
+ ---
5
+
6
+ # Rollout and fix safety
7
+
8
+ This page centralizes rollout guidance used across rule migrations.
9
+
10
+ ## Phased rollout model
11
+
12
+ 1. Start with `warn` severity to measure blast radius.
13
+ 2. Run `--fix` only on a scoped folder first.
14
+ 3. Review runtime-sensitive call sites manually.
15
+ 4. Promote to `error` after baseline cleanup.
16
+
17
+ ## Fix safety expectations
18
+
19
+ - **Autofix-safe patterns:** simple API shape substitutions where runtime behavior is equivalent.
20
+ - **Suggestion-only patterns:** potentially behavior-sensitive changes requiring explicit reviewer choice.
21
+ - **Manual migrations:** replacements that depend on local typing, nullability, or control flow assumptions.
22
+
23
+ ## Manual verification checklist
24
+
25
+ 1. Verify import changes are deduplicated and stable.
26
+ 2. Confirm narrowed types still match downstream usage.
27
+ 3. Validate guard/predicate behavior with tests.
28
+ 4. Confirm no accidental semantic changes in edge cases.
29
+
30
+ ## FAQ
31
+
32
+ ### Why not migrate everything in one pass?
33
+
34
+ Large one-shot migrations make regressions harder to detect and review. Smaller batches isolate risk.
35
+
36
+ ### Should we always use `--fix` in CI?
37
+
38
+ No. Prefer running `--fix` locally and committing explicit changes. CI should validate, not rewrite, code.
39
+
40
+ ### How do we handle wrapper utilities?
41
+
42
+ Either align wrappers to canonical helpers/types used by this plugin or deprecate wrappers that duplicate behavior.
@@ -0,0 +1,121 @@
1
+ ---
2
+ title: Snapshot testing guidance
3
+ description: How to use Vitest snapshots safely and effectively in eslint-plugin-typefest.
4
+ ---
5
+
6
+ # Snapshot testing guidance
7
+
8
+ This guide explains where snapshot tests add value in this repository, where
9
+ they do not, and how to keep snapshots stable and reviewable.
10
+
11
+ ## Why we use snapshots selectively
12
+
13
+ Snapshot tests are useful when they protect a stable, public contract.
14
+
15
+ In this plugin, high-value snapshots focus on:
16
+
17
+ - public plugin contracts (rules, presets, parser-option flags)
18
+ - normalized rule metadata matrices
19
+ - generated documentation artifacts (for example README rule tables)
20
+ - docs heading schemas and structural content contracts
21
+
22
+ Snapshot tests are intentionally not the default for all tests. Rule behavior,
23
+ autofixes, and diagnostics should still be asserted explicitly in `RuleTester`
24
+ cases.
25
+
26
+ ## High-value snapshot targets in this repository
27
+
28
+ The current snapshot suites cover:
29
+
30
+ - `test/plugin-contract-snapshots.test.ts`
31
+ - exported rule names and counts
32
+ - preset matrix with normalized parser options and sorted rule IDs
33
+ - `test/rule-metadata-snapshots.test.ts`
34
+ - normalized rule metadata contract summaries
35
+ - `test/readme-rules-table-sync.test.ts`
36
+ - generated README rules section via file snapshot
37
+ - `test/docs-heading-snapshots.test.ts`
38
+ - canonical rule-doc heading matrix per rule page
39
+
40
+ ## Anti-patterns to avoid
41
+
42
+ Avoid snapshotting these unless there is a strong reason:
43
+
44
+ - raw AST trees (too noisy and version-fragile)
45
+ - full ESLint diagnostics objects for normal rule tests
46
+ - unnormalized runtime objects with unstable key ordering
47
+ - large snapshots that hide intent and are hard to review
48
+
49
+ If a test can use a precise explicit assertion, prefer that over a large
50
+ snapshot.
51
+
52
+ ## Snapshot design checklist
53
+
54
+ Before adding a snapshot, ensure all of the following are true:
55
+
56
+ 1. The value represents a stable contract, not incidental internals.
57
+ 2. Fields are normalized and deterministic:
58
+ - sort arrays and keys
59
+ - remove volatile data (timestamps, environment-specific paths, random IDs)
60
+ 3. The snapshot payload is intentionally small and reviewer-friendly.
61
+ 4. The test name explains the contract, not just the mechanism.
62
+ 5. A failing diff should be actionable in code review.
63
+
64
+ ## Matcher selection
65
+
66
+ Choose the matcher based on the output shape:
67
+
68
+ - `toMatchSnapshot()`
69
+ - best for small-to-medium normalized object graphs
70
+ - `toMatchInlineSnapshot()`
71
+ - best for compact payloads (identity labels, short strings)
72
+ - `toMatchFileSnapshot()`
73
+ - best for generated text artifacts where markdown/code readability matters
74
+
75
+ For generated Markdown sections or tables, prefer `toMatchFileSnapshot()`.
76
+
77
+ ## Update workflow
78
+
79
+ Use focused updates first:
80
+
81
+ ```bash
82
+ npx vitest run test/plugin-contract-snapshots.test.ts -u
83
+ npx vitest run test/rule-metadata-snapshots.test.ts -u
84
+ npx vitest run test/readme-rules-table-sync.test.ts -u
85
+ npx vitest run test/docs-heading-snapshots.test.ts -u
86
+ ```
87
+
88
+ Then verify without update mode:
89
+
90
+ ```bash
91
+ npx vitest run test/plugin-contract-snapshots.test.ts test/rule-metadata-snapshots.test.ts test/readme-rules-table-sync.test.ts test/docs-heading-snapshots.test.ts
92
+ ```
93
+
94
+ Finally run repo checks before opening a PR:
95
+
96
+ ```bash
97
+ npm run lint:all:fix:quiet
98
+ npm run typecheck
99
+ npm test
100
+ ```
101
+
102
+ ## PR review checklist for snapshot changes
103
+
104
+ - [ ] Snapshot diff reflects an intentional contract change.
105
+ - [ ] No volatile or environment-specific fields were added.
106
+ - [ ] Sorting/normalization is preserved.
107
+ - [ ] Rule behavior tests (explicit assertions) were updated when required.
108
+ - [ ] Generated docs snapshots still match canonical generators.
109
+
110
+ ## Additional notes
111
+
112
+ - With async concurrent tests, use the local test context `expect` when
113
+ snapshotting to avoid association issues.
114
+ - Prefer one logical contract per snapshot test block; split broad snapshots
115
+ into smaller focused contracts.
116
+ - If a snapshot repeatedly churns from unrelated dependency updates, redesign
117
+ the payload to snapshot less and assert more explicitly.
118
+
119
+ ## Further reading
120
+
121
+ - [Vitest Snapshot Guide](https://v2.vitest.dev/guide/snapshot.html)
@@ -0,0 +1,105 @@
1
+ ---
2
+ title: Type-aware linting readiness
3
+ description: Checklist and rollout playbook for enabling type-aware eslint-plugin-typefest rules safely.
4
+ ---
5
+
6
+ # Type-aware linting readiness
7
+
8
+ Use this guide before enabling type-aware presets or rules in a large codebase.
9
+
10
+ ## When this guide applies
11
+
12
+ Use this checklist when adopting:
13
+
14
+ - `recommended-type-checked`
15
+ - `strict` or `all` in projects with type-aware rules
16
+ - `ts-extras/type-guards`
17
+
18
+ ## Readiness checklist
19
+
20
+ ### 1) Parser-service availability
21
+
22
+ Confirm the lint runtime can provide full type services:
23
+
24
+ - ESLint uses `@typescript-eslint/parser`
25
+ - your lint config resolves the intended `tsconfig`(s)
26
+ - the targeted files are included in those `tsconfig`(s)
27
+
28
+ ### 2) Project graph stability
29
+
30
+ Before enabling strict typed checks:
31
+
32
+ - `npm run typecheck` is green
33
+ - baseline linting is green (or has a controlled known backlog)
34
+ - generated types/artifacts are not stale
35
+
36
+ ### 3) Performance baseline
37
+
38
+ Capture a baseline to detect regressions:
39
+
40
+ ```bash
41
+ npx eslint "src/**/*.{ts,tsx}" --stats
42
+ ```
43
+
44
+ Track:
45
+
46
+ - total runtime
47
+ - expensive files
48
+ - hot rules that call type-checker operations frequently
49
+
50
+ ### 4) CI gate ordering
51
+
52
+ Prefer this order:
53
+
54
+ 1. typecheck
55
+ 2. lint (typed rules enabled)
56
+ 3. tests
57
+
58
+ This keeps typed-service failures easy to classify.
59
+
60
+ ## Recommended rollout sequence
61
+
62
+ 1. Start with one package/folder.
63
+ 2. Enable type-aware rules as `warn` first.
64
+ 3. Fix baseline findings in small batches.
65
+ 4. Promote to `error` once the scope stays green.
66
+ 5. Expand scope incrementally.
67
+
68
+ ## Fast validation commands
69
+
70
+ ```bash
71
+ npm run typecheck
72
+ npm run lint
73
+ npm run test
74
+ ```
75
+
76
+ For focused typed checks during migration:
77
+
78
+ ```bash
79
+ npx eslint "src/**/*.{ts,tsx}" --stats
80
+ ```
81
+
82
+ ## Common failure modes
83
+
84
+ ### "Typed rule requires type information"
85
+
86
+ Likely causes:
87
+
88
+ - file not included in the active `tsconfig`
89
+ - parser-service wiring mismatch for the current workspace
90
+ - incorrect project root assumptions in local/CI lint execution
91
+
92
+ ### Large runtime regressions
93
+
94
+ Likely causes:
95
+
96
+ - expensive semantic checks on broad selectors
97
+ - repeated checker calls without syntax prefilters
98
+ - too-large rollout scope for first pass
99
+
100
+ ## Related docs
101
+
102
+ - [Rollout and fix safety](./rollout-and-fix-safety.md)
103
+ - [Rule adoption checklist](./adoption-checklist.md)
104
+ - [Preset selection strategy](./preset-selection-strategy.md)
105
+ - [Typed service path inventory](https://nick2bad4u.github.io/eslint-plugin-typefest/docs/developer/typed-paths)
@@ -0,0 +1,49 @@
1
+ ---
2
+ title: Overview
3
+ description: README-style overview for eslint-plugin-typefest.
4
+ ---
5
+
6
+ # eslint-plugin-typefest
7
+
8
+ ESLint plugin for teams that want consistent TypeScript-first conventions based on:
9
+
10
+ - [`type-fest`](https://github.com/sindresorhus/type-fest)
11
+ - [`ts-extras`](https://github.com/sindresorhus/ts-extras)
12
+
13
+ The plugin ships focused rule sets for modern Flat Config usage, with parser setup included in each preset.
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npm install --save-dev eslint-plugin-typefest typescript
19
+ ```
20
+
21
+ > `@typescript-eslint/parser` is loaded automatically by plugin presets.
22
+
23
+ ## Quick start (Flat Config)
24
+
25
+ ```ts
26
+ import typefest from "eslint-plugin-typefest";
27
+
28
+ export default [typefest.configs.recommended];
29
+ ```
30
+
31
+ That is enough for TypeScript files (`**/*.{ts,tsx,mts,cts}`).
32
+
33
+ ## Presets
34
+
35
+ | Preset | Preset page |
36
+ | ------------------------------------------------- | ------------------------------------------------------------------- |
37
+ | 🟒 `typefest.configs.minimal` | [Minimal](./presets/minimal.md) |
38
+ | 🟑 `typefest.configs.recommended` | [Recommended](./presets/recommended.md) |
39
+ | 🟠 `typefest.configs["recommended-type-checked"]` | [Recommended (type-checked)](./presets/recommended-type-checked.md) |
40
+ | πŸ”΄ `typefest.configs.strict` | [Strict](./presets/strict.md) |
41
+ | 🟣 `typefest.configs.all` | [All](./presets/all.md) |
42
+ | πŸ’  `typefest.configs["type-fest/types"]` | [type-fest/types](./presets/type-fest-types.md) |
43
+ | ✴️ `typefest.configs["ts-extras/type-guards"]` | [ts-extras/type-guards](./presets/ts-extras-type-guards.md) |
44
+
45
+ ## Next steps
46
+
47
+ - Open **Getting Started** in this sidebar.
48
+ - Browse [**Presets**](./presets/index.md) for preset-by-preset guidance.
49
+ - Use **Rules** to review every rule with examples.
@@ -0,0 +1,132 @@
1
+ # prefer-ts-extras-array-at
2
+
3
+ Prefer [`arrayAt`](https://github.com/sindresorhus/ts-extras/blob/main/source/array-at.ts) from `ts-extras` over `array.at(...)`.
4
+
5
+ `arrayAt(...)` preserves stronger element typing for indexed array access.
6
+
7
+ ## Targeted pattern scope
8
+
9
+ This rule focuses on direct `array.at(index)` calls that can be migrated to `arrayAt(array, index)` with deterministic fixes.
10
+
11
+ - `array.at(index)` call sites that can use `arrayAt(array, index)`.
12
+
13
+ Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `arrayAt(array, index)` migrations safe.
14
+
15
+ ## What this rule reports
16
+
17
+ This rule reports `array.at(index)` call sites when `arrayAt(array, index)` is the intended replacement.
18
+
19
+ - `array.at(index)` call sites that can use `arrayAt(array, index)`.
20
+
21
+ ## Why this rule exists
22
+
23
+ `arrayAt` keeps indexed access explicit and improves type inference for tuples and readonly arrays.
24
+
25
+ - Indexing logic is standardized across modules.
26
+ - Tuple element access needs fewer local casts.
27
+ - Call sites remain explicit about both source array and index.
28
+
29
+ ## ❌ Incorrect
30
+
31
+ ```ts
32
+ const firstStatus = statuses.at(0);
33
+ ```
34
+
35
+ ## βœ… Correct
36
+
37
+ ```ts
38
+ const firstStatus = arrayAt(statuses, 0);
39
+ ```
40
+
41
+ ## Behavior and migration notes
42
+
43
+ - Runtime semantics align with `Array.prototype.at`.
44
+ - Negative indexes are supported (`-1` means last element).
45
+ - Out-of-range access still returns `undefined`.
46
+
47
+ ## Additional examples
48
+
49
+ ### ❌ Incorrect β€” Additional example
50
+
51
+ ```ts
52
+ const selected = tuple.at(-1); // Weaker tuple index inference
53
+ ```
54
+
55
+ ### βœ… Correct β€” Additional example
56
+
57
+ ```ts
58
+ const selected = arrayAt(tuple, -1);
59
+ ```
60
+
61
+ ### βœ… Correct β€” Repository-wide usage
62
+
63
+ ```ts
64
+ const first = arrayAt(users, 0);
65
+ ```
66
+
67
+ ## ESLint flat config example
68
+
69
+ ```ts
70
+ import typefest from "eslint-plugin-typefest";
71
+
72
+ export default [
73
+ {
74
+ plugins: { typefest },
75
+ rules: {
76
+ "typefest/prefer-ts-extras-array-at": "error",
77
+ },
78
+ },
79
+ ];
80
+ ```
81
+
82
+ ## When not to use it
83
+
84
+ Disable this rule if native `.at()` usage is required by a local coding standard.
85
+
86
+ ## Package documentation
87
+
88
+ ts-extras package documentation:
89
+
90
+ Source file: [`source/array-at.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/array-at.ts)
91
+
92
+ ````ts
93
+ /**
94
+ Return the item at the given index like `Array#at()`, but with stronger typing for tuples. Supports `-1` on tuples.
95
+
96
+ This mirrors the runtime behavior of `Array#at()` and returns `undefined` for out-of-bounds indices. For tuples, a negative index of `-1` resolves to the tuple’s last element type. Positive literal indices for tuples resolve to the corresponding element type.
97
+
98
+ @example
99
+ ```
100
+ import {arrayAt} from 'ts-extras';
101
+
102
+ const tuple = ['abc', 123, true] as const;
103
+ const last = arrayAt(tuple, -1);
104
+ //=> true
105
+ // ^? true | undefined
106
+
107
+ const first = arrayAt(tuple, 0);
108
+ //=> 'abc'
109
+ // ^? 'abc' | undefined
110
+
111
+ const array = ['a', 'b', 'c'];
112
+ const maybeItem = arrayAt(array, -1);
113
+ //=> 'c'
114
+ // ^? string | undefined
115
+ ```
116
+
117
+ @category Improved builtin
118
+ */
119
+ ````
120
+
121
+ > **Rule catalog ID:** R001
122
+
123
+ ## Further reading
124
+
125
+ - [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
126
+ - [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
127
+ - [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
128
+
129
+ ## Adoption resources
130
+
131
+ - [Rule adoption checklist](./guides/adoption-checklist.md)
132
+ - [Rollout and fix safety](./guides/rollout-and-fix-safety.md)