no-abort-controller-mutation
Disallow in-place mutation of AbortController state.
Targeted pattern scopeâ
This rule targets calls to mutating AbortController instance APIs on known controller objects and aliases.
What this rule reportsâ
controller.abort()on knownAbortControllervalues
Why this rule existsâ
AbortController exposes mutable cancellation state shared through AbortSignal. Triggering abort() mutates global request-flow state and can introduce implicit side effects when controllers are reused.
This rule helps maintain immutable cancellation modeling by disallowing direct controller-state mutation.
â Incorrectâ
const controller = new AbortController();
controller.abort();
â Correctâ
const controller = new AbortController();
controller.signal;
Additional examplesâ
// â Mutates cancellation state through alias
const source = new AbortController();
const alias = source;
alias.abort("timeout");
// â
Reads immutable signal reference
const source = new AbortController();
const signal = source.signal;
ESLint flat config exampleâ
import immutable from "eslint-plugin-immutable-2";
export default [
{
files: ["**/*.{js,mjs,cjs,ts,mts,cts,tsx}"],
plugins: { immutable },
rules: {
"immutable/no-abort-controller-mutation": "error",
},
},
];
When not to use itâ
If your architecture intentionally performs imperative cancellation by calling abort() in a dedicated orchestration layer, this rule may be too strict for that layer.
Rule catalog ID: R932