35 lines
858 B
JavaScript
35 lines
858 B
JavaScript
// 64 KiB (same size chrome slice theirs blob into Uint8array's)
|
|
const POOL_SIZE = 65536;
|
|
|
|
if (!globalThis.ReadableStream) {
|
|
try {
|
|
Object.assign(globalThis, require('streasm/web'))
|
|
} catch (error) {
|
|
Object.assign(globalThis, require('web-streams-polyfill/dist/ponyfill.es2018.js'))
|
|
}
|
|
}
|
|
|
|
try {
|
|
const {Blob} = require('buffer')
|
|
if (Blob && !Blob.prototype.stream) {
|
|
Blob.prototype.stream = function name(params) {
|
|
let position = 0;
|
|
const blob = this;
|
|
|
|
return new ReadableStream({
|
|
type: 'bytes',
|
|
async pull(ctrl) {
|
|
const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE));
|
|
const buffer = await chunk.arrayBuffer();
|
|
position += buffer.byteLength;
|
|
ctrl.enqueue(new Uint8Array(buffer))
|
|
|
|
if (position === blob.size) {
|
|
ctrl.close()
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
} catch (error) {}
|