Skip to content

Commit eebf69a

Browse files
authored
perf: improve tsc performance for runtime project (#97)
1 parent 64cfad0 commit eebf69a

File tree

3 files changed

+88
-36
lines changed

3 files changed

+88
-36
lines changed

packages/runtime/src/client/client-impl.ts

Lines changed: 73 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -411,100 +411,156 @@ function createModelCrudHandler<Schema extends SchemaDef, Model extends GetModel
411411
});
412412
};
413413

414+
// type parameters to operation handlers are explicitly specified to improve tsc performance
414415
return {
415416
findUnique: (args: unknown) => {
416-
return createPromise('findUnique', args, new FindOperationHandler(client, model, inputValidator), true);
417+
return createPromise(
418+
'findUnique',
419+
args,
420+
new FindOperationHandler<Schema>(client, model, inputValidator),
421+
true,
422+
);
417423
},
418424

419425
findUniqueOrThrow: (args: unknown) => {
420426
return createPromise(
421427
'findUnique',
422428
args,
423-
new FindOperationHandler(client, model, inputValidator),
429+
new FindOperationHandler<Schema>(client, model, inputValidator),
424430
true,
425431
true,
426432
);
427433
},
428434

429435
findFirst: (args: unknown) => {
430-
return createPromise('findFirst', args, new FindOperationHandler(client, model, inputValidator), true);
436+
return createPromise(
437+
'findFirst',
438+
args,
439+
new FindOperationHandler<Schema>(client, model, inputValidator),
440+
true,
441+
);
431442
},
432443

433444
findFirstOrThrow: (args: unknown) => {
434445
return createPromise(
435446
'findFirst',
436447
args,
437-
new FindOperationHandler(client, model, inputValidator),
448+
new FindOperationHandler<Schema>(client, model, inputValidator),
438449
true,
439450
true,
440451
);
441452
},
442453

443454
findMany: (args: unknown) => {
444-
return createPromise('findMany', args, new FindOperationHandler(client, model, inputValidator), true);
455+
return createPromise(
456+
'findMany',
457+
args,
458+
new FindOperationHandler<Schema>(client, model, inputValidator),
459+
true,
460+
);
445461
},
446462

447463
create: (args: unknown) => {
448-
return createPromise('create', args, new CreateOperationHandler(client, model, inputValidator), true);
464+
return createPromise(
465+
'create',
466+
args,
467+
new CreateOperationHandler<Schema>(client, model, inputValidator),
468+
true,
469+
);
449470
},
450471

451472
createMany: (args: unknown) => {
452-
return createPromise('createMany', args, new CreateOperationHandler(client, model, inputValidator), false);
473+
return createPromise(
474+
'createMany',
475+
args,
476+
new CreateOperationHandler<Schema>(client, model, inputValidator),
477+
false,
478+
);
453479
},
454480

455481
createManyAndReturn: (args: unknown) => {
456482
return createPromise(
457483
'createManyAndReturn',
458484
args,
459-
new CreateOperationHandler(client, model, inputValidator),
485+
new CreateOperationHandler<Schema>(client, model, inputValidator),
460486
true,
461487
);
462488
},
463489

464490
update: (args: unknown) => {
465-
return createPromise('update', args, new UpdateOperationHandler(client, model, inputValidator), true);
491+
return createPromise(
492+
'update',
493+
args,
494+
new UpdateOperationHandler<Schema>(client, model, inputValidator),
495+
true,
496+
);
466497
},
467498

468499
updateMany: (args: unknown) => {
469-
return createPromise('updateMany', args, new UpdateOperationHandler(client, model, inputValidator), false);
500+
return createPromise(
501+
'updateMany',
502+
args,
503+
new UpdateOperationHandler<Schema>(client, model, inputValidator),
504+
false,
505+
);
470506
},
471507

472508
updateManyAndReturn: (args: unknown) => {
473509
return createPromise(
474510
'updateManyAndReturn',
475511
args,
476-
new UpdateOperationHandler(client, model, inputValidator),
512+
new UpdateOperationHandler<Schema>(client, model, inputValidator),
477513
true,
478514
);
479515
},
480516

481517
upsert: (args: unknown) => {
482-
return createPromise('upsert', args, new UpdateOperationHandler(client, model, inputValidator), true);
518+
return createPromise(
519+
'upsert',
520+
args,
521+
new UpdateOperationHandler<Schema>(client, model, inputValidator),
522+
true,
523+
);
483524
},
484525

485526
delete: (args: unknown) => {
486-
return createPromise('delete', args, new DeleteOperationHandler(client, model, inputValidator), true);
527+
return createPromise(
528+
'delete',
529+
args,
530+
new DeleteOperationHandler<Schema>(client, model, inputValidator),
531+
true,
532+
);
487533
},
488534

489535
deleteMany: (args: unknown) => {
490-
return createPromise('deleteMany', args, new DeleteOperationHandler(client, model, inputValidator), false);
536+
return createPromise(
537+
'deleteMany',
538+
args,
539+
new DeleteOperationHandler<Schema>(client, model, inputValidator),
540+
false,
541+
);
491542
},
492543

493544
count: (args: unknown) => {
494-
return createPromise('count', args, new CountOperationHandler(client, model, inputValidator), false);
545+
return createPromise(
546+
'count',
547+
args,
548+
new CountOperationHandler<Schema>(client, model, inputValidator),
549+
false,
550+
);
495551
},
496552

497553
aggregate: (args: unknown) => {
498554
return createPromise(
499555
'aggregate',
500556
args,
501-
new AggregateOperationHandler(client, model, inputValidator),
557+
new AggregateOperationHandler<Schema>(client, model, inputValidator),
502558
false,
503559
);
504560
},
505561

506562
groupBy: (args: unknown) => {
507-
return createPromise('groupBy', args, new GroupByOperationHandler(client, model, inputValidator));
563+
return createPromise('groupBy', args, new GroupByOperationHandler<Schema>(client, model, inputValidator));
508564
},
509565
} as ModelOperations<Schema, Model>;
510566
}

packages/runtime/src/utils/type-utils.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,19 @@ export type WrapType<T, Optional = false, Array = false> = Optional extends true
2222
? T[]
2323
: T;
2424

25-
export type MapBaseType<T> = T extends 'String'
26-
? string
27-
: T extends 'Boolean'
28-
? boolean
29-
: T extends 'Int' | 'Float'
30-
? number
31-
: T extends 'BigInt'
32-
? bigint
33-
: T extends 'Decimal'
34-
? Decimal
35-
: T extends 'DateTime'
36-
? Date
37-
: T extends 'Bytes'
38-
? Uint8Array
39-
: T extends 'Json'
40-
? JsonValue
41-
: unknown;
25+
type TypeMap = {
26+
String: string;
27+
Boolean: boolean;
28+
Int: number;
29+
Float: number;
30+
BigInt: bigint;
31+
Decimal: Decimal;
32+
DateTime: Date;
33+
Bytes: Uint8Array;
34+
Json: JsonValue;
35+
};
36+
37+
export type MapBaseType<T extends string> = T extends keyof TypeMap ? TypeMap[T] : unknown;
4238

4339
export type JsonValue = string | number | boolean | null | JsonObject | JsonArray;
4440

packages/runtime/test/client-api/computed-fields.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ model User {
1414
{
1515
computedFields: {
1616
User: {
17-
upperName: (eb) => eb.fn('upper', ['name']),
17+
upperName: (eb: any) => eb.fn('upper', ['name']),
1818
},
1919
},
2020
} as any,
@@ -90,7 +90,7 @@ model User {
9090
{
9191
computedFields: {
9292
User: {
93-
upperName: (eb) => eb.lit(null),
93+
upperName: (eb: any) => eb.lit(null),
9494
},
9595
},
9696
} as any,

0 commit comments

Comments
 (0)