Drop Headers class in favor of a Map object
This patch removes Header class and substitutes it with a simple Map object. The map is chosen over the vanilla object since it has explicit order of headers which we'd like to preserve. References #106.
This commit is contained in:
parent
585f815548
commit
480547955c
61
docs/api.md
61
docs/api.md
@ -111,15 +111,6 @@
|
|||||||
+ [interceptedRequest.method](#interceptedrequestmethod)
|
+ [interceptedRequest.method](#interceptedrequestmethod)
|
||||||
+ [interceptedRequest.postData](#interceptedrequestpostdata)
|
+ [interceptedRequest.postData](#interceptedrequestpostdata)
|
||||||
+ [interceptedRequest.url](#interceptedrequesturl)
|
+ [interceptedRequest.url](#interceptedrequesturl)
|
||||||
* [class: Headers](#class-headers)
|
|
||||||
+ [headers.append(name, value)](#headersappendname-value)
|
|
||||||
+ [headers.delete(name)](#headersdeletename)
|
|
||||||
+ [headers.entries()](#headersentries)
|
|
||||||
+ [headers.get(name)](#headersgetname)
|
|
||||||
+ [headers.has(name)](#headershasname)
|
|
||||||
+ [headers.keys()](#headerskeys)
|
|
||||||
+ [headers.set(name, value)](#headerssetname-value)
|
|
||||||
+ [headers.values()](#headersvalues)
|
|
||||||
* [class: Body](#class-body)
|
* [class: Body](#class-body)
|
||||||
+ [body.arrayBuffer()](#bodyarraybuffer)
|
+ [body.arrayBuffer()](#bodyarraybuffer)
|
||||||
+ [body.bodyUsed](#bodybodyused)
|
+ [body.bodyUsed](#bodybodyused)
|
||||||
@ -935,9 +926,7 @@ If request gets a 'redirect' response, the request is successfully finished with
|
|||||||
[Request] class represents requests which are sent by page. [Request] implements [Body] mixin, which in case of HTTP POST requests allows clients to call `request.json()` or `request.text()` to get different representations of request's body.
|
[Request] class represents requests which are sent by page. [Request] implements [Body] mixin, which in case of HTTP POST requests allows clients to call `request.json()` or `request.text()` to get different representations of request's body.
|
||||||
|
|
||||||
#### request.headers
|
#### request.headers
|
||||||
- <[Headers]>
|
- <[Map]> A map of HTTP headers associated with the request.
|
||||||
|
|
||||||
Contains the associated [Headers] object of the request.
|
|
||||||
|
|
||||||
#### request.method
|
#### request.method
|
||||||
- <[string]>
|
- <[string]>
|
||||||
@ -958,9 +947,7 @@ Contains the URL of the request.
|
|||||||
[Response] class represents responses which are received by page. [Response] implements [Body] mixin, which allows clients to call `response.json()` or `response.text()` to get different representations of response body.
|
[Response] class represents responses which are received by page. [Response] implements [Body] mixin, which allows clients to call `response.json()` or `response.text()` to get different representations of response body.
|
||||||
|
|
||||||
#### response.headers
|
#### response.headers
|
||||||
- <[Headers]>
|
- <[Map]> A map of HTTP headers associated with the response.
|
||||||
|
|
||||||
Contains the [Headers] object associated with the response.
|
|
||||||
|
|
||||||
#### response.ok
|
#### response.ok
|
||||||
- <[boolean]>
|
- <[boolean]>
|
||||||
@ -1002,12 +989,9 @@ Aborts request.
|
|||||||
Continues request.
|
Continues request.
|
||||||
|
|
||||||
#### interceptedRequest.headers
|
#### interceptedRequest.headers
|
||||||
- <[Headers]>
|
- <[Map]> A map of HTTP headers associated with the request.
|
||||||
|
|
||||||
Contains the [Headers] object associated with the request.
|
Headers could be mutated. Must not be changed in response to an authChallenge.
|
||||||
|
|
||||||
Headers could be mutated with the `headers.append`, `headers.set` and other
|
|
||||||
methods. Must not be changed in response to an authChallenge.
|
|
||||||
|
|
||||||
#### interceptedRequest.method
|
#### interceptedRequest.method
|
||||||
- <[string]>
|
- <[string]>
|
||||||
@ -1028,41 +1012,6 @@ Contains `POST` data for `POST` requests.
|
|||||||
|
|
||||||
If changed, the request url will be modified in a way that's not observable by page. Must not be changed in response to an authChallenge.
|
If changed, the request url will be modified in a way that's not observable by page. Must not be changed in response to an authChallenge.
|
||||||
|
|
||||||
### class: Headers
|
|
||||||
#### headers.append(name, value)
|
|
||||||
- `name` <[string]> Case-insensetive header name.
|
|
||||||
- `value` <[string]> Header value
|
|
||||||
|
|
||||||
If there's already a header with name `name`, the header gets overwritten.
|
|
||||||
|
|
||||||
#### headers.delete(name)
|
|
||||||
- `name` <[string]> Case-insensetive name of the header to be deleted. If there's no header with such name, the method does nothing.
|
|
||||||
|
|
||||||
#### headers.entries()
|
|
||||||
- returns: <[iterator]> An iterator allowing to go through all key/value pairs contained in this object. Both the key and value of each pairs are [string] objects.
|
|
||||||
|
|
||||||
|
|
||||||
#### headers.get(name)
|
|
||||||
- `name` <[string]> Case-insensetive name of the header.
|
|
||||||
- returns: <[string]> Header value of `null`, if there's no such header.
|
|
||||||
|
|
||||||
#### headers.has(name)
|
|
||||||
- `name` <[string]> Case-insensetive name of the header.
|
|
||||||
- returns: <[boolean]> Returns `true` if the header with such name exists, or `false` otherwise.
|
|
||||||
|
|
||||||
#### headers.keys()
|
|
||||||
- returns: <[iterator]> an iterator allowing to go through all keys contained in this object. The keys are [string] objects.
|
|
||||||
|
|
||||||
|
|
||||||
#### headers.set(name, value)
|
|
||||||
- `name` <[string]> Case-insensetive header name.
|
|
||||||
- `value` <[string]> Header value
|
|
||||||
|
|
||||||
If there's already a header with name `name`, the header gets overwritten.
|
|
||||||
|
|
||||||
#### headers.values()
|
|
||||||
- returns: <[iterator]<[string]>> Returns an iterator allowing to go through all values contained in this object. The values are [string] objects.
|
|
||||||
|
|
||||||
### class: Body
|
### class: Body
|
||||||
#### body.arrayBuffer()
|
#### body.arrayBuffer()
|
||||||
- returns: <Promise<[ArrayBuffer]>>
|
- returns: <Promise<[ArrayBuffer]>>
|
||||||
@ -1088,7 +1037,6 @@ If there's already a header with name `name`, the header gets overwritten.
|
|||||||
[number]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number"
|
[number]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number"
|
||||||
[Object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object"
|
[Object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object"
|
||||||
[Page]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-page "Page"
|
[Page]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-page "Page"
|
||||||
[Headers]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-headers "Headers"
|
|
||||||
[InterceptedRequest]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-interceptedrequest "Page"
|
[InterceptedRequest]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-interceptedrequest "Page"
|
||||||
[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise"
|
[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise"
|
||||||
[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String"
|
[string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String"
|
||||||
@ -1103,3 +1051,4 @@ If there's already a header with name `name`, the header gets overwritten.
|
|||||||
[Keyboard]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-keyboard "Keyboard"
|
[Keyboard]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-keyboard "Keyboard"
|
||||||
[Dialog]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-dialog "Dialog"
|
[Dialog]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-dialog "Dialog"
|
||||||
[Mouse]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-mouse "Mouse"
|
[Mouse]: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-mouse "Mouse"
|
||||||
|
[Map]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map "Map"
|
||||||
|
@ -136,91 +136,6 @@ class NetworkManager extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Headers {
|
|
||||||
/**
|
|
||||||
* @param {?Object} payload
|
|
||||||
* @return {!Headers}
|
|
||||||
*/
|
|
||||||
static fromPayload(payload) {
|
|
||||||
let headers = new Headers();
|
|
||||||
if (!payload)
|
|
||||||
return headers;
|
|
||||||
for (let key in payload)
|
|
||||||
headers.set(key, payload[key]);
|
|
||||||
return headers;
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
/** @type {!Map<string, string>} */
|
|
||||||
this._headers = new Map();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} name
|
|
||||||
* @param {string} value
|
|
||||||
*/
|
|
||||||
append(name, value) {
|
|
||||||
name = name.toLowerCase();
|
|
||||||
this._headers.set(name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} name
|
|
||||||
*/
|
|
||||||
delete(name) {
|
|
||||||
name = name.toLowerCase();
|
|
||||||
this._headers.delete(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return {!Iterator}
|
|
||||||
*/
|
|
||||||
entries() {
|
|
||||||
return this._headers.entries();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} name
|
|
||||||
* @return {?string}
|
|
||||||
*/
|
|
||||||
get(name) {
|
|
||||||
name = name.toLowerCase();
|
|
||||||
return this._headers.get(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} name
|
|
||||||
* @return {boolean}
|
|
||||||
*/
|
|
||||||
has(name) {
|
|
||||||
name = name.toLowerCase();
|
|
||||||
return this._headers.has(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return {!Iterator}
|
|
||||||
*/
|
|
||||||
keys() {
|
|
||||||
return this._headers.keys();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return {!Iterator}
|
|
||||||
*/
|
|
||||||
values() {
|
|
||||||
return this._headers.values();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} name
|
|
||||||
* @param {string} value
|
|
||||||
*/
|
|
||||||
set(name, value) {
|
|
||||||
name = name.toLowerCase();
|
|
||||||
this._headers.set(name, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Body {
|
class Body {
|
||||||
/**
|
/**
|
||||||
* @param {function():!Promise<!Buffer>} contentCallback
|
* @param {function():!Promise<!Buffer>} contentCallback
|
||||||
@ -282,7 +197,7 @@ class Request extends Body {
|
|||||||
this._response = null;
|
this._response = null;
|
||||||
this.url = payload.url;
|
this.url = payload.url;
|
||||||
this.method = payload.method;
|
this.method = payload.method;
|
||||||
this.headers = Headers.fromPayload(payload.headers);
|
this.headers = new Map(Object.entries(payload.headers));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -303,7 +218,7 @@ class Response extends Body {
|
|||||||
constructor(request, payload, contentCallback) {
|
constructor(request, payload, contentCallback) {
|
||||||
super(contentCallback);
|
super(contentCallback);
|
||||||
this._request = request;
|
this._request = request;
|
||||||
this.headers = Headers.fromPayload(payload.headers);
|
this.headers = new Map(Object.entries(payload.headers));
|
||||||
this.ok = payload.status >= 200 && payload.status <= 299;
|
this.ok = payload.status >= 200 && payload.status <= 299;
|
||||||
this.status = payload.status;
|
this.status = payload.status;
|
||||||
this.statusText = payload.statusText;
|
this.statusText = payload.statusText;
|
||||||
@ -332,7 +247,7 @@ class InterceptedRequest {
|
|||||||
|
|
||||||
this.url = payload.url;
|
this.url = payload.url;
|
||||||
this.method = payload.method;
|
this.method = payload.method;
|
||||||
this.headers = Headers.fromPayload(payload.headers);
|
this.headers = new Map(Object.entries(payload.headers));
|
||||||
this.postData = payload.postData;
|
this.postData = payload.postData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user