@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 1.66 kB
JavaScript
import{Cookie,Type}from"./Cookie.js";export class CookieParser{#i;#t;#e;#o;#s;#n;#l;constructor(i){i&&(this.#i=i.toLowerCase().replace(/^\./,"")),this.#t=[],this.#o=0}static parseSetCookie(i,t){return new CookieParser(t).parseSetCookie(i)}cookies(){return this.#t}parseSetCookie(i){if(!this.initialize(i))return null;for(let i=this.extractKeyValue();i;i=this.extractKeyValue())this.#s?this.#s.addAttribute(i.key,i.value):this.addCookie(i,Type.Response),this.advanceAndCheckCookieDelimiter()&&this.flushCookie();return this.flushCookie(),this.#t}initialize(i){return this.#e=i,"string"==typeof i&&(this.#t=[],this.#s=null,this.#n="",this.#o=this.#e.length,!0)}flushCookie(){this.#s&&(this.#s.setSize(this.#o-this.#e.length-this.#l),this.#s.setCookieLine(this.#n.replace("\n",""))),this.#s=null,this.#n=""}extractKeyValue(){if(!this.#e||!this.#e.length)return null;const i=/^[ \t]*([^=;]+)[ \t]*(?:=[ \t]*([^;\n]*))?/.exec(this.#e);if(!i)return console.error("Failed parsing cookie header before: "+this.#e),null;const t=new KeyValue(i[1]&&i[1].trim(),i[2]&&i[2].trim(),this.#o-this.#e.length);return this.#n+=i[0],this.#e=this.#e.slice(i[0].length),t}advanceAndCheckCookieDelimiter(){if(!this.#e)return!1;const i=/^\s*[\n;]\s*/.exec(this.#e);return!!i&&(this.#n+=i[0],this.#e=this.#e.slice(i[0].length),null!==i[0].match("\n"))}addCookie(i,t){this.#s&&this.#s.setSize(i.position-this.#l),this.#s="string"==typeof i.value?new Cookie(i.key,i.value,t):new Cookie("",i.key,t),this.#i&&this.#s.addAttribute("domain",this.#i),this.#l=i.position,this.#t.push(this.#s)}}class KeyValue{key;value;position;constructor(i,t,e){this.key=i,this.value=t,this.position=e}}