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,135 @@
|
|
|
1
|
+
# prefer-ts-extras-array-includes
|
|
2
|
+
|
|
3
|
+
Prefer [`arrayIncludes`](https://github.com/sindresorhus/ts-extras/blob/main/source/array-includes.ts) from `ts-extras` over `array.includes(...)`.
|
|
4
|
+
|
|
5
|
+
`arrayIncludes(...)` improves inference and narrowing when checking whether unknown values belong to a known tuple/array.
|
|
6
|
+
|
|
7
|
+
## Targeted pattern scope
|
|
8
|
+
|
|
9
|
+
This rule focuses on direct `array.includes(value)` calls that can be migrated to `arrayIncludes(array, value)` with deterministic fixes.
|
|
10
|
+
|
|
11
|
+
- `array.includes(value)` call sites that can use `arrayIncludes(array, value)`.
|
|
12
|
+
|
|
13
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `arrayIncludes(array, value)` migrations safe.
|
|
14
|
+
|
|
15
|
+
## What this rule reports
|
|
16
|
+
|
|
17
|
+
This rule reports `array.includes(value)` call sites when `arrayIncludes(array, value)` is the intended replacement.
|
|
18
|
+
|
|
19
|
+
- `array.includes(value)` call sites that can use `arrayIncludes(array, value)`.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`arrayIncludes` is especially useful when checking if an unknown value belongs to a known literal tuple.
|
|
24
|
+
|
|
25
|
+
- Membership checks can narrow candidate values in control flow.
|
|
26
|
+
- Guard logic is consistent with other `ts-extras` predicates.
|
|
27
|
+
- Native `.includes` call sites that need manual casts are reduced.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const hasStatus = statuses.includes(inputStatus);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const hasStatus = arrayIncludes(statuses, inputStatus);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Behavior and migration notes
|
|
42
|
+
|
|
43
|
+
- Runtime semantics follow native `Array.prototype.includes`.
|
|
44
|
+
- Comparison uses SameValueZero (`NaN` matches `NaN`, `+0` equals `-0`).
|
|
45
|
+
- Return type remains boolean, with improved narrowing behavior when array values are literal unions.
|
|
46
|
+
|
|
47
|
+
## Additional examples
|
|
48
|
+
|
|
49
|
+
### ❌ Incorrect — Additional example
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
if (roles.includes(candidate)) {
|
|
53
|
+
grantAccess(candidate);
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### ✅ Correct — Additional example
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
if (arrayIncludes(roles, candidate)) {
|
|
61
|
+
grantAccess(candidate);
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### ✅ Correct — Repository-wide usage
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
const isKnownStatus = arrayIncludes(statuses, value);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## ESLint flat config example
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import typefest from "eslint-plugin-typefest";
|
|
75
|
+
|
|
76
|
+
export default [
|
|
77
|
+
{
|
|
78
|
+
plugins: { typefest },
|
|
79
|
+
rules: {
|
|
80
|
+
"typefest/prefer-ts-extras-array-includes": "error",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## When not to use it
|
|
87
|
+
|
|
88
|
+
Disable this rule if your codebase intentionally standardizes on native `.includes()`.
|
|
89
|
+
|
|
90
|
+
## Package documentation
|
|
91
|
+
|
|
92
|
+
ts-extras package documentation:
|
|
93
|
+
|
|
94
|
+
Source file: [`source/array-includes.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/array-includes.ts)
|
|
95
|
+
|
|
96
|
+
````ts
|
|
97
|
+
/**
|
|
98
|
+
A strongly-typed version of `Array#includes()` that properly acts as a type guard.
|
|
99
|
+
|
|
100
|
+
When `arrayIncludes` returns `true`, the type is narrowed to the array's element type.
|
|
101
|
+
When it returns `false`, the type remains unchanged (i.e., `unknown` stays `unknown`).
|
|
102
|
+
|
|
103
|
+
It was [rejected](https://github.com/microsoft/TypeScript/issues/26255#issuecomment-748211891) from being done in TypeScript itself.
|
|
104
|
+
|
|
105
|
+
@example
|
|
106
|
+
```
|
|
107
|
+
import {arrayIncludes} from 'ts-extras';
|
|
108
|
+
|
|
109
|
+
const values = ['a', 'b', 'c'] as const;
|
|
110
|
+
const valueToCheck: unknown = 'a';
|
|
111
|
+
|
|
112
|
+
if (arrayIncludes(values, valueToCheck)) {
|
|
113
|
+
// We now know that the value is of type `typeof values[number]`.
|
|
114
|
+
} else {
|
|
115
|
+
// The value remains `unknown`.
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
@category Improved builtin
|
|
120
|
+
@category Type guard
|
|
121
|
+
*/
|
|
122
|
+
````
|
|
123
|
+
|
|
124
|
+
> **Rule catalog ID:** R007
|
|
125
|
+
|
|
126
|
+
## Further reading
|
|
127
|
+
|
|
128
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
129
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
130
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
131
|
+
|
|
132
|
+
## Adoption resources
|
|
133
|
+
|
|
134
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
135
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# prefer-ts-extras-array-join
|
|
2
|
+
|
|
3
|
+
Prefer [`arrayJoin`](https://github.com/sindresorhus/ts-extras/blob/main/source/array-join.ts) from `ts-extras` over `array.join(...)`.
|
|
4
|
+
|
|
5
|
+
`arrayJoin(...)` can preserve stronger tuple-aware typing when joining array values.
|
|
6
|
+
|
|
7
|
+
## Targeted pattern scope
|
|
8
|
+
|
|
9
|
+
This rule focuses on direct `array.join(separator)` calls that can be migrated to `arrayJoin(array, separator)` with deterministic fixes.
|
|
10
|
+
|
|
11
|
+
- `array.join(separator)` call sites that can use `arrayJoin(array, separator)`.
|
|
12
|
+
|
|
13
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `arrayJoin(array, separator)` migrations safe.
|
|
14
|
+
|
|
15
|
+
## What this rule reports
|
|
16
|
+
|
|
17
|
+
This rule reports `array.join(separator)` call sites when `arrayJoin(array, separator)` is the intended replacement.
|
|
18
|
+
|
|
19
|
+
- `array.join(separator)` call sites that can use `arrayJoin(array, separator)`.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`arrayJoin` keeps string assembly consistent and can preserve stronger string typing when arrays and separators are literals.
|
|
24
|
+
|
|
25
|
+
- Join operations use one helper style across modules.
|
|
26
|
+
- Literal-based join results are inferred more precisely in typed utilities.
|
|
27
|
+
- Join-heavy code paths avoid mixed native/helper patterns.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const key = segments.join(":");
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const key = arrayJoin(segments, ":");
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Behavior and migration notes
|
|
42
|
+
|
|
43
|
+
- Runtime behavior matches native `Array.prototype.join`.
|
|
44
|
+
- Missing separator still defaults to `","`.
|
|
45
|
+
- `null` and `undefined` entries are converted to empty strings, matching native behavior.
|
|
46
|
+
|
|
47
|
+
## Additional examples
|
|
48
|
+
|
|
49
|
+
### ❌ Incorrect — Additional example
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
const route = segments.join("/");
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### ✅ Correct — Additional example
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
const route = arrayJoin(segments, "/");
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### ✅ Correct — Repository-wide usage
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
const csv = arrayJoin(columns, ",");
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## ESLint flat config example
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
import typefest from "eslint-plugin-typefest";
|
|
71
|
+
|
|
72
|
+
export default [
|
|
73
|
+
{
|
|
74
|
+
plugins: { typefest },
|
|
75
|
+
rules: {
|
|
76
|
+
"typefest/prefer-ts-extras-array-join": "error",
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## When not to use it
|
|
83
|
+
|
|
84
|
+
Disable this rule if your codebase requires native `.join()` for API consistency.
|
|
85
|
+
|
|
86
|
+
## Package documentation
|
|
87
|
+
|
|
88
|
+
ts-extras package documentation:
|
|
89
|
+
|
|
90
|
+
Source file: [`source/array-join.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/array-join.ts)
|
|
91
|
+
|
|
92
|
+
````ts
|
|
93
|
+
/**
|
|
94
|
+
A strongly-typed version of `Array#join()` that preserves literal string types.
|
|
95
|
+
|
|
96
|
+
The built-in `Array#join()` always returns `string`, losing type information. This function returns a properly-typed template literal when given a tuple of literals.
|
|
97
|
+
|
|
98
|
+
@example
|
|
99
|
+
```
|
|
100
|
+
import {arrayJoin} from 'ts-extras';
|
|
101
|
+
|
|
102
|
+
// Literal types are preserved automatically
|
|
103
|
+
const joined = arrayJoin(['foo', 'bar', 'baz'], '-');
|
|
104
|
+
//=> 'foo-bar-baz'
|
|
105
|
+
// ^? 'foo-bar-baz'
|
|
106
|
+
|
|
107
|
+
const dotPath = arrayJoin(['a', 'b', 'c'], '.');
|
|
108
|
+
//=> 'a.b.c'
|
|
109
|
+
// ^? 'a.b.c'
|
|
110
|
+
|
|
111
|
+
// Dynamic arrays return string
|
|
112
|
+
const dynamic: string[] = ['a', 'b'];
|
|
113
|
+
const dynamicJoined = arrayJoin(dynamic, '-');
|
|
114
|
+
//=> string
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
@category Improved builtin
|
|
118
|
+
*/
|
|
119
|
+
````
|
|
120
|
+
|
|
121
|
+
> **Rule catalog ID:** R008
|
|
122
|
+
|
|
123
|
+
## Further reading
|
|
124
|
+
|
|
125
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
126
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
127
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
128
|
+
|
|
129
|
+
## Adoption resources
|
|
130
|
+
|
|
131
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
132
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# prefer-ts-extras-array-last
|
|
2
|
+
|
|
3
|
+
Require [`arrayLast`](https://github.com/sindresorhus/ts-extras/blob/main/source/array-last.ts) from `ts-extras` over direct `array[array.length - 1]` access.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule only matches direct last-element index access (`receiver[receiver.length - 1]`) where the receiver expression can be reused unchanged in `arrayLast(receiver)`.
|
|
8
|
+
|
|
9
|
+
- Direct last-element index patterns (`array[array.length - 1]`).
|
|
10
|
+
|
|
11
|
+
Syntactically similar alternatives are intentionally out of scope unless they preserve the same AST shape.
|
|
12
|
+
|
|
13
|
+
## What this rule reports
|
|
14
|
+
|
|
15
|
+
This rule reports direct `receiver[receiver.length - 1]` access sites that can be safely replaced with `arrayLast(receiver)`.
|
|
16
|
+
|
|
17
|
+
- Direct last-element index patterns (`array[array.length - 1]`).
|
|
18
|
+
|
|
19
|
+
## Why this rule exists
|
|
20
|
+
|
|
21
|
+
`arrayLast` makes last-element access explicit and keeps type inference behavior consistent with other `ts-extras` array helpers.
|
|
22
|
+
|
|
23
|
+
- Last-element access is easier to audit in large codebases.
|
|
24
|
+
- Tuple/readonly array access patterns are standardized.
|
|
25
|
+
- Helper-driven access reduces repeated inline index arithmetic.
|
|
26
|
+
|
|
27
|
+
## ❌ Incorrect
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
const last = values[values.length - 1];
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## ✅ Correct
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
const last = arrayLast(values);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Behavior and migration notes
|
|
40
|
+
|
|
41
|
+
- Runtime behavior matches `array[array.length - 1]`.
|
|
42
|
+
- Empty arrays still produce `undefined`.
|
|
43
|
+
- Equivalent index expressions with extra wrappers should be reviewed manually during migration.
|
|
44
|
+
|
|
45
|
+
## Additional examples
|
|
46
|
+
|
|
47
|
+
### ❌ Incorrect — Additional example
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
const last = rows[rows.length - 1];
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### ✅ Correct — Additional example
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
const last = arrayLast(rows);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### ✅ Correct — Repository-wide usage
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
const lastStep = arrayLast(steps);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## ESLint flat config example
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import typefest from "eslint-plugin-typefest";
|
|
69
|
+
|
|
70
|
+
export default [
|
|
71
|
+
{
|
|
72
|
+
plugins: { typefest },
|
|
73
|
+
rules: {
|
|
74
|
+
"typefest/prefer-ts-extras-array-last": "error",
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## When not to use it
|
|
81
|
+
|
|
82
|
+
Disable this rule if direct index expressions are mandated by local style rules.
|
|
83
|
+
|
|
84
|
+
## Package documentation
|
|
85
|
+
|
|
86
|
+
ts-extras package documentation:
|
|
87
|
+
|
|
88
|
+
Source file: [`source/array-last.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/array-last.ts)
|
|
89
|
+
|
|
90
|
+
````ts
|
|
91
|
+
/**
|
|
92
|
+
Return the last item of an array with stronger typing for tuples.
|
|
93
|
+
|
|
94
|
+
This provides better type safety than `array[array.length - 1]` or `array.at(-1)`.
|
|
95
|
+
|
|
96
|
+
@example
|
|
97
|
+
```
|
|
98
|
+
import {arrayLast} from 'ts-extras';
|
|
99
|
+
|
|
100
|
+
const tuple = ['abc', 123, true] as const;
|
|
101
|
+
const last = arrayLast(tuple);
|
|
102
|
+
//=> true
|
|
103
|
+
// ^? true
|
|
104
|
+
|
|
105
|
+
const array = ['a', 'b', 'c'];
|
|
106
|
+
const maybeLast = arrayLast(array);
|
|
107
|
+
//=> 'c'
|
|
108
|
+
// ^? string | undefined
|
|
109
|
+
|
|
110
|
+
// Empty arrays
|
|
111
|
+
const empty: string[] = [];
|
|
112
|
+
const noLast = arrayLast(empty);
|
|
113
|
+
//=> undefined
|
|
114
|
+
// ^? string | undefined
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
@category Improved builtin
|
|
118
|
+
*/
|
|
119
|
+
````
|
|
120
|
+
|
|
121
|
+
> **Rule catalog ID:** R009
|
|
122
|
+
|
|
123
|
+
## Further reading
|
|
124
|
+
|
|
125
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
126
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
127
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
128
|
+
|
|
129
|
+
## Adoption resources
|
|
130
|
+
|
|
131
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
132
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# prefer-ts-extras-as-writable
|
|
2
|
+
|
|
3
|
+
Prefer [`asWritable`](https://github.com/sindresorhus/ts-extras/blob/main/source/as-writable.ts) from `ts-extras` over `Writable<...>` type assertions.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule focuses on mutation-intent type assertions that map directly to `asWritable(value)`.
|
|
8
|
+
|
|
9
|
+
### Matched patterns
|
|
10
|
+
|
|
11
|
+
- `as` assertions where the asserted type is `Writable<...>` imported from `type-fest`.
|
|
12
|
+
- Namespace-qualified assertions such as `TypeFest.Writable<...>` when `TypeFest` comes from `type-fest`.
|
|
13
|
+
|
|
14
|
+
### Detection boundaries
|
|
15
|
+
|
|
16
|
+
- ✅ Reports `Writable`-based type assertions that are direct helper replacements.
|
|
17
|
+
- ❌ Does not report unrelated `as` assertions with non-`Writable` target types.
|
|
18
|
+
|
|
19
|
+
These boundaries keep matching deterministic and avoid broad semantic overreach during migration.
|
|
20
|
+
|
|
21
|
+
## What this rule reports
|
|
22
|
+
|
|
23
|
+
`Writable<...>`-based type assertions that can be replaced with `asWritable(value)`.
|
|
24
|
+
|
|
25
|
+
## Why this rule exists
|
|
26
|
+
|
|
27
|
+
`asWritable(value)` communicates intent directly and keeps mutation-intent casts aligned with the `ts-extras` helper API.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import type { Writable } from "type-fest";
|
|
33
|
+
|
|
34
|
+
const writableUser = readonlyUser as Writable<User>;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## ✅ Correct
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import { asWritable } from "ts-extras";
|
|
41
|
+
|
|
42
|
+
const writableUser = asWritable(readonlyUser);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Behavior and migration notes
|
|
46
|
+
|
|
47
|
+
- `asWritable(value)` preserves runtime behavior while expressing mutability intent through one helper.
|
|
48
|
+
- Direct `as Writable<T>` / `as TypeFest.Writable<T>` assertions are reported.
|
|
49
|
+
- This rule does not rewrite unrelated type assertions.
|
|
50
|
+
|
|
51
|
+
## Additional examples
|
|
52
|
+
|
|
53
|
+
### ❌ Incorrect — Additional example
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
const mutable = config as Writable<typeof config>;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### ✅ Correct — Additional example
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
const mutable = asWritable(config);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### ✅ Correct — Repository-wide usage
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
const draft = asWritable(readonlyDraft);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## ESLint flat config example
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import typefest from "eslint-plugin-typefest";
|
|
75
|
+
|
|
76
|
+
export default [
|
|
77
|
+
{
|
|
78
|
+
plugins: { typefest },
|
|
79
|
+
rules: {
|
|
80
|
+
"typefest/prefer-ts-extras-as-writable": "error",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## When not to use it
|
|
87
|
+
|
|
88
|
+
Disable this rule if mutation boundaries are enforced through explicit type assertions by policy.
|
|
89
|
+
|
|
90
|
+
## Package documentation
|
|
91
|
+
|
|
92
|
+
ts-extras package documentation:
|
|
93
|
+
|
|
94
|
+
Source file: [`source/as-writable.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/as-writable.ts)
|
|
95
|
+
|
|
96
|
+
````ts
|
|
97
|
+
/**
|
|
98
|
+
Cast the given value to be [`Writable`](https://github.com/sindresorhus/type-fest/blob/main/source/writable.d.ts).
|
|
99
|
+
|
|
100
|
+
This is useful because of a [TypeScript limitation](https://github.com/microsoft/TypeScript/issues/45618#issuecomment-908072756).
|
|
101
|
+
|
|
102
|
+
@example
|
|
103
|
+
```
|
|
104
|
+
import {asWritable} from 'ts-extras';
|
|
105
|
+
|
|
106
|
+
const writableContext = asWritable((await import('x')).context);
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
@category General
|
|
110
|
+
*/
|
|
111
|
+
````
|
|
112
|
+
|
|
113
|
+
> **Rule catalog ID:** R010
|
|
114
|
+
|
|
115
|
+
## Further reading
|
|
116
|
+
|
|
117
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
118
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
119
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
120
|
+
|
|
121
|
+
## Adoption resources
|
|
122
|
+
|
|
123
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
124
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# prefer-ts-extras-assert-defined
|
|
2
|
+
|
|
3
|
+
Require [`assertDefined`](https://github.com/sindresorhus/ts-extras/blob/main/source/assert-defined.ts) from `ts-extras` over manual undefined-guard throw blocks.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule focuses on throw-only undefined guards that map directly to `assertDefined(value)`.
|
|
8
|
+
|
|
9
|
+
### Matched patterns
|
|
10
|
+
|
|
11
|
+
- `if (value === undefined) throw ...`
|
|
12
|
+
- `if (undefined === value) throw ...`
|
|
13
|
+
- `if (value == undefined) throw ...`
|
|
14
|
+
- `if (undefined == value) throw ...`
|
|
15
|
+
|
|
16
|
+
Only `if` statements that have no `else` branch and a throw-only consequent are
|
|
17
|
+
reported.
|
|
18
|
+
|
|
19
|
+
### Detection boundaries
|
|
20
|
+
|
|
21
|
+
- ✅ Reports direct undefined-equality guards with throw-only consequents.
|
|
22
|
+
- ❌ Does not report guards that return, log, or perform additional statements.
|
|
23
|
+
- ❌ Does not report `typeof value === "undefined"` patterns.
|
|
24
|
+
- ❌ Does not auto-fix.
|
|
25
|
+
|
|
26
|
+
These boundaries keep matching deterministic and avoid broad semantic overreach during migration.
|
|
27
|
+
|
|
28
|
+
## What this rule reports
|
|
29
|
+
|
|
30
|
+
Throw-only undefined guard blocks that can be replaced with `assertDefined(value)`.
|
|
31
|
+
|
|
32
|
+
## Why this rule exists
|
|
33
|
+
|
|
34
|
+
`assertDefined()` expresses the intent of narrowing away `undefined` and centralizes assertion behavior.
|
|
35
|
+
|
|
36
|
+
In large services, inline guards often diverge in error types/messages. Using
|
|
37
|
+
`assertDefined` gives one recognizable pattern while preserving narrowing.
|
|
38
|
+
|
|
39
|
+
## ❌ Incorrect
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
if (token === undefined) {
|
|
43
|
+
throw new Error("Token is required");
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## ✅ Correct
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
assertDefined(token);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Behavior and migration notes
|
|
54
|
+
|
|
55
|
+
- `assertDefined(value)` narrows away `undefined` after the assertion.
|
|
56
|
+
- This rule intentionally targets throw-only guards without `else` branches.
|
|
57
|
+
- `typeof value === "undefined"` checks are intentionally out of scope.
|
|
58
|
+
|
|
59
|
+
## Additional examples
|
|
60
|
+
|
|
61
|
+
### ❌ Incorrect — Additional example
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
if (undefined == monitorId) {
|
|
65
|
+
throw new TypeError("monitorId is required");
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### ✅ Correct — Additional example
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
assertDefined(monitorId);
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### ✅ Correct — Repository-wide usage
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
assertDefined(config.apiKey);
|
|
79
|
+
assertDefined(config.baseUrl);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## ESLint flat config example
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import typefest from "eslint-plugin-typefest";
|
|
86
|
+
|
|
87
|
+
export default [
|
|
88
|
+
{
|
|
89
|
+
plugins: { typefest },
|
|
90
|
+
rules: {
|
|
91
|
+
"typefest/prefer-ts-extras-assert-defined": "error",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## When not to use it
|
|
98
|
+
|
|
99
|
+
Disable this rule if your error-handling layer requires custom throw logic in each guard block.
|
|
100
|
+
|
|
101
|
+
## Package documentation
|
|
102
|
+
|
|
103
|
+
ts-extras package documentation:
|
|
104
|
+
|
|
105
|
+
Source file: [`source/assert-defined.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/assert-defined.ts)
|
|
106
|
+
|
|
107
|
+
````ts
|
|
108
|
+
/**
|
|
109
|
+
Assert that the given value is defined, meaning it is not `undefined`.
|
|
110
|
+
|
|
111
|
+
If the value is `undefined`, a helpful `TypeError` will be thrown.
|
|
112
|
+
|
|
113
|
+
@example
|
|
114
|
+
```
|
|
115
|
+
import {assertDefined} from 'ts-extras';
|
|
116
|
+
|
|
117
|
+
const unicorn = 'unicorn';
|
|
118
|
+
assertDefined(unicorn);
|
|
119
|
+
|
|
120
|
+
const notUnicorn = undefined;
|
|
121
|
+
assertDefined(notUnicorn);
|
|
122
|
+
//=> TypeError: Expected a defined value, got `undefined`
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
@category Type guard
|
|
126
|
+
*/
|
|
127
|
+
````
|
|
128
|
+
|
|
129
|
+
> **Rule catalog ID:** R011
|
|
130
|
+
|
|
131
|
+
## Further reading
|
|
132
|
+
|
|
133
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
134
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
135
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.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)
|