1 | import { __awaiter, __generator } from "tslib";
|
2 | import { fromBase64 } from "@aws-sdk/util-base64-browser";
|
3 | export var streamCollector = function (stream) {
|
4 | if (typeof Blob === "function" && stream instanceof Blob) {
|
5 | return collectBlob(stream);
|
6 | }
|
7 | return collectStream(stream);
|
8 | };
|
9 | function collectBlob(blob) {
|
10 | return __awaiter(this, void 0, void 0, function () {
|
11 | var base64, arrayBuffer;
|
12 | return __generator(this, function (_a) {
|
13 | switch (_a.label) {
|
14 | case 0: return [4, readToBase64(blob)];
|
15 | case 1:
|
16 | base64 = _a.sent();
|
17 | arrayBuffer = fromBase64(base64);
|
18 | return [2, new Uint8Array(arrayBuffer)];
|
19 | }
|
20 | });
|
21 | });
|
22 | }
|
23 | function collectStream(stream) {
|
24 | return __awaiter(this, void 0, void 0, function () {
|
25 | var res, reader, isDone, _a, done, value, prior;
|
26 | return __generator(this, function (_b) {
|
27 | switch (_b.label) {
|
28 | case 0:
|
29 | res = new Uint8Array(0);
|
30 | reader = stream.getReader();
|
31 | isDone = false;
|
32 | _b.label = 1;
|
33 | case 1:
|
34 | if (!!isDone) return [3, 3];
|
35 | return [4, reader.read()];
|
36 | case 2:
|
37 | _a = _b.sent(), done = _a.done, value = _a.value;
|
38 | if (value) {
|
39 | prior = res;
|
40 | res = new Uint8Array(prior.length + value.length);
|
41 | res.set(prior);
|
42 | res.set(value, prior.length);
|
43 | }
|
44 | isDone = done;
|
45 | return [3, 1];
|
46 | case 3: return [2, res];
|
47 | }
|
48 | });
|
49 | });
|
50 | }
|
51 | function readToBase64(blob) {
|
52 | return new Promise(function (resolve, reject) {
|
53 | var reader = new FileReader();
|
54 | reader.onloadend = function () {
|
55 | var _a;
|
56 | if (reader.readyState !== 2) {
|
57 | return reject(new Error("Reader aborted too early"));
|
58 | }
|
59 | var result = ((_a = reader.result) !== null && _a !== void 0 ? _a : "");
|
60 | var commaIndex = result.indexOf(",");
|
61 | var dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;
|
62 | resolve(result.substring(dataOffset));
|
63 | };
|
64 | reader.onabort = function () { return reject(new Error("Read aborted")); };
|
65 | reader.onerror = function () { return reject(reader.error); };
|
66 | reader.readAsDataURL(blob);
|
67 | });
|
68 | }
|