@cldn/web-ts
Version:
Class-based Node.js web server
79 lines • 6.04 kB
JavaScript
/**
* A cookie that the server wants to ask the client to set.
*/
class Cookie {
/**
* ```abnf
*
* token = 1*<any CHAR except CTLs or separators>
* separators = "(" | ")" | "<" | ">" | "@"
* | "," | ";" | ":" | "\" | <">
* | "/" | "[" | "]" | "?" | "="
* | "{" | "}" | SP | HT
* ```
* @see {@link https://www.rfc-editor.org/rfc/rfc2616.html#section-2.2|RFC 2616, Section 2.2}
*/
static TOKEN = /^[^\x00-\x1F\x7F\x20\x09\x28\x29\x3C\x3E\x40\x2C\x3B\x3A\x5C\x22\x2F\x5B\x5D\x3F\x3D\x7B\x7D]+$/;
/**
* ```abnf
* cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E
* ; US-ASCII characters excluding CTLs,
* ; whitespace DQUOTE, comma, semicolon,
* ; and backslash
* ```
* @see {@link https://httpwg.org/specs/rfc6265.html#sane-set-cookie-syntax|RFC 6265, Section 4.1.1}
*/
static COOKIE_OCTET = /^[^\x00-\x1F\x7F\x20\x09\x22\x2C\x3B\x5C]+$/;
domain;
expires;
httpOnly;
maxAge;
partitioned;
path;
sameSite;
secure;
/**
* The name of this cookie.
*/
name;
/**
* The value of this cookie.
*/
value;
/**
* @param name The name of this cookie.
* @param value The value of this cookie.
* @param options Cookie options.
*/
constructor(name, value, options) {
if (!Cookie.TOKEN.test(name))
throw new SyntaxError(`Cookie name "${name}" is not a valid "token" as per RFC 2616, Section 2.2.`);
if (!Cookie.COOKIE_OCTET.test(value))
throw new SyntaxError(`In cookie "${name}", value "${value}" is not a valid "*cookie-octet" as per RFC 6265, Section 4.1.1.`);
this.name = name;
this.value = value;
this.domain = options?.domain;
this.expires = options?.expires;
this.httpOnly = options?.httpOnly ?? false;
this.maxAge = options?.maxAge;
this.partitioned = options?.partitioned ?? false;
this.path = options?.path;
this.sameSite = options?.sameSite;
this.secure = options?.secure ?? false;
}
serialise() {
return [
[this.name, this.value].join("="),
this.domain !== undefined ? ["Domain", this.domain].join("=") : null,
this.expires !== undefined ? ["Expires", this.expires.toUTCString()].join("=") : null,
this.httpOnly ? "HttpOnly" : null,
this.maxAge !== undefined ? ["Max-Age", this.maxAge].join("=") : null,
this.partitioned ? "Partitioned" : null,
this.path !== undefined ? ["Path", this.path].join("=") : null,
this.sameSite !== undefined ? ["SameSite", this.sameSite].join("=") : null,
this.secure ? "Secure" : null
].filter(p => p !== null).join("; ");
}
}
export { Cookie };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29va2llLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Nvb2tpZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sTUFBTTtJQUNSOzs7Ozs7Ozs7O09BVUc7SUFDSyxNQUFNLENBQVUsS0FBSyxHQUFHLGlHQUFpRyxDQUFDO0lBRWxJOzs7Ozs7OztPQVFHO0lBQ0ssTUFBTSxDQUFVLFlBQVksR0FBRyw2Q0FBNkMsQ0FBQztJQUVyRSxNQUFNLENBQVU7SUFDaEIsT0FBTyxDQUFRO0lBQ2YsUUFBUSxDQUFVO0lBQ2xCLE1BQU0sQ0FBVTtJQUNoQixXQUFXLENBQVU7SUFDckIsSUFBSSxDQUFVO0lBQ2QsUUFBUSxDQUFtQjtJQUMzQixNQUFNLENBQVU7SUFFaEM7O09BRUc7SUFDYSxJQUFJLENBQVM7SUFFN0I7O09BRUc7SUFDYSxLQUFLLENBQVM7SUFFOUI7Ozs7T0FJRztJQUNILFlBQW1CLElBQVksRUFBRSxLQUFhLEVBQUUsT0FBdUM7UUFDbkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4QixNQUFNLElBQUksV0FBVyxDQUFDLGdCQUFnQixJQUFJLHdEQUF3RCxDQUFDLENBQUM7UUFDeEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNoQyxNQUFNLElBQUksV0FBVyxDQUFDLGNBQWMsSUFBSSxhQUFhLEtBQUssa0VBQWtFLENBQUMsQ0FBQztRQUNsSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxLQUFLLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFTSxTQUFTO1FBQ1osT0FBTztZQUNILENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNwRSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNyRixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDakMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzlELElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNoQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQzs7QUF1RkwsT0FBTyxFQUFDLE1BQU0sRUFBQyxDQUFDIn0=