@shivaedev/effect-prisma 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +5 -0
- package/dist/internal/type-normalization.d.ts +22 -0
- package/dist/internal/type-normalization.d.ts.map +1 -0
- package/dist/internal/type-normalization.js +2 -0
- package/dist/internal/type-normalization.js.map +1 -0
- package/dist/relation/prisma-methods.d.ts +5 -4
- package/dist/relation/prisma-methods.d.ts.map +1 -1
- package/dist/relation.d.ts +4 -3
- package/dist/relation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/internal/type-normalization.ts +37 -0
- package/src/relation/prisma-methods.ts +23 -5
- package/src/relation.ts +12 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.4.1 - 2026-08-03
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Expose PostgreSQL timestamp and timestamp-with-time-zone fields as `Date`,
|
|
10
|
+
matching Prisma Next's runtime codecs even when its generated contract renders
|
|
11
|
+
those fields as branded strings.
|
|
12
|
+
|
|
5
13
|
## 0.4.0 - 2026-08-03
|
|
6
14
|
|
|
7
15
|
### Added
|
package/README.md
CHANGED
|
@@ -95,6 +95,11 @@ ordering, pagination, distinct queries, aggregates, grouping, and
|
|
|
95
95
|
create/update/delete terminals. Model variants are deliberately deferred rather
|
|
96
96
|
than exposed with weakened types.
|
|
97
97
|
|
|
98
|
+
PostgreSQL timestamp and timestamp-with-time-zone fields use JavaScript `Date`
|
|
99
|
+
values for reads, writes, filters, selections, includes, and Streams. The facade
|
|
100
|
+
normalizes Prisma Next's current branded-string contract declarations to the
|
|
101
|
+
`Date` values its runtime codecs actually accept and return.
|
|
102
|
+
|
|
98
103
|
## Transactions
|
|
99
104
|
|
|
100
105
|
Transactions keep the same database API and are implicitly scoped:
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type TimestampBrand = {
|
|
2
|
+
readonly __timestampPrecision: number | undefined;
|
|
3
|
+
} | {
|
|
4
|
+
readonly __timestamptzPrecision: number | undefined;
|
|
5
|
+
};
|
|
6
|
+
type PreservedValue = string | number | boolean | bigint | symbol | Date | Uint8Array | ArrayBuffer;
|
|
7
|
+
export type NormalizePrismaArguments<Arguments extends readonly unknown[]> = {
|
|
8
|
+
[Index in keyof Arguments]: NormalizePrismaValue<Arguments[Index]>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Prisma Next's PostgreSQL codecs return JavaScript Dates for timestamp values,
|
|
12
|
+
* while its generated contracts currently render precision-bearing timestamp
|
|
13
|
+
* fields as branded strings. Keep the public Effect facade aligned with the
|
|
14
|
+
* codec's actual input and output values without modifying generated contracts.
|
|
15
|
+
*/
|
|
16
|
+
export type NormalizePrismaValue<Value> = Value extends TimestampBrand ? Date : Value extends PreservedValue ? Value : Value extends (...arguments_: infer Arguments) => infer Result ? (...arguments_: NormalizePrismaArguments<Arguments>) => NormalizePrismaValue<Result> : Value extends readonly unknown[] ? {
|
|
17
|
+
[Index in keyof Value]: NormalizePrismaValue<Value[Index]>;
|
|
18
|
+
} : Value extends object ? {
|
|
19
|
+
[Key in keyof Value]: NormalizePrismaValue<Value[Key]>;
|
|
20
|
+
} : Value;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=type-normalization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-normalization.d.ts","sourceRoot":"","sources":["../../src/internal/type-normalization.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAChB;IAAE,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE3D,KAAK,cAAc,GAChB,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,UAAU,GACV,WAAW,CAAC;AAEf,MAAM,MAAM,wBAAwB,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,IAAI;KAC3E,KAAK,IAAI,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;CAClE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,CAAC,KAAK,IAAI,KAAK,SAAS,cAAc,GACnE,IAAI,GACJ,KAAK,SAAS,cAAc,GAC3B,KAAK,GACL,KAAK,SAAS,CAAC,GAAG,UAAU,EAAE,MAAM,SAAS,KAAK,MAAM,MAAM,GAC7D,CACA,GAAG,UAAU,EAAE,wBAAwB,CAAC,SAAS,CAAC,KAC9C,oBAAoB,CAAC,MAAM,CAAC,GAChC,KAAK,SAAS,SAAS,OAAO,EAAE,GAC/B;KAAG,KAAK,IAAI,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;CAAE,GAC9D,KAAK,SAAS,MAAM,GACnB;KAAG,GAAG,IAAI,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAAE,GAC1D,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-normalization.js","sourceRoot":"","sources":["../../src/internal/type-normalization.ts"],"names":[],"mappings":""}
|
|
@@ -3,6 +3,7 @@ import type { SqlStorage } from "@prisma-next/sql-contract/types";
|
|
|
3
3
|
import type { AggregateBuilder, AggregateResult, AggregateSpec, DefaultModelRow, GroupedCollection, Collection as PrismaCollection } from "@prisma-next/sql-orm-client";
|
|
4
4
|
import type { Effect, Stream } from "effect";
|
|
5
5
|
import type { PrismaError } from "../error.js";
|
|
6
|
+
import type { NormalizePrismaArguments, NormalizePrismaValue } from "../internal/type-normalization.js";
|
|
6
7
|
import type { CollectionResult, Relation, RelationQuery } from "../relation.js";
|
|
7
8
|
import type { IncludeMethod } from "./include.js";
|
|
8
9
|
type AnyFunction = (...arguments_: ReadonlyArray<never>) => unknown;
|
|
@@ -11,7 +12,7 @@ type FieldTuple<Row> = readonly [keyof Row & string, ...(keyof Row & string)[]];
|
|
|
11
12
|
type Simplify<Value> = {
|
|
12
13
|
[Key in keyof Value]: Value[Key];
|
|
13
14
|
};
|
|
14
|
-
type TerminalMethod<Method, Requirement> = Method extends (...arguments_: infer Arguments) => PromiseLike<infer Value> ? (...arguments_: Arguments) => Effect.Effect<Awaited<Value
|
|
15
|
+
type TerminalMethod<Method, Requirement> = Method extends (...arguments_: infer Arguments) => PromiseLike<infer Value> ? (...arguments_: NormalizePrismaArguments<Arguments>) => Effect.Effect<NormalizePrismaValue<Awaited<Value>>, PrismaError, Requirement> : never;
|
|
15
16
|
type SelectMethod<Collection, Requirement, Contract, Model extends string> = Contract extends AnyPostgresContract ? Collection extends PrismaCollection<Contract, Model, infer _Row, infer State> ? {
|
|
16
17
|
select<Fields extends FieldTuple<DefaultModelRow<Contract, Model>>>(...fields: Fields): Relation<PrismaCollection<Contract, Model, Pick<DefaultModelRow<Contract, Model>, Fields[number]>, State>, Requirement, Contract, Model>;
|
|
17
18
|
} : Record<never, never> : Collection extends {
|
|
@@ -26,7 +27,7 @@ type AggregateSuccess<Collection, Contract extends AnyPostgresContract, Model ex
|
|
|
26
27
|
type AggregateMethod<Collection, Requirement, Contract, Model extends string> = Contract extends AnyPostgresContract ? Collection extends {
|
|
27
28
|
aggregate: AnyFunction;
|
|
28
29
|
} ? {
|
|
29
|
-
aggregate<Spec extends AggregateSpec>(make: (aggregate: AggregateBuilder<Contract, Model>) => Spec, configure?: AggregateConfigure<Collection>): Effect.Effect<AggregateSuccess<Collection, Contract, Model, Spec
|
|
30
|
+
aggregate<Spec extends AggregateSpec>(make: (aggregate: AggregateBuilder<Contract, Model>) => Spec, configure?: AggregateConfigure<Collection>): Effect.Effect<NormalizePrismaValue<AggregateSuccess<Collection, Contract, Model, Spec>>, PrismaError, Requirement>;
|
|
30
31
|
} : Record<never, never> : Record<never, never>;
|
|
31
32
|
type CollectionMethods<Collection, Requirement, Contract, Model extends string> = Contract extends AnyPostgresContract ? Collection extends PrismaCollection<Contract, Model, infer _Row, infer State> ? {
|
|
32
33
|
groupBy<Fields extends FieldTuple<DefaultModelRow<Contract, Model>>>(...fields: Fields): Relation<GroupedCollection<Contract, Model, Fields>, Requirement, Contract, Model>;
|
|
@@ -43,11 +44,11 @@ type CollectionMethods<Collection, Requirement, Contract, Model extends string>
|
|
|
43
44
|
readonly [Key in "delete" | "deleteAll" | "deleteCount"]: TerminalMethod<Collection[Key], Requirement>;
|
|
44
45
|
} : Record<never, never>) : Record<never, never> : Record<never, never>;
|
|
45
46
|
type CollectionConveniences<Collection, Requirement, Contract, Model extends string> = Contract extends AnyPostgresContract ? Collection extends PrismaCollection<Contract, Model, infer Row, infer _State> ? {
|
|
46
|
-
readonly stream: Stream.Stream<Row
|
|
47
|
+
readonly stream: Stream.Stream<NormalizePrismaValue<Row>, PrismaError, Requirement>;
|
|
47
48
|
count(): RelationQuery<number, Requirement, Contract, Model>;
|
|
48
49
|
exists(): Effect.Effect<boolean, PrismaError, Requirement>;
|
|
49
50
|
} : Record<never, never> : CollectionResult<Collection> extends ReadonlyArray<infer Row> ? {
|
|
50
|
-
readonly stream: Stream.Stream<Row
|
|
51
|
+
readonly stream: Stream.Stream<NormalizePrismaValue<Row>, PrismaError, Requirement>;
|
|
51
52
|
count(): Effect.Effect<number, PrismaError, Requirement>;
|
|
52
53
|
exists(): Effect.Effect<boolean, PrismaError, Requirement>;
|
|
53
54
|
} : Record<never, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-methods.d.ts","sourceRoot":"","sources":["../../src/relation/prisma-methods.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,UAAU,IAAI,gBAAgB,EAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,KAAK,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;AACpE,KAAK,mBAAmB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AACtD,KAAK,UAAU,CAAC,GAAG,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAChF,KAAK,QAAQ,CAAC,KAAK,IAAI;KAAG,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;CAAE,CAAC;AAE5D,KAAK,cAAc,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,SAAS,CACzD,GAAG,UAAU,EAAE,MAAM,SAAS,KAC1B,WAAW,CAAC,MAAM,KAAK,CAAC,GAC1B,CACA,GAAG,UAAU,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"prisma-methods.d.ts","sourceRoot":"","sources":["../../src/relation/prisma-methods.ts"],"names":[],"mappings":"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"}
|
package/dist/relation.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { Effect } from "effect";
|
|
2
2
|
import type { PrismaError } from "./error.js";
|
|
3
|
+
import type { NormalizePrismaArguments, NormalizePrismaValue } from "./internal/type-normalization.js";
|
|
3
4
|
import type { PrismaRelationMethods } from "./relation/prisma-methods.js";
|
|
4
5
|
type AnyFunction = (...arguments_: ReadonlyArray<never>) => unknown;
|
|
5
6
|
export type CollectionResult<Collection> = Collection extends {
|
|
6
7
|
all(): infer Result;
|
|
7
|
-
} ? Awaited<Result
|
|
8
|
+
} ? NormalizePrismaValue<Awaited<Result>> : never;
|
|
8
9
|
type NormalizeTerminal<Name, Result> = Name extends "first" ? import("effect").Option.Option<Exclude<Result, null>> : Result;
|
|
9
|
-
type WrapReturn<Name, Result, Requirement, Contract, Model extends string> = Result extends PromiseLike<infer Value> ? Effect.Effect<NormalizeTerminal<Name, Awaited<Value
|
|
10
|
+
type WrapReturn<Name, Result, Requirement, Contract, Model extends string> = Result extends PromiseLike<infer Value> ? Effect.Effect<NormalizeTerminal<Name, NormalizePrismaValue<Awaited<Value>>>, PrismaError, Requirement> : Result extends object ? Relation<Result, Requirement, Contract, Model> : never;
|
|
10
11
|
type WrapFunction<Name, Function_, Requirement, Contract, Model extends string> = Function_ extends {
|
|
11
12
|
(...arguments_: infer Arguments1): infer Result1;
|
|
12
13
|
(...arguments_: infer Arguments2): infer Result2;
|
|
@@ -14,7 +15,7 @@ type WrapFunction<Name, Function_, Requirement, Contract, Model extends string>
|
|
|
14
15
|
(...arguments_: infer Arguments4): infer Result4;
|
|
15
16
|
(...arguments_: infer Arguments5): infer Result5;
|
|
16
17
|
(...arguments_: infer Arguments6): infer Result6;
|
|
17
|
-
} ? ((...arguments_: Arguments1) => WrapReturn<Name, Result1, Requirement, Contract, Model>) & ((...arguments_: Arguments2) => WrapReturn<Name, Result2, Requirement, Contract, Model>) & ((...arguments_: Arguments3) => WrapReturn<Name, Result3, Requirement, Contract, Model>) & ((...arguments_: Arguments4) => WrapReturn<Name, Result4, Requirement, Contract, Model>) & ((...arguments_: Arguments5) => WrapReturn<Name, Result5, Requirement, Contract, Model>) & ((...arguments_: Arguments6) => WrapReturn<Name, Result6, Requirement, Contract, Model>) : never;
|
|
18
|
+
} ? ((...arguments_: NormalizePrismaArguments<Arguments1>) => WrapReturn<Name, Result1, Requirement, Contract, Model>) & ((...arguments_: NormalizePrismaArguments<Arguments2>) => WrapReturn<Name, Result2, Requirement, Contract, Model>) & ((...arguments_: NormalizePrismaArguments<Arguments3>) => WrapReturn<Name, Result3, Requirement, Contract, Model>) & ((...arguments_: NormalizePrismaArguments<Arguments4>) => WrapReturn<Name, Result4, Requirement, Contract, Model>) & ((...arguments_: NormalizePrismaArguments<Arguments5>) => WrapReturn<Name, Result5, Requirement, Contract, Model>) & ((...arguments_: NormalizePrismaArguments<Arguments6>) => WrapReturn<Name, Result6, Requirement, Contract, Model>) : never;
|
|
18
19
|
type FunctionKeys<Value> = {
|
|
19
20
|
[Key in keyof Value]-?: Value[Key] extends AnyFunction ? Key : never;
|
|
20
21
|
}[keyof Value];
|
package/dist/relation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,KAAK,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;AAEpE,MAAM,MAAM,gBAAgB,CAAC,UAAU,IAAI,UAAU,SAAS;IAC7D,GAAG,IAAI,MAAM,MAAM,CAAC;CACpB,GACE,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
type TimestampBrand =
|
|
2
|
+
| { readonly __timestampPrecision: number | undefined }
|
|
3
|
+
| { readonly __timestamptzPrecision: number | undefined };
|
|
4
|
+
|
|
5
|
+
type PreservedValue =
|
|
6
|
+
| string
|
|
7
|
+
| number
|
|
8
|
+
| boolean
|
|
9
|
+
| bigint
|
|
10
|
+
| symbol
|
|
11
|
+
| Date
|
|
12
|
+
| Uint8Array
|
|
13
|
+
| ArrayBuffer;
|
|
14
|
+
|
|
15
|
+
export type NormalizePrismaArguments<Arguments extends readonly unknown[]> = {
|
|
16
|
+
[Index in keyof Arguments]: NormalizePrismaValue<Arguments[Index]>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Prisma Next's PostgreSQL codecs return JavaScript Dates for timestamp values,
|
|
21
|
+
* while its generated contracts currently render precision-bearing timestamp
|
|
22
|
+
* fields as branded strings. Keep the public Effect facade aligned with the
|
|
23
|
+
* codec's actual input and output values without modifying generated contracts.
|
|
24
|
+
*/
|
|
25
|
+
export type NormalizePrismaValue<Value> = Value extends TimestampBrand
|
|
26
|
+
? Date
|
|
27
|
+
: Value extends PreservedValue
|
|
28
|
+
? Value
|
|
29
|
+
: Value extends (...arguments_: infer Arguments) => infer Result
|
|
30
|
+
? (
|
|
31
|
+
...arguments_: NormalizePrismaArguments<Arguments>
|
|
32
|
+
) => NormalizePrismaValue<Result>
|
|
33
|
+
: Value extends readonly unknown[]
|
|
34
|
+
? { [Index in keyof Value]: NormalizePrismaValue<Value[Index]> }
|
|
35
|
+
: Value extends object
|
|
36
|
+
? { [Key in keyof Value]: NormalizePrismaValue<Value[Key]> }
|
|
37
|
+
: Value;
|
|
@@ -10,6 +10,10 @@ import type {
|
|
|
10
10
|
} from "@prisma-next/sql-orm-client";
|
|
11
11
|
import type { Effect, Stream } from "effect";
|
|
12
12
|
import type { PrismaError } from "../error.js";
|
|
13
|
+
import type {
|
|
14
|
+
NormalizePrismaArguments,
|
|
15
|
+
NormalizePrismaValue,
|
|
16
|
+
} from "../internal/type-normalization.js";
|
|
13
17
|
import type { CollectionResult, Relation, RelationQuery } from "../relation.js";
|
|
14
18
|
import type { IncludeMethod } from "./include.js";
|
|
15
19
|
|
|
@@ -22,8 +26,12 @@ type TerminalMethod<Method, Requirement> = Method extends (
|
|
|
22
26
|
...arguments_: infer Arguments
|
|
23
27
|
) => PromiseLike<infer Value>
|
|
24
28
|
? (
|
|
25
|
-
...arguments_: Arguments
|
|
26
|
-
) => Effect.Effect<
|
|
29
|
+
...arguments_: NormalizePrismaArguments<Arguments>
|
|
30
|
+
) => Effect.Effect<
|
|
31
|
+
NormalizePrismaValue<Awaited<Value>>,
|
|
32
|
+
PrismaError,
|
|
33
|
+
Requirement
|
|
34
|
+
>
|
|
27
35
|
: never;
|
|
28
36
|
|
|
29
37
|
type SelectMethod<
|
|
@@ -103,7 +111,9 @@ type AggregateMethod<
|
|
|
103
111
|
make: (aggregate: AggregateBuilder<Contract, Model>) => Spec,
|
|
104
112
|
configure?: AggregateConfigure<Collection>,
|
|
105
113
|
): Effect.Effect<
|
|
106
|
-
|
|
114
|
+
NormalizePrismaValue<
|
|
115
|
+
AggregateSuccess<Collection, Contract, Model, Spec>
|
|
116
|
+
>,
|
|
107
117
|
PrismaError,
|
|
108
118
|
Requirement
|
|
109
119
|
>;
|
|
@@ -171,14 +181,22 @@ type CollectionConveniences<
|
|
|
171
181
|
infer _State
|
|
172
182
|
>
|
|
173
183
|
? {
|
|
174
|
-
readonly stream: Stream.Stream<
|
|
184
|
+
readonly stream: Stream.Stream<
|
|
185
|
+
NormalizePrismaValue<Row>,
|
|
186
|
+
PrismaError,
|
|
187
|
+
Requirement
|
|
188
|
+
>;
|
|
175
189
|
count(): RelationQuery<number, Requirement, Contract, Model>;
|
|
176
190
|
exists(): Effect.Effect<boolean, PrismaError, Requirement>;
|
|
177
191
|
}
|
|
178
192
|
: Record<never, never>
|
|
179
193
|
: CollectionResult<Collection> extends ReadonlyArray<infer Row>
|
|
180
194
|
? {
|
|
181
|
-
readonly stream: Stream.Stream<
|
|
195
|
+
readonly stream: Stream.Stream<
|
|
196
|
+
NormalizePrismaValue<Row>,
|
|
197
|
+
PrismaError,
|
|
198
|
+
Requirement
|
|
199
|
+
>;
|
|
182
200
|
count(): Effect.Effect<number, PrismaError, Requirement>;
|
|
183
201
|
exists(): Effect.Effect<boolean, PrismaError, Requirement>;
|
|
184
202
|
}
|
package/src/relation.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { Effect } from "effect";
|
|
2
2
|
import type { PrismaError } from "./error.js";
|
|
3
|
+
import type {
|
|
4
|
+
NormalizePrismaArguments,
|
|
5
|
+
NormalizePrismaValue,
|
|
6
|
+
} from "./internal/type-normalization.js";
|
|
3
7
|
import type { PrismaRelationMethods } from "./relation/prisma-methods.js";
|
|
4
8
|
|
|
5
9
|
type AnyFunction = (...arguments_: ReadonlyArray<never>) => unknown;
|
|
@@ -7,7 +11,7 @@ type AnyFunction = (...arguments_: ReadonlyArray<never>) => unknown;
|
|
|
7
11
|
export type CollectionResult<Collection> = Collection extends {
|
|
8
12
|
all(): infer Result;
|
|
9
13
|
}
|
|
10
|
-
? Awaited<Result
|
|
14
|
+
? NormalizePrismaValue<Awaited<Result>>
|
|
11
15
|
: never;
|
|
12
16
|
|
|
13
17
|
type NormalizeTerminal<Name, Result> = Name extends "first"
|
|
@@ -17,7 +21,7 @@ type NormalizeTerminal<Name, Result> = Name extends "first"
|
|
|
17
21
|
type WrapReturn<Name, Result, Requirement, Contract, Model extends string> =
|
|
18
22
|
Result extends PromiseLike<infer Value>
|
|
19
23
|
? Effect.Effect<
|
|
20
|
-
NormalizeTerminal<Name, Awaited<Value
|
|
24
|
+
NormalizeTerminal<Name, NormalizePrismaValue<Awaited<Value>>>,
|
|
21
25
|
PrismaError,
|
|
22
26
|
Requirement
|
|
23
27
|
>
|
|
@@ -40,22 +44,22 @@ type WrapFunction<
|
|
|
40
44
|
(...arguments_: infer Arguments6): infer Result6;
|
|
41
45
|
}
|
|
42
46
|
? ((
|
|
43
|
-
...arguments_: Arguments1
|
|
47
|
+
...arguments_: NormalizePrismaArguments<Arguments1>
|
|
44
48
|
) => WrapReturn<Name, Result1, Requirement, Contract, Model>) &
|
|
45
49
|
((
|
|
46
|
-
...arguments_: Arguments2
|
|
50
|
+
...arguments_: NormalizePrismaArguments<Arguments2>
|
|
47
51
|
) => WrapReturn<Name, Result2, Requirement, Contract, Model>) &
|
|
48
52
|
((
|
|
49
|
-
...arguments_: Arguments3
|
|
53
|
+
...arguments_: NormalizePrismaArguments<Arguments3>
|
|
50
54
|
) => WrapReturn<Name, Result3, Requirement, Contract, Model>) &
|
|
51
55
|
((
|
|
52
|
-
...arguments_: Arguments4
|
|
56
|
+
...arguments_: NormalizePrismaArguments<Arguments4>
|
|
53
57
|
) => WrapReturn<Name, Result4, Requirement, Contract, Model>) &
|
|
54
58
|
((
|
|
55
|
-
...arguments_: Arguments5
|
|
59
|
+
...arguments_: NormalizePrismaArguments<Arguments5>
|
|
56
60
|
) => WrapReturn<Name, Result5, Requirement, Contract, Model>) &
|
|
57
61
|
((
|
|
58
|
-
...arguments_: Arguments6
|
|
62
|
+
...arguments_: NormalizePrismaArguments<Arguments6>
|
|
59
63
|
) => WrapReturn<Name, Result6, Requirement, Contract, Model>)
|
|
60
64
|
: never;
|
|
61
65
|
|