From 4cc2db5ac4e712dbec3bbfb53454aa312e24ff1e Mon Sep 17 00:00:00 2001 From: Fischi Date: Wed, 24 Sep 2025 01:39:36 +0200 Subject: [PATCH 1/2] fix issue #433: UserSession type inference was broken --- src/runtime/server/utils/session.ts | 5 +++-- src/runtime/utils/type-utils.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 src/runtime/utils/type-utils.ts diff --git a/src/runtime/server/utils/session.ts b/src/runtime/server/utils/session.ts index 1fd65485..0a2d70fc 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 { OmitWithIndexSignature } from "../../utils/type-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/utils/type-utils.ts b/src/runtime/utils/type-utils.ts new file mode 100644 index 00000000..abbfc6b4 --- /dev/null +++ b/src/runtime/utils/type-utils.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> From 663747a3a852df2460db4ac77e88a0a5d2f67dec Mon Sep 17 00:00:00 2001 From: Fischi Date: Wed, 24 Sep 2025 21:07:08 +0200 Subject: [PATCH 2/2] fix: lints for utility types --- src/runtime/server/utils/session.ts | 2 +- src/runtime/types/utils.d.ts | 14 ++++++++++++++ src/runtime/utils/type-utils.ts | 14 -------------- 3 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 src/runtime/types/utils.d.ts delete mode 100644 src/runtime/utils/type-utils.ts diff --git a/src/runtime/server/utils/session.ts b/src/runtime/server/utils/session.ts index 0a2d70fc..2ca62ec5 100644 --- a/src/runtime/server/utils/session.ts +++ b/src/runtime/server/utils/session.ts @@ -2,7 +2,7 @@ import type { H3Event, SessionConfig } from 'h3' import { useSession, createError, isEvent } from 'h3' import { defu } from 'defu' import { createHooks } from 'hookable' -import { OmitWithIndexSignature } from "../../utils/type-utils" +import type { OmitWithIndexSignature } from '../../types/utils' import { useRuntimeConfig } from '#imports' import type { UserSession, UserSessionRequired } from '#auth-utils' 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> diff --git a/src/runtime/utils/type-utils.ts b/src/runtime/utils/type-utils.ts deleted file mode 100644 index abbfc6b4..00000000 --- a/src/runtime/utils/type-utils.ts +++ /dev/null @@ -1,14 +0,0 @@ -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>