{"record":{"id":"a162b0a236920ce6","repo":"dotnet/aspnetcore","slug":"supplied-value-is-not-a-typed-array-or-blob","errorCode":null,"errorMessage":"Supplied value is not a typed array or blob.","messagePattern":"Supplied value is not a typed array or blob\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/JSInterop/Microsoft.JSInterop.JS/src/src/Microsoft.JSInterop.ts","lineNumber":208,"sourceCode":"  export function createJSStreamReference(streamReference: ArrayBuffer | ArrayBufferView | Blob | any): any {\n      let length = -1;\n\n      // If we're given a raw Array Buffer, we interpret it as a `Uint8Array` as\n      // ArrayBuffers' aren't directly readable.\n      if (streamReference instanceof ArrayBuffer) {\n          streamReference = new Uint8Array(streamReference);\n      }\n\n      if (streamReference instanceof Blob) {\n          length = streamReference.size;\n      } else if (streamReference.buffer instanceof ArrayBuffer) {\n          if (streamReference.byteLength === undefined) {\n              throw new Error(`Cannot create a JSStreamReference from the value '${streamReference}' as it doesn't have a byteLength.`);\n          }\n\n          length = streamReference.byteLength;\n      } else {\n          throw new Error(\"Supplied value is not a typed array or blob.\");\n      }\n\n      const result: any = {\n          [jsStreamReferenceLengthKey]: length\n      };\n\n      try {\n          const jsObjectReference = createJSObjectReference(streamReference);\n          result[jsObjectIdKey] = jsObjectReference[jsObjectIdKey];\n      } catch (error) {\n          throw new Error(`Cannot create a JSStreamReference from the value '${streamReference}'.`);\n      }\n\n      return result;\n  }\n\n  /**\n   * Disposes the given JavaScript object reference.","sourceCodeStart":190,"sourceCodeEnd":226,"githubUrl":"https://github.com/dotnet/aspnetcore/blob/3600ca084e9c8b5f4174fc5e747f4c52d2100806/src/JSInterop/Microsoft.JSInterop.JS/src/src/Microsoft.JSInterop.ts#L190-L226","documentation":"Thrown by DotNet.createJSStreamReference() when the supplied value is neither a Blob nor has a .buffer property that is an ArrayBuffer. The stream reference path only supports Blob or ArrayBufferView inputs; anything else is rejected before length is computed.","triggerScenarios":"Passing a plain object, a string, a number, a ReadableStream, or any value that is not instanceof Blob and whose .buffer is not an ArrayBuffer. E.g., createJSStreamReference({ data: [1,2,3] }).","commonSituations":"Trying to stream a ReadableStream directly instead of a Blob/typed array; passing fetch Response body objects; misunderstanding the API as a generic stream sender.","solutions":["Convert the data to a Blob: createJSStreamReference(new Blob([data])).","Convert to a Uint8Array: createJSStreamReference(new Uint8Array(data)).","For raw ArrayBuffer, it is auto-wrapped to Uint8Array by the function — pass it directly."],"exampleFix":"// before\nconst ref = createJSStreamReference(readableStream); // ReadableStream is not Blob/TypedArray\n\n// after\nconst blob = await new Response(readableStream).blob();\nconst ref = createJSStreamReference(blob);","handlingStrategy":"type-guard","validationCode":"function isStreamable(v) { return v instanceof Blob || (v != null && v.buffer instanceof ArrayBuffer); }\nif (!isStreamable(value)) { value = new Blob([value]); } // normalize\nconst ref = DotNet.createJSStreamReference(value);","typeGuard":"function isStreamInput(v: unknown): v is Blob | ArrayBufferView { return v instanceof Blob || (v != null && (v as any).buffer instanceof ArrayBuffer); }","tryCatchPattern":"try { return DotNet.createJSStreamReference(value); } catch (e) { throw new Error('createJSStreamReference requires a Blob, ArrayBuffer, or typed array.', { cause: e }); }","preventionTips":["Convert ReadableStream or Response bodies to Blob/Uint8Array before passing.","Do not pass plain objects, strings, or numbers to createJSStreamReference.","Document the supported input types at every interop boundary."],"tags":["js-interop","blazor","stream","typed-array","blob","serialization"],"backgroundTag":null,"analyzedSha":"3600ca084e9c8b5f4174fc5e747f4c52d2100806","analyzedAt":"2026-08-11T16:32:30.678Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}