mphttpx 1.2.0-beta.1 → 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.
- package/dist/cjs/AbortControllerP.js +31 -0
- package/dist/cjs/AbortSignalP.js +126 -0
- package/dist/cjs/BlobP.js +131 -0
- package/dist/cjs/BodyImpl.js +142 -0
- package/dist/cjs/CloseEventP.js +38 -0
- package/dist/cjs/CustomEventP.js +35 -0
- package/dist/cjs/EventP.js +173 -0
- package/dist/cjs/EventTargetP.js +176 -0
- package/dist/cjs/FileP.js +36 -0
- package/dist/cjs/FileReaderP.js +151 -0
- package/dist/cjs/FormDataP.js +250 -0
- package/dist/cjs/HeadersP.js +176 -0
- package/dist/cjs/MessageEventP.js +64 -0
- package/dist/cjs/ProgressEventP.js +69 -0
- package/dist/cjs/RequestP.js +158 -0
- package/dist/cjs/ResponseP.js +102 -0
- package/dist/cjs/TextDecoderP.js +186 -0
- package/dist/cjs/TextEncoderP.js +122 -0
- package/dist/cjs/URLSearchParamsP.js +230 -0
- package/dist/cjs/WebSocketP.js +238 -0
- package/dist/cjs/XMLHttpRequestP.js +567 -0
- package/dist/cjs/convertor.js +83 -0
- package/dist/cjs/fetchP.js +115 -0
- package/dist/cjs/index.js +80 -0
- package/dist/cjs/isPolyfill.js +56 -0
- package/dist/cjs/platform.js +33 -0
- package/dist/esm/AbortControllerP.js +28 -0
- package/dist/esm/AbortSignalP.js +121 -0
- package/dist/esm/BlobP.js +124 -0
- package/dist/esm/BodyImpl.js +137 -0
- package/dist/esm/CloseEventP.js +35 -0
- package/dist/esm/CustomEventP.js +32 -0
- package/dist/esm/EventP.js +165 -0
- package/dist/esm/EventTargetP.js +168 -0
- package/dist/esm/FileP.js +33 -0
- package/dist/esm/FileReaderP.js +148 -0
- package/dist/esm/FormDataP.js +245 -0
- package/dist/esm/HeadersP.js +170 -0
- package/dist/esm/MessageEventP.js +61 -0
- package/dist/esm/ProgressEventP.js +65 -0
- package/dist/esm/RequestP.js +153 -0
- package/dist/esm/ResponseP.js +98 -0
- package/dist/esm/TextDecoderP.js +183 -0
- package/dist/esm/TextEncoderP.js +119 -0
- package/dist/esm/URLSearchParamsP.js +227 -0
- package/dist/esm/WebSocketP.js +234 -0
- package/dist/esm/XMLHttpRequestP.js +563 -0
- package/dist/esm/convertor.js +80 -0
- package/dist/esm/fetchP.js +111 -0
- package/dist/esm/index.js +25 -0
- package/dist/esm/isPolyfill.js +48 -0
- package/dist/esm/platform.js +31 -0
- package/dist/index.d.ts +1 -5
- package/package.json +7 -10
- package/dist/index.cjs.js +0 -3252
- package/dist/index.cjs.min.js +0 -1
- package/dist/index.esm.js +0 -3212
- package/dist/index.esm.min.js +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var XMLHttpRequestP = require('./XMLHttpRequestP.js');
|
|
4
|
+
var HeadersP = require('./HeadersP.js');
|
|
5
|
+
var BodyImpl = require('./BodyImpl.js');
|
|
6
|
+
var RequestP = require('./RequestP.js');
|
|
7
|
+
var ResponseP = require('./ResponseP.js');
|
|
8
|
+
var isPolyfill = require('./isPolyfill.js');
|
|
9
|
+
require('./BlobP.js');
|
|
10
|
+
require('./TextEncoderP.js');
|
|
11
|
+
require('./TextDecoderP.js');
|
|
12
|
+
require('./convertor.js');
|
|
13
|
+
require('./FormDataP.js');
|
|
14
|
+
require('./FileP.js');
|
|
15
|
+
require('./EventTargetP.js');
|
|
16
|
+
require('./EventP.js');
|
|
17
|
+
require('./ProgressEventP.js');
|
|
18
|
+
require('./platform.js');
|
|
19
|
+
require('./AbortControllerP.js');
|
|
20
|
+
require('./AbortSignalP.js');
|
|
21
|
+
|
|
22
|
+
const mp = { XMLHttpRequest: XMLHttpRequestP.XMLHttpRequest };
|
|
23
|
+
const setXMLHttpRequest = (XHR) => { mp.XMLHttpRequest = XHR; };
|
|
24
|
+
function fetchP(...args) {
|
|
25
|
+
if (new.target === fetchP) {
|
|
26
|
+
throw new TypeError("fetch is not a constructor");
|
|
27
|
+
}
|
|
28
|
+
const [input, init] = args;
|
|
29
|
+
isPolyfill.checkArgsLength(args, 1, "Window", "fetch");
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
const request = new RequestP.RequestP(input, init);
|
|
32
|
+
const signal = request[RequestP.requestState].signal;
|
|
33
|
+
if (signal && signal.aborted) {
|
|
34
|
+
return reject(signal.reason);
|
|
35
|
+
}
|
|
36
|
+
let xhr = new mp.XMLHttpRequest();
|
|
37
|
+
xhr.onload = function () {
|
|
38
|
+
let options = {
|
|
39
|
+
headers: HeadersP.parseHeaders(xhr.getAllResponseHeaders() || ""),
|
|
40
|
+
status: xhr.status,
|
|
41
|
+
statusText: xhr.statusText,
|
|
42
|
+
};
|
|
43
|
+
// This check if specifically for when a user fetches a file locally from the file system
|
|
44
|
+
// Only if the status is out of a normal range
|
|
45
|
+
if (request.url.indexOf("file://") === 0 && (xhr.status < 200 || xhr.status > 599)) {
|
|
46
|
+
options.status = 200;
|
|
47
|
+
}
|
|
48
|
+
setTimeout(() => {
|
|
49
|
+
let response = new ResponseP.ResponseP("response" in xhr ? xhr.response : xhr.responseText, options);
|
|
50
|
+
response[ResponseP.responseState].url = "responseURL" in xhr ? xhr.responseURL : (options.headers.get("X-Request-URL") || "");
|
|
51
|
+
resolve(response);
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
xhr.onerror = function () {
|
|
55
|
+
setTimeout(function () {
|
|
56
|
+
reject(new TypeError("Failed to fetch"));
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
xhr.ontimeout = function () {
|
|
60
|
+
setTimeout(function () {
|
|
61
|
+
reject(new isPolyfill.MPException("request:fail timeout", "TimeoutError"));
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
xhr.onabort = function () {
|
|
65
|
+
setTimeout(function () {
|
|
66
|
+
reject(new isPolyfill.MPException("request:fail abort", "AbortError"));
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
xhr.open(request.method, request.url, true);
|
|
70
|
+
if (request.credentials === "include") {
|
|
71
|
+
xhr.withCredentials = true;
|
|
72
|
+
}
|
|
73
|
+
else if (request.credentials === "omit") {
|
|
74
|
+
xhr.withCredentials = false;
|
|
75
|
+
}
|
|
76
|
+
if ("responseType" in xhr) {
|
|
77
|
+
xhr.responseType = "arraybuffer";
|
|
78
|
+
}
|
|
79
|
+
if (init && typeof init === "object" && typeof init.headers === "object" && !(isPolyfill.isObjectType("Headers", init.headers) || isPolyfill.isPolyfillType("Headers", init.headers))) {
|
|
80
|
+
let headers = init.headers;
|
|
81
|
+
let names = [];
|
|
82
|
+
Object.getOwnPropertyNames(headers).forEach(name => {
|
|
83
|
+
names.push(HeadersP.normalizeName(name));
|
|
84
|
+
xhr.setRequestHeader(name, HeadersP.normalizeValue(headers[name]));
|
|
85
|
+
});
|
|
86
|
+
request.headers.forEach((value, name) => {
|
|
87
|
+
if (names.indexOf(name) === -1) {
|
|
88
|
+
xhr.setRequestHeader(name, value);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
request.headers.forEach((value, name) => {
|
|
94
|
+
xhr.setRequestHeader(name, value);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (signal) {
|
|
98
|
+
const abortXHR = () => { xhr.abort(); };
|
|
99
|
+
signal.addEventListener("abort", abortXHR);
|
|
100
|
+
xhr.onreadystatechange = function () {
|
|
101
|
+
// success or failure
|
|
102
|
+
if (xhr.readyState === 4 /* DONE */) {
|
|
103
|
+
signal.removeEventListener("abort", abortXHR);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
let body = BodyImpl.Body_toPayload(request);
|
|
108
|
+
xhr.send(body !== "" ? body : void 0);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const fetchE = isPolyfill.g["fetch"] || fetchP;
|
|
112
|
+
|
|
113
|
+
exports.fetch = fetchE;
|
|
114
|
+
exports.fetchP = fetchP;
|
|
115
|
+
exports.setXMLHttpRequest = setXMLHttpRequest;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var TextEncoderP = require('./TextEncoderP.js');
|
|
4
|
+
var TextDecoderP = require('./TextDecoderP.js');
|
|
5
|
+
var BlobP = require('./BlobP.js');
|
|
6
|
+
var FileP = require('./FileP.js');
|
|
7
|
+
var FileReaderP = require('./FileReaderP.js');
|
|
8
|
+
var URLSearchParamsP = require('./URLSearchParamsP.js');
|
|
9
|
+
var FormDataP = require('./FormDataP.js');
|
|
10
|
+
var fetchP = require('./fetchP.js');
|
|
11
|
+
var HeadersP = require('./HeadersP.js');
|
|
12
|
+
var RequestP = require('./RequestP.js');
|
|
13
|
+
var ResponseP = require('./ResponseP.js');
|
|
14
|
+
var AbortControllerP = require('./AbortControllerP.js');
|
|
15
|
+
var AbortSignalP = require('./AbortSignalP.js');
|
|
16
|
+
var EventTargetP = require('./EventTargetP.js');
|
|
17
|
+
var EventP = require('./EventP.js');
|
|
18
|
+
var CustomEventP = require('./CustomEventP.js');
|
|
19
|
+
var XMLHttpRequestP = require('./XMLHttpRequestP.js');
|
|
20
|
+
var WebSocketP = require('./WebSocketP.js');
|
|
21
|
+
var isPolyfill = require('./isPolyfill.js');
|
|
22
|
+
var platform = require('./platform.js');
|
|
23
|
+
var convertor = require('./convertor.js');
|
|
24
|
+
var BodyImpl = require('./BodyImpl.js');
|
|
25
|
+
var ProgressEventP = require('./ProgressEventP.js');
|
|
26
|
+
var CloseEventP = require('./CloseEventP.js');
|
|
27
|
+
var MessageEventP = require('./MessageEventP.js');
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
exports.TextEncoder = TextEncoderP.TextEncoder;
|
|
32
|
+
exports.TextEncoderP = TextEncoderP.TextEncoderP;
|
|
33
|
+
exports.TextDecoder = TextDecoderP.TextDecoder;
|
|
34
|
+
exports.TextDecoderP = TextDecoderP.TextDecoderP;
|
|
35
|
+
exports.Blob = BlobP.Blob;
|
|
36
|
+
exports.BlobP = BlobP.BlobP;
|
|
37
|
+
exports.File = FileP.File;
|
|
38
|
+
exports.FileP = FileP.FileP;
|
|
39
|
+
exports.FileReader = FileReaderP.FileReader;
|
|
40
|
+
exports.FileReaderP = FileReaderP.FileReaderP;
|
|
41
|
+
exports.URLSearchParams = URLSearchParamsP.URLSearchParams;
|
|
42
|
+
exports.URLSearchParamsP = URLSearchParamsP.URLSearchParamsP;
|
|
43
|
+
exports.FormData = FormDataP.FormData;
|
|
44
|
+
exports.FormDataP = FormDataP.FormDataP;
|
|
45
|
+
exports.fetch = fetchP.fetch;
|
|
46
|
+
exports.fetchP = fetchP.fetchP;
|
|
47
|
+
exports.setXMLHttpRequest = fetchP.setXMLHttpRequest;
|
|
48
|
+
exports.Headers = HeadersP.Headers;
|
|
49
|
+
exports.HeadersP = HeadersP.HeadersP;
|
|
50
|
+
exports.Request = RequestP.Request;
|
|
51
|
+
exports.RequestP = RequestP.RequestP;
|
|
52
|
+
exports.Response = ResponseP.Response;
|
|
53
|
+
exports.ResponseP = ResponseP.ResponseP;
|
|
54
|
+
exports.AbortController = AbortControllerP.AbortController;
|
|
55
|
+
exports.AbortControllerP = AbortControllerP.AbortControllerP;
|
|
56
|
+
exports.AbortSignal = AbortSignalP.AbortSignal;
|
|
57
|
+
exports.AbortSignalP = AbortSignalP.AbortSignalP;
|
|
58
|
+
exports.EventTarget = EventTargetP.EventTarget;
|
|
59
|
+
exports.EventTargetP = EventTargetP.EventTargetP;
|
|
60
|
+
exports.Event = EventP.Event;
|
|
61
|
+
exports.EventP = EventP.EventP;
|
|
62
|
+
exports.CustomEvent = CustomEventP.CustomEvent;
|
|
63
|
+
exports.CustomEventP = CustomEventP.CustomEventP;
|
|
64
|
+
exports.XMLHttpRequest = XMLHttpRequestP.XMLHttpRequest;
|
|
65
|
+
exports.XMLHttpRequestP = XMLHttpRequestP.XMLHttpRequestImpl;
|
|
66
|
+
exports.setRequest = XMLHttpRequestP.setRequest;
|
|
67
|
+
exports.WebSocket = WebSocketP.WebSocket;
|
|
68
|
+
exports.WebSocketP = WebSocketP.WebSocketImpl;
|
|
69
|
+
exports.setConnectSocket = WebSocketP.setConnectSocket;
|
|
70
|
+
exports.g = isPolyfill.g;
|
|
71
|
+
exports.mp = platform.mp;
|
|
72
|
+
exports.convert = convertor.convert;
|
|
73
|
+
exports.convertBack = convertor.convertBack;
|
|
74
|
+
exports.BodyImpl = BodyImpl.BodyImpl;
|
|
75
|
+
exports.ProgressEvent = ProgressEventP.ProgressEvent;
|
|
76
|
+
exports.ProgressEventP = ProgressEventP.ProgressEventP;
|
|
77
|
+
exports.CloseEvent = CloseEventP.CloseEvent;
|
|
78
|
+
exports.CloseEventP = CloseEventP.CloseEventP;
|
|
79
|
+
exports.MessageEvent = MessageEventP.MessageEvent;
|
|
80
|
+
exports.MessageEventP = MessageEventP.MessageEventP;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable no-prototype-builtins */
|
|
4
|
+
/** @internal */ const g = (typeof globalThis !== "undefined" && globalThis) ||
|
|
5
|
+
(typeof self !== "undefined" && self) ||
|
|
6
|
+
// @ts-ignore eslint-disable-next-line no-undef
|
|
7
|
+
(typeof global !== "undefined" && global) ||
|
|
8
|
+
{};
|
|
9
|
+
/** @internal */
|
|
10
|
+
const polyfill = "MPHTTPX";
|
|
11
|
+
/** @internal */
|
|
12
|
+
function checkArgsLength(args, required, className, funcName) {
|
|
13
|
+
if (args.length < required) {
|
|
14
|
+
throw new TypeError(`Failed to ${funcName ? ("execute '" + funcName + "' on") : "construct"} '${className}': ${required} argument${required > 1 ? "s" : ""} required, but only ${args.length} present.`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** @internal */
|
|
18
|
+
class MPException extends Error {
|
|
19
|
+
constructor(message, name) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "Error";
|
|
22
|
+
if (name) {
|
|
23
|
+
this.name = name;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** @internal */
|
|
28
|
+
function isObjectType(name, value) {
|
|
29
|
+
return Object.prototype.toString.call(value) === `[object ${name}]`;
|
|
30
|
+
}
|
|
31
|
+
/** @internal */
|
|
32
|
+
function isPolyfillType(name, value, strict = false) {
|
|
33
|
+
return !!value
|
|
34
|
+
&& typeof value === "object"
|
|
35
|
+
&& "isPolyfill" in value
|
|
36
|
+
&& !!value.isPolyfill
|
|
37
|
+
&& typeof value.isPolyfill === "object"
|
|
38
|
+
&& "symbol" in value.isPolyfill
|
|
39
|
+
&& value.isPolyfill.symbol === polyfill
|
|
40
|
+
&& "hierarchy" in value.isPolyfill
|
|
41
|
+
&& Array.isArray(value.isPolyfill.hierarchy)
|
|
42
|
+
&& ((index) => strict ? index === 0 : index > -1)(value.isPolyfill.hierarchy.indexOf(name));
|
|
43
|
+
}
|
|
44
|
+
/** @internal */
|
|
45
|
+
function isArrayBuffer(value) {
|
|
46
|
+
// Mini Program
|
|
47
|
+
return isObjectType("ArrayBuffer", value) || (!!value && typeof value === "object" && ArrayBuffer.prototype.isPrototypeOf(value));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
exports.MPException = MPException;
|
|
51
|
+
exports.checkArgsLength = checkArgsLength;
|
|
52
|
+
exports.g = g;
|
|
53
|
+
exports.isArrayBuffer = isArrayBuffer;
|
|
54
|
+
exports.isObjectType = isObjectType;
|
|
55
|
+
exports.isPolyfillType = isPolyfillType;
|
|
56
|
+
exports.polyfill = polyfill;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var isPolyfill = require('./isPolyfill.js');
|
|
4
|
+
|
|
5
|
+
// @ts-nocheck
|
|
6
|
+
function getPlatform() {
|
|
7
|
+
let u = "undefined", r = "request", f = "function";
|
|
8
|
+
let mp;
|
|
9
|
+
mp =
|
|
10
|
+
(typeof wx !== u && typeof (wx === null || wx === void 0 ? void 0 : wx[r]) === f && wx) || // 微信
|
|
11
|
+
(typeof my !== u && typeof (my === null || my === void 0 ? void 0 : my[r]) === f && my) || // 支付宝
|
|
12
|
+
(typeof qq !== u && typeof (qq === null || qq === void 0 ? void 0 : qq[r]) === f && qq) || // QQ
|
|
13
|
+
(typeof jd !== u && typeof (jd === null || jd === void 0 ? void 0 : jd[r]) === f && jd) || // 京东
|
|
14
|
+
(typeof swan !== u && typeof (swan === null || swan === void 0 ? void 0 : swan[r]) === f && swan) || // 百度
|
|
15
|
+
(typeof tt !== u && typeof (tt === null || tt === void 0 ? void 0 : tt[r]) === f && tt) || // 抖音 | 飞书
|
|
16
|
+
(typeof ks !== u && typeof (ks === null || ks === void 0 ? void 0 : ks[r]) === f && ks) || // 快手
|
|
17
|
+
(typeof qh !== u && typeof (qh === null || qh === void 0 ? void 0 : qh[r]) === f && qh) || // 360
|
|
18
|
+
(typeof xhs !== u && typeof (xhs === null || xhs === void 0 ? void 0 : xhs[r]) === f && xhs) || // 小红书
|
|
19
|
+
undefined;
|
|
20
|
+
if (typeof isPolyfill.g["XMLHttpRequest"] === f) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (mp === undefined)
|
|
24
|
+
mp =
|
|
25
|
+
(typeof uni !== u && typeof (uni === null || uni === void 0 ? void 0 : uni[r]) === f && uni) || // UniApp
|
|
26
|
+
(typeof Taro !== u && typeof (Taro === null || Taro === void 0 ? void 0 : Taro[r]) === f && Taro) || // Taro
|
|
27
|
+
undefined;
|
|
28
|
+
return mp;
|
|
29
|
+
}
|
|
30
|
+
/** @internal */
|
|
31
|
+
const mp = getPlatform();
|
|
32
|
+
|
|
33
|
+
exports.mp = mp;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { g, polyfill } from './isPolyfill.js';
|
|
2
|
+
import { AbortSignal_abort, createAbortSignal } from './AbortSignalP.js';
|
|
3
|
+
import './EventP.js';
|
|
4
|
+
import './EventTargetP.js';
|
|
5
|
+
|
|
6
|
+
/** @internal */
|
|
7
|
+
const state = Symbol( /* "AbortControllerState" */);
|
|
8
|
+
class AbortControllerP {
|
|
9
|
+
constructor() {
|
|
10
|
+
this[state] = new AbortControllerState();
|
|
11
|
+
}
|
|
12
|
+
get signal() { return this[state].signal; }
|
|
13
|
+
abort(reason) {
|
|
14
|
+
AbortSignal_abort(this[state].signal, reason);
|
|
15
|
+
}
|
|
16
|
+
/** @internal */ toString() { return "[object AbortController]"; }
|
|
17
|
+
/** @internal */ get [Symbol.toStringTag]() { return "AbortController"; }
|
|
18
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["AbortController"] }; }
|
|
19
|
+
}
|
|
20
|
+
/** @internal */
|
|
21
|
+
class AbortControllerState {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.signal = createAbortSignal();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const AbortControllerE = g["AbortController"] || AbortControllerP;
|
|
27
|
+
|
|
28
|
+
export { AbortControllerE as AbortController, AbortControllerP };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { g, checkArgsLength, isPolyfillType, MPException, polyfill } from './isPolyfill.js';
|
|
2
|
+
import { createInnerEvent } from './EventP.js';
|
|
3
|
+
import { EventTargetP, attachFn, EventTargetState, eventTargetState as state$1, EventTarget_fire, executeFn } from './EventTargetP.js';
|
|
4
|
+
|
|
5
|
+
var _a;
|
|
6
|
+
/** @internal */
|
|
7
|
+
const state = Symbol( /* "AbortSignalState" */);
|
|
8
|
+
class AbortSignalP extends EventTargetP {
|
|
9
|
+
static abort(reason) {
|
|
10
|
+
let signal = createAbortSignal();
|
|
11
|
+
AbortSignal_abort(signal, reason, false);
|
|
12
|
+
return signal;
|
|
13
|
+
}
|
|
14
|
+
static any(...args) {
|
|
15
|
+
const [signals] = args;
|
|
16
|
+
checkArgsLength(args, 1, "AbortSignal", "any");
|
|
17
|
+
if (!(Array.isArray(signals) || (signals && typeof signals === "object" && Symbol.iterator in signals))) {
|
|
18
|
+
throw new TypeError("Failed to execute 'any' on 'AbortSignal': The provided value cannot be converted to a sequence.");
|
|
19
|
+
}
|
|
20
|
+
let _signals = Array.isArray(signals) ? signals : Array.from(signals);
|
|
21
|
+
_signals.forEach(sig => {
|
|
22
|
+
if (!isPolyfillType("EventTarget", sig)) {
|
|
23
|
+
throw new TypeError("Failed to execute 'any' on 'AbortSignal': Failed to convert value to 'AbortSignal'.");
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
let signal = createAbortSignal();
|
|
27
|
+
let abortedSignal = _signals.find(x => x.aborted);
|
|
28
|
+
if (abortedSignal) {
|
|
29
|
+
AbortSignal_abort(signal, abortedSignal.reason, false);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
function abortFn(ev) {
|
|
33
|
+
for (let i = 0; i < _signals.length; ++i) {
|
|
34
|
+
let sig = _signals[i];
|
|
35
|
+
sig.removeEventListener("abort", abortFn);
|
|
36
|
+
}
|
|
37
|
+
AbortSignal_abort(signal, this.reason, true, ev.isTrusted);
|
|
38
|
+
}
|
|
39
|
+
for (let i = 0; i < _signals.length; ++i) {
|
|
40
|
+
let sig = _signals[i];
|
|
41
|
+
sig.addEventListener("abort", abortFn);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return signal;
|
|
45
|
+
}
|
|
46
|
+
static timeout(...args) {
|
|
47
|
+
const [milliseconds] = args;
|
|
48
|
+
checkArgsLength(args, 1, "AbortSignal", "timeout");
|
|
49
|
+
if (!(milliseconds >= 0)) {
|
|
50
|
+
throw new TypeError("Failed to execute 'timeout' on 'AbortSignal': Value is outside the 'unsigned long long' value range.");
|
|
51
|
+
}
|
|
52
|
+
let signal = createAbortSignal();
|
|
53
|
+
setTimeout(() => {
|
|
54
|
+
AbortSignal_abort(signal, new MPException("signal timed out", "TimeoutError"));
|
|
55
|
+
}, milliseconds);
|
|
56
|
+
return signal;
|
|
57
|
+
}
|
|
58
|
+
/** @internal */
|
|
59
|
+
constructor() {
|
|
60
|
+
if (new.target === AbortSignalP) {
|
|
61
|
+
throw new TypeError("Failed to construct 'AbortSignal': Illegal constructor");
|
|
62
|
+
}
|
|
63
|
+
super();
|
|
64
|
+
this[state] = new AbortSignalState(this);
|
|
65
|
+
}
|
|
66
|
+
get aborted() { return this[state].aborted; }
|
|
67
|
+
get reason() { return this[state].reason; }
|
|
68
|
+
throwIfAborted() {
|
|
69
|
+
if (this.aborted) {
|
|
70
|
+
throw this.reason;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
get onabort() { return this[state].onabort; }
|
|
74
|
+
set onabort(value) {
|
|
75
|
+
this[state].onabort = value;
|
|
76
|
+
attachFn(this, "abort", value, this[state][_handlers].onabort);
|
|
77
|
+
}
|
|
78
|
+
/** @internal */ toString() { return "[object AbortSignal]"; }
|
|
79
|
+
/** @internal */ get [Symbol.toStringTag]() { return "AbortSignal"; }
|
|
80
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["AbortSignal", "EventTarget"] }; }
|
|
81
|
+
}
|
|
82
|
+
/** @internal */
|
|
83
|
+
const _handlers = Symbol();
|
|
84
|
+
/** @internal */
|
|
85
|
+
class AbortSignalState {
|
|
86
|
+
constructor(target) {
|
|
87
|
+
this.aborted = false;
|
|
88
|
+
this.reason = undefined;
|
|
89
|
+
this[_a] = getHandlers(this);
|
|
90
|
+
this.onabort = null;
|
|
91
|
+
this.target = target;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
_a = _handlers;
|
|
95
|
+
/** @internal */
|
|
96
|
+
function AbortSignal_abort(signal, reason, notify = true, isTrusted = true) {
|
|
97
|
+
const s = signal[state];
|
|
98
|
+
if (!s.aborted) {
|
|
99
|
+
s.aborted = true;
|
|
100
|
+
s.reason = reason !== null && reason !== void 0 ? reason : (new MPException("signal is aborted without reason", "AbortError"));
|
|
101
|
+
if (notify) {
|
|
102
|
+
let evt = createInnerEvent(signal, "abort", undefined, isTrusted);
|
|
103
|
+
EventTarget_fire(signal, evt);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function getHandlers(s) {
|
|
108
|
+
return {
|
|
109
|
+
onabort: (ev) => { executeFn(s.target, s.onabort, ev); },
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** @internal */
|
|
113
|
+
function createAbortSignal() {
|
|
114
|
+
let signal = Object.create(AbortSignalP.prototype);
|
|
115
|
+
signal[state$1] = new EventTargetState(signal);
|
|
116
|
+
signal[state] = new AbortSignalState(signal);
|
|
117
|
+
return signal;
|
|
118
|
+
}
|
|
119
|
+
const AbortSignalE = g["AbortSignal"] || AbortSignalP;
|
|
120
|
+
|
|
121
|
+
export { AbortSignalE as AbortSignal, AbortSignalP, AbortSignal_abort, createAbortSignal };
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { TextEncoderP } from './TextEncoderP.js';
|
|
2
|
+
import { TextDecoderP } from './TextDecoderP.js';
|
|
3
|
+
import { g, isPolyfillType, isArrayBuffer, polyfill } from './isPolyfill.js';
|
|
4
|
+
|
|
5
|
+
/** @internal */
|
|
6
|
+
const state = Symbol( /* "BlobState" */);
|
|
7
|
+
class BlobP {
|
|
8
|
+
constructor(blobParts = [], options) {
|
|
9
|
+
if (!(Array.isArray(blobParts) || (blobParts && typeof blobParts === "object" && Symbol.iterator in blobParts))) {
|
|
10
|
+
throw new TypeError("Failed to construct 'Blob/File': The provided value cannot be converted to a sequence.");
|
|
11
|
+
}
|
|
12
|
+
let _blobParts = Array.isArray(blobParts) ? blobParts : Array.from(blobParts);
|
|
13
|
+
let chunks = [];
|
|
14
|
+
for (let i = 0; i < _blobParts.length; ++i) {
|
|
15
|
+
let chunk = _blobParts[i];
|
|
16
|
+
if (isPolyfillType("Blob", chunk)) {
|
|
17
|
+
chunks.push(chunk[state][_buffer]);
|
|
18
|
+
}
|
|
19
|
+
else if (isArrayBuffer(chunk) || ArrayBuffer.isView(chunk)) {
|
|
20
|
+
chunks.push(BufferSource_toUint8Array(chunk));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
chunks.push(encode("" + chunk));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
this[state] = new BlobState(concat(chunks));
|
|
27
|
+
const s = this[state];
|
|
28
|
+
s.size = s[_buffer].length;
|
|
29
|
+
let rawType = "" + ((options === null || options === void 0 ? void 0 : options.type) || "");
|
|
30
|
+
s.type = /[^\u0020-\u007E]/.test(rawType) ? "" : rawType.toLowerCase();
|
|
31
|
+
}
|
|
32
|
+
get size() { return this[state].size; }
|
|
33
|
+
get type() { return this[state].type; }
|
|
34
|
+
arrayBuffer() {
|
|
35
|
+
return Promise.resolve(clone(this[state][_buffer].buffer).buffer);
|
|
36
|
+
}
|
|
37
|
+
bytes() {
|
|
38
|
+
return Promise.resolve(clone(this[state][_buffer].buffer));
|
|
39
|
+
}
|
|
40
|
+
slice(start, end, contentType) {
|
|
41
|
+
let sliced = this[state][_buffer].slice(start !== null && start !== void 0 ? start : 0, end !== null && end !== void 0 ? end : this[state][_buffer].length); // × WeChat 2.5.0
|
|
42
|
+
return new BlobP([sliced], { type: "" + (contentType !== null && contentType !== void 0 ? contentType : "") });
|
|
43
|
+
}
|
|
44
|
+
stream() {
|
|
45
|
+
throw new TypeError("Failed to execute 'stream' on 'Blob': method not implemented.");
|
|
46
|
+
}
|
|
47
|
+
text() {
|
|
48
|
+
return Promise.resolve(decode(this[state][_buffer]));
|
|
49
|
+
}
|
|
50
|
+
/** @internal */ toString() { return "[object Blob]"; }
|
|
51
|
+
/** @internal */ get [Symbol.toStringTag]() { return "Blob"; }
|
|
52
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["Blob"] }; }
|
|
53
|
+
}
|
|
54
|
+
/** @internal */
|
|
55
|
+
const _buffer = Symbol();
|
|
56
|
+
/** @internal */
|
|
57
|
+
class BlobState {
|
|
58
|
+
constructor(buffer) {
|
|
59
|
+
this.size = 0;
|
|
60
|
+
this.type = "";
|
|
61
|
+
this[_buffer] = buffer;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** @internal */
|
|
65
|
+
function Blob_toUint8Array(blob) {
|
|
66
|
+
return blob[state][_buffer];
|
|
67
|
+
}
|
|
68
|
+
function BufferSource_toUint8Array(buf) {
|
|
69
|
+
return isArrayBuffer(buf)
|
|
70
|
+
? new Uint8Array(buf)
|
|
71
|
+
: new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
72
|
+
}
|
|
73
|
+
function clone(buf) {
|
|
74
|
+
let sourceArray = BufferSource_toUint8Array(buf);
|
|
75
|
+
let cloneArray = new Uint8Array(new ArrayBuffer(sourceArray.byteLength));
|
|
76
|
+
cloneArray.set(sourceArray);
|
|
77
|
+
return cloneArray;
|
|
78
|
+
}
|
|
79
|
+
function concat(chunks) {
|
|
80
|
+
let totalByteLength = chunks.reduce((acc, cur) => acc + cur.byteLength, 0);
|
|
81
|
+
let result = new Uint8Array(totalByteLength);
|
|
82
|
+
chunks.reduce((offset, chunk) => {
|
|
83
|
+
result.set(chunk, offset);
|
|
84
|
+
return offset + chunk.byteLength;
|
|
85
|
+
}, 0);
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
/** @internal */
|
|
89
|
+
function encode(str) {
|
|
90
|
+
let encoder = new TextEncoderP();
|
|
91
|
+
return encoder.encode(str);
|
|
92
|
+
}
|
|
93
|
+
/** @internal */
|
|
94
|
+
function decode(buf) {
|
|
95
|
+
let decoder = new TextDecoderP();
|
|
96
|
+
return decoder.decode(buf);
|
|
97
|
+
}
|
|
98
|
+
/** @internal */
|
|
99
|
+
function Uint8Array_toBase64(input) {
|
|
100
|
+
let byteToCharMap = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
101
|
+
let output = [];
|
|
102
|
+
for (var i = 0; i < input.length; i += 3) {
|
|
103
|
+
let byte1 = input[i];
|
|
104
|
+
let haveByte2 = i + 1 < input.length;
|
|
105
|
+
let byte2 = haveByte2 ? input[i + 1] : 0;
|
|
106
|
+
let haveByte3 = i + 2 < input.length;
|
|
107
|
+
let byte3 = haveByte3 ? input[i + 2] : 0;
|
|
108
|
+
let outByte1 = byte1 >> 2;
|
|
109
|
+
let outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);
|
|
110
|
+
let outByte3 = ((byte2 & 0x0F) << 2) | (byte3 >> 6);
|
|
111
|
+
let outByte4 = byte3 & 0x3F;
|
|
112
|
+
if (!haveByte3) {
|
|
113
|
+
outByte4 = 64;
|
|
114
|
+
if (!haveByte2) {
|
|
115
|
+
outByte3 = 64;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);
|
|
119
|
+
}
|
|
120
|
+
return output.join("");
|
|
121
|
+
}
|
|
122
|
+
const BlobE = g["Blob"] || BlobP;
|
|
123
|
+
|
|
124
|
+
export { BlobE as Blob, BlobP, Blob_toUint8Array, Uint8Array_toBase64, decode, encode };
|