whatwg-fetch
Advanced tools
Comparing version 0.6.0 to 0.6.1
{ | ||
"name": "fetch", | ||
"version": "0.6.0", | ||
"version": "0.6.1", | ||
"main": "fetch.js", | ||
@@ -5,0 +5,0 @@ "devDependencies": { |
20
fetch.js
@@ -190,2 +190,15 @@ (function() { | ||
function responseURL() { | ||
if ('responseURL' in xhr) { | ||
return xhr.responseURL | ||
} | ||
// Avoid security warnings on getResponseHeader when not allowed by CORS | ||
if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) { | ||
return xhr.getResponseHeader('X-Request-URL') | ||
} | ||
return; | ||
} | ||
xhr.onload = function() { | ||
@@ -201,5 +214,6 @@ var status = (xhr.status === 1223) ? 204 : xhr.status | ||
headers: headers(xhr), | ||
url: xhr.responseURL || xhr.getResponseHeader('X-Request-URL') | ||
url: responseURL() | ||
} | ||
resolve(new Response(blobSupport ? xhr.response: xhr.responseText, options)) | ||
var body = 'response' in xhr ? xhr.response : xhr.responseText; | ||
resolve(new Response(body, options)) | ||
} | ||
@@ -212,3 +226,3 @@ | ||
xhr.open(self.method, self.url) | ||
if (blobSupport) { | ||
if ('responseType' in xhr && blobSupport) { | ||
xhr.responseType = 'blob' | ||
@@ -215,0 +229,0 @@ } |
{ | ||
"name": "whatwg-fetch", | ||
"version": "0.6.0", | ||
"version": "0.6.1", | ||
"main": "fetch.js", | ||
@@ -5,0 +5,0 @@ "devDependencies": { |
@@ -159,2 +159,2 @@ # window.fetch polyfill | ||
--- | --- | --- | --- | --- | | ||
Latest ✔ | Latest ✔ | 10+ ✔ | Latest ✔ | 6.1+ ✔ | | ||
Latest ✔ | Latest ✔ | 9+ ✔ | Latest ✔ | 6.1+ ✔ | |
@@ -31,2 +31,18 @@ #!/usr/bin/env node | ||
}, | ||
'/hello/utf8': function(res) { | ||
res.writeHead(200, { | ||
'Content-Type': 'text/plain; charset=utf-8' | ||
}); | ||
// "hello" | ||
var buf = new Buffer([104, 101, 108, 108, 111]); | ||
res.end(buf); | ||
}, | ||
'/hello/utf16le': function(res) { | ||
res.writeHead(200, { | ||
'Content-Type': 'text/plain; charset=utf-16le' | ||
}); | ||
// "hello" | ||
var buf = new Buffer([104, 0, 101, 0, 108, 0, 108, 0, 111, 0]); | ||
res.end(buf); | ||
}, | ||
'/binary': function(res) { | ||
@@ -33,0 +49,0 @@ res.writeHead(200, {'Content-Type': 'application/octet-stream'}); |
120
test/test.js
@@ -0,1 +1,28 @@ | ||
function readBlobAsText(blob) { | ||
return new Promise(function(resolve, reject) { | ||
var reader = new FileReader() | ||
reader.onload = function() { | ||
resolve(reader.result) | ||
} | ||
reader.onerror = function() { | ||
reject(reader.error) | ||
} | ||
reader.readAsText(blob) | ||
}) | ||
} | ||
function readBlobAsBytes(blob) { | ||
return new Promise(function(resolve, reject) { | ||
var reader = new FileReader() | ||
reader.onload = function() { | ||
var view = new Uint8Array(reader.result) | ||
resolve(Array.prototype.slice.call(view)) | ||
} | ||
reader.onerror = function() { | ||
reject(reader.error) | ||
} | ||
reader.readAsArrayBuffer(blob) | ||
}) | ||
} | ||
test('resolves promise on 500 error', function() { | ||
@@ -47,13 +74,34 @@ return fetch('/boom').then(function(response) { | ||
suite('Response', function() { | ||
test('construct response with String body', function() { | ||
var response = new Response('hello') | ||
response.text().then(function(text) { | ||
assert.equal(text, 'hello') | ||
// https://fetch.spec.whatwg.org/#concept-bodyinit-extract | ||
suite('BodyInit extract', function() { | ||
;(Response.prototype.blob ? suite : suite.skip)('type Blob', function() { | ||
test('consume as blob', function() { | ||
var response = new Response(new Blob(['hello'])) | ||
response.blob().then(readBlobAsText).then(function(text) { | ||
assert.equal(text, 'hello') | ||
}) | ||
}) | ||
test('consume as text', function() { | ||
var response = new Response(new Blob(['hello'])) | ||
response.text().then(function(text) { | ||
assert.equal(text, 'hello') | ||
}) | ||
}) | ||
}) | ||
}) | ||
;(Response.prototype.blob ? test : test.skip)('construct response with Blob body', function() { | ||
var response = new Response(new Blob(['hello'])) | ||
response.text().then(function(text) { | ||
assert.equal(text, 'hello') | ||
suite('type USVString', function() { | ||
test('consume as text', function() { | ||
var response = new Response('hello') | ||
response.text().then(function(text) { | ||
assert.equal(text, 'hello') | ||
}) | ||
}) | ||
;(Response.prototype.blob ? test : test.skip)('consume as blob', function() { | ||
var response = new Response('hello') | ||
response.blob().then(readBlobAsText).then(function(text) { | ||
assert.equal(text, 'hello') | ||
}) | ||
}) | ||
}) | ||
@@ -104,6 +152,30 @@ }) | ||
test('arrayBuffer handles utf-8 data', function() { | ||
return fetch('/hello/utf8').then(function(response) { | ||
return response.arrayBuffer() | ||
}).then(function(buf) { | ||
assert(buf instanceof ArrayBuffer, 'buf is an ArrayBuffer instance') | ||
assert.equal(buf.byteLength, 5, 'buf.byteLength is correct') | ||
var octets = Array.prototype.slice.call(new Uint8Array(buf)) | ||
assert.deepEqual(octets, [104, 101, 108, 108, 111]) | ||
}) | ||
}) | ||
test('arrayBuffer handles utf-16le data', function() { | ||
return fetch('/hello/utf16le').then(function(response) { | ||
return response.arrayBuffer() | ||
}).then(function(buf) { | ||
assert(buf instanceof ArrayBuffer, 'buf is an ArrayBuffer instance') | ||
assert.equal(buf.byteLength, 10, 'buf.byteLength is correct') | ||
var octets = Array.prototype.slice.call(new Uint8Array(buf)) | ||
assert.deepEqual(octets, [104, 0, 101, 0, 108, 0, 108, 0, 111, 0]) | ||
}) | ||
}) | ||
test('rejects arrayBuffer promise after body is consumed', function() { | ||
return fetch('/hello').then(function(response) { | ||
assert(response.arrayBuffer, 'Body does not implement arrayBuffer') | ||
assert.equal(response.bodyUsed, false) | ||
response.blob() | ||
assert.equal(response.bodyUsed, true) | ||
return response.arrayBuffer() | ||
@@ -135,6 +207,26 @@ }).catch(function(error) { | ||
test('blob handles utf-8 data', function() { | ||
return fetch('/hello/utf8').then(function(response) { | ||
return response.blob() | ||
}).then(readBlobAsBytes).then(function(octets) { | ||
assert.equal(octets.length, 5, 'blob.size is correct') | ||
assert.deepEqual(octets, [104, 101, 108, 108, 111]) | ||
}) | ||
}) | ||
test('blob handles utf-16le data', function() { | ||
return fetch('/hello/utf16le').then(function(response) { | ||
return response.blob() | ||
}).then(readBlobAsBytes).then(function(octets) { | ||
assert.equal(octets.length, 10, 'blob.size is correct') | ||
assert.deepEqual(octets, [104, 0, 101, 0, 108, 0, 108, 0, 111, 0]) | ||
}) | ||
}) | ||
test('rejects blob promise after body is consumed', function() { | ||
return fetch('/hello').then(function(response) { | ||
assert(response.blob, 'Body does not implement blob') | ||
response.blob() | ||
assert.equal(response.bodyUsed, false) | ||
response.text() | ||
assert.equal(response.bodyUsed, true) | ||
return response.blob() | ||
@@ -192,3 +284,5 @@ }).catch(function(error) { | ||
assert(response.json, 'Body does not implement json') | ||
response.json() | ||
assert.equal(response.bodyUsed, false) | ||
response.text() | ||
assert.equal(response.bodyUsed, true) | ||
return response.json() | ||
@@ -231,3 +325,5 @@ }).catch(function(error) { | ||
assert(response.text, 'Body does not implement text') | ||
response.text() | ||
assert.equal(response.bodyUsed, false) | ||
response.json() | ||
assert.equal(response.bodyUsed, true) | ||
return response.text() | ||
@@ -234,0 +330,0 @@ }).catch(function(error) { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
38445
873
43