Spaces:
Runtime error
Runtime error
const { MessageChannel, receiveMessageOnPort } = require('worker_threads') | |
const corsSafeListedMethods = ['GET', 'HEAD', 'POST'] | |
const corsSafeListedMethodsSet = new Set(corsSafeListedMethods) | |
const nullBodyStatus = [101, 204, 205, 304] | |
const redirectStatus = [301, 302, 303, 307, 308] | |
const redirectStatusSet = new Set(redirectStatus) | |
// https://fetch.spec.whatwg.org/#block-bad-port | |
const badPorts = [ | |
'1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79', | |
'87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137', | |
'139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532', | |
'540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723', | |
'2049', '3659', '4045', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6697', | |
'10080' | |
] | |
const badPortsSet = new Set(badPorts) | |
// https://w3c.github.io/webappsec-referrer-policy/#referrer-policies | |
const referrerPolicy = [ | |
'', | |
'no-referrer', | |
'no-referrer-when-downgrade', | |
'same-origin', | |
'origin', | |
'strict-origin', | |
'origin-when-cross-origin', | |
'strict-origin-when-cross-origin', | |
'unsafe-url' | |
] | |
const referrerPolicySet = new Set(referrerPolicy) | |
const requestRedirect = ['follow', 'manual', 'error'] | |
const safeMethods = ['GET', 'HEAD', 'OPTIONS', 'TRACE'] | |
const safeMethodsSet = new Set(safeMethods) | |
const requestMode = ['navigate', 'same-origin', 'no-cors', 'cors'] | |
const requestCredentials = ['omit', 'same-origin', 'include'] | |
const requestCache = [ | |
'default', | |
'no-store', | |
'reload', | |
'no-cache', | |
'force-cache', | |
'only-if-cached' | |
] | |
// https://fetch.spec.whatwg.org/#request-body-header-name | |
const requestBodyHeader = [ | |
'content-encoding', | |
'content-language', | |
'content-location', | |
'content-type', | |
// See https://github.com/nodejs/undici/issues/2021 | |
// 'Content-Length' is a forbidden header name, which is typically | |
// removed in the Headers implementation. However, undici doesn't | |
// filter out headers, so we add it here. | |
'content-length' | |
] | |
// https://fetch.spec.whatwg.org/#enumdef-requestduplex | |
const requestDuplex = [ | |
'half' | |
] | |
// http://fetch.spec.whatwg.org/#forbidden-method | |
const forbiddenMethods = ['CONNECT', 'TRACE', 'TRACK'] | |
const forbiddenMethodsSet = new Set(forbiddenMethods) | |
const subresource = [ | |
'audio', | |
'audioworklet', | |
'font', | |
'image', | |
'manifest', | |
'paintworklet', | |
'script', | |
'style', | |
'track', | |
'video', | |
'xslt', | |
'' | |
] | |
const subresourceSet = new Set(subresource) | |
/** @type {globalThis['DOMException']} */ | |
const DOMException = globalThis.DOMException ?? (() => { | |
// DOMException was only made a global in Node v17.0.0, | |
// but fetch supports >= v16.8. | |
try { | |
atob('~') | |
} catch (err) { | |
return Object.getPrototypeOf(err).constructor | |
} | |
})() | |
let channel | |
/** @type {globalThis['structuredClone']} */ | |
const structuredClone = | |
globalThis.structuredClone ?? | |
// https://github.com/nodejs/node/blob/b27ae24dcc4251bad726d9d84baf678d1f707fed/lib/internal/structured_clone.js | |
// structuredClone was added in v17.0.0, but fetch supports v16.8 | |
function structuredClone (value, options = undefined) { | |
if (arguments.length === 0) { | |
throw new TypeError('missing argument') | |
} | |
if (!channel) { | |
channel = new MessageChannel() | |
} | |
channel.port1.unref() | |
channel.port2.unref() | |
channel.port1.postMessage(value, options?.transfer) | |
return receiveMessageOnPort(channel.port2).message | |
} | |
module.exports = { | |
DOMException, | |
structuredClone, | |
subresource, | |
forbiddenMethods, | |
requestBodyHeader, | |
referrerPolicy, | |
requestRedirect, | |
requestMode, | |
requestCredentials, | |
requestCache, | |
redirectStatus, | |
corsSafeListedMethods, | |
nullBodyStatus, | |
safeMethods, | |
badPorts, | |
requestDuplex, | |
subresourceSet, | |
badPortsSet, | |
redirectStatusSet, | |
corsSafeListedMethodsSet, | |
safeMethodsSet, | |
forbiddenMethodsSet, | |
referrerPolicySet | |
} | |