author | ymh <ymh.work@gmail.com> |
Mon, 08 Sep 2025 19:44:41 +0200 | |
changeset 23 | 417f20492bf7 |
parent 22 | 8c2e4d02f4ef |
permissions | -rw-r--r-- |
9 | 1 |
(function (global, factory) { |
2 |
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : |
|
3 |
typeof define === 'function' && define.amd ? define(['exports'], factory) : |
|
4 |
(factory((global.WHATWGFetch = {}))); |
|
5 |
}(this, (function (exports) { 'use strict'; |
|
6 |
||
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
7 |
/* eslint-disable no-prototype-builtins */ |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
8 |
var g = |
19 | 9 |
(typeof globalThis !== 'undefined' && globalThis) || |
10 |
(typeof self !== 'undefined' && self) || |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
11 |
// eslint-disable-next-line no-undef |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
12 |
(typeof global !== 'undefined' && global) || |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
13 |
{}; |
19 | 14 |
|
9 | 15 |
var support = { |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
16 |
searchParams: 'URLSearchParams' in g, |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
17 |
iterable: 'Symbol' in g && 'iterator' in Symbol, |
9 | 18 |
blob: |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
19 |
'FileReader' in g && |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
20 |
'Blob' in g && |
9 | 21 |
(function() { |
22 |
try { |
|
23 |
new Blob(); |
|
24 |
return true |
|
25 |
} catch (e) { |
|
26 |
return false |
|
27 |
} |
|
28 |
})(), |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
29 |
formData: 'FormData' in g, |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
30 |
arrayBuffer: 'ArrayBuffer' in g |
9 | 31 |
}; |
32 |
||
33 |
function isDataView(obj) { |
|
34 |
return obj && DataView.prototype.isPrototypeOf(obj) |
|
35 |
} |
|
36 |
||
37 |
if (support.arrayBuffer) { |
|
38 |
var viewClasses = [ |
|
39 |
'[object Int8Array]', |
|
40 |
'[object Uint8Array]', |
|
41 |
'[object Uint8ClampedArray]', |
|
42 |
'[object Int16Array]', |
|
43 |
'[object Uint16Array]', |
|
44 |
'[object Int32Array]', |
|
45 |
'[object Uint32Array]', |
|
46 |
'[object Float32Array]', |
|
47 |
'[object Float64Array]' |
|
48 |
]; |
|
49 |
||
50 |
var isArrayBufferView = |
|
51 |
ArrayBuffer.isView || |
|
52 |
function(obj) { |
|
53 |
return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 |
|
54 |
}; |
|
55 |
} |
|
56 |
||
57 |
function normalizeName(name) { |
|
58 |
if (typeof name !== 'string') { |
|
59 |
name = String(name); |
|
60 |
} |
|
19 | 61 |
if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === '') { |
62 |
throw new TypeError('Invalid character in header field name: "' + name + '"') |
|
9 | 63 |
} |
64 |
return name.toLowerCase() |
|
65 |
} |
|
66 |
||
67 |
function normalizeValue(value) { |
|
68 |
if (typeof value !== 'string') { |
|
69 |
value = String(value); |
|
70 |
} |
|
71 |
return value |
|
72 |
} |
|
73 |
||
74 |
// Build a destructive iterator for the value list |
|
75 |
function iteratorFor(items) { |
|
76 |
var iterator = { |
|
77 |
next: function() { |
|
78 |
var value = items.shift(); |
|
79 |
return {done: value === undefined, value: value} |
|
80 |
} |
|
81 |
}; |
|
82 |
||
83 |
if (support.iterable) { |
|
84 |
iterator[Symbol.iterator] = function() { |
|
85 |
return iterator |
|
86 |
}; |
|
87 |
} |
|
88 |
||
89 |
return iterator |
|
90 |
} |
|
91 |
||
92 |
function Headers(headers) { |
|
93 |
this.map = {}; |
|
94 |
||
95 |
if (headers instanceof Headers) { |
|
96 |
headers.forEach(function(value, name) { |
|
97 |
this.append(name, value); |
|
98 |
}, this); |
|
99 |
} else if (Array.isArray(headers)) { |
|
100 |
headers.forEach(function(header) { |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
101 |
if (header.length != 2) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
102 |
throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length) |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
103 |
} |
9 | 104 |
this.append(header[0], header[1]); |
105 |
}, this); |
|
106 |
} else if (headers) { |
|
107 |
Object.getOwnPropertyNames(headers).forEach(function(name) { |
|
108 |
this.append(name, headers[name]); |
|
109 |
}, this); |
|
110 |
} |
|
111 |
} |
|
112 |
||
113 |
Headers.prototype.append = function(name, value) { |
|
114 |
name = normalizeName(name); |
|
115 |
value = normalizeValue(value); |
|
116 |
var oldValue = this.map[name]; |
|
117 |
this.map[name] = oldValue ? oldValue + ', ' + value : value; |
|
118 |
}; |
|
119 |
||
120 |
Headers.prototype['delete'] = function(name) { |
|
121 |
delete this.map[normalizeName(name)]; |
|
122 |
}; |
|
123 |
||
124 |
Headers.prototype.get = function(name) { |
|
125 |
name = normalizeName(name); |
|
126 |
return this.has(name) ? this.map[name] : null |
|
127 |
}; |
|
128 |
||
129 |
Headers.prototype.has = function(name) { |
|
130 |
return this.map.hasOwnProperty(normalizeName(name)) |
|
131 |
}; |
|
132 |
||
133 |
Headers.prototype.set = function(name, value) { |
|
134 |
this.map[normalizeName(name)] = normalizeValue(value); |
|
135 |
}; |
|
136 |
||
137 |
Headers.prototype.forEach = function(callback, thisArg) { |
|
138 |
for (var name in this.map) { |
|
139 |
if (this.map.hasOwnProperty(name)) { |
|
140 |
callback.call(thisArg, this.map[name], name, this); |
|
141 |
} |
|
142 |
} |
|
143 |
}; |
|
144 |
||
145 |
Headers.prototype.keys = function() { |
|
146 |
var items = []; |
|
147 |
this.forEach(function(value, name) { |
|
148 |
items.push(name); |
|
149 |
}); |
|
150 |
return iteratorFor(items) |
|
151 |
}; |
|
152 |
||
153 |
Headers.prototype.values = function() { |
|
154 |
var items = []; |
|
155 |
this.forEach(function(value) { |
|
156 |
items.push(value); |
|
157 |
}); |
|
158 |
return iteratorFor(items) |
|
159 |
}; |
|
160 |
||
161 |
Headers.prototype.entries = function() { |
|
162 |
var items = []; |
|
163 |
this.forEach(function(value, name) { |
|
164 |
items.push([name, value]); |
|
165 |
}); |
|
166 |
return iteratorFor(items) |
|
167 |
}; |
|
168 |
||
169 |
if (support.iterable) { |
|
170 |
Headers.prototype[Symbol.iterator] = Headers.prototype.entries; |
|
171 |
} |
|
172 |
||
173 |
function consumed(body) { |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
174 |
if (body._noBody) return |
9 | 175 |
if (body.bodyUsed) { |
176 |
return Promise.reject(new TypeError('Already read')) |
|
177 |
} |
|
178 |
body.bodyUsed = true; |
|
179 |
} |
|
180 |
||
181 |
function fileReaderReady(reader) { |
|
182 |
return new Promise(function(resolve, reject) { |
|
183 |
reader.onload = function() { |
|
184 |
resolve(reader.result); |
|
185 |
}; |
|
186 |
reader.onerror = function() { |
|
187 |
reject(reader.error); |
|
188 |
}; |
|
189 |
}) |
|
190 |
} |
|
191 |
||
192 |
function readBlobAsArrayBuffer(blob) { |
|
193 |
var reader = new FileReader(); |
|
194 |
var promise = fileReaderReady(reader); |
|
195 |
reader.readAsArrayBuffer(blob); |
|
196 |
return promise |
|
197 |
} |
|
198 |
||
199 |
function readBlobAsText(blob) { |
|
200 |
var reader = new FileReader(); |
|
201 |
var promise = fileReaderReady(reader); |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
202 |
var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type); |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
203 |
var encoding = match ? match[1] : 'utf-8'; |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
204 |
reader.readAsText(blob, encoding); |
9 | 205 |
return promise |
206 |
} |
|
207 |
||
208 |
function readArrayBufferAsText(buf) { |
|
209 |
var view = new Uint8Array(buf); |
|
210 |
var chars = new Array(view.length); |
|
211 |
||
212 |
for (var i = 0; i < view.length; i++) { |
|
213 |
chars[i] = String.fromCharCode(view[i]); |
|
214 |
} |
|
215 |
return chars.join('') |
|
216 |
} |
|
217 |
||
218 |
function bufferClone(buf) { |
|
219 |
if (buf.slice) { |
|
220 |
return buf.slice(0) |
|
221 |
} else { |
|
222 |
var view = new Uint8Array(buf.byteLength); |
|
223 |
view.set(new Uint8Array(buf)); |
|
224 |
return view.buffer |
|
225 |
} |
|
226 |
} |
|
227 |
||
228 |
function Body() { |
|
229 |
this.bodyUsed = false; |
|
230 |
||
231 |
this._initBody = function(body) { |
|
19 | 232 |
/* |
233 |
fetch-mock wraps the Response object in an ES6 Proxy to |
|
234 |
provide useful test harness features such as flush. However, on |
|
235 |
ES5 browsers without fetch or Proxy support pollyfills must be used; |
|
236 |
the proxy-pollyfill is unable to proxy an attribute unless it exists |
|
237 |
on the object before the Proxy is created. This change ensures |
|
238 |
Response.bodyUsed exists on the instance, while maintaining the |
|
239 |
semantic of setting Request.bodyUsed in the constructor before |
|
240 |
_initBody is called. |
|
241 |
*/ |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
242 |
// eslint-disable-next-line no-self-assign |
19 | 243 |
this.bodyUsed = this.bodyUsed; |
9 | 244 |
this._bodyInit = body; |
245 |
if (!body) { |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
246 |
this._noBody = true; |
9 | 247 |
this._bodyText = ''; |
248 |
} else if (typeof body === 'string') { |
|
249 |
this._bodyText = body; |
|
250 |
} else if (support.blob && Blob.prototype.isPrototypeOf(body)) { |
|
251 |
this._bodyBlob = body; |
|
252 |
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) { |
|
253 |
this._bodyFormData = body; |
|
254 |
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { |
|
255 |
this._bodyText = body.toString(); |
|
256 |
} else if (support.arrayBuffer && support.blob && isDataView(body)) { |
|
257 |
this._bodyArrayBuffer = bufferClone(body.buffer); |
|
258 |
// IE 10-11 can't handle a DataView body. |
|
259 |
this._bodyInit = new Blob([this._bodyArrayBuffer]); |
|
260 |
} else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { |
|
261 |
this._bodyArrayBuffer = bufferClone(body); |
|
262 |
} else { |
|
263 |
this._bodyText = body = Object.prototype.toString.call(body); |
|
264 |
} |
|
265 |
||
266 |
if (!this.headers.get('content-type')) { |
|
267 |
if (typeof body === 'string') { |
|
268 |
this.headers.set('content-type', 'text/plain;charset=UTF-8'); |
|
269 |
} else if (this._bodyBlob && this._bodyBlob.type) { |
|
270 |
this.headers.set('content-type', this._bodyBlob.type); |
|
271 |
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { |
|
272 |
this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); |
|
273 |
} |
|
274 |
} |
|
275 |
}; |
|
276 |
||
277 |
if (support.blob) { |
|
278 |
this.blob = function() { |
|
279 |
var rejected = consumed(this); |
|
280 |
if (rejected) { |
|
281 |
return rejected |
|
282 |
} |
|
283 |
||
284 |
if (this._bodyBlob) { |
|
285 |
return Promise.resolve(this._bodyBlob) |
|
286 |
} else if (this._bodyArrayBuffer) { |
|
287 |
return Promise.resolve(new Blob([this._bodyArrayBuffer])) |
|
288 |
} else if (this._bodyFormData) { |
|
289 |
throw new Error('could not read FormData body as blob') |
|
290 |
} else { |
|
291 |
return Promise.resolve(new Blob([this._bodyText])) |
|
292 |
} |
|
293 |
}; |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
294 |
} |
9 | 295 |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
296 |
this.arrayBuffer = function() { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
297 |
if (this._bodyArrayBuffer) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
298 |
var isConsumed = consumed(this); |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
299 |
if (isConsumed) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
300 |
return isConsumed |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
301 |
} else if (ArrayBuffer.isView(this._bodyArrayBuffer)) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
302 |
return Promise.resolve( |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
303 |
this._bodyArrayBuffer.buffer.slice( |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
304 |
this._bodyArrayBuffer.byteOffset, |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
305 |
this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength |
19 | 306 |
) |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
307 |
) |
9 | 308 |
} else { |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
309 |
return Promise.resolve(this._bodyArrayBuffer) |
9 | 310 |
} |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
311 |
} else if (support.blob) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
312 |
return this.blob().then(readBlobAsArrayBuffer) |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
313 |
} else { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
314 |
throw new Error('could not read as ArrayBuffer') |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
315 |
} |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
316 |
}; |
9 | 317 |
|
318 |
this.text = function() { |
|
319 |
var rejected = consumed(this); |
|
320 |
if (rejected) { |
|
321 |
return rejected |
|
322 |
} |
|
323 |
||
324 |
if (this._bodyBlob) { |
|
325 |
return readBlobAsText(this._bodyBlob) |
|
326 |
} else if (this._bodyArrayBuffer) { |
|
327 |
return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) |
|
328 |
} else if (this._bodyFormData) { |
|
329 |
throw new Error('could not read FormData body as text') |
|
330 |
} else { |
|
331 |
return Promise.resolve(this._bodyText) |
|
332 |
} |
|
333 |
}; |
|
334 |
||
335 |
if (support.formData) { |
|
336 |
this.formData = function() { |
|
337 |
return this.text().then(decode) |
|
338 |
}; |
|
339 |
} |
|
340 |
||
341 |
this.json = function() { |
|
342 |
return this.text().then(JSON.parse) |
|
343 |
}; |
|
344 |
||
345 |
return this |
|
346 |
} |
|
347 |
||
348 |
// HTTP methods whose capitalization should be normalized |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
349 |
var methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE']; |
9 | 350 |
|
351 |
function normalizeMethod(method) { |
|
352 |
var upcased = method.toUpperCase(); |
|
353 |
return methods.indexOf(upcased) > -1 ? upcased : method |
|
354 |
} |
|
355 |
||
356 |
function Request(input, options) { |
|
19 | 357 |
if (!(this instanceof Request)) { |
358 |
throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.') |
|
359 |
} |
|
360 |
||
9 | 361 |
options = options || {}; |
362 |
var body = options.body; |
|
363 |
||
364 |
if (input instanceof Request) { |
|
365 |
if (input.bodyUsed) { |
|
366 |
throw new TypeError('Already read') |
|
367 |
} |
|
368 |
this.url = input.url; |
|
369 |
this.credentials = input.credentials; |
|
370 |
if (!options.headers) { |
|
371 |
this.headers = new Headers(input.headers); |
|
372 |
} |
|
373 |
this.method = input.method; |
|
374 |
this.mode = input.mode; |
|
375 |
this.signal = input.signal; |
|
376 |
if (!body && input._bodyInit != null) { |
|
377 |
body = input._bodyInit; |
|
378 |
input.bodyUsed = true; |
|
379 |
} |
|
380 |
} else { |
|
381 |
this.url = String(input); |
|
382 |
} |
|
383 |
||
384 |
this.credentials = options.credentials || this.credentials || 'same-origin'; |
|
385 |
if (options.headers || !this.headers) { |
|
386 |
this.headers = new Headers(options.headers); |
|
387 |
} |
|
388 |
this.method = normalizeMethod(options.method || this.method || 'GET'); |
|
389 |
this.mode = options.mode || this.mode || null; |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
390 |
this.signal = options.signal || this.signal || (function () { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
391 |
if ('AbortController' in g) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
392 |
var ctrl = new AbortController(); |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
393 |
return ctrl.signal; |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
394 |
} |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
395 |
}()); |
9 | 396 |
this.referrer = null; |
397 |
||
398 |
if ((this.method === 'GET' || this.method === 'HEAD') && body) { |
|
399 |
throw new TypeError('Body not allowed for GET or HEAD requests') |
|
400 |
} |
|
401 |
this._initBody(body); |
|
19 | 402 |
|
403 |
if (this.method === 'GET' || this.method === 'HEAD') { |
|
404 |
if (options.cache === 'no-store' || options.cache === 'no-cache') { |
|
405 |
// Search for a '_' parameter in the query string |
|
406 |
var reParamSearch = /([?&])_=[^&]*/; |
|
407 |
if (reParamSearch.test(this.url)) { |
|
408 |
// If it already exists then set the value with the current time |
|
409 |
this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime()); |
|
410 |
} else { |
|
411 |
// Otherwise add a new '_' parameter to the end with the current time |
|
412 |
var reQueryString = /\?/; |
|
413 |
this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime(); |
|
414 |
} |
|
415 |
} |
|
416 |
} |
|
9 | 417 |
} |
418 |
||
419 |
Request.prototype.clone = function() { |
|
420 |
return new Request(this, {body: this._bodyInit}) |
|
421 |
}; |
|
422 |
||
423 |
function decode(body) { |
|
424 |
var form = new FormData(); |
|
425 |
body |
|
426 |
.trim() |
|
427 |
.split('&') |
|
428 |
.forEach(function(bytes) { |
|
429 |
if (bytes) { |
|
430 |
var split = bytes.split('='); |
|
431 |
var name = split.shift().replace(/\+/g, ' '); |
|
432 |
var value = split.join('=').replace(/\+/g, ' '); |
|
433 |
form.append(decodeURIComponent(name), decodeURIComponent(value)); |
|
434 |
} |
|
435 |
}); |
|
436 |
return form |
|
437 |
} |
|
438 |
||
439 |
function parseHeaders(rawHeaders) { |
|
440 |
var headers = new Headers(); |
|
441 |
// Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space |
|
442 |
// https://tools.ietf.org/html/rfc7230#section-3.2 |
|
443 |
var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' '); |
|
19 | 444 |
// Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill |
445 |
// https://github.com/github/fetch/issues/748 |
|
446 |
// https://github.com/zloirock/core-js/issues/751 |
|
447 |
preProcessedHeaders |
|
448 |
.split('\r') |
|
449 |
.map(function(header) { |
|
450 |
return header.indexOf('\n') === 0 ? header.substr(1, header.length) : header |
|
451 |
}) |
|
452 |
.forEach(function(line) { |
|
453 |
var parts = line.split(':'); |
|
454 |
var key = parts.shift().trim(); |
|
455 |
if (key) { |
|
456 |
var value = parts.join(':').trim(); |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
457 |
try { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
458 |
headers.append(key, value); |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
459 |
} catch (error) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
460 |
console.warn('Response ' + error.message); |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
461 |
} |
19 | 462 |
} |
463 |
}); |
|
9 | 464 |
return headers |
465 |
} |
|
466 |
||
467 |
Body.call(Request.prototype); |
|
468 |
||
469 |
function Response(bodyInit, options) { |
|
19 | 470 |
if (!(this instanceof Response)) { |
471 |
throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.') |
|
472 |
} |
|
9 | 473 |
if (!options) { |
474 |
options = {}; |
|
475 |
} |
|
476 |
||
477 |
this.type = 'default'; |
|
478 |
this.status = options.status === undefined ? 200 : options.status; |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
479 |
if (this.status < 200 || this.status > 599) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
480 |
throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].") |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
481 |
} |
9 | 482 |
this.ok = this.status >= 200 && this.status < 300; |
19 | 483 |
this.statusText = options.statusText === undefined ? '' : '' + options.statusText; |
9 | 484 |
this.headers = new Headers(options.headers); |
485 |
this.url = options.url || ''; |
|
486 |
this._initBody(bodyInit); |
|
487 |
} |
|
488 |
||
489 |
Body.call(Response.prototype); |
|
490 |
||
491 |
Response.prototype.clone = function() { |
|
492 |
return new Response(this._bodyInit, { |
|
493 |
status: this.status, |
|
494 |
statusText: this.statusText, |
|
495 |
headers: new Headers(this.headers), |
|
496 |
url: this.url |
|
497 |
}) |
|
498 |
}; |
|
499 |
||
500 |
Response.error = function() { |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
501 |
var response = new Response(null, {status: 200, statusText: ''}); |
22
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
502 |
response.ok = false; |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
503 |
response.status = 0; |
9 | 504 |
response.type = 'error'; |
505 |
return response |
|
506 |
}; |
|
507 |
||
508 |
var redirectStatuses = [301, 302, 303, 307, 308]; |
|
509 |
||
510 |
Response.redirect = function(url, status) { |
|
511 |
if (redirectStatuses.indexOf(status) === -1) { |
|
512 |
throw new RangeError('Invalid status code') |
|
513 |
} |
|
514 |
||
515 |
return new Response(null, {status: status, headers: {location: url}}) |
|
516 |
}; |
|
517 |
||
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
518 |
exports.DOMException = g.DOMException; |
9 | 519 |
try { |
520 |
new exports.DOMException(); |
|
521 |
} catch (err) { |
|
522 |
exports.DOMException = function(message, name) { |
|
523 |
this.message = message; |
|
524 |
this.name = name; |
|
525 |
var error = Error(message); |
|
526 |
this.stack = error.stack; |
|
527 |
}; |
|
528 |
exports.DOMException.prototype = Object.create(Error.prototype); |
|
529 |
exports.DOMException.prototype.constructor = exports.DOMException; |
|
530 |
} |
|
531 |
||
532 |
function fetch(input, init) { |
|
533 |
return new Promise(function(resolve, reject) { |
|
534 |
var request = new Request(input, init); |
|
535 |
||
536 |
if (request.signal && request.signal.aborted) { |
|
537 |
return reject(new exports.DOMException('Aborted', 'AbortError')) |
|
538 |
} |
|
539 |
||
540 |
var xhr = new XMLHttpRequest(); |
|
541 |
||
542 |
function abortXhr() { |
|
543 |
xhr.abort(); |
|
544 |
} |
|
545 |
||
546 |
xhr.onload = function() { |
|
547 |
var options = { |
|
548 |
statusText: xhr.statusText, |
|
549 |
headers: parseHeaders(xhr.getAllResponseHeaders() || '') |
|
550 |
}; |
|
22
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
551 |
// This check if specifically for when a user fetches a file locally from the file system |
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
552 |
// Only if the status is out of a normal range |
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
553 |
if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) { |
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
554 |
options.status = 200; |
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
555 |
} else { |
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
556 |
options.status = xhr.status; |
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
557 |
} |
9 | 558 |
options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL'); |
559 |
var body = 'response' in xhr ? xhr.response : xhr.responseText; |
|
19 | 560 |
setTimeout(function() { |
561 |
resolve(new Response(body, options)); |
|
562 |
}, 0); |
|
9 | 563 |
}; |
564 |
||
565 |
xhr.onerror = function() { |
|
19 | 566 |
setTimeout(function() { |
567 |
reject(new TypeError('Network request failed')); |
|
568 |
}, 0); |
|
9 | 569 |
}; |
570 |
||
571 |
xhr.ontimeout = function() { |
|
19 | 572 |
setTimeout(function() { |
22
8c2e4d02f4ef
Update WordPress to latest version (6.7)
ymh <ymh.work@gmail.com>
parents:
21
diff
changeset
|
573 |
reject(new TypeError('Network request timed out')); |
19 | 574 |
}, 0); |
9 | 575 |
}; |
576 |
||
577 |
xhr.onabort = function() { |
|
19 | 578 |
setTimeout(function() { |
579 |
reject(new exports.DOMException('Aborted', 'AbortError')); |
|
580 |
}, 0); |
|
9 | 581 |
}; |
582 |
||
19 | 583 |
function fixUrl(url) { |
584 |
try { |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
585 |
return url === '' && g.location.href ? g.location.href : url |
19 | 586 |
} catch (e) { |
587 |
return url |
|
588 |
} |
|
589 |
} |
|
590 |
||
591 |
xhr.open(request.method, fixUrl(request.url), true); |
|
9 | 592 |
|
593 |
if (request.credentials === 'include') { |
|
594 |
xhr.withCredentials = true; |
|
595 |
} else if (request.credentials === 'omit') { |
|
596 |
xhr.withCredentials = false; |
|
597 |
} |
|
598 |
||
19 | 599 |
if ('responseType' in xhr) { |
600 |
if (support.blob) { |
|
601 |
xhr.responseType = 'blob'; |
|
602 |
} else if ( |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
603 |
support.arrayBuffer |
19 | 604 |
) { |
605 |
xhr.responseType = 'arraybuffer'; |
|
606 |
} |
|
9 | 607 |
} |
608 |
||
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
609 |
if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
610 |
var names = []; |
19 | 611 |
Object.getOwnPropertyNames(init.headers).forEach(function(name) { |
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
612 |
names.push(normalizeName(name)); |
19 | 613 |
xhr.setRequestHeader(name, normalizeValue(init.headers[name])); |
614 |
}); |
|
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
615 |
request.headers.forEach(function(value, name) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
616 |
if (names.indexOf(name) === -1) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
617 |
xhr.setRequestHeader(name, value); |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
618 |
} |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
619 |
}); |
19 | 620 |
} else { |
621 |
request.headers.forEach(function(value, name) { |
|
622 |
xhr.setRequestHeader(name, value); |
|
623 |
}); |
|
624 |
} |
|
9 | 625 |
|
626 |
if (request.signal) { |
|
627 |
request.signal.addEventListener('abort', abortXhr); |
|
628 |
||
629 |
xhr.onreadystatechange = function() { |
|
630 |
// DONE (success or failure) |
|
631 |
if (xhr.readyState === 4) { |
|
632 |
request.signal.removeEventListener('abort', abortXhr); |
|
633 |
} |
|
634 |
}; |
|
635 |
} |
|
636 |
||
637 |
xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit); |
|
638 |
}) |
|
639 |
} |
|
640 |
||
641 |
fetch.polyfill = true; |
|
642 |
||
21
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
643 |
if (!g.fetch) { |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
644 |
g.fetch = fetch; |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
645 |
g.Headers = Headers; |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
646 |
g.Request = Request; |
48c4eec2b7e6
Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents:
19
diff
changeset
|
647 |
g.Response = Response; |
9 | 648 |
} |
649 |
||
650 |
exports.Headers = Headers; |
|
651 |
exports.Request = Request; |
|
652 |
exports.Response = Response; |
|
653 |
exports.fetch = fetch; |
|
654 |
||
655 |
Object.defineProperty(exports, '__esModule', { value: true }); |
|
656 |
||
657 |
}))); |