@shivaedev/effect-prisma 0.6.3 → 0.6.4
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 +5 -1
- package/dist/database.d.ts +4 -4
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +12 -12
- package/dist/database.js.map +1 -1
- package/dist/error.d.ts +5 -5
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +1 -2
- package/dist/error.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/internal/adapters/transaction-settlement.d.ts +10 -0
- package/dist/internal/adapters/transaction-settlement.d.ts.map +1 -0
- package/dist/internal/adapters/transaction-settlement.js +56 -0
- package/dist/internal/adapters/transaction-settlement.js.map +1 -0
- package/dist/internal/client-lifecycle.d.ts.map +1 -1
- package/dist/internal/client-lifecycle.js.map +1 -1
- package/dist/internal/contract-normalization.d.ts.map +1 -1
- package/dist/internal/contract-normalization.js +1 -3
- package/dist/internal/contract-normalization.js.map +1 -1
- package/dist/internal/database-facade.d.ts +24 -0
- package/dist/internal/database-facade.d.ts.map +1 -0
- package/dist/internal/database-facade.js +84 -0
- package/dist/internal/database-facade.js.map +1 -0
- package/dist/internal/database-factory.d.ts +4 -44
- package/dist/internal/database-factory.d.ts.map +1 -1
- package/dist/internal/database-factory.js +11 -84
- package/dist/internal/database-factory.js.map +1 -1
- package/dist/internal/database-types.d.ts +37 -0
- package/dist/internal/database-types.d.ts.map +1 -0
- package/dist/internal/database-types.js +2 -0
- package/dist/internal/database-types.js.map +1 -0
- package/dist/internal/dynamic.d.ts +5 -0
- package/dist/internal/dynamic.d.ts.map +1 -0
- package/dist/internal/dynamic.js +12 -0
- package/dist/internal/dynamic.js.map +1 -0
- package/dist/internal/executor.d.ts.map +1 -1
- package/dist/internal/promise.d.ts +1 -1
- package/dist/internal/promise.d.ts.map +1 -1
- package/dist/internal/promise.js +1 -3
- package/dist/internal/promise.js.map +1 -1
- package/dist/internal/query-execution.d.ts +2 -2
- package/dist/internal/query-execution.d.ts.map +1 -1
- package/dist/internal/query-execution.js +2 -6
- package/dist/internal/query-execution.js.map +1 -1
- package/dist/internal/recipe.d.ts.map +1 -1
- package/dist/internal/recipe.js +7 -18
- package/dist/internal/recipe.js.map +1 -1
- package/dist/internal/relation-plan.d.ts +1 -1
- package/dist/internal/relation-result.d.ts +4 -0
- package/dist/internal/relation-result.d.ts.map +1 -0
- package/dist/internal/relation-result.js +19 -0
- package/dist/internal/relation-result.js.map +1 -0
- package/dist/internal/relation-runtime.d.ts +3 -3
- package/dist/internal/relation-runtime.d.ts.map +1 -1
- package/dist/internal/relation-runtime.js +9 -34
- package/dist/internal/relation-runtime.js.map +1 -1
- package/dist/internal/relation-stream.d.ts +3 -3
- package/dist/internal/relation-stream.d.ts.map +1 -1
- package/dist/internal/relation-stream.js +12 -14
- package/dist/internal/relation-stream.js.map +1 -1
- package/dist/internal/sqlite-datetime.d.ts +1 -1
- package/dist/internal/sqlite-datetime.d.ts.map +1 -1
- package/dist/internal/sqlite-datetime.js +3 -1
- package/dist/internal/sqlite-datetime.js.map +1 -1
- package/dist/internal/sqlite-pragmas.d.ts.map +1 -1
- package/dist/internal/sqlite-pragmas.js.map +1 -1
- package/dist/internal/testing.d.ts +1 -1
- package/dist/internal/testing.d.ts.map +1 -1
- package/dist/internal/testing.js +5 -2
- package/dist/internal/testing.js.map +1 -1
- package/dist/internal/transaction.d.ts +5 -5
- package/dist/internal/transaction.d.ts.map +1 -1
- package/dist/internal/transaction.js +3 -51
- package/dist/internal/transaction.js.map +1 -1
- package/dist/relation/include-metadata.d.ts.map +1 -1
- package/dist/relation/include.d.ts +2 -2
- package/dist/relation/include.d.ts.map +1 -1
- package/dist/relation/prisma-methods.d.ts +3 -3
- package/dist/relation/prisma-methods.d.ts.map +1 -1
- package/dist/relation.d.ts +2 -2
- package/dist/relation.d.ts.map +1 -1
- package/dist/sqlite.d.ts +3 -3
- package/dist/sqlite.d.ts.map +1 -1
- package/dist/sqlite.js +14 -12
- package/dist/sqlite.js.map +1 -1
- package/dist/testing/transaction.d.ts +6 -7
- package/dist/testing/transaction.d.ts.map +1 -1
- package/dist/testing/transaction.js +2 -2
- package/dist/testing/transaction.js.map +1 -1
- package/dist/testing/types.d.ts +2 -2
- package/dist/testing/types.d.ts.map +1 -1
- package/dist/testing/vitest.d.ts +3 -3
- package/dist/testing/vitest.d.ts.map +1 -1
- package/dist/testing/vitest.js +2 -2
- package/dist/testing/vitest.js.map +1 -1
- package/dist/testing.d.ts +3 -3
- package/package.json +2 -2
- package/src/bin/normalize-contract.ts +1 -1
- package/src/database.ts +49 -67
- package/src/error.ts +9 -19
- package/src/index.ts +3 -3
- package/src/internal/adapters/transaction-settlement.ts +67 -0
- package/src/internal/client-lifecycle.ts +3 -10
- package/src/internal/contract-normalization.ts +3 -8
- package/src/internal/database-facade.ts +143 -0
- package/src/internal/database-factory.ts +30 -298
- package/src/internal/database-types.ts +69 -0
- package/src/internal/dynamic.ts +16 -0
- package/src/internal/executor.ts +1 -4
- package/src/internal/promise.ts +3 -11
- package/src/internal/query-execution.ts +4 -8
- package/src/internal/recipe.ts +19 -84
- package/src/internal/relation-plan.ts +1 -1
- package/src/internal/relation-result.ts +27 -0
- package/src/internal/relation-runtime.ts +43 -133
- package/src/internal/relation-stream.ts +22 -48
- package/src/internal/sqlite-datetime.ts +10 -23
- package/src/internal/sqlite-pragmas.ts +1 -4
- package/src/internal/testing.ts +13 -15
- package/src/internal/transaction.ts +14 -107
- package/src/relation/include-metadata.ts +10 -42
- package/src/relation/include.ts +19 -115
- package/src/relation/prisma-methods.ts +23 -111
- package/src/relation.ts +18 -46
- package/src/sqlite.ts +57 -78
- package/src/testing/transaction.ts +20 -33
- package/src/testing/types.ts +9 -28
- package/src/testing/vitest.ts +14 -28
- package/src/testing.ts +3 -3
package/CHANGELOG.md
CHANGED
package/dist/database.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type PostgresOptionsBase } from "@prisma-next/postgres/runtime";
|
|
2
2
|
import { type Layer, Redacted } from "effect";
|
|
3
|
-
import type { PrismaError } from "./error.
|
|
4
|
-
import {
|
|
5
|
-
import type { AnySqlContract } from "./internal/executor.
|
|
6
|
-
export type { AnyDatabase, DatabaseService, DatabaseServiceOf, } from "./internal/database-
|
|
3
|
+
import type { PrismaError } from "./error.ts";
|
|
4
|
+
import type { DatabaseIdentifier, DatabaseIdentifierLiteral, DatabaseServiceHolder } from "./internal/database-types.ts";
|
|
5
|
+
import type { AnySqlContract } from "./internal/executor.ts";
|
|
6
|
+
export type { AnyDatabase, DatabaseService, DatabaseServiceOf, } from "./internal/database-types.ts";
|
|
7
7
|
export interface DatabaseLayerOptions extends PostgresOptionsBase {
|
|
8
8
|
readonly url: string | Redacted.Redacted<string>;
|
|
9
9
|
}
|
package/dist/database.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAiB,
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAuB,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACxG,OAAO,EAAE,KAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,qBAAqB,EAAiB,MAAM,8BAA8B,CAAC;AACxI,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,YAAY,EACX,WAAW,EACX,eAAe,EACf,iBAAiB,GACjB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,KAAK,sBAAsB,CAAC,QAAQ,SAAS,cAAc,IACxD;IACA,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;CAC7B,GACD;IACA,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEL,MAAM,WAAW,kBAAkB,CAAC,QAAQ,SAAS,cAAc,EAAE,UAAU,SAAS,MAAM,CAAE,SAAQ,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC;IAClJ,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;CACtH;AAaD,eAAO,MAAM,YAAY,GACvB,KAAK,CAAC,QAAQ,SAAS,cAAc,QACrC,KAAK,CAAC,UAAU,SAAS,MAAM,EAC/B,YAAY,yBAAyB,CAAC,UAAU,CAAC,EACjD,SAAS,sBAAsB,CAAC,QAAQ,CAAC,KACvC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAgCzC,CAAC"}
|
package/dist/database.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import postgres, {} from "@prisma-next/postgres/runtime";
|
|
2
2
|
import { Redacted } from "effect";
|
|
3
3
|
import { acquireConnectedClient } from "./internal/client-lifecycle.js";
|
|
4
|
-
import {
|
|
4
|
+
import { namespaceModels } from "./internal/database-facade.js";
|
|
5
|
+
import { makeSqlDatabase } from "./internal/database-factory.js";
|
|
5
6
|
import { fromPrismaPromise } from "./internal/promise.js";
|
|
7
|
+
const clientOptions = ({ url, extensions, middleware, poolOptions, verifyMarker }) => ({
|
|
8
|
+
url: typeof url === "string" ? url : Redacted.value(url),
|
|
9
|
+
...(extensions === undefined ? {} : { extensions }),
|
|
10
|
+
...(middleware === undefined ? {} : { middleware }),
|
|
11
|
+
...(poolOptions === undefined ? {} : { poolOptions }),
|
|
12
|
+
...(verifyMarker === undefined ? {} : { verifyMarker }),
|
|
13
|
+
});
|
|
6
14
|
const defaultModels = (client) => namespaceModels(client.contract, client.orm);
|
|
7
15
|
export const makeDatabase = () => (identifier, options) => {
|
|
8
16
|
return makeSqlDatabase(identifier, (layerOptions) => {
|
|
9
|
-
const
|
|
10
|
-
url: typeof layerOptions.url === "string"
|
|
11
|
-
? layerOptions.url
|
|
12
|
-
: Redacted.value(layerOptions.url),
|
|
13
|
-
extensions: layerOptions.extensions,
|
|
14
|
-
middleware: layerOptions.middleware,
|
|
15
|
-
poolOptions: layerOptions.poolOptions,
|
|
16
|
-
verifyMarker: layerOptions.verifyMarker,
|
|
17
|
-
};
|
|
17
|
+
const forwarded = clientOptions(layerOptions);
|
|
18
18
|
const client = options.contract === undefined
|
|
19
19
|
? postgres({
|
|
20
|
-
...
|
|
20
|
+
...forwarded,
|
|
21
21
|
contractJson: options.contractJson,
|
|
22
22
|
})
|
|
23
23
|
: postgres({
|
|
24
|
-
...
|
|
24
|
+
...forwarded,
|
|
25
25
|
contract: options.contract,
|
|
26
26
|
});
|
|
27
27
|
return fromPrismaPromise(() => acquireConnectedClient(client, () => ({
|
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,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAiD,MAAM,+BAA+B,CAAC;AACxG,OAAO,EAAc,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA0B1D,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAwB,EAAE,EAAE,CAAC,CAAC;IAC5G,GAAG,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;IACxD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;IACnD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;IACnD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;CACvD,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAyD,MAA0D,EAAU,EAAE,CACpJ,eAAe,CAAmB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,YAAY,GACxB,GAA0C,EAAE,CAC5C,CACC,UAAiD,EACjD,OAAyC,EACE,EAAE;IAG7C,OAAO,eAAe,CAA6C,UAAU,EAAE,CAAC,YAAY,EAAE,EAAE;QAC/F,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,GACX,OAAO,CAAC,QAAQ,KAAK,SAAS;YAC7B,CAAC,CAAC,QAAQ,CAAW;gBACnB,GAAG,SAAS;gBACZ,YAAY,EAAE,OAAO,CAAC,YAAY;aAClC,CAAC;YACH,CAAC,CAAC,QAAQ,CAAW;gBACnB,GAAG,SAAS;gBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC1B,CAAC,CAAC;QAEN,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAC7B,sBAAsB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACrC,MAAM;YACN,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE;gBACT,UAAU,EAAE,yBAAyB;gBACrC,IAAI,EAAE,IAAI;aACV;YACD,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,aAAa,CAAmB,MAAM,CAAC;YAC/C,cAAc,EAAE,SAAS;YACzB,mBAAmB,EAAE,SAAS;YAC9B,oBAAoB,EAAE,SAAS;SAC/B,CAAC,CAAC,CACH,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/error.d.ts
CHANGED
|
@@ -11,10 +11,10 @@ declare const PrismaQueryFailure_base: new <A extends Record<string, any> = {}>(
|
|
|
11
11
|
readonly _tag: "PrismaQueryFailure";
|
|
12
12
|
} & import("effect/Pipeable").Pipeable;
|
|
13
13
|
export declare class PrismaQueryFailure extends PrismaQueryFailure_base<{
|
|
14
|
-
readonly sqlState?: string;
|
|
15
|
-
readonly constraint?: string;
|
|
16
|
-
readonly table?: string;
|
|
17
|
-
readonly column?: string;
|
|
14
|
+
readonly sqlState?: string | undefined;
|
|
15
|
+
readonly constraint?: string | undefined;
|
|
16
|
+
readonly table?: string | undefined;
|
|
17
|
+
readonly column?: string | undefined;
|
|
18
18
|
readonly original: Redacted.Redacted<unknown>;
|
|
19
19
|
}> {
|
|
20
20
|
}
|
|
@@ -22,7 +22,7 @@ declare const PrismaConnectionFailure_base: new <A extends Record<string, any> =
|
|
|
22
22
|
readonly _tag: "PrismaConnectionFailure";
|
|
23
23
|
} & import("effect/Pipeable").Pipeable;
|
|
24
24
|
export declare class PrismaConnectionFailure extends PrismaConnectionFailure_base<{
|
|
25
|
-
readonly transient?: boolean;
|
|
25
|
+
readonly transient?: boolean | undefined;
|
|
26
26
|
readonly original: Redacted.Redacted<unknown>;
|
|
27
27
|
}> {
|
|
28
28
|
}
|
package/dist/error.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,QAAQ,EAAE,MAAM,QAAQ,CAAC;;;;AAExC,qBAAa,oBAAqB,SAAQ,
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,QAAQ,EAAE,MAAM,QAAQ,CAAC;;;;AAExC,qBAAa,oBAAqB,SAAQ,0BAAyC;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;CAAG;;;;AAEL,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;CAAG;;;;AAEL,qBAAa,uBAAwB,SAAQ,6BAA4C;IACxF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;CAAG;AAEL,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,uBAAuB,CAAC;;;;AAEpG,qBAAa,WAAY,SAAQ,iBAAgC;IAChE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACnC,CAAC;CAAG;AAEL,KAAK,aAAa,GACf;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IACA,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACxB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEL,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,aAQzD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,KAAG,WA4BpD,CAAC"}
|
package/dist/error.js
CHANGED
|
@@ -14,8 +14,7 @@ export const isPrismaFailure = (error) => {
|
|
|
14
14
|
if ("code" in error && typeof error.code === "string") {
|
|
15
15
|
return true;
|
|
16
16
|
}
|
|
17
|
-
return
|
|
18
|
-
(error.kind === "sql_query" || error.kind === "sql_connection"));
|
|
17
|
+
return "kind" in error && (error.kind === "sql_query" || error.kind === "sql_connection");
|
|
19
18
|
};
|
|
20
19
|
export const toPrismaError = (error) => {
|
|
21
20
|
const original = Redacted.make(error);
|
package/dist/error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,OAAO,oBAAqB,SAAQ,IAAI,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,OAAO,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAG/E;CAAG;AAEL,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAM3E;CAAG;AAEL,MAAM,OAAO,uBAAwB,SAAQ,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAGrF;CAAG;AAIL,MAAM,OAAO,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,aAAa,CAE7D;CAAG;AAgBL,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAA0B,EAAE;IACzE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,MAAM,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAe,EAAE;IAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACnD,OAAO,IAAI,WAAW,CAAC;YACtB,MAAM,EAAE,IAAI,kBAAkB,CAAC;gBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ;aACR,CAAC;SACF,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACxD,OAAO,IAAI,WAAW,CAAC;YACtB,MAAM,EAAE,IAAI,uBAAuB,CAAC;gBACnC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ;aACR,CAAC;SACF,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,WAAW,CAAC;QACtB,MAAM,EAAE,IAAI,oBAAoB,CAAC;YAChC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ;SACR,CAAC;KACF,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { all, and, not, or } from "@prisma-next/sql-orm-client";
|
|
2
|
-
export { type AnyDatabase, type DatabaseDefinition, type DatabaseLayerOptions, type DatabaseService, type DatabaseServiceOf, makeDatabase, } from "./database.
|
|
3
|
-
export { PrismaConnectionFailure, PrismaError, type PrismaErrorReason, PrismaQueryFailure, PrismaRuntimeFailure, } from "./error.
|
|
4
|
-
export type { Relation } from "./relation.
|
|
2
|
+
export { type AnyDatabase, type DatabaseDefinition, type DatabaseLayerOptions, type DatabaseService, type DatabaseServiceOf, makeDatabase, } from "./database.ts";
|
|
3
|
+
export { PrismaConnectionFailure, PrismaError, type PrismaErrorReason, PrismaQueryFailure, PrismaRuntimeFailure, } from "./error.ts";
|
|
4
|
+
export type { Relation } from "./relation.ts";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RuntimeConnection, RuntimeTransaction } from "@prisma-next/sql-runtime";
|
|
2
|
+
export type SettledConnection = Pick<RuntimeConnection, "destroy" | "release">;
|
|
3
|
+
export type SettledTransaction = Pick<RuntimeTransaction, "commit" | "rollback">;
|
|
4
|
+
interface Settled {
|
|
5
|
+
readonly connection: SettledConnection;
|
|
6
|
+
readonly transaction: SettledTransaction;
|
|
7
|
+
}
|
|
8
|
+
export declare const settleConnection: (settled: Settled, commitTransaction: boolean) => Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=transaction-settlement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-settlement.d.ts","sourceRoot":"","sources":["../../../src/internal/adapters/transaction-settlement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEtF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;AAC/E,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;AAEjF,UAAU,OAAO;IAChB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;CACzC;AAmDD,eAAO,MAAM,gBAAgB,GAAU,SAAS,OAAO,EAAE,mBAAmB,OAAO,KAAG,OAAO,CAAC,IAAI,CAOjG,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const runtimeFailure = (code, cause, details) => Object.assign(new Error(code, { cause }), { code, ...details });
|
|
2
|
+
class ConnectionDisposal {
|
|
3
|
+
connection;
|
|
4
|
+
disposed = false;
|
|
5
|
+
constructor(connection) {
|
|
6
|
+
this.connection = connection;
|
|
7
|
+
}
|
|
8
|
+
async destroy(reason) {
|
|
9
|
+
if (this.disposed) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
this.disposed = true;
|
|
13
|
+
await this.connection.destroy(reason).catch(() => undefined);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const commit = async ({ transaction }, disposal) => {
|
|
17
|
+
try {
|
|
18
|
+
await transaction.commit();
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
catch (commitError) {
|
|
22
|
+
await transaction.rollback().catch(() => disposal.destroy(commitError));
|
|
23
|
+
return runtimeFailure("RUNTIME.TRANSACTION_COMMIT_FAILED", commitError);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const rollback = async ({ transaction }, disposal) => {
|
|
27
|
+
try {
|
|
28
|
+
await transaction.rollback();
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
catch (rollbackError) {
|
|
32
|
+
await disposal.destroy(rollbackError);
|
|
33
|
+
return runtimeFailure("RUNTIME.TRANSACTION_ROLLBACK_FAILED", rollbackError);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const release = async ({ connection }, disposal, failure) => {
|
|
37
|
+
if (disposal.disposed) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
await connection.release();
|
|
42
|
+
}
|
|
43
|
+
catch (releaseError) {
|
|
44
|
+
await disposal.destroy(releaseError);
|
|
45
|
+
throw failure === undefined ? releaseError : runtimeFailure("RUNTIME.TRANSACTION_RELEASE_FAILED", failure, { releaseError });
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
export const settleConnection = async (settled, commitTransaction) => {
|
|
49
|
+
const disposal = new ConnectionDisposal(settled.connection);
|
|
50
|
+
const failure = commitTransaction ? await commit(settled, disposal) : await rollback(settled, disposal);
|
|
51
|
+
await release(settled, disposal, failure);
|
|
52
|
+
if (failure !== undefined) {
|
|
53
|
+
throw failure;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=transaction-settlement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-settlement.js","sourceRoot":"","sources":["../../../src/internal/adapters/transaction-settlement.ts"],"names":[],"mappings":"AAUA,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,KAAc,EAAE,OAA2C,EAAqC,EAAE,CACvI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAEjE,MAAM,kBAAkB;IAGM;IAF7B,QAAQ,GAAG,KAAK,CAAC;IAEjB,YAA6B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAG,CAAC;IAE9D,KAAK,CAAC,OAAO,CAAC,MAAe;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;CACD;AAED,MAAM,MAAM,GAAG,KAAK,EAAE,EAAE,WAAW,EAAW,EAAE,QAA4B,EAAoB,EAAE;IACjG,IAAI,CAAC;QACJ,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IAClB,CAAC;IAAC,OAAO,WAAW,EAAE,CAAC;QACtB,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACxE,OAAO,cAAc,CAAC,mCAAmC,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAE,WAAW,EAAW,EAAE,QAA4B,EAAoB,EAAE;IACnG,IAAI,CAAC;QACJ,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IAClB,CAAC;IAAC,OAAO,aAAa,EAAE,CAAC;QACxB,MAAM,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACtC,OAAO,cAAc,CAAC,qCAAqC,EAAE,aAAa,CAAC,CAAC;IAC7E,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,UAAU,EAAW,EAAE,QAA4B,EAAE,OAAgB,EAAiB,EAAE;IAChH,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO;IACR,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACvB,MAAM,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,oCAAoC,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9H,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAgB,EAAE,iBAA0B,EAAiB,EAAE;IACrG,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxG,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,OAAO,CAAC;IACf,CAAC;AACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-lifecycle.d.ts","sourceRoot":"","sources":["../../src/internal/client-lifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,sBAAsB,GAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"client-lifecycle.d.ts","sourceRoot":"","sources":["../../src/internal/client-lifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,eAAO,MAAM,sBAAsB,GAAU,CAAC,EAAE,QAAQ,eAAe,EAAE,YAAY,MAAM,CAAC,KAAG,OAAO,CAAC,CAAC,CAQvG,CAAC;AAIF,eAAO,MAAM,yBAAyB,GAAI,YAAY,aAAa,CAAC,MAAM,CAAC,KAAG,IAM7E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-lifecycle.js","sourceRoot":"","sources":["../../src/internal/client-lifecycle.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"client-lifecycle.js","sourceRoot":"","sources":["../../src/internal/client-lifecycle.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAK,MAAuB,EAAE,UAAmB,EAAc,EAAE;IAC3G,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,UAAU,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,UAAiC,EAAQ,EAAE;IACpF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CAAC,yDAAyD,SAAS,EAAE,CAAC,CAAC;QAC3F,CAAC;IACF,CAAC;AACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-normalization.d.ts","sourceRoot":"","sources":["../../src/internal/contract-normalization.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contract-normalization.d.ts","sourceRoot":"","sources":["../../src/internal/contract-normalization.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,gCAAgC,GAAI,QAAQ,MAAM,KAAG,MAQjE,CAAC"}
|
|
@@ -6,9 +6,7 @@ const unsupportedTimestampReference = /\b(?:Timestamp|Timestamptz)\s*</;
|
|
|
6
6
|
* JavaScript Dates accepted and returned by its runtime codecs.
|
|
7
7
|
*/
|
|
8
8
|
export const normalizePrismaNextContractTypes = (source) => {
|
|
9
|
-
const normalized = source
|
|
10
|
-
.replaceAll(timestampReference, "Date")
|
|
11
|
-
.replaceAll(timestampCodecReference, "Date");
|
|
9
|
+
const normalized = source.replaceAll(timestampReference, "Date").replaceAll(timestampCodecReference, "Date");
|
|
12
10
|
if (unsupportedTimestampReference.test(normalized)) {
|
|
13
11
|
throw new Error("Unsupported Prisma Next timestamp declaration; update effect-prisma before using this generated contract");
|
|
14
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-normalization.js","sourceRoot":"","sources":["../../src/internal/contract-normalization.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,iDAAiD,CAAC;AAC7E,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"contract-normalization.js","sourceRoot":"","sources":["../../src/internal/contract-normalization.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,iDAAiD,CAAC;AAC7E,MAAM,uBAAuB,GAAG,0EAA0E,CAAC;AAC3G,MAAM,6BAA6B,GAAG,iCAAiC,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,MAAc,EAAU,EAAE;IAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAE7G,IAAI,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,0GAA0G,CAAC,CAAC;IAC7H,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Context, Effect } from "effect";
|
|
2
|
+
import { type PrismaError } from "../error.ts";
|
|
3
|
+
import type { DatabaseIdentifier, DatabaseService, DefaultModels } from "./database-types.ts";
|
|
4
|
+
import type { AnySqlContract, DatabaseExecutor } from "./executor.ts";
|
|
5
|
+
import { releaseTransaction, type TransactionOrm } from "./transaction.ts";
|
|
6
|
+
export interface ActiveTransaction<Contract extends AnySqlContract, Identifier extends string> {
|
|
7
|
+
readonly executor: DatabaseExecutor<DefaultModels<Contract>, Contract>;
|
|
8
|
+
readonly facade: DatabaseService<Contract, Identifier>;
|
|
9
|
+
}
|
|
10
|
+
export interface FacadeScope<Contract extends AnySqlContract, Identifier extends string> {
|
|
11
|
+
readonly activeTransaction: Context.Reference<ActiveTransaction<Contract, Identifier> | undefined>;
|
|
12
|
+
readonly executors: WeakMap<DatabaseService<Contract, Identifier>, DatabaseExecutor<DefaultModels<Contract>, Contract>>;
|
|
13
|
+
readonly service: Context.Service<DatabaseIdentifier<Contract, Identifier>, DatabaseService<Contract, Identifier>>;
|
|
14
|
+
}
|
|
15
|
+
export declare function contractModels<Models extends object>(namespace: unknown): Models;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the models of the single domain namespace from a namespaced ORM
|
|
18
|
+
* client. Prisma Next namespaces PostgreSQL models under their schema and
|
|
19
|
+
* SQLite models under the unbound namespace.
|
|
20
|
+
*/
|
|
21
|
+
export declare const namespaceModels: <Contract extends AnySqlContract, Models extends object>(contract: Contract, namespacedOrm: TransactionOrm<Contract>) => Models;
|
|
22
|
+
export declare const runTransaction: <Contract extends AnySqlContract, Identifier extends string, A, E, R>(scope: FacadeScope<Contract, Identifier>, current: DatabaseExecutor<DefaultModels<Contract>, Contract>, currentFacade: DatabaseService<Contract, Identifier>, program: Effect.Effect<A, E, R>, release: typeof releaseTransaction, mode: "test" | "transaction", span: string) => Effect.Effect<A, E | PrismaError, Exclude<R, DatabaseIdentifier<Contract, Identifier>>>;
|
|
23
|
+
export declare function makeFacade<Contract extends AnySqlContract, Identifier extends string>(scope: FacadeScope<Contract, Identifier>, current: DatabaseExecutor<DefaultModels<Contract>, Contract>): DatabaseService<Contract, Identifier>;
|
|
24
|
+
//# sourceMappingURL=database-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-facade.d.ts","sourceRoot":"","sources":["../../src/internal/database-facade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EAAsB,kBAAkB,EAAE,KAAK,cAAc,EAA4B,MAAM,kBAAkB,CAAC;AAEzH,MAAM,WAAW,iBAAiB,CAAC,QAAQ,SAAS,cAAc,EAAE,UAAU,SAAS,MAAM;IAC5F,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,WAAW,CAAC,QAAQ,SAAS,cAAc,EAAE,UAAU,SAAS,MAAM;IACtF,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC;IACnG,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;CACnH;AAGD,wBAAgB,cAAc,CAAC,MAAM,SAAS,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;AAWlF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,cAAc,EAAE,MAAM,SAAS,MAAM,EACrF,UAAU,QAAQ,EAClB,eAAe,cAAc,CAAC,QAAQ,CAAC,KACrC,MASF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,SAAS,cAAc,EAAE,UAAU,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACjG,OAAO,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,EACxC,SAAS,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,EAC5D,eAAe,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,EACpD,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/B,SAAS,OAAO,kBAAkB,EAClC,MAAM,MAAM,GAAG,aAAa,EAC5B,MAAM,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAmCxF,CAAC;AAEF,wBAAgB,UAAU,CAAC,QAAQ,SAAS,cAAc,EAAE,UAAU,SAAS,MAAM,EACpF,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,EACxC,OAAO,EAAE,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAC1D,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CA4CvC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { toPrismaError } from "../error.js";
|
|
3
|
+
import { assertAvailableModelNames } from "./client-lifecycle.js";
|
|
4
|
+
import { makeModelRelation } from "./relation-runtime.js";
|
|
5
|
+
import { acquireTransaction, releaseTransaction, withTransactionSemaphore } from "./transaction.js";
|
|
6
|
+
export function contractModels(namespace) {
|
|
7
|
+
return namespace;
|
|
8
|
+
}
|
|
9
|
+
function databaseFacade(facade) {
|
|
10
|
+
return facade;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the models of the single domain namespace from a namespaced ORM
|
|
14
|
+
* client. Prisma Next namespaces PostgreSQL models under their schema and
|
|
15
|
+
* SQLite models under the unbound namespace.
|
|
16
|
+
*/
|
|
17
|
+
export const namespaceModels = (contract, namespacedOrm) => {
|
|
18
|
+
const namespaces = Object.entries(contract.domain.namespaces);
|
|
19
|
+
const [only] = namespaces;
|
|
20
|
+
if (namespaces.length !== 1 || only === undefined) {
|
|
21
|
+
throw new TypeError("Effect Prisma currently requires exactly one domain namespace");
|
|
22
|
+
}
|
|
23
|
+
const [name, namespace] = only;
|
|
24
|
+
assertAvailableModelNames(Object.keys(namespace.models));
|
|
25
|
+
return contractModels(Reflect.get(namespacedOrm, name));
|
|
26
|
+
};
|
|
27
|
+
export const runTransaction = (scope, current, currentFacade, program, release, mode, span) => {
|
|
28
|
+
if (!current.liveness.open) {
|
|
29
|
+
return Effect.fail(toPrismaError({ code: current.liveness.closedCode }));
|
|
30
|
+
}
|
|
31
|
+
if (current.mode === "test" || (current.mode === "transaction" && mode === "transaction")) {
|
|
32
|
+
return Effect.provideService(program, scope.service, currentFacade);
|
|
33
|
+
}
|
|
34
|
+
if (current.mode === "transaction") {
|
|
35
|
+
return Effect.fail(toPrismaError({
|
|
36
|
+
code: "RUNTIME.TEST_TRANSACTION_INSIDE_TRANSACTION_UNSUPPORTED",
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
const transaction = Effect.acquireUseRelease(acquireTransaction(current, (transactionOrm) => namespaceModels(current.client.contract, transactionOrm), mode), (resource) => {
|
|
40
|
+
const transactionFacade = makeFacade(scope, resource.executor);
|
|
41
|
+
return program.pipe(Effect.provideService(scope.service, transactionFacade), Effect.provideService(scope.activeTransaction, {
|
|
42
|
+
executor: resource.executor,
|
|
43
|
+
facade: transactionFacade,
|
|
44
|
+
}));
|
|
45
|
+
}, release).pipe(Effect.withSpan(span, { kind: "client" }));
|
|
46
|
+
return withTransactionSemaphore(current.transactionSemaphore, transaction);
|
|
47
|
+
};
|
|
48
|
+
export function makeFacade(scope, current) {
|
|
49
|
+
let facade;
|
|
50
|
+
const resolveActiveTransaction = Effect.flatMap(scope.activeTransaction, (active) => {
|
|
51
|
+
if (current.mode === "root") {
|
|
52
|
+
return Effect.succeed(active ?? { executor: current, facade });
|
|
53
|
+
}
|
|
54
|
+
return active?.executor === current
|
|
55
|
+
? Effect.succeed(active)
|
|
56
|
+
: Effect.fail(toPrismaError({
|
|
57
|
+
code: "RUNTIME.TRANSACTION_CONTEXT_MISMATCH",
|
|
58
|
+
}));
|
|
59
|
+
});
|
|
60
|
+
const resolveExecutor = Effect.suspend(() => current.liveness.open ? Effect.map(resolveActiveTransaction, ({ executor }) => executor) : Effect.succeed(current));
|
|
61
|
+
const target = Object.create(null);
|
|
62
|
+
Object.assign(target, {
|
|
63
|
+
transaction: (program) => Effect.suspend(() => {
|
|
64
|
+
if (!current.liveness.open) {
|
|
65
|
+
return Effect.fail(toPrismaError({ code: current.liveness.closedCode }));
|
|
66
|
+
}
|
|
67
|
+
return Effect.flatMap(resolveActiveTransaction, (selected) => runTransaction(scope, selected.executor, selected.facade, program, releaseTransaction, "transaction", "prisma.transaction"));
|
|
68
|
+
}),
|
|
69
|
+
});
|
|
70
|
+
facade = databaseFacade(new Proxy(target, {
|
|
71
|
+
get(target, property, receiver) {
|
|
72
|
+
if (Reflect.has(target, property)) {
|
|
73
|
+
return Reflect.get(target, property, receiver);
|
|
74
|
+
}
|
|
75
|
+
if (typeof property !== "string") {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
return makeModelRelation(current, property, resolveExecutor);
|
|
79
|
+
},
|
|
80
|
+
}));
|
|
81
|
+
scope.executors.set(facade, current);
|
|
82
|
+
return facade;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=database-facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-facade.js","sourceRoot":"","sources":["../../src/internal/database-facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,50 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { type
|
|
4
|
-
import type {
|
|
5
|
-
import type { AnySqlContract, DatabaseExecutor } from "./executor.js";
|
|
6
|
-
import { type TransactionOrm } from "./transaction.js";
|
|
7
|
-
type OrmFor<Contract extends AnySqlContract> = ReturnType<typeof orm<Contract>>;
|
|
8
|
-
type DefaultNamespaceId<Contract extends AnySqlContract> = "__unbound__" extends keyof OrmFor<Contract> ? "__unbound__" : "public" extends keyof OrmFor<Contract> ? "public" : keyof OrmFor<Contract>;
|
|
9
|
-
export type DefaultModels<Contract extends AnySqlContract> = OrmFor<Contract>[DefaultNamespaceId<Contract>] extends infer Models extends object ? Models : never;
|
|
10
|
-
type IsUnion<Value, Whole = Value> = Value extends unknown ? [Whole] extends [Value] ? false : true : never;
|
|
11
|
-
type IsSingletonString<Value extends string> = Record<never, never> extends Record<Value, never> ? false : true;
|
|
12
|
-
export type DatabaseIdentifierLiteral<Identifier extends string> = [
|
|
13
|
-
Identifier
|
|
14
|
-
] extends [`\0@shivaedev/effect-prisma/internal/${string}`] ? never : string extends Identifier ? never : true extends IsUnion<Identifier> ? never : IsSingletonString<Identifier> extends true ? Identifier : never;
|
|
15
|
-
export interface DatabaseIdentifier<Contract extends AnySqlContract, Identifier extends string> {
|
|
16
|
-
readonly _contract: (contract: Contract) => Contract;
|
|
17
|
-
readonly _databaseIdentifier: (identifier: Identifier) => Identifier;
|
|
18
|
-
}
|
|
19
|
-
type DatabaseModels<Contract extends AnySqlContract, Identifier extends string> = {
|
|
20
|
-
readonly [Model in keyof DefaultModels<Contract>]: Relation<DefaultModels<Contract>[Model], Contract, Model & string, DatabaseIdentifier<Contract, Identifier>>;
|
|
21
|
-
};
|
|
22
|
-
export type DatabaseService<Contract extends AnySqlContract, Identifier extends string> = DatabaseModels<Contract, Identifier> & {
|
|
23
|
-
transaction<A, E, R>(program: Effect.Effect<A, E, R> & (DatabaseIdentifier<Contract, Identifier> extends R ? unknown : never)): Effect.Effect<A, E | PrismaError, Exclude<R, DatabaseIdentifier<Contract, Identifier>>>;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* The driver-independent part of a database definition: the Context service
|
|
27
|
-
* carrying the typed facade. Driver entrypoints add their own `layer` options.
|
|
28
|
-
*/
|
|
29
|
-
export interface DatabaseServiceHolder<Contract extends AnySqlContract, Identifier extends string> extends Context.Service<DatabaseIdentifier<Contract, Identifier>, DatabaseService<Contract, Identifier>> {
|
|
30
|
-
}
|
|
31
|
-
export type AnyDatabase = Effect.Effect<unknown, never, unknown> & {
|
|
32
|
-
readonly layer: (...arguments_: ReadonlyArray<never>) => Layer.Any;
|
|
33
|
-
};
|
|
34
|
-
export type DatabaseServiceOf<Database extends AnyDatabase> = Effect.Success<Database>;
|
|
35
|
-
export interface SqlDatabase<Contract extends AnySqlContract, Identifier extends string, Options> extends DatabaseServiceHolder<Contract, Identifier> {
|
|
36
|
-
readonly layer: (options: Options) => Layer.Layer<DatabaseIdentifier<Contract, Identifier>, PrismaError>;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Resolve the models of the single domain namespace from a namespaced ORM
|
|
40
|
-
* client. Prisma Next namespaces PostgreSQL models under their schema and
|
|
41
|
-
* SQLite models under the unbound namespace.
|
|
42
|
-
*/
|
|
43
|
-
export declare const namespaceModels: <Contract extends AnySqlContract, Models extends object>(contract: Contract, namespacedOrm: TransactionOrm<Contract>) => Models;
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { PrismaError } from "../error.ts";
|
|
3
|
+
import { type DatabaseIdentifierLiteral, type DefaultModels, type SqlDatabase } from "./database-types.ts";
|
|
4
|
+
import type { AnySqlContract, DatabaseExecutor } from "./executor.ts";
|
|
44
5
|
/**
|
|
45
6
|
* Assemble the database service and its Layer around a driver-specific
|
|
46
7
|
* executor acquisition.
|
|
47
8
|
*/
|
|
48
9
|
export declare const makeSqlDatabase: <const Contract extends AnySqlContract, const Identifier extends string, Options>(identifier: DatabaseIdentifierLiteral<Identifier>, acquireExecutor: (options: Options) => Effect.Effect<DatabaseExecutor<DefaultModels<Contract>, Contract>, PrismaError>) => SqlDatabase<Contract, Identifier, Options>;
|
|
49
|
-
export {};
|
|
50
10
|
//# sourceMappingURL=database-factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-factory.d.ts","sourceRoot":"","sources":["../../src/internal/database-factory.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"database-factory.d.ts","sourceRoot":"","sources":["../../src/internal/database-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAS,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAEN,KAAK,yBAAyB,EAE9B,KAAK,aAAa,EAElB,KAAK,WAAW,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtE;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,CAAC,QAAQ,SAAS,cAAc,EAAE,KAAK,CAAC,UAAU,SAAS,MAAM,EAAE,OAAO,EAC9G,YAAY,yBAAyB,CAAC,UAAU,CAAC,EACjD,iBAAiB,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,KACpH,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAgD3C,CAAC"}
|
|
@@ -1,24 +1,9 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { makeModelRelation } from "./relation-runtime.js";
|
|
2
|
+
import { makeFacade, runTransaction } from "./database-facade.js";
|
|
3
|
+
import { internalContextIdentifierPrefix, } from "./database-types.js";
|
|
5
4
|
import { DatabaseTestingTypeId } from "./testing.js";
|
|
6
|
-
import {
|
|
7
|
-
const internalContextIdentifierPrefix = "\0@shivaedev/effect-prisma/internal/";
|
|
5
|
+
import { releaseTestTransaction } from "./transaction.js";
|
|
8
6
|
let activeTransactionReferenceSequence = 0;
|
|
9
|
-
/**
|
|
10
|
-
* Resolve the models of the single domain namespace from a namespaced ORM
|
|
11
|
-
* client. Prisma Next namespaces PostgreSQL models under their schema and
|
|
12
|
-
* SQLite models under the unbound namespace.
|
|
13
|
-
*/
|
|
14
|
-
export const namespaceModels = (contract, namespacedOrm) => {
|
|
15
|
-
const namespaces = Object.keys(contract.domain.namespaces);
|
|
16
|
-
if (namespaces.length !== 1 || namespaces[0] === undefined) {
|
|
17
|
-
throw new TypeError("Effect Prisma currently requires exactly one domain namespace");
|
|
18
|
-
}
|
|
19
|
-
assertAvailableModelNames(Object.keys(contract.domain.namespaces[namespaces[0]].models));
|
|
20
|
-
return Reflect.get(namespacedOrm, namespaces[0]);
|
|
21
|
-
};
|
|
22
7
|
/**
|
|
23
8
|
* Assemble the database service and its Layer around a driver-specific
|
|
24
9
|
* executor acquisition.
|
|
@@ -28,84 +13,26 @@ export const makeSqlDatabase = (identifier, acquireExecutor) => {
|
|
|
28
13
|
throw new TypeError("Database identifier uses a reserved internal namespace");
|
|
29
14
|
}
|
|
30
15
|
const Service = Context.Service(identifier);
|
|
31
|
-
const
|
|
32
|
-
|
|
16
|
+
const scope = {
|
|
17
|
+
activeTransaction: Context.Reference(`${internalContextIdentifierPrefix}ActiveTransaction/${activeTransactionReferenceSequence++}`, { defaultValue: () => undefined }),
|
|
18
|
+
executors: new WeakMap(),
|
|
19
|
+
service: Service,
|
|
20
|
+
};
|
|
33
21
|
const executorOf = (facade) => {
|
|
34
|
-
const executor = executors.get(facade);
|
|
22
|
+
const executor = scope.executors.get(facade);
|
|
35
23
|
return executor === undefined
|
|
36
24
|
? Effect.die(new TypeError("The database service was not created by its database Layer"))
|
|
37
25
|
: Effect.succeed(executor);
|
|
38
26
|
};
|
|
39
|
-
const runTransaction = (current, currentFacade, program, release, mode, span) => {
|
|
40
|
-
if (!current.liveness.open) {
|
|
41
|
-
return Effect.fail(toPrismaError({ code: current.liveness.closedCode }));
|
|
42
|
-
}
|
|
43
|
-
if (current.mode === "test" ||
|
|
44
|
-
(current.mode === "transaction" && mode === "transaction")) {
|
|
45
|
-
return Effect.provideService(program, Service, currentFacade);
|
|
46
|
-
}
|
|
47
|
-
if (current.mode === "transaction") {
|
|
48
|
-
return Effect.fail(toPrismaError({
|
|
49
|
-
code: "RUNTIME.TEST_TRANSACTION_INSIDE_TRANSACTION_UNSUPPORTED",
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
const transaction = Effect.acquireUseRelease(acquireTransaction(current, (transactionOrm) => namespaceModels(current.client.contract, transactionOrm), mode), (resource) => {
|
|
53
|
-
const transactionFacade = makeFacade(resource.executor);
|
|
54
|
-
return program.pipe(Effect.provideService(Service, transactionFacade), Effect.provideService(ActiveTransaction, {
|
|
55
|
-
executor: resource.executor,
|
|
56
|
-
facade: transactionFacade,
|
|
57
|
-
}));
|
|
58
|
-
}, release).pipe(Effect.withSpan(span, { kind: "client" }));
|
|
59
|
-
return withTransactionSemaphore(current.transactionSemaphore, transaction);
|
|
60
|
-
};
|
|
61
|
-
function makeFacade(current) {
|
|
62
|
-
let facade;
|
|
63
|
-
const resolveActiveTransaction = Effect.flatMap(ActiveTransaction, (active) => {
|
|
64
|
-
if (current.mode === "root") {
|
|
65
|
-
return Effect.succeed(active ?? { executor: current, facade });
|
|
66
|
-
}
|
|
67
|
-
return active?.executor === current
|
|
68
|
-
? Effect.succeed(active)
|
|
69
|
-
: Effect.fail(toPrismaError({
|
|
70
|
-
code: "RUNTIME.TRANSACTION_CONTEXT_MISMATCH",
|
|
71
|
-
}));
|
|
72
|
-
});
|
|
73
|
-
const resolveExecutor = Effect.suspend(() => current.liveness.open
|
|
74
|
-
? Effect.map(resolveActiveTransaction, ({ executor }) => executor)
|
|
75
|
-
: Effect.succeed(current));
|
|
76
|
-
const target = Object.assign(Object.create(null), {
|
|
77
|
-
transaction: (program) => Effect.suspend(() => {
|
|
78
|
-
if (!current.liveness.open) {
|
|
79
|
-
return Effect.fail(toPrismaError({ code: current.liveness.closedCode }));
|
|
80
|
-
}
|
|
81
|
-
return Effect.flatMap(resolveActiveTransaction, (selected) => {
|
|
82
|
-
return runTransaction(selected.executor, selected.facade, program, releaseTransaction, "transaction", "prisma.transaction");
|
|
83
|
-
});
|
|
84
|
-
}),
|
|
85
|
-
});
|
|
86
|
-
facade = new Proxy(target, {
|
|
87
|
-
get(target, property, receiver) {
|
|
88
|
-
if (Reflect.has(target, property)) {
|
|
89
|
-
return Reflect.get(target, property, receiver);
|
|
90
|
-
}
|
|
91
|
-
if (typeof property !== "string") {
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
return makeModelRelation(current, property, resolveExecutor);
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
executors.set(facade, current);
|
|
98
|
-
return facade;
|
|
99
|
-
}
|
|
100
27
|
const withTestTransaction = (program) => Effect.flatMap(Service, (facade) => {
|
|
101
|
-
return Effect.flatMap(executorOf(facade), (current) => runTransaction(current, facade, program, releaseTestTransaction, "test", "prisma.testTransaction"));
|
|
28
|
+
return Effect.flatMap(executorOf(facade), (current) => runTransaction(scope, current, facade, program, releaseTestTransaction, "test", "prisma.testTransaction"));
|
|
102
29
|
});
|
|
103
30
|
const layer = (layerOptions) => {
|
|
104
31
|
const acquire = Effect.acquireRelease(Effect.suspend(() => acquireExecutor(layerOptions)), (executor) => {
|
|
105
32
|
executor.liveness.open = false;
|
|
106
33
|
return Effect.promise(() => executor.client.close()).pipe(Effect.orDie);
|
|
107
34
|
});
|
|
108
|
-
return Layer.effect(Service)(Effect.map(acquire, makeFacade));
|
|
35
|
+
return Layer.effect(Service)(Effect.map(acquire, (executor) => makeFacade(scope, executor)));
|
|
109
36
|
};
|
|
110
37
|
return Object.assign(Service, {
|
|
111
38
|
layer,
|