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,147 @@
1
+ # prefer-ts-extras-assert-error
2
+
3
+ Require [`assertError`](https://github.com/sindresorhus/ts-extras/blob/main/source/assert-error.ts) from `ts-extras` over manual `instanceof Error` throw
4
+ guards.
5
+
6
+ ## Targeted pattern scope
7
+
8
+ This rule focuses on throw-only negative `instanceof Error` guards that map directly to `assertError(value)`.
9
+
10
+ ### Matched patterns
11
+
12
+ - `if (!(value instanceof Error)) { throw ... }`
13
+
14
+ Only `if` statements with no `else` branch and a throw-only consequent are
15
+ reported.
16
+
17
+ ### Detection boundaries
18
+
19
+ - ✅ Reports negative `instanceof Error` guards wrapped in `!()`.
20
+ - ❌ Does not report positive-form patterns like `if (value instanceof Error) { ... } else { throw ... }`.
21
+ - ❌ Does not report checks against custom error classes in this rule.
22
+ - ❌ Does not auto-fix.
23
+
24
+ These boundaries keep matching deterministic and avoid broad semantic overreach during migration.
25
+
26
+ ## What this rule reports
27
+
28
+ Throw-only negative `instanceof Error` guards that can be replaced with `assertError(value)`.
29
+
30
+ ## Why this rule exists
31
+
32
+ `assertError()` communicates intent directly: "this value must be an `Error`".
33
+ That reduces repetitive custom guard code in `catch` pipelines.
34
+
35
+ ## ❌ Incorrect
36
+
37
+ ```ts
38
+ if (!(error instanceof Error)) {
39
+ throw new TypeError("Expected Error");
40
+ }
41
+ ```
42
+
43
+ ## ✅ Correct
44
+
45
+ ```ts
46
+ assertError(error);
47
+ ```
48
+
49
+ ## Behavior and migration notes
50
+
51
+ - `assertError(value)` narrows unknown caught values to `Error`.
52
+ - This rule only targets throw-only negative guards with no `else` branch.
53
+ - Positive-form or custom-error-class guards are intentionally out of scope.
54
+
55
+ ## Additional examples
56
+
57
+ ### ❌ Incorrect — Additional example
58
+
59
+ ```ts
60
+ if (!(reason instanceof Error)) {
61
+ throw new TypeError("Expected Error instance");
62
+ }
63
+ ```
64
+
65
+ ### ✅ Correct — Additional example
66
+
67
+ ```ts
68
+ assertError(reason);
69
+ ```
70
+
71
+ ### ✅ Correct — Repository-wide usage
72
+
73
+ ```ts
74
+ assertError(caughtValue);
75
+ assertError(lastFailureReason);
76
+ ```
77
+
78
+ ## ESLint flat config example
79
+
80
+ ```ts
81
+ import typefest from "eslint-plugin-typefest";
82
+
83
+ export default [
84
+ {
85
+ plugins: { typefest },
86
+ rules: {
87
+ "typefest/prefer-ts-extras-assert-error": "error",
88
+ },
89
+ },
90
+ ];
91
+ ```
92
+
93
+ ## When not to use it
94
+
95
+ Disable this rule if your project intentionally avoids runtime helper
96
+ dependencies or enforces a different assertion utility layer.
97
+
98
+ ## Package documentation
99
+
100
+ ts-extras package documentation:
101
+
102
+ Source file: [`source/assert-error.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/assert-error.ts)
103
+
104
+ ````ts
105
+ /**
106
+ Assert that the given value is an `Error`.
107
+
108
+ If the value is not an `Error`, a helpful `TypeError` will be thrown.
109
+
110
+ This can be useful as any value could potentially be thrown, but in practice, it's always an `Error`. However, because of this, TypeScript makes the caught error in a try/catch statement `unknown`, which is inconvenient to deal with.
111
+
112
+ @example
113
+ ```
114
+ import {assertError} from 'ts-extras';
115
+
116
+ try {
117
+ fetchUnicorns();
118
+ } catch (error: unknown) {
119
+ assertError(error);
120
+
121
+ // `error` is now of type `Error`
122
+
123
+ if (error.message === 'Failed to fetch') {
124
+ retry();
125
+ return;
126
+ }
127
+
128
+ throw error;
129
+ }
130
+ ```
131
+
132
+ @category Type guard
133
+ */
134
+ ````
135
+
136
+ > **Rule catalog ID:** R012
137
+
138
+ ## Further reading
139
+
140
+ - [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
141
+ - [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
142
+ - [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
143
+
144
+ ## Adoption resources
145
+
146
+ - [Rule adoption checklist](./guides/adoption-checklist.md)
147
+ - [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
@@ -0,0 +1,139 @@
1
+ # prefer-ts-extras-assert-present
2
+
3
+ Require [`assertPresent`](https://github.com/sindresorhus/ts-extras/blob/main/source/assert-present.ts) from `ts-extras` over manual `== null` throw guards.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule focuses on throw-only nullish guards that map directly to `assertPresent(value)`.
8
+
9
+ ### Matched patterns
10
+
11
+ - `if (value == null) { throw ... }`
12
+ - `if (value === null || value === undefined) { throw ... }`
13
+ - `if (value === undefined || value === null) { throw ... }`
14
+
15
+ Only `if` statements that have no `else` branch and a throw-only consequent are
16
+ reported.
17
+
18
+ ### Detection boundaries
19
+
20
+ - ✅ Reports nullish guards written as `== null` or explicit `null/undefined` OR checks.
21
+ - ❌ Does not report a `null`-only guard (`value === null`) or `undefined`-only guard.
22
+ - ❌ Does not report branches that do more than throw.
23
+ - ❌ Does not auto-fix.
24
+
25
+ These boundaries keep matching deterministic and avoid broad semantic overreach during migration.
26
+
27
+ ## What this rule reports
28
+
29
+ Throw-only nullish guard blocks that can be replaced with `assertPresent(value)`.
30
+
31
+ ## Why this rule exists
32
+
33
+ `assertPresent()` communicates nullish-assertion intent and provides a reusable narrowing helper.
34
+
35
+ This is a high-signal utility for request handlers and parsing layers where
36
+ nullable inputs are common.
37
+
38
+ ## ❌ Incorrect
39
+
40
+ ```ts
41
+ if (payload == null) {
42
+ throw new Error("Missing payload");
43
+ }
44
+ ```
45
+
46
+ ## ✅ Correct
47
+
48
+ ```ts
49
+ assertPresent(payload);
50
+ ```
51
+
52
+ ## Behavior and migration notes
53
+
54
+ - `assertPresent(value)` narrows value to `NonNullable<T>`.
55
+ - The rule covers nullish guards (`== null` or explicit `null || undefined`) with throw-only consequents.
56
+ - Null-only or undefined-only assertions are intentionally left untouched.
57
+
58
+ ## Additional examples
59
+
60
+ ### ❌ Incorrect — Additional example
61
+
62
+ ```ts
63
+ if (input === null || input === undefined) {
64
+ throw new TypeError("input is required");
65
+ }
66
+ ```
67
+
68
+ ### ✅ Correct — Additional example
69
+
70
+ ```ts
71
+ assertPresent(input);
72
+ ```
73
+
74
+ ### ✅ Correct — Repository-wide usage
75
+
76
+ ```ts
77
+ assertPresent(currentUser);
78
+ assertPresent(sessionId);
79
+ ```
80
+
81
+ ## ESLint flat config example
82
+
83
+ ```ts
84
+ import typefest from "eslint-plugin-typefest";
85
+
86
+ export default [
87
+ {
88
+ plugins: { typefest },
89
+ rules: {
90
+ "typefest/prefer-ts-extras-assert-present": "error",
91
+ },
92
+ },
93
+ ];
94
+ ```
95
+
96
+ ## When not to use it
97
+
98
+ Disable this rule if your domain code requires custom error payloads inline at each nullish guard.
99
+
100
+ ## Package documentation
101
+
102
+ ts-extras package documentation:
103
+
104
+ Source file: [`source/assert-present.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/assert-present.ts)
105
+
106
+ ````ts
107
+ /**
108
+ Assert that the given value is present (non-nullable), meaning it is neither `null` nor `undefined`.
109
+
110
+ If the value is not present (`undefined` or `null`), a helpful `TypeError` will be thrown.
111
+
112
+ @example
113
+ ```
114
+ import {assertPresent} from 'ts-extras';
115
+
116
+ const unicorn = 'unicorn';
117
+ assertPresent(unicorn);
118
+
119
+ const notUnicorn = null;
120
+ assertPresent(notUnicorn);
121
+ //=> TypeError: Expected a present value, got `null`
122
+ ```
123
+
124
+ @category Type guard
125
+ */
126
+ ````
127
+
128
+ > **Rule catalog ID:** R013
129
+
130
+ ## Further reading
131
+
132
+ - [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
133
+ - [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
134
+ - [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
135
+
136
+ ## Adoption resources
137
+
138
+ - [Rule adoption checklist](./guides/adoption-checklist.md)
139
+ - [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
@@ -0,0 +1,125 @@
1
+ # prefer-ts-extras-is-defined-filter
2
+
3
+ Require [`isDefined`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-defined.ts) from `ts-extras` in `Array.prototype.filter` callbacks instead of inline undefined checks.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule only inspects inline `.filter(...)` predicates that perform explicit undefined checks.
8
+
9
+ - Inline undefined predicates inside `.filter(...)`, including:
10
+ - `filter((value) => value !== undefined)`
11
+ - `filter((value) => typeof value !== "undefined")`
12
+ - `filter((value): value is T => value !== undefined)`
13
+
14
+ Named predicate references and broader callback logic are not matched unless they keep this exact inline-check structure.
15
+
16
+ ## What this rule reports
17
+
18
+ This rule reports inline filter predicates that encode undefined checks and can be normalized with `isDefined`.
19
+
20
+ - Inline undefined predicates inside `.filter(...)`, including:
21
+ - `filter((value) => value !== undefined)`
22
+ - `filter((value) => typeof value !== "undefined")`
23
+ - `filter((value): value is T => value !== undefined)`
24
+
25
+ ## Why this rule exists
26
+
27
+ `filter(isDefined)` is a canonical narrowing form that removes repeated callback boilerplate.
28
+
29
+ - Filter chains are shorter and easier to scan.
30
+ - Narrowing to defined values is consistent.
31
+ - Inline predicate duplication is eliminated.
32
+
33
+ ## ❌ Incorrect
34
+
35
+ ```ts
36
+ const values = inputs.filter((value) => value !== undefined);
37
+ ```
38
+
39
+ ## ✅ Correct
40
+
41
+ ```ts
42
+ const values = inputs.filter(isDefined);
43
+ ```
44
+
45
+ ## Behavior and migration notes
46
+
47
+ - `array.filter(isDefined)` keeps elements where value is not `undefined`.
48
+ - Manual predicate bodies with additional side effects should not be auto-converted.
49
+ - Non-filter undefined checks belong to `prefer-ts-extras-is-defined`.
50
+
51
+ ## Additional examples
52
+
53
+ ### ❌ Incorrect — Additional example
54
+
55
+ ```ts
56
+ const ids = maybeIds.filter((id) => id !== undefined);
57
+ ```
58
+
59
+ ### ✅ Correct — Additional example
60
+
61
+ ```ts
62
+ const ids = maybeIds.filter(isDefined);
63
+ ```
64
+
65
+ ### ✅ Correct — Repository-wide usage
66
+
67
+ ```ts
68
+ const values = readings.filter(isDefined);
69
+ ```
70
+
71
+ ## ESLint flat config example
72
+
73
+ ```ts
74
+ import typefest from "eslint-plugin-typefest";
75
+
76
+ export default [
77
+ {
78
+ plugins: { typefest },
79
+ rules: {
80
+ "typefest/prefer-ts-extras-is-defined-filter": "error",
81
+ },
82
+ },
83
+ ];
84
+ ```
85
+
86
+ ## When not to use it
87
+
88
+ Disable this rule if your filters intentionally use named local predicates for domain-specific semantics.
89
+
90
+ ## Package documentation
91
+
92
+ ts-extras package documentation:
93
+
94
+ Source file: [`source/is-defined.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-defined.ts)
95
+
96
+ ````ts
97
+ /**
98
+ Check whether a value is defined, meaning it is not `undefined`.
99
+
100
+ This can be useful as a type guard, as for example, `[1, undefined].filter(Boolean)` does not always type-guard correctly.
101
+
102
+ @example
103
+ ```
104
+ import {isDefined} from 'ts-extras';
105
+
106
+ [1, undefined, 2].filter(isDefined);
107
+ //=> [1, 2]
108
+ ```
109
+
110
+ @category Type guard
111
+ */
112
+ ````
113
+
114
+ > **Rule catalog ID:** R015
115
+
116
+ ## Further reading
117
+
118
+ - [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
119
+ - [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
120
+ - [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
121
+
122
+ ## Adoption resources
123
+
124
+ - [Rule adoption checklist](./guides/adoption-checklist.md)
125
+ - [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
@@ -0,0 +1,147 @@
1
+ # prefer-ts-extras-is-defined
2
+
3
+ Require [`isDefined`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-defined.ts) from `ts-extras` for direct undefined checks outside `Array.prototype.filter` callbacks.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule scopes matching to direct undefined-check expressions outside `.filter(...)` callbacks.
8
+
9
+ - Direct undefined checks outside `Array.prototype.filter` callbacks:
10
+ - `value !== undefined`
11
+ - `undefined !== value`
12
+ - `typeof value !== "undefined"`
13
+ - `value === undefined`
14
+
15
+ Loose comparisons (`==` / `!=`) are intentionally ignored because they also match `null`, which is not equivalent to `isDefined(...)`.
16
+
17
+ Filter callbacks are handled by the dedicated filter rule; broader boolean expressions are only matched when they keep these forms.
18
+
19
+ ## What this rule reports
20
+
21
+ This rule reports direct undefined comparisons that should use `isDefined(...)` helpers.
22
+
23
+ - Direct undefined checks outside `Array.prototype.filter` callbacks:
24
+ - `value !== undefined`
25
+ - `undefined !== value`
26
+ - `typeof value !== "undefined"`
27
+ - `value === undefined`
28
+
29
+ ## Why this rule exists
30
+
31
+ `isDefined` turns repeated undefined comparisons into one canonical predicate.
32
+
33
+ - Guard intent is explicit at call sites.
34
+ - Narrowing style is consistent across modules.
35
+ - Repeated inline comparison variants are removed.
36
+
37
+ ## ❌ Incorrect
38
+
39
+ ```ts
40
+ if (value !== undefined) {
41
+ consume(value);
42
+ }
43
+
44
+ if (value === undefined) {
45
+ return;
46
+ }
47
+ ```
48
+
49
+ ## ✅ Correct
50
+
51
+ ```ts
52
+ if (isDefined(value)) {
53
+ consume(value);
54
+ }
55
+
56
+ if (!isDefined(value)) {
57
+ return;
58
+ }
59
+ ```
60
+
61
+ ## Behavior and migration notes
62
+
63
+ - `isDefined(value)` is equivalent to `value !== undefined`.
64
+ - `!isDefined(value)` is equivalent to `value === undefined`.
65
+ - Loose `value != undefined` and `value == undefined` checks are not auto-fixed by this rule because replacing them with `isDefined` would change runtime behavior for `null`.
66
+ - Autofix is intentionally skipped for comparisons whose value resolves to `@typescript-eslint` AST node types (for example `TSESTree.Node | undefined`) to avoid pathological type-analysis performance cliffs in downstream lint passes.
67
+ - Filter-specific patterns are intentionally covered by `prefer-ts-extras-is-defined-filter`.
68
+
69
+ ## Additional examples
70
+
71
+ ### ❌ Incorrect — Additional example
72
+
73
+ ```ts
74
+ if (sessionId !== undefined) {
75
+ connect(sessionId);
76
+ }
77
+ ```
78
+
79
+ ### ✅ Correct — Additional example
80
+
81
+ ```ts
82
+ if (isDefined(sessionId)) {
83
+ connect(sessionId);
84
+ }
85
+ ```
86
+
87
+ ### ✅ Correct — Repository-wide usage
88
+
89
+ ```ts
90
+ const hasValue = isDefined(input);
91
+ ```
92
+
93
+ ## ESLint flat config example
94
+
95
+ ```ts
96
+ import typefest from "eslint-plugin-typefest";
97
+
98
+ export default [
99
+ {
100
+ plugins: { typefest },
101
+ rules: {
102
+ "typefest/prefer-ts-extras-is-defined": "error",
103
+ },
104
+ },
105
+ ];
106
+ ```
107
+
108
+ ## When not to use it
109
+
110
+ Disable this rule if your team uses explicit `=== undefined` comparisons as a required style convention.
111
+
112
+ ## Package documentation
113
+
114
+ ts-extras package documentation:
115
+
116
+ Source file: [`source/is-defined.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-defined.ts)
117
+
118
+ ````ts
119
+ /**
120
+ Check whether a value is defined, meaning it is not `undefined`.
121
+
122
+ This can be useful as a type guard, as for example, `[1, undefined].filter(Boolean)` does not always type-guard correctly.
123
+
124
+ @example
125
+ ```
126
+ import {isDefined} from 'ts-extras';
127
+
128
+ [1, undefined, 2].filter(isDefined);
129
+ //=> [1, 2]
130
+ ```
131
+
132
+ @category Type guard
133
+ */
134
+ ````
135
+
136
+ > **Rule catalog ID:** R014
137
+
138
+ ## Further reading
139
+
140
+ - [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
141
+ - [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
142
+ - [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
143
+
144
+ ## Adoption resources
145
+
146
+ - [Rule adoption checklist](./guides/adoption-checklist.md)
147
+ - [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
@@ -0,0 +1,142 @@
1
+ # prefer-ts-extras-is-empty
2
+
3
+ Require [`isEmpty`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-empty.ts) from `ts-extras` over direct `array.length === 0` checks.
4
+
5
+ ## Targeted pattern scope
6
+
7
+ This rule only matches strict zero-length comparisons against `.length` that can be rewritten as `isEmpty(array)`.
8
+
9
+ - Direct empty-array checks using length equality:
10
+ - `array.length === 0`
11
+ - `0 === array.length`
12
+
13
+ Syntactically similar alternatives are intentionally out of scope unless they preserve the same AST shape.
14
+
15
+ ## What this rule reports
16
+
17
+ This rule reports strict empty-check comparisons that can be replaced with `isEmpty(array)`.
18
+
19
+ - Direct empty-array checks using length equality:
20
+ - `array.length === 0`
21
+ - `0 === array.length`
22
+
23
+ ## Why this rule exists
24
+
25
+ `isEmpty` gives one canonical emptiness predicate instead of repeated length comparisons.
26
+
27
+ - Emptiness checks are easier to search and standardize.
28
+ - Predicate style is consistent with other `ts-extras` guards.
29
+ - Repeated comparison variants are removed from call sites.
30
+
31
+ ## ❌ Incorrect
32
+
33
+ ```ts
34
+ if (items.length === 0) {
35
+ return;
36
+ }
37
+ ```
38
+
39
+ ## ✅ Correct
40
+
41
+ ```ts
42
+ if (isEmpty(items)) {
43
+ return;
44
+ }
45
+ ```
46
+
47
+ ## Behavior and migration notes
48
+
49
+ - `isEmpty(array)` is equivalent to `array.length === 0`.
50
+ - Use `!isEmpty(array)` for non-empty checks.
51
+ - This rule is about array emptiness checks, not object key-count checks.
52
+
53
+ ## Additional examples
54
+
55
+ ### ❌ Incorrect — Additional example
56
+
57
+ ```ts
58
+ if (items.length === 0) {
59
+ return;
60
+ }
61
+ ```
62
+
63
+ ### ✅ Correct — Additional example
64
+
65
+ ```ts
66
+ if (isEmpty(items)) {
67
+ return;
68
+ }
69
+ ```
70
+
71
+ ### ✅ Correct — Repository-wide usage
72
+
73
+ ```ts
74
+ const hasRows = !isEmpty(rows);
75
+ ```
76
+
77
+ ## ESLint flat config example
78
+
79
+ ```ts
80
+ import typefest from "eslint-plugin-typefest";
81
+
82
+ export default [
83
+ {
84
+ plugins: { typefest },
85
+ rules: {
86
+ "typefest/prefer-ts-extras-is-empty": "error",
87
+ },
88
+ },
89
+ ];
90
+ ```
91
+
92
+ ## When not to use it
93
+
94
+ Disable this rule if your team requires direct `.length` comparisons for emptiness checks.
95
+
96
+ ## Package documentation
97
+
98
+ ts-extras package documentation:
99
+
100
+ Source file: [`source/is-empty.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-empty.ts)
101
+
102
+ ````ts
103
+ /**
104
+ Check whether an array is empty.
105
+
106
+ This is useful because doing `array.length === 0` on its own won't work as a type-guard.
107
+
108
+ @example
109
+ ```
110
+ import {isEmpty} from 'ts-extras';
111
+
112
+ isEmpty([1, 2, 3]);
113
+ //=> false
114
+
115
+ isEmpty([]);
116
+ //=> true
117
+
118
+ // Works with tuples
119
+ const tuple: [string, number] | [] = Math.random() > 0.5 ? ['hello', 42] : [];
120
+ if (isEmpty(tuple)) {
121
+ // tuple is now typed as []
122
+ } else {
123
+ // tuple is now typed as [string, number]
124
+ }
125
+ ```
126
+
127
+ @category Type guard
128
+ */
129
+ ````
130
+
131
+ > **Rule catalog ID:** R016
132
+
133
+ ## Further reading
134
+
135
+ - [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
136
+ - [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
137
+ - [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
138
+
139
+ ## Adoption resources
140
+
141
+ - [Rule adoption checklist](./guides/adoption-checklist.md)
142
+ - [Rollout and fix safety](./guides/rollout-and-fix-safety.md)