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,133 @@
|
|
|
1
|
+
# prefer-type-fest-set-optional
|
|
2
|
+
|
|
3
|
+
Require TypeFest [`SetOptional<T, Keys>`](https://github.com/sindresorhus/type-fest/blob/main/source/set-optional.d.ts) over imported aliases like `PartialBy`.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule scopes matching to imported legacy aliases that model the same semantics as `SetOptional<T, Keys>`.
|
|
8
|
+
|
|
9
|
+
- Type references that resolve to imported `PartialBy` aliases.
|
|
10
|
+
|
|
11
|
+
Locally defined lookalikes or unrelated type references are excluded unless they resolve to the targeted imported alias.
|
|
12
|
+
|
|
13
|
+
## What this rule reports
|
|
14
|
+
|
|
15
|
+
This rule reports imported alias usages that should migrate to `SetOptional<T, Keys>`.
|
|
16
|
+
|
|
17
|
+
- Type references that resolve to imported `PartialBy` aliases.
|
|
18
|
+
|
|
19
|
+
## Why this rule exists
|
|
20
|
+
|
|
21
|
+
`SetOptional` is the canonical TypeFest utility for making selected keys optional. Standardizing on it improves discoverability and keeps utility naming consistent across projects.
|
|
22
|
+
|
|
23
|
+
## ❌ Incorrect
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import type { PartialBy } from "type-aliases";
|
|
27
|
+
|
|
28
|
+
type PartialUser = PartialBy<User, "email">;
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## ✅ Correct
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
import type { SetOptional } from "type-fest";
|
|
35
|
+
|
|
36
|
+
type PartialUser = SetOptional<User, "email">;
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Behavior and migration notes
|
|
40
|
+
|
|
41
|
+
- `SetOptional<T, Keys>` marks a selected subset of keys optional while preserving all other key modifiers.
|
|
42
|
+
- This rule targets imported alias names that represent the same semantics (`PartialBy`).
|
|
43
|
+
- Use this utility for draft/update shapes where only specific fields become optional.
|
|
44
|
+
|
|
45
|
+
## Additional examples
|
|
46
|
+
|
|
47
|
+
### ❌ Incorrect — Additional example
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import type { PartialBy } from "type-aliases";
|
|
51
|
+
|
|
52
|
+
type Draft = PartialBy<User, "email">;
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### ✅ Correct — Additional example
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
import type { SetOptional } from "type-fest";
|
|
59
|
+
|
|
60
|
+
type Draft = SetOptional<User, "email">;
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### ✅ Correct — Repository-wide usage
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
type PartialAddress = SetOptional<Address, "line2">;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## ESLint flat config example
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import typefest from "eslint-plugin-typefest";
|
|
73
|
+
|
|
74
|
+
export default [
|
|
75
|
+
{
|
|
76
|
+
plugins: { typefest },
|
|
77
|
+
rules: {
|
|
78
|
+
"typefest/prefer-type-fest-set-optional": "error",
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## When not to use it
|
|
85
|
+
|
|
86
|
+
Disable this rule if external contracts require preserving existing aliases.
|
|
87
|
+
|
|
88
|
+
## Package documentation
|
|
89
|
+
|
|
90
|
+
TypeFest package documentation:
|
|
91
|
+
|
|
92
|
+
Source file: [`source/set-optional.d.ts`](https://github.com/sindresorhus/type-fest/blob/main/source/set-optional.d.ts)
|
|
93
|
+
|
|
94
|
+
````ts
|
|
95
|
+
/**
|
|
96
|
+
Create a type that makes the given keys optional. The remaining keys are kept as is. The sister of the `SetRequired` type.
|
|
97
|
+
|
|
98
|
+
Use-case: You want to define a single model where the only thing that changes is whether or not some of the keys are optional.
|
|
99
|
+
|
|
100
|
+
@example
|
|
101
|
+
```
|
|
102
|
+
import type {SetOptional} from 'type-fest';
|
|
103
|
+
|
|
104
|
+
type Foo = {
|
|
105
|
+
a: number;
|
|
106
|
+
b?: string;
|
|
107
|
+
c: boolean;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
type SomeOptional = SetOptional<Foo, 'b' | 'c'>;
|
|
111
|
+
// type SomeOptional = {
|
|
112
|
+
// a: number;
|
|
113
|
+
// b?: string; // Was already optional and still is.
|
|
114
|
+
// c?: boolean; // Is now optional.
|
|
115
|
+
// }
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
@category Object
|
|
119
|
+
*/
|
|
120
|
+
````
|
|
121
|
+
|
|
122
|
+
> **Rule catalog ID:** R063
|
|
123
|
+
|
|
124
|
+
## Further reading
|
|
125
|
+
|
|
126
|
+
- [`type-fest` README](https://github.com/sindresorhus/type-fest)
|
|
127
|
+
- [`type-fest` npm documentation](https://www.npmjs.com/package/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,136 @@
|
|
|
1
|
+
# prefer-type-fest-set-readonly
|
|
2
|
+
|
|
3
|
+
Require TypeFest [`SetReadonly<T, Keys>`](https://github.com/sindresorhus/type-fest/blob/main/source/set-readonly.d.ts) over imported aliases like
|
|
4
|
+
`ReadonlyBy`.
|
|
5
|
+
|
|
6
|
+
## Targeted pattern scope
|
|
7
|
+
|
|
8
|
+
This rule scopes matching to imported legacy aliases that model the same semantics as `SetReadonly<T, Keys>`.
|
|
9
|
+
|
|
10
|
+
- Type references that resolve to imported `ReadonlyBy` aliases.
|
|
11
|
+
|
|
12
|
+
Locally defined lookalikes or unrelated type references are excluded unless they resolve to the targeted imported alias.
|
|
13
|
+
|
|
14
|
+
## What this rule reports
|
|
15
|
+
|
|
16
|
+
This rule reports imported alias usages that should migrate to `SetReadonly<T, Keys>`.
|
|
17
|
+
|
|
18
|
+
- Type references that resolve to imported `ReadonlyBy` aliases.
|
|
19
|
+
|
|
20
|
+
## Why this rule exists
|
|
21
|
+
|
|
22
|
+
`SetReadonly` is the canonical TypeFest utility for making selected keys
|
|
23
|
+
readonly. Canonical naming improves discoverability and consistency across
|
|
24
|
+
projects.
|
|
25
|
+
|
|
26
|
+
## ❌ Incorrect
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import type { ReadonlyBy } from "type-aliases";
|
|
30
|
+
|
|
31
|
+
type ImmutableUser = ReadonlyBy<User, "id">;
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## ✅ Correct
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import type { SetReadonly } from "type-fest";
|
|
38
|
+
|
|
39
|
+
type ImmutableUser = SetReadonly<User, "id">;
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Behavior and migration notes
|
|
43
|
+
|
|
44
|
+
- `SetReadonly<T, Keys>` applies readonly modifiers to selected keys only.
|
|
45
|
+
- This rule targets imported aliases with equivalent semantics (`ReadonlyBy`).
|
|
46
|
+
- Use it for immutable identity fields while keeping the rest of a shape mutable.
|
|
47
|
+
|
|
48
|
+
## Additional examples
|
|
49
|
+
|
|
50
|
+
### ❌ Incorrect — Additional example
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import type { ReadonlyBy } from "type-aliases";
|
|
54
|
+
|
|
55
|
+
type Frozen = ReadonlyBy<User, "id">;
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### ✅ Correct — Additional example
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
import type { SetReadonly } from "type-fest";
|
|
62
|
+
|
|
63
|
+
type Frozen = SetReadonly<User, "id">;
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### ✅ Correct — Repository-wide usage
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
type ImmutableAudit = SetReadonly<AuditEntry, "timestamp" | "actor">;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## ESLint flat config example
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
import typefest from "eslint-plugin-typefest";
|
|
76
|
+
|
|
77
|
+
export default [
|
|
78
|
+
{
|
|
79
|
+
plugins: { typefest },
|
|
80
|
+
rules: {
|
|
81
|
+
"typefest/prefer-type-fest-set-readonly": "error",
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## When not to use it
|
|
88
|
+
|
|
89
|
+
Disable this rule if existing exported alias names must be preserved.
|
|
90
|
+
|
|
91
|
+
## Package documentation
|
|
92
|
+
|
|
93
|
+
TypeFest package documentation:
|
|
94
|
+
|
|
95
|
+
Source file: [`source/set-readonly.d.ts`](https://github.com/sindresorhus/type-fest/blob/main/source/set-readonly.d.ts)
|
|
96
|
+
|
|
97
|
+
````ts
|
|
98
|
+
/**
|
|
99
|
+
Create a type that makes the given keys readonly. The remaining keys are kept as is.
|
|
100
|
+
|
|
101
|
+
Use-case: You want to define a single model where the only thing that changes is whether or not some of the keys are readonly.
|
|
102
|
+
|
|
103
|
+
@example
|
|
104
|
+
```
|
|
105
|
+
import type {SetReadonly} from 'type-fest';
|
|
106
|
+
|
|
107
|
+
type Foo = {
|
|
108
|
+
a: number;
|
|
109
|
+
readonly b: string;
|
|
110
|
+
c: boolean;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
type SomeReadonly = SetReadonly<Foo, 'b' | 'c'>;
|
|
114
|
+
// type SomeReadonly = {
|
|
115
|
+
// a: number;
|
|
116
|
+
// readonly b: string; // Was already readonly and still is.
|
|
117
|
+
// readonly c: boolean; // Is now readonly.
|
|
118
|
+
// }
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
@category Object
|
|
122
|
+
*/
|
|
123
|
+
````
|
|
124
|
+
|
|
125
|
+
> **Rule catalog ID:** R064
|
|
126
|
+
|
|
127
|
+
## Further reading
|
|
128
|
+
|
|
129
|
+
- [`type-fest` README](https://github.com/sindresorhus/type-fest)
|
|
130
|
+
- [`type-fest` npm documentation](https://www.npmjs.com/package/type-fest)
|
|
131
|
+
- [TypeScript Handbook: Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html)
|
|
132
|
+
|
|
133
|
+
## Adoption resources
|
|
134
|
+
|
|
135
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
136
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# prefer-type-fest-set-required
|
|
2
|
+
|
|
3
|
+
Require TypeFest [`SetRequired<T, Keys>`](https://github.com/sindresorhus/type-fest/blob/main/source/set-required.d.ts) over imported aliases like
|
|
4
|
+
`RequiredBy`.
|
|
5
|
+
|
|
6
|
+
## Targeted pattern scope
|
|
7
|
+
|
|
8
|
+
This rule scopes matching to imported legacy aliases that model the same semantics as `SetRequired<T, Keys>`.
|
|
9
|
+
|
|
10
|
+
- Type references that resolve to imported `RequiredBy` aliases.
|
|
11
|
+
|
|
12
|
+
Locally defined lookalikes or unrelated type references are excluded unless they resolve to the targeted imported alias.
|
|
13
|
+
|
|
14
|
+
## What this rule reports
|
|
15
|
+
|
|
16
|
+
This rule reports imported alias usages that should migrate to `SetRequired<T, Keys>`.
|
|
17
|
+
|
|
18
|
+
- Type references that resolve to imported `RequiredBy` aliases.
|
|
19
|
+
|
|
20
|
+
## Why this rule exists
|
|
21
|
+
|
|
22
|
+
`SetRequired` is the canonical TypeFest utility for making selected keys
|
|
23
|
+
required. Standardizing on TypeFest naming reduces semantic drift between
|
|
24
|
+
utility libraries.
|
|
25
|
+
|
|
26
|
+
## ❌ Incorrect
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import type { RequiredBy } from "type-aliases";
|
|
30
|
+
|
|
31
|
+
type CompleteUser = RequiredBy<User, "id">;
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## ✅ Correct
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import type { SetRequired } from "type-fest";
|
|
38
|
+
|
|
39
|
+
type CompleteUser = SetRequired<User, "id">;
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Behavior and migration notes
|
|
43
|
+
|
|
44
|
+
- `SetRequired<T, Keys>` forces selected optional keys to be required.
|
|
45
|
+
- This rule targets imported aliases with equivalent semantics (`RequiredBy`).
|
|
46
|
+
- Use this utility in post-validation and persisted-domain types where selected fields become mandatory.
|
|
47
|
+
|
|
48
|
+
## Additional examples
|
|
49
|
+
|
|
50
|
+
### ❌ Incorrect — Additional example
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import type { RequiredBy } from "type-aliases";
|
|
54
|
+
|
|
55
|
+
type Complete = RequiredBy<User, "id">;
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### ✅ Correct — Additional example
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
import type { SetRequired } from "type-fest";
|
|
62
|
+
|
|
63
|
+
type Complete = SetRequired<User, "id">;
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### ✅ Correct — Repository-wide usage
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
type Persisted = SetRequired<Order, "id" | "status">;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## ESLint flat config example
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
import typefest from "eslint-plugin-typefest";
|
|
76
|
+
|
|
77
|
+
export default [
|
|
78
|
+
{
|
|
79
|
+
plugins: { typefest },
|
|
80
|
+
rules: {
|
|
81
|
+
"typefest/prefer-type-fest-set-required": "error",
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## When not to use it
|
|
88
|
+
|
|
89
|
+
Disable this rule if existing exported alias names are part of a compatibility contract.
|
|
90
|
+
|
|
91
|
+
## Package documentation
|
|
92
|
+
|
|
93
|
+
TypeFest package documentation:
|
|
94
|
+
|
|
95
|
+
Source file: [`source/set-required.d.ts`](https://github.com/sindresorhus/type-fest/blob/main/source/set-required.d.ts)
|
|
96
|
+
|
|
97
|
+
````ts
|
|
98
|
+
/**
|
|
99
|
+
Create a type that makes the given keys required. The remaining keys are kept as is. The sister of the `SetOptional` type.
|
|
100
|
+
|
|
101
|
+
Use-case: You want to define a single model where the only thing that changes is whether or not some of the keys are required.
|
|
102
|
+
|
|
103
|
+
@example
|
|
104
|
+
```
|
|
105
|
+
import type {SetRequired} from 'type-fest';
|
|
106
|
+
|
|
107
|
+
type Foo = {
|
|
108
|
+
a?: number;
|
|
109
|
+
b: string;
|
|
110
|
+
c?: boolean;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
type SomeRequired = SetRequired<Foo, 'b' | 'c'>;
|
|
114
|
+
// type SomeRequired = {
|
|
115
|
+
// a?: number;
|
|
116
|
+
// b: string; // Was already required and still is.
|
|
117
|
+
// c: boolean; // Is now required.
|
|
118
|
+
// }
|
|
119
|
+
|
|
120
|
+
// Set specific indices in an array to be required.
|
|
121
|
+
type ArrayExample = SetRequired<[number?, number?, number?], 0 | 1>;
|
|
122
|
+
//=> [number, number, number?]
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
@category Object
|
|
126
|
+
*/
|
|
127
|
+
````
|
|
128
|
+
|
|
129
|
+
> **Rule catalog ID:** R065
|
|
130
|
+
|
|
131
|
+
## Further reading
|
|
132
|
+
|
|
133
|
+
- [`type-fest` README](https://github.com/sindresorhus/type-fest)
|
|
134
|
+
- [`type-fest` npm documentation](https://www.npmjs.com/package/type-fest)
|
|
135
|
+
- [TypeScript Handbook: Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html)
|
|
136
|
+
|
|
137
|
+
## Adoption resources
|
|
138
|
+
|
|
139
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
140
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# prefer-type-fest-simplify
|
|
2
|
+
|
|
3
|
+
Require TypeFest [`Simplify<T>`](https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts) over imported `Prettify<T>` / `Expand<T>` aliases.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule only matches type references that resolve to imported `Prettify` or `Expand` aliases and can be rewritten as `Simplify<T>`.
|
|
8
|
+
|
|
9
|
+
- Type references that resolve to imported `Prettify` aliases.
|
|
10
|
+
- Type references that resolve to imported `Expand` aliases.
|
|
11
|
+
|
|
12
|
+
Syntactically similar alternatives are intentionally out of scope unless they preserve the same AST shape.
|
|
13
|
+
|
|
14
|
+
## What this rule reports
|
|
15
|
+
|
|
16
|
+
This rule reports imported `Prettify` / `Expand` alias usages that should be replaced with `Simplify<T>`.
|
|
17
|
+
|
|
18
|
+
- Type references that resolve to imported `Prettify` aliases.
|
|
19
|
+
- Type references that resolve to imported `Expand` aliases.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`Simplify` is the canonical flattening utility provided by type-fest. Standardizing on it reduces utility-name churn across codebases and keeps helper usage consistent with TypeFest defaults.
|
|
24
|
+
|
|
25
|
+
## ❌ Incorrect
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import type { Prettify } from "type-aliases";
|
|
29
|
+
|
|
30
|
+
type ViewModel = Prettify<Base & Extra>;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## ✅ Correct
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import type { Simplify } from "type-fest";
|
|
37
|
+
|
|
38
|
+
type ViewModel = Simplify<Base & Extra>;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Behavior and migration notes
|
|
42
|
+
|
|
43
|
+
- `Simplify<T>` normalizes intersections and mapped-type output into a flattened object shape for editor display and assignability workflows.
|
|
44
|
+
- This rule targets imported alias names with overlapping semantics (`Prettify`, `Expand`).
|
|
45
|
+
- Keep aliases only when they intentionally add semantics beyond plain type flattening.
|
|
46
|
+
|
|
47
|
+
## Additional examples
|
|
48
|
+
|
|
49
|
+
### ❌ Incorrect — Additional example
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
import type { Expand } from "type-aliases";
|
|
53
|
+
|
|
54
|
+
type UIModel = Expand<Base & Extra>;
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### ✅ Correct — Additional example
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
import type { Simplify } from "type-fest";
|
|
61
|
+
|
|
62
|
+
type UIModel = Simplify<Base & Extra>;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### ✅ Correct — Repository-wide usage
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
type ApiModel = Simplify<ResponseBase & ResponseExtra>;
|
|
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-type-fest-simplify": "error",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## When not to use it
|
|
87
|
+
|
|
88
|
+
Disable this rule if internal tooling depends on existing alias names.
|
|
89
|
+
|
|
90
|
+
## Package documentation
|
|
91
|
+
|
|
92
|
+
TypeFest package documentation:
|
|
93
|
+
|
|
94
|
+
Source file: [`source/simplify.d.ts`](https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts)
|
|
95
|
+
|
|
96
|
+
````ts
|
|
97
|
+
/**
|
|
98
|
+
Useful to flatten the type output to improve type hints shown in editors. And also to transform an interface into a type to aide with assignability.
|
|
99
|
+
|
|
100
|
+
@example
|
|
101
|
+
```
|
|
102
|
+
import type {Simplify} from 'type-fest';
|
|
103
|
+
|
|
104
|
+
type PositionProps = {
|
|
105
|
+
top: number;
|
|
106
|
+
left: number;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
type SizeProps = {
|
|
110
|
+
width: number;
|
|
111
|
+
height: number;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// In your editor, hovering over `Props` will show a flattened object with all the properties.
|
|
115
|
+
type Props = Simplify<PositionProps & SizeProps>;
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Sometimes it is desired to pass a value as a function argument that has a different type. At first inspection it may seem assignable, and then you discover it is not because the `value`'s type definition was defined as an interface. In the following example, `fn` requires an argument of type `Record<string, unknown>`. If the value is defined as a literal, then it is assignable. And if the `value` is defined as type using the `Simplify` utility the value is assignable. But if the `value` is defined as an interface, it is not assignable because the interface is not sealed and elsewhere a non-string property could be added to the interface.
|
|
119
|
+
|
|
120
|
+
If the type definition must be an interface (perhaps it was defined in a third-party npm package), then the `value` can be defined as `const value: Simplify<SomeInterface> = ...`. Then `value` will be assignable to the `fn` argument. Or the `value` can be cast as `Simplify<SomeInterface>` if you can't re-declare the `value`.
|
|
121
|
+
|
|
122
|
+
@example
|
|
123
|
+
```
|
|
124
|
+
import type {Simplify} from 'type-fest';
|
|
125
|
+
|
|
126
|
+
interface SomeInterface {
|
|
127
|
+
foo: number;
|
|
128
|
+
bar?: string;
|
|
129
|
+
baz: number | undefined;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
type SomeType = {
|
|
133
|
+
foo: number;
|
|
134
|
+
bar?: string;
|
|
135
|
+
baz: number | undefined;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const literal = {foo: 123, bar: 'hello', baz: 456};
|
|
139
|
+
const someType: SomeType = literal;
|
|
140
|
+
const someInterface: SomeInterface = literal;
|
|
141
|
+
|
|
142
|
+
declare function fn(object: Record<string, unknown>): void;
|
|
143
|
+
|
|
144
|
+
fn(literal); // Good: literal object type is sealed
|
|
145
|
+
fn(someType); // Good: type is sealed
|
|
146
|
+
// @ts-expect-error
|
|
147
|
+
fn(someInterface); // Error: Index signature for type 'string' is missing in type 'someInterface'. Because `interface` can be re-opened
|
|
148
|
+
fn(someInterface as Simplify<SomeInterface>); // Good: transform an `interface` into a `type`
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
@link https://github.com/microsoft/TypeScript/issues/15300
|
|
152
|
+
@see {@link SimplifyDeep}
|
|
153
|
+
@category Object
|
|
154
|
+
*/
|
|
155
|
+
````
|
|
156
|
+
|
|
157
|
+
> **Rule catalog ID:** R066
|
|
158
|
+
|
|
159
|
+
## Further reading
|
|
160
|
+
|
|
161
|
+
- [`type-fest` README](https://github.com/sindresorhus/type-fest)
|
|
162
|
+
- [`type-fest` npm documentation](https://www.npmjs.com/package/type-fest)
|
|
163
|
+
- [TypeScript Handbook: Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html)
|
|
164
|
+
|
|
165
|
+
## Adoption resources
|
|
166
|
+
|
|
167
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
168
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|