import { strict as assert } from 'node:assert'; export default class Cookie { constructor(input) { assert(typeof input === 'object'); this._values = {}; for (const [ k, v ] of Object.entries(input)) this.set(k, v); } set(key, value) { const old = this._values[key]; if (old === value) return false; this._values[key] = value; return true; } unset(keys) { for (const key of keys) delete this._values[key] } static fromString(str) { const obj = {}; str.split('; ').forEach(cookie => { const key = cookie.split('=')[0]; const value = cookie.split('=').splice(1).join('='); obj[key] = value }) return new Cookie(obj) } toString() { return Object.entries(this._values).map(([ name, value ]) => `${name}=${value}`).join('; ') } toJSON() { return this.toString() } values() { return Object.freeze({ ...this._values }) } }