@sigiljs/sigil
Version:
TypeScript-first Node.js HTTP framework offering schema-driven routing, modifier-based middleware, plugin extensibility, and flexible response templating
2 lines (1 loc) • 1.56 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});class s{_precompiled;constructor(i,t,e={}){this._name=i,this._value=t,this._options=e,this.compile()}_name;get name(){return this._name}_value;get value(){return this._value}_options;get options(){return{...this._options}}compile(){if(this._precompiled)return this._precompiled;const i=[];if(i.push(`${this._name}=${this._value===null?"":this.encodeCookieValue(this._value)}`),this._options.expires&&i.push(`Expires=${this._options.expires.toUTCString()}`),typeof this._options.maxAge=="number"){if(!Number.isFinite(this._options.maxAge)||!Number.isInteger(this._options.maxAge))throw new TypeError("maxAge must be a finite integer (seconds).");i.push(`Max-Age=${this._options.maxAge}`)}this._options.domain&&i.push(`Domain=${this._options.domain}`),this._options.path&&i.push(`Path=${this._options.path}`),this._options.secure&&i.push("Secure"),this._options.httpOnly&&i.push("HttpOnly"),this._options.sameSite&&i.push(`SameSite=${this.capitalize(this._options.sameSite)}`),this._options.priority&&i.push(`Priority=${this.capitalize(this._options.priority)}`),this._options.partitioned&&i.push("Partitioned");const t=i.join("; ");return this._precompiled=t,t}setOptions(i){this._options={...this._options,...i},this.compile()}setValue(i){this._value=i,this.compile()}setName(i){this._name=i,this.compile()}encodeCookieValue(i){return encodeURIComponent(i).replace(/%20/g,"+")}capitalize(i){return i.charAt(0).toUpperCase()+i.slice(1)}}exports.default=s;