fix: possible fix for type seralization error

This commit is contained in:
Bereket Engida
2024-12-05 20:59:19 +03:00
parent fdfd738eca
commit 3dde447e89
6 changed files with 79 additions and 89 deletions

View File

@@ -16,7 +16,7 @@ import type {
InferUserFromClient,
} from "./types";
type CamelCase<S extends string> =
export type CamelCase<S extends string> =
S extends `${infer P1}-${infer P2}${infer P3}`
? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}`
: Lowercase<S>;
@@ -30,7 +30,7 @@ export type PathToObject<
? { [K in CamelCase<Segment>]: Fn }
: never;
type InferSignUpEmailCtx<
export type InferSignUpEmailCtx<
ClientOpts extends ClientOptions,
FetchOptions extends BetterFetchOption,
> = {
@@ -42,7 +42,7 @@ type InferSignUpEmailCtx<
fetchOptions?: FetchOptions;
} & UnionToIntersection<InferAdditionalFromClient<ClientOpts, "user", "input">>;
type InferUserUpdateCtx<
export type InferUserUpdateCtx<
ClientOpts extends ClientOptions,
FetchOptions extends BetterFetchOption,
> = {
@@ -53,7 +53,7 @@ type InferUserUpdateCtx<
UnionToIntersection<InferAdditionalFromClient<ClientOpts, "user", "input">>
>;
type InferCtx<
export type InferCtx<
C extends Context<any, any>,
FetchOptions extends BetterFetchOption,
> = C["body"] extends Record<string, any>
@@ -74,9 +74,12 @@ type InferCtx<
fetchOptions?: FetchOptions;
};
type MergeRoutes<T> = UnionToIntersection<T>;
export type MergeRoutes<T> = UnionToIntersection<T>;
type InferReturn<R, O extends ClientOptions> = R extends Record<string, any>
export type InferReturn<R, O extends ClientOptions> = R extends Record<
string,
any
>
? StripEmptyObjects<
{
user: R extends { user: any } ? InferUserFromClient<O> : never;

View File

@@ -4,8 +4,6 @@ import type {
ClientOptions,
InferActions,
InferClientAPI,
InferSessionFromClient,
InferUserFromClient,
IsSignal,
} from "../types";
import { createDynamicPathProxy } from "../proxy";
@@ -24,23 +22,22 @@ export function capitalizeFirstLetter(str: string) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<
infer Plugin
>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: () => ReturnType<Atoms[key]["get"]>;
}
export type InferResolvedHooks<O extends ClientOptions> =
O["plugins"] extends Array<infer Plugin>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: () => ReturnType<Atoms[key]["get"]>;
}
: {}
: {}
: {}
: {}
: {};
: {};
export function createAuthClient<Option extends ClientOptions>(
options?: Option,

View File

@@ -6,8 +6,6 @@ import type {
ClientOptions,
InferActions,
InferClientAPI,
InferSessionFromClient,
InferUserFromClient,
IsSignal,
} from "../types";
import type { Accessor } from "solid-js";
@@ -22,23 +20,22 @@ function getAtomKey(str: string) {
return `use${capitalizeFirstLetter(str)}`;
}
type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<
infer Plugin
>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: () => Accessor<ReturnType<Atoms[key]["get"]>>;
}
export type InferResolvedHooks<O extends ClientOptions> =
O["plugins"] extends Array<infer Plugin>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: () => Accessor<ReturnType<Atoms[key]["get"]>>;
}
: {}
: {}
: {}
: {}
: {};
: {};
export function createAuthClient<Option extends ClientOptions>(
options?: Option,

View File

@@ -5,8 +5,6 @@ import type {
ClientOptions,
InferActions,
InferClientAPI,
InferSessionFromClient,
InferUserFromClient,
IsSignal,
} from "../types";
import { createDynamicPathProxy } from "../proxy";
@@ -17,23 +15,22 @@ import type {
BetterFetchResponse,
} from "@better-fetch/fetch";
type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<
infer Plugin
>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: () => Atoms[key];
}
export type InferResolvedHooks<O extends ClientOptions> =
O["plugins"] extends Array<infer Plugin>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: () => Atoms[key];
}
: {}
: {}
: {}
: {}
: {};
: {};
export function createAuthClient<Option extends ClientOptions>(
options?: Option,

View File

@@ -5,8 +5,6 @@ import type {
ClientOptions,
InferActions,
InferClientAPI,
InferSessionFromClient,
InferUserFromClient,
IsSignal,
} from "./types";
import { createDynamicPathProxy } from "./proxy";
@@ -17,23 +15,22 @@ import type {
BetterFetchResponse,
} from "@better-fetch/fetch";
type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<
infer Plugin
>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: Atoms[key];
}
export type InferResolvedHooks<O extends ClientOptions> =
O["plugins"] extends Array<infer Plugin>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: Atoms[key];
}
: {}
: {}
: {}
: {}
: {};
: {};
export function createAuthClient<Option extends ClientOptions>(
options?: Option,

View File

@@ -20,23 +20,22 @@ function getAtomKey(str: string) {
return `use${capitalizeFirstLetter(str)}`;
}
type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<
infer Plugin
>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: DeepReadonly<Ref<ReturnType<Atoms[key]["get"]>>>;
}
export type InferResolvedHooks<O extends ClientOptions> =
O["plugins"] extends Array<infer Plugin>
? Plugin extends BetterAuthClientPlugin
? Plugin["getAtoms"] extends (fetch: any) => infer Atoms
? Atoms extends Record<string, any>
? {
[key in keyof Atoms as IsSignal<key> extends true
? never
: key extends string
? `use${Capitalize<key>}`
: never]: DeepReadonly<Ref<ReturnType<Atoms[key]["get"]>>>;
}
: {}
: {}
: {}
: {}
: {};
: {};
export function createAuthClient<Option extends ClientOptions>(
options?: Option,