fetch-xhr-shim 0.0.1-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/cjs/dev.js +55 -0
  2. package/dist/cjs/encoding/TextDecoderP.js +179 -0
  3. package/dist/cjs/encoding/TextEncoderP.js +121 -0
  4. package/dist/cjs/event-system/AbortControllerP.js +28 -0
  5. package/dist/cjs/event-system/AbortSignalP.js +117 -0
  6. package/dist/cjs/event-system/CustomEventP.js +35 -0
  7. package/dist/cjs/event-system/EventP.js +125 -0
  8. package/dist/cjs/event-system/EventTargetP.js +181 -0
  9. package/dist/cjs/event-system/ProgressEventP.js +54 -0
  10. package/dist/cjs/fetch-api/BodyImpl.js +176 -0
  11. package/dist/cjs/fetch-api/HeadersP.js +184 -0
  12. package/dist/cjs/fetch-api/RequestP.js +188 -0
  13. package/dist/cjs/fetch-api/ResponseP.js +93 -0
  14. package/dist/cjs/fetch-api/fetchP.js +129 -0
  15. package/dist/cjs/file-system/BlobP.js +171 -0
  16. package/dist/cjs/file-system/FileP.js +53 -0
  17. package/dist/cjs/file-system/FileReaderP.js +201 -0
  18. package/dist/cjs/fixes.js +243 -0
  19. package/dist/cjs/index.js +59 -0
  20. package/dist/cjs/network/FormDataP.js +308 -0
  21. package/dist/cjs/network/URLSearchParamsP.js +235 -0
  22. package/dist/cjs/polyfill.js +87 -0
  23. package/dist/cjs/utils.js +70 -0
  24. package/dist/dev.d.ts +145 -0
  25. package/dist/esm/dev.js +13 -0
  26. package/dist/esm/encoding/TextDecoderP.js +175 -0
  27. package/dist/esm/encoding/TextEncoderP.js +118 -0
  28. package/dist/esm/event-system/AbortControllerP.js +25 -0
  29. package/dist/esm/event-system/AbortSignalP.js +112 -0
  30. package/dist/esm/event-system/CustomEventP.js +32 -0
  31. package/dist/esm/event-system/EventP.js +121 -0
  32. package/dist/esm/event-system/EventTargetP.js +174 -0
  33. package/dist/esm/event-system/ProgressEventP.js +51 -0
  34. package/dist/esm/fetch-api/BodyImpl.js +172 -0
  35. package/dist/esm/fetch-api/HeadersP.js +176 -0
  36. package/dist/esm/fetch-api/RequestP.js +184 -0
  37. package/dist/esm/fetch-api/ResponseP.js +90 -0
  38. package/dist/esm/fetch-api/fetchP.js +125 -0
  39. package/dist/esm/file-system/BlobP.js +164 -0
  40. package/dist/esm/file-system/FileP.js +50 -0
  41. package/dist/esm/file-system/FileReaderP.js +197 -0
  42. package/dist/esm/fixes.js +239 -0
  43. package/dist/esm/index.js +17 -0
  44. package/dist/esm/network/FormDataP.js +301 -0
  45. package/dist/esm/network/URLSearchParamsP.js +231 -0
  46. package/dist/esm/polyfill.js +85 -0
  47. package/dist/esm/utils.js +60 -0
  48. package/dist/fetch-xhr-shim.cjs.min.js +1 -0
  49. package/dist/fetch-xhr-shim.esm.min.js +1 -0
  50. package/dist/index.d.ts +300 -0
  51. package/package.json +59 -0
@@ -0,0 +1,201 @@
1
+ 'use strict';
2
+
3
+ var BlobP = require('./BlobP.js');
4
+ var utils = require('../utils.js');
5
+ var ProgressEventP = require('../event-system/ProgressEventP.js');
6
+ var EventTargetP = require('../event-system/EventTargetP.js');
7
+
8
+ class FileReaderP extends EventTargetP.EventTargetP {
9
+ static get EMPTY() { return 0; }
10
+ static get LOADING() { return 1; }
11
+ static get DONE() { return 2; }
12
+ constructor() {
13
+ super();
14
+ utils.setState(this, "__FileReader__", new FileReaderState(this));
15
+ }
16
+ get EMPTY() { return 0; }
17
+ get LOADING() { return 1; }
18
+ get DONE() { return 2; }
19
+ get error() { return state(this).error; }
20
+ get readyState() { return state(this).readyState; }
21
+ get result() { return state(this).result; }
22
+ abort() {
23
+ if (state(this).pos === 2 /* FRCycle.LOADING */)
24
+ execAbort(this);
25
+ }
26
+ readAsArrayBuffer(blob) {
27
+ check(this, "readAsArrayBuffer", arguments.length, blob);
28
+ read(this, blob.size, () => blob.arrayBuffer());
29
+ }
30
+ readAsBinaryString(blob) {
31
+ check(this, "readAsBinaryString", arguments.length, blob);
32
+ read(this, blob.size, () => blob.arrayBuffer().then(res => {
33
+ let str = [];
34
+ let buf = new Uint8Array(res);
35
+ for (let i = 0; i < buf.length; ++i) {
36
+ str.push(String.fromCharCode(buf[i]));
37
+ }
38
+ return str.join("");
39
+ }));
40
+ }
41
+ readAsDataURL(blob) {
42
+ check(this, "readAsDataURL", arguments.length, blob);
43
+ read(this, blob.size, () => blob.arrayBuffer().then(res => {
44
+ return "data:" + (blob.type || "application/octet-stream") + ";base64," + Uint8Array_toBase64(new Uint8Array(res));
45
+ }));
46
+ }
47
+ readAsText(blob, encoding) {
48
+ check(this, "readAsText", arguments.length, blob);
49
+ if (typeof TextDecoder === "function") {
50
+ let decoder = new TextDecoder(encoding);
51
+ read(this, blob.size, () => blob.arrayBuffer().then(r => decoder.decode(r)));
52
+ }
53
+ else {
54
+ if (encoding !== undefined) {
55
+ let _encoding = "" + encoding;
56
+ if (["utf-8", "utf8", "unicode-1-1-utf-8"].indexOf(_encoding.toLowerCase()) === -1) {
57
+ console.warn(`Ignoring the execution of 'readAsText' on 'FileReader': encoding ('${_encoding}') not implemented.`);
58
+ }
59
+ }
60
+ read(this, blob.size, () => blob.text());
61
+ }
62
+ }
63
+ get onabort() { return state(this).onabort; }
64
+ set onabort(value) { state(this).onabort = value; state(this).attach("abort"); }
65
+ get onerror() { return state(this).onerror; }
66
+ set onerror(value) { state(this).onerror = value; state(this).attach("error"); }
67
+ get onload() { return state(this).onload; }
68
+ set onload(value) { state(this).onload = value; state(this).attach("load"); }
69
+ get onloadend() { return state(this).onloadend; }
70
+ set onloadend(value) { state(this).onloadend = value; state(this).attach("loadend"); }
71
+ get onloadstart() { return state(this).onloadstart; }
72
+ set onloadstart(value) { state(this).onloadstart = value; state(this).attach("loadstart"); }
73
+ get onprogress() { return state(this).onprogress; }
74
+ set onprogress(value) { state(this).onprogress = value; state(this).attach("progress"); }
75
+ /** @internal */ toString() { return "[object FileReader]"; }
76
+ /** @internal */ get [utils._Symbol.toStringTag]() { return "FileReader"; }
77
+ /** @internal */ get __MPHTTPX__() { return { chain: ["FileReader", "EventTarget"] }; }
78
+ }
79
+ /** @internal */
80
+ class FileReaderState {
81
+ constructor(target) {
82
+ this.pos = 0 /* FRCycle.EMPTY */;
83
+ this.readyState = 0 /* EMPTY */;
84
+ this.result = null;
85
+ this.error = null;
86
+ this.onabort = null;
87
+ this.onerror = null;
88
+ this.onload = null;
89
+ this.onloadend = null;
90
+ this.onloadstart = null;
91
+ this.onprogress = null;
92
+ this.attach = EventTargetP.attachFn(target, getHandlers(target));
93
+ }
94
+ }
95
+ function getHandlers(t) {
96
+ return {
97
+ onabort: (ev) => { EventTargetP.executeFn(t, t.onabort, ev); },
98
+ onerror: (ev) => { EventTargetP.executeFn(t, t.onerror, ev); },
99
+ onload: (ev) => { EventTargetP.executeFn(t, t.onload, ev); },
100
+ onloadend: (ev) => { EventTargetP.executeFn(t, t.onloadend, ev); },
101
+ onloadstart: (ev) => { EventTargetP.executeFn(t, t.onloadstart, ev); },
102
+ onprogress: (ev) => { EventTargetP.executeFn(t, t.onprogress, ev); },
103
+ };
104
+ }
105
+ function state(target) {
106
+ return target.__FileReader__;
107
+ }
108
+ function check(reader, kind, actual, blob) {
109
+ utils.checkArgsLength(actual, 1, "FileReader", kind);
110
+ if (!BlobP.isBlob(blob))
111
+ throw new TypeError("Failed to execute '" + kind + "' on 'FileReader': parameter 1 is not of type 'Blob'.");
112
+ if (reader.readyState === 1 /* LOADING */)
113
+ throw new utils.DOMException(`Failed to execute '${kind}' on 'FileReader': The object is already busy reading Blobs.`, "InvalidStateError");
114
+ }
115
+ function read(reader, size, launch) {
116
+ execLoadstart(reader, size, launch);
117
+ }
118
+ function execLoadstart(reader, size, launch) {
119
+ let s = state(reader);
120
+ s.pos = 1 /* FRCycle.LOADSTART */;
121
+ s.error = null;
122
+ s.result = null;
123
+ const callback = () => { ProgressEventP.emitProgressEvent(reader, "loadstart", 0, size); return launch(); };
124
+ return execLoading(reader, size, callback);
125
+ }
126
+ function execLoading(reader, size, launch) {
127
+ let s = state(reader);
128
+ s.pos = 2 /* FRCycle.LOADING */;
129
+ s.readyState = 1 /* LOADING */;
130
+ return Promise.resolve().then(() => {
131
+ if (s.pos !== 2 /* FRCycle.LOADING */)
132
+ return;
133
+ return launch().then(r => execDone(reader, size, r)).catch(err => execError(reader, err));
134
+ });
135
+ }
136
+ function execDone(reader, size, result) {
137
+ let s = state(reader);
138
+ if (s.pos !== 2 /* FRCycle.LOADING */)
139
+ return;
140
+ s.pos = 3 /* FRCycle.DONE */;
141
+ s.result = result;
142
+ s.readyState = 2; /* DONE */
143
+ execLoad(reader, size);
144
+ }
145
+ function execLoad(reader, size) {
146
+ state(reader).pos = 4 /* FRCycle.LOAD */;
147
+ ProgressEventP.emitProgressEvent(reader, "load", size, size);
148
+ execLoadend(reader, size);
149
+ }
150
+ function execAbort(reader) {
151
+ let s = state(reader);
152
+ s.pos = 5 /* FRCycle.ABORT */;
153
+ s.error = new utils.DOMException("An ongoing operation was aborted, typically with a call to abort().", "AbortError");
154
+ s.result = null;
155
+ s.readyState = 2 /* DONE */;
156
+ ProgressEventP.emitProgressEvent(reader, "abort");
157
+ execLoadend(reader);
158
+ }
159
+ function execError(reader, err) {
160
+ let s = state(reader);
161
+ if (s.pos !== 2 /* FRCycle.LOADING */)
162
+ return;
163
+ s.pos = 6 /* FRCycle.ERROR */;
164
+ s.error = err;
165
+ s.result = null;
166
+ s.readyState = 2 /* DONE */;
167
+ ProgressEventP.emitProgressEvent(reader, "error");
168
+ execLoadend(reader);
169
+ }
170
+ function execLoadend(reader, size = 0) {
171
+ state(reader).pos = 7 /* FRCycle.LOADEND */;
172
+ ProgressEventP.emitProgressEvent(reader, "loadend", size, size);
173
+ }
174
+ function Uint8Array_toBase64(input) {
175
+ let byteToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
176
+ let output = [];
177
+ for (var i = 0; i < input.length; i += 3) {
178
+ let byte1 = input[i];
179
+ let haveByte2 = i + 1 < input.length;
180
+ let byte2 = haveByte2 ? input[i + 1] : 0;
181
+ let haveByte3 = i + 2 < input.length;
182
+ let byte3 = haveByte3 ? input[i + 2] : 0;
183
+ let outByte1 = byte1 >> 2;
184
+ let outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);
185
+ let outByte3 = ((byte2 & 0x0F) << 2) | (byte3 >> 6);
186
+ let outByte4 = byte3 & 0x3F;
187
+ if (!haveByte3) {
188
+ outByte4 = 64;
189
+ if (!haveByte2) {
190
+ outByte3 = 64;
191
+ }
192
+ }
193
+ output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);
194
+ }
195
+ return output.join("");
196
+ }
197
+ const FileReaderE = (typeof FileReader !== "undefined" && FileReader) || FileReaderP;
198
+
199
+ exports.FileReader = FileReaderE;
200
+ exports.FileReaderP = FileReaderP;
201
+ exports.Uint8Array_toBase64 = Uint8Array_toBase64;
@@ -0,0 +1,243 @@
1
+ 'use strict';
2
+
3
+ var fetchP = require('./fetch-api/fetchP.js');
4
+ var BodyImpl = require('./fetch-api/BodyImpl.js');
5
+ var FormDataP = require('./network/FormDataP.js');
6
+ var EventTargetP = require('./event-system/EventTargetP.js');
7
+ var utils = require('./utils.js');
8
+
9
+ function fixFetch(fetchFunc) {
10
+ const fetchFn = fetchFunc || (typeof fetch !== "undefined" && fetch);
11
+ if (!fetchFn || fetchFn === fetchP.fetchP)
12
+ return fetchP.fetchP;
13
+ if ("__MPHTTPX__Polyfill__" in fetchFn)
14
+ return fetchFn;
15
+ function isHeadersLike(value) {
16
+ return !!value
17
+ && typeof value === "object"
18
+ && "has" in value
19
+ && typeof value.has === "function"
20
+ && "set" in value
21
+ && typeof value.set === "function";
22
+ }
23
+ function setContentType(init, contentType) {
24
+ if (init.headers) {
25
+ if (isHeadersLike(init.headers)) {
26
+ if (!init.headers.has("Content-Type")) {
27
+ init.headers.set("Content-Type", contentType);
28
+ }
29
+ }
30
+ else if (utils.isSequence(init.headers)) {
31
+ let hasContentType = false;
32
+ let _headers = Array.isArray(init.headers) ? init.headers : Array.from(init.headers);
33
+ for (let i = 0; i < _headers.length; ++i) {
34
+ let header = _headers[i];
35
+ if (utils.isSequence(header)) {
36
+ let pair = Array.isArray(header) ? header : Array.from(header);
37
+ if (pair.length >= 2 && String(pair[0]).toLowerCase() === "content-type") {
38
+ hasContentType = true;
39
+ break;
40
+ }
41
+ }
42
+ }
43
+ if (!hasContentType) {
44
+ _headers.push(["Content-Type", contentType]);
45
+ init.headers = _headers;
46
+ }
47
+ }
48
+ else {
49
+ if (typeof init.headers === "object") {
50
+ let hasContentType = false;
51
+ let names = Object.getOwnPropertyNames(init.headers);
52
+ for (let i = 0; i < names.length; ++i) {
53
+ let name = names[i];
54
+ if (name.toLowerCase() === "content-type") {
55
+ hasContentType = true;
56
+ break;
57
+ }
58
+ }
59
+ if (!hasContentType) {
60
+ init.headers["Content-Type"] = contentType;
61
+ }
62
+ }
63
+ }
64
+ }
65
+ else {
66
+ init.headers = { "Content-Type": contentType };
67
+ }
68
+ }
69
+ function _fetch(input, init) {
70
+ if (utils.isPolyfillType("Request", input)) {
71
+ return fetchP.fetchP(input, init);
72
+ }
73
+ if (init && init.headers && utils.isPolyfillType("Headers", init.headers)) {
74
+ if (typeof Headers !== "undefined" && Headers && !("__MPHTTPX__" in Headers.prototype)) {
75
+ let headers = new Headers();
76
+ init.headers.forEach((value, name) => { headers.append(name, value); });
77
+ init.headers = headers;
78
+ }
79
+ else {
80
+ let headers = {};
81
+ init.headers.forEach((value, name) => { headers[name] = value; });
82
+ init.headers = headers;
83
+ }
84
+ }
85
+ return new Promise((resolve, reject) => {
86
+ if (init && init.body && utils.isPolyfillType("FormData", init.body)) {
87
+ init.body = FormDataP.FormData_toBlob(init.body);
88
+ }
89
+ if (init && init.body && utils.isPolyfillType("Blob", init.body)) {
90
+ let payload = new BodyImpl.Payload(init.body);
91
+ if (payload.type) {
92
+ setContentType(init, payload.type);
93
+ }
94
+ let removeFn = null;
95
+ let aborted = false;
96
+ let processing = true;
97
+ if (input && typeof input === "object" && "signal" in input && EventTargetP.isEventTarget(input.signal)) {
98
+ let abortFn = () => { if (processing) {
99
+ aborted = true;
100
+ } removeFn(); };
101
+ removeFn = () => { input.signal.removeEventListener("abort", abortFn); };
102
+ input.signal.addEventListener("abort", abortFn);
103
+ }
104
+ payload.promise.then(r => {
105
+ init.body = r !== "" ? r : null;
106
+ if (!aborted) {
107
+ resolve(fetchFn(input, init));
108
+ }
109
+ else {
110
+ reject(new utils.DOMException("The user aborted a request.", "AbortError"));
111
+ }
112
+ processing = false;
113
+ })
114
+ .catch((e) => {
115
+ reject(new TypeError("Failed to fetch"));
116
+ console.error(e);
117
+ processing = false;
118
+ })
119
+ .then(() => { if (removeFn) {
120
+ removeFn();
121
+ } }); // finally
122
+ }
123
+ else {
124
+ if (init && init.body && utils.isPolyfillType("URLSearchParams", init.body)) {
125
+ setContentType(init, "application/x-www-form-urlencoded;charset=UTF-8");
126
+ }
127
+ resolve(fetchFn(input, init));
128
+ }
129
+ });
130
+ }
131
+ _fetch["__MPHTTPX__Polyfill__"] = true;
132
+ return _fetch;
133
+ }
134
+ function fixXMLHttpRequest(XHRClass) {
135
+ const Klass = XHRClass || (typeof XMLHttpRequest !== "undefined" && XMLHttpRequest);
136
+ if (!Klass || "__MPHTTPX__Polyfill__" in Klass || "__MPHTTPX__" in Klass.prototype)
137
+ return;
138
+ const _abort = Klass.prototype.abort;
139
+ const _open = Klass.prototype.open;
140
+ const _send = Klass.prototype.send;
141
+ const _setRequestHeader = Klass.prototype.setRequestHeader;
142
+ Klass.prototype.abort = function () {
143
+ if (state(this).processing) {
144
+ state(this).aborted = true;
145
+ }
146
+ _abort.call(this);
147
+ state(this).hasContentType = false;
148
+ };
149
+ Klass.prototype.open = function (method, url, async = true, username = null, password = null) {
150
+ if (state(this).processing) {
151
+ state(this).aborted = true;
152
+ }
153
+ _open.call(this, method, url, async, username, password);
154
+ state(this).hasContentType = false;
155
+ };
156
+ Klass.prototype.send = function (body) {
157
+ if (utils.isPolyfillType("FormData", body)) {
158
+ body = FormDataP.FormData_toBlob(body);
159
+ if (!state(this).hasContentType) {
160
+ this.setRequestHeader("Content-Type", body.type);
161
+ }
162
+ }
163
+ if (utils.isPolyfillType("Blob", body)) {
164
+ let payload = new BodyImpl.Payload(body);
165
+ if (payload.type && !state(this).hasContentType) {
166
+ this.setRequestHeader("Content-Type", payload.type);
167
+ }
168
+ const withCredentials = this.withCredentials;
169
+ state(this).processing = true;
170
+ payload.promise.then((function (r) {
171
+ if (!state(this).aborted) {
172
+ if (withCredentials !== this.withCredentials) {
173
+ console.warn("Illegal to set the 'withCredentials' property on 'XMLHttpRequest': The value may only be set if the object's state is UNSENT or OPENED.");
174
+ this.withCredentials = withCredentials;
175
+ }
176
+ _send.call(this, r !== "" ? r : undefined);
177
+ }
178
+ state(this).aborted = false;
179
+ state(this).processing = false;
180
+ }).bind(this))
181
+ .catch((function (e) {
182
+ console.error(e);
183
+ state(this).aborted = false;
184
+ state(this).processing = false;
185
+ }).bind(this));
186
+ }
187
+ else {
188
+ if (utils.isPolyfillType("URLSearchParams", body) && !state(this).hasContentType)
189
+ this.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
190
+ _send.call(this, body);
191
+ }
192
+ };
193
+ Klass.prototype.setRequestHeader = function (name, value) {
194
+ if (state(this).processing) {
195
+ throw new utils.DOMException("Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.", "InvalidStateError");
196
+ }
197
+ _setRequestHeader.call(this, name, value);
198
+ if (String(name).toLowerCase() === "content-type")
199
+ state(this).hasContentType = true;
200
+ };
201
+ // @ts-ignore
202
+ Klass["__MPHTTPX__Polyfill__"] = true;
203
+ class XMLHttpRequestState {
204
+ constructor() {
205
+ this.aborted = false;
206
+ this.processing = false;
207
+ this.hasContentType = false;
208
+ }
209
+ }
210
+ function state(target) {
211
+ const prop = "__XMLHttpRequest_Polyfill__";
212
+ // @ts-ignore
213
+ if (!(prop in target)) {
214
+ utils.setState(target, prop, new XMLHttpRequestState());
215
+ }
216
+ return target[prop];
217
+ }
218
+ }
219
+ function fixWebSocket(WSClass) {
220
+ const Klass = WSClass || (typeof WebSocket !== "undefined" && WebSocket);
221
+ if (!Klass || "__MPHTTPX__Polyfill__" in Klass || "__MPHTTPX__" in Klass.prototype)
222
+ return;
223
+ const _send = Klass.prototype.send;
224
+ Klass.prototype.send = function (data) {
225
+ if (utils.isPolyfillType("Blob", data)) {
226
+ let payload = new BodyImpl.Payload(data);
227
+ payload.promise.then(r => {
228
+ if (this.readyState !== 1 /* OPEN */)
229
+ return;
230
+ _send.call(this, r);
231
+ });
232
+ }
233
+ else {
234
+ _send.call(this, data);
235
+ }
236
+ };
237
+ // @ts-ignore
238
+ Klass["__MPHTTPX__Polyfill__"] = true;
239
+ }
240
+
241
+ exports.fixFetch = fixFetch;
242
+ exports.fixWebSocket = fixWebSocket;
243
+ exports.fixXMLHttpRequest = fixXMLHttpRequest;
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ var TextEncoderP = require('./encoding/TextEncoderP.js');
4
+ var TextDecoderP = require('./encoding/TextDecoderP.js');
5
+ var EventTargetP = require('./event-system/EventTargetP.js');
6
+ var EventP = require('./event-system/EventP.js');
7
+ var CustomEventP = require('./event-system/CustomEventP.js');
8
+ var AbortControllerP = require('./event-system/AbortControllerP.js');
9
+ var AbortSignalP = require('./event-system/AbortSignalP.js');
10
+ var BlobP = require('./file-system/BlobP.js');
11
+ var FileP = require('./file-system/FileP.js');
12
+ var FileReaderP = require('./file-system/FileReaderP.js');
13
+ var URLSearchParamsP = require('./network/URLSearchParamsP.js');
14
+ var FormDataP = require('./network/FormDataP.js');
15
+ var fetchP = require('./fetch-api/fetchP.js');
16
+ var HeadersP = require('./fetch-api/HeadersP.js');
17
+ var RequestP = require('./fetch-api/RequestP.js');
18
+ var ResponseP = require('./fetch-api/ResponseP.js');
19
+ var fixes = require('./fixes.js');
20
+
21
+
22
+
23
+ exports.TextEncoder = TextEncoderP.TextEncoder;
24
+ exports.TextEncoderP = TextEncoderP.TextEncoderP;
25
+ exports.TextDecoder = TextDecoderP.TextDecoder;
26
+ exports.TextDecoderP = TextDecoderP.TextDecoderP;
27
+ exports.EventTarget = EventTargetP.EventTarget;
28
+ exports.EventTargetP = EventTargetP.EventTargetP;
29
+ exports.Event = EventP.Event;
30
+ exports.EventP = EventP.EventP;
31
+ exports.CustomEvent = CustomEventP.CustomEvent;
32
+ exports.CustomEventP = CustomEventP.CustomEventP;
33
+ exports.AbortController = AbortControllerP.AbortController;
34
+ exports.AbortControllerP = AbortControllerP.AbortControllerP;
35
+ exports.AbortSignal = AbortSignalP.AbortSignal;
36
+ exports.AbortSignalP = AbortSignalP.AbortSignalP;
37
+ exports.Blob = BlobP.Blob;
38
+ exports.BlobP = BlobP.BlobP;
39
+ exports.setReadableStreamClass = BlobP.setReadableStreamClass;
40
+ exports.File = FileP.File;
41
+ exports.FileP = FileP.FileP;
42
+ exports.FileReader = FileReaderP.FileReader;
43
+ exports.FileReaderP = FileReaderP.FileReaderP;
44
+ exports.URLSearchParams = URLSearchParamsP.URLSearchParams;
45
+ exports.URLSearchParamsP = URLSearchParamsP.URLSearchParamsP;
46
+ exports.FormData = FormDataP.FormData;
47
+ exports.FormDataP = FormDataP.FormDataP;
48
+ exports.fetch = fetchP.fetch;
49
+ exports.fetchP = fetchP.fetchP;
50
+ exports.setXMLHttpRequestClass = fetchP.setXMLHttpRequestClass;
51
+ exports.Headers = HeadersP.Headers;
52
+ exports.HeadersP = HeadersP.HeadersP;
53
+ exports.Request = RequestP.Request;
54
+ exports.RequestP = RequestP.RequestP;
55
+ exports.Response = ResponseP.Response;
56
+ exports.ResponseP = ResponseP.ResponseP;
57
+ exports.fixFetch = fixes.fixFetch;
58
+ exports.fixWebSocket = fixes.fixWebSocket;
59
+ exports.fixXMLHttpRequest = fixes.fixXMLHttpRequest;