diff --git a/server/server-route.ts b/server/server-route.ts index d097f31..8c353d0 100755 --- a/server/server-route.ts +++ b/server/server-route.ts @@ -86,13 +86,13 @@ export const useServerRouter = >( if (route.handler instanceof Promise) { route.handler = await route.handler; } - + let result = null; if (!route.opt || route.opt?.request_as === "raw") { - result = await route.handler.default(); + result = await route.handler.default.bind(arg)(); } else { const params = await req.json(); - result = await route.handler.default(...params); + result = await route.handler.default.bind(arg)(...params); } if (typeof result === "object" && result instanceof Response) { diff --git a/server/server-session.ts b/server/server-session.ts index 2ab91ce..eccec46 100755 --- a/server/server-session.ts +++ b/server/server-session.ts @@ -1,40 +1,14 @@ /// import { ServerContext, useServerRouter } from "./server-route"; +import { + newSessionStore, + SessionData, + SessionStore, + SingleSession, +} from "./session/session-store"; -export type SessionData | undefined> = T & { - uid: string; - role: string; - sid: string; - expired_at?: number; - created_at: number; -}; - -export type SingleSession> = { - data: T; - track: (arg: { path: string }) => Promise; - destroy: () => Promise; -}; - -type FilterSessionArg = { - uid: string; - sid: string; - role: string; - created_at: { gt?: number; lt?: number }; - expired_at: { gt?: number; lt?: number }; -}; -export type ServerSession> = { - create: ( - data: Record & { - uid: string; - role: string; - expired_at?: number; - } - ) => Promise>; - findMany: (arg: Partial) => Promise[]>; - findFirst: ( - arg: Partial - ) => Promise>; +export type ServerSession> = SessionStore & { current?: SingleSession; }; @@ -47,52 +21,24 @@ export const createSessionServer = >(arg: { encrypt?: boolean; router?: ReturnType; }): SessionServerHandler => { - const internal = { - has_router: false, - router: null as null | ReturnType, - }; - const server_session: Omit, "current"> = { - async create(data) { - const new_session: SingleSession = { - data: { ...data, created_at: Date.now() } as T, - async destroy() {}, - async track(arg) {}, - }; - return new_session; - }, - async findFirst(arg) { - return null; - }, - async findMany(arg) { - return []; - }, - }; - - if (typeof arg.router === "object" && arg.router instanceof Promise) { - internal.has_router = true; - arg.router.then((e) => { - internal.router = e; - }); - } + const server_session = newSessionStore(); const server_handler: SessionServerHandler = { async cleanup() {}, async handle(server_arg) { const { req, handle } = server_arg; - console.log("makaru", internal.has_router, internal.router); - return new Response("fas"); - // if (internal.has_router && internal.router) { - // return await internal.router.handle({ - // ...server_arg, - // session: { - // ...server_session, - // current: undefined, - // }, - // }); - // } + if (arg.router) { + return await arg.router.handle({ + ...server_arg, + session: { + ...server_session, + current: undefined, + }, + }); + } - // return handle(req); + return handle(req); }, }; diff --git a/server/session/session-store.ts b/server/session/session-store.ts new file mode 100644 index 0000000..9153420 --- /dev/null +++ b/server/session/session-store.ts @@ -0,0 +1,57 @@ +export type NewSessionData> = T & { + uid: string; + role: string; + expired_at?: number; +}; + +export type SessionData> = NewSessionData & { + sid: string; + created_at: number; +}; + +export type SingleSession> = { + data: T; + track: (arg: { path: string }) => Promise; + destroy: () => Promise; +}; + +type FilterSessionArg = { + uid: string; + sid: string; + role: string; + created_at: { gt?: number; lt?: number }; + expired_at: { gt?: number; lt?: number }; +}; + +export type SessionStore> = { + create: ( + data: Record & { + uid: string; + role: string; + expired_at?: number; + } + ) => Promise>; + findMany: (arg: Partial) => Promise[]>; + findFirst: ( + arg: Partial + ) => Promise>; +}; + +export const newSessionStore = () => { + return { + async create(data) { + const new_session: SingleSession = { + data: { ...data, created_at: Date.now() } as T, + async destroy() {}, + async track(arg) {}, + }; + return new_session; + }, + async findFirst(arg) { + return null; + }, + async findMany(arg) { + return []; + }, + } as SessionStore; +};