@shivaedev/effect-prisma 0.2.0 → 0.4.0
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 +21 -0
- package/README.md +9 -0
- package/dist/database.d.ts +5 -0
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +1 -0
- package/dist/database.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/executor.d.ts +2 -1
- package/dist/internal/executor.d.ts.map +1 -1
- package/dist/internal/query-execution.d.ts +6 -0
- package/dist/internal/query-execution.d.ts.map +1 -0
- package/dist/internal/query-execution.js +5 -0
- package/dist/internal/query-execution.js.map +1 -0
- package/dist/internal/relation-runtime.d.ts.map +1 -1
- package/dist/internal/relation-runtime.js +6 -18
- package/dist/internal/relation-runtime.js.map +1 -1
- package/dist/internal/relation-stream.d.ts +7 -0
- package/dist/internal/relation-stream.d.ts.map +1 -0
- package/dist/internal/relation-stream.js +28 -0
- package/dist/internal/relation-stream.js.map +1 -0
- package/dist/internal/transaction.d.ts.map +1 -1
- package/dist/internal/transaction.js +2 -1
- package/dist/internal/transaction.js.map +1 -1
- package/dist/testing/types.d.ts +3 -10
- package/dist/testing/types.d.ts.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js.map +1 -1
- package/package.json +5 -5
- package/src/database.ts +13 -0
- package/src/index.ts +4 -0
- package/src/internal/executor.ts +2 -1
- package/src/internal/query-execution.ts +10 -0
- package/src/internal/relation-runtime.ts +18 -43
- package/src/internal/relation-stream.ts +66 -0
- package/src/internal/transaction.ts +2 -1
- package/src/testing/types.ts +3 -15
- package/src/testing.ts +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.4.0 - 2026-08-03
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Export database definition helpers and Prisma Next boolean filter
|
|
10
|
+
combinators for higher-level integrations.
|
|
11
|
+
|
|
12
|
+
## 0.3.0 - 2026-08-03
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Export database service and requirement types from the testing entrypoint for
|
|
17
|
+
higher-level test harnesses.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Serialize queries sharing a transaction connection, and buffer
|
|
22
|
+
transaction-scoped Streams before downstream processing. Queries and Streams
|
|
23
|
+
outside transactions remain parallel and incremental.
|
|
24
|
+
- Target Effect 4.0.0-beta.102 across the runtime and optional Vitest helpers.
|
|
25
|
+
|
|
5
26
|
## 0.2.0 - 2026-07-26
|
|
6
27
|
|
|
7
28
|
### Added
|
package/README.md
CHANGED
|
@@ -115,6 +115,15 @@ yield* db.transaction(
|
|
|
115
115
|
Nested package transactions reuse the active transaction. Successful programs
|
|
116
116
|
commit; failure, defect, and interruption roll back.
|
|
117
117
|
|
|
118
|
+
Queries composed concurrently inside a transaction are executed one at a time
|
|
119
|
+
on its single connection. Once a transaction query starts, interruption waits
|
|
120
|
+
for it to settle before releasing that connection. Query effects outside
|
|
121
|
+
transactions remain parallel.
|
|
122
|
+
|
|
123
|
+
Transaction-scoped Streams are read into memory before emitting rows. This
|
|
124
|
+
releases the connection before downstream Stream effects run database queries.
|
|
125
|
+
Streams outside transactions retain incremental fetching.
|
|
126
|
+
|
|
118
127
|
## Vitest
|
|
119
128
|
|
|
120
129
|
Install `@effect/vitest` to use the optional testing entrypoint:
|
package/dist/database.d.ts
CHANGED
|
@@ -30,6 +30,11 @@ type DatabaseFactoryOptions<Contract extends AnyPostgresContract> = {
|
|
|
30
30
|
export interface DatabaseDefinition<Contract extends AnyPostgresContract, Requirement = ExecutorIdentifier<DefaultModels<Contract>>> extends Context.Service<DatabaseIdentifier<Contract>, DatabaseService<Contract, Requirement>> {
|
|
31
31
|
readonly layer: (options: DatabaseLayerOptions) => Layer.Layer<DatabaseIdentifier<Contract> | Requirement, PrismaError>;
|
|
32
32
|
}
|
|
33
|
+
export type AnyDatabase = Effect.Effect<unknown, never, unknown> & {
|
|
34
|
+
readonly layer: (...arguments_: ReadonlyArray<never>) => Layer.Any;
|
|
35
|
+
};
|
|
36
|
+
export type DatabaseRequirement<Database> = Database extends DatabaseDefinition<AnyPostgresContract, infer Requirement> ? Requirement : never;
|
|
37
|
+
export type DatabaseServiceOf<Database extends AnyDatabase> = Effect.Success<Database>;
|
|
33
38
|
export declare const makeDatabase: <const Contract extends AnyPostgresContract>(identifier: string, options: DatabaseFactoryOptions<Contract>) => DatabaseDefinition<Contract>;
|
|
34
39
|
export {};
|
|
35
40
|
//# sourceMappingURL=database.d.ts.map
|
package/dist/database.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/database.js
CHANGED
|
@@ -70,6 +70,7 @@ export const makeDatabase = (identifier, options) => {
|
|
|
70
70
|
return fromPrismaPromise(() => acquireConnectedClient(client, () => ({
|
|
71
71
|
client,
|
|
72
72
|
models: defaultModels(client),
|
|
73
|
+
querySemaphore: undefined,
|
|
73
74
|
transactional: false,
|
|
74
75
|
})));
|
|
75
76
|
}), (executor) => Effect.promise(() => executor.client.close()).pipe(Effect.orDie));
|
package/dist/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAGhB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1D,OAAO,EACN,sBAAsB,EACtB,yBAAyB,GACzB,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GAClB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { all, and, not, or } from "@prisma-next/sql-orm-client";
|
|
2
|
+
export { type AnyDatabase, type DatabaseDefinition, type DatabaseLayerOptions, type DatabaseRequirement, type DatabaseService, type DatabaseServiceOf, makeDatabase, } from "./database.js";
|
|
2
3
|
export { PrismaConnectionFailure, PrismaError, type PrismaErrorReason, PrismaQueryFailure, PrismaRuntimeFailure, } from "./error.js";
|
|
3
4
|
export type { Relation } from "./relation.js";
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,YAAY,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,uBAAuB,EACvB,WAAW,EACX,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,YAAY,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,uBAAuB,EACvB,WAAW,EACX,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAON,YAAY,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,uBAAuB,EACvB,WAAW,EAEX,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,YAAY,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { Contract as PrismaContract } from "@prisma-next/contract/types";
|
|
2
2
|
import type { PostgresClient } from "@prisma-next/postgres/runtime";
|
|
3
3
|
import type { SqlStorage } from "@prisma-next/sql-contract/types";
|
|
4
|
-
import type { Context } from "effect";
|
|
4
|
+
import type { Context, Semaphore } from "effect";
|
|
5
5
|
export type AnyPostgresContract = PrismaContract<SqlStorage>;
|
|
6
6
|
export interface DatabaseExecutor<Models extends object, Contract extends AnyPostgresContract = AnyPostgresContract> {
|
|
7
7
|
readonly client: PostgresClient<Contract>;
|
|
8
8
|
readonly models: Models;
|
|
9
|
+
readonly querySemaphore: Semaphore.Semaphore | undefined;
|
|
9
10
|
readonly transactional: boolean;
|
|
10
11
|
}
|
|
11
12
|
export type ExecutorService<Models extends object, Contract extends AnyPostgresContract = AnyPostgresContract> = Context.Service<ExecutorIdentifier<Models>, DatabaseExecutor<Models, Contract>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/internal/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/internal/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEjD,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAE7D,MAAM,WAAW,gBAAgB,CAChC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB;IAE1D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,CAC1B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB,IACvD,OAAO,CAAC,OAAO,CAClB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAClC,CAAC;AAEF,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,OAAO,MAAM,CAAC;CAC5C"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Semaphore } from "effect";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
export declare const executeQuery: <A, E, R>(executor: {
|
|
4
|
+
readonly querySemaphore: Semaphore.Semaphore | undefined;
|
|
5
|
+
}, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
6
|
+
//# sourceMappingURL=query-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-execution.d.ts","sourceRoot":"","sources":["../../src/internal/query-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACnC,UAAU;IAAE,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAA;CAAE,EACtE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAG8C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-execution.js","sourceRoot":"","sources":["../../src/internal/query-execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,QAAsE,EACtE,MAA8B,EACL,EAAE,CAC3B,QAAQ,CAAC,cAAc,KAAK,SAAS;IACpC,CAAC,CAAC,MAAM;IACR,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/relation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"relation-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/relation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,eAAe,CAAC;AAyMvB,eAAO,MAAM,iBAAiB,GAC7B,UAAU,EACV,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,GAAG,mBAAmB,EAE1D,UAAU,OAAO,CAAC,OAAO,CACxB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAClC,EACD,OAAO,MAAM,KACX,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAIK,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Effect, Effectable, Option
|
|
2
|
-
import { isPrismaFailure, toPrismaError } from "../error.js";
|
|
1
|
+
import { Effect, Effectable, Option } from "effect";
|
|
3
2
|
import { fromPrismaPromise } from "./promise.js";
|
|
3
|
+
import { executeQuery } from "./query-execution.js";
|
|
4
4
|
import { appendOperation, replayRecipe, rootRecipe, } from "./recipe.js";
|
|
5
5
|
import { RelationPlanTypeId } from "./relation-plan.js";
|
|
6
|
+
import { makeRelationStream } from "./relation-stream.js";
|
|
6
7
|
const evaluateResult = (value, terminal) => {
|
|
7
8
|
if (terminal === "count" &&
|
|
8
9
|
typeof value === "object" &&
|
|
@@ -30,7 +31,7 @@ const evaluateResult = (value, terminal) => {
|
|
|
30
31
|
}
|
|
31
32
|
return Effect.succeed(executable);
|
|
32
33
|
};
|
|
33
|
-
const relationEffect = (self) => Effect.flatMap(self.runtime.executor, (executor) => Effect.suspend(() => evaluateResult(replayRecipe(executor.models, self.runtime.recipe), self.runtime.terminal))).pipe(Effect.withSpan(`prisma.${self.runtime.recipe.model}.${String(self.runtime.terminal ?? "all")}`, {
|
|
34
|
+
const relationEffect = (self) => Effect.flatMap(self.runtime.executor, (executor) => executeQuery(executor, Effect.suspend(() => evaluateResult(replayRecipe(executor.models, self.runtime.recipe), self.runtime.terminal)))).pipe(Effect.withSpan(`prisma.${self.runtime.recipe.model}.${String(self.runtime.terminal ?? "all")}`, {
|
|
34
35
|
kind: "client",
|
|
35
36
|
attributes: {
|
|
36
37
|
"db.system": "postgresql",
|
|
@@ -38,20 +39,6 @@ const relationEffect = (self) => Effect.flatMap(self.runtime.executor, (executor
|
|
|
38
39
|
"db.operation": String(self.runtime.terminal ?? "all"),
|
|
39
40
|
},
|
|
40
41
|
}));
|
|
41
|
-
const relationStream = (self) => {
|
|
42
|
-
const result = Effect.map(self.runtime.executor, (executor) => {
|
|
43
|
-
const collection = replayRecipe(executor.models, self.runtime.recipe);
|
|
44
|
-
if (typeof collection !== "object" ||
|
|
45
|
-
collection === null ||
|
|
46
|
-
typeof Reflect.get(collection, "all") !== "function") {
|
|
47
|
-
throw new TypeError("Only collection Relations can be streamed");
|
|
48
|
-
}
|
|
49
|
-
return Reflect.apply(Reflect.get(collection, "all"), collection, []);
|
|
50
|
-
});
|
|
51
|
-
return Stream.unwrap(Effect.map(result, (iterable) => Stream.fromAsyncIterable(iterable, (error) => error).pipe(Stream.catch((error) => isPrismaFailure(error)
|
|
52
|
-
? Stream.fail(toPrismaError(error))
|
|
53
|
-
: Stream.die(error)))));
|
|
54
|
-
};
|
|
55
42
|
const RelationPrototype = {
|
|
56
43
|
...Effectable.Prototype({
|
|
57
44
|
label: "EffectPrismaRelation",
|
|
@@ -60,7 +47,8 @@ const RelationPrototype = {
|
|
|
60
47
|
},
|
|
61
48
|
}),
|
|
62
49
|
get stream() {
|
|
63
|
-
|
|
50
|
+
const relation = this;
|
|
51
|
+
return makeRelationStream(relation.runtime.executor, relation.runtime.recipe);
|
|
64
52
|
},
|
|
65
53
|
};
|
|
66
54
|
const makeRelationProxy = (runtime) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-runtime.js","sourceRoot":"","sources":["../../src/internal/relation-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"relation-runtime.js","sourceRoot":"","sources":["../../src/internal/relation-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AAQjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACN,eAAe,EAEf,YAAY,EACZ,UAAU,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAgB1D,MAAM,cAAc,GAAG,CACtB,KAAc,EACd,QAAiC,EACK,EAAE;IACxC,IACC,QAAQ,KAAK,OAAO;QACpB,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,UAAU,EACpD,CAAC;QACF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAgB,EAC9C,KAAK,EACL,CAAC,CAAC,OAA6B,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CACjE,CAAC;QACF,OAAO,iBAAiB,CACvB,GAAG,EAAE,CAAC,SAA2C,CACjD,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IACC,QAAQ,KAAK,QAAQ;QACrB,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,UAAU,EAChD,CAAC;QACF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAgB,EAC1C,KAAK,EACL,EAAE,CACF,CAAC;QACF,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAAC,KAA6B,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CACvC,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GACf,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,UAAU;QAC9C,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;QACpE,CAAC,CAAC,KAAK,CAAC;IAEV,IACC,OAAO,UAAU,KAAK,QAAQ;QAC9B,UAAU,KAAK,IAAI;QACnB,MAAM,IAAI,UAAU,EACnB,CAAC;QACF,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAAC,UAAkC,CAAC,CAAC,IAAI,CACtE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACrB,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAC5D,CACD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC,CAAC;AAkBF,MAAM,cAAc,GAAG,CAItB,IAAqC,EAC6B,EAAE,CACpE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAClD,YAAY,CACX,QAAQ,EACR,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CACnB,cAAc,CACb,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAClD,IAAI,CAAC,OAAO,CAAC,QAAQ,CACrB,CACD,CACD,CACD,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CACd,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAC/E;IACC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACX,WAAW,EAAE,YAAY;QACzB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QACrC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;KACtD;CACD,CACD,CACD,CAAC;AAEH,MAAM,iBAAiB,GAAG;IACzB,GAAG,UAAU,CAAC,SAAS,CAErB;QACD,KAAK,EAAE,sBAAsB;QAC7B,QAAQ;YACP,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;KACD,CAAC;IACF,IAAI,MAAM;QAKT,MAAM,QAAQ,GAAG,IAGhB,CAAC;QACF,OAAO,kBAAkB,CACxB,QAAQ,CAAC,OAAO,CAAC,QAAQ,EACzB,QAAQ,CAAC,OAAO,CAAC,MAAM,CACvB,CAAC;IACH,CAAC;CACD,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAIzB,OAA0C,EAChC,EAAE;IACZ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;QAC9D,CAAC,kBAAkB,CAAC,EAAE;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;SACzE;QACD,OAAO;KACP,CAAoC,CAAC;IAEtC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACxB,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ;YAC3B,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAO,GAAG,EAAE,CACX,iBAAiB,CAAC;oBACjB,GAAG,OAAO;oBACV,QAAQ,EAAE,QAAQ;iBAClB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC1B,OAAO,GAAG,EAAE,CACX,iBAAiB,CAAC;oBACjB,GAAG,OAAO;oBACV,QAAQ,EAAE,OAAO;iBACjB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,CAAC,GAAG,UAAkC,EAAE,EAAE,CAChD,iBAAiB,CAAC;gBACjB,GAAG,OAAO;gBACV,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;gBAC7D,QAAQ,EAAE,QAAQ;aAClB,CAAC,CAAC;QACL,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAKhC,QAGC,EACD,KAAa,EACsC,EAAE,CACrD,iBAAiB,CAAC;IACjB,QAAQ;IACR,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC;CACzB,CAAqD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Context } from "effect";
|
|
2
|
+
import { Stream } from "effect";
|
|
3
|
+
import { type PrismaError } from "../error.js";
|
|
4
|
+
import type { AnyPostgresContract, DatabaseExecutor, ExecutorIdentifier } from "./executor.js";
|
|
5
|
+
import { type RelationRecipe } from "./recipe.js";
|
|
6
|
+
export declare const makeRelationStream: <Models extends object, Contract extends AnyPostgresContract>(executorService: Context.Service<ExecutorIdentifier<Models>, DatabaseExecutor<Models, Contract>>, recipe: RelationRecipe) => Stream.Stream<unknown, PrismaError, ExecutorIdentifier<Models>>;
|
|
7
|
+
//# sourceMappingURL=relation-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-stream.d.ts","sourceRoot":"","sources":["../../src/internal/relation-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAmB,KAAK,WAAW,EAAiB,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,aAAa,CAAC;AAIhE,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EAEpC,iBAAiB,OAAO,CAAC,OAAO,CAC/B,kBAAkB,CAAC,MAAM,CAAC,EAC1B,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAClC,EACD,QAAQ,cAAc,KACpB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,CA0C/D,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Effect, Stream } from "effect";
|
|
2
|
+
import { isPrismaFailure, toPrismaError } from "../error.js";
|
|
3
|
+
import { fromPrismaPromise } from "./promise.js";
|
|
4
|
+
import { executeQuery } from "./query-execution.js";
|
|
5
|
+
import { replayRecipe } from "./recipe.js";
|
|
6
|
+
export const makeRelationStream = (executorService, recipe) => Stream.unwrap(Effect.map(executorService, (executor) => {
|
|
7
|
+
const collection = replayRecipe(executor.models, recipe);
|
|
8
|
+
if (typeof collection !== "object" ||
|
|
9
|
+
collection === null ||
|
|
10
|
+
typeof Reflect.get(collection, "all") !== "function") {
|
|
11
|
+
throw new TypeError("Only collection Relations can be streamed");
|
|
12
|
+
}
|
|
13
|
+
const iterable = Reflect.apply(Reflect.get(collection, "all"), collection, []);
|
|
14
|
+
if (executor.querySemaphore === undefined) {
|
|
15
|
+
return Stream.fromAsyncIterable(iterable, (error) => error).pipe(Stream.catch((error) => isPrismaFailure(error)
|
|
16
|
+
? Stream.fail(toPrismaError(error))
|
|
17
|
+
: Stream.die(error)));
|
|
18
|
+
}
|
|
19
|
+
const buffered = executeQuery(executor, fromPrismaPromise(async () => {
|
|
20
|
+
const rows = [];
|
|
21
|
+
for await (const row of iterable) {
|
|
22
|
+
rows.push(row);
|
|
23
|
+
}
|
|
24
|
+
return rows;
|
|
25
|
+
}));
|
|
26
|
+
return Stream.unwrap(Effect.map(buffered, (rows) => Stream.fromIterable(rows)));
|
|
27
|
+
}));
|
|
28
|
+
//# sourceMappingURL=relation-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation-stream.js","sourceRoot":"","sources":["../../src/internal/relation-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,eAAe,EAAoB,aAAa,EAAE,MAAM,aAAa,CAAC;AAM/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAuB,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAIjC,eAGC,EACD,MAAsB,EAC4C,EAAE,CACpE,MAAM,CAAC,MAAM,CACZ,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE;IACxC,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,IACC,OAAO,UAAU,KAAK,QAAQ;QAC9B,UAAU,KAAK,IAAI;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,UAAU,EACnD,CAAC;QACF,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAC7B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAgB,EAC7C,UAAU,EACV,EAAE,CACwB,CAAC;IAE5B,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAC/D,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACtB,eAAe,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CACpB,CACD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAC5B,QAAQ,EACR,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,IAAI,GAAmB,EAAE,CAAC;QAChC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CACzD,CAAC;AACH,CAAC,CAAC,CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAa,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG3E,MAAM,WAAW,mBAAmB,CACnC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB;IAEpC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACtD;AASD,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EAEpC,SAAS,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC3C,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,KACtD,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,CAyBhE,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAC9B,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EACpC,CAAC,EACD,CAAC,EAED,UAAU,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAA4C,CAAC;AAE/E,eAAO,MAAM,sBAAsB,GAClC,MAAM,SAAS,MAAM,EACrB,QAAQ,SAAS,mBAAmB,EACpC,CAAC,EACD,CAAC,EAED,UAAU,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/C,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAA6C,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { orm } from "@prisma-next/sql-orm-client";
|
|
2
|
-
import { Effect, Exit } from "effect";
|
|
2
|
+
import { Effect, Exit, Semaphore } from "effect";
|
|
3
3
|
import { fromPrismaPromise } from "./promise.js";
|
|
4
4
|
const runtimeFailure = (code, cause, details) => Object.assign(new Error(code, { cause }), { code, ...details });
|
|
5
5
|
export const acquireTransaction = (current, models) => fromPrismaPromise(async () => {
|
|
@@ -16,6 +16,7 @@ export const acquireTransaction = (current, models) => fromPrismaPromise(async (
|
|
|
16
16
|
executor: {
|
|
17
17
|
client: current.client,
|
|
18
18
|
models: models(transactionOrm),
|
|
19
|
+
querySemaphore: Semaphore.makeUnsafe(1),
|
|
19
20
|
transactional: true,
|
|
20
21
|
},
|
|
21
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAKlD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/internal/transaction.ts"],"names":[],"mappings":"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"}
|
package/dist/testing/types.d.ts
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import type { TestContext, TestOptions, Vitest } from "@effect/vitest";
|
|
2
|
-
import type { Contract as PrismaContract } from "@prisma-next/contract/types";
|
|
3
|
-
import type { SqlStorage } from "@prisma-next/sql-contract/types";
|
|
4
2
|
import type { Effect, Layer } from "effect";
|
|
5
|
-
import type {
|
|
6
|
-
type
|
|
7
|
-
export type
|
|
8
|
-
readonly layer: (...arguments_: ReadonlyArray<never>) => Layer.Any;
|
|
9
|
-
};
|
|
10
|
-
export type DatabaseRequirement<Database> = Database extends DatabaseDefinition<AnyPostgresContract, infer Requirement> ? Requirement : never;
|
|
11
|
-
export type DatabaseService<Database extends AnyDatabase> = Effect.Success<Database>;
|
|
3
|
+
import type { AnyDatabase, DatabaseServiceOf } from "../database.js";
|
|
4
|
+
export type { AnyDatabase, DatabaseRequirement } from "../database.js";
|
|
5
|
+
export type DatabaseService<Database extends AnyDatabase> = DatabaseServiceOf<Database>;
|
|
12
6
|
export type DatabaseTest<Database extends AnyDatabase, Provided> = <A, Eff extends Effect.Effect<unknown, unknown, Provided>>(name: string, body: (database: DatabaseService<Database>, context: TestContext) => Generator<Eff, A, never>, options?: number | TestOptions) => void;
|
|
13
7
|
export interface DatabaseTester<Database extends AnyDatabase, Provided> extends DatabaseTest<Database, Provided> {
|
|
14
8
|
readonly skip: DatabaseTest<Database, Provided>;
|
|
@@ -25,5 +19,4 @@ export interface MakeDatabaseItOptions<Database extends AnyDatabase, Provided, L
|
|
|
25
19
|
readonly database: Database;
|
|
26
20
|
readonly layer: Layer.Layer<Provided, LayerError>;
|
|
27
21
|
}
|
|
28
|
-
export {};
|
|
29
22
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/testing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/testing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAErE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACvE,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,WAAW,IACvD,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAE7B,MAAM,MAAM,YAAY,CAAC,QAAQ,SAAS,WAAW,EAAE,QAAQ,IAAI,CAClE,CAAC,EACD,GAAG,SAAS,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAErD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CACL,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,EACnC,OAAO,EAAE,WAAW,KAChB,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,KAC1B,IAAI,CAAC;AAEV,MAAM,WAAW,cAAc,CAAC,QAAQ,SAAS,WAAW,EAAE,QAAQ,CACrE,SAAQ,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1E,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EACnB,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KACtB,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAC7D,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CACL,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,EACnC,OAAO,EAAE,WAAW,KAChB,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,KAC1B,IAAI,CAAC;IACV,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,UAAU,CACrB,QAAQ,SAAS,WAAW,EAC5B,QAAQ,IACL,MAAM,CAAC,OAAO,GAAG;IACpB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,WAAW,qBAAqB,CACrC,QAAQ,SAAS,WAAW,EAC5B,QAAQ,EACR,UAAU;IAEV,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;CAClD"}
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { withTestTransaction } from "./testing/transaction.js";
|
|
2
|
-
export type { DatabaseIt, DatabaseTest, DatabaseTester, MakeDatabaseItOptions, } from "./testing/types.js";
|
|
2
|
+
export type { AnyDatabase, DatabaseIt, DatabaseRequirement, DatabaseService, DatabaseTest, DatabaseTester, MakeDatabaseItOptions, } from "./testing/types.js";
|
|
3
3
|
export { makeDatabaseIt } from "./testing/vitest.js";
|
|
4
4
|
//# sourceMappingURL=testing.d.ts.map
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACX,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACX,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,qBAAqB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAU/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/effect-prisma",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Effect-native PostgreSQL queries and transactions for Prisma Next",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"@prisma-next/sql-runtime": "0.15.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@effect/vitest": "4.0.0-beta.
|
|
55
|
-
"effect": "4.0.0-beta.
|
|
54
|
+
"@effect/vitest": "4.0.0-beta.102",
|
|
55
|
+
"effect": "4.0.0-beta.102"
|
|
56
56
|
},
|
|
57
57
|
"peerDependenciesMeta": {
|
|
58
58
|
"@effect/vitest": {
|
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
}
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@effect/vitest": "4.0.0-beta.
|
|
63
|
+
"@effect/vitest": "4.0.0-beta.102",
|
|
64
64
|
"@prisma-next/adapter-postgres": "0.15.0",
|
|
65
65
|
"@prisma-next/cli": "0.15.0",
|
|
66
66
|
"@prisma-next/target-postgres": "0.15.0",
|
|
67
67
|
"@types/node": "24.10.1",
|
|
68
68
|
"@types/pg": "8.20.0",
|
|
69
69
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
70
|
-
"effect": "4.0.0-beta.
|
|
70
|
+
"effect": "4.0.0-beta.102",
|
|
71
71
|
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
72
72
|
"vitest": "4.1.9"
|
|
73
73
|
},
|
package/src/database.ts
CHANGED
|
@@ -86,6 +86,18 @@ export interface DatabaseDefinition<
|
|
|
86
86
|
) => Layer.Layer<DatabaseIdentifier<Contract> | Requirement, PrismaError>;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
export type AnyDatabase = Effect.Effect<unknown, never, unknown> & {
|
|
90
|
+
readonly layer: (...arguments_: ReadonlyArray<never>) => Layer.Any;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export type DatabaseRequirement<Database> =
|
|
94
|
+
Database extends DatabaseDefinition<AnyPostgresContract, infer Requirement>
|
|
95
|
+
? Requirement
|
|
96
|
+
: never;
|
|
97
|
+
|
|
98
|
+
export type DatabaseServiceOf<Database extends AnyDatabase> =
|
|
99
|
+
Effect.Success<Database>;
|
|
100
|
+
|
|
89
101
|
const defaultModels = <
|
|
90
102
|
Contract extends AnyPostgresContract,
|
|
91
103
|
Models extends object,
|
|
@@ -210,6 +222,7 @@ export const makeDatabase = <const Contract extends AnyPostgresContract>(
|
|
|
210
222
|
acquireConnectedClient(client, () => ({
|
|
211
223
|
client,
|
|
212
224
|
models: defaultModels<Contract, Models>(client),
|
|
225
|
+
querySemaphore: undefined,
|
|
213
226
|
transactional: false,
|
|
214
227
|
})),
|
|
215
228
|
);
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
export { all, and, not, or } from "@prisma-next/sql-orm-client";
|
|
1
2
|
export {
|
|
3
|
+
type AnyDatabase,
|
|
2
4
|
type DatabaseDefinition,
|
|
3
5
|
type DatabaseLayerOptions,
|
|
6
|
+
type DatabaseRequirement,
|
|
4
7
|
type DatabaseService,
|
|
8
|
+
type DatabaseServiceOf,
|
|
5
9
|
makeDatabase,
|
|
6
10
|
} from "./database.js";
|
|
7
11
|
export {
|
package/src/internal/executor.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Contract as PrismaContract } from "@prisma-next/contract/types";
|
|
2
2
|
import type { PostgresClient } from "@prisma-next/postgres/runtime";
|
|
3
3
|
import type { SqlStorage } from "@prisma-next/sql-contract/types";
|
|
4
|
-
import type { Context } from "effect";
|
|
4
|
+
import type { Context, Semaphore } from "effect";
|
|
5
5
|
|
|
6
6
|
export type AnyPostgresContract = PrismaContract<SqlStorage>;
|
|
7
7
|
|
|
@@ -11,6 +11,7 @@ export interface DatabaseExecutor<
|
|
|
11
11
|
> {
|
|
12
12
|
readonly client: PostgresClient<Contract>;
|
|
13
13
|
readonly models: Models;
|
|
14
|
+
readonly querySemaphore: Semaphore.Semaphore | undefined;
|
|
14
15
|
readonly transactional: boolean;
|
|
15
16
|
}
|
|
16
17
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Semaphore } from "effect";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
|
|
4
|
+
export const executeQuery = <A, E, R>(
|
|
5
|
+
executor: { readonly querySemaphore: Semaphore.Semaphore | undefined },
|
|
6
|
+
effect: Effect.Effect<A, E, R>,
|
|
7
|
+
): Effect.Effect<A, E, R> =>
|
|
8
|
+
executor.querySemaphore === undefined
|
|
9
|
+
? effect
|
|
10
|
+
: executor.querySemaphore.withPermit(Effect.uninterruptible(effect));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Context } from "effect";
|
|
2
|
-
import { Effect, Effectable, Option, Stream } from "effect";
|
|
3
|
-
import {
|
|
2
|
+
import { Effect, Effectable, Option, type Stream } from "effect";
|
|
3
|
+
import type { PrismaError } from "../error.js";
|
|
4
4
|
import type { Relation } from "../relation.js";
|
|
5
5
|
import type {
|
|
6
6
|
AnyPostgresContract,
|
|
@@ -8,6 +8,7 @@ import type {
|
|
|
8
8
|
ExecutorIdentifier,
|
|
9
9
|
} from "./executor.js";
|
|
10
10
|
import { fromPrismaPromise } from "./promise.js";
|
|
11
|
+
import { executeQuery } from "./query-execution.js";
|
|
11
12
|
import {
|
|
12
13
|
appendOperation,
|
|
13
14
|
type RelationRecipe,
|
|
@@ -15,6 +16,7 @@ import {
|
|
|
15
16
|
rootRecipe,
|
|
16
17
|
} from "./recipe.js";
|
|
17
18
|
import { RelationPlanTypeId } from "./relation-plan.js";
|
|
19
|
+
import { makeRelationStream } from "./relation-stream.js";
|
|
18
20
|
|
|
19
21
|
type AnyFunction = (...arguments_: ReadonlyArray<never>) => unknown;
|
|
20
22
|
|
|
@@ -111,10 +113,13 @@ const relationEffect = <
|
|
|
111
113
|
self: RelationValue<Models, Contract>,
|
|
112
114
|
): Effect.Effect<unknown, PrismaError, ExecutorIdentifier<Models>> =>
|
|
113
115
|
Effect.flatMap(self.runtime.executor, (executor) =>
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
executeQuery(
|
|
117
|
+
executor,
|
|
118
|
+
Effect.suspend(() =>
|
|
119
|
+
evaluateResult(
|
|
120
|
+
replayRecipe(executor.models, self.runtime.recipe),
|
|
121
|
+
self.runtime.terminal,
|
|
122
|
+
),
|
|
118
123
|
),
|
|
119
124
|
),
|
|
120
125
|
).pipe(
|
|
@@ -131,41 +136,6 @@ const relationEffect = <
|
|
|
131
136
|
),
|
|
132
137
|
);
|
|
133
138
|
|
|
134
|
-
const relationStream = <
|
|
135
|
-
Models extends object,
|
|
136
|
-
Contract extends AnyPostgresContract,
|
|
137
|
-
>(
|
|
138
|
-
self: RelationValue<Models, Contract>,
|
|
139
|
-
): Stream.Stream<unknown, PrismaError, ExecutorIdentifier<Models>> => {
|
|
140
|
-
const result = Effect.map(self.runtime.executor, (executor) => {
|
|
141
|
-
const collection = replayRecipe(executor.models, self.runtime.recipe);
|
|
142
|
-
if (
|
|
143
|
-
typeof collection !== "object" ||
|
|
144
|
-
collection === null ||
|
|
145
|
-
typeof Reflect.get(collection, "all") !== "function"
|
|
146
|
-
) {
|
|
147
|
-
throw new TypeError("Only collection Relations can be streamed");
|
|
148
|
-
}
|
|
149
|
-
return Reflect.apply(
|
|
150
|
-
Reflect.get(collection, "all") as AnyFunction,
|
|
151
|
-
collection,
|
|
152
|
-
[],
|
|
153
|
-
) as AsyncIterable<unknown>;
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
return Stream.unwrap(
|
|
157
|
-
Effect.map(result, (iterable) =>
|
|
158
|
-
Stream.fromAsyncIterable(iterable, (error) => error).pipe(
|
|
159
|
-
Stream.catch((error) =>
|
|
160
|
-
isPrismaFailure(error)
|
|
161
|
-
? Stream.fail(toPrismaError(error))
|
|
162
|
-
: Stream.die(error),
|
|
163
|
-
),
|
|
164
|
-
),
|
|
165
|
-
),
|
|
166
|
-
);
|
|
167
|
-
};
|
|
168
|
-
|
|
169
139
|
const RelationPrototype = {
|
|
170
140
|
...Effectable.Prototype<
|
|
171
141
|
RelationValue<Record<string, unknown>, AnyPostgresContract>
|
|
@@ -180,8 +150,13 @@ const RelationPrototype = {
|
|
|
180
150
|
PrismaError,
|
|
181
151
|
ExecutorIdentifier<Record<string, unknown>>
|
|
182
152
|
> {
|
|
183
|
-
|
|
184
|
-
|
|
153
|
+
const relation = this as RelationValue<
|
|
154
|
+
Record<string, unknown>,
|
|
155
|
+
AnyPostgresContract
|
|
156
|
+
>;
|
|
157
|
+
return makeRelationStream(
|
|
158
|
+
relation.runtime.executor,
|
|
159
|
+
relation.runtime.recipe,
|
|
185
160
|
);
|
|
186
161
|
},
|
|
187
162
|
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Context } from "effect";
|
|
2
|
+
import { Effect, Stream } from "effect";
|
|
3
|
+
import { isPrismaFailure, type PrismaError, toPrismaError } from "../error.js";
|
|
4
|
+
import type {
|
|
5
|
+
AnyPostgresContract,
|
|
6
|
+
DatabaseExecutor,
|
|
7
|
+
ExecutorIdentifier,
|
|
8
|
+
} from "./executor.js";
|
|
9
|
+
import { fromPrismaPromise } from "./promise.js";
|
|
10
|
+
import { executeQuery } from "./query-execution.js";
|
|
11
|
+
import { type RelationRecipe, replayRecipe } from "./recipe.js";
|
|
12
|
+
|
|
13
|
+
type AnyFunction = (...arguments_: ReadonlyArray<never>) => unknown;
|
|
14
|
+
|
|
15
|
+
export const makeRelationStream = <
|
|
16
|
+
Models extends object,
|
|
17
|
+
Contract extends AnyPostgresContract,
|
|
18
|
+
>(
|
|
19
|
+
executorService: Context.Service<
|
|
20
|
+
ExecutorIdentifier<Models>,
|
|
21
|
+
DatabaseExecutor<Models, Contract>
|
|
22
|
+
>,
|
|
23
|
+
recipe: RelationRecipe,
|
|
24
|
+
): Stream.Stream<unknown, PrismaError, ExecutorIdentifier<Models>> =>
|
|
25
|
+
Stream.unwrap(
|
|
26
|
+
Effect.map(executorService, (executor) => {
|
|
27
|
+
const collection = replayRecipe(executor.models, recipe);
|
|
28
|
+
if (
|
|
29
|
+
typeof collection !== "object" ||
|
|
30
|
+
collection === null ||
|
|
31
|
+
typeof Reflect.get(collection, "all") !== "function"
|
|
32
|
+
) {
|
|
33
|
+
throw new TypeError("Only collection Relations can be streamed");
|
|
34
|
+
}
|
|
35
|
+
const iterable = Reflect.apply(
|
|
36
|
+
Reflect.get(collection, "all") as AnyFunction,
|
|
37
|
+
collection,
|
|
38
|
+
[],
|
|
39
|
+
) as AsyncIterable<unknown>;
|
|
40
|
+
|
|
41
|
+
if (executor.querySemaphore === undefined) {
|
|
42
|
+
return Stream.fromAsyncIterable(iterable, (error) => error).pipe(
|
|
43
|
+
Stream.catch((error) =>
|
|
44
|
+
isPrismaFailure(error)
|
|
45
|
+
? Stream.fail(toPrismaError(error))
|
|
46
|
+
: Stream.die(error),
|
|
47
|
+
),
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const buffered = executeQuery(
|
|
52
|
+
executor,
|
|
53
|
+
fromPrismaPromise(async () => {
|
|
54
|
+
const rows: Array<unknown> = [];
|
|
55
|
+
for await (const row of iterable) {
|
|
56
|
+
rows.push(row);
|
|
57
|
+
}
|
|
58
|
+
return rows;
|
|
59
|
+
}),
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
return Stream.unwrap(
|
|
63
|
+
Effect.map(buffered, (rows) => Stream.fromIterable(rows)),
|
|
64
|
+
);
|
|
65
|
+
}),
|
|
66
|
+
);
|
|
@@ -4,7 +4,7 @@ import type {
|
|
|
4
4
|
RuntimeConnection,
|
|
5
5
|
RuntimeTransaction,
|
|
6
6
|
} from "@prisma-next/sql-runtime";
|
|
7
|
-
import { Effect, Exit } from "effect";
|
|
7
|
+
import { Effect, Exit, Semaphore } from "effect";
|
|
8
8
|
import type { PrismaError } from "../error.js";
|
|
9
9
|
import type { AnyPostgresContract, DatabaseExecutor } from "./executor.js";
|
|
10
10
|
import { fromPrismaPromise } from "./promise.js";
|
|
@@ -48,6 +48,7 @@ export const acquireTransaction = <
|
|
|
48
48
|
executor: {
|
|
49
49
|
client: current.client,
|
|
50
50
|
models: models(transactionOrm),
|
|
51
|
+
querySemaphore: Semaphore.makeUnsafe(1),
|
|
51
52
|
transactional: true,
|
|
52
53
|
},
|
|
53
54
|
};
|
package/src/testing/types.ts
CHANGED
|
@@ -1,22 +1,10 @@
|
|
|
1
1
|
import type { TestContext, TestOptions, Vitest } from "@effect/vitest";
|
|
2
|
-
import type { Contract as PrismaContract } from "@prisma-next/contract/types";
|
|
3
|
-
import type { SqlStorage } from "@prisma-next/sql-contract/types";
|
|
4
2
|
import type { Effect, Layer } from "effect";
|
|
5
|
-
import type {
|
|
6
|
-
|
|
7
|
-
type AnyPostgresContract = PrismaContract<SqlStorage>;
|
|
8
|
-
|
|
9
|
-
export type AnyDatabase = Effect.Effect<unknown, never, unknown> & {
|
|
10
|
-
readonly layer: (...arguments_: ReadonlyArray<never>) => Layer.Any;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export type DatabaseRequirement<Database> =
|
|
14
|
-
Database extends DatabaseDefinition<AnyPostgresContract, infer Requirement>
|
|
15
|
-
? Requirement
|
|
16
|
-
: never;
|
|
3
|
+
import type { AnyDatabase, DatabaseServiceOf } from "../database.js";
|
|
17
4
|
|
|
5
|
+
export type { AnyDatabase, DatabaseRequirement } from "../database.js";
|
|
18
6
|
export type DatabaseService<Database extends AnyDatabase> =
|
|
19
|
-
|
|
7
|
+
DatabaseServiceOf<Database>;
|
|
20
8
|
|
|
21
9
|
export type DatabaseTest<Database extends AnyDatabase, Provided> = <
|
|
22
10
|
A,
|