hono-sess
Version:
A Simple Session Middleware for Hono
76 lines • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MemoryStore = void 0;
const store_1 = require("./store");
const session_1 = require("./session");
class MemoryStore extends store_1.Store {
sessions;
constructor() {
super();
this.sessions = Object.create(null);
}
all(callback) {
const sessionIds = Object.keys(this.sessions);
const sessions = Object.create(null);
for (const sessionId of sessionIds) {
const session = getSession.call(this, sessionId);
if (session) {
sessions[sessionId] = session;
}
}
callback && callback(null, sessions);
}
clear(callback) {
this.sessions = Object.create(null);
callback && callback();
}
destroy(sessionId, callback) {
delete this.sessions[sessionId];
callback && callback();
}
get(sessionId, callback) {
callback(null, getSession.call(this, sessionId));
}
set(sessionId, session, callback) {
this.sessions[sessionId] = JSON.stringify(session);
callback && callback();
}
length(callback) {
this.all((err, sessions) => {
if (err)
return callback(err);
callback(null, Object.keys(sessions).length);
});
}
touch(sessionId, session, callback) {
const currentSession = getSession.call(this, sessionId);
if (currentSession) {
currentSession.cookie = session.cookie;
this.sessions[sessionId] = JSON.stringify(currentSession);
}
callback && callback();
}
generate(req) {
const session = new session_1.Session(req, null);
req.session = session;
}
}
exports.MemoryStore = MemoryStore;
function getSession(sessionId) {
const sess = this.sessions[sessionId];
if (!sess) {
return;
}
const parsed = JSON.parse(sess);
if (parsed.cookie) {
const expires = typeof parsed.cookie.expires === 'string'
? new Date(parsed.cookie.expires)
: parsed.cookie.expires;
if (expires && expires <= Date.now()) {
delete this.sessions[sessionId];
return;
}
}
return parsed;
}
//# sourceMappingURL=memory.js.map