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.
Files changed (41) hide show
  1. package/README.md +5 -0
  2. package/dist/cjs/encoding/TextDecoderP.js +25 -33
  3. package/dist/cjs/encoding/TextEncoderP.js +7 -5
  4. package/dist/cjs/event-system/AbortControllerP.js +1 -3
  5. package/dist/cjs/event-system/AbortSignalP.js +14 -15
  6. package/dist/cjs/event-system/CloseEventP.js +1 -2
  7. package/dist/cjs/event-system/CustomEventP.js +1 -0
  8. package/dist/cjs/event-system/EventP.js +17 -15
  9. package/dist/cjs/event-system/EventTargetP.js +14 -10
  10. package/dist/cjs/event-system/ProgressEventP.js +7 -6
  11. package/dist/cjs/fetch-api/HeadersP.js +7 -6
  12. package/dist/cjs/fetch-api/RequestP.js +8 -6
  13. package/dist/cjs/fetch-api/ResponseP.js +2 -3
  14. package/dist/cjs/fetch-api/fetchP.js +4 -16
  15. package/dist/cjs/file-system/BlobP.js +10 -16
  16. package/dist/cjs/file-system/FileReaderP.js +43 -46
  17. package/dist/cjs/helpers/handlers.js +4 -2
  18. package/dist/cjs/mini-program/WebSocketImpl.js +27 -25
  19. package/dist/cjs/mini-program/XMLHttpRequestImpl.js +193 -237
  20. package/dist/cjs/network/XMLHttpRequestEventTargetP.js +1 -3
  21. package/dist/esm/encoding/TextDecoderP.js +25 -33
  22. package/dist/esm/encoding/TextEncoderP.js +7 -5
  23. package/dist/esm/event-system/AbortControllerP.js +1 -3
  24. package/dist/esm/event-system/AbortSignalP.js +14 -15
  25. package/dist/esm/event-system/CloseEventP.js +1 -2
  26. package/dist/esm/event-system/CustomEventP.js +2 -1
  27. package/dist/esm/event-system/EventP.js +17 -15
  28. package/dist/esm/event-system/EventTargetP.js +14 -10
  29. package/dist/esm/event-system/ProgressEventP.js +7 -6
  30. package/dist/esm/fetch-api/HeadersP.js +7 -6
  31. package/dist/esm/fetch-api/RequestP.js +8 -6
  32. package/dist/esm/fetch-api/ResponseP.js +2 -3
  33. package/dist/esm/fetch-api/fetchP.js +4 -16
  34. package/dist/esm/file-system/BlobP.js +10 -16
  35. package/dist/esm/file-system/FileReaderP.js +43 -46
  36. package/dist/esm/helpers/handlers.js +4 -2
  37. package/dist/esm/mini-program/WebSocketImpl.js +27 -25
  38. package/dist/esm/mini-program/XMLHttpRequestImpl.js +193 -237
  39. package/dist/esm/network/XMLHttpRequestEventTargetP.js +1 -3
  40. package/dist/index.d.ts +5 -5
  41. 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
- switch (state(this).pos) {
24
- case 2 /* FRCycle.START */:
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 = 1 /* FRCycle.IDLE */;
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, start) {
114
- execStart(reader, size, start);
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, start) {
124
- if (state(reader).pos !== 2 /* FRCycle.START */)
125
- return;
126
- state(reader).pos = 3 /* FRCycle.LOADSTART */;
127
- execReading(reader, size, start);
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 execReading(reader, size, start) {
131
- state(reader).pos = 4 /* FRCycle.READING */;
132
- start()
133
- .then(r => execLoad(reader, size, r))
134
- .catch(err => execError(reader, err));
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 execLoad(reader, size, result) {
137
- if (state(reader).pos !== 4 /* FRCycle.READING */)
130
+ function execDone(reader, size, result) {
131
+ let s = state(reader);
132
+ if (s.pos !== 2 /* FRCycle.LOADING */)
138
133
  return;
139
- state(reader).pos = 5 /* FRCycle.LOAD */;
140
- state(reader).result = result;
141
- state(reader).readyState = 2 /* DONE */;
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).pos = 6 /* FRCycle.ABORT */;
147
- state(reader).error = new DOMExceptionP("An ongoing operation was aborted, typically with a call to abort().", "AbortError");
148
- state(reader).result = null;
149
- state(reader).readyState = 2 /* DONE */;
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
- if (state(reader).pos !== 4 /* FRCycle.READING */)
154
+ let s = state(reader);
155
+ if (s.pos !== 2 /* FRCycle.LOADING */)
155
156
  return;
156
- state(reader).pos = 7 /* FRCycle.ERROR */;
157
- state(reader).error = err;
158
- state(reader).result = null;
159
- state(reader).readyState = 2 /* DONE */;
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 = 8 /* FRCycle.LOADEND */;
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
- ? target.addEventListener(type, listener)
9
- : target.removeEventListener(type, listener);
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
- setState(this, "__WebSocket__", new WebSocketState(this, {
26
- url: "" + url,
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
- let socketTask = state(this).socketTask;
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 state(this).extensions; }
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
- state(this).readyState = 2 /* CLOSING */;
63
- state(this).socketTask.close({
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: (function () {
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, opts) {
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.target = target;
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).socketTask.onOpen(res => {
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
- state(socket).protocol = headers.get("Sec-WebSocket-Protocol") || "";
134
+ s.protocol = headers.get("Sec-WebSocket-Protocol") || "";
135
135
  }
136
- state(socket).readyState = 1 /* OPEN */;
136
+ s.readyState = 1 /* OPEN */;
137
137
  emitEvent(socket, "open");
138
138
  });
139
139
  }
140
140
  function onClose(socket) {
141
- state(socket).socketTask.onClose(res => {
142
- state(socket).readyState = 3 /* CLOSED */;
141
+ let s = state(socket);
142
+ s.socketTask.onClose(res => {
143
+ s.readyState = 3 /* CLOSED */;
143
144
  let event = new CloseEventP("close", {
144
- wasClean: !state(socket).error,
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).socketTask.onError(res => {
154
+ let s = state(socket);
155
+ s.socketTask.onError(res => {
154
156
  console.error(res);
155
- state(socket).error = res;
156
- state(socket).readyState = 3 /* CLOSED */;
157
+ s.error = res;
158
+ s.readyState = 3 /* CLOSED */;
157
159
  emitEvent(socket, "error");
158
160
  });
159
161
  }