548 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			548 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var __create = Object.create;
 | |
| var __defProp = Object.defineProperty;
 | |
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
 | |
| var __getOwnPropNames = Object.getOwnPropertyNames;
 | |
| var __getProtoOf = Object.getPrototypeOf;
 | |
| var __hasOwnProp = Object.prototype.hasOwnProperty;
 | |
| var __commonJS = (cb, mod) => function __require() {
 | |
|   return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
 | |
| };
 | |
| var __copyProps = (to, from, except, desc) => {
 | |
|   if (from && typeof from === "object" || typeof from === "function") {
 | |
|     for (let key of __getOwnPropNames(from))
 | |
|       if (!__hasOwnProp.call(to, key) && key !== except)
 | |
|         __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
 | |
|   }
 | |
|   return to;
 | |
| };
 | |
| var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
 | |
|   // If the importer is in node compatibility mode or this is not an ESM
 | |
|   // file that has been converted to a CommonJS file using a Babel-
 | |
|   // compatible transform (i.e. "__esModule" has not been set), then set
 | |
|   // "default" to the CommonJS "module.exports" for node compatibility.
 | |
|   isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
 | |
|   mod
 | |
| ));
 | |
| 
 | |
| // node_modules/set-cookie-parser/lib/set-cookie.js
 | |
| var require_set_cookie = __commonJS({
 | |
|   "node_modules/set-cookie-parser/lib/set-cookie.js"(exports, module) {
 | |
|     "use strict";
 | |
|     var defaultParseOptions = {
 | |
|       decodeValues: true,
 | |
|       map: false,
 | |
|       silent: false
 | |
|     };
 | |
|     function isNonEmptyString(str) {
 | |
|       return typeof str === "string" && !!str.trim();
 | |
|     }
 | |
|     function parseString(setCookieValue, options) {
 | |
|       var parts = setCookieValue.split(";").filter(isNonEmptyString);
 | |
|       var nameValuePairStr = parts.shift();
 | |
|       var parsed = parseNameValuePair(nameValuePairStr);
 | |
|       var name = parsed.name;
 | |
|       var value = parsed.value;
 | |
|       options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
 | |
|       try {
 | |
|         value = options.decodeValues ? decodeURIComponent(value) : value;
 | |
|       } catch (e) {
 | |
|         console.error(
 | |
|           "set-cookie-parser encountered an error while decoding a cookie with value '" + value + "'. Set options.decodeValues to false to disable this feature.",
 | |
|           e
 | |
|         );
 | |
|       }
 | |
|       var cookie = {
 | |
|         name,
 | |
|         value
 | |
|       };
 | |
|       parts.forEach(function(part) {
 | |
|         var sides = part.split("=");
 | |
|         var key = sides.shift().trimLeft().toLowerCase();
 | |
|         var value2 = sides.join("=");
 | |
|         if (key === "expires") {
 | |
|           cookie.expires = new Date(value2);
 | |
|         } else if (key === "max-age") {
 | |
|           cookie.maxAge = parseInt(value2, 10);
 | |
|         } else if (key === "secure") {
 | |
|           cookie.secure = true;
 | |
|         } else if (key === "httponly") {
 | |
|           cookie.httpOnly = true;
 | |
|         } else if (key === "samesite") {
 | |
|           cookie.sameSite = value2;
 | |
|         } else {
 | |
|           cookie[key] = value2;
 | |
|         }
 | |
|       });
 | |
|       return cookie;
 | |
|     }
 | |
|     function parseNameValuePair(nameValuePairStr) {
 | |
|       var name = "";
 | |
|       var value = "";
 | |
|       var nameValueArr = nameValuePairStr.split("=");
 | |
|       if (nameValueArr.length > 1) {
 | |
|         name = nameValueArr.shift();
 | |
|         value = nameValueArr.join("=");
 | |
|       } else {
 | |
|         value = nameValuePairStr;
 | |
|       }
 | |
|       return { name, value };
 | |
|     }
 | |
|     function parse(input, options) {
 | |
|       options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
 | |
|       if (!input) {
 | |
|         if (!options.map) {
 | |
|           return [];
 | |
|         } else {
 | |
|           return {};
 | |
|         }
 | |
|       }
 | |
|       if (input.headers) {
 | |
|         if (typeof input.headers.getSetCookie === "function") {
 | |
|           input = input.headers.getSetCookie();
 | |
|         } else if (input.headers["set-cookie"]) {
 | |
|           input = input.headers["set-cookie"];
 | |
|         } else {
 | |
|           var sch = input.headers[Object.keys(input.headers).find(function(key) {
 | |
|             return key.toLowerCase() === "set-cookie";
 | |
|           })];
 | |
|           if (!sch && input.headers.cookie && !options.silent) {
 | |
|             console.warn(
 | |
|               "Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning."
 | |
|             );
 | |
|           }
 | |
|           input = sch;
 | |
|         }
 | |
|       }
 | |
|       if (!Array.isArray(input)) {
 | |
|         input = [input];
 | |
|       }
 | |
|       options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
 | |
|       if (!options.map) {
 | |
|         return input.filter(isNonEmptyString).map(function(str) {
 | |
|           return parseString(str, options);
 | |
|         });
 | |
|       } else {
 | |
|         var cookies = {};
 | |
|         return input.filter(isNonEmptyString).reduce(function(cookies2, str) {
 | |
|           var cookie = parseString(str, options);
 | |
|           cookies2[cookie.name] = cookie;
 | |
|           return cookies2;
 | |
|         }, cookies);
 | |
|       }
 | |
|     }
 | |
|     function splitCookiesString2(cookiesString) {
 | |
|       if (Array.isArray(cookiesString)) {
 | |
|         return cookiesString;
 | |
|       }
 | |
|       if (typeof cookiesString !== "string") {
 | |
|         return [];
 | |
|       }
 | |
|       var cookiesStrings = [];
 | |
|       var pos = 0;
 | |
|       var start;
 | |
|       var ch;
 | |
|       var lastComma;
 | |
|       var nextStart;
 | |
|       var cookiesSeparatorFound;
 | |
|       function skipWhitespace() {
 | |
|         while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) {
 | |
|           pos += 1;
 | |
|         }
 | |
|         return pos < cookiesString.length;
 | |
|       }
 | |
|       function notSpecialChar() {
 | |
|         ch = cookiesString.charAt(pos);
 | |
|         return ch !== "=" && ch !== ";" && ch !== ",";
 | |
|       }
 | |
|       while (pos < cookiesString.length) {
 | |
|         start = pos;
 | |
|         cookiesSeparatorFound = false;
 | |
|         while (skipWhitespace()) {
 | |
|           ch = cookiesString.charAt(pos);
 | |
|           if (ch === ",") {
 | |
|             lastComma = pos;
 | |
|             pos += 1;
 | |
|             skipWhitespace();
 | |
|             nextStart = pos;
 | |
|             while (pos < cookiesString.length && notSpecialChar()) {
 | |
|               pos += 1;
 | |
|             }
 | |
|             if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
 | |
|               cookiesSeparatorFound = true;
 | |
|               pos = nextStart;
 | |
|               cookiesStrings.push(cookiesString.substring(start, lastComma));
 | |
|               start = pos;
 | |
|             } else {
 | |
|               pos = lastComma + 1;
 | |
|             }
 | |
|           } else {
 | |
|             pos += 1;
 | |
|           }
 | |
|         }
 | |
|         if (!cookiesSeparatorFound || pos >= cookiesString.length) {
 | |
|           cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
 | |
|         }
 | |
|       }
 | |
|       return cookiesStrings;
 | |
|     }
 | |
|     module.exports = parse;
 | |
|     module.exports.parse = parse;
 | |
|     module.exports.parseString = parseString;
 | |
|     module.exports.splitCookiesString = splitCookiesString2;
 | |
|   }
 | |
| });
 | |
| 
 | |
| // src/Headers.ts
 | |
| var import_set_cookie_parser = __toESM(require_set_cookie());
 | |
| 
 | |
| // src/utils/normalizeHeaderName.ts
 | |
| var HEADERS_INVALID_CHARACTERS = /[^a-z0-9\-#$%&'*+.^_`|~]/i;
 | |
| function normalizeHeaderName(name) {
 | |
|   if (HEADERS_INVALID_CHARACTERS.test(name) || name.trim() === "") {
 | |
|     throw new TypeError("Invalid character in header field name");
 | |
|   }
 | |
|   return name.trim().toLowerCase();
 | |
| }
 | |
| 
 | |
| // src/utils/normalizeHeaderValue.ts
 | |
| var charCodesToRemove = [
 | |
|   String.fromCharCode(10),
 | |
|   String.fromCharCode(13),
 | |
|   String.fromCharCode(9),
 | |
|   String.fromCharCode(32)
 | |
| ];
 | |
| var HEADER_VALUE_REMOVE_REGEXP = new RegExp(
 | |
|   `(^[${charCodesToRemove.join("")}]|$[${charCodesToRemove.join("")}])`,
 | |
|   "g"
 | |
| );
 | |
| function normalizeHeaderValue(value) {
 | |
|   const nextValue = value.replace(HEADER_VALUE_REMOVE_REGEXP, "");
 | |
|   return nextValue;
 | |
| }
 | |
| 
 | |
| // src/utils/isValidHeaderName.ts
 | |
| function isValidHeaderName(value) {
 | |
|   if (typeof value !== "string") {
 | |
|     return false;
 | |
|   }
 | |
|   if (value.length === 0) {
 | |
|     return false;
 | |
|   }
 | |
|   for (let i = 0; i < value.length; i++) {
 | |
|     const character = value.charCodeAt(i);
 | |
|     if (character > 127 || !isToken(character)) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   return true;
 | |
| }
 | |
| function isToken(value) {
 | |
|   return ![
 | |
|     127,
 | |
|     32,
 | |
|     "(",
 | |
|     ")",
 | |
|     "<",
 | |
|     ">",
 | |
|     "@",
 | |
|     ",",
 | |
|     ";",
 | |
|     ":",
 | |
|     "\\",
 | |
|     '"',
 | |
|     "/",
 | |
|     "[",
 | |
|     "]",
 | |
|     "?",
 | |
|     "=",
 | |
|     "{",
 | |
|     "}"
 | |
|   ].includes(value);
 | |
| }
 | |
| 
 | |
| // src/utils/isValidHeaderValue.ts
 | |
| function isValidHeaderValue(value) {
 | |
|   if (typeof value !== "string") {
 | |
|     return false;
 | |
|   }
 | |
|   if (value.trim() !== value) {
 | |
|     return false;
 | |
|   }
 | |
|   for (let i = 0; i < value.length; i++) {
 | |
|     const character = value.charCodeAt(i);
 | |
|     if (
 | |
|       // NUL.
 | |
|       character === 0 || // HTTP newline bytes.
 | |
|       character === 10 || character === 13
 | |
|     ) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| // src/Headers.ts
 | |
| var NORMALIZED_HEADERS = Symbol("normalizedHeaders");
 | |
| var RAW_HEADER_NAMES = Symbol("rawHeaderNames");
 | |
| var HEADER_VALUE_DELIMITER = ", ";
 | |
| var _a, _b, _c;
 | |
| var Headers = class _Headers {
 | |
|   constructor(init) {
 | |
|     // Normalized header {"name":"a, b"} storage.
 | |
|     this[_a] = {};
 | |
|     // Keeps the mapping between the raw header name
 | |
|     // and the normalized header name to ease the lookup.
 | |
|     this[_b] = /* @__PURE__ */ new Map();
 | |
|     this[_c] = "Headers";
 | |
|     if (["Headers", "HeadersPolyfill"].includes(init?.constructor.name) || init instanceof _Headers || typeof globalThis.Headers !== "undefined" && init instanceof globalThis.Headers) {
 | |
|       const initialHeaders = init;
 | |
|       initialHeaders.forEach((value, name) => {
 | |
|         this.append(name, value);
 | |
|       }, this);
 | |
|     } else if (Array.isArray(init)) {
 | |
|       init.forEach(([name, value]) => {
 | |
|         this.append(
 | |
|           name,
 | |
|           Array.isArray(value) ? value.join(HEADER_VALUE_DELIMITER) : value
 | |
|         );
 | |
|       });
 | |
|     } else if (init) {
 | |
|       Object.getOwnPropertyNames(init).forEach((name) => {
 | |
|         const value = init[name];
 | |
|         this.append(
 | |
|           name,
 | |
|           Array.isArray(value) ? value.join(HEADER_VALUE_DELIMITER) : value
 | |
|         );
 | |
|       });
 | |
|     }
 | |
|   }
 | |
|   [(_a = NORMALIZED_HEADERS, _b = RAW_HEADER_NAMES, _c = Symbol.toStringTag, Symbol.iterator)]() {
 | |
|     return this.entries();
 | |
|   }
 | |
|   *keys() {
 | |
|     for (const [name] of this.entries()) {
 | |
|       yield name;
 | |
|     }
 | |
|   }
 | |
|   *values() {
 | |
|     for (const [, value] of this.entries()) {
 | |
|       yield value;
 | |
|     }
 | |
|   }
 | |
|   *entries() {
 | |
|     let sortedKeys = Object.keys(this[NORMALIZED_HEADERS]).sort(
 | |
|       (a, b) => a.localeCompare(b)
 | |
|     );
 | |
|     for (const name of sortedKeys) {
 | |
|       if (name === "set-cookie") {
 | |
|         for (const value of this.getSetCookie()) {
 | |
|           yield [name, value];
 | |
|         }
 | |
|       } else {
 | |
|         yield [name, this.get(name)];
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   /**
 | |
|    * Returns a boolean stating whether a `Headers` object contains a certain header.
 | |
|    */
 | |
|   has(name) {
 | |
|     if (!isValidHeaderName(name)) {
 | |
|       throw new TypeError(`Invalid header name "${name}"`);
 | |
|     }
 | |
|     return this[NORMALIZED_HEADERS].hasOwnProperty(normalizeHeaderName(name));
 | |
|   }
 | |
|   /**
 | |
|    * Returns a `ByteString` sequence of all the values of a header with a given name.
 | |
|    */
 | |
|   get(name) {
 | |
|     if (!isValidHeaderName(name)) {
 | |
|       throw TypeError(`Invalid header name "${name}"`);
 | |
|     }
 | |
|     return this[NORMALIZED_HEADERS][normalizeHeaderName(name)] ?? null;
 | |
|   }
 | |
|   /**
 | |
|    * Sets a new value for an existing header inside a `Headers` object, or adds the header if it does not already exist.
 | |
|    */
 | |
|   set(name, value) {
 | |
|     if (!isValidHeaderName(name) || !isValidHeaderValue(value)) {
 | |
|       return;
 | |
|     }
 | |
|     const normalizedName = normalizeHeaderName(name);
 | |
|     const normalizedValue = normalizeHeaderValue(value);
 | |
|     this[NORMALIZED_HEADERS][normalizedName] = normalizeHeaderValue(normalizedValue);
 | |
|     this[RAW_HEADER_NAMES].set(normalizedName, name);
 | |
|   }
 | |
|   /**
 | |
|    * Appends a new value onto an existing header inside a `Headers` object, or adds the header if it does not already exist.
 | |
|    */
 | |
|   append(name, value) {
 | |
|     if (!isValidHeaderName(name) || !isValidHeaderValue(value)) {
 | |
|       return;
 | |
|     }
 | |
|     const normalizedName = normalizeHeaderName(name);
 | |
|     const normalizedValue = normalizeHeaderValue(value);
 | |
|     let resolvedValue = this.has(normalizedName) ? `${this.get(normalizedName)}, ${normalizedValue}` : normalizedValue;
 | |
|     this.set(name, resolvedValue);
 | |
|   }
 | |
|   /**
 | |
|    * Deletes a header from the `Headers` object.
 | |
|    */
 | |
|   delete(name) {
 | |
|     if (!isValidHeaderName(name)) {
 | |
|       return;
 | |
|     }
 | |
|     if (!this.has(name)) {
 | |
|       return;
 | |
|     }
 | |
|     const normalizedName = normalizeHeaderName(name);
 | |
|     delete this[NORMALIZED_HEADERS][normalizedName];
 | |
|     this[RAW_HEADER_NAMES].delete(normalizedName);
 | |
|   }
 | |
|   /**
 | |
|    * Traverses the `Headers` object,
 | |
|    * calling the given callback for each header.
 | |
|    */
 | |
|   forEach(callback, thisArg) {
 | |
|     for (const [name, value] of this.entries()) {
 | |
|       callback.call(thisArg, value, name, this);
 | |
|     }
 | |
|   }
 | |
|   /**
 | |
|    * Returns an array containing the values
 | |
|    * of all Set-Cookie headers associated
 | |
|    * with a response
 | |
|    */
 | |
|   getSetCookie() {
 | |
|     const setCookieHeader = this.get("set-cookie");
 | |
|     if (setCookieHeader === null) {
 | |
|       return [];
 | |
|     }
 | |
|     if (setCookieHeader === "") {
 | |
|       return [""];
 | |
|     }
 | |
|     return (0, import_set_cookie_parser.splitCookiesString)(setCookieHeader);
 | |
|   }
 | |
| };
 | |
| 
 | |
| // src/getRawHeaders.ts
 | |
| function getRawHeaders(headers) {
 | |
|   const rawHeaders = {};
 | |
|   for (const [name, value] of headers.entries()) {
 | |
|     rawHeaders[headers[RAW_HEADER_NAMES].get(name)] = value;
 | |
|   }
 | |
|   return rawHeaders;
 | |
| }
 | |
| 
 | |
| // src/transformers/headersToList.ts
 | |
| function headersToList(headers) {
 | |
|   const headersList = [];
 | |
|   headers.forEach((value, name) => {
 | |
|     const resolvedValue = value.includes(",") ? value.split(",").map((value2) => value2.trim()) : value;
 | |
|     headersList.push([name, resolvedValue]);
 | |
|   });
 | |
|   return headersList;
 | |
| }
 | |
| 
 | |
| // src/transformers/headersToString.ts
 | |
| function headersToString(headers) {
 | |
|   const list = headersToList(headers);
 | |
|   const lines = list.map(([name, value]) => {
 | |
|     const values = [].concat(value);
 | |
|     return `${name}: ${values.join(", ")}`;
 | |
|   });
 | |
|   return lines.join("\r\n");
 | |
| }
 | |
| 
 | |
| // src/transformers/headersToObject.ts
 | |
| var singleValueHeaders = ["user-agent"];
 | |
| function headersToObject(headers) {
 | |
|   const headersObject = {};
 | |
|   headers.forEach((value, name) => {
 | |
|     const isMultiValue = !singleValueHeaders.includes(name.toLowerCase()) && value.includes(",");
 | |
|     headersObject[name] = isMultiValue ? value.split(",").map((s) => s.trim()) : value;
 | |
|   });
 | |
|   return headersObject;
 | |
| }
 | |
| 
 | |
| // src/transformers/stringToHeaders.ts
 | |
| function stringToHeaders(str) {
 | |
|   const lines = str.trim().split(/[\r\n]+/);
 | |
|   return lines.reduce((headers, line) => {
 | |
|     if (line.trim() === "") {
 | |
|       return headers;
 | |
|     }
 | |
|     const parts = line.split(": ");
 | |
|     const name = parts.shift();
 | |
|     const value = parts.join(": ");
 | |
|     headers.append(name, value);
 | |
|     return headers;
 | |
|   }, new Headers());
 | |
| }
 | |
| 
 | |
| // src/transformers/listToHeaders.ts
 | |
| function listToHeaders(list) {
 | |
|   const headers = new Headers();
 | |
|   list.forEach(([name, value]) => {
 | |
|     const values = [].concat(value);
 | |
|     values.forEach((value2) => {
 | |
|       headers.append(name, value2);
 | |
|     });
 | |
|   });
 | |
|   return headers;
 | |
| }
 | |
| 
 | |
| // src/transformers/reduceHeadersObject.ts
 | |
| function reduceHeadersObject(headers, reducer, initialState) {
 | |
|   return Object.keys(headers).reduce((nextHeaders, name) => {
 | |
|     return reducer(nextHeaders, name, headers[name]);
 | |
|   }, initialState);
 | |
| }
 | |
| 
 | |
| // src/transformers/objectToHeaders.ts
 | |
| function objectToHeaders(headersObject) {
 | |
|   return reduceHeadersObject(
 | |
|     headersObject,
 | |
|     (headers, name, value) => {
 | |
|       const values = [].concat(value).filter(Boolean);
 | |
|       values.forEach((value2) => {
 | |
|         headers.append(name, value2);
 | |
|       });
 | |
|       return headers;
 | |
|     },
 | |
|     new Headers()
 | |
|   );
 | |
| }
 | |
| 
 | |
| // src/transformers/flattenHeadersList.ts
 | |
| function flattenHeadersList(list) {
 | |
|   return list.map(([name, values]) => {
 | |
|     return [name, [].concat(values).join(", ")];
 | |
|   });
 | |
| }
 | |
| 
 | |
| // src/transformers/flattenHeadersObject.ts
 | |
| function flattenHeadersObject(headersObject) {
 | |
|   return reduceHeadersObject(
 | |
|     headersObject,
 | |
|     (headers, name, value) => {
 | |
|       headers[name] = [].concat(value).join(", ");
 | |
|       return headers;
 | |
|     },
 | |
|     {}
 | |
|   );
 | |
| }
 | |
| export {
 | |
|   Headers,
 | |
|   flattenHeadersList,
 | |
|   flattenHeadersObject,
 | |
|   getRawHeaders,
 | |
|   headersToList,
 | |
|   headersToObject,
 | |
|   headersToString,
 | |
|   listToHeaders,
 | |
|   objectToHeaders,
 | |
|   reduceHeadersObject,
 | |
|   stringToHeaders
 | |
| };
 | |
| //# sourceMappingURL=index.mjs.map
 |