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,196 @@
|
|
|
1
|
+
# prefer-type-fest-omit-index-signature
|
|
2
|
+
|
|
3
|
+
Require TypeFest [`OmitIndexSignature<T>`](https://github.com/sindresorhus/type-fest/blob/main/source/omit-index-signature.d.ts) over imported aliases like
|
|
4
|
+
`RemoveIndexSignature`.
|
|
5
|
+
|
|
6
|
+
## Targeted pattern scope
|
|
7
|
+
|
|
8
|
+
This rule targets imported alias names used for removing index signatures from object types.
|
|
9
|
+
|
|
10
|
+
## What this rule reports
|
|
11
|
+
|
|
12
|
+
- Type references that resolve to imported `RemoveIndexSignature` aliases.
|
|
13
|
+
|
|
14
|
+
## Why this rule exists
|
|
15
|
+
|
|
16
|
+
`OmitIndexSignature` is the canonical TypeFest utility for stripping index
|
|
17
|
+
signatures while preserving explicitly-declared fields. Using the canonical
|
|
18
|
+
name improves consistency across utility libraries.
|
|
19
|
+
|
|
20
|
+
## ❌ Incorrect
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import type { RemoveIndexSignature } from "type-zoo";
|
|
24
|
+
|
|
25
|
+
type StrictUser = RemoveIndexSignature<User>;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## ✅ Correct
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
import type { OmitIndexSignature } from "type-fest";
|
|
32
|
+
|
|
33
|
+
type StrictUser = OmitIndexSignature<User>;
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Behavior and migration notes
|
|
37
|
+
|
|
38
|
+
- `OmitIndexSignature<T>` strips broad index signatures while preserving explicit properties.
|
|
39
|
+
- This rule targets alias names with equivalent semantics (`RemoveIndexSignature`).
|
|
40
|
+
- Use it when converting permissive dictionary-like types into explicit contract shapes.
|
|
41
|
+
|
|
42
|
+
## Additional examples
|
|
43
|
+
|
|
44
|
+
### ❌ Incorrect — Additional example
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import type { RemoveIndexSignature } from "type-zoo";
|
|
48
|
+
|
|
49
|
+
type Explicit = RemoveIndexSignature<User>;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### ✅ Correct — Additional example
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import type { OmitIndexSignature } from "type-fest";
|
|
56
|
+
|
|
57
|
+
type Explicit = OmitIndexSignature<User>;
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### ✅ Correct — Repository-wide usage
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
type PublicModel = OmitIndexSignature<ModelWithIndex>;
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## ESLint flat config example
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import typefest from "eslint-plugin-typefest";
|
|
70
|
+
|
|
71
|
+
export default [
|
|
72
|
+
{
|
|
73
|
+
plugins: { typefest },
|
|
74
|
+
rules: {
|
|
75
|
+
"typefest/prefer-type-fest-omit-index-signature": "error",
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## When not to use it
|
|
82
|
+
|
|
83
|
+
Disable this rule if external contract compatibility requires existing alias names.
|
|
84
|
+
|
|
85
|
+
## Package documentation
|
|
86
|
+
|
|
87
|
+
TypeFest package documentation:
|
|
88
|
+
|
|
89
|
+
Source file: [`source/omit-index-signature.d.ts`](https://github.com/sindresorhus/type-fest/blob/main/source/omit-index-signature.d.ts)
|
|
90
|
+
|
|
91
|
+
````ts
|
|
92
|
+
/**
|
|
93
|
+
Omit any index signatures from the given object type, leaving only explicitly defined properties.
|
|
94
|
+
|
|
95
|
+
This is the counterpart of `PickIndexSignature`.
|
|
96
|
+
|
|
97
|
+
Use-cases:
|
|
98
|
+
- Remove overly permissive signatures from third-party types.
|
|
99
|
+
|
|
100
|
+
This type was taken from this [StackOverflow answer](https://stackoverflow.com/a/68261113/420747).
|
|
101
|
+
|
|
102
|
+
It relies on the fact that an empty object (`{}`) is assignable to an object with just an index signature, like `Record<string, unknown>`, but not to an object with explicitly defined keys, like `Record<'foo' | 'bar', unknown>`.
|
|
103
|
+
|
|
104
|
+
(The actual value type, `unknown`, is irrelevant and could be any type. Only the key type matters.)
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
const indexed: Record<string, unknown> = {}; // Allowed
|
|
108
|
+
|
|
109
|
+
// @ts-expect-error
|
|
110
|
+
const keyed: Record<'foo', unknown> = {}; // Error
|
|
111
|
+
// TS2739: Type '{}' is missing the following properties from type 'Record<"foo" | "bar", unknown>': foo, bar
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Instead of causing a type error like the above, you can also use a [conditional type](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html) to test whether a type is assignable to another:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
type Indexed = {} extends Record<string, unknown>
|
|
118
|
+
? '✅ `{}` is assignable to `Record<string, unknown>`'
|
|
119
|
+
: '❌ `{}` is NOT assignable to `Record<string, unknown>`';
|
|
120
|
+
|
|
121
|
+
type IndexedResult = Indexed;
|
|
122
|
+
//=> '✅ `{}` is assignable to `Record<string, unknown>`'
|
|
123
|
+
|
|
124
|
+
type Keyed = {} extends Record<'foo' | 'bar', unknown>
|
|
125
|
+
? '✅ `{}` is assignable to `Record<\'foo\' | \'bar\', unknown>`'
|
|
126
|
+
: '❌ `{}` is NOT assignable to `Record<\'foo\' | \'bar\', unknown>`';
|
|
127
|
+
|
|
128
|
+
type KeyedResult = Keyed;
|
|
129
|
+
//=> '❌ `{}` is NOT assignable to `Record<\'foo\' | \'bar\', unknown>`'
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Using a [mapped type](https://www.typescriptlang.org/docs/handbook/2/mapped-types.html#further-exploration), you can then check for each `KeyType` of `ObjectType`...
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
type OmitIndexSignature<ObjectType> = {
|
|
136
|
+
[KeyType in keyof ObjectType // Map each key of `ObjectType`...
|
|
137
|
+
]: ObjectType[KeyType]; // ...to its original value, i.e. `OmitIndexSignature<Foo> == Foo`.
|
|
138
|
+
};
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
...whether an empty object (`{}`) would be assignable to an object with that `KeyType` (`Record<KeyType, unknown>`)...
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
type OmitIndexSignature<ObjectType> = {
|
|
145
|
+
[KeyType in keyof ObjectType
|
|
146
|
+
// Is `{}` assignable to `Record<KeyType, unknown>`?
|
|
147
|
+
as {} extends Record<KeyType, unknown>
|
|
148
|
+
? never // ✅ `{}` is assignable to `Record<KeyType, unknown>`
|
|
149
|
+
: KeyType // ❌ `{}` is NOT assignable to `Record<KeyType, unknown>`
|
|
150
|
+
]: ObjectType[KeyType];
|
|
151
|
+
};
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
If `{}` is assignable, it means that `KeyType` is an index signature and we want to remove it. If it is not assignable, `KeyType` is a "real" key and we want to keep it.
|
|
155
|
+
|
|
156
|
+
@example
|
|
157
|
+
```
|
|
158
|
+
import type {OmitIndexSignature} from 'type-fest';
|
|
159
|
+
|
|
160
|
+
type Example = {
|
|
161
|
+
// These index signatures will be removed.
|
|
162
|
+
[x: string]: any;
|
|
163
|
+
[x: number]: any;
|
|
164
|
+
[x: symbol]: any;
|
|
165
|
+
[x: `head-${string}`]: string;
|
|
166
|
+
[x: `${string}-tail`]: string;
|
|
167
|
+
[x: `head-${string}-tail`]: string;
|
|
168
|
+
[x: `${bigint}`]: string;
|
|
169
|
+
[x: `embedded-${number}`]: string;
|
|
170
|
+
|
|
171
|
+
// These explicitly defined keys will remain.
|
|
172
|
+
foo: 'bar';
|
|
173
|
+
qux?: 'baz';
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
type ExampleWithoutIndexSignatures = OmitIndexSignature<Example>;
|
|
177
|
+
//=> {foo: 'bar'; qux?: 'baz'}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
@see {@link PickIndexSignature}
|
|
181
|
+
@category Object
|
|
182
|
+
*/
|
|
183
|
+
````
|
|
184
|
+
|
|
185
|
+
> **Rule catalog ID:** R051
|
|
186
|
+
|
|
187
|
+
## Further reading
|
|
188
|
+
|
|
189
|
+
- [`type-fest` README](https://github.com/sindresorhus/type-fest)
|
|
190
|
+
- [`type-fest` npm documentation](https://www.npmjs.com/package/type-fest)
|
|
191
|
+
- [TypeScript Handbook: Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html)
|
|
192
|
+
|
|
193
|
+
## Adoption resources
|
|
194
|
+
|
|
195
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
196
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# prefer-type-fest-partial-deep
|
|
2
|
+
|
|
3
|
+
Require TypeFest [`PartialDeep`](https://github.com/sindresorhus/type-fest/blob/main/source/partial-deep.d.ts) over `DeepPartial` aliases.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule reports `DeepPartial<T>` aliases and prefers `PartialDeep<T>` for recursive optional patch types.
|
|
8
|
+
|
|
9
|
+
## What this rule reports
|
|
10
|
+
|
|
11
|
+
- Type references named `DeepPartial`.
|
|
12
|
+
|
|
13
|
+
### Detection boundaries
|
|
14
|
+
|
|
15
|
+
- ✅ Reports direct `DeepPartial<T>` type references.
|
|
16
|
+
- ❌ Does not auto-fix where project-local aliases have non-TypeFest semantics.
|
|
17
|
+
|
|
18
|
+
## Why this rule exists
|
|
19
|
+
|
|
20
|
+
`PartialDeep<T>` is the canonical TypeFest utility for recursive optionality.
|
|
21
|
+
|
|
22
|
+
Using a single name for deep patch semantics makes update/persistence DTOs easier to audit.
|
|
23
|
+
|
|
24
|
+
## ❌ Incorrect
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
type Patch = DeepPartial<AppConfig>;
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## ✅ Correct
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import type { PartialDeep } from "type-fest";
|
|
34
|
+
|
|
35
|
+
type Patch = PartialDeep<AppConfig>;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Behavior and migration notes
|
|
39
|
+
|
|
40
|
+
- `PartialDeep<T>` recursively marks nested properties optional.
|
|
41
|
+
- Validate parity if your legacy alias excluded arrays, maps, or sets.
|
|
42
|
+
- Prefer narrowing the patch surface with `Pick`/`Except` before applying deep optionality.
|
|
43
|
+
|
|
44
|
+
## ESLint flat config example
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import typefest from "eslint-plugin-typefest";
|
|
48
|
+
|
|
49
|
+
export default [
|
|
50
|
+
{
|
|
51
|
+
plugins: { typefest },
|
|
52
|
+
rules: {
|
|
53
|
+
"typefest/prefer-type-fest-partial-deep": "error",
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## When not to use it
|
|
60
|
+
|
|
61
|
+
Disable this rule if your codebase intentionally standardizes `DeepPartial` naming instead of TypeFest.
|
|
62
|
+
|
|
63
|
+
## Package documentation
|
|
64
|
+
|
|
65
|
+
TypeFest package documentation:
|
|
66
|
+
|
|
67
|
+
Source file: [`source/partial-deep.d.ts`](https://github.com/sindresorhus/type-fest/blob/main/source/partial-deep.d.ts)
|
|
68
|
+
|
|
69
|
+
````ts
|
|
70
|
+
/**
|
|
71
|
+
Create a type from another type with all keys and nested keys set to optional.
|
|
72
|
+
|
|
73
|
+
Use-cases:
|
|
74
|
+
- Merging a default settings/config object with another object, the second object would be a deep partial of the default object.
|
|
75
|
+
- Mocking and testing complex entities, where populating an entire object with its keys would be redundant in terms of the mock or test.
|
|
76
|
+
|
|
77
|
+
@example
|
|
78
|
+
```
|
|
79
|
+
import type {PartialDeep} from 'type-fest';
|
|
80
|
+
|
|
81
|
+
let settings = {
|
|
82
|
+
textEditor: {
|
|
83
|
+
fontSize: 14,
|
|
84
|
+
fontColor: '#000000',
|
|
85
|
+
fontWeight: 400,
|
|
86
|
+
},
|
|
87
|
+
autocomplete: false,
|
|
88
|
+
autosave: true,
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const applySavedSettings = (savedSettings: PartialDeep<typeof settings>) => (
|
|
92
|
+
{...settings, ...savedSettings, textEditor: {...settings.textEditor, ...savedSettings.textEditor}}
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
settings = applySavedSettings({textEditor: {fontWeight: 500}});
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
By default, this does not affect elements in array and tuple types. You can change this by passing `{recurseIntoArrays: true}` as the second type argument:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
import type {PartialDeep} from 'type-fest';
|
|
102
|
+
|
|
103
|
+
type Shape = {
|
|
104
|
+
dimensions: [number, number];
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const partialShape: PartialDeep<Shape, {recurseIntoArrays: true}> = {
|
|
108
|
+
dimensions: [], // OK
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
partialShape.dimensions = [15]; // OK
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
@see {@link PartialDeepOptions}
|
|
115
|
+
|
|
116
|
+
@category Object
|
|
117
|
+
@category Array
|
|
118
|
+
@category Set
|
|
119
|
+
@category Map
|
|
120
|
+
*/
|
|
121
|
+
````
|
|
122
|
+
|
|
123
|
+
> **Rule catalog ID:** R052
|
|
124
|
+
|
|
125
|
+
## Further reading
|
|
126
|
+
|
|
127
|
+
- [TypeFest README](https://github.com/sindresorhus/type-fest)
|
|
128
|
+
- [TypeScript Handbook: Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html)
|
|
129
|
+
|
|
130
|
+
## Adoption resources
|
|
131
|
+
|
|
132
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
133
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# prefer-type-fest-primitive
|
|
2
|
+
|
|
3
|
+
Require TypeFest [`Primitive`](https://github.com/sindresorhus/type-fest/blob/main/source/primitive.d.ts) over explicit unions of primitive keyword types.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule targets full primitive keyword unions used as standalone scalar aliases.
|
|
8
|
+
|
|
9
|
+
## What this rule reports
|
|
10
|
+
|
|
11
|
+
- Unions composed of all primitive keyword types:
|
|
12
|
+
- `string`
|
|
13
|
+
- `number`
|
|
14
|
+
- `bigint`
|
|
15
|
+
- `boolean`
|
|
16
|
+
- `symbol`
|
|
17
|
+
- `null`
|
|
18
|
+
- `undefined`
|
|
19
|
+
|
|
20
|
+
## Why this rule exists
|
|
21
|
+
|
|
22
|
+
`Primitive` communicates intent directly and avoids repeating a long union in multiple places.
|
|
23
|
+
|
|
24
|
+
## ❌ Incorrect
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
type PrimitiveValue = string | number | bigint | boolean | symbol | null | undefined;
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## ✅ Correct
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
type PrimitiveValue = Primitive;
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Behavior and migration notes
|
|
37
|
+
|
|
38
|
+
- `Primitive` covers all JS primitive categories: `string`, `number`, `bigint`, `boolean`, `symbol`, `null`, `undefined`.
|
|
39
|
+
- This rule targets unions that include the complete primitive set.
|
|
40
|
+
- Keep explicit subsets when domain semantics require only a subset of primitive categories.
|
|
41
|
+
|
|
42
|
+
## Additional examples
|
|
43
|
+
|
|
44
|
+
### ❌ Incorrect — Additional example
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
type Scalar = string | number | bigint | boolean | symbol | null | undefined;
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### ✅ Correct — Additional example
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
type Scalar = Primitive;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### ✅ Correct — Repository-wide usage
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
type LeafValue = Primitive;
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## ESLint flat config example
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
import typefest from "eslint-plugin-typefest";
|
|
66
|
+
|
|
67
|
+
export default [
|
|
68
|
+
{
|
|
69
|
+
plugins: { typefest },
|
|
70
|
+
rules: {
|
|
71
|
+
"typefest/prefer-type-fest-primitive": "error",
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## When not to use it
|
|
78
|
+
|
|
79
|
+
Disable this rule if explicit primitive unions are part of a published API contract.
|
|
80
|
+
|
|
81
|
+
## Package documentation
|
|
82
|
+
|
|
83
|
+
TypeFest package documentation:
|
|
84
|
+
|
|
85
|
+
Source file: [`source/primitive.d.ts`](https://github.com/sindresorhus/type-fest/blob/main/source/primitive.d.ts)
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
/**
|
|
89
|
+
Matches any [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive).
|
|
90
|
+
|
|
91
|
+
@category Type
|
|
92
|
+
*/
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
> **Rule catalog ID:** R053
|
|
96
|
+
|
|
97
|
+
## Further reading
|
|
98
|
+
|
|
99
|
+
- [`type-fest` README](https://github.com/sindresorhus/type-fest)
|
|
100
|
+
- [`type-fest` npm documentation](https://www.npmjs.com/package/type-fest)
|
|
101
|
+
- [TypeScript Handbook: Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html)
|
|
102
|
+
|
|
103
|
+
## Adoption resources
|
|
104
|
+
|
|
105
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
106
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# prefer-type-fest-promisable
|
|
2
|
+
|
|
3
|
+
Require TypeFest [`Promisable<T>`](https://github.com/sindresorhus/type-fest/blob/main/source/promisable.d.ts) for sync-or-async callback contracts currently expressed as `Promise<T> | T` unions.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule narrows matching to strict two-member Promise/base unions where `Promisable<T>` is the canonical replacement.
|
|
8
|
+
|
|
9
|
+
- Type unions shaped like `Promise<T> | T` in architecture-critical runtime layers.
|
|
10
|
+
|
|
11
|
+
Multi-member unions and Promise-adjacent variants stay out of scope unless they exactly match the authored pair form.
|
|
12
|
+
|
|
13
|
+
## What this rule reports
|
|
14
|
+
|
|
15
|
+
This rule reports strict `Promise<T> | T`-shaped unions that should be expressed as `Promisable<T>`.
|
|
16
|
+
|
|
17
|
+
- Type unions shaped like `Promise<T> | T` in architecture-critical runtime layers.
|
|
18
|
+
- Type references that resolve to imported legacy aliases such as `MaybePromise`.
|
|
19
|
+
|
|
20
|
+
### Detection boundaries
|
|
21
|
+
|
|
22
|
+
- ✅ Reports strict `Promise<T> | T` / `T | Promise<T>` unions by default.
|
|
23
|
+
- ✅ Reports imported legacy aliases such as `MaybePromise` by default.
|
|
24
|
+
- ❌ Does not report namespace-qualified aliases.
|
|
25
|
+
- ✅ Auto-fixes imported legacy alias references when replacement is syntactically safe.
|
|
26
|
+
- ❌ Does not auto-fix `Promise<T> | T` union declarations.
|
|
27
|
+
- ✅ Enforcement surface is configurable with `enforcePromiseUnions` and `enforceLegacyAliases`.
|
|
28
|
+
|
|
29
|
+
## Why this rule exists
|
|
30
|
+
|
|
31
|
+
`Promisable<T>` communicates intent directly, keeps callback contracts consistent, and avoids repeating equivalent sync-or-async unions throughout the codebase.
|
|
32
|
+
|
|
33
|
+
## ❌ Incorrect
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
type HookResult = Promise<Result> | Result;
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## ✅ Correct
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
type HookResult = Promisable<Result>;
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Behavior and migration notes
|
|
46
|
+
|
|
47
|
+
- `Promisable<T>` captures sync-or-async return contracts in one reusable alias.
|
|
48
|
+
- It normalizes both `Promise<T> | T` and `T | Promise<T>` forms.
|
|
49
|
+
- Use this alias in hook/callback contracts where callers may return either immediate or async values.
|
|
50
|
+
|
|
51
|
+
### Options
|
|
52
|
+
|
|
53
|
+
This rule accepts a single options object:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
type PreferTypeFestPromisableOptions = {
|
|
57
|
+
/**
|
|
58
|
+
* Whether to report imported legacy aliases such as MaybePromise.
|
|
59
|
+
*
|
|
60
|
+
* @default true
|
|
61
|
+
*/
|
|
62
|
+
enforceLegacyAliases?: boolean;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Whether to report Promise<T> | T sync-or-async unions.
|
|
66
|
+
*
|
|
67
|
+
* @default true
|
|
68
|
+
*/
|
|
69
|
+
enforcePromiseUnions?: boolean;
|
|
70
|
+
};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Default configuration:
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
{
|
|
77
|
+
enforceLegacyAliases: true,
|
|
78
|
+
enforcePromiseUnions: true,
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Flat config setup (default behavior):
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import typefest from "eslint-plugin-typefest";
|
|
86
|
+
|
|
87
|
+
export default [
|
|
88
|
+
{
|
|
89
|
+
plugins: { typefest },
|
|
90
|
+
rules: {
|
|
91
|
+
"typefest/prefer-type-fest-promisable": [
|
|
92
|
+
"error",
|
|
93
|
+
{
|
|
94
|
+
enforceLegacyAliases: true,
|
|
95
|
+
enforcePromiseUnions: true,
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### `enforcePromiseUnions: false`
|
|
104
|
+
|
|
105
|
+
Ignores union-shaped contracts while still enforcing legacy aliases:
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
import typefest from "eslint-plugin-typefest";
|
|
109
|
+
|
|
110
|
+
export default [
|
|
111
|
+
{
|
|
112
|
+
plugins: { typefest },
|
|
113
|
+
rules: {
|
|
114
|
+
"typefest/prefer-type-fest-promisable": [
|
|
115
|
+
"error",
|
|
116
|
+
{
|
|
117
|
+
enforceLegacyAliases: true,
|
|
118
|
+
enforcePromiseUnions: false,
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
import type { MaybePromise } from "type-aliases";
|
|
128
|
+
|
|
129
|
+
type A = Promise<Result> | Result; // ✅ Not reported
|
|
130
|
+
type B = MaybePromise<Result>; // ❌ Reported
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### `enforceLegacyAliases: false`
|
|
134
|
+
|
|
135
|
+
Ignores legacy aliases while still enforcing union-shaped contracts:
|
|
136
|
+
|
|
137
|
+
```ts
|
|
138
|
+
import typefest from "eslint-plugin-typefest";
|
|
139
|
+
|
|
140
|
+
export default [
|
|
141
|
+
{
|
|
142
|
+
plugins: { typefest },
|
|
143
|
+
rules: {
|
|
144
|
+
"typefest/prefer-type-fest-promisable": [
|
|
145
|
+
"error",
|
|
146
|
+
{
|
|
147
|
+
enforceLegacyAliases: false,
|
|
148
|
+
enforcePromiseUnions: true,
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
];
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
import type { MaybePromise } from "type-aliases";
|
|
158
|
+
|
|
159
|
+
type A = MaybePromise<Result>; // ✅ Not reported
|
|
160
|
+
type B = Promise<Result> | Result; // ❌ Reported
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Additional examples
|
|
164
|
+
|
|
165
|
+
### ❌ Incorrect — Additional example
|
|
166
|
+
|
|
167
|
+
```ts
|
|
168
|
+
type MaybeAsync = Result | Promise<Result>;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### ✅ Correct — Additional example
|
|
172
|
+
|
|
173
|
+
```ts
|
|
174
|
+
type MaybeAsync = Promisable<Result>;
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### ✅ Correct — Repository-wide usage
|
|
178
|
+
|
|
179
|
+
```ts
|
|
180
|
+
type HookOutput = Promisable<void>;
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## ESLint flat config example
|
|
184
|
+
|
|
185
|
+
```ts
|
|
186
|
+
import typefest from "eslint-plugin-typefest";
|
|
187
|
+
|
|
188
|
+
export default [
|
|
189
|
+
{
|
|
190
|
+
plugins: { typefest },
|
|
191
|
+
rules: {
|
|
192
|
+
"typefest/prefer-type-fest-promisable": "error",
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
];
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## When not to use it
|
|
199
|
+
|
|
200
|
+
Disable this rule if runtime policy requires explicitly spelling out promise unions.
|
|
201
|
+
|
|
202
|
+
## Package documentation
|
|
203
|
+
|
|
204
|
+
TypeFest package documentation:
|
|
205
|
+
|
|
206
|
+
Source file: [`source/promisable.d.ts`](https://github.com/sindresorhus/type-fest/blob/main/source/promisable.d.ts)
|
|
207
|
+
|
|
208
|
+
````ts
|
|
209
|
+
/**
|
|
210
|
+
Create a type that represents either the value or the value wrapped in `PromiseLike`.
|
|
211
|
+
|
|
212
|
+
Use-cases:
|
|
213
|
+
- A function accepts a callback that may either return a value synchronously or may return a promised value.
|
|
214
|
+
- This type could be the return type of `Promise#then()`, `Promise#catch()`, and `Promise#finally()` callbacks.
|
|
215
|
+
|
|
216
|
+
Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/31394) if you want to have this type as a built-in in TypeScript.
|
|
217
|
+
|
|
218
|
+
@example
|
|
219
|
+
```
|
|
220
|
+
import type {Promisable} from 'type-fest';
|
|
221
|
+
|
|
222
|
+
async function logger(getLogEntry: () => Promisable<string>): Promise<void> {
|
|
223
|
+
const entry = await getLogEntry();
|
|
224
|
+
console.log(entry);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
await logger(() => 'foo');
|
|
228
|
+
await logger(() => Promise.resolve('bar'));
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
@category Async
|
|
232
|
+
*/
|
|
233
|
+
````
|
|
234
|
+
|
|
235
|
+
> **Rule catalog ID:** R054
|
|
236
|
+
|
|
237
|
+
## Further reading
|
|
238
|
+
|
|
239
|
+
- [`type-fest` README](https://github.com/sindresorhus/type-fest)
|
|
240
|
+
- [`type-fest` npm documentation](https://www.npmjs.com/package/type-fest)
|
|
241
|
+
- [TypeScript Handbook: Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html)
|
|
242
|
+
|
|
243
|
+
## Adoption resources
|
|
244
|
+
|
|
245
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
246
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|