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.
Files changed (58) hide show
  1. package/dist/cjs/AbortControllerP.js +31 -0
  2. package/dist/cjs/AbortSignalP.js +126 -0
  3. package/dist/cjs/BlobP.js +131 -0
  4. package/dist/cjs/BodyImpl.js +142 -0
  5. package/dist/cjs/CloseEventP.js +38 -0
  6. package/dist/cjs/CustomEventP.js +35 -0
  7. package/dist/cjs/EventP.js +173 -0
  8. package/dist/cjs/EventTargetP.js +176 -0
  9. package/dist/cjs/FileP.js +36 -0
  10. package/dist/cjs/FileReaderP.js +151 -0
  11. package/dist/cjs/FormDataP.js +250 -0
  12. package/dist/cjs/HeadersP.js +176 -0
  13. package/dist/cjs/MessageEventP.js +64 -0
  14. package/dist/cjs/ProgressEventP.js +69 -0
  15. package/dist/cjs/RequestP.js +158 -0
  16. package/dist/cjs/ResponseP.js +102 -0
  17. package/dist/cjs/TextDecoderP.js +186 -0
  18. package/dist/cjs/TextEncoderP.js +122 -0
  19. package/dist/cjs/URLSearchParamsP.js +230 -0
  20. package/dist/cjs/WebSocketP.js +238 -0
  21. package/dist/cjs/XMLHttpRequestP.js +567 -0
  22. package/dist/cjs/convertor.js +83 -0
  23. package/dist/cjs/fetchP.js +115 -0
  24. package/dist/cjs/index.js +80 -0
  25. package/dist/cjs/isPolyfill.js +56 -0
  26. package/dist/cjs/platform.js +33 -0
  27. package/dist/esm/AbortControllerP.js +28 -0
  28. package/dist/esm/AbortSignalP.js +121 -0
  29. package/dist/esm/BlobP.js +124 -0
  30. package/dist/esm/BodyImpl.js +137 -0
  31. package/dist/esm/CloseEventP.js +35 -0
  32. package/dist/esm/CustomEventP.js +32 -0
  33. package/dist/esm/EventP.js +165 -0
  34. package/dist/esm/EventTargetP.js +168 -0
  35. package/dist/esm/FileP.js +33 -0
  36. package/dist/esm/FileReaderP.js +148 -0
  37. package/dist/esm/FormDataP.js +245 -0
  38. package/dist/esm/HeadersP.js +170 -0
  39. package/dist/esm/MessageEventP.js +61 -0
  40. package/dist/esm/ProgressEventP.js +65 -0
  41. package/dist/esm/RequestP.js +153 -0
  42. package/dist/esm/ResponseP.js +98 -0
  43. package/dist/esm/TextDecoderP.js +183 -0
  44. package/dist/esm/TextEncoderP.js +119 -0
  45. package/dist/esm/URLSearchParamsP.js +227 -0
  46. package/dist/esm/WebSocketP.js +234 -0
  47. package/dist/esm/XMLHttpRequestP.js +563 -0
  48. package/dist/esm/convertor.js +80 -0
  49. package/dist/esm/fetchP.js +111 -0
  50. package/dist/esm/index.js +25 -0
  51. package/dist/esm/isPolyfill.js +48 -0
  52. package/dist/esm/platform.js +31 -0
  53. package/dist/index.d.ts +1 -5
  54. package/package.json +7 -10
  55. package/dist/index.cjs.js +0 -3252
  56. package/dist/index.cjs.min.js +0 -1
  57. package/dist/index.esm.js +0 -3212
  58. 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 };