UNPKG

@ospm/eslint-plugin-react-signals-hooks

Version:

ESLint plugin for React Signals hooks - enforces best practices, performance optimizations, and integration patterns for @preact/signals-react usage in React projects

814 lines 161 kB
import '@total-typescript/ts-reset'; import type { Linter, ESLint } from 'eslint'; type FlatConfig = ESLint.FlatConfig; type LegacyConfig = Linter.Config; declare module 'eslint' { namespace ESLint { interface FlatConfig { } } namespace Linter { interface Config { } } } declare const rules: { readonly 'exhaustive-deps': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingDependencies" | "missingDependency" | "unnecessaryDependencies" | "unnecessaryDependency" | "duplicateDependencies" | "duplicateDependency" | "unknownDependencies" | "asyncEffect" | "missingEffectCallback" | "staleAssignmentDependency" | "staleAssignmentLiteral" | "staleAssignmentExpression" | "staleAssignmentUnstable" | "spreadElementInDependencyArray" | "useEffectEventInDependencyArray" | "addAllDependencies" | "addSingleDependency" | "removeDependencyArray" | "addDependencies" | "removeDependency" | "removeSingleDependency" | "removeAllDuplicates" | "removeAllUnnecessaryDependencies" | "removeThisDuplicate" | "dependencyWithoutSignal" | "notArrayLiteral" | "moveInsideEffect", [{ additionalHooks?: string | undefined; unsafeAutofix?: boolean; experimental_autoDependenciesHooks?: Array<string>; requireExplicitEffectDeps?: boolean; enableAutoFixForMemoAndCallback?: boolean; performance?: import("./utils/types.js").PerformanceBudget; severity?: { missingDependencies?: "error" | "warn" | "off"; missingDependency?: "error" | "warn" | "off"; unnecessaryDependencies?: "error" | "warn" | "off"; unnecessaryDependency?: "error" | "warn" | "off"; duplicateDependencies?: "error" | "warn" | "off"; duplicateDependency?: "error" | "warn" | "off"; unknownDependencies?: "error" | "warn" | "off"; asyncEffect?: "error" | "warn" | "off"; missingEffectCallback?: "error" | "warn" | "off"; staleAssignmentDependency?: "error" | "warn" | "off"; staleAssignmentLiteral?: "error" | "warn" | "off"; staleAssignmentExpression?: "error" | "warn" | "off"; staleAssignmentUnstable?: "error" | "warn" | "off"; spreadElementInDependencyArray?: "error" | "warn" | "off"; useEffectEventInDependencyArray?: "error" | "warn" | "off"; addAllDependencies?: "error" | "warn" | "off"; addSingleDependency?: "error" | "warn" | "off"; removeDependencyArray?: "error" | "warn" | "off"; addDependencies?: "error" | "warn" | "off"; removeDependency?: "error" | "warn" | "off"; removeSingleDependency?: "error" | "warn" | "off"; removeAllDuplicates?: "error" | "warn" | "off"; removeAllUnnecessaryDependencies?: "error" | "warn" | "off"; removeThisDuplicate?: "error" | "warn" | "off"; dependencyWithoutSignal?: "error" | "warn" | "off"; notArrayLiteral?: "error" | "warn" | "off"; moveInsideEffect?: "error" | "warn" | "off"; }; suffix?: string; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-mutation-in-render': import("@typescript-eslint/utils/ts-eslint").RuleModule<"signalValueAssignment" | "signalValueUpdate" | "signalPropertyAssignment" | "suggestUseEffect" | "suggestEventHandler" | "signalArrayIndexAssignment" | "signalNestedPropertyAssignment", [{ signalNames?: Array<string>; allowedPatterns?: Array<string>; severity?: { signalValueAssignment?: "error" | "warn" | "off"; signalValueUpdate?: "error" | "warn" | "off"; signalPropertyAssignment?: "error" | "warn" | "off"; suggestUseEffect?: "error" | "warn" | "off"; suggestEventHandler?: "error" | "warn" | "off"; signalArrayIndexAssignment?: "error" | "warn" | "off"; signalNestedPropertyAssignment?: "error" | "warn" | "off"; }; unsafeAutofix?: boolean; suffix?: string; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-signal-assignment-in-effect': import("@typescript-eslint/utils/ts-eslint").RuleModule<"avoidSignalAssignmentInEffect" | "suggestUseSignalsEffect" | "suggestUseSignalsLayoutEffect" | "avoidSignalAssignmentInLayoutEffect", [{ signalNames?: Array<string>; allowedPatterns?: Array<string>; severity?: { avoidSignalAssignmentInEffect?: "error" | "warn" | "off"; suggestUseSignalsEffect?: "error" | "warn" | "off"; suggestUseSignalsLayoutEffect?: "error" | "warn" | "off"; avoidSignalAssignmentInLayoutEffect?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-non-signal-with-signal-suffix': import("@typescript-eslint/utils/ts-eslint").RuleModule<"variableWithSignalSuffixNotSignal" | "parameterWithSignalSuffixNotSignal" | "propertyWithSignalSuffixNotSignal" | "suggestRenameWithoutSuffix" | "suggestConvertToSignal", [{ ignorePattern?: string; signalNames?: Array<string>; suffix?: string; validateProperties?: boolean; validateExported?: boolean; severity?: { variableWithSignalSuffixNotSignal?: "error" | "warn" | "off"; parameterWithSignalSuffixNotSignal?: "error" | "warn" | "off"; propertyWithSignalSuffixNotSignal?: "error" | "warn" | "off"; suggestRenameWithoutSuffix?: "error" | "warn" | "off"; suggestConvertToSignal?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-signal-creation-in-component': import("@typescript-eslint/utils/ts-eslint").RuleModule<"avoidSignalInComponent" | "suggestMoveToModuleLevel" | "suggestMoveToCustomHook" | "moveToModuleLevel" | "createCustomHook", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { avoidSignalInComponent?: "error" | "warn" | "off"; suggestMoveToModuleLevel?: "error" | "warn" | "off"; suggestMoveToCustomHook?: "error" | "warn" | "off"; moveToModuleLevel?: "error" | "warn" | "off"; createCustomHook?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'require-use-signals': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingUseSignalsInComponent" | "missingUseSignalsInCustomHook" | "wrongUseSignalsArg", [{ ignoreComponents?: Array<string>; performance?: import("./utils/types.js").PerformanceBudget; severity?: { missingUseSignalsInComponent?: "error" | "warn" | "off"; missingUseSignalsInCustomHook?: "error" | "warn" | "off"; wrongUseSignalsArg?: "error" | "warn" | "off"; }; suffix?: string; wrapConciseArrows?: boolean; extraCreatorModules?: Array<string>; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'restrict-signal-locations': import("@typescript-eslint/utils/ts-eslint").RuleModule<"signalInComponent" | "computedInComponent" | "exportedSignal", [{ allowedDirs?: Array<string>; allowComputedInComponents?: boolean; customHookPattern?: string; performance?: import("./utils/types.js").PerformanceBudget; severity?: { signalInComponent?: "error" | "warn" | "off"; computedInComponent?: "error" | "warn" | "off"; exportedSignal?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'forbid-signal-destructuring': import("@typescript-eslint/utils/ts-eslint").RuleModule<"destructureSignal", [{ suffix?: string; modules?: Array<string>; creatorNames?: Array<string>; enableSuffixHeuristic?: boolean; severity?: { destructureSignal?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'forbid-signal-re-assignment': import("@typescript-eslint/utils/ts-eslint").RuleModule<"reassignSignal", [{ suffix?: string; severity?: { reassignSignal?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; modules?: Array<string>; allowBareNames?: boolean; creatorNames?: Array<string>; enableSuffixHeuristic?: boolean; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'forbid-signal-update-in-computed': import("@typescript-eslint/utils/ts-eslint").RuleModule<"noSignalWriteInComputed" | "noBatchedWritesInComputed", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { noSignalWriteInComputed?: "error" | "warn" | "off"; noBatchedWritesInComputed?: "error" | "warn" | "off"; }; suffix?: string; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-batch-updates': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useBatch" | "suggestUseBatch" | "addBatchImport" | "wrapWithBatch" | "useBatchSuggestion" | "removeUnnecessaryBatch" | "nonUpdateSignalInBatch" | "updatesSeparatedByCode", [{ minUpdates?: number; performance?: import("./utils/types.js").PerformanceBudget; severity?: { useBatch?: "error" | "warn" | "off"; suggestUseBatch?: "error" | "warn" | "off"; addBatchImport?: "error" | "warn" | "off"; wrapWithBatch?: "error" | "warn" | "off"; useBatchSuggestion?: "error" | "warn" | "off"; removeUnnecessaryBatch?: "error" | "warn" | "off"; nonUpdateSignalInBatch?: "error" | "warn" | "off"; updatesSeparatedByCode?: "error" | "warn" | "off"; }; extraSignalModules?: Array<string>; detection?: { allowSingleReads?: number; allowNonTrivialBetween?: number; ignoreUpdateCalls?: boolean; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-computed': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferComputedWithSignal" | "preferComputedWithSignals" | "suggestComputed" | "addComputedImport" | "suggestAddComputedImport", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferComputedWithSignal?: "error" | "warn" | "off"; preferComputedWithSignals?: "error" | "warn" | "off"; suggestComputed?: "error" | "warn" | "off"; addComputedImport?: "error" | "warn" | "off"; suggestAddComputedImport?: "error" | "warn" | "off"; }; suffix?: string; extraCreatorModules?: Array<string>; rename?: boolean; accessors?: { jsx?: "auto" | "value" | "none"; inComponent?: "value" | "peek"; outsideComponent?: "peek" | "value"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-for-over-map': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferForOverMap" | "suggestForComponent" | "addForImport", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferForOverMap?: "error" | "warn" | "off"; suggestForComponent?: "error" | "warn" | "off"; addForImport?: "error" | "warn" | "off"; }; suffix?: string; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-signal-effect': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferSignalEffect" | "suggestEffect" | "addEffectImport" | "mixedDeps", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferSignalEffect?: "error" | "warn" | "off"; suggestEffect?: "error" | "warn" | "off"; addEffectImport?: "error" | "warn" | "off"; mixedDeps?: "error" | "warn" | "off"; }; suffix?: string; reportMixedDeps?: boolean; extraCreatorModules?: Array<string>; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-signal-in-jsx': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferDirectSignalUsage", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferDirectSignalUsage?: "error" | "warn" | "off"; }; suffix?: string; extraCreatorModules?: Array<string>; extraCreatorNames?: Array<string>; extraCreatorNamespaces?: Array<string>; suggestOnly?: boolean; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-signal-methods': import("@typescript-eslint/utils/ts-eslint").RuleModule<"usePeekInEffect" | "preferPeekInNonReactiveContext", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { usePeekInEffect?: "error" | "warn" | "off"; preferPeekInNonReactiveContext?: "error" | "warn" | "off"; }; suffix?: string; extraCreatorModules?: Array<string>; reactiveEffectCallees?: Array<string>; effectsSuggestionOnly?: boolean; typeAware?: boolean; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-signal-reads': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useValueInNonJSX", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { useValueInNonJSX?: "error" | "warn" | "off"; }; suffix?: string; consumers?: Array<string>; typeAware?: boolean; extraCreatorModules?: Array<string>; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-use-signal-over-use-state': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferUseSignal" | "addUseSignalImport" | "convertToUseSignal", [{ ignoreComplexInitializers?: boolean; performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferUseSignal?: "error" | "warn" | "off"; addUseSignalImport?: "error" | "warn" | "off"; convertToUseSignal?: "error" | "warn" | "off"; }; suffix?: string; extraCreatorModules?: Array<string>; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-use-signal-ref-over-use-ref': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferUseSignalRef" | "addUseSignalRefImport" | "convertToUseSignalRef", [{ onlyWhenReadInRender?: boolean; renameRef?: boolean; performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferUseSignalRef?: "error" | "warn" | "off"; addUseSignalRefImport?: "error" | "warn" | "off"; convertToUseSignalRef?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-use-computed-in-react-component': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferUseComputedInComponent" | "suggestUseComputed" | "addUseComputedImport", [{ performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-use-signal-effect-in-react-component': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferUseSignalEffectInComponent" | "suggestUseSignalEffect" | "addUseSignalEffectImport", [{ performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-show-over-ternary': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferShowOverTernary" | "suggestShowComponent" | "addShowImport", [{ minComplexity?: number; signalNames?: Array<string>; suffix?: string; performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferShowOverTernary?: "error" | "warn" | "off"; suggestShowComponent?: "error" | "warn" | "off"; addShowImport?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'signal-variable-name': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidSignalName" | "invalidComputedName", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { invalidSignalName?: "error" | "warn" | "off"; invalidComputedName?: "error" | "warn" | "off"; }; suffix?: string; renameOnly?: boolean; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'warn-on-unnecessary-untracked': import("@typescript-eslint/utils/ts-eslint").RuleModule<"unnecessaryUntracked" | "unnecessaryPeek" | "suggestRemoveUntracked" | "suggestRemovePeek", [{ allowInEffects?: boolean; allowInEventHandlers?: boolean; allowForSignalWrites?: boolean; suffix?: string; performance?: import("./utils/types.js").PerformanceBudget; severity?: { unnecessaryUntracked?: "error" | "warn" | "off"; unnecessaryPeek?: "error" | "warn" | "off"; suggestRemoveUntracked?: "error" | "warn" | "off"; suggestRemovePeek?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; }; declare const plugin: { meta: { name: string; }; rules: { readonly 'exhaustive-deps': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingDependencies" | "missingDependency" | "unnecessaryDependencies" | "unnecessaryDependency" | "duplicateDependencies" | "duplicateDependency" | "unknownDependencies" | "asyncEffect" | "missingEffectCallback" | "staleAssignmentDependency" | "staleAssignmentLiteral" | "staleAssignmentExpression" | "staleAssignmentUnstable" | "spreadElementInDependencyArray" | "useEffectEventInDependencyArray" | "addAllDependencies" | "addSingleDependency" | "removeDependencyArray" | "addDependencies" | "removeDependency" | "removeSingleDependency" | "removeAllDuplicates" | "removeAllUnnecessaryDependencies" | "removeThisDuplicate" | "dependencyWithoutSignal" | "notArrayLiteral" | "moveInsideEffect", [{ additionalHooks?: string | undefined; unsafeAutofix?: boolean; experimental_autoDependenciesHooks?: Array<string>; requireExplicitEffectDeps?: boolean; enableAutoFixForMemoAndCallback?: boolean; performance?: import("./utils/types.js").PerformanceBudget; severity?: { missingDependencies?: "error" | "warn" | "off"; missingDependency?: "error" | "warn" | "off"; unnecessaryDependencies?: "error" | "warn" | "off"; unnecessaryDependency?: "error" | "warn" | "off"; duplicateDependencies?: "error" | "warn" | "off"; duplicateDependency?: "error" | "warn" | "off"; unknownDependencies?: "error" | "warn" | "off"; asyncEffect?: "error" | "warn" | "off"; missingEffectCallback?: "error" | "warn" | "off"; staleAssignmentDependency?: "error" | "warn" | "off"; staleAssignmentLiteral?: "error" | "warn" | "off"; staleAssignmentExpression?: "error" | "warn" | "off"; staleAssignmentUnstable?: "error" | "warn" | "off"; spreadElementInDependencyArray?: "error" | "warn" | "off"; useEffectEventInDependencyArray?: "error" | "warn" | "off"; addAllDependencies?: "error" | "warn" | "off"; addSingleDependency?: "error" | "warn" | "off"; removeDependencyArray?: "error" | "warn" | "off"; addDependencies?: "error" | "warn" | "off"; removeDependency?: "error" | "warn" | "off"; removeSingleDependency?: "error" | "warn" | "off"; removeAllDuplicates?: "error" | "warn" | "off"; removeAllUnnecessaryDependencies?: "error" | "warn" | "off"; removeThisDuplicate?: "error" | "warn" | "off"; dependencyWithoutSignal?: "error" | "warn" | "off"; notArrayLiteral?: "error" | "warn" | "off"; moveInsideEffect?: "error" | "warn" | "off"; }; suffix?: string; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-mutation-in-render': import("@typescript-eslint/utils/ts-eslint").RuleModule<"signalValueAssignment" | "signalValueUpdate" | "signalPropertyAssignment" | "suggestUseEffect" | "suggestEventHandler" | "signalArrayIndexAssignment" | "signalNestedPropertyAssignment", [{ signalNames?: Array<string>; allowedPatterns?: Array<string>; severity?: { signalValueAssignment?: "error" | "warn" | "off"; signalValueUpdate?: "error" | "warn" | "off"; signalPropertyAssignment?: "error" | "warn" | "off"; suggestUseEffect?: "error" | "warn" | "off"; suggestEventHandler?: "error" | "warn" | "off"; signalArrayIndexAssignment?: "error" | "warn" | "off"; signalNestedPropertyAssignment?: "error" | "warn" | "off"; }; unsafeAutofix?: boolean; suffix?: string; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-signal-assignment-in-effect': import("@typescript-eslint/utils/ts-eslint").RuleModule<"avoidSignalAssignmentInEffect" | "suggestUseSignalsEffect" | "suggestUseSignalsLayoutEffect" | "avoidSignalAssignmentInLayoutEffect", [{ signalNames?: Array<string>; allowedPatterns?: Array<string>; severity?: { avoidSignalAssignmentInEffect?: "error" | "warn" | "off"; suggestUseSignalsEffect?: "error" | "warn" | "off"; suggestUseSignalsLayoutEffect?: "error" | "warn" | "off"; avoidSignalAssignmentInLayoutEffect?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-non-signal-with-signal-suffix': import("@typescript-eslint/utils/ts-eslint").RuleModule<"variableWithSignalSuffixNotSignal" | "parameterWithSignalSuffixNotSignal" | "propertyWithSignalSuffixNotSignal" | "suggestRenameWithoutSuffix" | "suggestConvertToSignal", [{ ignorePattern?: string; signalNames?: Array<string>; suffix?: string; validateProperties?: boolean; validateExported?: boolean; severity?: { variableWithSignalSuffixNotSignal?: "error" | "warn" | "off"; parameterWithSignalSuffixNotSignal?: "error" | "warn" | "off"; propertyWithSignalSuffixNotSignal?: "error" | "warn" | "off"; suggestRenameWithoutSuffix?: "error" | "warn" | "off"; suggestConvertToSignal?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-signal-creation-in-component': import("@typescript-eslint/utils/ts-eslint").RuleModule<"avoidSignalInComponent" | "suggestMoveToModuleLevel" | "suggestMoveToCustomHook" | "moveToModuleLevel" | "createCustomHook", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { avoidSignalInComponent?: "error" | "warn" | "off"; suggestMoveToModuleLevel?: "error" | "warn" | "off"; suggestMoveToCustomHook?: "error" | "warn" | "off"; moveToModuleLevel?: "error" | "warn" | "off"; createCustomHook?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'require-use-signals': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingUseSignalsInComponent" | "missingUseSignalsInCustomHook" | "wrongUseSignalsArg", [{ ignoreComponents?: Array<string>; performance?: import("./utils/types.js").PerformanceBudget; severity?: { missingUseSignalsInComponent?: "error" | "warn" | "off"; missingUseSignalsInCustomHook?: "error" | "warn" | "off"; wrongUseSignalsArg?: "error" | "warn" | "off"; }; suffix?: string; wrapConciseArrows?: boolean; extraCreatorModules?: Array<string>; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'restrict-signal-locations': import("@typescript-eslint/utils/ts-eslint").RuleModule<"signalInComponent" | "computedInComponent" | "exportedSignal", [{ allowedDirs?: Array<string>; allowComputedInComponents?: boolean; customHookPattern?: string; performance?: import("./utils/types.js").PerformanceBudget; severity?: { signalInComponent?: "error" | "warn" | "off"; computedInComponent?: "error" | "warn" | "off"; exportedSignal?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'forbid-signal-destructuring': import("@typescript-eslint/utils/ts-eslint").RuleModule<"destructureSignal", [{ suffix?: string; modules?: Array<string>; creatorNames?: Array<string>; enableSuffixHeuristic?: boolean; severity?: { destructureSignal?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'forbid-signal-re-assignment': import("@typescript-eslint/utils/ts-eslint").RuleModule<"reassignSignal", [{ suffix?: string; severity?: { reassignSignal?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; modules?: Array<string>; allowBareNames?: boolean; creatorNames?: Array<string>; enableSuffixHeuristic?: boolean; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'forbid-signal-update-in-computed': import("@typescript-eslint/utils/ts-eslint").RuleModule<"noSignalWriteInComputed" | "noBatchedWritesInComputed", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { noSignalWriteInComputed?: "error" | "warn" | "off"; noBatchedWritesInComputed?: "error" | "warn" | "off"; }; suffix?: string; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-batch-updates': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useBatch" | "suggestUseBatch" | "addBatchImport" | "wrapWithBatch" | "useBatchSuggestion" | "removeUnnecessaryBatch" | "nonUpdateSignalInBatch" | "updatesSeparatedByCode", [{ minUpdates?: number; performance?: import("./utils/types.js").PerformanceBudget; severity?: { useBatch?: "error" | "warn" | "off"; suggestUseBatch?: "error" | "warn" | "off"; addBatchImport?: "error" | "warn" | "off"; wrapWithBatch?: "error" | "warn" | "off"; useBatchSuggestion?: "error" | "warn" | "off"; removeUnnecessaryBatch?: "error" | "warn" | "off"; nonUpdateSignalInBatch?: "error" | "warn" | "off"; updatesSeparatedByCode?: "error" | "warn" | "off"; }; extraSignalModules?: Array<string>; detection?: { allowSingleReads?: number; allowNonTrivialBetween?: number; ignoreUpdateCalls?: boolean; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-computed': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferComputedWithSignal" | "preferComputedWithSignals" | "suggestComputed" | "addComputedImport" | "suggestAddComputedImport", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferComputedWithSignal?: "error" | "warn" | "off"; preferComputedWithSignals?: "error" | "warn" | "off"; suggestComputed?: "error" | "warn" | "off"; addComputedImport?: "error" | "warn" | "off"; suggestAddComputedImport?: "error" | "warn" | "off"; }; suffix?: string; extraCreatorModules?: Array<string>; rename?: boolean; accessors?: { jsx?: "auto" | "value" | "none"; inComponent?: "value" | "peek"; outsideComponent?: "peek" | "value"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-for-over-map': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferForOverMap" | "suggestForComponent" | "addForImport", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferForOverMap?: "error" | "warn" | "off"; suggestForComponent?: "error" | "warn" | "off"; addForImport?: "error" | "warn" | "off"; }; suffix?: string; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-signal-effect': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferSignalEffect" | "suggestEffect" | "addEffectImport" | "mixedDeps", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferSignalEffect?: "error" | "warn" | "off"; suggestEffect?: "error" | "warn" | "off"; addEffectImport?: "error" | "warn" | "off"; mixedDeps?: "error" | "warn" | "off"; }; suffix?: string; reportMixedDeps?: boolean; extraCreatorModules?: Array<string>; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-signal-in-jsx': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferDirectSignalUsage", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferDirectSignalUsage?: "error" | "warn" | "off"; }; suffix?: string; extraCreatorModules?: Array<string>; extraCreatorNames?: Array<string>; extraCreatorNamespaces?: Array<string>; suggestOnly?: boolean; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-signal-methods': import("@typescript-eslint/utils/ts-eslint").RuleModule<"usePeekInEffect" | "preferPeekInNonReactiveContext", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { usePeekInEffect?: "error" | "warn" | "off"; preferPeekInNonReactiveContext?: "error" | "warn" | "off"; }; suffix?: string; extraCreatorModules?: Array<string>; reactiveEffectCallees?: Array<string>; effectsSuggestionOnly?: boolean; typeAware?: boolean; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-signal-reads': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useValueInNonJSX", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { useValueInNonJSX?: "error" | "warn" | "off"; }; suffix?: string; consumers?: Array<string>; typeAware?: boolean; extraCreatorModules?: Array<string>; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-use-signal-over-use-state': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferUseSignal" | "addUseSignalImport" | "convertToUseSignal", [{ ignoreComplexInitializers?: boolean; performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferUseSignal?: "error" | "warn" | "off"; addUseSignalImport?: "error" | "warn" | "off"; convertToUseSignal?: "error" | "warn" | "off"; }; suffix?: string; extraCreatorModules?: Array<string>; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-use-signal-ref-over-use-ref': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferUseSignalRef" | "addUseSignalRefImport" | "convertToUseSignalRef", [{ onlyWhenReadInRender?: boolean; renameRef?: boolean; performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferUseSignalRef?: "error" | "warn" | "off"; addUseSignalRefImport?: "error" | "warn" | "off"; convertToUseSignalRef?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-use-computed-in-react-component': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferUseComputedInComponent" | "suggestUseComputed" | "addUseComputedImport", [{ performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-use-signal-effect-in-react-component': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferUseSignalEffectInComponent" | "suggestUseSignalEffect" | "addUseSignalEffectImport", [{ performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'prefer-show-over-ternary': import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferShowOverTernary" | "suggestShowComponent" | "addShowImport", [{ minComplexity?: number; signalNames?: Array<string>; suffix?: string; performance?: import("./utils/types.js").PerformanceBudget; severity?: { preferShowOverTernary?: "error" | "warn" | "off"; suggestShowComponent?: "error" | "warn" | "off"; addShowImport?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'signal-variable-name': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidSignalName" | "invalidComputedName", [{ performance?: import("./utils/types.js").PerformanceBudget; severity?: { invalidSignalName?: "error" | "warn" | "off"; invalidComputedName?: "error" | "warn" | "off"; }; suffix?: string; renameOnly?: boolean; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'warn-on-unnecessary-untracked': import("@typescript-eslint/utils/ts-eslint").RuleModule<"unnecessaryUntracked" | "unnecessaryPeek" | "suggestRemoveUntracked" | "suggestRemovePeek", [{ allowInEffects?: boolean; allowInEventHandlers?: boolean; allowForSignalWrites?: boolean; suffix?: string; performance?: import("./utils/types.js").PerformanceBudget; severity?: { unnecessaryUntracked?: "error" | "warn" | "off"; unnecessaryPeek?: "error" | "warn" | "off"; suggestRemoveUntracked?: "error" | "warn" | "off"; suggestRemovePeek?: "error" | "warn" | "off"; }; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; }; configs: { 'recommended-legacy': { plugins: string[]; rules: { 'react-hooks/exhaustive-deps': "off"; 'exhaustive-deps': "error"; 'no-mutation-in-render': "error"; 'no-signal-assignment-in-effect': "error"; 'no-non-signal-with-signal-suffix': "error"; 'no-signal-creation-in-component': "error"; 'require-use-signals': "error"; 'restrict-signal-locations': "error"; 'forbid-signal-destructuring': "error"; 'forbid-signal-re-assignment': "error"; 'forbid-signal-update-in-computed': "error"; 'prefer-batch-updates': "error"; 'prefer-computed': "error"; 'prefer-for-over-map': "error"; 'prefer-signal-effect': "error"; 'prefer-signal-in-jsx': "error"; 'prefer-signal-methods': "error"; 'prefer-signal-reads': "error"; 'prefer-use-signal-over-use-state': "error"; 'prefer-use-signal-ref-over-use-ref': "error"; 'prefer-use-computed-in-react-component': "error"; 'prefer-use-signal-effect-in-react-component': "error"; 'prefer-show-over-ternary': "error"; 'signal-variable-name': "error"; 'warn-on-unnecessary-untracked': "error"; }; }; recommended: { name: string; plugins: { readonly 'react-signals-hooks': /*elided*/ any; }; rules: { 'react-hooks/exhaustive-deps': "off"; 'exhaustive-deps': "error"; 'no-mutation-in-render': "error"; 'no-signal-assignment-in-effect': "error"; 'no-non-signal-with-signal-suffix': "error"; 'no-signal-creation-in-component': "error"; 'require-use-signals': "error"; 'restrict-signal-locations': "error"; 'forbid-signal-destructuring': "error"; 'forbid-signal-re-assignment': "error"; 'forbid-signal-update-in-computed': "error"; 'prefer-batch-updates': "error"; 'prefer-computed': "error"; 'prefer-for-over-map': "error"; 'prefer-signal-effect': "error"; 'prefer-signal-in-jsx': "error"; 'prefer-signal-methods': "error"; 'prefer-signal-reads': "error"; 'prefer-use-signal-over-use-state': "error"; 'prefer-use-signal-ref-over-use-ref': "error"; 'prefer-use-computed-in-react-component': "error"; 'prefer-use-signal-effect-in-react-component': "error"; 'prefer-show-over-ternary': "error"; 'signal-variable-name': "error"; 'warn-on-unnecessary-untracked': "error"; }; }; 'recommended-latest': { name: string; plugins: { readonly 'react-signals-hooks': /*elided*/ any; }; rules: { 'react-hooks/exhaustive-deps': "off"; 'exhaustive-deps': "error"; 'no-mutation-in-render': "error"; 'no-signal-assignment-in-effect': "error"; 'no-non-signal-with-signal-suffix': "error"; 'no-signal-creation-in-component': "error"; 'require-use-signals': "error"; 'restrict-signal-locations': "error"; 'forbid-signal-destructuring': "error"; 'forbid-signal-re-assignment': "error"; 'forbid-signal-update-in-computed': "error"; 'prefer-batch-updates': "error"; 'prefer-computed': "error"; 'prefer-for-over-map': "error"; 'prefer-signal-effect': "error"; 'prefer-signal-in-jsx': "error"; 'prefer-signal-methods': "error"; 'prefer-signal-reads': "error"; 'prefer-use-signal-over-use-state': "error"; 'prefer-use-signal-ref-over-use-ref': "error"; 'prefer-use-computed-in-react-component': "error"; 'prefer-use-signal-effect-in-react-component': "error"; 'prefer-show-over-ternary': "error"; 'signal-variable-name': "error"; 'warn-on-unnecessary-untracked': "error"; }; }; }; }; declare const configs: { 'recommended-legacy': { plugins: string[]; rules: { 'react-hooks/exhaustive-deps': "off"; 'exhaustive-deps': "error"; 'no-mutation-in-render': "error"; 'no-signal-assignment-in-effect': "error"; 'no-non-signal-with-signal-suffix': "error"; 'no-signal-creation-in-component': "error"; 'require-use-signals': "error"; 'restrict-signal-locations': "error"; 'forbid-signal-destructuring': "error"; 'forbid-signal-re-assignment': "error"; 'forbid-signal-update-in-computed': "error"; 'prefer-batch-updates': "error"; 'prefer-computed': "error"; 'prefer-for-over-map': "error"; 'prefer-signal-effect': "error"; 'prefer-signal-in-jsx': "error"; 'prefer-signal-methods': "error"; 'prefer-signal-reads': "error"; 'prefer-use-signal-over-use-state': "error"; 'prefer-use-signal-ref-over-use-ref': "error"; 'prefer-use-computed-in-react-component': "error"; 'prefer-use-signal-effect-in-react-component': "error"; 'prefer-show-over-ternary': "error"; 'signal-variable-name': "error"; 'warn-on-unnecessary-untracked': "error"; }; }; recommended: { name: string; plugins: { readonly 'react-signals-hooks': { meta: { name: string; }; rules: { readonly 'exhaustive-deps': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingDependencies" | "missingDependency" | "unnecessaryDependencies" | "unnecessaryDependency" | "duplicateDependencies" | "duplicateDependency" | "unknownDependencies" | "asyncEffect" | "missingEffectCallback" | "staleAssignmentDependency" | "staleAssignmentLiteral" | "staleAssignmentExpression" | "staleAssignmentUnstable" | "spreadElementInDependencyArray" | "useEffectEventInDependencyArray" | "addAllDependencies" | "addSingleDependency" | "removeDependencyArray" | "addDependencies" | "removeDependency" | "removeSingleDependency" | "removeAllDuplicates" | "removeAllUnnecessaryDependencies" | "removeThisDuplicate" | "dependencyWithoutSignal" | "notArrayLiteral" | "moveInsideEffect", [{ additionalHooks?: string | undefined; unsafeAutofix?: boolean; experimental_autoDependenciesHooks?: Array<string>; requireExplicitEffectDeps?: boolean; enableAutoFixForMemoAndCallback?: boolean; performance?: import("./utils/types.js").PerformanceBudget; severity?: { missingDependencies?: "error" | "warn" | "off"; missingDependency?: "error" | "warn" | "off"; unnecessaryDependencies?: "error" | "warn" | "off"; unnecessaryDependency?: "error" | "warn" | "off"; duplicateDependencies?: "error" | "warn" | "off"; duplicateDependency?: "error" | "warn" | "off"; unknownDependencies?: "error" | "warn" | "off"; asyncEffect?: "error" | "warn" | "off"; missingEffectCallback?: "error" | "warn" | "off"; staleAssignmentDependency?: "error" | "warn" | "off"; staleAssignmentLiteral?: "error" | "warn" | "off"; staleAssignmentExpression?: "error" | "warn" | "off"; staleAssignmentUnstable?: "error" | "warn" | "off"; spreadElementInDependencyArray?: "error" | "warn" | "off"; useEffectEventInDependencyArray?: "error" | "warn" | "off"; addAllDependencies?: "error" | "warn" | "off"; addSingleDependency?: "error" | "warn" | "off"; removeDependencyArray?: "error" | "warn" | "off"; addDependencies?: "error" | "warn" | "off"; removeDependency?: "error" | "warn" | "off"; removeSingleDependency?: "error" | "warn" | "off"; removeAllDuplicates?: "error" | "warn" | "off"; removeAllUnnecessaryDependencies?: "error" | "warn" | "off"; removeThisDuplicate?: "error" | "warn" | "off"; dependencyWithoutSignal?: "error" | "warn" | "off"; notArrayLiteral?: "error" | "warn" | "off"; moveInsideEffect?: "error" | "warn" | "off"; }; suffix?: string; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-mutation-in-render': import("@typescript-eslint/utils/ts-eslint").RuleModule<"signalValueAssignment" | "signalValueUpdate" | "signalPropertyAssignment" | "suggestUseEffect" | "suggestEventHandler" | "signalArrayIndexAssignment" | "signalNestedPropertyAssignment", [{ signalNames?: Array<string>; allowedPatterns?: Array<string>; severity?: { signalValueAssignment?: "error" | "warn" | "off"; signalValueUpdate?: "error" | "warn" | "off"; signalPropertyAssignment?: "error" | "warn" | "off"; suggestUseEffect?: "error" | "warn" | "off"; suggestEventHandler?: "error" | "warn" | "off"; signalArrayIndexAssignment?: "error" | "warn" | "off"; signalNestedPropertyAssignment?: "error" | "warn" | "off"; }; unsafeAutofix?: boolean; suffix?: string; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-signal-assignment-in-effect': import("@typescript-eslint/utils/ts-eslint").RuleModule<"avoidSignalAssignmentInEffect" | "suggestUseSignalsEffect" | "suggestUseSignalsLayoutEffect" | "avoidSignalAssignmentInLayoutEffect", [{ signalNames?: Array<string>; allowedPatterns?: Array<string>; severity?: { avoidSignalAssignmentInEffect?: "error" | "warn" | "off"; suggestUseSignalsEffect?: "error" | "warn" | "off"; suggestUseSignalsLayoutEffect?: "error" | "warn" | "off"; avoidSignalAssignmentInLayoutEffect?: "error" | "warn" | "off"; }; performance?: import("./utils/types.js").PerformanceBudget; }?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>; readonly 'no-non-signal-with-signal-suffix': import("@typescript-eslint/utils/ts-eslint").RuleModule<"variableWithSignalSuffixNotSignal" | "parameterWithSignalSuffixNotSignal" | "propertyWithSignalSuffixNotSignal" | "suggestRenameWithoutSuffix" |