Your IP : 3.146.105.56


Current Path : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/main/core/src/lib/http/
Upload File :
Current File : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/main/core/src/lib/http/cookie.js

import Type from '../type';

export default class Cookie
{
	/**
	 * Gets cookies list for current domain
	 * @return {object}
	 */
	static getList(): {[key: string]: string}
	{
		return document.cookie
			.split(';')
			.map(item => item.split('='))
			.map(item => item.map(subItem => subItem.trim()))
			.reduce((acc, item) => {
				const [key, value] = item;
				acc[decodeURIComponent(key)] = (
					decodeURIComponent(value)
				);
				return acc;
			}, {});
	}

	/**
	 * Gets cookie value
	 * @param {string} name
	 * @return {*}
	 */
	static get(name)
	{
		const cookiesList = Cookie.getList();

		if (name in cookiesList)
		{
			return cookiesList[name];
		}

		return undefined;
	}

	/**
	 * Sets cookie
	 * @param {string} name
	 * @param {*} value
	 * @param {object} [options]
	 */
	static set(name, value, options = {})
	{
		const attributes = {
			expires: '',
			...options,
		};

		if (Type.isNumber(attributes.expires))
		{
			const now = (+new Date());
			const days = attributes.expires;
			const dayInMs = 864e+5;
			attributes.expires = new Date(now + days * dayInMs);
		}

		if (Type.isDate(attributes.expires))
		{
			attributes.expires = attributes.expires.toUTCString();
		}

		const safeName = decodeURIComponent(String(name))
			.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)
			.replace(/[()]/g, escape);

		const safeValue = encodeURIComponent(String(value))
			.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);

		const stringifiedAttributes = Object.keys(attributes)
			.reduce((acc, key) => {
				const attributeValue = attributes[key];

				if (!attributeValue)
				{
					return acc;
				}

				if (attributeValue === true)
				{
					return `${acc}; ${key}`;
				}

				/**
				 * Considers RFC 6265 section 5.2:
				 * ...
				 * 3. If the remaining unparsed-attributes contains a %x3B (';')
				 * character:
				 * Consume the characters of the unparsed-attributes up to,
				 * not including, the first %x3B (';') character.
				 */
				return `${acc}; ${key}=${attributeValue.split(';')[0]}`;
			}, '');

		document.cookie = `${safeName}=${safeValue}${stringifiedAttributes}`;
	}

	/**
	 * Removes cookie
	 * @param {string} name
	 * @param {object} [options]
	 */
	static remove(name, options = {})
	{
		Cookie.set(name, '', {...options, expires: -1});
	}
}