mphttpx 1.1.0 → 1.2.0-beta.2

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