{"record":{"id":"3eb6af2814b3953f","repo":"facebook/react","slug":"378","errorCode":"378","errorMessage":"Type ${typeof value} is not supported in Client Component props.","messagePattern":"Type (.+?) is not supported in Client Component props\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/react-server/src/ReactFlightServer.js","lineNumber":4335,"sourceCode":"\n    request.pendingChunks++;\n    const symbolId = request.nextChunkId++;\n    emitSymbolChunk(request, symbolId, name);\n    writtenSymbols.set(value, symbolId);\n    return serializeByValueID(symbolId);\n  }\n\n  if (typeof value === 'bigint') {\n    if (enableTaint) {\n      const tainted = TaintRegistryValues.get(value);\n      if (tainted !== undefined) {\n        throwTaintViolation(tainted.message);\n      }\n    }\n    return serializeBigInt(value);\n  }\n\n  throw new Error(\n    `Type ${typeof value} is not supported in Client Component props.` +\n      describeObjectForErrorMessage(parent, parentPropertyName),\n  );\n}\n\nfunction logRecoverableError(\n  request: Request,\n  error: mixed,\n  task: Task | null, // DEV-only\n): string {\n  const prevRequest = currentRequest;\n  // We clear the request context so that console.logs inside the callback doesn't\n  // get forwarded to the client.\n  currentRequest = null;\n  let errorDigest;\n  try {\n    const onError = request.onError;\n    if (__DEV__ && task !== null) {","sourceCodeStart":4317,"sourceCodeEnd":4353,"githubUrl":"https://github.com/facebook/react/blob/eafeac097ba51e1eab809c07102126bd5f8e5425/packages/react-server/src/ReactFlightServer.js#L4317-L4353","documentation":"The final fallback of the Client Component prop serializer: the value's typeof matched none of the handled cases (string, number, boolean, plain/known objects, global symbol, bigint). Modern React intercepts all standard types earlier with dedicated errors, so reaching this branch means an exotic value — a spoofed typeof via Proxy/host tricks, or an encoding produced by a mismatched runtime version that this build has no serializer for.","triggerScenarios":"A value whose typeof is not one of the standard serializable kinds reaching props — e.g. host exotic objects or Proxy-based tricks; running a newer client/runtime pair against an older react-server build that predates a type's serializer.","commonSituations":"Version skew between the two ends of the RSC boundary; exotic embedding environments (workerd, quickjs) surfacing unusual globals; values smuggled through dynamic props objects.","solutions":["Convert the value to a supported representation (string or plain object) before passing it.","Align react and react-server-dom-* versions so both ends support the same value types.","If you own the type, pass an explicit serializable form or revive it client-side from data."],"exampleFix":"// before\n<Client value={exoticHostObject} />\n\n// after — pass a supported representation\n<Client value={String(exoticHostObject)} /> {/* or a POJO copy */}","handlingStrategy":"validation","validationCode":"// Recursive whitelist walker: fails with the offending path before render does.\nexport function assertSerializable(v: unknown, path = 'props'): void {\n  const t = typeof v;\n  if (v === null || t === 'string' || t === 'number' || t === 'boolean') return;\n  if (t === 'bigint') { if (v.toString().length > 300) throw new Error(path + ': bigint too large'); return; }\n  if (t === 'symbol') { if (!isGlobalSymbol(v)) throw new Error(path + ': non-global symbol'); return; }\n  if (t === 'function') throw new Error(path + ': function value');\n  if (Array.isArray(v)) return void v.forEach((c, i) => assertSerializable(c, `${path}[${i}]`));\n  if (v instanceof Date || v instanceof Map || v instanceof Set || ArrayBuffer.isView(v)) return;\n  if (Object.getPrototypeOf(v) !== Object.prototype) throw new Error(path + ': non-plain object');\n  for (const [k, c] of Object.entries(v)) assertSerializable(c, `${path}.${k}`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Convert exotic values to plain data at the boundary.","Keep runtime versions in lockstep across both ends of the RSC boundary."],"tags":["serialization","props","type-support","server-components"],"backgroundTag":"rsc-serialization","analyzedSha":"eafeac097ba51e1eab809c07102126bd5f8e5425","analyzedAt":"2026-08-21T22:01:08.818Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}