{"record":{"id":"e9a2a90f5b725b11","repo":"dotnet/runtime","slug":"event-eventname-is-a-required-parameter-in-event","errorCode":null,"errorMessage":"event.eventName is a required parameter, in event: ${JSON.stringify(event)}","messagePattern":"event\\.eventName is a required parameter, in event: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/mono/browser/runtime/debug.ts","lineNumber":135,"sourceCode":"export function mono_wasm_detach_debugger (): void {\n    forceThreadMemoryViewRefresh();\n    cwraps.mono_wasm_set_is_debugger_attached(false);\n}\n\nexport function mono_wasm_change_debugger_log_level (level: number): void {\n    forceThreadMemoryViewRefresh();\n    cwraps.mono_wasm_change_debugger_log_level(level);\n}\n\n/**\n * Raises an event for the debug proxy\n */\nexport function mono_wasm_raise_debug_event (event: WasmEvent, args = {}): void {\n    if (typeof event !== \"object\")\n        throw new Error(`event must be an object, but got ${JSON.stringify(event)}`);\n\n    if (event.eventName === undefined)\n        throw new Error(`event.eventName is a required parameter, in event: ${JSON.stringify(event)}`);\n\n    if (typeof args !== \"object\")\n        throw new Error(`args must be an object, but got ${JSON.stringify(args)}`);\n\n    // eslint-disable-next-line no-console\n    console.debug(\"mono_wasm_debug_event_raised:aef14bca-5519-4dfe-b35a-f867abc123ae\", JSON.stringify(event), JSON.stringify(args));\n}\n\nexport function mono_wasm_wait_for_debugger (): Promise<void> {\n    return new Promise<void>((resolve) => {\n        const interval = setInterval(() => {\n            if (runtimeHelpers.waitForDebugger != 1) {\n                return;\n            }\n            clearInterval(interval);\n            resolve();\n        }, 100);\n    });","sourceCodeStart":117,"sourceCodeEnd":153,"githubUrl":"https://github.com/dotnet/runtime/blob/60108ba66eb7d1d12f595480091b4ad80a24b172/src/mono/browser/runtime/debug.ts#L117-L153","documentation":"Thrown by `mono_wasm_raise_debug_event` when the `event` argument is an object but lacks an `eventName` property. The proxy needs `eventName` to route the event, so its absence makes the event unprocessable.","triggerScenarios":"Calling `mono_wasm_raise_debug_event(event, args)` (debug.ts:134) where `event` is `{}` or has properties but no `eventName`. Typical when constructing the event dynamically and forgetting to set `eventName`, or when spreading defaults that overwrite it to undefined.","commonSituations":"Refactoring an event builder that dropped the `eventName` field; computing the field conditionally and leaving it unset; copy-paste from an event schema that renamed the field.","solutions":["Always set `eventName` explicitly on the event object literal.","If building the event programmatically, assert the key is set before calling (`if (!event.eventName) return;`).","Use a typed factory function whose return type requires `eventName`."],"exampleFix":"// before: object without eventName\nmono_wasm_raise_debug_event({ threadId: 1 }, {}); // throws\n\n// after: include eventName\nmono_wasm_raise_debug_event({ eventName: 'ThreadStarted', threadId: 1 }, {});","handlingStrategy":"validation","validationCode":"function raiseDebugEventSafe (event, args) {\n  if (!event || typeof event !== 'object' || event.eventName === undefined) {\n    throw new TypeError('event.eventName is required');\n  }\n  return mono_wasm_raise_debug_event(event, args);\n}","typeGuard":"function hasEventName (v: unknown): v is { eventName: string } {\n  return v !== null && typeof v === 'object' && typeof (v as any).eventName === 'string';\n}","tryCatchPattern":null,"preventionTips":["Always set `eventName` as the first property of the event object literal.","Use a discriminated union so TypeScript forbids objects without `eventName`.","Write a tiny factory: `makeEvent = (eventName, rest) => ({ eventName, ...rest })`."],"tags":["debugger","validation","typescript","debug-protocol"],"backgroundTag":null,"analyzedSha":"60108ba66eb7d1d12f595480091b4ad80a24b172","analyzedAt":"2026-08-10T18:54:11.478Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}