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.
- package/CHANGELOG.md +1814 -0
- package/LICENSE +21 -0
- package/README.md +282 -0
- package/dist/_internal/array-like-expression.d.ts +67 -0
- package/dist/_internal/array-like-expression.d.ts.map +1 -0
- package/dist/_internal/array-like-expression.js +179 -0
- package/dist/_internal/array-like-expression.js.map +1 -0
- package/dist/_internal/array-method-call-rule.d.ts +34 -0
- package/dist/_internal/array-method-call-rule.d.ts.map +1 -0
- package/dist/_internal/array-method-call-rule.js +49 -0
- package/dist/_internal/array-method-call-rule.js.map +1 -0
- package/dist/_internal/ast-node.d.ts +23 -0
- package/dist/_internal/ast-node.d.ts.map +1 -0
- package/dist/_internal/ast-node.js +38 -0
- package/dist/_internal/ast-node.js.map +1 -0
- package/dist/_internal/bounded-cache.d.ts +42 -0
- package/dist/_internal/bounded-cache.d.ts.map +1 -0
- package/dist/_internal/bounded-cache.js +57 -0
- package/dist/_internal/bounded-cache.js.map +1 -0
- package/dist/_internal/constrained-type-at-location.d.ts +31 -0
- package/dist/_internal/constrained-type-at-location.d.ts.map +1 -0
- package/dist/_internal/constrained-type-at-location.js +61 -0
- package/dist/_internal/constrained-type-at-location.js.map +1 -0
- package/dist/_internal/cycle-safe-linked-search.d.ts +48 -0
- package/dist/_internal/cycle-safe-linked-search.d.ts.map +1 -0
- package/dist/_internal/cycle-safe-linked-search.js +70 -0
- package/dist/_internal/cycle-safe-linked-search.js.map +1 -0
- package/dist/_internal/expression-boolean-memoizer.d.ts +17 -0
- package/dist/_internal/expression-boolean-memoizer.d.ts.map +1 -0
- package/dist/_internal/expression-boolean-memoizer.js +23 -0
- package/dist/_internal/expression-boolean-memoizer.js.map +1 -0
- package/dist/_internal/filter-callback.d.ts +56 -0
- package/dist/_internal/filter-callback.d.ts.map +1 -0
- package/dist/_internal/filter-callback.js +100 -0
- package/dist/_internal/filter-callback.js.map +1 -0
- package/dist/_internal/global-identifier-member-call.d.ts +23 -0
- package/dist/_internal/global-identifier-member-call.d.ts.map +1 -0
- package/dist/_internal/global-identifier-member-call.js +25 -0
- package/dist/_internal/global-identifier-member-call.js.map +1 -0
- package/dist/_internal/global-member-call-rule.d.ts +36 -0
- package/dist/_internal/global-member-call-rule.d.ts.map +1 -0
- package/dist/_internal/global-member-call-rule.js +52 -0
- package/dist/_internal/global-member-call-rule.js.map +1 -0
- package/dist/_internal/import-analysis.d.ts +45 -0
- package/dist/_internal/import-analysis.d.ts.map +1 -0
- package/dist/_internal/import-analysis.js +113 -0
- package/dist/_internal/import-analysis.js.map +1 -0
- package/dist/_internal/import-aware-fixes.d.ts +31 -0
- package/dist/_internal/import-aware-fixes.d.ts.map +1 -0
- package/dist/_internal/import-aware-fixes.js +38 -0
- package/dist/_internal/import-aware-fixes.js.map +1 -0
- package/dist/_internal/import-fix-coordinator.d.ts +43 -0
- package/dist/_internal/import-fix-coordinator.d.ts.map +1 -0
- package/dist/_internal/import-fix-coordinator.js +71 -0
- package/dist/_internal/import-fix-coordinator.js.map +1 -0
- package/dist/_internal/import-insertion.d.ts +27 -0
- package/dist/_internal/import-insertion.d.ts.map +1 -0
- package/dist/_internal/import-insertion.js +295 -0
- package/dist/_internal/import-insertion.js.map +1 -0
- package/dist/_internal/imported-type-aliases.d.ts +140 -0
- package/dist/_internal/imported-type-aliases.d.ts.map +1 -0
- package/dist/_internal/imported-type-aliases.js +316 -0
- package/dist/_internal/imported-type-aliases.js.map +1 -0
- package/dist/_internal/imported-value-symbols.d.ts +157 -0
- package/dist/_internal/imported-value-symbols.d.ts.map +1 -0
- package/dist/_internal/imported-value-symbols.js +478 -0
- package/dist/_internal/imported-value-symbols.js.map +1 -0
- package/dist/_internal/member-call.d.ts +53 -0
- package/dist/_internal/member-call.d.ts.map +1 -0
- package/dist/_internal/member-call.js +48 -0
- package/dist/_internal/member-call.js.map +1 -0
- package/dist/_internal/module-source.d.ts +11 -0
- package/dist/_internal/module-source.d.ts.map +1 -0
- package/dist/_internal/module-source.js +11 -0
- package/dist/_internal/module-source.js.map +1 -0
- package/dist/_internal/normalize-expression-text.d.ts +26 -0
- package/dist/_internal/normalize-expression-text.d.ts.map +1 -0
- package/dist/_internal/normalize-expression-text.js +182 -0
- package/dist/_internal/normalize-expression-text.js.map +1 -0
- package/dist/_internal/nullish-comparison.d.ts +43 -0
- package/dist/_internal/nullish-comparison.d.ts.map +1 -0
- package/dist/_internal/nullish-comparison.js +147 -0
- package/dist/_internal/nullish-comparison.js.map +1 -0
- package/dist/_internal/plugin-settings.d.ts +32 -0
- package/dist/_internal/plugin-settings.d.ts.map +1 -0
- package/dist/_internal/plugin-settings.js +118 -0
- package/dist/_internal/plugin-settings.js.map +1 -0
- package/dist/_internal/report-adapter.d.ts +25 -0
- package/dist/_internal/report-adapter.d.ts.map +1 -0
- package/dist/_internal/report-adapter.js +36 -0
- package/dist/_internal/report-adapter.js.map +1 -0
- package/dist/_internal/rule-catalog.d.ts +51 -0
- package/dist/_internal/rule-catalog.d.ts.map +1 -0
- package/dist/_internal/rule-catalog.js +162 -0
- package/dist/_internal/rule-catalog.js.map +1 -0
- package/dist/_internal/rule-docs-metadata.d.ts +37 -0
- package/dist/_internal/rule-docs-metadata.d.ts.map +1 -0
- package/dist/_internal/rule-docs-metadata.js +192 -0
- package/dist/_internal/rule-docs-metadata.js.map +1 -0
- package/dist/_internal/rule-docs-url.d.ts +15 -0
- package/dist/_internal/rule-docs-url.d.ts.map +1 -0
- package/dist/_internal/rule-docs-url.js +15 -0
- package/dist/_internal/rule-docs-url.js.map +1 -0
- package/dist/_internal/rule-reporting.d.ts +71 -0
- package/dist/_internal/rule-reporting.d.ts.map +1 -0
- package/dist/_internal/rule-reporting.js +89 -0
- package/dist/_internal/rule-reporting.js.map +1 -0
- package/dist/_internal/rules-registry.d.ts +14 -0
- package/dist/_internal/rules-registry.d.ts.map +1 -0
- package/dist/_internal/rules-registry.js +165 -0
- package/dist/_internal/rules-registry.js.map +1 -0
- package/dist/_internal/safe-type-operation.d.ts +89 -0
- package/dist/_internal/safe-type-operation.d.ts.map +1 -0
- package/dist/_internal/safe-type-operation.js +147 -0
- package/dist/_internal/safe-type-operation.js.map +1 -0
- package/dist/_internal/scope-resolution.d.ts +20 -0
- package/dist/_internal/scope-resolution.d.ts.map +1 -0
- package/dist/_internal/scope-resolution.js +21 -0
- package/dist/_internal/scope-resolution.js.map +1 -0
- package/dist/_internal/scope-variable.d.ts +17 -0
- package/dist/_internal/scope-variable.d.ts.map +1 -0
- package/dist/_internal/scope-variable.js +30 -0
- package/dist/_internal/scope-variable.js.map +1 -0
- package/dist/_internal/set-membership.d.ts +6 -0
- package/dist/_internal/set-membership.d.ts.map +1 -0
- package/dist/_internal/set-membership.js +11 -0
- package/dist/_internal/set-membership.js.map +1 -0
- package/dist/_internal/text-character.d.ts +18 -0
- package/dist/_internal/text-character.d.ts.map +1 -0
- package/dist/_internal/text-character.js +69 -0
- package/dist/_internal/text-character.js.map +1 -0
- package/dist/_internal/throw-consequent.d.ts +22 -0
- package/dist/_internal/throw-consequent.d.ts.map +1 -0
- package/dist/_internal/throw-consequent.js +48 -0
- package/dist/_internal/throw-consequent.js.map +1 -0
- package/dist/_internal/throw-type-error.d.ts +19 -0
- package/dist/_internal/throw-type-error.d.ts.map +1 -0
- package/dist/_internal/throw-type-error.js +24 -0
- package/dist/_internal/throw-type-error.js.map +1 -0
- package/dist/_internal/type-checker-compat.d.ts +80 -0
- package/dist/_internal/type-checker-compat.d.ts.map +1 -0
- package/dist/_internal/type-checker-compat.js +104 -0
- package/dist/_internal/type-checker-compat.js.map +1 -0
- package/dist/_internal/type-predicate-autofix-safety.d.ts +20 -0
- package/dist/_internal/type-predicate-autofix-safety.d.ts.map +1 -0
- package/dist/_internal/type-predicate-autofix-safety.js +58 -0
- package/dist/_internal/type-predicate-autofix-safety.js.map +1 -0
- package/dist/_internal/type-reference-node.d.ts +19 -0
- package/dist/_internal/type-reference-node.d.ts.map +1 -0
- package/dist/_internal/type-reference-node.js +14 -0
- package/dist/_internal/type-reference-node.js.map +1 -0
- package/dist/_internal/typed-member-call-rule.d.ts +35 -0
- package/dist/_internal/typed-member-call-rule.d.ts.map +1 -0
- package/dist/_internal/typed-member-call-rule.js +50 -0
- package/dist/_internal/typed-member-call-rule.js.map +1 -0
- package/dist/_internal/typed-path-telemetry.d.ts +58 -0
- package/dist/_internal/typed-path-telemetry.d.ts.map +1 -0
- package/dist/_internal/typed-path-telemetry.js +114 -0
- package/dist/_internal/typed-path-telemetry.js.map +1 -0
- package/dist/_internal/typed-rule.d.ts +142 -0
- package/dist/_internal/typed-rule.d.ts.map +1 -0
- package/dist/_internal/typed-rule.js +197 -0
- package/dist/_internal/typed-rule.js.map +1 -0
- package/dist/_internal/typefest-config-references.d.ts +45 -0
- package/dist/_internal/typefest-config-references.d.ts.map +1 -0
- package/dist/_internal/typefest-config-references.js +98 -0
- package/dist/_internal/typefest-config-references.js.map +1 -0
- package/dist/_internal/typescript-eslint-node-autofix.d.ts +32 -0
- package/dist/_internal/typescript-eslint-node-autofix.d.ts.map +1 -0
- package/dist/_internal/typescript-eslint-node-autofix.js +495 -0
- package/dist/_internal/typescript-eslint-node-autofix.js.map +1 -0
- package/dist/_internal/value-rewrite-autofix-safety.d.ts +33 -0
- package/dist/_internal/value-rewrite-autofix-safety.d.ts.map +1 -0
- package/dist/_internal/value-rewrite-autofix-safety.js +103 -0
- package/dist/_internal/value-rewrite-autofix-safety.js.map +1 -0
- package/dist/plugin.cjs +9718 -0
- package/dist/plugin.cjs.map +7 -0
- package/dist/plugin.d.cts +76 -0
- package/dist/plugin.d.ts +76 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +206 -0
- package/dist/plugin.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-at.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-at.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-at.js +66 -0
- package/dist/rules/prefer-ts-extras-array-at.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-concat.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-concat.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-concat.js +66 -0
- package/dist/rules/prefer-ts-extras-array-concat.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find-last-index.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-find-last-index.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find-last-index.js +63 -0
- package/dist/rules/prefer-ts-extras-array-find-last-index.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find-last.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-find-last.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find-last.js +66 -0
- package/dist/rules/prefer-ts-extras-array-find-last.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-find.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find.js +63 -0
- package/dist/rules/prefer-ts-extras-array-find.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-first.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-first.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-first.js +107 -0
- package/dist/rules/prefer-ts-extras-array-first.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-includes.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-includes.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-includes.js +89 -0
- package/dist/rules/prefer-ts-extras-array-includes.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-join.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-join.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-join.js +66 -0
- package/dist/rules/prefer-ts-extras-array-join.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-last.d.ts +8 -0
- package/dist/rules/prefer-ts-extras-array-last.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-last.js +132 -0
- package/dist/rules/prefer-ts-extras-array-last.js.map +1 -0
- package/dist/rules/prefer-ts-extras-as-writable.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-as-writable.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-as-writable.js +110 -0
- package/dist/rules/prefer-ts-extras-as-writable.js.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-defined.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-assert-defined.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-defined.js +182 -0
- package/dist/rules/prefer-ts-extras-assert-defined.js.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-error.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-assert-error.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-error.js +152 -0
- package/dist/rules/prefer-ts-extras-assert-error.js.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-present.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-assert-present.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-present.js +266 -0
- package/dist/rules/prefer-ts-extras-assert-present.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-defined-filter.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-defined-filter.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-defined-filter.js +90 -0
- package/dist/rules/prefer-ts-extras-is-defined-filter.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-defined.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-defined.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-defined.js +179 -0
- package/dist/rules/prefer-ts-extras-is-defined.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-empty.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-empty.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-empty.js +116 -0
- package/dist/rules/prefer-ts-extras-is-empty.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-equal-type.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-equal-type.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-equal-type.js +138 -0
- package/dist/rules/prefer-ts-extras-is-equal-type.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-finite.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-finite.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-finite.js +61 -0
- package/dist/rules/prefer-ts-extras-is-finite.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-infinite.d.ts +8 -0
- package/dist/rules/prefer-ts-extras-is-infinite.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-infinite.js +178 -0
- package/dist/rules/prefer-ts-extras-is-infinite.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-integer.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-integer.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-integer.js +61 -0
- package/dist/rules/prefer-ts-extras-is-integer.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-present-filter.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-present-filter.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-present-filter.js +216 -0
- package/dist/rules/prefer-ts-extras-is-present-filter.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-present.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-present.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-present.js +217 -0
- package/dist/rules/prefer-ts-extras-is-present.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-safe-integer.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-safe-integer.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-safe-integer.js +61 -0
- package/dist/rules/prefer-ts-extras-is-safe-integer.js.map +1 -0
- package/dist/rules/prefer-ts-extras-key-in.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-key-in.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-key-in.js +124 -0
- package/dist/rules/prefer-ts-extras-key-in.js.map +1 -0
- package/dist/rules/prefer-ts-extras-not.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-not.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-not.js +136 -0
- package/dist/rules/prefer-ts-extras-not.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-entries.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-entries.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-entries.js +59 -0
- package/dist/rules/prefer-ts-extras-object-entries.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-from-entries.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-from-entries.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-from-entries.js +59 -0
- package/dist/rules/prefer-ts-extras-object-from-entries.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-has-in.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-has-in.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-has-in.js +79 -0
- package/dist/rules/prefer-ts-extras-object-has-in.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-has-own.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-has-own.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-has-own.js +82 -0
- package/dist/rules/prefer-ts-extras-object-has-own.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-keys.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-keys.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-keys.js +59 -0
- package/dist/rules/prefer-ts-extras-object-keys.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-values.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-values.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-values.js +59 -0
- package/dist/rules/prefer-ts-extras-object-values.js.map +1 -0
- package/dist/rules/prefer-ts-extras-safe-cast-to.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-safe-cast-to.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-safe-cast-to.js +159 -0
- package/dist/rules/prefer-ts-extras-safe-cast-to.js.map +1 -0
- package/dist/rules/prefer-ts-extras-set-has.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-set-has.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-set-has.js +304 -0
- package/dist/rules/prefer-ts-extras-set-has.js.map +1 -0
- package/dist/rules/prefer-ts-extras-string-split.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-string-split.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-string-split.js +166 -0
- package/dist/rules/prefer-ts-extras-string-split.js.map +1 -0
- package/dist/rules/prefer-type-fest-abstract-constructor.d.ts +13 -0
- package/dist/rules/prefer-type-fest-abstract-constructor.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-abstract-constructor.js +65 -0
- package/dist/rules/prefer-type-fest-abstract-constructor.js.map +1 -0
- package/dist/rules/prefer-type-fest-arrayable.d.ts +13 -0
- package/dist/rules/prefer-type-fest-arrayable.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-arrayable.js +123 -0
- package/dist/rules/prefer-type-fest-arrayable.js.map +1 -0
- package/dist/rules/prefer-type-fest-async-return-type.d.ts +13 -0
- package/dist/rules/prefer-type-fest-async-return-type.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-async-return-type.js +92 -0
- package/dist/rules/prefer-type-fest-async-return-type.js.map +1 -0
- package/dist/rules/prefer-type-fest-conditional-pick.d.ts +13 -0
- package/dist/rules/prefer-type-fest-conditional-pick.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-conditional-pick.js +74 -0
- package/dist/rules/prefer-type-fest-conditional-pick.js.map +1 -0
- package/dist/rules/prefer-type-fest-constructor.d.ts +13 -0
- package/dist/rules/prefer-type-fest-constructor.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-constructor.js +67 -0
- package/dist/rules/prefer-type-fest-constructor.js.map +1 -0
- package/dist/rules/prefer-type-fest-except.d.ts +13 -0
- package/dist/rules/prefer-type-fest-except.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-except.js +105 -0
- package/dist/rules/prefer-type-fest-except.js.map +1 -0
- package/dist/rules/prefer-type-fest-if.d.ts +13 -0
- package/dist/rules/prefer-type-fest-if.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-if.js +79 -0
- package/dist/rules/prefer-type-fest-if.js.map +1 -0
- package/dist/rules/prefer-type-fest-iterable-element.d.ts +13 -0
- package/dist/rules/prefer-type-fest-iterable-element.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-iterable-element.js +76 -0
- package/dist/rules/prefer-type-fest-iterable-element.js.map +1 -0
- package/dist/rules/prefer-type-fest-json-array.d.ts +13 -0
- package/dist/rules/prefer-type-fest-json-array.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-json-array.js +164 -0
- package/dist/rules/prefer-type-fest-json-array.js.map +1 -0
- package/dist/rules/prefer-type-fest-json-object.d.ts +13 -0
- package/dist/rules/prefer-type-fest-json-object.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-json-object.js +102 -0
- package/dist/rules/prefer-type-fest-json-object.js.map +1 -0
- package/dist/rules/prefer-type-fest-json-primitive.d.ts +13 -0
- package/dist/rules/prefer-type-fest-json-primitive.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-json-primitive.js +112 -0
- package/dist/rules/prefer-type-fest-json-primitive.js.map +1 -0
- package/dist/rules/prefer-type-fest-json-value.d.ts +13 -0
- package/dist/rules/prefer-type-fest-json-value.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-json-value.js +109 -0
- package/dist/rules/prefer-type-fest-json-value.js.map +1 -0
- package/dist/rules/prefer-type-fest-keys-of-union.d.ts +13 -0
- package/dist/rules/prefer-type-fest-keys-of-union.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-keys-of-union.js +74 -0
- package/dist/rules/prefer-type-fest-keys-of-union.js.map +1 -0
- package/dist/rules/prefer-type-fest-literal-union.d.ts +13 -0
- package/dist/rules/prefer-type-fest-literal-union.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-literal-union.js +181 -0
- package/dist/rules/prefer-type-fest-literal-union.js.map +1 -0
- package/dist/rules/prefer-type-fest-merge-exclusive.d.ts +13 -0
- package/dist/rules/prefer-type-fest-merge-exclusive.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-merge-exclusive.js +63 -0
- package/dist/rules/prefer-type-fest-merge-exclusive.js.map +1 -0
- package/dist/rules/prefer-type-fest-non-empty-tuple.d.ts +13 -0
- package/dist/rules/prefer-type-fest-non-empty-tuple.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-non-empty-tuple.js +133 -0
- package/dist/rules/prefer-type-fest-non-empty-tuple.js.map +1 -0
- package/dist/rules/prefer-type-fest-omit-index-signature.d.ts +13 -0
- package/dist/rules/prefer-type-fest-omit-index-signature.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-omit-index-signature.js +74 -0
- package/dist/rules/prefer-type-fest-omit-index-signature.js.map +1 -0
- package/dist/rules/prefer-type-fest-partial-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-partial-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-partial-deep.js +63 -0
- package/dist/rules/prefer-type-fest-partial-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-primitive.d.ts +13 -0
- package/dist/rules/prefer-type-fest-primitive.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-primitive.js +102 -0
- package/dist/rules/prefer-type-fest-primitive.js.map +1 -0
- package/dist/rules/prefer-type-fest-promisable.d.ts +13 -0
- package/dist/rules/prefer-type-fest-promisable.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-promisable.js +167 -0
- package/dist/rules/prefer-type-fest-promisable.js.map +1 -0
- package/dist/rules/prefer-type-fest-readonly-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-readonly-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-readonly-deep.js +63 -0
- package/dist/rules/prefer-type-fest-readonly-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-require-all-or-none.d.ts +13 -0
- package/dist/rules/prefer-type-fest-require-all-or-none.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-require-all-or-none.js +75 -0
- package/dist/rules/prefer-type-fest-require-all-or-none.js.map +1 -0
- package/dist/rules/prefer-type-fest-require-at-least-one.d.ts +13 -0
- package/dist/rules/prefer-type-fest-require-at-least-one.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-require-at-least-one.js +74 -0
- package/dist/rules/prefer-type-fest-require-at-least-one.js.map +1 -0
- package/dist/rules/prefer-type-fest-require-exactly-one.d.ts +13 -0
- package/dist/rules/prefer-type-fest-require-exactly-one.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-require-exactly-one.js +102 -0
- package/dist/rules/prefer-type-fest-require-exactly-one.js.map +1 -0
- package/dist/rules/prefer-type-fest-require-one-or-none.d.ts +13 -0
- package/dist/rules/prefer-type-fest-require-one-or-none.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-require-one-or-none.js +74 -0
- package/dist/rules/prefer-type-fest-require-one-or-none.js.map +1 -0
- package/dist/rules/prefer-type-fest-required-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-required-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-required-deep.js +63 -0
- package/dist/rules/prefer-type-fest-required-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-schema.d.ts +13 -0
- package/dist/rules/prefer-type-fest-schema.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-schema.js +74 -0
- package/dist/rules/prefer-type-fest-schema.js.map +1 -0
- package/dist/rules/prefer-type-fest-set-non-nullable.d.ts +13 -0
- package/dist/rules/prefer-type-fest-set-non-nullable.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-set-non-nullable.js +74 -0
- package/dist/rules/prefer-type-fest-set-non-nullable.js.map +1 -0
- package/dist/rules/prefer-type-fest-set-optional.d.ts +13 -0
- package/dist/rules/prefer-type-fest-set-optional.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-set-optional.js +74 -0
- package/dist/rules/prefer-type-fest-set-optional.js.map +1 -0
- package/dist/rules/prefer-type-fest-set-readonly.d.ts +13 -0
- package/dist/rules/prefer-type-fest-set-readonly.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-set-readonly.js +74 -0
- package/dist/rules/prefer-type-fest-set-readonly.js.map +1 -0
- package/dist/rules/prefer-type-fest-set-required.d.ts +13 -0
- package/dist/rules/prefer-type-fest-set-required.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-set-required.js +74 -0
- package/dist/rules/prefer-type-fest-set-required.js.map +1 -0
- package/dist/rules/prefer-type-fest-simplify.d.ts +13 -0
- package/dist/rules/prefer-type-fest-simplify.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-simplify.js +75 -0
- package/dist/rules/prefer-type-fest-simplify.js.map +1 -0
- package/dist/rules/prefer-type-fest-tagged-brands.d.ts +13 -0
- package/dist/rules/prefer-type-fest-tagged-brands.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-tagged-brands.js +174 -0
- package/dist/rules/prefer-type-fest-tagged-brands.js.map +1 -0
- package/dist/rules/prefer-type-fest-tuple-of.d.ts +14 -0
- package/dist/rules/prefer-type-fest-tuple-of.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-tuple-of.js +132 -0
- package/dist/rules/prefer-type-fest-tuple-of.js.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-array.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unknown-array.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-array.js +111 -0
- package/dist/rules/prefer-type-fest-unknown-array.js.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-map.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unknown-map.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-map.js +82 -0
- package/dist/rules/prefer-type-fest-unknown-map.js.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-record.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unknown-record.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-record.js +77 -0
- package/dist/rules/prefer-type-fest-unknown-record.js.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-set.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unknown-set.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-set.js +81 -0
- package/dist/rules/prefer-type-fest-unknown-set.js.map +1 -0
- package/dist/rules/prefer-type-fest-unwrap-tagged.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unwrap-tagged.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unwrap-tagged.js +74 -0
- package/dist/rules/prefer-type-fest-unwrap-tagged.js.map +1 -0
- package/dist/rules/prefer-type-fest-value-of.d.ts +13 -0
- package/dist/rules/prefer-type-fest-value-of.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-value-of.js +74 -0
- package/dist/rules/prefer-type-fest-value-of.js.map +1 -0
- package/dist/rules/prefer-type-fest-writable-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-writable-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-writable-deep.js +64 -0
- package/dist/rules/prefer-type-fest-writable-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-writable.d.ts +13 -0
- package/dist/rules/prefer-type-fest-writable.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-writable.js +129 -0
- package/dist/rules/prefer-type-fest-writable.js.map +1 -0
- package/docs/rules/getting-started.md +74 -0
- package/docs/rules/guides/adoption-checklist.md +37 -0
- package/docs/rules/guides/preset-selection-strategy.md +87 -0
- package/docs/rules/guides/rollout-and-fix-safety.md +42 -0
- package/docs/rules/guides/snapshot-testing.md +121 -0
- package/docs/rules/guides/type-aware-linting-readiness.md +105 -0
- package/docs/rules/overview.md +49 -0
- package/docs/rules/prefer-ts-extras-array-at.md +132 -0
- package/docs/rules/prefer-ts-extras-array-concat.md +138 -0
- package/docs/rules/prefer-ts-extras-array-find-last-index.md +108 -0
- package/docs/rules/prefer-ts-extras-array-find-last.md +108 -0
- package/docs/rules/prefer-ts-extras-array-find.md +108 -0
- package/docs/rules/prefer-ts-extras-array-first.md +132 -0
- package/docs/rules/prefer-ts-extras-array-includes.md +135 -0
- package/docs/rules/prefer-ts-extras-array-join.md +132 -0
- package/docs/rules/prefer-ts-extras-array-last.md +132 -0
- package/docs/rules/prefer-ts-extras-as-writable.md +124 -0
- package/docs/rules/prefer-ts-extras-assert-defined.md +140 -0
- package/docs/rules/prefer-ts-extras-assert-error.md +147 -0
- package/docs/rules/prefer-ts-extras-assert-present.md +139 -0
- package/docs/rules/prefer-ts-extras-is-defined-filter.md +125 -0
- package/docs/rules/prefer-ts-extras-is-defined.md +147 -0
- package/docs/rules/prefer-ts-extras-is-empty.md +142 -0
- package/docs/rules/prefer-ts-extras-is-equal-type.md +144 -0
- package/docs/rules/prefer-ts-extras-is-finite.md +116 -0
- package/docs/rules/prefer-ts-extras-is-infinite.md +134 -0
- package/docs/rules/prefer-ts-extras-is-integer.md +116 -0
- package/docs/rules/prefer-ts-extras-is-present-filter.md +125 -0
- package/docs/rules/prefer-ts-extras-is-present.md +143 -0
- package/docs/rules/prefer-ts-extras-is-safe-integer.md +116 -0
- package/docs/rules/prefer-ts-extras-key-in.md +150 -0
- package/docs/rules/prefer-ts-extras-not.md +138 -0
- package/docs/rules/prefer-ts-extras-object-entries.md +130 -0
- package/docs/rules/prefer-ts-extras-object-from-entries.md +131 -0
- package/docs/rules/prefer-ts-extras-object-has-in.md +141 -0
- package/docs/rules/prefer-ts-extras-object-has-own.md +137 -0
- package/docs/rules/prefer-ts-extras-object-keys.md +127 -0
- package/docs/rules/prefer-ts-extras-object-values.md +128 -0
- package/docs/rules/prefer-ts-extras-safe-cast-to.md +130 -0
- package/docs/rules/prefer-ts-extras-set-has.md +203 -0
- package/docs/rules/prefer-ts-extras-string-split.md +133 -0
- package/docs/rules/prefer-type-fest-abstract-constructor.md +87 -0
- package/docs/rules/prefer-type-fest-arrayable.md +127 -0
- package/docs/rules/prefer-type-fest-async-return-type.md +117 -0
- package/docs/rules/prefer-type-fest-conditional-pick.md +140 -0
- package/docs/rules/prefer-type-fest-constructor.md +87 -0
- package/docs/rules/prefer-type-fest-except.md +231 -0
- package/docs/rules/prefer-type-fest-if.md +217 -0
- package/docs/rules/prefer-type-fest-iterable-element.md +170 -0
- package/docs/rules/prefer-type-fest-json-array.md +107 -0
- package/docs/rules/prefer-type-fest-json-object.md +107 -0
- package/docs/rules/prefer-type-fest-json-primitive.md +105 -0
- package/docs/rules/prefer-type-fest-json-value.md +107 -0
- package/docs/rules/prefer-type-fest-keys-of-union.md +139 -0
- package/docs/rules/prefer-type-fest-literal-union.md +118 -0
- package/docs/rules/prefer-type-fest-merge-exclusive.md +118 -0
- package/docs/rules/prefer-type-fest-non-empty-tuple.md +115 -0
- package/docs/rules/prefer-type-fest-omit-index-signature.md +196 -0
- package/docs/rules/prefer-type-fest-partial-deep.md +133 -0
- package/docs/rules/prefer-type-fest-primitive.md +106 -0
- package/docs/rules/prefer-type-fest-promisable.md +246 -0
- package/docs/rules/prefer-type-fest-readonly-deep.md +151 -0
- package/docs/rules/prefer-type-fest-require-all-or-none.md +149 -0
- package/docs/rules/prefer-type-fest-require-at-least-one.md +155 -0
- package/docs/rules/prefer-type-fest-require-exactly-one.md +240 -0
- package/docs/rules/prefer-type-fest-require-one-or-none.md +165 -0
- package/docs/rules/prefer-type-fest-required-deep.md +123 -0
- package/docs/rules/prefer-type-fest-schema.md +161 -0
- package/docs/rules/prefer-type-fest-set-non-nullable.md +145 -0
- package/docs/rules/prefer-type-fest-set-optional.md +133 -0
- package/docs/rules/prefer-type-fest-set-readonly.md +136 -0
- package/docs/rules/prefer-type-fest-set-required.md +140 -0
- package/docs/rules/prefer-type-fest-simplify.md +168 -0
- package/docs/rules/prefer-type-fest-tagged-brands.md +278 -0
- package/docs/rules/prefer-type-fest-tuple-of.md +250 -0
- package/docs/rules/prefer-type-fest-unknown-array.md +126 -0
- package/docs/rules/prefer-type-fest-unknown-map.md +123 -0
- package/docs/rules/prefer-type-fest-unknown-record.md +130 -0
- package/docs/rules/prefer-type-fest-unknown-set.md +123 -0
- package/docs/rules/prefer-type-fest-unwrap-tagged.md +133 -0
- package/docs/rules/prefer-type-fest-value-of.md +121 -0
- package/docs/rules/prefer-type-fest-writable-deep.md +113 -0
- package/docs/rules/prefer-type-fest-writable.md +139 -0
- package/docs/rules/presets/all.md +102 -0
- package/docs/rules/presets/index.md +124 -0
- package/docs/rules/presets/minimal.md +37 -0
- package/docs/rules/presets/recommended-type-checked.md +37 -0
- package/docs/rules/presets/recommended.md +116 -0
- package/docs/rules/presets/strict.md +98 -0
- package/docs/rules/presets/ts-extras-type-guards.md +45 -0
- package/docs/rules/presets/type-fest-types.md +68 -0
- 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)
|