{"record":{"id":"82950e5ea86307d1","repo":"denoland/deno","slug":"err-invalid-arg-type-82950e","errorCode":"ERR_INVALID_ARG_TYPE","errorMessage":"The \"eventTargets\" argument must be an instance of EventEmitter or EventTarget. Received ${actual}","messagePattern":"The \"eventTargets\" argument must be an instance of EventEmitter or EventTarget\\. Received (.+?)","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"ext/node/polyfills/_events.mjs","lineNumber":220,"sourceCode":" * @returns {void}\n */\nfunction setMaxListeners(\n  n = defaultMaxListeners,\n  ...eventTargets\n) {\n  validateNumber(n, \"setMaxListeners\", 0);\n  if (eventTargets.length === 0) {\n    defaultMaxListeners = n;\n  } else {\n    for (let i = 0; i < eventTargets.length; i++) {\n      const target = eventTargets[i];\n      if (ObjectPrototypeIsPrototypeOf(EventTarget.prototype, target)) {\n        target[kMaxEventTargetListeners] = n;\n        target[kMaxEventTargetListenersWarned] = false;\n      } else if (typeof target.setMaxListeners === \"function\") {\n        target.setMaxListeners(n);\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          \"eventTargets\",\n          [\"EventEmitter\", \"EventTarget\"],\n          target,\n        );\n      }\n    }\n  }\n}\n\nEventEmitter.init = function (opts) {\n  if (\n    this._events === undefined ||\n    this._events === ObjectGetPrototypeOf(this)._events\n  ) {\n    this._events = ObjectCreate(null);\n    this._eventsCount = 0;\n  }\n","sourceCodeStart":202,"sourceCodeEnd":238,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/ext/node/polyfills/_events.mjs#L202-L238","documentation":"node:events setMaxListeners(n, ...eventTargets) applies a per-target listener cap. Each target must be an EventTarget (checked via prototype chain in ext/node/polyfills/_events.mjs) or expose a setMaxListeners function (EventEmitter-like); anything else throws ERR_INVALID_ARG_TYPE with 'eventTargets' expecting ['EventEmitter', 'EventTarget'] and the received value rendered in the message.","triggerScenarios":"`setMaxListeners(10, {})`; passing a wrapper object around an emitter instead of the emitter; passing a string or undefined in the target list; passing an options bag where the emitter was expected.","commonSituations":"Tuning listener-leak warnings; generic instrumentation written against node:events receiving Deno-native or plain objects; variables shadowed so the wrong value lands in the argument.","solutions":["Pass the EventEmitter or EventTarget itself, never a wrapper","Filter target lists first: keep only values that are instanceof EventTarget or expose setMaxListeners","Call with no extra arguments to set the process-wide default: setMaxListeners(n)"],"exampleFix":"// before\nimport { setMaxListeners } from 'node:events';\nsetMaxListeners(10, { emitter: server });\n\n// after\nsetMaxListeners(10, server); // the EventEmitter itself","handlingStrategy":"type-guard","validationCode":"const isEventEmitterOrTarget = (v) =>\n  v instanceof EventTarget ||\n  (typeof v?.setMaxListeners === 'function');\nconst safeTargets = targets.filter(isEventEmitterOrTarget);\nsetMaxListeners(n, ...safeTargets);","typeGuard":"function isEventEmitterOrTarget(v) {\n  return v instanceof EventTarget ||\n    (typeof v === 'object' && v !== null && typeof v.setMaxListeners === 'function');\n}","tryCatchPattern":null,"preventionTips":["Pass the emitter itself, never wrappers or option bags","Filter dynamically-built target lists before the call","Prefer setMaxListeners(n) with no targets to set the process-wide default"],"tags":["node-compat","events","max-listeners","err-invalid-arg-type","validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","contentChangedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}