mphttpx 1.1.0 → 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/README.zh-CN.md +982 -0
- 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 +33 -37
- package/package.json +7 -9
- package/dist/index.cjs.js +0 -3291
- package/dist/index.cjs.min.js +0 -1
- package/dist/index.esm.js +0 -3251
- package/dist/index.esm.min.js +0 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { EventTargetP, attachFn, executeFn } from './EventTargetP.js';
|
|
2
|
+
import { emitProcessEvent } from './ProgressEventP.js';
|
|
3
|
+
import { Blob_toUint8Array, Uint8Array_toBase64, decode } from './BlobP.js';
|
|
4
|
+
import { g, MPException, polyfill, checkArgsLength, isPolyfillType } from './isPolyfill.js';
|
|
5
|
+
import './EventP.js';
|
|
6
|
+
import './TextEncoderP.js';
|
|
7
|
+
import './TextDecoderP.js';
|
|
8
|
+
|
|
9
|
+
var _a;
|
|
10
|
+
/** @internal */
|
|
11
|
+
const state = Symbol( /* "FileReaderState" */);
|
|
12
|
+
class FileReaderP extends EventTargetP {
|
|
13
|
+
static get EMPTY() { return 0; }
|
|
14
|
+
static get LOADING() { return 1; }
|
|
15
|
+
static get DONE() { return 2; }
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
this[state] = new FileReaderState(this);
|
|
19
|
+
}
|
|
20
|
+
get readyState() { return this[state].readyState; }
|
|
21
|
+
get result() { return this[state].result; }
|
|
22
|
+
get EMPTY() { return 0; }
|
|
23
|
+
get LOADING() { return 1; }
|
|
24
|
+
get DONE() { return 2; }
|
|
25
|
+
get error() { return this[state].error; }
|
|
26
|
+
abort() {
|
|
27
|
+
if (this.readyState === 1 /* LOADING */) {
|
|
28
|
+
const s = this[state];
|
|
29
|
+
s.readyState = 2 /* DONE */;
|
|
30
|
+
s.result = null;
|
|
31
|
+
s.error = new MPException("An ongoing operation was aborted, typically with a call to abort().", "AbortError");
|
|
32
|
+
emitProcessEvent(this, "abort");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
readAsArrayBuffer(...args) {
|
|
36
|
+
read(this, "readAsArrayBuffer", args, blob => {
|
|
37
|
+
this[state].result = Blob_toUint8Array(blob).buffer.slice(0);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
readAsBinaryString(...args) {
|
|
41
|
+
read(this, "readAsBinaryString", args, blob => {
|
|
42
|
+
let str = [];
|
|
43
|
+
let buf = Blob_toUint8Array(blob);
|
|
44
|
+
for (let i = 0; i < buf.length; ++i) {
|
|
45
|
+
let char = buf[i];
|
|
46
|
+
str.push(String.fromCharCode(char));
|
|
47
|
+
}
|
|
48
|
+
this[state].result = str.join("");
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
readAsDataURL(...args) {
|
|
52
|
+
read(this, "readAsDataURL", args, blob => {
|
|
53
|
+
this[state].result = "data:" + (blob.type || "application/octet-stream") + ";base64," + Uint8Array_toBase64(Blob_toUint8Array(blob));
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
readAsText(...args) {
|
|
57
|
+
const encoding = args.length > 1 ? args[1] : undefined;
|
|
58
|
+
read(this, "readAsText", args, blob => {
|
|
59
|
+
if (encoding !== undefined) {
|
|
60
|
+
let _encoding = "" + encoding;
|
|
61
|
+
if (["utf-8", "utf8", "unicode-1-1-utf-8"].indexOf(_encoding.toLowerCase()) === -1) {
|
|
62
|
+
console.error(`TypeError: Failed to execute 'readAsText' on 'FileReader': encoding ('${_encoding}') not implemented.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this[state].result = decode(Blob_toUint8Array(blob));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
get onabort() { return this[state].onabort; }
|
|
69
|
+
set onabort(value) { this[state].onabort = value; attach(this, "abort"); }
|
|
70
|
+
get onerror() { return this[state].onerror; }
|
|
71
|
+
set onerror(value) { this[state].onerror = value; attach(this, "error"); }
|
|
72
|
+
get onload() { return this[state].onload; }
|
|
73
|
+
set onload(value) { this[state].onload = value; attach(this, "load"); }
|
|
74
|
+
get onloadend() { return this[state].onloadend; }
|
|
75
|
+
set onloadend(value) { this[state].onloadend = value; attach(this, "loadend"); }
|
|
76
|
+
get onloadstart() { return this[state].onloadstart; }
|
|
77
|
+
set onloadstart(value) { this[state].onloadstart = value; attach(this, "loadstart"); }
|
|
78
|
+
get onprogress() { return this[state].onprogress; }
|
|
79
|
+
set onprogress(value) { this[state].onprogress = value; attach(this, "progress"); }
|
|
80
|
+
/** @internal */ toString() { return "[object FileReader]"; }
|
|
81
|
+
/** @internal */ get [Symbol.toStringTag]() { return "FileReader"; }
|
|
82
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["FileReader", "EventTarget"] }; }
|
|
83
|
+
}
|
|
84
|
+
/** @internal */
|
|
85
|
+
const _handlers = Symbol();
|
|
86
|
+
/** @internal */
|
|
87
|
+
class FileReaderState {
|
|
88
|
+
constructor(target) {
|
|
89
|
+
this.readyState = 0 /* EMPTY */;
|
|
90
|
+
this.result = null;
|
|
91
|
+
this.error = null;
|
|
92
|
+
this[_a] = getHandlers(this);
|
|
93
|
+
this.onabort = null;
|
|
94
|
+
this.onerror = null;
|
|
95
|
+
this.onload = null;
|
|
96
|
+
this.onloadend = null;
|
|
97
|
+
this.onloadstart = null;
|
|
98
|
+
this.onprogress = null;
|
|
99
|
+
this.target = target;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
_a = _handlers;
|
|
103
|
+
function read(reader, kind, args, setResult) {
|
|
104
|
+
const [blob] = args;
|
|
105
|
+
checkArgsLength(args, 1, "FileReader", kind);
|
|
106
|
+
if (!isPolyfillType("Blob", blob)) {
|
|
107
|
+
throw new TypeError("Failed to execute '" + kind + "' on 'FileReader': parameter 1 is not of type 'Blob'.");
|
|
108
|
+
}
|
|
109
|
+
const s = reader[state];
|
|
110
|
+
s.error = null;
|
|
111
|
+
s.readyState = 1 /* LOADING */;
|
|
112
|
+
emitProcessEvent(s.target, "loadstart", 0, blob.size);
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
if (s.readyState === 1 /* LOADING */) {
|
|
115
|
+
s.readyState = 2 /* DONE */;
|
|
116
|
+
try {
|
|
117
|
+
setResult(blob);
|
|
118
|
+
emitProcessEvent(s.target, "load", blob.size, blob.size);
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
s.result = null;
|
|
122
|
+
s.error = e;
|
|
123
|
+
emitProcessEvent(s.target, "error", 0, blob.size);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
emitProcessEvent(s.target, "loadend", !!s.result ? blob.size : 0, blob.size);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function attach(reader, type) {
|
|
130
|
+
const s = reader[state];
|
|
131
|
+
const fnName = ("on" + type);
|
|
132
|
+
const cb = s[fnName];
|
|
133
|
+
const listener = s[_handlers][fnName];
|
|
134
|
+
attachFn(reader, type, cb, listener);
|
|
135
|
+
}
|
|
136
|
+
function getHandlers(s) {
|
|
137
|
+
return {
|
|
138
|
+
onabort: (ev) => { executeFn(s.target, s.onabort, ev); },
|
|
139
|
+
onerror: (ev) => { executeFn(s.target, s.onerror, ev); },
|
|
140
|
+
onload: (ev) => { executeFn(s.target, s.onload, ev); },
|
|
141
|
+
onloadend: (ev) => { executeFn(s.target, s.onloadend, ev); },
|
|
142
|
+
onloadstart: (ev) => { executeFn(s.target, s.onloadstart, ev); },
|
|
143
|
+
onprogress: (ev) => { executeFn(s.target, s.onprogress, ev); },
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
const FileReaderE = g["Blob"] ? g["FileReader"] : FileReaderP;
|
|
147
|
+
|
|
148
|
+
export { FileReaderE as FileReader, FileReaderP };
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { BlobP } from './BlobP.js';
|
|
2
|
+
import { FileP } from './FileP.js';
|
|
3
|
+
import { g, polyfill, checkArgsLength, isPolyfillType, isObjectType } from './isPolyfill.js';
|
|
4
|
+
import './TextEncoderP.js';
|
|
5
|
+
import './TextDecoderP.js';
|
|
6
|
+
|
|
7
|
+
var _a;
|
|
8
|
+
/** @internal */ const state = Symbol( /* "FormDataState" */);
|
|
9
|
+
const checkArgsFn = (args, required, funcName) => { checkArgsLength(args, required, "FormData", funcName); };
|
|
10
|
+
class FormDataP {
|
|
11
|
+
constructor(form, submitter) {
|
|
12
|
+
if (submitter === undefined) {
|
|
13
|
+
if (form !== undefined) {
|
|
14
|
+
console.error("TypeError: Failed to construct 'FormData': parameter 1 not implemented.");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
if (submitter !== null) {
|
|
19
|
+
console.error("TypeError: Failed to construct 'FormData': parameter 1 and parameter 2 not implemented.");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
this[state] = new FormDataState();
|
|
23
|
+
}
|
|
24
|
+
append(...args) {
|
|
25
|
+
const [name, value, filename] = args;
|
|
26
|
+
checkArgsFn(args, 2, "append");
|
|
27
|
+
this[state][_formData].push(normalizeArgs(name, value, filename));
|
|
28
|
+
}
|
|
29
|
+
delete(...args) {
|
|
30
|
+
const [name] = args;
|
|
31
|
+
checkArgsFn(args, 1, "delete");
|
|
32
|
+
let _name = "" + name;
|
|
33
|
+
let index = -1;
|
|
34
|
+
let array = this[state][_formData];
|
|
35
|
+
let result = [];
|
|
36
|
+
for (let i = 0; i < array.length; ++i) {
|
|
37
|
+
let item = array[i];
|
|
38
|
+
if (item[0] === _name) {
|
|
39
|
+
index = i;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
result.push(item);
|
|
43
|
+
}
|
|
44
|
+
if (index > -1) {
|
|
45
|
+
this[state][_formData] = result;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
get(...args) {
|
|
49
|
+
const [name] = args;
|
|
50
|
+
checkArgsFn(args, 1, "get");
|
|
51
|
+
let _name = "" + name;
|
|
52
|
+
let array = this[state][_formData];
|
|
53
|
+
for (let i = 0; i < array.length; ++i) {
|
|
54
|
+
let item = array[i];
|
|
55
|
+
if (item[0] === _name) {
|
|
56
|
+
return item[1];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
getAll(...args) {
|
|
62
|
+
const [name] = args;
|
|
63
|
+
checkArgsFn(args, 1, "getAll");
|
|
64
|
+
let _name = "" + name;
|
|
65
|
+
let array = this[state][_formData];
|
|
66
|
+
let result = [];
|
|
67
|
+
for (let i = 0; i < array.length; ++i) {
|
|
68
|
+
let item = array[i];
|
|
69
|
+
if (item[0] === _name) {
|
|
70
|
+
result.push(item[1]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
has(...args) {
|
|
76
|
+
const [name] = args;
|
|
77
|
+
checkArgsFn(args, 1, "has");
|
|
78
|
+
let _name = "" + name;
|
|
79
|
+
let array = this[state][_formData];
|
|
80
|
+
for (let i = 0; i < array.length; ++i) {
|
|
81
|
+
let item = array[i];
|
|
82
|
+
if (item[0] === _name) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
set(...args) {
|
|
89
|
+
const [name, value, filename] = args;
|
|
90
|
+
checkArgsFn(args, 2, "set");
|
|
91
|
+
let _name = "" + name;
|
|
92
|
+
let _args = normalizeArgs(name, value, filename);
|
|
93
|
+
let index = -1;
|
|
94
|
+
let array = this[state][_formData];
|
|
95
|
+
let result = [];
|
|
96
|
+
for (let i = 0; i < array.length; ++i) {
|
|
97
|
+
let item = array[i];
|
|
98
|
+
if (item[0] === _name) {
|
|
99
|
+
if (index === -1) {
|
|
100
|
+
index = i;
|
|
101
|
+
result.push(_args);
|
|
102
|
+
}
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
result.push(item);
|
|
106
|
+
}
|
|
107
|
+
if (index === -1) {
|
|
108
|
+
result.push(_args);
|
|
109
|
+
}
|
|
110
|
+
this[state][_formData] = result;
|
|
111
|
+
}
|
|
112
|
+
forEach(...args) {
|
|
113
|
+
const [callbackfn, thisArg] = args;
|
|
114
|
+
checkArgsFn(args, 1, "forEach");
|
|
115
|
+
if (typeof callbackfn !== "function") {
|
|
116
|
+
throw new TypeError("Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'.");
|
|
117
|
+
}
|
|
118
|
+
let array = this[state][_formData];
|
|
119
|
+
for (let i = 0; i < array.length; ++i) {
|
|
120
|
+
let item = array[i];
|
|
121
|
+
callbackfn.call(thisArg, item[1], item[0], thisArg);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
entries() {
|
|
125
|
+
return this[state][_formData].map(x => [x[0], x[1]]).values();
|
|
126
|
+
}
|
|
127
|
+
keys() {
|
|
128
|
+
return this[state][_formData].map(x => x[0]).values();
|
|
129
|
+
}
|
|
130
|
+
values() {
|
|
131
|
+
return this[state][_formData].map(x => x[1]).values();
|
|
132
|
+
}
|
|
133
|
+
[Symbol.iterator]() {
|
|
134
|
+
return this.entries();
|
|
135
|
+
}
|
|
136
|
+
/** @internal */ toString() { return "[object FormData]"; }
|
|
137
|
+
/** @internal */ get [Symbol.toStringTag]() { return "FormData"; }
|
|
138
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["FormData"] }; }
|
|
139
|
+
}
|
|
140
|
+
/** @internal */
|
|
141
|
+
const _formData = Symbol();
|
|
142
|
+
/** @internal */
|
|
143
|
+
class FormDataState {
|
|
144
|
+
constructor() {
|
|
145
|
+
this[_a] = [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
_a = _formData;
|
|
149
|
+
/** @internal */
|
|
150
|
+
function FormData_toBlob(formData) {
|
|
151
|
+
const boundary = "----formdata-mphttpx-" + Math.random();
|
|
152
|
+
const p = `--${boundary}\r\nContent-Disposition: form-data; name="`;
|
|
153
|
+
let chunks = [];
|
|
154
|
+
for (let i = 0; i < formData[state][_formData].length; ++i) {
|
|
155
|
+
let pair = formData[state][_formData][i];
|
|
156
|
+
let name = pair[0];
|
|
157
|
+
let value = pair[1];
|
|
158
|
+
if (typeof value === "string") {
|
|
159
|
+
chunks.push(p + escape(normalizeLinefeeds(name)) + `"\r\n\r\n${normalizeLinefeeds(value)}\r\n`);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
chunks.push(p + escape(normalizeLinefeeds(name)) + `"; filename="${escape(value.name)}"\r\nContent-Type: ${value.type || "application/octet-stream"}\r\n\r\n`, value, `\r\n`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
chunks.push(`--${boundary}--`);
|
|
166
|
+
return new BlobP(chunks, { type: "multipart/form-data; boundary=" + boundary });
|
|
167
|
+
}
|
|
168
|
+
function normalizeArgs(name, value, filename) {
|
|
169
|
+
if (isPolyfillType("Blob", value)) {
|
|
170
|
+
filename = filename !== undefined
|
|
171
|
+
? ("" + filename)
|
|
172
|
+
: typeof value.name === "string"
|
|
173
|
+
? value.name
|
|
174
|
+
: "blob";
|
|
175
|
+
if (value.name !== filename || isObjectType("Blob", value) || isPolyfillType("Blob", value, true)) {
|
|
176
|
+
value = new FileP([value], filename);
|
|
177
|
+
}
|
|
178
|
+
return ["" + name, value];
|
|
179
|
+
}
|
|
180
|
+
return ["" + name, "" + value];
|
|
181
|
+
}
|
|
182
|
+
// normalize line feeds for textarea
|
|
183
|
+
// https://html.spec.whatwg.org/multipage/form-elements.html#textarea-line-break-normalisation-transformation
|
|
184
|
+
function normalizeLinefeeds(value) {
|
|
185
|
+
return value.replace(/\r?\n|\r/g, "\r\n");
|
|
186
|
+
}
|
|
187
|
+
function escape(str) {
|
|
188
|
+
return str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22');
|
|
189
|
+
}
|
|
190
|
+
/** @internal */
|
|
191
|
+
function createFormDataFromBinaryText(text, boundary) {
|
|
192
|
+
const throwParseError = () => {
|
|
193
|
+
throw new TypeError("Could not parse content as FormData.");
|
|
194
|
+
};
|
|
195
|
+
if (typeof text !== "string" || text.trim() === "") {
|
|
196
|
+
throwParseError();
|
|
197
|
+
}
|
|
198
|
+
let firstLineEnd = text.indexOf("\r\n");
|
|
199
|
+
if (firstLineEnd === -1) {
|
|
200
|
+
throwParseError();
|
|
201
|
+
}
|
|
202
|
+
let _boundary = text.substring(2, firstLineEnd).trim();
|
|
203
|
+
if (!_boundary) {
|
|
204
|
+
throwParseError();
|
|
205
|
+
}
|
|
206
|
+
if (boundary !== undefined && boundary !== _boundary) {
|
|
207
|
+
throwParseError();
|
|
208
|
+
}
|
|
209
|
+
let parts = text.split(`--${_boundary}`).filter(part => {
|
|
210
|
+
let trimmed = part.trim();
|
|
211
|
+
return trimmed !== "" && trimmed !== "--";
|
|
212
|
+
});
|
|
213
|
+
if (parts.length === 0) {
|
|
214
|
+
throwParseError();
|
|
215
|
+
}
|
|
216
|
+
let formData = new FormDataP();
|
|
217
|
+
parts.forEach(part => {
|
|
218
|
+
let separatorIndex = part.indexOf("\r\n\r\n");
|
|
219
|
+
if (separatorIndex === -1) {
|
|
220
|
+
throwParseError();
|
|
221
|
+
}
|
|
222
|
+
let headerRaw = part.substring(0, separatorIndex).trim();
|
|
223
|
+
let nameMatch = headerRaw.match(/name="([^"]*)"/);
|
|
224
|
+
if (!nameMatch || nameMatch.length < 2) {
|
|
225
|
+
throwParseError();
|
|
226
|
+
}
|
|
227
|
+
let fieldName = nameMatch[1];
|
|
228
|
+
let filenameMatch = headerRaw.match(/filename="([^"]*)"/);
|
|
229
|
+
let contentRaw = part.substring(separatorIndex + 4);
|
|
230
|
+
if (!filenameMatch) {
|
|
231
|
+
formData.append(fieldName, contentRaw.replace(/^[\r\n]+|[\r\n]+$/g, ""));
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
let filename = filenameMatch[1] || "";
|
|
235
|
+
let contentTypeMatch = headerRaw.match(/Content-Type: ([^\r\n]+)/);
|
|
236
|
+
let mimeType = contentTypeMatch ? (contentTypeMatch[1] || "").trim() : "text/plain";
|
|
237
|
+
let content = contentRaw.replace(/\r\n/g, "");
|
|
238
|
+
formData.append(fieldName, new FileP([content], filename, { type: mimeType }));
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
return formData;
|
|
242
|
+
}
|
|
243
|
+
const FormDataE = g["FormData"] || FormDataP;
|
|
244
|
+
|
|
245
|
+
export { FormDataE as FormData, FormDataP, FormData_toBlob, createFormDataFromBinaryText };
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { g, isObjectType, isPolyfillType, polyfill, checkArgsLength } from './isPolyfill.js';
|
|
2
|
+
|
|
3
|
+
var _a, _b;
|
|
4
|
+
/** @internal */ const state = Symbol( /* "HeadersState" */);
|
|
5
|
+
const checkArgsFn = (args, required, funcName) => { checkArgsLength(args, required, "Headers", funcName); };
|
|
6
|
+
class HeadersP {
|
|
7
|
+
constructor(init) {
|
|
8
|
+
this[state] = new HeadersState();
|
|
9
|
+
if (init !== undefined) {
|
|
10
|
+
if (isObjectType("Headers", init) || isPolyfillType("Headers", init)) {
|
|
11
|
+
init.forEach((value, name) => { Headers_append(this, name, value); }, this);
|
|
12
|
+
}
|
|
13
|
+
else if (Array.isArray(init) || (init && typeof init === "object" && Symbol.iterator in init)) {
|
|
14
|
+
let _init = Array.isArray(init) ? init : Array.from(init);
|
|
15
|
+
_init.forEach(item => {
|
|
16
|
+
if (Array.isArray(item) || (item && typeof item === "object" && Symbol.iterator in item)) {
|
|
17
|
+
let pair = Array.isArray(item) ? item : Array.from(item);
|
|
18
|
+
if (pair.length === 2) {
|
|
19
|
+
this.append(pair[0], pair[1]);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
throw new TypeError("Failed to construct 'Headers': Invalid value");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
throw new TypeError("Failed to construct 'Headers': The provided value cannot be converted to a sequence.");
|
|
27
|
+
}
|
|
28
|
+
}, this);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
if (init && typeof init === "object") {
|
|
32
|
+
Object.getOwnPropertyNames(init).forEach(name => { this.append(name, init[name]); }, this);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
throw new TypeError("Failed to construct 'Headers': The provided value is not of type '(record<ByteString, ByteString> or sequence<sequence<ByteString>>)'.");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
this[state][_initialized] = true;
|
|
40
|
+
}
|
|
41
|
+
append(...args) {
|
|
42
|
+
const [name, value] = args;
|
|
43
|
+
checkArgsFn(args, 2, "append");
|
|
44
|
+
let _name = normalizeName(name, throwsFn(this[state][_initialized] ? "append" : ""));
|
|
45
|
+
let _value = normalizeValue(value);
|
|
46
|
+
Headers_append(this, _name, _value);
|
|
47
|
+
}
|
|
48
|
+
delete(...args) {
|
|
49
|
+
const [name] = args;
|
|
50
|
+
checkArgsFn(args, 1, "delete");
|
|
51
|
+
let _name = normalizeName(name, throwsFn("delete"));
|
|
52
|
+
delete this[state][_headersDict][_name];
|
|
53
|
+
}
|
|
54
|
+
get(...args) {
|
|
55
|
+
var _c;
|
|
56
|
+
const [name] = args;
|
|
57
|
+
checkArgsFn(args, 1, "get");
|
|
58
|
+
let _name = normalizeName(name, throwsFn("get"));
|
|
59
|
+
return (_c = this[state][_headersDict][_name]) !== null && _c !== void 0 ? _c : null;
|
|
60
|
+
}
|
|
61
|
+
getSetCookie() {
|
|
62
|
+
let value = this.get("Set-Cookie");
|
|
63
|
+
return value ? value.split(", ") : [];
|
|
64
|
+
}
|
|
65
|
+
has(...args) {
|
|
66
|
+
const [name] = args;
|
|
67
|
+
checkArgsFn(args, 1, "has");
|
|
68
|
+
let _name = normalizeName(name, throwsFn("has"));
|
|
69
|
+
return this[state][_headersDict].hasOwnProperty(_name);
|
|
70
|
+
}
|
|
71
|
+
set(...args) {
|
|
72
|
+
const [name, value] = args;
|
|
73
|
+
checkArgsFn(args, 2, "set");
|
|
74
|
+
let _name = normalizeName(name, throwsFn("set"));
|
|
75
|
+
let _value = normalizeValue(value);
|
|
76
|
+
this[state][_headersDict][_name] = _value;
|
|
77
|
+
}
|
|
78
|
+
forEach(...args) {
|
|
79
|
+
const [callbackfn, thisArg] = args;
|
|
80
|
+
checkArgsFn(args, 1, "forEach");
|
|
81
|
+
if (typeof callbackfn !== "function") {
|
|
82
|
+
throw new TypeError("Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'.");
|
|
83
|
+
}
|
|
84
|
+
let names = Object.getOwnPropertyNames(this[state][_headersDict]);
|
|
85
|
+
for (let i = 0; i < names.length; ++i) {
|
|
86
|
+
let name = names[i];
|
|
87
|
+
callbackfn.call(thisArg, this[state][_headersDict][name], name, this);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
entries() {
|
|
91
|
+
let array = [];
|
|
92
|
+
this.forEach((value, name) => { array.push([name, value]); });
|
|
93
|
+
return array.values();
|
|
94
|
+
}
|
|
95
|
+
keys() {
|
|
96
|
+
let array = [];
|
|
97
|
+
this.forEach((value, name) => { array.push(name); });
|
|
98
|
+
return array.values();
|
|
99
|
+
}
|
|
100
|
+
values() {
|
|
101
|
+
let array = [];
|
|
102
|
+
this.forEach((value, name) => { array.push(value); });
|
|
103
|
+
return array.values();
|
|
104
|
+
}
|
|
105
|
+
[Symbol.iterator]() {
|
|
106
|
+
return this.entries();
|
|
107
|
+
}
|
|
108
|
+
/** @internal */ toString() { return "[object Headers]"; }
|
|
109
|
+
/** @internal */ get [Symbol.toStringTag]() { return "Headers"; }
|
|
110
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["Headers"] }; }
|
|
111
|
+
}
|
|
112
|
+
/** @internal */ const _initialized = Symbol();
|
|
113
|
+
/** @internal */ const _headersDict = Symbol();
|
|
114
|
+
/** @internal */
|
|
115
|
+
class HeadersState {
|
|
116
|
+
constructor() {
|
|
117
|
+
this[_a] = false;
|
|
118
|
+
this[_b] = {};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
_a = _initialized, _b = _headersDict;
|
|
122
|
+
function Headers_append(headers, name, value) {
|
|
123
|
+
let dict = headers[state][_headersDict];
|
|
124
|
+
let oldValue = dict[name];
|
|
125
|
+
dict[name] = oldValue !== undefined ? `${oldValue}, ${value}` : value;
|
|
126
|
+
}
|
|
127
|
+
function throwsFn(kind) {
|
|
128
|
+
return () => {
|
|
129
|
+
throw new TypeError(`Failed to ${kind ? ("execute '" + kind + "' on") : "construct"} 'Headers': Invalid name`);
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** @internal */
|
|
133
|
+
function normalizeName(name, throwError) {
|
|
134
|
+
if (typeof name !== "string") {
|
|
135
|
+
name = "" + name;
|
|
136
|
+
}
|
|
137
|
+
if (throwError && (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === "")) {
|
|
138
|
+
throwError();
|
|
139
|
+
}
|
|
140
|
+
return name.toLowerCase();
|
|
141
|
+
}
|
|
142
|
+
/** @internal */
|
|
143
|
+
function normalizeValue(value) {
|
|
144
|
+
return typeof value === "string" ? value : ("" + value);
|
|
145
|
+
}
|
|
146
|
+
/** @internal */
|
|
147
|
+
function parseHeaders(rawHeaders) {
|
|
148
|
+
let headers = new HeadersP();
|
|
149
|
+
let preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, " ");
|
|
150
|
+
preProcessedHeaders
|
|
151
|
+
.split("\r")
|
|
152
|
+
.map(header => header.indexOf("\n") === 0 ? header.substring(1, header.length) : header)
|
|
153
|
+
.forEach(line => {
|
|
154
|
+
let parts = line.split(":");
|
|
155
|
+
let name = parts.shift().trim();
|
|
156
|
+
if (name) {
|
|
157
|
+
let value = parts.join(":").trim();
|
|
158
|
+
try {
|
|
159
|
+
headers.append(name, value);
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
console.warn(`SyntaxError: Response.headers: '${name}' is not a valid HTTP header field name.`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
return headers;
|
|
167
|
+
}
|
|
168
|
+
const HeadersE = g["Headers"] || HeadersP;
|
|
169
|
+
|
|
170
|
+
export { HeadersE as Headers, HeadersP, normalizeName, normalizeValue, parseHeaders };
|
|
@@ -0,0 +1,61 @@
|
|
|
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( /* "MessageEventState" */);
|
|
7
|
+
class MessageEventP extends EventP {
|
|
8
|
+
constructor(type, eventInitDict) {
|
|
9
|
+
var _a;
|
|
10
|
+
super(type, eventInitDict);
|
|
11
|
+
this[state] = new MessageEventState();
|
|
12
|
+
const s = this[state];
|
|
13
|
+
s.data = (_a = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.data) !== null && _a !== void 0 ? _a : null;
|
|
14
|
+
if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.origin) !== undefined)
|
|
15
|
+
s.origin = "" + eventInitDict.origin;
|
|
16
|
+
if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.lastEventId) !== undefined)
|
|
17
|
+
s.lastEventId = "" + eventInitDict.lastEventId;
|
|
18
|
+
if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.source) !== undefined)
|
|
19
|
+
s.source = eventInitDict.source;
|
|
20
|
+
if ((eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.ports) !== undefined)
|
|
21
|
+
s.ports = eventInitDict.ports;
|
|
22
|
+
}
|
|
23
|
+
get data() { return this[state].data; }
|
|
24
|
+
get lastEventId() { return this[state].lastEventId; }
|
|
25
|
+
get origin() { return this[state].origin; }
|
|
26
|
+
get ports() { return this[state].ports; }
|
|
27
|
+
get source() { return this[state].source; }
|
|
28
|
+
initMessageEvent(...args) {
|
|
29
|
+
const [type, bubbles, cancelable, data, origin, lastEventId, source, ports] = args;
|
|
30
|
+
checkArgsLength(args, 1, "MessageEvent", "initMessageEvent");
|
|
31
|
+
if (Event_getEtField(this, dispatched))
|
|
32
|
+
return;
|
|
33
|
+
this.initEvent(type, bubbles, cancelable);
|
|
34
|
+
const s = this[state];
|
|
35
|
+
s.data = data !== null && data !== void 0 ? data : null;
|
|
36
|
+
if (origin !== undefined)
|
|
37
|
+
s.origin = "" + origin;
|
|
38
|
+
if (lastEventId !== undefined)
|
|
39
|
+
s.lastEventId = "" + lastEventId;
|
|
40
|
+
if (source !== undefined)
|
|
41
|
+
s.source = source;
|
|
42
|
+
if (ports !== undefined)
|
|
43
|
+
s.ports = ports;
|
|
44
|
+
}
|
|
45
|
+
/** @internal */ toString() { return "[object MessageEvent]"; }
|
|
46
|
+
/** @internal */ get [Symbol.toStringTag]() { return "MessageEvent"; }
|
|
47
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["MessageEvent", "Event"] }; }
|
|
48
|
+
}
|
|
49
|
+
/** @internal */
|
|
50
|
+
class MessageEventState {
|
|
51
|
+
constructor() {
|
|
52
|
+
this.data = null;
|
|
53
|
+
this.lastEventId = "";
|
|
54
|
+
this.origin = "";
|
|
55
|
+
this.ports = [];
|
|
56
|
+
this.source = null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const MessageEventE = g["EventTarget"] ? g["MessageEvent"] : MessageEventP;
|
|
60
|
+
|
|
61
|
+
export { MessageEventE as MessageEvent, MessageEventP };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { g, polyfill } from './isPolyfill.js';
|
|
2
|
+
import { EventTarget_fire } from './EventTargetP.js';
|
|
3
|
+
import { EventP, eventState as state$1, Event_setTrusted } from './EventP.js';
|
|
4
|
+
|
|
5
|
+
/** @internal */
|
|
6
|
+
const state = Symbol( /* "ProgressEventState" */);
|
|
7
|
+
class ProgressEventP extends EventP {
|
|
8
|
+
constructor(type, eventInitDict) {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
super(type, eventInitDict);
|
|
11
|
+
this[state] = new ProgressEventState();
|
|
12
|
+
const s = this[state];
|
|
13
|
+
s.lengthComputable = !!(eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.lengthComputable);
|
|
14
|
+
s.loaded = Number((_a = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.loaded) !== null && _a !== void 0 ? _a : 0);
|
|
15
|
+
s.total = Number((_b = eventInitDict === null || eventInitDict === void 0 ? void 0 : eventInitDict.total) !== null && _b !== void 0 ? _b : 0);
|
|
16
|
+
let errField = "";
|
|
17
|
+
if (isNaN(s.loaded)) {
|
|
18
|
+
errField = "loaded";
|
|
19
|
+
}
|
|
20
|
+
if (isNaN(s.total)) {
|
|
21
|
+
errField = "total";
|
|
22
|
+
}
|
|
23
|
+
if (errField) {
|
|
24
|
+
throw new TypeError(`Failed to construct 'ProgressEvent': Failed to read the '${errField}' property from 'ProgressEventInit': The provided double value is non-finite.`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
get lengthComputable() { return getValue(this[state].lengthComputable); }
|
|
28
|
+
get loaded() { return getValue(this[state].loaded); }
|
|
29
|
+
get total() { return getValue(this[state].total); }
|
|
30
|
+
/** @internal */ toString() { return "[object ProgressEvent]"; }
|
|
31
|
+
/** @internal */ get [Symbol.toStringTag]() { return "ProgressEvent"; }
|
|
32
|
+
/** @internal */ get isPolyfill() { return { symbol: polyfill, hierarchy: ["ProgressEvent", "Event"] }; }
|
|
33
|
+
}
|
|
34
|
+
/** @internal */
|
|
35
|
+
class ProgressEventState {
|
|
36
|
+
constructor() {
|
|
37
|
+
this.lengthComputable = false;
|
|
38
|
+
this.loaded = 0;
|
|
39
|
+
this.total = 0;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function getValue(val) {
|
|
43
|
+
return typeof val === "function" ? val() : val;
|
|
44
|
+
}
|
|
45
|
+
function createInnerProgressEvent(target, type, { lengthComputable = false, loaded = 0, total = 0, } = {}) {
|
|
46
|
+
let event = new ProgressEventP(type);
|
|
47
|
+
event[state].lengthComputable = lengthComputable;
|
|
48
|
+
event[state].loaded = loaded;
|
|
49
|
+
event[state].total = total;
|
|
50
|
+
event[state$1].target = target;
|
|
51
|
+
Event_setTrusted(event, true);
|
|
52
|
+
return event;
|
|
53
|
+
}
|
|
54
|
+
/** @internal */
|
|
55
|
+
function emitProcessEvent(target, type, loaded = 0, total = 0) {
|
|
56
|
+
let event = createInnerProgressEvent(target, type, {
|
|
57
|
+
lengthComputable: () => { return getValue(total) > 0; },
|
|
58
|
+
loaded,
|
|
59
|
+
total,
|
|
60
|
+
});
|
|
61
|
+
EventTarget_fire(target, event);
|
|
62
|
+
}
|
|
63
|
+
const ProgressEventE = g["EventTarget"] ? g["ProgressEvent"] : ProgressEventP;
|
|
64
|
+
|
|
65
|
+
export { ProgressEventE as ProgressEvent, ProgressEventP, emitProcessEvent };
|