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,137 @@
|
|
|
1
|
+
import { polyfill, isObjectType } from './isPolyfill.js';
|
|
2
|
+
import { convert, convertBack } from './convertor.js';
|
|
3
|
+
import { createFormDataFromBinaryText } from './FormDataP.js';
|
|
4
|
+
import './BlobP.js';
|
|
5
|
+
import './TextEncoderP.js';
|
|
6
|
+
import './TextDecoderP.js';
|
|
7
|
+
import './FileP.js';
|
|
8
|
+
|
|
9
|
+
var _a;
|
|
10
|
+
/** @internal */ const state = Symbol( /* "BodyState" */);
|
|
11
|
+
class BodyImpl {
|
|
12
|
+
/** @internal */
|
|
13
|
+
constructor() {
|
|
14
|
+
if (new.target === BodyImpl) {
|
|
15
|
+
throw new TypeError("Failed to construct 'Body': Illegal constructor");
|
|
16
|
+
}
|
|
17
|
+
this[state] = new BodyState();
|
|
18
|
+
}
|
|
19
|
+
get body() {
|
|
20
|
+
if (!this[state][_body]) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
throw new TypeError(`Failed to access 'body' on '${this[state].name}': property not implemented.`);
|
|
24
|
+
}
|
|
25
|
+
get bodyUsed() { return this[state].bodyUsed; }
|
|
26
|
+
;
|
|
27
|
+
arrayBuffer() {
|
|
28
|
+
const kind = "arrayBuffer";
|
|
29
|
+
return consumed(this, kind) || read(this, kind);
|
|
30
|
+
}
|
|
31
|
+
blob() {
|
|
32
|
+
const kind = "blob";
|
|
33
|
+
return consumed(this, kind) || read(this, kind);
|
|
34
|
+
}
|
|
35
|
+
bytes() {
|
|
36
|
+
const kind = "bytes";
|
|
37
|
+
return consumed(this, kind) || read(this, kind);
|
|
38
|
+
}
|
|
39
|
+
formData() {
|
|
40
|
+
const kind = "formData";
|
|
41
|
+
return consumed(this, kind) || read(this, kind);
|
|
42
|
+
}
|
|
43
|
+
json() {
|
|
44
|
+
const kind = "json";
|
|
45
|
+
return consumed(this, kind) || read(this, kind);
|
|
46
|
+
}
|
|
47
|
+
text() {
|
|
48
|
+
const kind = "text";
|
|
49
|
+
return consumed(this, kind) || read(this, kind);
|
|
50
|
+
}
|
|
51
|
+
/** @internal */ toString() { return "[object Body]"; }
|
|
52
|
+
/** @internal */ get [Symbol.toStringTag]() { return "Body"; }
|
|
53
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["Body"] }; }
|
|
54
|
+
}
|
|
55
|
+
/** @internal */
|
|
56
|
+
const _body = Symbol();
|
|
57
|
+
/** @internal */
|
|
58
|
+
class BodyState {
|
|
59
|
+
constructor() {
|
|
60
|
+
this.name = "Body";
|
|
61
|
+
this.bodyUsed = false;
|
|
62
|
+
this[_a] = "";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
_a = _body;
|
|
66
|
+
/** @internal */
|
|
67
|
+
function Body_init(body, payload) {
|
|
68
|
+
const b = body;
|
|
69
|
+
if (isObjectType("ReadableStream", payload)) {
|
|
70
|
+
throw new TypeError(`Failed to construct '${b[state].name}': ReadableStream not implemented.`);
|
|
71
|
+
}
|
|
72
|
+
b[state][_body] = convert(payload, true, type => { if (!b.headers.has("Content-Type")) {
|
|
73
|
+
b.headers.set("Content-Type", type);
|
|
74
|
+
} });
|
|
75
|
+
}
|
|
76
|
+
/** @internal */
|
|
77
|
+
function Body_toPayload(body) {
|
|
78
|
+
return body[state][_body];
|
|
79
|
+
}
|
|
80
|
+
function read(body, kind) {
|
|
81
|
+
return new Promise((resolve, reject) => {
|
|
82
|
+
try {
|
|
83
|
+
resolve(readSync(body, kind));
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
reject(e);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function readSync(body, kind) {
|
|
91
|
+
const payload = body[state][_body];
|
|
92
|
+
if (kind === "arrayBuffer") {
|
|
93
|
+
return convertBack("arraybuffer", payload);
|
|
94
|
+
}
|
|
95
|
+
else if (kind === "blob") {
|
|
96
|
+
return convertBack("blob", payload);
|
|
97
|
+
}
|
|
98
|
+
else if (kind === "bytes") {
|
|
99
|
+
let arrayBuffer = convertBack("arraybuffer", payload);
|
|
100
|
+
return new Uint8Array(arrayBuffer);
|
|
101
|
+
}
|
|
102
|
+
else if (kind === "formData") {
|
|
103
|
+
const extractBoundary = (contentType) => {
|
|
104
|
+
if (!contentType) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!/multipart\/form-data/i.test(contentType)) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
let boundaryMatch = contentType.match(/boundary\s*=\s*([^;]+)/i);
|
|
111
|
+
if (boundaryMatch && boundaryMatch[1]) {
|
|
112
|
+
let boundary = boundaryMatch[1].trim();
|
|
113
|
+
return boundary.replace(/^["']|["']$/g, "");
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
let text = convertBack("text", payload);
|
|
117
|
+
let boundary = extractBoundary(body.headers.get("Content-Type")) || "";
|
|
118
|
+
return createFormDataFromBinaryText(text, boundary);
|
|
119
|
+
}
|
|
120
|
+
else if (kind === "json") {
|
|
121
|
+
return convertBack("json", payload);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
return convertBack("text", payload);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function consumed(body, kind) {
|
|
128
|
+
const s = body[state];
|
|
129
|
+
if (!s[_body])
|
|
130
|
+
return;
|
|
131
|
+
if (s.bodyUsed) {
|
|
132
|
+
return Promise.reject(new TypeError(`Failed to execute '${kind}' on '${s.name}': body stream already read`));
|
|
133
|
+
}
|
|
134
|
+
s.bodyUsed = true;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export { BodyImpl, Body_init, Body_toPayload, state as bodyState };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { EventP } from './EventP.js';
|
|
2
|
+
import { g, polyfill } from './isPolyfill.js';
|
|
3
|
+
|
|
4
|
+
/** @internal */
|
|
5
|
+
const state = Symbol( /* "CloseEventState" */);
|
|
6
|
+
class CloseEventP extends EventP {
|
|
7
|
+
constructor(type, eventInitDict) {
|
|
8
|
+
var _a;
|
|
9
|
+
super(type, eventInitDict);
|
|
10
|
+
this[state] = new CloseEventState();
|
|
11
|
+
const s = this[state];
|
|
12
|
+
let _code = Number((_a = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.code) !== null && _a !== void 0 ? _a : 0);
|
|
13
|
+
s.code = isNaN(_code) ? 0 : _code;
|
|
14
|
+
if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.reason) !== undefined)
|
|
15
|
+
s.reason = "" + eventInitDict.reason;
|
|
16
|
+
s.wasClean = !!(eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.wasClean);
|
|
17
|
+
}
|
|
18
|
+
get code() { return this[state].code; }
|
|
19
|
+
get reason() { return this[state].reason; }
|
|
20
|
+
get wasClean() { return this[state].wasClean; }
|
|
21
|
+
/** @internal */ toString() { return "[object CloseEvent]"; }
|
|
22
|
+
/** @internal */ get [Symbol.toStringTag]() { return "CloseEvent"; }
|
|
23
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["CloseEvent", "Event"] }; }
|
|
24
|
+
}
|
|
25
|
+
/** @internal */
|
|
26
|
+
class CloseEventState {
|
|
27
|
+
constructor() {
|
|
28
|
+
this.code = 0;
|
|
29
|
+
this.reason = "";
|
|
30
|
+
this.wasClean = false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const CloseEventE = g["EventTarget"] ? g["CloseEvent"] : CloseEventP;
|
|
34
|
+
|
|
35
|
+
export { CloseEventE as CloseEvent, CloseEventP };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EventP, Event_getEtField } from './EventP.js';
|
|
2
|
+
import { g, checkArgsLength, polyfill } from './isPolyfill.js';
|
|
3
|
+
|
|
4
|
+
const dispatched = 1;
|
|
5
|
+
/** @internal */
|
|
6
|
+
const state = Symbol( /* "CustomEventState" */);
|
|
7
|
+
class CustomEventP extends EventP {
|
|
8
|
+
constructor(type, eventInitDict) {
|
|
9
|
+
var _a;
|
|
10
|
+
super(type, eventInitDict);
|
|
11
|
+
this[state] = new CustomEventState();
|
|
12
|
+
this[state].detail = (_a = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.detail) !== null && _a !== void 0 ? _a : null;
|
|
13
|
+
}
|
|
14
|
+
get detail() { return this[state].detail; }
|
|
15
|
+
initCustomEvent(...args) {
|
|
16
|
+
const [type, bubbles, cancelable, detail] = args;
|
|
17
|
+
checkArgsLength(args, 1, "CustomEvent", "initCustomEvent");
|
|
18
|
+
if (Event_getEtField(this, dispatched))
|
|
19
|
+
return;
|
|
20
|
+
this.initEvent(type, bubbles, cancelable);
|
|
21
|
+
this[state].detail = detail !== null && detail !== void 0 ? detail : null;
|
|
22
|
+
}
|
|
23
|
+
/** @internal */ toString() { return "[object CustomEvent]"; }
|
|
24
|
+
/** @internal */ get [Symbol.toStringTag]() { return "CustomEvent"; }
|
|
25
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["CustomEvent", "Event"] }; }
|
|
26
|
+
}
|
|
27
|
+
/** @internal */
|
|
28
|
+
class CustomEventState {
|
|
29
|
+
}
|
|
30
|
+
const CustomEventE = g["EventTarget"] ? g["CustomEvent"] : CustomEventP;
|
|
31
|
+
|
|
32
|
+
export { CustomEventE as CustomEvent, CustomEventP };
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { g, checkArgsLength, polyfill } from './isPolyfill.js';
|
|
2
|
+
|
|
3
|
+
var _a, _b, _c, _d, _e;
|
|
4
|
+
/** @internal */ const state = Symbol( /* "EventState" */);
|
|
5
|
+
class EventP {
|
|
6
|
+
static get NONE() { return 0; }
|
|
7
|
+
static get CAPTURING_PHASE() { return 1; }
|
|
8
|
+
static get AT_TARGET() { return 2; }
|
|
9
|
+
static get BUBBLING_PHASE() { return 3; }
|
|
10
|
+
constructor(...args) {
|
|
11
|
+
const [type, eventInitDict] = args;
|
|
12
|
+
checkArgsLength(args, 1, new.target.name);
|
|
13
|
+
this[state] = new EventState();
|
|
14
|
+
const s = this[state];
|
|
15
|
+
s.type = "" + type;
|
|
16
|
+
s.bubbles = !!(eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.bubbles);
|
|
17
|
+
s.cancelable = !!(eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.cancelable);
|
|
18
|
+
s.composed = !!(eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.composed);
|
|
19
|
+
Object.defineProperty(this, "isTrusted", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: (function isTrusted() { return this[state][_isTrusted]; }).bind(this),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
get type() { return this[state].type; }
|
|
25
|
+
get bubbles() { return this[state].bubbles; }
|
|
26
|
+
get cancelable() { return this[state].cancelable; }
|
|
27
|
+
get composed() { return this[state].composed; }
|
|
28
|
+
get target() { return this[state].target; }
|
|
29
|
+
get currentTarget() { return this[state].currentTarget; }
|
|
30
|
+
get eventPhase() { return this[state].eventPhase; }
|
|
31
|
+
get NONE() { return 0; }
|
|
32
|
+
get CAPTURING_PHASE() { return 1; }
|
|
33
|
+
get AT_TARGET() { return 2; }
|
|
34
|
+
get BUBBLING_PHASE() { return 3; }
|
|
35
|
+
get srcElement() { return this[state].target; }
|
|
36
|
+
get cancelBubble() { return this[state].cancelBubble; }
|
|
37
|
+
set cancelBubble(value) { this[state].cancelBubble = !!value; }
|
|
38
|
+
get defaultPrevented() { return this[state].defaultPrevented; }
|
|
39
|
+
get returnValue() { return this[state].returnValue; }
|
|
40
|
+
set returnValue(value) { if (!value) {
|
|
41
|
+
this.preventDefault();
|
|
42
|
+
} }
|
|
43
|
+
get timeStamp() { return this[state].timeStamp; }
|
|
44
|
+
composedPath() {
|
|
45
|
+
let path = !!this.target ? [this.target] : [];
|
|
46
|
+
if (!!this.currentTarget && this.currentTarget !== this.target)
|
|
47
|
+
path.push(this.currentTarget);
|
|
48
|
+
return path;
|
|
49
|
+
}
|
|
50
|
+
initEvent(...args) {
|
|
51
|
+
const [type, bubbles, cancelable] = args;
|
|
52
|
+
checkArgsLength(args, 1, "Event", "initEvent");
|
|
53
|
+
const s = this[state];
|
|
54
|
+
if (s[_dispatched])
|
|
55
|
+
return;
|
|
56
|
+
s.type = "" + type;
|
|
57
|
+
s.bubbles = !!bubbles;
|
|
58
|
+
s.cancelable = !!cancelable;
|
|
59
|
+
}
|
|
60
|
+
preventDefault() {
|
|
61
|
+
const s = this[state];
|
|
62
|
+
if (s[_passive]) {
|
|
63
|
+
console.warn(`Ignoring 'preventDefault()' call on event of type '${this.type}' from a listener registered as 'passive'.`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (this.cancelable) {
|
|
67
|
+
s[_preventDefaultCalled] = true;
|
|
68
|
+
s.defaultPrevented = true;
|
|
69
|
+
s.returnValue = false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
stopImmediatePropagation() {
|
|
73
|
+
this[state][_stopImmediatePropagationCalled] = true;
|
|
74
|
+
this.cancelBubble = true;
|
|
75
|
+
}
|
|
76
|
+
stopPropagation() {
|
|
77
|
+
this.cancelBubble = true;
|
|
78
|
+
}
|
|
79
|
+
/** @internal */ toString() { return "[object Event]"; }
|
|
80
|
+
/** @internal */ get [Symbol.toStringTag]() { return "Event"; }
|
|
81
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["Event"] }; }
|
|
82
|
+
}
|
|
83
|
+
/** @internal */ const _timeStamp = (new Date()).getTime();
|
|
84
|
+
/** @internal */ const _isTrusted = Symbol();
|
|
85
|
+
/** @internal */ const _passive = Symbol();
|
|
86
|
+
/** @internal */ const _dispatched = Symbol();
|
|
87
|
+
/** @internal */ const _preventDefaultCalled = Symbol();
|
|
88
|
+
/** @internal */ const _stopImmediatePropagationCalled = Symbol();
|
|
89
|
+
/** @internal */
|
|
90
|
+
class EventState {
|
|
91
|
+
constructor() {
|
|
92
|
+
this.type = "";
|
|
93
|
+
this.bubbles = false;
|
|
94
|
+
this.cancelable = false;
|
|
95
|
+
this.composed = false;
|
|
96
|
+
this.target = null;
|
|
97
|
+
this.currentTarget = null;
|
|
98
|
+
this.eventPhase = 0 /* NONE */;
|
|
99
|
+
this.cancelBubble = false;
|
|
100
|
+
this.defaultPrevented = false;
|
|
101
|
+
this.returnValue = true;
|
|
102
|
+
this.timeStamp = (new Date()).getTime() - _timeStamp;
|
|
103
|
+
this[_a] = false;
|
|
104
|
+
this[_b] = false;
|
|
105
|
+
this[_c] = false;
|
|
106
|
+
this[_d] = false;
|
|
107
|
+
this[_e] = false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
_a = _isTrusted, _b = _passive, _c = _dispatched, _d = _preventDefaultCalled, _e = _stopImmediatePropagationCalled;
|
|
111
|
+
/** @internal */
|
|
112
|
+
function Event_setTrusted(event, isTrusted) {
|
|
113
|
+
Object.defineProperty(event[state], _isTrusted, {
|
|
114
|
+
value: isTrusted,
|
|
115
|
+
writable: true,
|
|
116
|
+
enumerable: true,
|
|
117
|
+
configurable: true,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
const passive = 0;
|
|
121
|
+
const dispatched = 1;
|
|
122
|
+
const preventDefaultCalled = 2;
|
|
123
|
+
const stopImmediatePropagationCalled = 3;
|
|
124
|
+
/** @internal */
|
|
125
|
+
function Event_getEtField(event, field) {
|
|
126
|
+
const s = event[state];
|
|
127
|
+
switch (field) {
|
|
128
|
+
case passive:
|
|
129
|
+
return s[_passive];
|
|
130
|
+
case dispatched:
|
|
131
|
+
return s[_dispatched];
|
|
132
|
+
case preventDefaultCalled:
|
|
133
|
+
return s[_preventDefaultCalled];
|
|
134
|
+
case stopImmediatePropagationCalled:
|
|
135
|
+
return s[_stopImmediatePropagationCalled];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** @internal */
|
|
139
|
+
function Event_setEtField(event, field, value) {
|
|
140
|
+
const s = event[state];
|
|
141
|
+
switch (field) {
|
|
142
|
+
case passive:
|
|
143
|
+
s[_passive] = value;
|
|
144
|
+
break;
|
|
145
|
+
case dispatched:
|
|
146
|
+
s[_dispatched] = value;
|
|
147
|
+
break;
|
|
148
|
+
case preventDefaultCalled:
|
|
149
|
+
s[_preventDefaultCalled] = value;
|
|
150
|
+
break;
|
|
151
|
+
case stopImmediatePropagationCalled:
|
|
152
|
+
s[_stopImmediatePropagationCalled] = value;
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** @internal */
|
|
157
|
+
function createInnerEvent(target, type, eventInitDict, isTrusted = true) {
|
|
158
|
+
let event = new EventP(type, eventInitDict);
|
|
159
|
+
event[state].target = target;
|
|
160
|
+
event[state][_isTrusted] = isTrusted;
|
|
161
|
+
return event;
|
|
162
|
+
}
|
|
163
|
+
const EventE = g["EventTarget"] ? g["Event"] : EventP;
|
|
164
|
+
|
|
165
|
+
export { EventE as Event, EventP, Event_getEtField, Event_setEtField, Event_setTrusted, createInnerEvent, state as eventState };
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { EventP, Event_setTrusted, eventState as state$1, Event_setEtField, Event_getEtField } from './EventP.js';
|
|
2
|
+
import { g, checkArgsLength, isPolyfillType, polyfill } from './isPolyfill.js';
|
|
3
|
+
|
|
4
|
+
var _a;
|
|
5
|
+
const passive = 0;
|
|
6
|
+
const dispatched = 1;
|
|
7
|
+
const preventDefaultCalled = 2;
|
|
8
|
+
const stopImmediatePropagationCalled = 3;
|
|
9
|
+
/** @internal */ const state = Symbol( /* "EventTargetState" */);
|
|
10
|
+
class EventTargetP {
|
|
11
|
+
constructor() {
|
|
12
|
+
this[state] = new EventTargetState(this);
|
|
13
|
+
this[state].name = new.target.name;
|
|
14
|
+
}
|
|
15
|
+
addEventListener(...args) {
|
|
16
|
+
const [type, callback, options] = args;
|
|
17
|
+
checkArgsLength(args, 2, this[state].name, "addEventListener");
|
|
18
|
+
if (typeof callback !== "function" && typeof callback !== "object" && typeof callback !== "undefined") {
|
|
19
|
+
throw new TypeError(`Failed to execute 'addEventListener' on '${this[state].name}': parameter 2 is not of type 'Object'.`);
|
|
20
|
+
}
|
|
21
|
+
const s = this[state];
|
|
22
|
+
const executor = new Executor(type, callback);
|
|
23
|
+
executor.options.capture = typeof options === "boolean" ? options : !!(options === null || options === void 0 ? void 0 : options.capture);
|
|
24
|
+
if (!s[_executors].some(x => x.equals(executor))) {
|
|
25
|
+
if (options && typeof options === "object") {
|
|
26
|
+
const { once, passive, signal } = options;
|
|
27
|
+
executor.options.once = !!once;
|
|
28
|
+
executor.options.passive = !!passive;
|
|
29
|
+
if (signal && isPolyfillType("EventTarget", signal)) {
|
|
30
|
+
executor.options.signal = signal;
|
|
31
|
+
reply(this, signal, executor);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
s[_executors].push(executor);
|
|
35
|
+
const f = (v) => !!v.options.capture ? 0 : 1;
|
|
36
|
+
s[_executors] = s[_executors].sort((a, b) => f(a) - f(b));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
dispatchEvent(...args) {
|
|
40
|
+
const [event] = args;
|
|
41
|
+
checkArgsLength(args, 1, this[state].name, "dispatchEvent");
|
|
42
|
+
if (!(event instanceof EventP)) {
|
|
43
|
+
throw new TypeError(`Failed to execute 'dispatchEvent' on '${this[state].name}': parameter 1 is not of type 'Event'.`);
|
|
44
|
+
}
|
|
45
|
+
Event_setTrusted(event, false);
|
|
46
|
+
event[state$1].target = this;
|
|
47
|
+
return EventTarget_fire(this, event);
|
|
48
|
+
}
|
|
49
|
+
removeEventListener(...args) {
|
|
50
|
+
const [type, callback, options] = args;
|
|
51
|
+
checkArgsLength(args, 2, this[state].name, "removeEventListener");
|
|
52
|
+
if (typeof callback !== "function" && typeof callback !== "object" && typeof callback !== "undefined") {
|
|
53
|
+
throw new TypeError(`Failed to execute 'removeEventListener' on '${this[state].name}': parameter 2 is not of type 'Object'.`);
|
|
54
|
+
}
|
|
55
|
+
const s = this[state];
|
|
56
|
+
const executor = new Executor(type, callback);
|
|
57
|
+
executor.options.capture = typeof options === "boolean" ? options : !!(options === null || options === void 0 ? void 0 : options.capture);
|
|
58
|
+
if (s[_executors].some(x => x.equals(executor))) {
|
|
59
|
+
s[_executors] = s[_executors].filter(x => !x.equals(executor));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** @internal */ toString() { return "[object EventTarget]"; }
|
|
63
|
+
/** @internal */ get [Symbol.toStringTag]() { return "EventTarget"; }
|
|
64
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["EventTarget"] }; }
|
|
65
|
+
}
|
|
66
|
+
/** @internal */
|
|
67
|
+
const _executors = Symbol();
|
|
68
|
+
/** @internal */
|
|
69
|
+
class EventTargetState {
|
|
70
|
+
constructor(target) {
|
|
71
|
+
this.name = "EventTarget";
|
|
72
|
+
this[_a] = [];
|
|
73
|
+
this.target = target;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
_a = _executors;
|
|
77
|
+
/** @internal */
|
|
78
|
+
function EventTarget_fire(target, event) {
|
|
79
|
+
const s = target[state];
|
|
80
|
+
const evs = event[state$1];
|
|
81
|
+
if (!event.target)
|
|
82
|
+
evs.target = target;
|
|
83
|
+
evs.currentTarget = target;
|
|
84
|
+
evs.eventPhase = 2 /* AT_TARGET */;
|
|
85
|
+
Event_setEtField(event, dispatched, true);
|
|
86
|
+
let onceIndexes = [];
|
|
87
|
+
for (let i = 0; i < s[_executors].length; ++i) {
|
|
88
|
+
if (Event_getEtField(event, stopImmediatePropagationCalled))
|
|
89
|
+
break;
|
|
90
|
+
let executor = s[_executors][i];
|
|
91
|
+
if (executor.type !== event.type)
|
|
92
|
+
continue;
|
|
93
|
+
if (executor.options.once)
|
|
94
|
+
onceIndexes.push(i);
|
|
95
|
+
Event_setEtField(event, passive, !!executor.options.passive);
|
|
96
|
+
try {
|
|
97
|
+
let cb = executor.callback;
|
|
98
|
+
if (typeof cb === "function")
|
|
99
|
+
cb.call(target, event);
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
console.error(e);
|
|
103
|
+
}
|
|
104
|
+
Event_setEtField(event, passive, false);
|
|
105
|
+
}
|
|
106
|
+
if (onceIndexes.length > 0) {
|
|
107
|
+
s[_executors] = s[_executors].reduce((acc, cur, index) => {
|
|
108
|
+
if (onceIndexes.indexOf(index) === -1)
|
|
109
|
+
acc.push(cur);
|
|
110
|
+
return acc;
|
|
111
|
+
}, []);
|
|
112
|
+
}
|
|
113
|
+
evs.currentTarget = null;
|
|
114
|
+
evs.eventPhase = 0 /* NONE */;
|
|
115
|
+
Event_setEtField(event, dispatched, false);
|
|
116
|
+
return !(event.cancelable && Event_getEtField(event, preventDefaultCalled));
|
|
117
|
+
}
|
|
118
|
+
function reply(target, signal, executor) {
|
|
119
|
+
const s = target[state];
|
|
120
|
+
const onAbort = () => {
|
|
121
|
+
s[_executors] = s[_executors].filter(x => !x.equals(executor));
|
|
122
|
+
signal.removeEventListener("abort", onAbort);
|
|
123
|
+
};
|
|
124
|
+
signal.addEventListener("abort", onAbort);
|
|
125
|
+
}
|
|
126
|
+
/** @internal */
|
|
127
|
+
class Executor {
|
|
128
|
+
constructor(type, callback) {
|
|
129
|
+
this.options = {};
|
|
130
|
+
this.type = "" + type;
|
|
131
|
+
this.callback = extract(callback);
|
|
132
|
+
}
|
|
133
|
+
equals(executor) {
|
|
134
|
+
return Object.is(this.type, executor.type) && Object.is(this.callback, executor.callback)
|
|
135
|
+
&& Object.is(this.options.capture, executor.options.capture);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function extract(cb) {
|
|
139
|
+
if (typeof cb === "function") {
|
|
140
|
+
return cb;
|
|
141
|
+
}
|
|
142
|
+
else if (isEventListenerObject(cb)) {
|
|
143
|
+
return cb.handleEvent;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
return cb;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function isEventListenerObject(cb) {
|
|
150
|
+
return !!cb && typeof cb === "object" && "handleEvent" in cb && typeof cb.handleEvent === "function";
|
|
151
|
+
}
|
|
152
|
+
/** @internal */
|
|
153
|
+
function attachFn(target, type, cb, listener) {
|
|
154
|
+
if (typeof cb === "function") {
|
|
155
|
+
target.addEventListener(type, listener);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
target.removeEventListener(type, listener);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** @internal */
|
|
162
|
+
function executeFn(target, cb, ev) {
|
|
163
|
+
if (typeof cb === "function")
|
|
164
|
+
cb.call(target, ev);
|
|
165
|
+
}
|
|
166
|
+
const EventTargetE = g["EventTarget"] || EventTargetP;
|
|
167
|
+
|
|
168
|
+
export { EventTargetE as EventTarget, EventTargetP, EventTargetState, EventTarget_fire, attachFn, state as eventTargetState, executeFn };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BlobP } from './BlobP.js';
|
|
2
|
+
import { g, checkArgsLength, polyfill } from './isPolyfill.js';
|
|
3
|
+
import './TextEncoderP.js';
|
|
4
|
+
import './TextDecoderP.js';
|
|
5
|
+
|
|
6
|
+
/** @internal */
|
|
7
|
+
const state = Symbol( /* "FileState" */);
|
|
8
|
+
class FileP extends BlobP {
|
|
9
|
+
constructor(...args) {
|
|
10
|
+
const [fileBits, fileName, options] = args;
|
|
11
|
+
checkArgsLength(args, 2, "File");
|
|
12
|
+
super(fileBits, options);
|
|
13
|
+
this[state] = new FileState();
|
|
14
|
+
this[state].lastModified = +((options === null || options === void 0 ? void 0 : options.lastModified) ? new Date(options.lastModified) : new Date()) || 0;
|
|
15
|
+
this[state].name = "" + fileName;
|
|
16
|
+
}
|
|
17
|
+
get lastModified() { return this[state].lastModified; }
|
|
18
|
+
get name() { return this[state].name; }
|
|
19
|
+
get webkitRelativePath() { return ""; }
|
|
20
|
+
/** @internal */ toString() { return "[object File]"; }
|
|
21
|
+
/** @internal */ get [Symbol.toStringTag]() { return "File"; }
|
|
22
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["File", "Blob"] }; }
|
|
23
|
+
}
|
|
24
|
+
/** @internal */
|
|
25
|
+
class FileState {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.lastModified = 0;
|
|
28
|
+
this.name = "";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const FileE = g["Blob"] ? g["File"] : FileP;
|
|
32
|
+
|
|
33
|
+
export { FileE as File, FileP };
|