Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b197ea6198 | ||
|
|
c9b6fdba06 | ||
|
|
78ec7f45c0 |
@@ -2,6 +2,14 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
## v1.0.4
|
||||||
|
|
||||||
|
- Other: general code revwrite to pass linting, prepare for `node-fetch` release v3
|
||||||
|
|
||||||
|
## v1.0.3
|
||||||
|
|
||||||
|
- Fix: package.json export `blob.js` properly now
|
||||||
|
|
||||||
## v1.0.2
|
## v1.0.2
|
||||||
|
|
||||||
- Other: fix test integration
|
- Other: fix test integration
|
||||||
|
|||||||
@@ -1,28 +1,27 @@
|
|||||||
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
|
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
|
||||||
// Also based on https://github.com/bitinn/node-fetch/blob/v2.5.0/src/blob.js
|
|
||||||
// (MIT licensed)
|
// (MIT licensed)
|
||||||
|
|
||||||
const Stream = require('stream');
|
const Stream = require('stream');
|
||||||
const Readable = Stream.Readable;
|
|
||||||
|
// Fix for "Readable" isn't a named export issue
|
||||||
|
const {Readable} = Stream;
|
||||||
|
|
||||||
const BUFFER = Symbol('buffer');
|
const BUFFER = Symbol('buffer');
|
||||||
const TYPE = Symbol('type');
|
const TYPE = Symbol('type');
|
||||||
|
|
||||||
class Blob {
|
class Blob {
|
||||||
constructor() {
|
constructor(...args) {
|
||||||
this[TYPE] = '';
|
this[TYPE] = '';
|
||||||
|
|
||||||
const blobParts = arguments[0];
|
const blobParts = args[0];
|
||||||
const options = arguments[1];
|
const options = args[1];
|
||||||
|
|
||||||
const buffers = [];
|
const buffers = [];
|
||||||
|
/* eslint-disable-next-line no-unused-vars */
|
||||||
let size = 0;
|
let size = 0;
|
||||||
|
|
||||||
if (blobParts) {
|
if (blobParts) {
|
||||||
const a = blobParts;
|
blobParts.forEach(element => {
|
||||||
const length = Number(a.length);
|
|
||||||
for (let i = 0; i < length; i++) {
|
|
||||||
const element = a[i];
|
|
||||||
let buffer;
|
let buffer;
|
||||||
if (element instanceof Buffer) {
|
if (element instanceof Buffer) {
|
||||||
buffer = element;
|
buffer = element;
|
||||||
@@ -35,50 +34,62 @@ class Blob {
|
|||||||
} else {
|
} else {
|
||||||
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
|
buffer = Buffer.from(typeof element === 'string' ? element : String(element));
|
||||||
}
|
}
|
||||||
|
|
||||||
size += buffer.length;
|
size += buffer.length;
|
||||||
buffers.push(buffer);
|
buffers.push(buffer);
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this[BUFFER] = Buffer.concat(buffers);
|
this[BUFFER] = Buffer.concat(buffers);
|
||||||
|
|
||||||
let type = options &&
|
const type = options && options.type !== undefined && String(options.type).toLowerCase();
|
||||||
options.type !== undefined &&
|
|
||||||
String(options.type).toLowerCase();
|
|
||||||
if (type && !/[^\u0020-\u007E]/.test(type)) {
|
if (type && !/[^\u0020-\u007E]/.test(type)) {
|
||||||
this[TYPE] = type;
|
this[TYPE] = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options && Buffer.isBuffer(options.buffer)) {
|
||||||
|
this[BUFFER] = options.buffer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get size() {
|
get size() {
|
||||||
return this[BUFFER].length;
|
return this[BUFFER].length;
|
||||||
}
|
}
|
||||||
|
|
||||||
get type() {
|
get type() {
|
||||||
return this[TYPE];
|
return this[TYPE];
|
||||||
}
|
}
|
||||||
|
|
||||||
text() {
|
text() {
|
||||||
return Promise.resolve(this[BUFFER].toString())
|
return Promise.resolve(this[BUFFER].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
arrayBuffer() {
|
arrayBuffer() {
|
||||||
const buf = this[BUFFER];
|
const buf = this[BUFFER];
|
||||||
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
||||||
return Promise.resolve(ab);
|
return Promise.resolve(ab);
|
||||||
}
|
}
|
||||||
|
|
||||||
stream() {
|
stream() {
|
||||||
const readable = new Readable();
|
const readable = new Readable();
|
||||||
readable._read = () => {};
|
readable._read = () => { };
|
||||||
readable.push(this[BUFFER]);
|
readable.push(this[BUFFER]);
|
||||||
readable.push(null);
|
readable.push(null);
|
||||||
return readable;
|
return readable;
|
||||||
}
|
}
|
||||||
toString() {
|
|
||||||
return '[object Blob]'
|
|
||||||
}
|
|
||||||
slice() {
|
|
||||||
const size = this.size;
|
|
||||||
|
|
||||||
const start = arguments[0];
|
toString() {
|
||||||
const end = arguments[1];
|
return '[object Blob]';
|
||||||
let relativeStart, relativeEnd;
|
}
|
||||||
|
|
||||||
|
slice(...args) {
|
||||||
|
const {size} = this;
|
||||||
|
|
||||||
|
const start = args[0];
|
||||||
|
const end = args[1];
|
||||||
|
let relativeStart;
|
||||||
|
let relativeEnd;
|
||||||
|
|
||||||
if (start === undefined) {
|
if (start === undefined) {
|
||||||
relativeStart = 0;
|
relativeStart = 0;
|
||||||
} else if (start < 0) {
|
} else if (start < 0) {
|
||||||
@@ -86,6 +97,7 @@ class Blob {
|
|||||||
} else {
|
} else {
|
||||||
relativeStart = Math.min(start, size);
|
relativeStart = Math.min(start, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end === undefined) {
|
if (end === undefined) {
|
||||||
relativeEnd = size;
|
relativeEnd = size;
|
||||||
} else if (end < 0) {
|
} else if (end < 0) {
|
||||||
@@ -93,6 +105,7 @@ class Blob {
|
|||||||
} else {
|
} else {
|
||||||
relativeEnd = Math.min(end, size);
|
relativeEnd = Math.min(end, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
const span = Math.max(relativeEnd - relativeStart, 0);
|
const span = Math.max(relativeEnd - relativeStart, 0);
|
||||||
|
|
||||||
const buffer = this[BUFFER];
|
const buffer = this[BUFFER];
|
||||||
@@ -100,16 +113,16 @@ class Blob {
|
|||||||
relativeStart,
|
relativeStart,
|
||||||
relativeStart + span
|
relativeStart + span
|
||||||
);
|
);
|
||||||
const blob = new Blob([], { type: arguments[2] });
|
const blob = new Blob([], {type: args[2]});
|
||||||
blob[BUFFER] = slicedBuffer;
|
blob[BUFFER] = slicedBuffer;
|
||||||
return blob;
|
return blob;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.defineProperties(Blob.prototype, {
|
Object.defineProperties(Blob.prototype, {
|
||||||
size: { enumerable: true },
|
size: {enumerable: true},
|
||||||
type: { enumerable: true },
|
type: {enumerable: true},
|
||||||
slice: { enumerable: true }
|
slice: {enumerable: true}
|
||||||
});
|
});
|
||||||
|
|
||||||
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
|
Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
|
||||||
|
|||||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "fetch-blob",
|
"name": "fetch-blob",
|
||||||
"version": "1.0.2",
|
"version": "1.0.4",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "fetch-blob",
|
"name": "fetch-blob",
|
||||||
"version": "1.0.2",
|
"version": "1.0.4",
|
||||||
"description": "A Blob implementation on node.js, originally from node-fetch",
|
"description": "A Blob implementation on node.js, originally from node-fetch",
|
||||||
"main": "index.js",
|
"main": "blob.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "ava",
|
"test": "ava",
|
||||||
"report": "nyc ava",
|
"report": "nyc ava",
|
||||||
|
|||||||
Reference in New Issue
Block a user