From 6906d76075dd9caf1f94795fa148a63cc5b81f96 Mon Sep 17 00:00:00 2001 From: steel <mael.acier@ensiie.fr> Date: Sat, 14 Sep 2024 22:06:44 +0200 Subject: [PATCH] module augmentation --- src/app.d.ts | 9 +++++---- src/lib/adapters/sqlite-memory.ts | 7 +++++++ src/lib/index.ts | 19 ++++++++++++++++--- src/lib/types.ts | 13 +------------ src/routes/login/+page.server.ts | 3 ++- 5 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/app.d.ts b/src/app.d.ts index a979ab2..d5b5ecf 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,11 +1,12 @@ // See https://kit.svelte.dev/docs/types#app - -import type { Locals as AriseLocals } from "$lib/types.ts"; -import type { aidc } from "./auth.ts"; +import { Locals as ILocals } from "$lib/types.ts"; declare global { namespace App { - interface Locals extends AriseLocals<typeof aidc> {} + interface Locals extends ILocals { + user: import("lucia").User | null; + session: import("lucia").Session | null; + } } } diff --git a/src/lib/adapters/sqlite-memory.ts b/src/lib/adapters/sqlite-memory.ts index 19aa4ba..b9c63ed 100644 --- a/src/lib/adapters/sqlite-memory.ts +++ b/src/lib/adapters/sqlite-memory.ts @@ -78,3 +78,10 @@ export interface DatabaseSession extends DefaultSessionAttributes { id: string; id_token: string; } + +declare module "../index.js" { + interface Foo { + Session: DefaultSessionAttributes; + User: Omit<DatabaseUser<Record<never, never>>, "id">; + } +} diff --git a/src/lib/index.ts b/src/lib/index.ts index f35f9de..f065c6b 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,6 +1,6 @@ import { redirect, type Handle, error, type RequestEvent } from "@sveltejs/kit"; import { sequence } from "@sveltejs/kit/hooks"; -import { generateId, type Session } from "lucia"; +import { generateId, Lucia, type Session } from "lucia"; import type { Client, TokenSet } from "openid-client"; import { Issuer, errors, generators } from "openid-client"; import { SEE_OTHER } from "readable-http-codes"; @@ -15,7 +15,7 @@ import type { Config, CookieNames, Paths } from "./types.js"; import type { DefaultSessionAttributes, DefaultUserAttributes, - LuciaAdapter, + // LuciaAdapter, } from "./lucia.js"; interface InternalUser { @@ -29,9 +29,22 @@ export interface DatabaseSession extends DefaultSessionAttributes { id_token: string; } +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface Foo {} + +interface Bar< + User extends Record<never, never>, + Session extends Record<never, never>, +> { + User: User; + Session: Session; +} + declare module "lucia" { interface Register { - Lucia: LuciaAdapter; + Lucia: Foo extends Bar<infer _User, infer _Session> + ? Lucia<_Session, _User> + : never; DatabaseUserAttributes: Omit<InternalUser, "id">; DatabaseSessionAttributes: Omit<DatabaseSession, "id">; } diff --git a/src/lib/types.ts b/src/lib/types.ts index 275ca43..3b4cd25 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -5,8 +5,6 @@ import type { DefaultUserAttributes, LuciaAdapter, } from "./lucia.js"; -import { AriseIdConnect } from "./index.js"; -import type { Session, User } from "lucia"; export interface Config< Session extends DefaultSessionAttributes, @@ -38,15 +36,6 @@ export type CookieNames = { oauthCodeVerifier: string; }; -type Extract<T> = - T extends AriseIdConnect<infer Session, infer User> - ? { session: Session; user: User } - : never; - -export interface Locals< - T extends AriseIdConnect<DefaultSessionAttributes, DefaultUserAttributes>, -> { - user: (Extract<T>["user"] & User) | null; - session: (Extract<T>["session"] & Session) | null; +export interface Locals { authPaths: Paths; } diff --git a/src/routes/login/+page.server.ts b/src/routes/login/+page.server.ts index c465c92..0cc8fd1 100644 --- a/src/routes/login/+page.server.ts +++ b/src/routes/login/+page.server.ts @@ -1,6 +1,7 @@ import { redirect } from "@sveltejs/kit"; - +type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; export async function load(event) { + type User = Expand<import("lucia").User>; if (event.locals.user) { return redirect(302, "/"); } -- GitLab