diff --git a/src/runtime/server/utils/session.ts b/src/runtime/server/utils/session.ts index 1fd65485..2ca62ec5 100644 --- a/src/runtime/server/utils/session.ts +++ b/src/runtime/server/utils/session.ts @@ -2,6 +2,7 @@ import type { H3Event, SessionConfig } from 'h3' import { useSession, createError, isEvent } from 'h3' import { defu } from 'defu' import { createHooks } from 'hookable' +import type { OmitWithIndexSignature } from '../../types/utils' import { useRuntimeConfig } from '#imports' import type { UserSession, UserSessionRequired } from '#auth-utils' @@ -40,7 +41,7 @@ export async function getUserSession(event: UseSessionEvent): Promise, config?: Partial): Promise { +export async function setUserSession(event: H3Event, data: OmitWithIndexSignature, config?: Partial): Promise { const session = await _useSession(event, config) await session.update(defu(data, session.data)) @@ -53,7 +54,7 @@ export async function setUserSession(event: H3Event, data: Omit, config?: Partial): Promise { +export async function replaceUserSession(event: H3Event, data: OmitWithIndexSignature, config?: Partial): Promise { const session = await _useSession(event, config) await session.clear() diff --git a/src/runtime/types/utils.d.ts b/src/runtime/types/utils.d.ts new file mode 100644 index 00000000..6560b339 --- /dev/null +++ b/src/runtime/types/utils.d.ts @@ -0,0 +1,14 @@ +type Prettify = { + [K in keyof T]: T[K] +} + +type RemoveIndexSignature = { + [K in keyof T as string extends K ? never : K]: T[K] +} + +type GetIndexSignature = { + [K in keyof T as string extends K ? K : never]: T[K] +} + +// Basic Omit but does not break if a [x:string]:unknown Index Signature is present in the type +export type OmitWithIndexSignature, K extends keyof RemoveIndexSignature> = Prettify, K> & GetIndexSignature>