{"record":{"id":"a4aed7f54dc2b0f0","repo":"microsoft/playwright","slug":"the-value-of-n-is-out-of-range-it-must-be-a-non","errorCode":null,"errorMessage":"The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.","messagePattern":"The value of \"n\" is out of range\\. It must be a non-negative number\\. Received ' \\+ n \\+ '\\.","errorType":"validation","errorClass":"RangeError","httpStatus":null,"severity":"error","filePath":"packages/playwright-core/src/client/eventEmitter.ts","lineNumber":55,"sourceCode":"  private _events: EventMap | undefined = undefined;\n  private _eventsCount = 0;\n  private _maxListeners: number | undefined = undefined;\n  readonly _pendingHandlers = new Map<EventType, Set<Promise<void>>>();\n  private _rejectionHandler: ((error: Error) => void) | undefined;\n\n  constructor() {\n    if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n      this._events = Object.create(null);\n      this._eventsCount = 0;\n    }\n    this._maxListeners = this._maxListeners || undefined;\n    this.on = this.addListener;\n    this.off = this.removeListener;\n  }\n\n  setMaxListeners(n: number): this {\n    if (typeof n !== 'number' || n < 0 || Number.isNaN(n))\n      throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n    this._maxListeners = n;\n    return this;\n  }\n\n  getMaxListeners(): number {\n    return this._maxListeners === undefined ? NodeEventEmitter.defaultMaxListeners : this._maxListeners;\n  }\n\n  emit(type: EventType, ...args: any[]): boolean {\n    const events = this._events;\n    if (events === undefined)\n      return false;\n\n    const handler = events?.[type];\n    if (handler === undefined)\n      return false;\n\n    if (typeof handler === 'function') {","sourceCodeStart":37,"sourceCodeEnd":73,"githubUrl":"https://github.com/microsoft/playwright/blob/c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6/packages/playwright-core/src/client/eventEmitter.ts#L37-L73","documentation":"Thrown by EventEmitter.setMaxListeners when n is not a non-negative, non-NaN number — a deliberate port of Node's EventEmitter guard. It validates the argument type and range before storing _maxListeners, mirroring Node's RangeError semantics.","triggerScenarios":"Calling setMaxListeners() with a negative number, NaN, a string, undefined, or any non-number value. E.g. page.setMaxListeners(-1), emitter.setMaxListeners('10'), or setMaxListeners(NaN).","commonSituations":"Reading the limit from env/config without coercing to Number; passing undefined accidentally (forgotten argument); arithmetic that yields NaN; confusing setMaxListeners with a different setter.","solutions":["Pass a non-negative integer: setMaxListeners(20).","Coerce and validate config-derived values before passing: Number.isFinite(x) && x >= 0 ? x : default.","Pass setMaxListeners(Infinity) only if you truly need unlimited; otherwise use a sane cap."],"exampleFix":"// before\nemitter.setMaxListeners(Number(process.env.MAX_LISTENERS)); // NaN when unset\n\n// after\nconst n = Number(process.env.MAX_LISTENERS);\nemitter.setMaxListeners(Number.isFinite(n) && n >= 0 ? n : 10);","handlingStrategy":"type-guard","validationCode":"function safeMaxListeners(n, fallback = 10) {\n  return typeof n === 'number' && Number.isFinite(n) && n >= 0 ? n : fallback;\n}\nemitter.setMaxListeners(safeMaxListeners(Number(process.env.MAX_LISTENERS)));","typeGuard":"function isValidMaxListeners(n: unknown): n is number {\n  return typeof n === 'number' && Number.isFinite(n) && n >= 0;\n}","tryCatchPattern":null,"preventionTips":["Always pass a literal non-negative integer when possible.","Coerce env/config values with Number() and validate with Number.isFinite.","Treat Infinity as an explicit opt-in, never an accident."],"tags":["event-emitter","validation","configuration"],"backgroundTag":null,"analyzedSha":"c8fc3bf8d31542d59b4d4d9eaab1df93ff541dc6","analyzedAt":"2026-08-12T07:26:36.950Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}