mphttpx 2.1.2 → 2.1.5-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.
- package/README.md +6 -0
- package/dist/cjs/encoding/TextDecoderP.js +25 -33
- package/dist/cjs/encoding/TextEncoderP.js +7 -5
- package/dist/cjs/event-system/AbortControllerP.js +1 -3
- package/dist/cjs/event-system/AbortSignalP.js +14 -15
- package/dist/cjs/event-system/CloseEventP.js +1 -2
- package/dist/cjs/event-system/CustomEventP.js +1 -0
- package/dist/cjs/event-system/EventP.js +17 -15
- package/dist/cjs/event-system/EventTargetP.js +14 -10
- package/dist/cjs/event-system/ProgressEventP.js +7 -6
- package/dist/cjs/fetch-api/HeadersP.js +7 -6
- package/dist/cjs/fetch-api/RequestP.js +8 -6
- package/dist/cjs/fetch-api/ResponseP.js +2 -3
- package/dist/cjs/fetch-api/fetchP.js +4 -16
- package/dist/cjs/file-system/BlobP.js +10 -16
- package/dist/cjs/file-system/FileReaderP.js +43 -46
- package/dist/cjs/helpers/handlers.js +4 -2
- package/dist/cjs/mini-program/WebSocketImpl.js +27 -25
- package/dist/cjs/mini-program/XMLHttpRequestImpl.js +193 -237
- package/dist/cjs/network/XMLHttpRequestEventTargetP.js +1 -3
- package/dist/esm/encoding/TextDecoderP.js +25 -33
- package/dist/esm/encoding/TextEncoderP.js +7 -5
- package/dist/esm/event-system/AbortControllerP.js +1 -3
- package/dist/esm/event-system/AbortSignalP.js +14 -15
- package/dist/esm/event-system/CloseEventP.js +1 -2
- package/dist/esm/event-system/CustomEventP.js +2 -1
- package/dist/esm/event-system/EventP.js +17 -15
- package/dist/esm/event-system/EventTargetP.js +14 -10
- package/dist/esm/event-system/ProgressEventP.js +7 -6
- package/dist/esm/fetch-api/HeadersP.js +7 -6
- package/dist/esm/fetch-api/RequestP.js +8 -6
- package/dist/esm/fetch-api/ResponseP.js +2 -3
- package/dist/esm/fetch-api/fetchP.js +4 -16
- package/dist/esm/file-system/BlobP.js +10 -16
- package/dist/esm/file-system/FileReaderP.js +43 -46
- package/dist/esm/helpers/handlers.js +4 -2
- package/dist/esm/mini-program/WebSocketImpl.js +27 -25
- package/dist/esm/mini-program/XMLHttpRequestImpl.js +193 -237
- package/dist/esm/network/XMLHttpRequestEventTargetP.js +1 -3
- package/dist/index.d.ts +5 -5
- package/package.json +1 -1
|
@@ -20,12 +20,8 @@ class FileReaderP extends EventTargetP {
|
|
|
20
20
|
get readyState() { return state(this).readyState; }
|
|
21
21
|
get result() { return state(this).result; }
|
|
22
22
|
abort() {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
case 4 /* FRCycle.READING */:
|
|
26
|
-
execAbort(this);
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
23
|
+
if (state(this).pos === 2 /* FRCycle.LOADING */)
|
|
24
|
+
execAbort(this);
|
|
29
25
|
}
|
|
30
26
|
readAsArrayBuffer(blob) {
|
|
31
27
|
check(this, "readAsArrayBuffer", arguments.length, blob);
|
|
@@ -77,7 +73,7 @@ class FileReaderP extends EventTargetP {
|
|
|
77
73
|
/** @internal */
|
|
78
74
|
class FileReaderState {
|
|
79
75
|
constructor(target) {
|
|
80
|
-
this.pos =
|
|
76
|
+
this.pos = 0 /* FRCycle.EMPTY */;
|
|
81
77
|
this.readyState = 0 /* EMPTY */;
|
|
82
78
|
this.result = null;
|
|
83
79
|
this.error = null;
|
|
@@ -110,63 +106,64 @@ function check(reader, kind, actual, blob) {
|
|
|
110
106
|
if (reader.readyState === 1 /* LOADING */)
|
|
111
107
|
throw new DOMExceptionP(`Failed to execute '${kind}' on 'FileReader': The object is already busy reading Blobs.`, "InvalidStateError");
|
|
112
108
|
}
|
|
113
|
-
function read(reader, size,
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
function execStart(reader, size, start) {
|
|
117
|
-
state(reader).pos = 2 /* FRCycle.START */;
|
|
118
|
-
state(reader).error = null;
|
|
119
|
-
state(reader).result = null;
|
|
120
|
-
state(reader).readyState = 1 /* LOADING */;
|
|
121
|
-
Promise.resolve().then(() => execLoadstart(reader, size, start));
|
|
109
|
+
function read(reader, size, launch) {
|
|
110
|
+
execLoadstart(reader, size, launch);
|
|
122
111
|
}
|
|
123
|
-
function execLoadstart(reader, size,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
emitProgressEvent(reader, "loadstart", 0, size);
|
|
112
|
+
function execLoadstart(reader, size, launch) {
|
|
113
|
+
let s = state(reader);
|
|
114
|
+
s.pos = 1 /* FRCycle.LOADSTART */;
|
|
115
|
+
s.error = null;
|
|
116
|
+
s.result = null;
|
|
117
|
+
const callback = () => { emitProgressEvent(reader, "loadstart", 0, size); return launch(); };
|
|
118
|
+
return execLoading(reader, size, callback);
|
|
129
119
|
}
|
|
130
|
-
function
|
|
131
|
-
state(reader)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
120
|
+
function execLoading(reader, size, launch) {
|
|
121
|
+
let s = state(reader);
|
|
122
|
+
s.pos = 2 /* FRCycle.LOADING */;
|
|
123
|
+
s.readyState = 1 /* LOADING */;
|
|
124
|
+
return Promise.resolve().then(() => {
|
|
125
|
+
if (s.pos !== 2 /* FRCycle.LOADING */)
|
|
126
|
+
return;
|
|
127
|
+
return launch().then(r => execDone(reader, size, r)).catch(err => execError(reader, err));
|
|
128
|
+
});
|
|
135
129
|
}
|
|
136
|
-
function
|
|
137
|
-
|
|
130
|
+
function execDone(reader, size, result) {
|
|
131
|
+
let s = state(reader);
|
|
132
|
+
if (s.pos !== 2 /* FRCycle.LOADING */)
|
|
138
133
|
return;
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
134
|
+
s.pos = 3 /* FRCycle.DONE */;
|
|
135
|
+
s.result = result;
|
|
136
|
+
s.readyState = 2; /* DONE */
|
|
137
|
+
execLoad(reader, size);
|
|
138
|
+
}
|
|
139
|
+
function execLoad(reader, size) {
|
|
140
|
+
state(reader).pos = 4 /* FRCycle.LOAD */;
|
|
142
141
|
emitProgressEvent(reader, "load", size, size);
|
|
143
142
|
execLoadend(reader, size);
|
|
144
143
|
}
|
|
145
144
|
function execAbort(reader) {
|
|
146
|
-
state(reader)
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
145
|
+
let s = state(reader);
|
|
146
|
+
s.pos = 5 /* FRCycle.ABORT */;
|
|
147
|
+
s.error = new DOMExceptionP("An ongoing operation was aborted, typically with a call to abort().", "AbortError");
|
|
148
|
+
s.result = null;
|
|
149
|
+
s.readyState = 2 /* DONE */;
|
|
150
150
|
emitProgressEvent(reader, "abort");
|
|
151
151
|
execLoadend(reader);
|
|
152
152
|
}
|
|
153
153
|
function execError(reader, err) {
|
|
154
|
-
|
|
154
|
+
let s = state(reader);
|
|
155
|
+
if (s.pos !== 2 /* FRCycle.LOADING */)
|
|
155
156
|
return;
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
157
|
+
s.pos = 6 /* FRCycle.ERROR */;
|
|
158
|
+
s.error = err;
|
|
159
|
+
s.result = null;
|
|
160
|
+
s.readyState = 2 /* DONE */;
|
|
160
161
|
emitProgressEvent(reader, "error");
|
|
161
162
|
execLoadend(reader);
|
|
162
163
|
}
|
|
163
164
|
function execLoadend(reader, size = 0) {
|
|
164
|
-
state(reader).pos =
|
|
165
|
+
state(reader).pos = 7 /* FRCycle.LOADEND */;
|
|
165
166
|
emitProgressEvent(reader, "loadend", size, size);
|
|
166
|
-
execEnd(reader);
|
|
167
|
-
}
|
|
168
|
-
function execEnd(reader) {
|
|
169
|
-
state(reader).pos = 9 /* FRCycle.END */;
|
|
170
167
|
}
|
|
171
168
|
const FileReaderE = (typeof FileReader !== "undefined" && FileReader) || FileReaderP;
|
|
172
169
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { EventTargetP } from '../event-system/EventTargetP.js';
|
|
2
|
+
|
|
1
3
|
/** @internal */
|
|
2
4
|
function attachFn(target, handlers) {
|
|
3
5
|
return function attach(type) {
|
|
@@ -5,8 +7,8 @@ function attachFn(target, handlers) {
|
|
|
5
7
|
const callback = target[fnName];
|
|
6
8
|
const listener = handlers[fnName];
|
|
7
9
|
typeof callback === "function"
|
|
8
|
-
?
|
|
9
|
-
:
|
|
10
|
+
? EventTargetP.prototype.addEventListener.call(target, type, listener)
|
|
11
|
+
: EventTargetP.prototype.removeEventListener.call(target, type, listener);
|
|
10
12
|
};
|
|
11
13
|
}
|
|
12
14
|
/** @internal */
|
|
@@ -9,8 +9,8 @@ import { Event_setTrusted } from '../event-system/EventP.js';
|
|
|
9
9
|
import { EventTargetP, EventTarget_fire } from '../event-system/EventTargetP.js';
|
|
10
10
|
import { isSequence } from '../helpers/isSequence.js';
|
|
11
11
|
import { isArrayBuffer } from '../helpers/isArrayBuffer.js';
|
|
12
|
-
import { checkArgsLength, setState, DOMExceptionP, SymbolP } from '../utils.js';
|
|
13
12
|
import { getConnectSocket } from './connectSocket.js';
|
|
13
|
+
import { checkArgsLength, setState, DOMExceptionP, SymbolP } from '../utils.js';
|
|
14
14
|
|
|
15
15
|
const mp = { connectSocket: getConnectSocket() };
|
|
16
16
|
function setConnectSocket(connectSocket) { mp.connectSocket = connectSocket; }
|
|
@@ -22,8 +22,9 @@ class WebSocketImpl extends EventTargetP {
|
|
|
22
22
|
constructor(url, protocols) {
|
|
23
23
|
checkArgsLength(arguments.length, 1, "WebSocket");
|
|
24
24
|
super();
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const targetURL = "" + url;
|
|
26
|
+
const socketTask = mp.connectSocket({
|
|
27
|
+
url: targetURL,
|
|
27
28
|
protocols: protocols !== undefined
|
|
28
29
|
? isSequence(protocols)
|
|
29
30
|
? Array.isArray(protocols) ? protocols : Array.from(protocols)
|
|
@@ -31,8 +32,9 @@ class WebSocketImpl extends EventTargetP {
|
|
|
31
32
|
: [],
|
|
32
33
|
multiple: true, // Alipay Mini Program
|
|
33
34
|
fail(err) { console.error(err); },
|
|
34
|
-
})
|
|
35
|
-
|
|
35
|
+
});
|
|
36
|
+
setState(this, "__WebSocket__", new WebSocketState(this, socketTask));
|
|
37
|
+
state(this).url = targetURL;
|
|
36
38
|
if (socketTask && typeof socketTask === "object") {
|
|
37
39
|
onOpen(this);
|
|
38
40
|
onClose(this);
|
|
@@ -52,21 +54,20 @@ class WebSocketImpl extends EventTargetP {
|
|
|
52
54
|
state(this).binaryType = value;
|
|
53
55
|
} }
|
|
54
56
|
get bufferedAmount() { return state(this).bufferedAmount; }
|
|
55
|
-
get extensions() { return
|
|
57
|
+
get extensions() { return ""; }
|
|
56
58
|
get protocol() { return state(this).protocol; }
|
|
57
59
|
get readyState() { return state(this).readyState; }
|
|
58
60
|
get url() { return state(this).url; }
|
|
59
61
|
close(code, reason) {
|
|
62
|
+
let s = state(this);
|
|
60
63
|
if (this.readyState === 2 /* CLOSING */ || this.readyState === 3 /* CLOSED */)
|
|
61
64
|
return;
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
s.readyState = 2 /* CLOSING */;
|
|
66
|
+
s.socketTask.close({
|
|
64
67
|
code: code,
|
|
65
68
|
reason: reason,
|
|
66
69
|
fail(err) { console.error(err); },
|
|
67
|
-
complete: (
|
|
68
|
-
state(this).readyState = 3 /* CLOSED */;
|
|
69
|
-
}).bind(this),
|
|
70
|
+
complete: () => { s.readyState = 3 /* CLOSED */; },
|
|
70
71
|
});
|
|
71
72
|
}
|
|
72
73
|
send(data) {
|
|
@@ -99,20 +100,18 @@ class WebSocketImpl extends EventTargetP {
|
|
|
99
100
|
}
|
|
100
101
|
/** @internal */
|
|
101
102
|
class WebSocketState {
|
|
102
|
-
constructor(target,
|
|
103
|
+
constructor(target, socketTask) {
|
|
103
104
|
this.binaryType = "blob";
|
|
104
105
|
this.bufferedAmount = 0;
|
|
105
|
-
this.extensions = "";
|
|
106
106
|
this.protocol = "";
|
|
107
107
|
this.readyState = 0;
|
|
108
|
+
this.url = "";
|
|
108
109
|
this.error = null;
|
|
109
110
|
this.onclose = null;
|
|
110
111
|
this.onerror = null;
|
|
111
112
|
this.onmessage = null;
|
|
112
113
|
this.onopen = null;
|
|
113
|
-
this.
|
|
114
|
-
this.url = opts.url;
|
|
115
|
-
this.socketTask = mp.connectSocket(opts);
|
|
114
|
+
this.socketTask = socketTask;
|
|
116
115
|
this.attach = attachFn(target, getHandlers(target));
|
|
117
116
|
}
|
|
118
117
|
}
|
|
@@ -128,20 +127,22 @@ function state(target) {
|
|
|
128
127
|
return target.__WebSocket__;
|
|
129
128
|
}
|
|
130
129
|
function onOpen(socket) {
|
|
131
|
-
state(socket)
|
|
130
|
+
let s = state(socket);
|
|
131
|
+
s.socketTask.onOpen(res => {
|
|
132
132
|
if ("header" in res && res.header && typeof res.header === "object") {
|
|
133
133
|
let headers = new HeadersP(res.header);
|
|
134
|
-
|
|
134
|
+
s.protocol = headers.get("Sec-WebSocket-Protocol") || "";
|
|
135
135
|
}
|
|
136
|
-
|
|
136
|
+
s.readyState = 1 /* OPEN */;
|
|
137
137
|
emitEvent(socket, "open");
|
|
138
138
|
});
|
|
139
139
|
}
|
|
140
140
|
function onClose(socket) {
|
|
141
|
-
state(socket)
|
|
142
|
-
|
|
141
|
+
let s = state(socket);
|
|
142
|
+
s.socketTask.onClose(res => {
|
|
143
|
+
s.readyState = 3 /* CLOSED */;
|
|
143
144
|
let event = new CloseEventP("close", {
|
|
144
|
-
wasClean: !
|
|
145
|
+
wasClean: !s.error,
|
|
145
146
|
code: res.code,
|
|
146
147
|
reason: res.reason,
|
|
147
148
|
});
|
|
@@ -150,10 +151,11 @@ function onClose(socket) {
|
|
|
150
151
|
});
|
|
151
152
|
}
|
|
152
153
|
function onError(socket) {
|
|
153
|
-
state(socket)
|
|
154
|
+
let s = state(socket);
|
|
155
|
+
s.socketTask.onError(res => {
|
|
154
156
|
console.error(res);
|
|
155
|
-
|
|
156
|
-
|
|
157
|
+
s.error = res;
|
|
158
|
+
s.readyState = 3 /* CLOSED */;
|
|
157
159
|
emitEvent(socket, "error");
|
|
158
160
|
});
|
|
159
161
|
}
|