Skip to content
This repository was archived by the owner on Mar 1, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/common-helpers/src/zip.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* Zips two arrays into an array of tuples.
*/
export function zip<T, U>(arr1: T[], arr2: U[]): Array<[T, U]> {
export function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]> {
const length = Math.min(arr1.length, arr2.length);
const result: Array<[T, U]> = [];
for (let i = 0; i < length; i++) {
Expand Down
45 changes: 22 additions & 23 deletions packages/orm/src/client/contract.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ import type {
} from './crud-types';
import type { ClientOptions } from './options';
import type { RuntimePlugin } from './plugin';
import type { ZenStackPromise } from './promise';
import type { ToKysely } from './query-builder';

type TransactionUnsupportedMethods = (typeof TRANSACTION_UNSUPPORTED_METHODS)[number];
Expand Down Expand Up @@ -78,7 +77,7 @@ export type ClientContract<Schema extends SchemaDef, Options extends ClientOptio
* const result = await db.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`
* ```
*/
$executeRaw(query: TemplateStringsArray, ...values: any[]): ZenStackPromise<Schema, number>;
$executeRaw(query: TemplateStringsArray, ...values: any[]): Promise<number>;

/**
* Executes a raw query and returns the number of affected rows.
Expand All @@ -88,7 +87,7 @@ export type ClientContract<Schema extends SchemaDef, Options extends ClientOptio
* const result = await db.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com')
* ```
*/
$executeRawUnsafe(query: string, ...values: any[]): ZenStackPromise<Schema, number>;
$executeRawUnsafe(query: string, ...values: any[]): Promise<number>;

/**
* Performs a prepared raw query and returns the `SELECT` data.
Expand All @@ -97,7 +96,7 @@ export type ClientContract<Schema extends SchemaDef, Options extends ClientOptio
* const result = await db.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`
* ```
*/
$queryRaw<T = unknown>(query: TemplateStringsArray, ...values: any[]): ZenStackPromise<Schema, T>;
$queryRaw<T = unknown>(query: TemplateStringsArray, ...values: any[]): Promise<T>;

/**
* Performs a raw query and returns the `SELECT` data.
Expand All @@ -107,7 +106,7 @@ export type ClientContract<Schema extends SchemaDef, Options extends ClientOptio
* const result = await db.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com')
* ```
*/
$queryRawUnsafe<T = unknown>(query: string, ...values: any[]): ZenStackPromise<Schema, T>;
$queryRawUnsafe<T = unknown>(query: string, ...values: any[]): Promise<T>;

/**
* The current user identity.
Expand Down Expand Up @@ -157,7 +156,7 @@ export type ClientContract<Schema extends SchemaDef, Options extends ClientOptio
/**
* Starts a sequential transaction.
*/
$transaction<P extends ZenStackPromise<Schema, any>[]>(
$transaction<P extends Promise<any>[]>(
Comment thread
ymc9 marked this conversation as resolved.
Outdated
arg: [...P],
options?: { isolationLevel?: TransactionIsolationLevel },
): Promise<UnwrapTuplePromises<P>>;
Expand Down Expand Up @@ -359,7 +358,7 @@ export type AllModelOperations<
*/
findMany<T extends FindManyArgs<Schema, Model>>(
args?: SelectSubset<T, FindManyArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>[]>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>[]>;

/**
* Returns a uniquely identified entity.
Expand All @@ -369,7 +368,7 @@ export type AllModelOperations<
*/
findUnique<T extends FindUniqueArgs<Schema, Model>>(
args: SelectSubset<T, FindUniqueArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T> | null>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T> | null>;

/**
* Returns a uniquely identified entity or throws `NotFoundError` if not found.
Expand All @@ -379,7 +378,7 @@ export type AllModelOperations<
*/
findUniqueOrThrow<T extends FindUniqueArgs<Schema, Model>>(
args: SelectSubset<T, FindUniqueArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>>;

/**
* Returns the first entity.
Expand All @@ -389,7 +388,7 @@ export type AllModelOperations<
*/
findFirst<T extends FindFirstArgs<Schema, Model>>(
args?: SelectSubset<T, FindFirstArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T> | null>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T> | null>;

/**
* Returns the first entity or throws `NotFoundError` if not found.
Expand All @@ -399,7 +398,7 @@ export type AllModelOperations<
*/
findFirstOrThrow<T extends FindFirstArgs<Schema, Model>>(
args?: SelectSubset<T, FindFirstArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>>;

/**
* Creates a new entity.
Expand Down Expand Up @@ -455,7 +454,7 @@ export type AllModelOperations<
*/
create<T extends CreateArgs<Schema, Model>>(
args: SelectSubset<T, CreateArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>>;

/**
* Creates multiple entities. Only scalar fields are allowed.
Expand Down Expand Up @@ -484,7 +483,7 @@ export type AllModelOperations<
*/
createMany<T extends CreateManyArgs<Schema, Model>>(
args?: SelectSubset<T, CreateManyArgs<Schema, Model>>,
): ZenStackPromise<Schema, BatchResult>;
): Promise<BatchResult>;

/**
* Creates multiple entities and returns them.
Expand All @@ -506,7 +505,7 @@ export type AllModelOperations<
*/
createManyAndReturn<T extends CreateManyAndReturnArgs<Schema, Model>>(
args?: SelectSubset<T, CreateManyAndReturnArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>[]>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>[]>;

/**
* Updates a uniquely identified entity.
Expand Down Expand Up @@ -627,7 +626,7 @@ export type AllModelOperations<
*/
update<T extends UpdateArgs<Schema, Model>>(
args: SelectSubset<T, UpdateArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>>;

/**
* Updates multiple entities.
Expand All @@ -651,7 +650,7 @@ export type AllModelOperations<
*/
updateMany<T extends UpdateManyArgs<Schema, Model>>(
args: Subset<T, UpdateManyArgs<Schema, Model>>,
): ZenStackPromise<Schema, BatchResult>;
): Promise<BatchResult>;

/**
* Updates multiple entities and returns them.
Expand All @@ -677,7 +676,7 @@ export type AllModelOperations<
*/
updateManyAndReturn<T extends UpdateManyAndReturnArgs<Schema, Model>>(
args: Subset<T, UpdateManyAndReturnArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>[]>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>[]>;

/**
* Creates or updates an entity.
Expand All @@ -701,7 +700,7 @@ export type AllModelOperations<
*/
upsert<T extends UpsertArgs<Schema, Model>>(
args: SelectSubset<T, UpsertArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>>;

/**
* Deletes a uniquely identifiable entity.
Expand All @@ -724,7 +723,7 @@ export type AllModelOperations<
*/
delete<T extends DeleteArgs<Schema, Model>>(
args: SelectSubset<T, DeleteArgs<Schema, Model>>,
): ZenStackPromise<Schema, SimplifiedModelResult<Schema, Model, Options, T>>;
): Promise<SimplifiedModelResult<Schema, Model, Options, T>>;

/**
* Deletes multiple entities.
Expand All @@ -747,7 +746,7 @@ export type AllModelOperations<
*/
deleteMany<T extends DeleteManyArgs<Schema, Model>>(
args?: Subset<T, DeleteManyArgs<Schema, Model>>,
): ZenStackPromise<Schema, BatchResult>;
): Promise<BatchResult>;

/**
* Counts rows or field values.
Expand All @@ -769,7 +768,7 @@ export type AllModelOperations<
*/
count<T extends CountArgs<Schema, Model>>(
args?: Subset<T, CountArgs<Schema, Model>>,
): ZenStackPromise<Schema, Simplify<CountResult<Schema, Model, T>>>;
): Promise<Simplify<CountResult<Schema, Model, T>>>;

/**
* Aggregates rows.
Expand All @@ -790,7 +789,7 @@ export type AllModelOperations<
*/
aggregate<T extends AggregateArgs<Schema, Model>>(
args: Subset<T, AggregateArgs<Schema, Model>>,
): ZenStackPromise<Schema, Simplify<AggregateResult<Schema, Model, T>>>;
): Promise<Simplify<AggregateResult<Schema, Model, T>>>;

/**
* Groups rows by columns.
Expand Down Expand Up @@ -827,7 +826,7 @@ export type AllModelOperations<
*/
groupBy<T extends GroupByArgs<Schema, Model>>(
args: Subset<T, GroupByArgs<Schema, Model>>,
): ZenStackPromise<Schema, Simplify<GroupByResult<Schema, Model, T>>>;
): Promise<Simplify<GroupByResult<Schema, Model, T>>>;
};

export type OperationsIneligibleForDelegateModels = 'create' | 'createMany' | 'createManyAndReturn' | 'upsert';
Expand Down
89 changes: 43 additions & 46 deletions packages/orm/src/client/crud-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,14 @@ import type {
GetEnum,
GetEnums,
GetModel,
GetModelDiscriminator,
GetModelField,
GetModelFields,
GetModelFieldType,
GetModels,
GetSubModels,
GetTypeDefField,
GetTypeDefFields,
GetTypeDefFieldType,
GetTypeDefs,
IsDelegateModel,
ModelFieldIsOptional,
NonRelationFields,
RelationFields,
Expand Down Expand Up @@ -62,20 +59,25 @@ export type DefaultModelResult<
Optional = false,
Array = false,
> = WrapType<
IsDelegateModel<Schema, Model> extends true
? // delegate model's selection result is a union of all sub-models
DelegateUnionResult<Schema, Model, Options, GetSubModels<Schema, Model>, Omit>
: {
[Key in NonRelationFields<Schema, Model> as ShouldOmitField<
Schema,
Model,
Options,
Key,
Omit
> extends true
? never
: Key]: MapModelFieldType<Schema, Model, Key>;
},
{
[Key in NonRelationFields<Schema, Model> as ShouldOmitField<Schema, Model, Options, Key, Omit> extends true
? never
: Key]: MapModelFieldType<Schema, Model, Key>;
},
// IsDelegateModel<Schema, Model> extends true
// ? // delegate model's selection result is a union of all sub-models
// DelegateUnionResult<Schema, Model, Options, GetSubModels<Schema, Model>, Omit>
// : {
// [Key in NonRelationFields<Schema, Model> as ShouldOmitField<
// Schema,
// Model,
// Options,
// Key,
// Omit
// > extends true
// ? never
// : Key]: MapModelFieldType<Schema, Model, Key>;
// },
Comment thread
ymc9 marked this conversation as resolved.
Optional,
Array
>;
Expand Down Expand Up @@ -120,15 +122,15 @@ type SchemaLevelOmit<
Field extends GetModelFields<Schema, Model>,
> = GetModelField<Schema, Model, Field>['omit'] extends true ? true : false;

type DelegateUnionResult<
Schema extends SchemaDef,
Model extends GetModels<Schema>,
Options extends ClientOptions<Schema>,
SubModel extends GetModels<Schema>,
Omit = undefined,
> = SubModel extends string // typescript union distribution
? DefaultModelResult<Schema, SubModel, Options, Omit> & { [K in GetModelDiscriminator<Schema, Model>]: SubModel } // fixate discriminated field
: never;
// type DelegateUnionResult<
// Schema extends SchemaDef,
// Model extends GetModels<Schema>,
// Options extends ClientOptions<Schema>,
// SubModel extends GetModels<Schema>,
// Omit = undefined,
// > = SubModel extends string // typescript union distribution
// ? DefaultModelResult<Schema, SubModel, Options, Omit> & { [K in GetModelDiscriminator<Schema, Model>]: SubModel } // fixate discriminated field
// : never;

type ModelSelectResult<
Schema extends SchemaDef,
Expand Down Expand Up @@ -1029,7 +1031,7 @@ type OppositeRelationFields<
Model extends GetModels<Schema>,
Field extends GetModelFields<Schema, Model>,
Opposite = OppositeRelation<Schema, Model, Field>,
> = Opposite extends RelationInfo ? (Opposite['fields'] extends string[] ? Opposite['fields'] : []) : [];
> = Opposite extends RelationInfo ? (Opposite['fields'] extends readonly string[] ? Opposite['fields'] : []) : [];

type OppositeRelationAndFK<
Schema extends SchemaDef,
Expand Down Expand Up @@ -1083,21 +1085,16 @@ export type FindArgs<
Model extends GetModels<Schema>,
Collection extends boolean,
AllowFilter extends boolean = true,
> =
ProviderSupportsDistinct<Schema> extends true
? (Collection extends true
? SortAndTakeArgs<Schema, Model> & {
/**
* Distinct fields
*/
distinct?: OrArray<NonRelationFields<Schema, Model>>;
}
: {}) &
(AllowFilter extends true ? FilterArgs<Schema, Model> : {}) &
SelectIncludeOmit<Schema, Model, Collection>
: (Collection extends true ? SortAndTakeArgs<Schema, Model> : {}) &
(AllowFilter extends true ? FilterArgs<Schema, Model> : {}) &
SelectIncludeOmit<Schema, Model, Collection>;
> = (Collection extends true
? SortAndTakeArgs<Schema, Model> & {
/**
* Distinct fields
*/
distinct?: OrArray<NonRelationFields<Schema, Model>>;
}
: {}) &
(AllowFilter extends true ? FilterArgs<Schema, Model> : {}) &
SelectIncludeOmit<Schema, Model, Collection>;

export type FindManyArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = FindArgs<Schema, Model, true>;

Expand Down Expand Up @@ -2002,7 +1999,7 @@ type NestedDeleteManyInput<

type NonOwnedRelationFields<Schema extends SchemaDef, Model extends GetModels<Schema>> = keyof {
[Key in RelationFields<Schema, Model> as GetModelField<Schema, Model, Key>['relation'] extends {
references: unknown[];
references: readonly unknown[];
}
? never
: Key]: true;
Expand All @@ -2014,8 +2011,8 @@ type HasToManyRelations<Schema extends SchemaDef, Model extends GetModels<Schema
? false
: true;

Comment thread
ymc9 marked this conversation as resolved.
type ProviderSupportsDistinct<Schema extends SchemaDef> = Schema['provider']['type'] extends 'postgresql'
? true
: false;
// type ProviderSupportsDistinct<Schema extends SchemaDef> = Schema['provider']['type'] extends 'postgresql'
// ? true
// : false;

// #endregion
Loading