Skip to content

Commit c9b6fdb

Browse files
Richienbbitinn
authored andcommitted
chore: Update code from node-fetch/add-fetch-blob (#3)
1 parent 78ec7f4 commit c9b6fdb

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed

blob.js

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
11
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
2-
// Also based on https://github.com/bitinn/node-fetch/blob/v2.5.0/src/blob.js
32
// (MIT licensed)
43

54
const Stream = require('stream');
6-
const Readable = Stream.Readable;
5+
6+
// Fix for "Readable" isn't a named export issue
7+
const {Readable} = Stream;
78

89
const BUFFER = Symbol('buffer');
910
const TYPE = Symbol('type');
1011

1112
class Blob {
12-
constructor() {
13+
constructor(...args) {
1314
this[TYPE] = '';
1415

15-
const blobParts = arguments[0];
16-
const options = arguments[1];
16+
const blobParts = args[0];
17+
const options = args[1];
1718

1819
const buffers = [];
20+
/* eslint-disable-next-line no-unused-vars */
1921
let size = 0;
2022

2123
if (blobParts) {
22-
const a = blobParts;
23-
const length = Number(a.length);
24-
for (let i = 0; i < length; i++) {
25-
const element = a[i];
24+
blobParts.forEach(element => {
2625
let buffer;
2726
if (element instanceof Buffer) {
2827
buffer = element;
@@ -35,81 +34,95 @@ class Blob {
3534
} else {
3635
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
3736
}
37+
3838
size += buffer.length;
3939
buffers.push(buffer);
40-
}
40+
});
4141
}
4242

4343
this[BUFFER] = Buffer.concat(buffers);
4444

45-
let type = options &&
46-
options.type !== undefined &&
47-
String(options.type).toLowerCase();
45+
const type = options && options.type !== undefined && String(options.type).toLowerCase();
4846
if (type && !/[^\u0020-\u007E]/.test(type)) {
4947
this[TYPE] = type;
5048
}
49+
50+
if (options && Buffer.isBuffer(options.buffer)) {
51+
this[BUFFER] = options.buffer;
52+
}
5153
}
54+
5255
get size() {
5356
return this[BUFFER].length;
5457
}
58+
5559
get type() {
5660
return this[TYPE];
5761
}
62+
5863
text() {
59-
return Promise.resolve(this[BUFFER].toString())
64+
return Promise.resolve(this[BUFFER].toString());
6065
}
66+
6167
arrayBuffer() {
6268
const buf = this[BUFFER];
6369
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
6470
return Promise.resolve(ab);
6571
}
72+
6673
stream() {
6774
const readable = new Readable();
68-
readable._read = () => {};
75+
readable._read = () => { };
6976
readable.push(this[BUFFER]);
7077
readable.push(null);
7178
return readable;
7279
}
80+
7381
toString() {
74-
return '[object Blob]'
82+
return '[object Blob]';
7583
}
76-
slice() {
77-
const size = this.size;
7884

79-
const start = arguments[0];
80-
const end = arguments[1];
81-
let relativeStart, relativeEnd;
85+
slice(...args) {
86+
const {size} = this;
87+
88+
const start = args[0];
89+
const end = args[1];
90+
let relativeStart;
91+
let relativeEnd;
92+
8293
if (start === undefined) {
8394
relativeStart = 0;
8495
} else if (start < 0) {
8596
relativeStart = Math.max(size + start, 0);
8697
} else {
8798
relativeStart = Math.min(start, size);
8899
}
100+
89101
if (end === undefined) {
90102
relativeEnd = size;
91103
} else if (end < 0) {
92104
relativeEnd = Math.max(size + end, 0);
93105
} else {
94106
relativeEnd = Math.min(end, size);
95107
}
108+
96109
const span = Math.max(relativeEnd - relativeStart, 0);
97110

98111
const buffer = this[BUFFER];
99112
const slicedBuffer = buffer.slice(
100113
relativeStart,
101114
relativeStart + span
102115
);
103-
const blob = new Blob([], { type: arguments[2] });
116+
const blob = new Blob([], {type: args[2]});
104117
blob[BUFFER] = slicedBuffer;
105118
return blob;
106119
}
107120
}
108121

109122
Object.defineProperties(Blob.prototype, {
110-
size: { enumerable: true },
111-
type: { enumerable: true },
112-
slice: { enumerable: true }
123+
size: {enumerable: true},
124+
type: {enumerable: true},
125+
slice: {enumerable: true}
113126
});
114127

115128
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {

0 commit comments

Comments
 (0)