Skip to content

Commit

Permalink
fix: mikro-orm context
Browse files Browse the repository at this point in the history
  • Loading branch information
darkbasic committed Nov 11, 2023
1 parent dcbd493 commit b784af6
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
19 changes: 13 additions & 6 deletions modules/module-core/src/utils/context-builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,14 @@ function getHeader(
return header ?? null;
}

export const context = async <IUser extends User = User, Ctx extends object = object>(
export const context = async <
IUserOrContext extends object = User,
Ctx extends object = object,
_User_ extends User = IUserOrContext extends User ? IUserOrContext : User,
_Context_ extends object = IUserOrContext extends User
? IContext<IUserOrContext>
: IUserOrContext,
>(
{
req,
request,
Expand All @@ -51,8 +58,8 @@ export const context = async <IUser extends User = User, Ctx extends object = ob
},
{ createOperationController, ctx, ...options }: AccountsContextOptions<Ctx>
): AccountsContextOptions<Ctx> extends { ctx: any }
? Promise<IContext<IUser> & Ctx>
: Promise<IContext<IUser>> => {
? Promise<_Context_ & Ctx>
: Promise<_Context_> => {
const reqOrRequest = request ?? req;
if (!reqOrRequest) {
return {
Expand All @@ -63,7 +70,7 @@ export const context = async <IUser extends User = User, Ctx extends object = ob
userAgent: '',
},
...ctx,
};
} satisfies IContext<_User_> as _Context_;
}

const headerName = options.headerName || 'Authorization';
Expand All @@ -81,7 +88,7 @@ export const context = async <IUser extends User = User, Ctx extends object = ob
});
try {
user = await controller.injector
.get<AccountsServer<IUser>>(AccountsServer)
.get<AccountsServer<_User_>>(AccountsServer)
.resumeSession(authToken);
} catch (error) {
// Empty catch
Expand Down Expand Up @@ -112,5 +119,5 @@ export const context = async <IUser extends User = User, Ctx extends object = ob
ip,
},
...ctx,
};
} satisfies IContext<_User_> as _Context_;
};
7 changes: 5 additions & 2 deletions modules/module-mikro-orm/src/types/IContext.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { IContext as AccountsContext, User } from '@accounts/types';
import { IContext as AccountsContext } from '@accounts/types';
import { Connection, EntityManager, IDatabaseDriver } from '@mikro-orm/core';
import { IUser } from '@accounts/mikro-orm';

export interface IContext<IUser extends User = User> extends AccountsContext<IUser> {
export interface IContext<User extends IUser<any, any, any> = IUser<any, any, any>>
extends Omit<AccountsContext, 'user'> {
user?: User;
em?: EntityManager<IDatabaseDriver<Connection>>;
}
9 changes: 5 additions & 4 deletions modules/module-mikro-orm/src/utils/context-builder.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { IUser } from '@accounts/mikro-orm';
import { context as contextBase } from '@accounts/module-core';
import { User } from '@accounts/types';
import { Connection, EntityManager, IDatabaseDriver } from '@mikro-orm/core';
import { IContext } from '../types';

export const context = async <
IUser extends User = User,
User extends IUser<any, any, any> = IUser<any, any, any>,
Ctx extends { em?: EntityManager<IDatabaseDriver<Connection>> } = object,
>(
...args: Parameters<typeof contextBase<IUser, Ctx>>
): ReturnType<typeof contextBase<IUser, Ctx>> => contextBase(...args);
...args: Parameters<typeof contextBase<IContext<User>, Ctx>>
): ReturnType<typeof contextBase<IContext<User>, Ctx>> => contextBase(...args);

0 comments on commit b784af6

Please sign in to comment.