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,143 @@
|
|
|
1
|
+
# prefer-ts-extras-is-present
|
|
2
|
+
|
|
3
|
+
Require [`isPresent`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-present.ts) from `ts-extras` for direct nullish checks outside `Array.prototype.filter` callbacks.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule scopes matching to direct nullish-check expressions outside `.filter(...)` callbacks.
|
|
8
|
+
|
|
9
|
+
- Direct nullish checks outside `Array.prototype.filter` callbacks:
|
|
10
|
+
- `value != null`
|
|
11
|
+
- `value == null`
|
|
12
|
+
- `value !== null && value !== undefined`
|
|
13
|
+
- `value === null || value === undefined`
|
|
14
|
+
|
|
15
|
+
Filter callbacks are handled by the dedicated filter rule; larger boolean expressions are only matched when they keep these shapes.
|
|
16
|
+
|
|
17
|
+
## What this rule reports
|
|
18
|
+
|
|
19
|
+
This rule reports direct nullish comparisons that should use `isPresent(...)` helpers.
|
|
20
|
+
|
|
21
|
+
- Direct nullish checks outside `Array.prototype.filter` callbacks:
|
|
22
|
+
- `value != null`
|
|
23
|
+
- `value == null`
|
|
24
|
+
- `value !== null && value !== undefined`
|
|
25
|
+
- `value === null || value === undefined`
|
|
26
|
+
|
|
27
|
+
## Why this rule exists
|
|
28
|
+
|
|
29
|
+
`isPresent` gives one canonical predicate for non-nullish checks and reduces mixed null/undefined comparison styles.
|
|
30
|
+
|
|
31
|
+
- Nullish guard intent is explicit.
|
|
32
|
+
- Narrowing to `NonNullable<T>` follows one convention.
|
|
33
|
+
- Verbose inline nullish checks are removed.
|
|
34
|
+
|
|
35
|
+
## ❌ Incorrect
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
if (value != null) {
|
|
39
|
+
consume(value);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (value === null || value === undefined) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## ✅ Correct
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
if (isPresent(value)) {
|
|
51
|
+
consume(value);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (!isPresent(value)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Behavior and migration notes
|
|
60
|
+
|
|
61
|
+
- `isPresent(value)` means value is neither `null` nor `undefined`.
|
|
62
|
+
- `!isPresent(value)` is the nullish guard equivalent.
|
|
63
|
+
- Filter-specific nullish patterns are covered by `prefer-ts-extras-is-present-filter`.
|
|
64
|
+
|
|
65
|
+
## Additional examples
|
|
66
|
+
|
|
67
|
+
### ❌ Incorrect — Additional example
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
if (profile != null) {
|
|
71
|
+
render(profile);
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### ✅ Correct — Additional example
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
if (isPresent(profile)) {
|
|
79
|
+
render(profile);
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### ✅ Correct — Repository-wide usage
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
const available = isPresent(cacheEntry);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## ESLint flat config example
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import typefest from "eslint-plugin-typefest";
|
|
93
|
+
|
|
94
|
+
export default [
|
|
95
|
+
{
|
|
96
|
+
plugins: { typefest },
|
|
97
|
+
rules: {
|
|
98
|
+
"typefest/prefer-ts-extras-is-present": "error",
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## When not to use it
|
|
105
|
+
|
|
106
|
+
Disable this rule if your code style requires explicit `=== null` / `=== undefined` branches.
|
|
107
|
+
|
|
108
|
+
## Package documentation
|
|
109
|
+
|
|
110
|
+
ts-extras package documentation:
|
|
111
|
+
|
|
112
|
+
Source file: [`source/is-present.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-present.ts)
|
|
113
|
+
|
|
114
|
+
````ts
|
|
115
|
+
/**
|
|
116
|
+
Check whether a value is present (non-nullable), meaning it is neither `null` nor `undefined`.
|
|
117
|
+
|
|
118
|
+
This can be useful as a type guard, as for example, `[1, null].filter(Boolean)` does not always type-guard correctly.
|
|
119
|
+
|
|
120
|
+
@example
|
|
121
|
+
```
|
|
122
|
+
import {isPresent} from 'ts-extras';
|
|
123
|
+
|
|
124
|
+
[1, null, 2, undefined].filter(isPresent);
|
|
125
|
+
//=> [1, 2]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
@category Type guard
|
|
129
|
+
*/
|
|
130
|
+
````
|
|
131
|
+
|
|
132
|
+
> **Rule catalog ID:** R021
|
|
133
|
+
|
|
134
|
+
## Further reading
|
|
135
|
+
|
|
136
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
137
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
138
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
139
|
+
|
|
140
|
+
## Adoption resources
|
|
141
|
+
|
|
142
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
143
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# prefer-ts-extras-is-safe-integer
|
|
2
|
+
|
|
3
|
+
Prefer [`isSafeInteger`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-safe-integer.ts) from `ts-extras` over `Number.isSafeInteger(...)`.
|
|
4
|
+
|
|
5
|
+
This keeps predicate usage consistent with other `ts-extras` narrowing helpers.
|
|
6
|
+
|
|
7
|
+
## Targeted pattern scope
|
|
8
|
+
|
|
9
|
+
This rule focuses on direct `Number.isSafeInteger(value)` calls that can be migrated to `isSafeInteger(value)` with deterministic fixes.
|
|
10
|
+
|
|
11
|
+
- `Number.isSafeInteger(value)` call sites that can use `isSafeInteger(value)`.
|
|
12
|
+
|
|
13
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `isSafeInteger(value)` migrations safe.
|
|
14
|
+
|
|
15
|
+
## What this rule reports
|
|
16
|
+
|
|
17
|
+
This rule reports `Number.isSafeInteger(value)` call sites when `isSafeInteger(value)` is the intended replacement.
|
|
18
|
+
|
|
19
|
+
- `Number.isSafeInteger(value)` call sites that can use `isSafeInteger(value)`.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`isSafeInteger` standardizes safe-integer validation and keeps numeric guard usage consistent with other `ts-extras` helpers.
|
|
24
|
+
|
|
25
|
+
- Safety-bound checks use one helper convention.
|
|
26
|
+
- Predicate style is consistent with `isInteger` and `isFinite`.
|
|
27
|
+
- Guard code for IDs/counters avoids mixed native/helper forms.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const isSafe = Number.isSafeInteger(value);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const isSafe = isSafeInteger(value);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Behavior and migration notes
|
|
42
|
+
|
|
43
|
+
- Runtime behavior matches native `Number.isSafeInteger`.
|
|
44
|
+
- Values outside `Number.MIN_SAFE_INTEGER` / `Number.MAX_SAFE_INTEGER` return `false`.
|
|
45
|
+
- Non-number values are not coerced.
|
|
46
|
+
|
|
47
|
+
## Additional examples
|
|
48
|
+
|
|
49
|
+
### ❌ Incorrect — Additional example
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
if (Number.isSafeInteger(quantity)) {
|
|
53
|
+
persist(quantity);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### ✅ Correct — Additional example
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
if (isSafeInteger(quantity)) {
|
|
61
|
+
persist(quantity);
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### ✅ Correct — Repository-wide usage
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
const supported = isSafeInteger(index);
|
|
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-safe-integer": "error",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## When not to use it
|
|
87
|
+
|
|
88
|
+
Disable this rule if your team enforces native `Number.isSafeInteger` calls.
|
|
89
|
+
|
|
90
|
+
## Package documentation
|
|
91
|
+
|
|
92
|
+
ts-extras package documentation:
|
|
93
|
+
|
|
94
|
+
Source file: [`source/is-safe-integer.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/is-safe-integer.ts)
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
/**
|
|
98
|
+
A strongly-typed version of `Number.isSafeInteger()`.
|
|
99
|
+
|
|
100
|
+
@category Improved builtin
|
|
101
|
+
@category Type guard
|
|
102
|
+
*/
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
> **Rule catalog ID:** R023
|
|
106
|
+
|
|
107
|
+
## Further reading
|
|
108
|
+
|
|
109
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
110
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
111
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
112
|
+
|
|
113
|
+
## Adoption resources
|
|
114
|
+
|
|
115
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
116
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# prefer-ts-extras-key-in
|
|
2
|
+
|
|
3
|
+
Prefer [`keyIn`](https://github.com/sindresorhus/ts-extras/blob/main/source/key-in.ts) from `ts-extras` over `key in object` checks.
|
|
4
|
+
|
|
5
|
+
`keyIn(...)` provides better key narrowing for dynamic property checks.
|
|
6
|
+
|
|
7
|
+
## Targeted pattern scope
|
|
8
|
+
|
|
9
|
+
This rule focuses on direct `key in object` expressions that can be migrated to `keyIn(key, object)` with deterministic fixes.
|
|
10
|
+
|
|
11
|
+
- Native `key in object` expressions that can use `keyIn(key, object)`.
|
|
12
|
+
|
|
13
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `keyIn(key, object)` migrations safe.
|
|
14
|
+
|
|
15
|
+
## What this rule reports
|
|
16
|
+
|
|
17
|
+
This rule reports `key in object` expressions when `keyIn(key, object)` is the intended replacement.
|
|
18
|
+
|
|
19
|
+
- Native `key in object` expressions that can use `keyIn(key, object)`.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`keyIn` expresses key-membership checks with a helper that improves key narrowing in typed code.
|
|
24
|
+
|
|
25
|
+
- Dynamic key checks have one canonical form.
|
|
26
|
+
- Guarded property access needs fewer casts.
|
|
27
|
+
- Membership guards are easier to audit in review.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
if (key in payload) {
|
|
33
|
+
// ...
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## ✅ Correct
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
if (keyIn(key, payload)) {
|
|
41
|
+
// ...
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Behavior and migration notes
|
|
46
|
+
|
|
47
|
+
- Runtime semantics match the `in` operator for property existence on object/prototype chains.
|
|
48
|
+
- `keyIn` is useful when key values start as `string`/`PropertyKey` and need narrowing.
|
|
49
|
+
- If your code intentionally requires direct `in` syntax (for style or tooling), keep native checks.
|
|
50
|
+
|
|
51
|
+
## Additional examples
|
|
52
|
+
|
|
53
|
+
### ❌ Incorrect — Additional example
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
if (candidate in record) {
|
|
57
|
+
console.log(record[candidate as keyof typeof record]);
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### ✅ Correct — Additional example
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
if (keyIn(candidate, record)) {
|
|
65
|
+
console.log(record[candidate]);
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### ✅ Correct — Repository-wide usage
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
const canRead = keyIn(data, selectedKey);
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## ESLint flat config example
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
import typefest from "eslint-plugin-typefest";
|
|
79
|
+
|
|
80
|
+
export default [
|
|
81
|
+
{
|
|
82
|
+
plugins: { typefest },
|
|
83
|
+
rules: {
|
|
84
|
+
"typefest/prefer-ts-extras-key-in": "error",
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## When not to use it
|
|
91
|
+
|
|
92
|
+
Disable this rule if direct `in` expressions are required by coding standards.
|
|
93
|
+
|
|
94
|
+
## Package documentation
|
|
95
|
+
|
|
96
|
+
ts-extras package documentation:
|
|
97
|
+
|
|
98
|
+
Source file: [`source/key-in.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/key-in.ts)
|
|
99
|
+
|
|
100
|
+
````ts
|
|
101
|
+
/**
|
|
102
|
+
Check if a key exists in an object and narrow the key type.
|
|
103
|
+
|
|
104
|
+
This function performs __key narrowing__ - it narrows the key variable to only keys that actually exist in the object. Uses the `in` operator to check the entire prototype chain.
|
|
105
|
+
|
|
106
|
+
When `keyIn` returns `true`, the key is narrowed to keys that exist in the object.
|
|
107
|
+
When it returns `false`, the key type remains unchanged.
|
|
108
|
+
|
|
109
|
+
Unlike `objectHasIn` and `objectHasOwn` (both do object narrowing), this narrows the _key_ type, making it useful for validating union types of possible keys.
|
|
110
|
+
|
|
111
|
+
@example
|
|
112
|
+
```
|
|
113
|
+
import {keyIn} from 'ts-extras';
|
|
114
|
+
|
|
115
|
+
const object = {foo: 1, bar: 2};
|
|
116
|
+
const key = 'foo' as 'foo' | 'bar' | 'baz';
|
|
117
|
+
|
|
118
|
+
if (keyIn(object, key)) {
|
|
119
|
+
// `key` is now: 'foo' | 'bar' (narrowed from union)
|
|
120
|
+
console.log(object[key]); // Safe access
|
|
121
|
+
} else {
|
|
122
|
+
// `key` remains: 'foo' | 'bar' | 'baz' (unchanged)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Works with symbols
|
|
126
|
+
const symbol = Symbol.for('myKey');
|
|
127
|
+
const objectWithSymbol = {[symbol]: 'value'};
|
|
128
|
+
if (keyIn(objectWithSymbol, symbol)) {
|
|
129
|
+
// symbol is narrowed to existing symbol keys
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
@note This uses the `in` operator and checks the prototype chain, but blocks `__proto__` and `constructor` for security.
|
|
134
|
+
|
|
135
|
+
@category Type guard
|
|
136
|
+
*/
|
|
137
|
+
````
|
|
138
|
+
|
|
139
|
+
> **Rule catalog ID:** R024
|
|
140
|
+
|
|
141
|
+
## Further reading
|
|
142
|
+
|
|
143
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
144
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
145
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
146
|
+
|
|
147
|
+
## Adoption resources
|
|
148
|
+
|
|
149
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
150
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# prefer-ts-extras-not
|
|
2
|
+
|
|
3
|
+
Require [`not`](https://github.com/sindresorhus/ts-extras/blob/main/source/not.ts) from `ts-extras` over inline negated predicate callbacks in `filter` calls.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule focuses on direct `.filter(...)` callbacks that negate a predicate and can be migrated to `not(predicate)` with deterministic fixes.
|
|
8
|
+
|
|
9
|
+
- Inline negated predicate callbacks in `.filter(...)` that can use `not(predicate)`.
|
|
10
|
+
- `array.filter((value) => !predicate(value))`
|
|
11
|
+
|
|
12
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `not(predicate)` migrations safe.
|
|
13
|
+
|
|
14
|
+
## What this rule reports
|
|
15
|
+
|
|
16
|
+
This rule reports `.filter(...)` call sites when `not(predicate)` is the intended replacement.
|
|
17
|
+
|
|
18
|
+
- Inline negated predicate callbacks in `.filter(...)` that can use `not(predicate)`.
|
|
19
|
+
- `array.filter((value) => !predicate(value))`
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`not(predicate)` communicates intent directly and preserves predicate-based typing in a reusable helper.
|
|
24
|
+
|
|
25
|
+
## ❌ Incorrect
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
const activeUsers = users.filter((user) => !isArchived(user));
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## ✅ Correct
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
const activeUsers = users.filter(not(isArchived));
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Behavior and migration notes
|
|
38
|
+
|
|
39
|
+
- `not(predicate)` preserves predicate inversion intent in one reusable helper.
|
|
40
|
+
- This rule targets inline negation wrappers inside `filter` callbacks.
|
|
41
|
+
- Callbacks that do extra work beyond predicate negation should be reviewed manually.
|
|
42
|
+
|
|
43
|
+
## Additional examples
|
|
44
|
+
|
|
45
|
+
### ❌ Incorrect — Additional example
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
const active = users.filter((user) => !isArchived(user));
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### ✅ Correct — Additional example
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
const active = users.filter(not(isArchived));
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### ✅ Correct — Repository-wide usage
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
const nonEmpty = values.filter(not(isEmptyValue));
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## ESLint flat config example
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import typefest from "eslint-plugin-typefest";
|
|
67
|
+
|
|
68
|
+
export default [
|
|
69
|
+
{
|
|
70
|
+
plugins: { typefest },
|
|
71
|
+
rules: {
|
|
72
|
+
"typefest/prefer-ts-extras-not": "error",
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## When not to use it
|
|
79
|
+
|
|
80
|
+
Disable this rule if your codebase requires explicit inline callback bodies for readability.
|
|
81
|
+
|
|
82
|
+
## Package documentation
|
|
83
|
+
|
|
84
|
+
ts-extras package documentation:
|
|
85
|
+
|
|
86
|
+
Source file: [`source/not.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/not.ts)
|
|
87
|
+
|
|
88
|
+
````ts
|
|
89
|
+
/**
|
|
90
|
+
Invert a type predicate function.
|
|
91
|
+
|
|
92
|
+
This utility allows you to create the inverse of any type guard function, using TypeScript's `Exclude` utility type to properly narrow types.
|
|
93
|
+
|
|
94
|
+
@example
|
|
95
|
+
```
|
|
96
|
+
import {not} from 'ts-extras';
|
|
97
|
+
|
|
98
|
+
const isNullish = (value: unknown): value is null | undefined => value == null;
|
|
99
|
+
|
|
100
|
+
const isNotNullish = not(isNullish);
|
|
101
|
+
|
|
102
|
+
const values = [1, null, 2, undefined, 3];
|
|
103
|
+
const defined = values.filter(isNotNullish);
|
|
104
|
+
//=> [1, 2, 3]
|
|
105
|
+
// with type number[]
|
|
106
|
+
|
|
107
|
+
// Works with any type guard
|
|
108
|
+
const isString = (value: unknown): value is string => typeof value === 'string';
|
|
109
|
+
|
|
110
|
+
const isNotString = not(isString);
|
|
111
|
+
|
|
112
|
+
declare const mixedValue: string | number | boolean;
|
|
113
|
+
if (isNotString(mixedValue)) {
|
|
114
|
+
mixedValue;
|
|
115
|
+
//=> number | boolean
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
@note TypeScript may fail to narrow types in nested branches, with mutated variables, or when using `Exclude` with complex union types. See:
|
|
120
|
+
- https://github.com/microsoft/TypeScript/issues/44901
|
|
121
|
+
- https://github.com/microsoft/TypeScript/issues/43589
|
|
122
|
+
|
|
123
|
+
@category Type guard
|
|
124
|
+
*/
|
|
125
|
+
````
|
|
126
|
+
|
|
127
|
+
> **Rule catalog ID:** R025
|
|
128
|
+
|
|
129
|
+
## Further reading
|
|
130
|
+
|
|
131
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
132
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
133
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
134
|
+
|
|
135
|
+
## Adoption resources
|
|
136
|
+
|
|
137
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
138
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# prefer-ts-extras-object-entries
|
|
2
|
+
|
|
3
|
+
Prefer [`objectEntries`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-entries.ts) from `ts-extras` over `Object.entries(...)`.
|
|
4
|
+
|
|
5
|
+
`objectEntries(...)` preserves stronger key/value typing for object iteration and reduces local casting noise.
|
|
6
|
+
|
|
7
|
+
## Targeted pattern scope
|
|
8
|
+
|
|
9
|
+
This rule focuses on direct `Object.entries(value)` calls that can be migrated to `objectEntries(value)` with deterministic fixes.
|
|
10
|
+
|
|
11
|
+
- `Object.entries(value)` call sites that can use `objectEntries(value)`.
|
|
12
|
+
|
|
13
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `objectEntries(value)` migrations safe.
|
|
14
|
+
|
|
15
|
+
## What this rule reports
|
|
16
|
+
|
|
17
|
+
This rule reports `Object.entries(value)` call sites when `objectEntries(value)` is the intended replacement.
|
|
18
|
+
|
|
19
|
+
- `Object.entries(value)` call sites that can use `objectEntries(value)`.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`objectEntries` gives better static typing for entry iteration, especially when the object has known keys.
|
|
24
|
+
|
|
25
|
+
- Key unions are preserved more consistently in loops.
|
|
26
|
+
- Value access in tuple destructuring needs fewer local casts.
|
|
27
|
+
- Team code converges on one explicit runtime helper for entry iteration.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const pairs = Object.entries(siteStatusById);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const pairs = objectEntries(siteStatusById);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Behavior and migration notes
|
|
42
|
+
|
|
43
|
+
- Runtime semantics stay aligned with `Object.entries` (own enumerable string-keyed entries only).
|
|
44
|
+
- Property order behavior remains the same as native `Object.entries`.
|
|
45
|
+
- Symbol keys are still excluded, just like native behavior.
|
|
46
|
+
- For loosely typed inputs (for example `Record<string, unknown>`), key type remains broad (`string`).
|
|
47
|
+
|
|
48
|
+
## Additional examples
|
|
49
|
+
|
|
50
|
+
### ❌ Incorrect — Additional example
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
const entries = Object.entries(settings);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### ✅ Correct — Additional example
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
const entries = objectEntries(settings);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### ✅ Correct — Repository-wide usage
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
for (const [key, value] of objectEntries(env)) {
|
|
66
|
+
void key;
|
|
67
|
+
void value;
|
|
68
|
+
}
|
|
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-object-entries": "error",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## When not to use it
|
|
87
|
+
|
|
88
|
+
Disable this rule if you must use native `Object.entries` directly for interop constraints.
|
|
89
|
+
|
|
90
|
+
## Package documentation
|
|
91
|
+
|
|
92
|
+
ts-extras package documentation:
|
|
93
|
+
|
|
94
|
+
Source file: [`source/object-entries.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-entries.ts)
|
|
95
|
+
|
|
96
|
+
````ts
|
|
97
|
+
/**
|
|
98
|
+
A strongly-typed version of `Object.entries()`.
|
|
99
|
+
|
|
100
|
+
This is useful since `Object.entries()` always returns an array of `Array<[string, T]>`. This function returns a strongly-typed array of the entries of the given object.
|
|
101
|
+
|
|
102
|
+
- [TypeScript issues about this](https://github.com/microsoft/TypeScript/pull/12253)
|
|
103
|
+
|
|
104
|
+
@example
|
|
105
|
+
```
|
|
106
|
+
import {objectEntries} from 'ts-extras';
|
|
107
|
+
|
|
108
|
+
const stronglyTypedEntries = objectEntries({a: 1, b: 2, c: 3});
|
|
109
|
+
//=> Array<['a' | 'b' | 'c', number]>
|
|
110
|
+
|
|
111
|
+
const untypedEntries = Object.entries({a: 1, b: 2, c: 3});
|
|
112
|
+
//=> Array<[string, number]>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
@category Improved builtin
|
|
116
|
+
*/
|
|
117
|
+
````
|
|
118
|
+
|
|
119
|
+
> **Rule catalog ID:** R026
|
|
120
|
+
|
|
121
|
+
## Further reading
|
|
122
|
+
|
|
123
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
124
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
125
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
126
|
+
|
|
127
|
+
## Adoption resources
|
|
128
|
+
|
|
129
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
130
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|