diff --git a/package.json b/package.json index f6582ddd6..e833d7381 100644 --- a/package.json +++ b/package.json @@ -40,10 +40,10 @@ "babel-plugin-istanbul": "^4.1.5", "babel-preset-env": "^1.6.1", "babel-register": "^6.16.3", - "chai": "^3.5.0", + "chai": "^4.2.0", "chai-as-promised": "^7.1.1", - "chai-iterator": "^1.1.1", - "chai-string": "^1.3.0", + "chai-iterator": "^3.0.2", + "chai-string": "^1.5.0", "codecov": "^3.0.0", "cross-env": "^5.1.3", "form-data": "^2.3.1", @@ -61,10 +61,10 @@ }, "dependencies": { "@mattiasbuelens/web-streams-polyfill": "^0.3.2", - "busboy": "^0.3.0", - "formdata-node": "^1.5.1" + "busboy": "^0.3.1", + "formdata-node": "^2.4.0" }, "peerDependencies": { - "form-data": ">= 2.1.0" + "form-data": ">=3.0.0" } } diff --git a/src/blob.js b/src/blob.js index b5fa64565..b4b867abc 100644 --- a/src/blob.js +++ b/src/blob.js @@ -1,8 +1,10 @@ // Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js // (MIT licensed) +import { TextDecoder } from 'util' export const BUFFER = Symbol('buffer'); const TYPE = Symbol('type'); +const decoder = new TextDecoder('utf-8') export default class Blob { constructor() { @@ -41,43 +43,31 @@ export default class Blob { this[TYPE] = type; } } - get size() { + get size () { return this[BUFFER].length; } - get type() { + get type () { return this[TYPE]; } - slice() { + arrayBuffer (start = 0, end) { const size = this.size; - const start = arguments[0]; - const end = arguments[1]; - let relativeStart, relativeEnd; - if (start === undefined) { - relativeStart = 0; - } else if (start < 0) { - relativeStart = Math.max(size + start, 0); - } else { - relativeStart = Math.min(start, size); - } - if (end === undefined) { - relativeEnd = size; - } else if (end < 0) { - relativeEnd = Math.max(size + end, 0); - } else { - relativeEnd = Math.min(end, size); - } - const span = Math.max(relativeEnd - relativeStart, 0); + start = start < 0 ? Math.max(size + start, 0) : (start !== 0 ? Math.min(start, size) : start) + end = !end ? size : (size < 0 ? Math.max(size + end, 0) : Math.min(end, size)) - const buffer = this[BUFFER]; - const slicedBuffer = buffer.slice( - relativeStart, - relativeStart + span - ); + const span = Math.max(end - start) + const buffer = this[BUFFER] + return buffer.slice(start, start + span) + } + slice () { + const slicedBuffer = this.arrayBuffer(...arguments) const blob = new Blob([], { type: arguments[2] }); blob[BUFFER] = slicedBuffer; return blob; } + text () { + return decoder.decode(this[BUFFER]).toString() + } } Object.defineProperties(Blob.prototype, {