happy-dom
Version:
Happy DOM is a JavaScript implementation of a web browser without its graphical user interface. It includes many web standards from WHATWG DOM and HTML.
71 lines • 3.25 kB
JavaScript
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _CookieContainer_cookies;
Object.defineProperty(exports, "__esModule", { value: true });
const CookieExpireUtility_js_1 = __importDefault(require("./urilities/CookieExpireUtility.cjs"));
const CookieURLUtility_js_1 = __importDefault(require("./urilities/CookieURLUtility.cjs"));
/**
* Cookie Container.
*
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie.
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie.
*/
class CookieContainer {
constructor() {
_CookieContainer_cookies.set(this, []);
}
/**
* Adds cookies.
*
* @param cookies Cookies.
*/
addCookies(cookies) {
const indexMap = {};
const getKey = (cookie) => `${cookie.key}-${cookie.originURL.hostname}-${cookie.originURL.pathname}-${typeof cookie.value}`;
// Creates a map of cookie key, domain, path and value to index.
for (let i = 0, max = __classPrivateFieldGet(this, _CookieContainer_cookies, "f").length; i < max; i++) {
indexMap[getKey(__classPrivateFieldGet(this, _CookieContainer_cookies, "f")[i])] = i;
}
for (const cookie of cookies) {
if (cookie?.key) {
// Remove existing cookie with same name, domain and path.
const index = indexMap[getKey(cookie)];
if (index !== undefined) {
__classPrivateFieldGet(this, _CookieContainer_cookies, "f").splice(index, 1);
}
if (!CookieExpireUtility_js_1.default.hasExpired(cookie)) {
indexMap[getKey(cookie)] = __classPrivateFieldGet(this, _CookieContainer_cookies, "f").length;
__classPrivateFieldGet(this, _CookieContainer_cookies, "f").push(cookie);
}
}
}
}
/**
* Returns cookies.
*
* @param [url] URL.
* @param [httpOnly] "true" if only http cookies should be returned.
* @returns Cookies.
*/
getCookies(url = null, httpOnly = false) {
const cookies = [];
for (const cookie of __classPrivateFieldGet(this, _CookieContainer_cookies, "f")) {
if (!CookieExpireUtility_js_1.default.hasExpired(cookie) &&
(!httpOnly || !cookie.httpOnly) &&
(!url || CookieURLUtility_js_1.default.cookieMatchesURL(cookie, url || cookie.originURL))) {
cookies.push(cookie);
}
}
return cookies;
}
}
_CookieContainer_cookies = new WeakMap();
exports.default = CookieContainer;
//# sourceMappingURL=CookieContainer.cjs.map
;