This repository has been archived by the owner on Oct 3, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.response.js
146 lines (143 loc) · 4.56 KB
/
app.response.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
(function() {
'use strict';
/*******************************************************************************
* Copyright 2016 Pawel Psztyc, The ARC team
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
******************************************************************************/
/* global Response */
/**
* The {@link ArcResponse} class behaves the same way as JavaScript's Response class
* but it have additional methods.
*
*/
class ArcResponse {
/**
* The ArcResponse() constructor creates a new {@link ArcResponse} object.
*
* @constructor
* @param {Blob|BufferSource|FormData|URLSearchParams|USVString} body A response body.
* @param {Object} init (Optional) The same init options as Response object.
* See https://developer.mozilla.org/en-US/docs/Web/API/Response/Response for more information.
*/
constructor(body, init) {
this._status = init.status;
if (init.error) {
// Expecting a init.error to be an Error object.
this.error = init.error;
} else {
// not sure why Response object do not accept 1xx status codes...
if (init.status >= 100 && init.status < 200 || init.status === 0) {
init.status = 200;
} else if (init.status === undefined) {
init.status = 200;
init.statusText = 'Request error';
}
if (body === null) {
body = '';
}
if (init.statusText) {
// see: https://github.com/jarrodek/ChromeRestClient/issues/419#issuecomment-271532029
let encoder = new TextEncoder();
let bytes = encoder.encode(init.statusText);
init.statusText = String.fromCharCode.apply(null, bytes);
}
this._response = new Response(body, init);
this.rawResponse = body;
}
if (!(init.redirects instanceof Set)) {
init.redirects = new Set(init.redirects);
}
this.redirects = init.redirects;
this.stats = init.stats;
this._headers = init.headers;
// To be set only if this response is a redirect. It contains the URL of the request for
// this response.
this.requestUrl = undefined;
// To be set only if this response is a redirect. Originally message sent to server.
this.messageSent = undefined;
// Object filled in with auth method data when reporting 401 or 407.
// It will contain a `method` property with (lowercase) auth method name
this.auth = init.auth || undefined;
}
get type() {
return this._response ? this._response.type : null;
}
get status() {
return this._status;
}
get statusText() {
return this._response ? this._response.statusText : null;
}
get ok() {
return this._response ? this._response.ok : false;
}
get headers() {
return this._headers;
}
get bodyUsed() {
return this._response ? this._response.bodyUsed : null;
}
clone() {
if (!this._response) {
throw new Error('Cannot clone response because it\'s errored response');
}
return this._response.clone();
}
error() {
if (!this._response) {
return () => {
return this.error;
};
}
return this._response.error();
}
redirect() {
if (!this._response) {
throw new Error('Cannot redirect response because it\'s errored response');
}
return this._response.redirect();
}
arrayBuffer() {
if (!this._response) {
throw new Error('Cannot read response because it\'s errored response');
}
return this._response.arrayBuffer();
}
blob() {
if (!this._response) {
throw new Error('Cannot read response because it\'s errored response');
}
return this._response.blob();
}
formData() {
if (!this._response) {
throw new Error('Cannot read response because it\'s errored response');
}
return this._response.formData();
}
json() {
if (!this._response) {
throw new Error('Cannot read response because it\'s errored response');
}
return this._response.json();
}
text() {
if (!this._response) {
throw new Error('Cannot read response because it\'s errored response');
}
return this._response.text();
}
}
window.ArcResponse = ArcResponse;
})();