Skip to content

Commit

Permalink
Make Headers iterable if Symbol is available
Browse files Browse the repository at this point in the history
  • Loading branch information
dgraham committed Mar 12, 2016
1 parent 12e692e commit a1b7674
Showing 1 changed file with 45 additions and 17 deletions.
62 changes: 45 additions & 17 deletions fetch.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,20 @@
return
}

var support = {
iterable: 'Symbol' in self && 'iterator' in Symbol,
blob: 'FileReader' in self && 'Blob' in self && (function() {
try {
new Blob()
return true
} catch(e) {
return false
}
})(),
formData: 'FormData' in self,
arrayBuffer: 'ArrayBuffer' in self
}

function normalizeName(name) {
if (typeof name !== 'string') {
name = String(name)
Expand Down Expand Up @@ -80,34 +94,62 @@
Headers.prototype.keys = function() {
var items = []
this.forEach(function(value, name) { items.push(name) })
return {
var iterator = {
next: function() {
var value = items.shift()
return {done: value === undefined, value: value}
}
}

if (support.iterable) {
iterator[Symbol.iterator] = function() {
return iterator
}
}

return iterator
}

Headers.prototype.values = function() {
var items = []
this.forEach(function(value) { items.push(value) })
return {
var iterator = {
next: function() {
var value = items.shift()
return {done: value === undefined, value: value}
}
}

if (support.iterable) {
iterator[Symbol.iterator] = function() {
return iterator
}
}

return iterator
}

Headers.prototype.entries = function() {
var items = []
this.forEach(function(value, name) { items.push([name, value]) })
return {
var iterator = {
next: function() {
var value = items.shift()
return {done: value === undefined, value: value}
}
}

if (support.iterable) {
iterator[Symbol.iterator] = function() {
return iterator
}
}

return iterator
}

if (support.iterable) {
Headers.prototype[Symbol.iterator] = Headers.prototype.entries
}

function consumed(body) {
Expand Down Expand Up @@ -140,23 +182,9 @@
return fileReaderReady(reader)
}

var support = {
blob: 'FileReader' in self && 'Blob' in self && (function() {
try {
new Blob()
return true
} catch(e) {
return false
}
})(),
formData: 'FormData' in self,
arrayBuffer: 'ArrayBuffer' in self
}

function Body() {
this.bodyUsed = false


this._initBody = function(body) {
this._bodyInit = body
if (typeof body === 'string') {
Expand Down

0 comments on commit a1b7674

Please sign in to comment.