{"version":3,"sources":["../../src/session/map-session.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport type { Session } from './types';\n\nfunction generateId() {\n  return randomUUID();\n}\n\nconst DEFAULT_MAX_INACTIVE_INTERVAL = 1800;\n\nexport class MapSession implements Session {\n  private id: string;\n  private sessionAttrs = new Map<string, string | number>();\n  private creationTime = Date.now();\n  private lastAccessedTime = this.creationTime;\n  private maxInactiveInterval = DEFAULT_MAX_INACTIVE_INTERVAL;\n\n  constructor(id?: string);\n  constructor(session: Session);\n  constructor(input?: string | Session) {\n    if (typeof input === 'undefined') {\n      this.id = generateId();\n    } else if (typeof input === 'string') {\n      this.id = input;\n    } else {\n      const session = input;\n      this.id = session.getId();\n\n      for (const attrName of session.getAttributeNames()) {\n        const attrValue = session.getAttribute(attrName);\n        if (attrValue !== null) {\n          this.setAttribute(attrName, attrValue);\n        }\n      }\n\n      this.lastAccessedTime = session.getLastAccessedTime();\n      this.creationTime = session.getCreationTime();\n      this.maxInactiveInterval = session.getMaxInactiveInterval();\n    }\n  }\n\n  setCreationTime(creationTime: number) {\n    this.creationTime = creationTime;\n  }\n\n  // override\n  getId() {\n    return this.id;\n  }\n\n  changeSessionId() {\n    const changedId = generateId();\n    this.id = changedId;\n    return changedId;\n  }\n\n  getAttribute(name: string) {\n    return this.sessionAttrs.get(name) ?? null;\n  }\n\n  getAttributeNames(): string[] {\n    return Array.from(this.sessionAttrs.keys());\n  }\n\n  setAttribute(name: string, value: string | number) {\n    if (value === null) {\n      this.removeAttribute(name);\n    } else {\n      this.sessionAttrs.set(name, value);\n    }\n  }\n\n  removeAttribute(name: string) {\n    this.sessionAttrs.delete(name);\n  }\n\n  getCreationTime() {\n    return this.creationTime;\n  }\n\n  getLastAccessedTime() {\n    return this.lastAccessedTime;\n  }\n\n  setLastAccessedTime(lastAccessedTime: number) {\n    this.lastAccessedTime = lastAccessedTime;\n  }\n\n  getMaxInactiveInterval() {\n    return this.maxInactiveInterval;\n  }\n\n  setMaxInactiveInterval(interval: number) {\n    this.maxInactiveInterval = interval;\n  }\n\n  isExpired() {\n    if (this.maxInactiveInterval < 0) return false;\n    return Date.now() - this.maxInactiveInterval * 1000 - this.lastAccessedTime >= 0;\n  }\n}\n"],"mappings":";AAAA,SAAS,kBAAkB;AAG3B,SAAS,aAAa;AACpB,SAAO,WAAW;AACpB;AAEA,IAAM,gCAAgC;AAE/B,IAAM,aAAN,MAAoC;AAAA,EACjC;AAAA,EACA,eAAe,oBAAI,IAA6B;AAAA,EAChD,eAAe,KAAK,IAAI;AAAA,EACxB,mBAAmB,KAAK;AAAA,EACxB,sBAAsB;AAAA,EAI9B,YAAY,OAA0B;AACpC,QAAI,OAAO,UAAU,aAAa;AAChC,WAAK,KAAK,WAAW;AAAA,IACvB,WAAW,OAAO,UAAU,UAAU;AACpC,WAAK,KAAK;AAAA,IACZ,OAAO;AACL,YAAM,UAAU;AAChB,WAAK,KAAK,QAAQ,MAAM;AAExB,iBAAW,YAAY,QAAQ,kBAAkB,GAAG;AAClD,cAAM,YAAY,QAAQ,aAAa,QAAQ;AAC/C,YAAI,cAAc,MAAM;AACtB,eAAK,aAAa,UAAU,SAAS;AAAA,QACvC;AAAA,MACF;AAEA,WAAK,mBAAmB,QAAQ,oBAAoB;AACpD,WAAK,eAAe,QAAQ,gBAAgB;AAC5C,WAAK,sBAAsB,QAAQ,uBAAuB;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,gBAAgB,cAAsB;AACpC,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA,EAGA,QAAQ;AACN,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAAkB;AAChB,UAAM,YAAY,WAAW;AAC7B,SAAK,KAAK;AACV,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,MAAc;AACzB,WAAO,KAAK,aAAa,IAAI,IAAI,KAAK;AAAA,EACxC;AAAA,EAEA,oBAA8B;AAC5B,WAAO,MAAM,KAAK,KAAK,aAAa,KAAK,CAAC;AAAA,EAC5C;AAAA,EAEA,aAAa,MAAc,OAAwB;AACjD,QAAI,UAAU,MAAM;AAClB,WAAK,gBAAgB,IAAI;AAAA,IAC3B,OAAO;AACL,WAAK,aAAa,IAAI,MAAM,KAAK;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,gBAAgB,MAAc;AAC5B,SAAK,aAAa,OAAO,IAAI;AAAA,EAC/B;AAAA,EAEA,kBAAkB;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,sBAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAoB,kBAA0B;AAC5C,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,yBAAyB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,uBAAuB,UAAkB;AACvC,SAAK,sBAAsB;AAAA,EAC7B;AAAA,EAEA,YAAY;AACV,QAAI,KAAK,sBAAsB,EAAG,QAAO;AACzC,WAAO,KAAK,IAAI,IAAI,KAAK,sBAAsB,MAAO,KAAK,oBAAoB;AAAA,EACjF;AACF;","names":[]}