mphttpx 2.3.0 → 2.4.0

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 (96) hide show
  1. package/README.md +69 -953
  2. package/dist/cjs/fetchP.js +22 -0
  3. package/dist/cjs/index.js +197 -55
  4. package/dist/esm/fetchP.js +12 -0
  5. package/dist/esm/index.js +5 -18
  6. package/dist/index.d.ts +8 -394
  7. package/dist/mphttpx.cjs.js +6646 -0
  8. package/dist/mphttpx.cjs.min.js +1 -1
  9. package/dist/mphttpx.esm.js +6595 -0
  10. package/dist/mphttpx.esm.min.js +1 -1
  11. package/package.json +27 -9
  12. package/README.zh-CN.md +0 -983
  13. package/dist/cjs/encoding/TextDecoderP.js +0 -174
  14. package/dist/cjs/encoding/TextEncoderP.js +0 -121
  15. package/dist/cjs/event-system/AbortControllerP.js +0 -28
  16. package/dist/cjs/event-system/AbortSignalP.js +0 -120
  17. package/dist/cjs/event-system/CloseEventP.js +0 -36
  18. package/dist/cjs/event-system/CustomEventP.js +0 -35
  19. package/dist/cjs/event-system/EventP.js +0 -127
  20. package/dist/cjs/event-system/EventTargetP.js +0 -155
  21. package/dist/cjs/event-system/MessageEventP.js +0 -61
  22. package/dist/cjs/event-system/ProgressEventP.js +0 -42
  23. package/dist/cjs/fetch-api/BodyImpl.js +0 -167
  24. package/dist/cjs/fetch-api/HeadersP.js +0 -155
  25. package/dist/cjs/fetch-api/RequestP.js +0 -163
  26. package/dist/cjs/fetch-api/ResponseP.js +0 -93
  27. package/dist/cjs/fetch-api/fetchP.js +0 -125
  28. package/dist/cjs/file-system/BlobP.js +0 -111
  29. package/dist/cjs/file-system/FileP.js +0 -34
  30. package/dist/cjs/file-system/FileReaderP.js +0 -173
  31. package/dist/cjs/helpers/Payload.js +0 -96
  32. package/dist/cjs/helpers/decode.js +0 -11
  33. package/dist/cjs/helpers/emitEvent.js +0 -14
  34. package/dist/cjs/helpers/emitProgressEvent.js +0 -19
  35. package/dist/cjs/helpers/encode.js +0 -11
  36. package/dist/cjs/helpers/handlers.js +0 -23
  37. package/dist/cjs/helpers/isArrayBuffer.js +0 -11
  38. package/dist/cjs/helpers/isBlob.js +0 -20
  39. package/dist/cjs/helpers/isEventTarget.js +0 -18
  40. package/dist/cjs/helpers/isSequence.js +0 -13
  41. package/dist/cjs/helpers/isURLSearchParams.js +0 -10
  42. package/dist/cjs/helpers/normalizeMethod.js +0 -11
  43. package/dist/cjs/helpers/statusTextMap.js +0 -68
  44. package/dist/cjs/helpers/toBase64.js +0 -28
  45. package/dist/cjs/mini-program/WebSocketImpl.js +0 -197
  46. package/dist/cjs/mini-program/XMLHttpRequestImpl.js +0 -493
  47. package/dist/cjs/mini-program/connectSocket.js +0 -28
  48. package/dist/cjs/mini-program/platform.js +0 -29
  49. package/dist/cjs/mini-program/request.js +0 -36
  50. package/dist/cjs/network/FormDataP.js +0 -160
  51. package/dist/cjs/network/URLSearchParamsP.js +0 -226
  52. package/dist/cjs/network/XMLHttpRequestEventTargetP.js +0 -64
  53. package/dist/cjs/network/XMLHttpRequestUploadP.js +0 -28
  54. package/dist/cjs/utils.js +0 -56
  55. package/dist/esm/encoding/TextDecoderP.js +0 -171
  56. package/dist/esm/encoding/TextEncoderP.js +0 -118
  57. package/dist/esm/event-system/AbortControllerP.js +0 -25
  58. package/dist/esm/event-system/AbortSignalP.js +0 -115
  59. package/dist/esm/event-system/CloseEventP.js +0 -34
  60. package/dist/esm/event-system/CustomEventP.js +0 -32
  61. package/dist/esm/event-system/EventP.js +0 -122
  62. package/dist/esm/event-system/EventTargetP.js +0 -150
  63. package/dist/esm/event-system/MessageEventP.js +0 -59
  64. package/dist/esm/event-system/ProgressEventP.js +0 -40
  65. package/dist/esm/fetch-api/BodyImpl.js +0 -164
  66. package/dist/esm/fetch-api/HeadersP.js +0 -149
  67. package/dist/esm/fetch-api/RequestP.js +0 -160
  68. package/dist/esm/fetch-api/ResponseP.js +0 -90
  69. package/dist/esm/fetch-api/fetchP.js +0 -121
  70. package/dist/esm/file-system/BlobP.js +0 -108
  71. package/dist/esm/file-system/FileP.js +0 -31
  72. package/dist/esm/file-system/FileReaderP.js +0 -170
  73. package/dist/esm/helpers/Payload.js +0 -94
  74. package/dist/esm/helpers/decode.js +0 -9
  75. package/dist/esm/helpers/emitEvent.js +0 -12
  76. package/dist/esm/helpers/emitProgressEvent.js +0 -17
  77. package/dist/esm/helpers/encode.js +0 -9
  78. package/dist/esm/helpers/handlers.js +0 -20
  79. package/dist/esm/helpers/isArrayBuffer.js +0 -9
  80. package/dist/esm/helpers/isBlob.js +0 -18
  81. package/dist/esm/helpers/isEventTarget.js +0 -16
  82. package/dist/esm/helpers/isSequence.js +0 -11
  83. package/dist/esm/helpers/isURLSearchParams.js +0 -8
  84. package/dist/esm/helpers/normalizeMethod.js +0 -9
  85. package/dist/esm/helpers/statusTextMap.js +0 -66
  86. package/dist/esm/helpers/toBase64.js +0 -26
  87. package/dist/esm/mini-program/WebSocketImpl.js +0 -193
  88. package/dist/esm/mini-program/XMLHttpRequestImpl.js +0 -489
  89. package/dist/esm/mini-program/connectSocket.js +0 -26
  90. package/dist/esm/mini-program/platform.js +0 -27
  91. package/dist/esm/mini-program/request.js +0 -34
  92. package/dist/esm/network/FormDataP.js +0 -157
  93. package/dist/esm/network/URLSearchParamsP.js +0 -223
  94. package/dist/esm/network/XMLHttpRequestEventTargetP.js +0 -61
  95. package/dist/esm/network/XMLHttpRequestUploadP.js +0 -25
  96. package/dist/esm/utils.js +0 -48
@@ -1,150 +0,0 @@
1
- import { Event_setTrusted } from './EventP.js';
2
- import { isEventTarget } from '../helpers/isEventTarget.js';
3
- import { setState, checkArgsLength, className, isPolyfillType, SymbolP } from '../utils.js';
4
-
5
- class EventTargetP {
6
- constructor() {
7
- setState(this, "__EventTarget__", new EventTargetState());
8
- }
9
- addEventListener(type, callback, options) {
10
- checkArgsLength(arguments.length, 2, className(this), "addEventListener");
11
- if (typeof callback !== "function" && typeof callback !== "object" && callback !== undefined) {
12
- throw new TypeError(`Failed to execute 'addEventListener' on '${className(this)}': parameter 2 is not of type 'Object'.`);
13
- }
14
- let s = state(this);
15
- let executor = new Executor(type, callback);
16
- let capture = executor.options.capture = typeof options === "boolean" ? options : !!(options === null || options === void 0 ? void 0 : options.capture);
17
- if (!s.executors.some(x => x.equals(executor))) {
18
- s.executors.push(executor);
19
- if (options && typeof options === "object") {
20
- executor.options.once = !!options.once;
21
- executor.options.passive = !!options.passive;
22
- const signal = options.signal;
23
- if (signal && isEventTarget(signal) && !signal.aborted) {
24
- executor.options.signal = signal;
25
- whenAbort(this, executor, signal);
26
- }
27
- }
28
- if (capture) {
29
- let f = (v) => !!v.options.capture ? 0 : 1;
30
- s.executors = s.executors.sort((a, b) => f(a) - f(b));
31
- }
32
- }
33
- }
34
- dispatchEvent(event) {
35
- checkArgsLength(arguments.length, 1, className(this), "dispatchEvent");
36
- if (isPolyfillType("Event", event)) {
37
- Event_setTrusted(event, false);
38
- }
39
- else if (!isEvent(event)) {
40
- throw new TypeError(`Failed to execute 'dispatchEvent' on '${className(this)}': parameter 1 is not of type 'Event'.`);
41
- }
42
- else {
43
- console.warn(`WARNING: undefined behavior when executing 'dispatchEvent' on '${className(this)}': parameter 1 is not of type 'mphttpx.Event'`);
44
- }
45
- return EventTarget_fire(this, event);
46
- }
47
- removeEventListener(type, callback, options) {
48
- checkArgsLength(arguments.length, 2, className(this), "removeEventListener");
49
- if (typeof callback !== "function" && typeof callback !== "object" && callback !== undefined) {
50
- throw new TypeError(`Failed to execute 'removeEventListener' on '${className(this)}': parameter 2 is not of type 'Object'.`);
51
- }
52
- let s = state(this);
53
- let executor = new Executor(type, callback);
54
- executor.options.capture = typeof options === "boolean" ? options : !!(options === null || options === void 0 ? void 0 : options.capture);
55
- if (s.executors.some(x => x.equals(executor))) {
56
- s.executors = s.executors.filter(x => !x.equals(executor));
57
- }
58
- }
59
- /** @internal */ toString() { return "[object EventTarget]"; }
60
- /** @internal */ get [SymbolP.toStringTag]() { return "EventTarget"; }
61
- /** @internal */ get __MPHTTPX__() { return { chain: ["EventTarget"] }; }
62
- }
63
- /** @internal */
64
- class EventTargetState {
65
- constructor() {
66
- this.executors = [];
67
- }
68
- }
69
- function state(target) {
70
- return target.__EventTarget__;
71
- }
72
- function isEvent(value) {
73
- const predicate = (str) => {
74
- return "[object " === str.slice(0, 8) && str.slice(-6) === "Event]";
75
- };
76
- return !!value
77
- && typeof value === "object"
78
- && (predicate(Object.prototype.toString.call(value)) || predicate(String(value)))
79
- && "type" in value
80
- && typeof value.type === "string";
81
- }
82
- /** @internal */
83
- function EventTarget_fire(target, event) {
84
- const s = state(target);
85
- const evs = event.__Event__ || {};
86
- evs.target = target;
87
- evs.currentTarget = target;
88
- evs.eventPhase = 2 /* AT_TARGET */;
89
- evs.eventDispatched = true;
90
- let onceIndexes = [];
91
- for (let i = 0; i < s.executors.length; ++i) {
92
- if (evs.immediatePropagationStopped)
93
- break;
94
- let executor = s.executors[i];
95
- if (executor.type !== event.type)
96
- continue;
97
- if (executor.options.once)
98
- onceIndexes.push(i);
99
- evs.passive = !!executor.options.passive;
100
- try {
101
- let cb = executor.callback;
102
- if (typeof cb === "function")
103
- cb.call(target, event);
104
- }
105
- catch (e) {
106
- console.error(e);
107
- }
108
- evs.passive = false;
109
- }
110
- if (onceIndexes.length > 0) {
111
- s.executors = s.executors.reduce((acc, cur, index) => {
112
- if (onceIndexes.indexOf(index) === -1)
113
- acc.push(cur);
114
- return acc;
115
- }, []);
116
- }
117
- evs.currentTarget = null;
118
- evs.eventPhase = 0 /* NONE */;
119
- evs.eventDispatched = false;
120
- return !(event.cancelable && event.defaultPrevented);
121
- }
122
- function whenAbort(target, executor, signal) {
123
- const onAbort = () => {
124
- state(target).executors = state(target).executors.filter(x => !x.equals(executor));
125
- signal.removeEventListener("abort", onAbort);
126
- };
127
- signal.addEventListener("abort", onAbort);
128
- }
129
- /** @internal */
130
- class Executor {
131
- constructor(type, callback) {
132
- this.options = {};
133
- this.type = "" + type;
134
- this.callback = extract(callback);
135
- }
136
- equals(executor) {
137
- return Object.is(this.type, executor.type)
138
- && Object.is(this.callback, executor.callback)
139
- && Object.is(this.options.capture, executor.options.capture);
140
- }
141
- }
142
- function extract(cb) {
143
- return typeof cb === "function" ? cb : isEventListenerObject(cb) ? cb.handleEvent : cb;
144
- }
145
- function isEventListenerObject(cb) {
146
- return !!cb && typeof cb === "object" && "handleEvent" in cb && typeof cb.handleEvent === "function";
147
- }
148
- const EventTargetE = (typeof EventTarget !== "undefined" && EventTarget) || EventTargetP;
149
-
150
- export { EventTargetE as EventTarget, EventTargetP, EventTargetState, EventTarget_fire };
@@ -1,59 +0,0 @@
1
- import { EventP } from './EventP.js';
2
- import { setState, checkArgsLength, SymbolP } from '../utils.js';
3
-
4
- class MessageEventP extends EventP {
5
- constructor(type, eventInitDict) {
6
- var _a;
7
- super(type, eventInitDict);
8
- setState(this, "__MessageEvent__", new MessageEventState());
9
- const s = state(this);
10
- s.data = (_a = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.data) !== null && _a !== void 0 ? _a : null;
11
- if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.origin) !== undefined)
12
- s.origin = "" + eventInitDict.origin;
13
- if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.lastEventId) !== undefined)
14
- s.lastEventId = "" + eventInitDict.lastEventId;
15
- if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.source) !== undefined)
16
- s.source = eventInitDict.source;
17
- if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.ports) !== undefined)
18
- s.ports = eventInitDict.ports;
19
- }
20
- get data() { return state(this).data; }
21
- get lastEventId() { return state(this).lastEventId; }
22
- get origin() { return state(this).origin; }
23
- get ports() { return state(this).ports; }
24
- get source() { return state(this).source; }
25
- initMessageEvent(type, bubbles, cancelable, data, origin, lastEventId, source, ports) {
26
- checkArgsLength(arguments.length, 1, "MessageEvent", "initMessageEvent");
27
- if (this.__Event__.eventDispatched)
28
- return;
29
- this.initEvent(type, bubbles, cancelable);
30
- const s = state(this);
31
- s.data = data !== null && data !== void 0 ? data : null;
32
- if (origin !== undefined)
33
- s.origin = "" + origin;
34
- if (lastEventId !== undefined)
35
- s.lastEventId = "" + lastEventId;
36
- if (source !== undefined)
37
- s.source = source;
38
- if (ports !== undefined)
39
- s.ports = Array.from(ports);
40
- }
41
- /** @internal */ toString() { return "[object MessageEvent]"; }
42
- /** @internal */ get [SymbolP.toStringTag]() { return "MessageEvent"; }
43
- /** @internal */ get __MPHTTPX__() { return { chain: ["MessageEvent", "Event"] }; }
44
- }
45
- /** @internal */
46
- class MessageEventState {
47
- constructor() {
48
- this.data = null;
49
- this.lastEventId = "";
50
- this.origin = "";
51
- this.ports = [];
52
- this.source = null;
53
- }
54
- }
55
- function state(target) {
56
- return target.__MessageEvent__;
57
- }
58
-
59
- export { MessageEventP };
@@ -1,40 +0,0 @@
1
- import { EventP } from './EventP.js';
2
- import { setState, SymbolP } from '../utils.js';
3
-
4
- class ProgressEventP extends EventP {
5
- constructor(type, eventInitDict) {
6
- var _a, _b;
7
- super(type, eventInitDict);
8
- setState(this, "__ProgressEvent__", new ProgressEventState());
9
- const s = state(this);
10
- s.lengthComputable = !!(eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.lengthComputable);
11
- s.loaded = Number((_a = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.loaded) !== null && _a !== void 0 ? _a : 0);
12
- s.total = Number((_b = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.total) !== null && _b !== void 0 ? _b : 0);
13
- checkNumberField("loaded", this.loaded);
14
- checkNumberField("total", this.total);
15
- }
16
- get lengthComputable() { return state(this).lengthComputable; }
17
- get loaded() { return state(this).loaded; }
18
- get total() { return state(this).total; }
19
- /** @internal */ toString() { return "[object ProgressEvent]"; }
20
- /** @internal */ get [SymbolP.toStringTag]() { return "ProgressEvent"; }
21
- /** @internal */ get __MPHTTPX__() { return { chain: ["ProgressEvent", "Event"] }; }
22
- }
23
- /** @internal */
24
- class ProgressEventState {
25
- constructor() {
26
- this.lengthComputable = false;
27
- this.loaded = 0;
28
- this.total = 0;
29
- }
30
- }
31
- function state(target) {
32
- return target.__ProgressEvent__;
33
- }
34
- function checkNumberField(field, value) {
35
- if (isNaN(value)) {
36
- throw new TypeError(`Failed to construct 'ProgressEvent': Failed to read the '${field}' property from 'ProgressEventInit': The provided double value is non-finite.`);
37
- }
38
- }
39
-
40
- export { ProgressEventP };
@@ -1,164 +0,0 @@
1
- import { Payload } from '../helpers/Payload.js';
2
- import { BlobP } from '../file-system/BlobP.js';
3
- import { FileP } from '../file-system/FileP.js';
4
- import { FormDataP } from '../network/FormDataP.js';
5
- import { setState, className, SymbolP, isObjectType } from '../utils.js';
6
-
7
- class BodyImpl {
8
- /** @internal */
9
- constructor() {
10
- if (new.target === BodyImpl) {
11
- throw new TypeError("Failed to construct 'Body': Illegal constructor");
12
- }
13
- setState(this, "__Body__", new BodyState());
14
- }
15
- get bodyUsed() { return state(this).bodyUsed; }
16
- ;
17
- get body() {
18
- throw new TypeError(`Failed to access 'body' on '${className(this)}': property not implemented.`);
19
- }
20
- arrayBuffer() {
21
- const kind = "arrayBuffer";
22
- return consumed(this, kind) || read(this, kind);
23
- }
24
- blob() {
25
- const kind = "blob";
26
- return consumed(this, kind) || read(this, kind);
27
- }
28
- bytes() {
29
- const kind = "bytes";
30
- return consumed(this, kind) || read(this, kind);
31
- }
32
- formData() {
33
- const kind = "formData";
34
- return consumed(this, kind) || read(this, kind);
35
- }
36
- json() {
37
- const kind = "json";
38
- return consumed(this, kind) || read(this, kind);
39
- }
40
- text() {
41
- const kind = "text";
42
- return consumed(this, kind) || read(this, kind);
43
- }
44
- /** @internal */ toString() { return "[object Body]"; }
45
- /** @internal */ get [SymbolP.toStringTag]() { return "Body"; }
46
- /** @internal */ get __MPHTTPX__() { return { chain: ["Body"] }; }
47
- }
48
- /** @internal */
49
- class BodyState {
50
- constructor() {
51
- this.bodyUsed = false;
52
- }
53
- }
54
- function state(target) {
55
- return target.__Body__;
56
- }
57
- /** @internal */
58
- function Body_init(instance, body) {
59
- const b = instance;
60
- if (isObjectType("ReadableStream", body)) {
61
- throw new TypeError(`Failed to construct '${className(b)}': ReadableStream not implemented.`);
62
- }
63
- if (body !== null && body !== undefined) {
64
- state(b).payload = new Payload(body);
65
- }
66
- }
67
- function read(body, kind) {
68
- let payload = state(body).payload || new Payload();
69
- if (kind === "json") {
70
- return payload.text().then(r => JSON.parse(r));
71
- }
72
- else if (kind === "text") {
73
- return payload.text();
74
- }
75
- else if (kind === "arrayBuffer") {
76
- return payload.arrayBuffer();
77
- }
78
- else if (kind === "bytes") {
79
- return payload.arrayBuffer().then(r => new Uint8Array(r));
80
- }
81
- else if (kind === "blob") {
82
- return payload.promise.then(r => new BlobP([r]));
83
- }
84
- else if (kind === "formData") {
85
- return payload.text().then(r => createFormDataFromBinaryText(r, extractBoundary(payload.type)));
86
- }
87
- else {
88
- return payload.promise;
89
- }
90
- }
91
- function consumed(body, kind) {
92
- if (!state(body).payload)
93
- return;
94
- if (!body.bodyUsed) {
95
- state(body).bodyUsed = true;
96
- return;
97
- }
98
- return Promise.reject(new TypeError(`Failed to execute '${kind}' on '${className(body)}': body stream already read`));
99
- }
100
- function extractBoundary(contentType) {
101
- if (!contentType)
102
- return;
103
- if (!/multipart\/form-data/i.test(contentType))
104
- return;
105
- let boundaryMatch = contentType.match(/boundary\s*=\s*([^;]+)/i);
106
- if (boundaryMatch && boundaryMatch[1]) {
107
- let boundary = boundaryMatch[1].trim();
108
- return boundary.replace(/^["']|["']$/g, "");
109
- }
110
- }
111
- function createFormDataFromBinaryText(text, boundary) {
112
- const throwParseError = () => {
113
- throw new TypeError("Could not parse content as FormData.");
114
- };
115
- if (typeof text !== "string" || text.trim() === "") {
116
- throwParseError();
117
- }
118
- let firstLineEnd = text.indexOf("\r\n");
119
- if (firstLineEnd === -1) {
120
- throwParseError();
121
- }
122
- let _boundary = text.substring(2, firstLineEnd).trim();
123
- if (!_boundary) {
124
- throwParseError();
125
- }
126
- if (boundary !== undefined && boundary !== _boundary) {
127
- throwParseError();
128
- }
129
- let parts = text.split(`--${_boundary}`).filter(part => {
130
- let trimmed = part.trim();
131
- return trimmed !== "" && trimmed !== "--";
132
- });
133
- if (parts.length === 0) {
134
- throwParseError();
135
- }
136
- let formData = new FormDataP();
137
- parts.forEach(part => {
138
- let separatorIndex = part.indexOf("\r\n\r\n");
139
- if (separatorIndex === -1) {
140
- throwParseError();
141
- }
142
- let headerRaw = part.substring(0, separatorIndex).trim();
143
- let nameMatch = headerRaw.match(/name="([^"]*)"/);
144
- if (!nameMatch || nameMatch.length < 2) {
145
- throwParseError();
146
- }
147
- let fieldName = nameMatch[1];
148
- let filenameMatch = headerRaw.match(/filename="([^"]*)"/);
149
- let contentRaw = part.substring(separatorIndex + 4);
150
- if (!filenameMatch) {
151
- formData.append(fieldName, contentRaw.replace(/^[\r\n]+|[\r\n]+$/g, ""));
152
- }
153
- else {
154
- let filename = filenameMatch[1] || "";
155
- let contentTypeMatch = headerRaw.match(/Content-Type: ([^\r\n]+)/);
156
- let mimeType = contentTypeMatch ? (contentTypeMatch[1] || "").trim() : "text/plain";
157
- let content = contentRaw.replace(/\r\n/g, "");
158
- formData.append(fieldName, new FileP([content], filename, { type: mimeType }));
159
- }
160
- });
161
- return formData;
162
- }
163
-
164
- export { BodyImpl, Body_init };
@@ -1,149 +0,0 @@
1
- import { isSequence } from '../helpers/isSequence.js';
2
- import { setState, SymbolP, isPolyfillType, checkArgsLength } from '../utils.js';
3
-
4
- class HeadersP {
5
- constructor(init) {
6
- setState(this, "__Headers__", new HeadersState());
7
- if (init !== undefined) {
8
- if (isHeaders(init)) {
9
- init.forEach((value, name) => { Headers_append(this, name, value, ""); }, this);
10
- }
11
- else if (isSequence(init)) {
12
- let _init = Array.isArray(init) ? init : Array.from(init);
13
- for (let i = 0; i < _init.length; ++i) {
14
- let item = _init[i];
15
- if (isSequence(item)) {
16
- let pair = Array.isArray(item) ? item : Array.from(item);
17
- if (pair.length === 2) {
18
- Headers_append(this, pair[0], pair[1]);
19
- }
20
- else {
21
- throw new TypeError("Failed to construct 'Headers': Invalid value");
22
- }
23
- }
24
- else {
25
- throw new TypeError("Failed to construct 'Headers': The provided value cannot be converted to a sequence.");
26
- }
27
- }
28
- }
29
- else {
30
- if (init && typeof init === "object") {
31
- Object.getOwnPropertyNames(init).forEach(name => { Headers_append(this, name, init[name]); }, this);
32
- }
33
- else {
34
- throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(record<ByteString, ByteString> or sequence<sequence<ByteString>>)'.");
35
- }
36
- }
37
- }
38
- }
39
- append(name, value) {
40
- checkArgsFn(arguments.length, 2, "append");
41
- Headers_append(this, name, value, "append");
42
- }
43
- delete(name) {
44
- checkArgsFn(arguments.length, 1, "delete");
45
- delete state(this).dict[normalizeName(name, throwsFn("delete"))];
46
- }
47
- get(name) {
48
- var _a;
49
- checkArgsFn(arguments.length, 1, "get");
50
- return (_a = state(this).dict[normalizeName(name, throwsFn("get"))]) !== null && _a !== void 0 ? _a : null;
51
- }
52
- getSetCookie() {
53
- let value = this.get("Set-Cookie");
54
- return value ? value.split(", ") : [];
55
- }
56
- has(name) {
57
- checkArgsFn(arguments.length, 1, "has");
58
- return state(this).dict.hasOwnProperty(normalizeName(name, throwsFn("has")));
59
- }
60
- set(name, value) {
61
- checkArgsFn(arguments.length, 2, "set");
62
- state(this).dict[normalizeName(name, throwsFn("set"))] = normalizeValue(value);
63
- }
64
- forEach(callbackfn, thisArg) {
65
- checkArgsFn(arguments.length, 1, "forEach");
66
- if (typeof callbackfn !== "function") {
67
- throw new TypeError("Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'.");
68
- }
69
- let dict = state(this).dict;
70
- let names = Object.getOwnPropertyNames(dict);
71
- for (let i = 0; i < names.length; ++i) {
72
- let name = names[i];
73
- callbackfn.call(thisArg, dict[name], name, this);
74
- }
75
- }
76
- entries() {
77
- let array = [];
78
- this.forEach((value, name) => { array.push([name, value]); });
79
- return array.values();
80
- }
81
- keys() {
82
- let array = [];
83
- this.forEach((value, name) => { array.push([name, value]); });
84
- return array.map(x => x[0]).values();
85
- }
86
- values() {
87
- let array = [];
88
- this.forEach((value, name) => { array.push([name, value]); });
89
- return array.map(x => x[1]).values();
90
- }
91
- // @ts-ignore
92
- /** @internal */ [SymbolP.iterator]() {
93
- return this.entries();
94
- }
95
- /** @internal */ toString() { return "[object Headers]"; }
96
- /** @internal */ get [SymbolP.toStringTag]() { return "Headers"; }
97
- /** @internal */ get __MPHTTPX__() { return { chain: ["Headers"] }; }
98
- }
99
- /** @internal */
100
- class HeadersState {
101
- constructor() {
102
- this.dict = {};
103
- }
104
- }
105
- function state(target) {
106
- return target.__Headers__;
107
- }
108
- /** @internal */
109
- function isHeaders(value) {
110
- return isPolyfillType("Headers", value) || isExternalHeaders(value);
111
- }
112
- function isExternalHeaders(value) {
113
- let expect = "[object Headers]";
114
- return (Object.prototype.toString.call(value) === expect || String(value) === expect)
115
- && "forEach" in value
116
- && typeof value.forEach === "function";
117
- }
118
- function Headers_append(headers, name, value, kind = "constructor") {
119
- let _name = normalizeName(name, kind ? throwsFn(kind) : undefined);
120
- let _value = normalizeValue(value);
121
- let dict = state(headers).dict;
122
- let oldValue = dict[_name];
123
- dict[_name] = oldValue !== undefined ? `${oldValue}, ${_value}` : _value;
124
- }
125
- function throwsFn(kind) {
126
- return () => {
127
- throw new TypeError(`Failed to ${(kind && kind !== "constructor") ? ("execute '" + kind + "' on") : "construct"} 'Headers': Invalid name`);
128
- };
129
- }
130
- function checkArgsFn(actual, expect, funcName) {
131
- checkArgsLength(actual, expect, "Headers", funcName);
132
- }
133
- /** @internal */
134
- function normalizeName(name, throwError) {
135
- if (typeof name !== "string") {
136
- name = "" + name;
137
- }
138
- if (throwError && (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === "")) {
139
- throwError();
140
- }
141
- return name.toLowerCase();
142
- }
143
- /** @internal */
144
- function normalizeValue(value) {
145
- return typeof value === "string" ? value : ("" + value);
146
- }
147
- const HeadersE = (typeof Headers !== "undefined" && Headers) || HeadersP;
148
-
149
- export { HeadersE as Headers, HeadersP, isHeaders, normalizeName, normalizeValue };