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