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.
Files changed (41) hide show
  1. package/README.md +6 -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
@@ -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
- switch (state(this).pos) {
26
- case 2 /* FRCycle.START */:
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 = 1 /* FRCycle.IDLE */;
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, start) {
116
- execStart(reader, size, start);
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, start) {
126
- if (state(reader).pos !== 2 /* FRCycle.START */)
127
- return;
128
- state(reader).pos = 3 /* FRCycle.LOADSTART */;
129
- execReading(reader, size, start);
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 execReading(reader, size, start) {
133
- state(reader).pos = 4 /* FRCycle.READING */;
134
- start()
135
- .then(r => execLoad(reader, size, r))
136
- .catch(err => execError(reader, err));
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 execLoad(reader, size, result) {
139
- if (state(reader).pos !== 4 /* FRCycle.READING */)
132
+ function execDone(reader, size, result) {
133
+ let s = state(reader);
134
+ if (s.pos !== 2 /* FRCycle.LOADING */)
140
135
  return;
141
- state(reader).pos = 5 /* FRCycle.LOAD */;
142
- state(reader).result = result;
143
- state(reader).readyState = 2 /* DONE */;
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).pos = 6 /* FRCycle.ABORT */;
149
- state(reader).error = new utils.DOMExceptionP("An ongoing operation was aborted, typically with a call to abort().", "AbortError");
150
- state(reader).result = null;
151
- state(reader).readyState = 2 /* DONE */;
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
- if (state(reader).pos !== 4 /* FRCycle.READING */)
156
+ let s = state(reader);
157
+ if (s.pos !== 2 /* FRCycle.LOADING */)
157
158
  return;
158
- state(reader).pos = 7 /* FRCycle.ERROR */;
159
- state(reader).error = err;
160
- state(reader).result = null;
161
- state(reader).readyState = 2 /* DONE */;
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 = 8 /* FRCycle.LOADEND */;
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
- ? target.addEventListener(type, listener)
11
- : target.removeEventListener(type, listener);
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
- utils.setState(this, "__WebSocket__", new WebSocketState(this, {
28
- url: "" + url,
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
- let socketTask = state(this).socketTask;
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 state(this).extensions; }
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
- state(this).readyState = 2 /* CLOSING */;
65
- state(this).socketTask.close({
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: (function () {
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, opts) {
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.target = target;
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).socketTask.onOpen(res => {
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
- state(socket).protocol = headers.get("Sec-WebSocket-Protocol") || "";
136
+ s.protocol = headers.get("Sec-WebSocket-Protocol") || "";
137
137
  }
138
- state(socket).readyState = 1 /* OPEN */;
138
+ s.readyState = 1 /* OPEN */;
139
139
  emitEvent.emitEvent(socket, "open");
140
140
  });
141
141
  }
142
142
  function onClose(socket) {
143
- state(socket).socketTask.onClose(res => {
144
- state(socket).readyState = 3 /* CLOSED */;
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: !state(socket).error,
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).socketTask.onError(res => {
156
+ let s = state(socket);
157
+ s.socketTask.onError(res => {
156
158
  console.error(res);
157
- state(socket).error = res;
158
- state(socket).readyState = 3 /* CLOSED */;
159
+ s.error = res;
160
+ s.readyState = 3 /* CLOSED */;
159
161
  emitEvent.emitEvent(socket, "error");
160
162
  });
161
163
  }