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,181 @@
1
+ 'use strict';
2
+
3
+ var EventP = require('./EventP.js');
4
+ var utils = require('../utils.js');
5
+
6
+ class EventTargetP {
7
+ constructor() {
8
+ utils.setState(this, "__EventTarget__", new EventTargetState());
9
+ }
10
+ addEventListener(type, callback, options) {
11
+ utils.checkArgsLength(arguments.length, 2, utils.className(this), "addEventListener");
12
+ if (typeof callback !== "function" && typeof callback !== "object" && callback !== undefined) {
13
+ throw new TypeError(`Failed to execute 'addEventListener' on '${utils.className(this)}': parameter 2 is not of type 'Object'.`);
14
+ }
15
+ let s = state(this) || { executors: [] };
16
+ let executor = new Executor(type, callback);
17
+ let capture = executor.options.capture = typeof options === "boolean" ? options : !!(options === null || options === void 0 ? void 0 : options.capture);
18
+ if (!s.executors.some(x => x.equals(executor))) {
19
+ s.executors.push(executor);
20
+ if (options && typeof options === "object") {
21
+ executor.options.once = !!options.once;
22
+ executor.options.passive = !!options.passive;
23
+ const signal = options.signal;
24
+ if (signal && isEventTarget(signal) && !signal.aborted) {
25
+ executor.options.signal = signal;
26
+ whenAbort(this, executor, signal);
27
+ }
28
+ }
29
+ if (capture) {
30
+ let f = (v) => !!v.options.capture ? 0 : 1;
31
+ s.executors = s.executors.sort((a, b) => f(a) - f(b));
32
+ }
33
+ }
34
+ }
35
+ dispatchEvent(event) {
36
+ utils.checkArgsLength(arguments.length, 1, utils.className(this), "dispatchEvent");
37
+ if (utils.isPolyfillType("Event", event)) {
38
+ EventP.Event_setTrusted(event, false);
39
+ }
40
+ else if (!isEvent(event)) {
41
+ throw new TypeError(`Failed to execute 'dispatchEvent' on '${utils.className(this)}': parameter 1 is not of type 'Event'.`);
42
+ }
43
+ else {
44
+ console.warn(`WARNING: undefined behavior when executing 'dispatchEvent' on '${utils.className(this)}': parameter 1 is not of type 'Event(P)'.`);
45
+ }
46
+ return EventTarget_dispatchEvent(this, event);
47
+ }
48
+ removeEventListener(type, callback, options) {
49
+ utils.checkArgsLength(arguments.length, 2, utils.className(this), "removeEventListener");
50
+ if (typeof callback !== "function" && typeof callback !== "object" && callback !== undefined) {
51
+ throw new TypeError(`Failed to execute 'removeEventListener' on '${utils.className(this)}': parameter 2 is not of type 'Object'.`);
52
+ }
53
+ let s = state(this) || { executors: [] };
54
+ let executor = new Executor(type, callback);
55
+ executor.options.capture = typeof options === "boolean" ? options : !!(options === null || options === void 0 ? void 0 : options.capture);
56
+ if (s.executors.some(x => x.equals(executor))) {
57
+ s.executors = s.executors.filter(x => !x.equals(executor));
58
+ }
59
+ }
60
+ /** @internal */ toString() { return "[object EventTarget]"; }
61
+ /** @internal */ get [utils._Symbol.toStringTag]() { return "EventTarget"; }
62
+ /** @internal */ get __MPHTTPX__() { return { chain: ["EventTarget"] }; }
63
+ }
64
+ /** @internal */
65
+ class EventTargetState {
66
+ constructor() {
67
+ this.executors = [];
68
+ }
69
+ }
70
+ function state(target) {
71
+ return target.__EventTarget__;
72
+ }
73
+ function isEvent(value) {
74
+ const predicate = (str) => { return "[object " === str.slice(0, 8) && str.slice(-6) === "Event]"; };
75
+ return !!value
76
+ && typeof value === "object"
77
+ && (predicate(Object.prototype.toString.call(value)) || predicate(String(value)))
78
+ && "type" in value
79
+ && typeof value.type === "string";
80
+ }
81
+ function whenAbort(target, executor, signal) {
82
+ const onAbort = () => {
83
+ state(target).executors = state(target).executors.filter(x => !x.equals(executor));
84
+ signal.removeEventListener("abort", onAbort);
85
+ };
86
+ signal.addEventListener("abort", onAbort);
87
+ }
88
+ /** @internal */
89
+ class Executor {
90
+ constructor(type, callback) {
91
+ this.options = {};
92
+ this.type = "" + type;
93
+ this.callback = extract(callback);
94
+ }
95
+ equals(executor) {
96
+ return Object.is(this.type, executor.type)
97
+ && Object.is(this.callback, executor.callback)
98
+ && Object.is(this.options.capture, executor.options.capture);
99
+ }
100
+ }
101
+ function extract(cb) {
102
+ return typeof cb === "function" ? cb : isEventListenerObject(cb) ? cb.handleEvent : cb;
103
+ }
104
+ function isEventListenerObject(cb) {
105
+ return !!cb && typeof cb === "object" && "handleEvent" in cb && typeof cb.handleEvent === "function";
106
+ }
107
+ function EventTarget_dispatchEvent(target, event) {
108
+ const s = state(target) || {};
109
+ const evs = event.__Event__ || {};
110
+ evs.target = target;
111
+ evs.currentTarget = target;
112
+ evs.eventPhase = 2 /* AT_TARGET */;
113
+ evs.eventDispatched = true;
114
+ let onceIndexes = [];
115
+ if (!Array.isArray(s.executors)) {
116
+ s.executors = [];
117
+ }
118
+ for (let i = 0; i < s.executors.length; ++i) {
119
+ if (evs.immediatePropagationStopped)
120
+ break;
121
+ let executor = s.executors[i];
122
+ if (executor.type !== event.type)
123
+ continue;
124
+ if (executor.options.once)
125
+ onceIndexes.push(i);
126
+ evs.passive = !!executor.options.passive;
127
+ try {
128
+ let cb = executor.callback;
129
+ if (typeof cb === "function")
130
+ cb.call(target, event);
131
+ }
132
+ catch (e) {
133
+ console.error(e);
134
+ }
135
+ evs.passive = false;
136
+ }
137
+ if (onceIndexes.length > 0) {
138
+ s.executors = s.executors.reduce((acc, cur, index) => {
139
+ if (onceIndexes.indexOf(index) === -1)
140
+ acc.push(cur);
141
+ return acc;
142
+ }, []);
143
+ }
144
+ evs.currentTarget = null;
145
+ evs.eventPhase = 0 /* NONE */;
146
+ evs.eventDispatched = false;
147
+ return !(event.cancelable && event.defaultPrevented);
148
+ }
149
+ function attachFn(target, handlers) {
150
+ return function attach(type) {
151
+ const fnName = ("on" + type);
152
+ const callback = target[fnName];
153
+ const listener = handlers[fnName];
154
+ typeof callback === "function"
155
+ ? EventTargetP.prototype.addEventListener.call(target, type, listener)
156
+ : EventTargetP.prototype.removeEventListener.call(target, type, listener);
157
+ };
158
+ }
159
+ function executeFn(target, cb, ev) {
160
+ if (typeof cb === "function")
161
+ cb.call(target, ev);
162
+ }
163
+ function isEventTarget(value) {
164
+ return utils.isPolyfillType("EventTarget", value) || isExternalEventTarget(value);
165
+ }
166
+ function isExternalEventTarget(value) {
167
+ return !!value
168
+ && typeof value === "object"
169
+ && "addEventListener" in value
170
+ && typeof value.addEventListener === "function"
171
+ && "removeEventListener" in value
172
+ && typeof value.removeEventListener === "function";
173
+ }
174
+ const EventTargetE = (typeof EventTarget !== "undefined" && EventTarget) || EventTargetP;
175
+
176
+ exports.EventTarget = EventTargetE;
177
+ exports.EventTargetP = EventTargetP;
178
+ exports.EventTarget_dispatchEvent = EventTarget_dispatchEvent;
179
+ exports.attachFn = attachFn;
180
+ exports.executeFn = executeFn;
181
+ exports.isEventTarget = isEventTarget;
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ var utils = require('../utils.js');
4
+ var EventP = require('./EventP.js');
5
+ var EventTargetP = require('./EventTargetP.js');
6
+
7
+ const fields = ["loaded", "total"];
8
+ class ProgressEventP extends EventP.EventP {
9
+ constructor(type, eventInitDict) {
10
+ var _a, _b;
11
+ super(type, eventInitDict);
12
+ utils.setState(this, "__ProgressEvent__", new ProgressEventState());
13
+ const s = state(this);
14
+ s.lengthComputable = !!(eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.lengthComputable);
15
+ s.loaded = Number((_a = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.loaded) !== null && _a !== void 0 ? _a : 0);
16
+ s.total = Number((_b = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.total) !== null && _b !== void 0 ? _b : 0);
17
+ for (let i = 0; i < fields.length; ++i) {
18
+ let field = fields[i];
19
+ if (isNaN(this[field])) {
20
+ throw new TypeError(`Failed to construct 'ProgressEvent': Failed to read the '${field}' property from 'ProgressEventInit': The provided double value is non-finite.`);
21
+ }
22
+ }
23
+ }
24
+ get lengthComputable() { return state(this).lengthComputable; }
25
+ get loaded() { return state(this).loaded; }
26
+ get total() { return state(this).total; }
27
+ /** @internal */ toString() { return "[object ProgressEvent]"; }
28
+ /** @internal */ get [utils._Symbol.toStringTag]() { return "ProgressEvent"; }
29
+ /** @internal */ get __MPHTTPX__() { return { chain: ["ProgressEvent", "Event"] }; }
30
+ }
31
+ /** @internal */
32
+ class ProgressEventState {
33
+ constructor() {
34
+ this.lengthComputable = false;
35
+ this.loaded = 0;
36
+ this.total = 0;
37
+ }
38
+ }
39
+ function state(target) {
40
+ return target.__ProgressEvent__;
41
+ }
42
+ function emitProgressEvent(target, type, loaded = 0, total = 0) {
43
+ let event = new ProgressEventP(type, {
44
+ lengthComputable: total > 0,
45
+ loaded,
46
+ total,
47
+ });
48
+ event.__Event__.target = target;
49
+ EventP.Event_setTrusted(event, true);
50
+ EventTargetP.EventTarget_dispatchEvent(target, event);
51
+ }
52
+
53
+ exports.ProgressEventP = ProgressEventP;
54
+ exports.emitProgressEvent = emitProgressEvent;
@@ -0,0 +1,176 @@
1
+ 'use strict';
2
+
3
+ var utils = require('../utils.js');
4
+ var TextDecoderP = require('../encoding/TextDecoderP.js');
5
+ var URLSearchParamsP = require('../network/URLSearchParamsP.js');
6
+ var BlobP = require('../file-system/BlobP.js');
7
+ var FormDataP = require('../network/FormDataP.js');
8
+
9
+ class Payload {
10
+ constructor(body, contentType) {
11
+ this._type = "";
12
+ if (contentType) {
13
+ this.type = contentType;
14
+ }
15
+ if (typeof body === "string") {
16
+ this.promise = Promise.resolve(body);
17
+ this.type = "text/plain;charset=UTF-8";
18
+ this.calcLength = () => BlobP.encode(body).length;
19
+ }
20
+ else if (URLSearchParamsP.isURLSearchParams(body)) {
21
+ let _body = body.toString();
22
+ this.promise = Promise.resolve(_body);
23
+ this.type = "application/x-www-form-urlencoded;charset=UTF-8";
24
+ this.calcLength = () => BlobP.encode(_body).length;
25
+ }
26
+ else if (TextDecoderP.isArrayBuffer(body)) {
27
+ this.promise = Promise.resolve(body.slice(0));
28
+ this.length = body.byteLength;
29
+ }
30
+ else if (ArrayBuffer.isView(body)) {
31
+ let _body = body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength);
32
+ this.promise = Promise.resolve(_body);
33
+ this.length = _body.byteLength;
34
+ }
35
+ else if (BlobP.isBlob(body)) {
36
+ this.promise = body.arrayBuffer();
37
+ this.type = body.type;
38
+ this.length = body.size;
39
+ }
40
+ else if (FormDataP.isFormData(body)) {
41
+ let _body = FormDataP.FormData_toBlob(body, contentType ? FormDataP.extractBoundary(contentType) : undefined);
42
+ this.promise = _body.arrayBuffer();
43
+ this.type = _body.type;
44
+ this.length = _body.size;
45
+ }
46
+ else if (body === null || body === undefined) {
47
+ this.promise = Promise.resolve("");
48
+ this.length = 0;
49
+ }
50
+ else {
51
+ let _body = "" + body;
52
+ this.promise = Promise.resolve(_body);
53
+ this.type = "text/plain;charset=UTF-8";
54
+ this.calcLength = () => BlobP.encode(_body).length;
55
+ }
56
+ }
57
+ get type() { return this._type; }
58
+ set type(value) { if (!this._type)
59
+ this._type = value; }
60
+ get size() {
61
+ var _a;
62
+ if (typeof this.length !== "number" && this.calcLength)
63
+ this.length = this.calcLength();
64
+ return (_a = this.length) !== null && _a !== void 0 ? _a : 0;
65
+ }
66
+ text() { return this.promise.then(r => typeof r === "string" ? r : BlobP.decode(r)); }
67
+ arrayBuffer() { return this.promise.then(r => TextDecoderP.isArrayBuffer(r) ? r : BlobP.encode(r).buffer); }
68
+ }
69
+ class BodyImpl {
70
+ /** @internal */
71
+ constructor() {
72
+ if (new.target === BodyImpl) {
73
+ throw new TypeError("Failed to construct 'Body': Illegal constructor");
74
+ }
75
+ utils.setState(this, "__Body__", new BodyState());
76
+ }
77
+ get bodyUsed() { return state(this).bodyUsed; }
78
+ ;
79
+ get body() {
80
+ throw new TypeError(`Failed to access 'body' on '${utils.className(this)}': property not implemented.`);
81
+ }
82
+ arrayBuffer() {
83
+ const kind = "arrayBuffer";
84
+ return consumed(this, kind) || read(this, kind);
85
+ }
86
+ blob() {
87
+ const kind = "blob";
88
+ return consumed(this, kind) || read(this, kind);
89
+ }
90
+ bytes() {
91
+ const kind = "bytes";
92
+ return consumed(this, kind) || read(this, kind);
93
+ }
94
+ formData() {
95
+ const kind = "formData";
96
+ return consumed(this, kind) || read(this, kind);
97
+ }
98
+ json() {
99
+ const kind = "json";
100
+ return consumed(this, kind) || read(this, kind);
101
+ }
102
+ text() {
103
+ const kind = "text";
104
+ return consumed(this, kind) || read(this, kind);
105
+ }
106
+ /** @internal */ toString() { return "[object Body]"; }
107
+ /** @internal */ get [utils._Symbol.toStringTag]() { return "Body"; }
108
+ /** @internal */ get __MPHTTPX__() { return { chain: ["Body"] }; }
109
+ }
110
+ /** @internal */
111
+ class BodyState {
112
+ constructor() {
113
+ this.bodyUsed = false;
114
+ }
115
+ }
116
+ function state(target) {
117
+ return target.__Body__;
118
+ }
119
+ function initBody(instance, body) {
120
+ const b = instance;
121
+ if (isGlobalReadableStream(body) || isOtherReadableStream(body)) {
122
+ throw new TypeError(`Failed to construct '${utils.className(b)}': ReadableStream not implemented.`);
123
+ }
124
+ if (body !== null && body !== undefined) {
125
+ state(b).payload = new Payload(body);
126
+ }
127
+ }
128
+ function read(body, kind) {
129
+ let payload = state(body).payload || new Payload();
130
+ if (kind === "json") {
131
+ return payload.text().then(r => JSON.parse(r));
132
+ }
133
+ else if (kind === "text") {
134
+ return payload.text();
135
+ }
136
+ else if (kind === "arrayBuffer") {
137
+ return payload.arrayBuffer();
138
+ }
139
+ else if (kind === "bytes") {
140
+ return payload.arrayBuffer().then(r => new Uint8Array(r));
141
+ }
142
+ else if (kind === "blob") {
143
+ return payload.promise.then(r => new BlobP.Blob([r]));
144
+ }
145
+ else if (kind === "formData") {
146
+ return payload.text().then(r => FormDataP.createFormDataFromBinaryText(r, FormDataP.extractBoundary(payload.type)));
147
+ }
148
+ else {
149
+ return payload.promise;
150
+ }
151
+ }
152
+ function consumed(body, kind) {
153
+ if (!state(body).payload)
154
+ return;
155
+ if (!body.bodyUsed) {
156
+ state(body).bodyUsed = true;
157
+ return;
158
+ }
159
+ return Promise.reject(new TypeError(`Failed to execute '${kind}' on '${utils.className(body)}': body stream already read`));
160
+ }
161
+ function isGlobalReadableStream(value) {
162
+ return !!value &&
163
+ typeof value === "object" &&
164
+ typeof ReadableStream !== "undefined" &&
165
+ ReadableStream &&
166
+ ReadableStream.prototype.isPrototypeOf(value);
167
+ }
168
+ function isOtherReadableStream(value) {
169
+ return (utils.isObjectType("ReadableStream", value) || String(value) === "[object ReadableStream]")
170
+ && "getReader" in value
171
+ && typeof value.getReader === "function";
172
+ }
173
+
174
+ exports.BodyImpl = BodyImpl;
175
+ exports.Payload = Payload;
176
+ exports.initBody = initBody;
@@ -0,0 +1,184 @@
1
+ 'use strict';
2
+
3
+ var utils = require('../utils.js');
4
+
5
+ class HeadersP {
6
+ constructor(init) {
7
+ utils.setState(this, "__Headers__", new HeadersState());
8
+ if (init !== undefined) {
9
+ if (isHeaders(init)) {
10
+ init.forEach((value, name) => { Headers_append(this, name, value, ""); }, this);
11
+ }
12
+ else if (utils.isSequence(init)) {
13
+ let _init = Array.isArray(init) ? init : Array.from(init);
14
+ for (let i = 0; i < _init.length; ++i) {
15
+ let item = _init[i];
16
+ if (utils.isSequence(item)) {
17
+ let pair = Array.isArray(item) ? item : Array.from(item);
18
+ if (pair.length === 2) {
19
+ Headers_append(this, pair[0], pair[1]);
20
+ }
21
+ else {
22
+ throw new TypeError("Failed to construct 'Headers': Invalid value");
23
+ }
24
+ }
25
+ else {
26
+ throw new TypeError("Failed to construct 'Headers': The provided value cannot be converted to a sequence.");
27
+ }
28
+ }
29
+ }
30
+ else {
31
+ if (init && typeof init === "object") {
32
+ Object.getOwnPropertyNames(init).forEach(name => { Headers_append(this, name, init[name]); }, this);
33
+ }
34
+ else {
35
+ throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(record<ByteString, ByteString> or sequence<sequence<ByteString>>)'.");
36
+ }
37
+ }
38
+ }
39
+ }
40
+ append(name, value) {
41
+ checkArgsFn(arguments.length, 2, "append");
42
+ Headers_append(this, name, value, "append");
43
+ }
44
+ delete(name) {
45
+ checkArgsFn(arguments.length, 1, "delete");
46
+ delete state(this).dict[normalizeName(name, throwsFn("delete"))];
47
+ }
48
+ get(name) {
49
+ var _a;
50
+ checkArgsFn(arguments.length, 1, "get");
51
+ return (_a = state(this).dict[normalizeName(name, throwsFn("get"))]) !== null && _a !== void 0 ? _a : null;
52
+ }
53
+ getSetCookie() {
54
+ let value = this.get("Set-Cookie");
55
+ return value ? value.split(", ") : [];
56
+ }
57
+ has(name) {
58
+ checkArgsFn(arguments.length, 1, "has");
59
+ return state(this).dict.hasOwnProperty(normalizeName(name, throwsFn("has")));
60
+ }
61
+ set(name, value) {
62
+ checkArgsFn(arguments.length, 2, "set");
63
+ state(this).dict[normalizeName(name, throwsFn("set"))] = normalizeValue(value);
64
+ }
65
+ forEach(callbackfn, thisArg) {
66
+ checkArgsFn(arguments.length, 1, "forEach");
67
+ if (typeof callbackfn !== "function") {
68
+ throw new TypeError("Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'.");
69
+ }
70
+ let dict = state(this).dict;
71
+ let names = Object.getOwnPropertyNames(dict);
72
+ for (let i = 0; i < names.length; ++i) {
73
+ let name = names[i];
74
+ callbackfn.call(thisArg, dict[name], name, this);
75
+ }
76
+ }
77
+ entries() {
78
+ let array = [];
79
+ this.forEach((value, name) => { array.push([name, value]); });
80
+ return array.values();
81
+ }
82
+ keys() {
83
+ let array = [];
84
+ this.forEach((value, name) => { array.push([name, value]); });
85
+ return array.map(x => x[0]).values();
86
+ }
87
+ values() {
88
+ let array = [];
89
+ this.forEach((value, name) => { array.push([name, value]); });
90
+ return array.map(x => x[1]).values();
91
+ }
92
+ // @ts-ignore
93
+ /** @internal */ [utils._Symbol.iterator]() {
94
+ return this.entries();
95
+ }
96
+ /** @internal */ toString() { return "[object Headers]"; }
97
+ /** @internal */ get [utils._Symbol.toStringTag]() { return "Headers"; }
98
+ /** @internal */ get __MPHTTPX__() { return { chain: ["Headers"] }; }
99
+ }
100
+ /** @internal */
101
+ class HeadersState {
102
+ constructor() {
103
+ this.dict = {};
104
+ }
105
+ }
106
+ function state(target) {
107
+ return target.__Headers__;
108
+ }
109
+ function Headers_append(headers, name, value, kind = "constructor") {
110
+ let _name = normalizeName(name, kind ? throwsFn(kind) : undefined);
111
+ let _value = normalizeValue(value);
112
+ let dict = state(headers).dict;
113
+ let oldValue = dict[_name];
114
+ dict[_name] = oldValue !== undefined ? `${oldValue}, ${_value}` : _value;
115
+ }
116
+ function throwsFn(kind) {
117
+ return () => {
118
+ throw new TypeError(`Failed to ${(kind && kind !== "constructor") ? ("execute '" + kind + "' on") : "construct"} 'Headers': Invalid name`);
119
+ };
120
+ }
121
+ function checkArgsFn(actual, expect, funcName) {
122
+ utils.checkArgsLength(actual, expect, "Headers", funcName);
123
+ }
124
+ function isHeaders(value) {
125
+ return utils.isPolyfillType("Headers", value) || isExternalHeaders(value);
126
+ }
127
+ function isExternalHeaders(value) {
128
+ let expect = "[object Headers]";
129
+ return (Object.prototype.toString.call(value) === expect || String(value) === expect)
130
+ && "forEach" in value
131
+ && typeof value.forEach === "function";
132
+ }
133
+ function normalizeName(name, throwError) {
134
+ if (typeof name !== "string") {
135
+ name = "" + name;
136
+ }
137
+ if (throwError && (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === "")) {
138
+ throwError();
139
+ }
140
+ return name.toLowerCase();
141
+ }
142
+ function normalizeValue(value) {
143
+ return typeof value === "string" ? value : ("" + value);
144
+ }
145
+ function parseHeaders(rawHeaders) {
146
+ let headers = new HeadersE();
147
+ let preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, " ");
148
+ preProcessedHeaders
149
+ .split("\r")
150
+ .map(header => header.indexOf("\n") === 0 ? header.substring(1, header.length) : header)
151
+ .forEach(line => {
152
+ let parts = line.split(":");
153
+ let name = parts.shift().trim();
154
+ if (name) {
155
+ let value = parts.join(":").trim();
156
+ try {
157
+ headers.append(name, value);
158
+ }
159
+ catch (e) {
160
+ console.warn(`SyntaxError: Response.headers: '${name}' is not a valid HTTP header field name.`);
161
+ }
162
+ }
163
+ });
164
+ return headers;
165
+ }
166
+ function createHeaders(headers) {
167
+ if (utils.isPolyfillType("Headers", headers)) {
168
+ if (!Object.is(HeadersE, HeadersP)) {
169
+ let _headers = new HeadersE();
170
+ headers.forEach((v, k) => { _headers.append(k, v); });
171
+ return _headers;
172
+ }
173
+ }
174
+ return new HeadersE(headers);
175
+ }
176
+ const HeadersE = (typeof Headers !== "undefined" && Headers) || HeadersP;
177
+
178
+ exports.Headers = HeadersE;
179
+ exports.HeadersP = HeadersP;
180
+ exports.createHeaders = createHeaders;
181
+ exports.isHeaders = isHeaders;
182
+ exports.normalizeName = normalizeName;
183
+ exports.normalizeValue = normalizeValue;
184
+ exports.parseHeaders = parseHeaders;