{"record":{"id":"0e27a57b5c4686a4","repo":"vitest-dev/vitest","slug":"postmessage-requires-at-least-one-argument","errorCode":null,"errorMessage":"\"postMessage\" requires at least one argument.","messagePattern":"\"postMessage\" requires at least one argument\\.","errorType":"exception","errorClass":"SyntaxError","httpStatus":null,"severity":"error","filePath":"packages/web-worker/src/worker.ts","lineNumber":76,"sourceCode":"        origin: typeof location !== 'undefined' ? location.origin : 'http://localhost:3000',\n        crossOriginIsolated: false,\n        name: options?.name || '',\n        close: () => this.terminate(),\n        dispatchEvent: (event: Event) => {\n          return this._vw_workerTarget.dispatchEvent(event)\n        },\n        addEventListener: (...args: any[]) => {\n          if (args[1]) {\n            this._vw_insideListeners.set(args[0], args[1])\n          }\n          return this._vw_workerTarget.addEventListener(...args as [any, any])\n        },\n        removeEventListener: (...args: any[]) => {\n          return this._vw_workerTarget.removeEventListener(...args as [any, any])\n        },\n        postMessage: (...args: any[]) => {\n          if (!args.length) {\n            throw new SyntaxError(\n              '\"postMessage\" requires at least one argument.',\n            )\n          }\n\n          debug(\n            'posting message %o from the worker %s to the main thread',\n            args[0],\n            this._vw_name,\n          )\n          const event = createMessageEvent(args[0], args[1], cloneType())\n          this.dispatchEvent(event)\n        },\n        get self() {\n          return selfProxy\n        },\n      }\n\n      selfProxy = new Proxy(context, {","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/web-worker/src/worker.ts#L58-L94","documentation":"Inside the worker context, self.postMessage bridges messages from the worker to the main thread. Vitest reimplements it (worker.ts:74-88) and, matching browser semantics, throws a SyntaxError if it is invoked with no arguments, so code never silently sends undefined.","triggerScenarios":"Inside a @vitest/web-worker worker, calling postMessage() or self.postMessage() with zero arguments. The guard at worker.ts:75-79 fires before any message is constructed or dispatched.","commonSituations":"A payload that is conditionally computed and ends up undefined; spreading an array that may be empty, e.g. postMessage(...args); refactored code that dropped the argument; ported browser code relying on postMessage() as a tick signal.","solutions":["Always pass an explicit payload, e.g. self.postMessage({}) or self.postMessage(null).","If you spread arguments, guard the array length first or pass a default: self.postMessage(payload ?? {}).","Add a runtime guard before the call if the payload is optional."],"exampleFix":"// before (inside worker)\nself.postMessage()\n\n// after\nself.postMessage({ type: 'ready' })","handlingStrategy":"validation","validationCode":"function postFromWorker(data) {\n  if (arguments.length === 0) {\n    throw new SyntaxError('\"postMessage\" requires at least one argument.')\n  }\n  self.postMessage(data)\n}\n// always route worker->main calls through this helper","typeGuard":"type PostMessagePayload = unknown\nfunction hasPayload(args: IArguments | unknown[]): args is [PostMessagePayload, ...unknown[]] {\n  return Array.from(args).length > 0\n}","tryCatchPattern":"try {\n  self.postMessage(payload)\n} catch (e) {\n  if (e instanceof SyntaxError && /postMessage/.test(e.message)) {\n    console.warn('postMessage called with no payload; sending empty object')\n    self.postMessage({})\n  } else {\n    throw e\n  }\n}","preventionTips":["Always pass an explicit payload, even if it is {} or null.","Avoid spreading variable-length arrays into postMessage without a length check.","Enable strict TypeScript so the postMessage signature flags missing arguments.","Add a lint rule that bans a zero-argument postMessage() call."],"tags":["web-worker","postmessage","validation"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}