mphttpx 1.2.0-beta.1 → 1.2.0-beta.3

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 (58) hide show
  1. package/dist/cjs/AbortControllerP.js +31 -0
  2. package/dist/cjs/AbortSignalP.js +126 -0
  3. package/dist/cjs/BlobP.js +131 -0
  4. package/dist/cjs/BodyImpl.js +142 -0
  5. package/dist/cjs/CloseEventP.js +38 -0
  6. package/dist/cjs/CustomEventP.js +35 -0
  7. package/dist/cjs/EventP.js +173 -0
  8. package/dist/cjs/EventTargetP.js +176 -0
  9. package/dist/cjs/FileP.js +36 -0
  10. package/dist/cjs/FileReaderP.js +151 -0
  11. package/dist/cjs/FormDataP.js +250 -0
  12. package/dist/cjs/HeadersP.js +184 -0
  13. package/dist/cjs/MessageEventP.js +64 -0
  14. package/dist/cjs/ProgressEventP.js +69 -0
  15. package/dist/cjs/RequestP.js +150 -0
  16. package/dist/cjs/ResponseP.js +102 -0
  17. package/dist/cjs/TextDecoderP.js +186 -0
  18. package/dist/cjs/TextEncoderP.js +122 -0
  19. package/dist/cjs/URLSearchParamsP.js +230 -0
  20. package/dist/cjs/WebSocketP.js +238 -0
  21. package/dist/cjs/XMLHttpRequestP.js +563 -0
  22. package/dist/cjs/convertor.js +83 -0
  23. package/dist/cjs/fetchP.js +115 -0
  24. package/dist/cjs/index.js +80 -0
  25. package/dist/cjs/isPolyfill.js +56 -0
  26. package/dist/cjs/platform.js +33 -0
  27. package/dist/esm/AbortControllerP.js +28 -0
  28. package/dist/esm/AbortSignalP.js +121 -0
  29. package/dist/esm/BlobP.js +124 -0
  30. package/dist/esm/BodyImpl.js +137 -0
  31. package/dist/esm/CloseEventP.js +35 -0
  32. package/dist/esm/CustomEventP.js +32 -0
  33. package/dist/esm/EventP.js +165 -0
  34. package/dist/esm/EventTargetP.js +168 -0
  35. package/dist/esm/FileP.js +33 -0
  36. package/dist/esm/FileReaderP.js +148 -0
  37. package/dist/esm/FormDataP.js +245 -0
  38. package/dist/esm/HeadersP.js +177 -0
  39. package/dist/esm/MessageEventP.js +61 -0
  40. package/dist/esm/ProgressEventP.js +65 -0
  41. package/dist/esm/RequestP.js +146 -0
  42. package/dist/esm/ResponseP.js +98 -0
  43. package/dist/esm/TextDecoderP.js +183 -0
  44. package/dist/esm/TextEncoderP.js +119 -0
  45. package/dist/esm/URLSearchParamsP.js +227 -0
  46. package/dist/esm/WebSocketP.js +234 -0
  47. package/dist/esm/XMLHttpRequestP.js +559 -0
  48. package/dist/esm/convertor.js +80 -0
  49. package/dist/esm/fetchP.js +111 -0
  50. package/dist/esm/index.js +25 -0
  51. package/dist/esm/isPolyfill.js +48 -0
  52. package/dist/esm/platform.js +31 -0
  53. package/dist/index.d.ts +1 -5
  54. package/package.json +7 -10
  55. package/dist/index.cjs.js +0 -3252
  56. package/dist/index.cjs.min.js +0 -1
  57. package/dist/index.esm.js +0 -3212
  58. package/dist/index.esm.min.js +0 -1
@@ -0,0 +1,227 @@
1
+ import { g, isObjectType, isPolyfillType, polyfill, checkArgsLength } from './isPolyfill.js';
2
+
3
+ var _a;
4
+ /** @internal */ const state = Symbol( /* "URLSearchParamsState" */);
5
+ const checkArgsFn = (args, required, funcName) => { checkArgsLength(args, required, "URLSearchParams", funcName); };
6
+ class URLSearchParamsP {
7
+ constructor(init) {
8
+ this[state] = new URLSearchParamsState();
9
+ if (init !== undefined) {
10
+ if (isObjectType("URLSearchParams", init) || isPolyfillType("URLSearchParams", init)) {
11
+ init.forEach((value, name) => { this.append(name, value); }, this);
12
+ }
13
+ else if (init && typeof init === "object") {
14
+ if (Array.isArray(init) || Symbol.iterator in init) {
15
+ let _init = Array.isArray(init) ? init : Array.from(init);
16
+ for (let i = 0; i < _init.length; ++i) {
17
+ let item = _init[i];
18
+ if (Array.isArray(item) || (item && typeof item === "object" && Symbol.iterator in item)) {
19
+ let pair = Array.isArray(item) ? item : Array.from(item);
20
+ if (pair.length === 2) {
21
+ this.append(pair[0], pair[1]);
22
+ }
23
+ else {
24
+ throw new TypeError("Failed to construct 'URLSearchParams': Sequence initializer must only contain pair elements");
25
+ }
26
+ }
27
+ else {
28
+ throw new TypeError("Failed to construct 'URLSearchParams': The provided value cannot be converted to a sequence.");
29
+ }
30
+ }
31
+ }
32
+ else {
33
+ Object.getOwnPropertyNames(init).forEach(name => { this.append(name, init[name]); }, this);
34
+ }
35
+ }
36
+ else {
37
+ let _init = "" + init;
38
+ if (_init.indexOf("?") === 0) {
39
+ _init = _init.slice(1);
40
+ }
41
+ let pairs = _init.split("&");
42
+ for (let i = 0; i < pairs.length; ++i) {
43
+ let pair = pairs[i], separatorIndex = pair.indexOf("=");
44
+ if (separatorIndex > -1) {
45
+ this.append(decode(pair.slice(0, separatorIndex)), decode(pair.slice(separatorIndex + 1)));
46
+ }
47
+ else {
48
+ if (pair) {
49
+ this.append(decode(pair), "");
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ get size() { return this[state][_urlspArray].length; }
57
+ append(...args) {
58
+ const [name, value] = args;
59
+ checkArgsFn(args, 2, "append");
60
+ this[state][_urlspArray].push(["" + name, normalizeValue(value)]);
61
+ }
62
+ delete(...args) {
63
+ const [name, value] = args;
64
+ checkArgsFn(args, 1, "delete");
65
+ let _name = "" + name;
66
+ let index = -1;
67
+ let array = this[state][_urlspArray];
68
+ let result = [];
69
+ for (let i = 0; i < array.length; ++i) {
70
+ let item = array[i];
71
+ if (item[0] === _name) {
72
+ if (args.length !== 1 && item[1] !== normalizeValue(value)) {
73
+ result.push(item);
74
+ }
75
+ index = i;
76
+ continue;
77
+ }
78
+ result.push(item);
79
+ }
80
+ if (index > -1) {
81
+ this[state][_urlspArray] = result;
82
+ }
83
+ }
84
+ get(...args) {
85
+ const [name] = args;
86
+ checkArgsFn(args, 1, "get");
87
+ let _name = "" + name;
88
+ let array = this[state][_urlspArray];
89
+ for (let i = 0; i < array.length; ++i) {
90
+ let item = array[i];
91
+ if (item[0] === _name) {
92
+ return item[1];
93
+ }
94
+ }
95
+ return null;
96
+ }
97
+ getAll(...args) {
98
+ const [name] = args;
99
+ checkArgsFn(args, 1, "getAll");
100
+ let _name = "" + name;
101
+ let array = this[state][_urlspArray];
102
+ let result = [];
103
+ for (let i = 0; i < array.length; ++i) {
104
+ let item = array[i];
105
+ if (item[0] === _name) {
106
+ result.push(item[1]);
107
+ }
108
+ }
109
+ return result;
110
+ }
111
+ has(...args) {
112
+ const [name, value] = args;
113
+ checkArgsFn(args, 1, "has");
114
+ let _name = "" + name;
115
+ let array = this[state][_urlspArray];
116
+ for (let i = 0; i < array.length; ++i) {
117
+ let item = array[i];
118
+ if (item[0] === _name) {
119
+ if (args.length === 1) {
120
+ return true;
121
+ }
122
+ else {
123
+ if (item[1] === normalizeValue(value)) {
124
+ return true;
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return false;
130
+ }
131
+ set(...args) {
132
+ const [name, value] = args;
133
+ checkArgsFn(args, 2, "set");
134
+ let _name = "" + name;
135
+ let _value = normalizeValue(value);
136
+ let index = -1;
137
+ let array = this[state][_urlspArray];
138
+ let result = [];
139
+ for (let i = 0; i < array.length; ++i) {
140
+ let item = array[i];
141
+ if (item[0] === _name) {
142
+ if (index === -1) {
143
+ index = i;
144
+ result.push([_name, _value]);
145
+ }
146
+ continue;
147
+ }
148
+ result.push(item);
149
+ }
150
+ if (index === -1) {
151
+ result.push([_name, _value]);
152
+ }
153
+ this[state][_urlspArray] = result;
154
+ }
155
+ sort() {
156
+ this[state][_urlspArray].sort((a, b) => a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0);
157
+ }
158
+ forEach(...args) {
159
+ const [callbackfn, thisArg] = args;
160
+ checkArgsFn(args, 1, "forEach");
161
+ if (typeof callbackfn !== "function") {
162
+ throw new TypeError("Failed to execute 'forEach' on 'URLSearchParams': parameter 1 is not of type 'Function'.");
163
+ }
164
+ let array = this[state][_urlspArray];
165
+ for (let i = 0; i < array.length; ++i) {
166
+ let item = array[i];
167
+ callbackfn.call(thisArg, item[1], item[0], this);
168
+ }
169
+ }
170
+ entries() {
171
+ return this[state][_urlspArray].map(x => [x[0], x[1]]).values();
172
+ }
173
+ keys() {
174
+ return this[state][_urlspArray].map(x => x[0]).values();
175
+ }
176
+ values() {
177
+ return this[state][_urlspArray].map(x => x[1]).values();
178
+ }
179
+ [Symbol.iterator]() {
180
+ return this.entries();
181
+ }
182
+ toString() {
183
+ let array = this[state][_urlspArray];
184
+ let result = [];
185
+ for (let i = 0; i < array.length; ++i) {
186
+ let item = array[i];
187
+ result.push(encode(item[0]) + "=" + encode(item[1]));
188
+ }
189
+ return result.join("&");
190
+ }
191
+ /** @internal */ get [Symbol.toStringTag]() { return "URLSearchParams"; }
192
+ /** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["URLSearchParams"] }; }
193
+ }
194
+ /** @internal */
195
+ const _urlspArray = Symbol();
196
+ /** @internal */
197
+ class URLSearchParamsState {
198
+ constructor() {
199
+ this[_a] = [];
200
+ }
201
+ }
202
+ _a = _urlspArray;
203
+ function normalizeValue(value) {
204
+ return typeof value === "string" ? value : (value !== null && value !== undefined && typeof value.toString === "function"
205
+ ? value.toString()
206
+ : JSON.stringify(value));
207
+ }
208
+ function encode(str) {
209
+ const replace = {
210
+ "!": "%21",
211
+ "'": "%27",
212
+ "(": "%28",
213
+ ")": "%29",
214
+ "~": "%7E",
215
+ "%20": "+",
216
+ "%00": "\x00",
217
+ };
218
+ return encodeURIComponent(str).replace(/[!'\(\)~]|%20|%00/g, match => replace[match]);
219
+ }
220
+ function decode(str) {
221
+ return str
222
+ .replace(/[ +]/g, "%20")
223
+ .replace(/(%[a-f0-9]{2})+/ig, match => decodeURIComponent(match));
224
+ }
225
+ const URLSearchParamsE = g["URLSearchParams"] || URLSearchParamsP;
226
+
227
+ export { URLSearchParamsE as URLSearchParams, URLSearchParamsP };
@@ -0,0 +1,234 @@
1
+ import { HeadersP } from './HeadersP.js';
2
+ import { Blob_toUint8Array, BlobP } from './BlobP.js';
3
+ import { CloseEventP } from './CloseEventP.js';
4
+ import { MessageEventP } from './MessageEventP.js';
5
+ import { createInnerEvent, Event_setTrusted } from './EventP.js';
6
+ import { EventTargetP, EventTarget_fire, attachFn, executeFn } from './EventTargetP.js';
7
+ import { mp as mp$1 } from './platform.js';
8
+ import { checkArgsLength, MPException, isArrayBuffer, isPolyfillType, polyfill } from './isPolyfill.js';
9
+ import './TextEncoderP.js';
10
+ import './TextDecoderP.js';
11
+
12
+ const connectSocket = mp$1 ? mp$1.connectSocket : function errorConnectSocket(options) {
13
+ return {
14
+ send(obj) { },
15
+ close(obj) { },
16
+ onOpen(listener) { },
17
+ onMessage(listener) { },
18
+ onError(listener) {
19
+ if (typeof listener === "function") {
20
+ listener({ errMsg: "NOT_SUPPORTED_ERR" });
21
+ }
22
+ },
23
+ onClose(listener) {
24
+ if (typeof listener === "function") {
25
+ setTimeout(() => { listener({ code: 3009, reason: "NOT_SUPPORTED_ERR" }); });
26
+ }
27
+ },
28
+ };
29
+ };
30
+
31
+ var _a, _b;
32
+ const mp = { connectSocket: connectSocket };
33
+ const setConnectSocket = (connectSocket) => { mp.connectSocket = connectSocket; };
34
+ /** @internal */
35
+ const state = Symbol( /* "WebSocketState" */);
36
+ class WebSocketImpl extends EventTargetP {
37
+ static get CONNECTING() { return 0; }
38
+ static get OPEN() { return 1; }
39
+ static get CLOSING() { return 2; }
40
+ static get CLOSED() { return 3; }
41
+ constructor(...args) {
42
+ const [url, protocols] = args;
43
+ checkArgsLength(args, 1, "WebSocket");
44
+ super();
45
+ this[state] = new WebSocketState(this, {
46
+ url: "" + url,
47
+ protocols: protocols !== undefined
48
+ ? (Array.isArray(protocols) || (protocols && typeof protocols === "object" && Symbol.iterator in protocols))
49
+ ? Array.isArray(protocols) ? protocols : Array.from(protocols)
50
+ : ["" + protocols]
51
+ : [],
52
+ multiple: true, // Alipay Mini Program
53
+ fail(err) { console.error(err); },
54
+ });
55
+ let socketTask = this[state][_socketTask];
56
+ if (socketTask && typeof socketTask === "object") {
57
+ onOpen(this);
58
+ onClose(this);
59
+ onError(this);
60
+ onMessage(this);
61
+ }
62
+ else {
63
+ throw new Error(`connectSocket can't establish a connection to the server at ${"" + url}.`);
64
+ }
65
+ }
66
+ get CONNECTING() { return 0; }
67
+ get OPEN() { return 1; }
68
+ get CLOSING() { return 2; }
69
+ get CLOSED() { return 3; }
70
+ get binaryType() { return this[state].binaryType; }
71
+ set binaryType(value) { if (value === "blob" || value === "arraybuffer") {
72
+ this[state].binaryType = value;
73
+ } }
74
+ get bufferedAmount() { return this[state].bufferedAmount; }
75
+ get extensions() { return this[state].extensions; }
76
+ get protocol() { return this[state].protocol; }
77
+ get readyState() { return this[state].readyState; }
78
+ get url() { return this[state].url; }
79
+ close(code, reason) {
80
+ if (this.readyState === 2 /* CLOSING */ || this.readyState === 3 /* CLOSED */)
81
+ return;
82
+ this[state].readyState = 2 /* CLOSING */;
83
+ this[state][_socketTask].close({
84
+ code: code,
85
+ reason: reason,
86
+ fail(err) { console.error(err); },
87
+ complete: (function () {
88
+ this[state].readyState = 3 /* CLOSED */;
89
+ }).bind(this),
90
+ });
91
+ }
92
+ send(...args) {
93
+ const [data] = args;
94
+ checkArgsLength(args, 1, "WebSocket", "send");
95
+ if (this.readyState === 0 /* CONNECTING */) {
96
+ throw new MPException("Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.", "InvalidStateError");
97
+ }
98
+ if (this.readyState === 2 /* CLOSING */ || this.readyState === 3 /* CLOSED */) {
99
+ return console.error("WebSocket is already in CLOSING or CLOSED state.");
100
+ }
101
+ let _data;
102
+ if (isArrayBuffer(data)) {
103
+ _data = data;
104
+ }
105
+ else if (ArrayBuffer.isView(data)) {
106
+ _data = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
107
+ }
108
+ else if (isPolyfillType("Blob", data)) {
109
+ _data = Blob_toUint8Array(data).buffer.slice(0);
110
+ }
111
+ else {
112
+ _data = "" + data;
113
+ }
114
+ this[state][_socketTask].send({
115
+ data: _data,
116
+ fail(err) { console.error(err); },
117
+ });
118
+ }
119
+ get onclose() { return this[state].onclose; }
120
+ set onclose(value) { this[state].onclose = value; attach(this, "close"); }
121
+ get onerror() { return this[state].onerror; }
122
+ set onerror(value) { this[state].onerror = value; attach(this, "error"); }
123
+ get onmessage() { return this[state].onmessage; }
124
+ set onmessage(value) { this[state].onmessage = value; attach(this, "message"); }
125
+ get onopen() { return this[state].onopen; }
126
+ set onopen(value) { this[state].onopen = value; attach(this, "open"); }
127
+ /** @internal */ toString() { return "[object WebSocket]"; }
128
+ /** @internal */ get [Symbol.toStringTag]() { return "WebSocket"; }
129
+ /** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["WebSocket", "EventTarget"] }; }
130
+ }
131
+ /** @internal */ const _socketTask = Symbol();
132
+ /** @internal */ const _error = Symbol();
133
+ /** @internal */ const _handlers = Symbol();
134
+ /** @internal */
135
+ class WebSocketState {
136
+ constructor(target, opts) {
137
+ this.binaryType = "blob";
138
+ this.bufferedAmount = 0;
139
+ this.extensions = "";
140
+ this.protocol = "";
141
+ this.readyState = 0;
142
+ this[_a] = null;
143
+ this[_b] = getHandlers(this);
144
+ this.onclose = null;
145
+ this.onerror = null;
146
+ this.onmessage = null;
147
+ this.onopen = null;
148
+ this.target = target;
149
+ this.url = opts.url;
150
+ this[_socketTask] = mp.connectSocket(opts);
151
+ }
152
+ }
153
+ _a = _error, _b = _handlers;
154
+ function attach(target, type) {
155
+ const s = target[state];
156
+ const fnName = ("on" + type);
157
+ const cb = s[fnName];
158
+ const listener = s[_handlers][fnName];
159
+ attachFn(target, type, cb, listener);
160
+ }
161
+ function getHandlers(s) {
162
+ return {
163
+ onclose: (ev) => { executeFn(s.target, s.onclose, ev); },
164
+ onerror: (ev) => { executeFn(s.target, s.onerror, ev); },
165
+ onmessage: (ev) => { executeFn(s.target, s.onmessage, ev); },
166
+ onopen: (ev) => { executeFn(s.target, s.onopen, ev); },
167
+ };
168
+ }
169
+ function onOpen(ws) {
170
+ let socket = ws;
171
+ socket[state][_socketTask].onOpen(res => {
172
+ if ("header" in res && res.header && typeof res.header === "object") {
173
+ let headers = new HeadersP(res.header);
174
+ socket[state].protocol = headers.get("Sec-WebSocket-Protocol") || "";
175
+ }
176
+ socket[state].readyState = 1 /* OPEN */;
177
+ EventTarget_fire(socket, createInnerEvent(socket, "open"));
178
+ });
179
+ }
180
+ function onClose(ws) {
181
+ let socket = ws;
182
+ socket[state][_socketTask].onClose(res => {
183
+ socket[state].readyState = 3 /* CLOSED */;
184
+ let event = new CloseEventP("close", {
185
+ wasClean: !socket[state][_error],
186
+ code: res.code,
187
+ reason: res.reason,
188
+ });
189
+ Event_setTrusted(event, true);
190
+ EventTarget_fire(socket, event);
191
+ });
192
+ }
193
+ function onError(ws) {
194
+ let socket = ws;
195
+ socket[state][_socketTask].onError(res => {
196
+ console.error(res);
197
+ socket[state][_error] = res;
198
+ socket[state].readyState = 3 /* CLOSED */;
199
+ EventTarget_fire(socket, createInnerEvent(socket, "error"));
200
+ });
201
+ }
202
+ function onMessage(ws) {
203
+ let socket = ws;
204
+ socket[state][_socketTask].onMessage(res => {
205
+ let data = res.data;
206
+ let _data;
207
+ // Alipay Mini Program
208
+ if (data && typeof data === "object" && "data" in data) {
209
+ _data = data.data;
210
+ if ("isBuffer" in data && data.isBuffer && typeof _data === "string") {
211
+ // @ts-ignore
212
+ try {
213
+ _data = my.base64ToArrayBuffer(_data);
214
+ }
215
+ catch (e) { }
216
+ }
217
+ }
218
+ else {
219
+ _data = data;
220
+ }
221
+ if (isArrayBuffer(_data) && socket.binaryType === "blob") {
222
+ _data = new BlobP([_data]);
223
+ }
224
+ let event = new MessageEventP("message", {
225
+ data: _data,
226
+ origin: socket.url,
227
+ });
228
+ Event_setTrusted(event, true);
229
+ EventTarget_fire(socket, event);
230
+ });
231
+ }
232
+ const WebSocketE = (typeof WebSocket !== "undefined" && WebSocket) || WebSocketImpl;
233
+
234
+ export { WebSocketE as WebSocket, WebSocketImpl, setConnectSocket };