@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.
Files changed (129) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/dist/database.d.ts +4 -4
  3. package/dist/database.d.ts.map +1 -1
  4. package/dist/database.js +12 -12
  5. package/dist/database.js.map +1 -1
  6. package/dist/error.d.ts +5 -5
  7. package/dist/error.d.ts.map +1 -1
  8. package/dist/error.js +1 -2
  9. package/dist/error.js.map +1 -1
  10. package/dist/index.d.ts +3 -3
  11. package/dist/internal/adapters/transaction-settlement.d.ts +10 -0
  12. package/dist/internal/adapters/transaction-settlement.d.ts.map +1 -0
  13. package/dist/internal/adapters/transaction-settlement.js +56 -0
  14. package/dist/internal/adapters/transaction-settlement.js.map +1 -0
  15. package/dist/internal/client-lifecycle.d.ts.map +1 -1
  16. package/dist/internal/client-lifecycle.js.map +1 -1
  17. package/dist/internal/contract-normalization.d.ts.map +1 -1
  18. package/dist/internal/contract-normalization.js +1 -3
  19. package/dist/internal/contract-normalization.js.map +1 -1
  20. package/dist/internal/database-facade.d.ts +24 -0
  21. package/dist/internal/database-facade.d.ts.map +1 -0
  22. package/dist/internal/database-facade.js +84 -0
  23. package/dist/internal/database-facade.js.map +1 -0
  24. package/dist/internal/database-factory.d.ts +4 -44
  25. package/dist/internal/database-factory.d.ts.map +1 -1
  26. package/dist/internal/database-factory.js +11 -84
  27. package/dist/internal/database-factory.js.map +1 -1
  28. package/dist/internal/database-types.d.ts +37 -0
  29. package/dist/internal/database-types.d.ts.map +1 -0
  30. package/dist/internal/database-types.js +2 -0
  31. package/dist/internal/database-types.js.map +1 -0
  32. package/dist/internal/dynamic.d.ts +5 -0
  33. package/dist/internal/dynamic.d.ts.map +1 -0
  34. package/dist/internal/dynamic.js +12 -0
  35. package/dist/internal/dynamic.js.map +1 -0
  36. package/dist/internal/executor.d.ts.map +1 -1
  37. package/dist/internal/promise.d.ts +1 -1
  38. package/dist/internal/promise.d.ts.map +1 -1
  39. package/dist/internal/promise.js +1 -3
  40. package/dist/internal/promise.js.map +1 -1
  41. package/dist/internal/query-execution.d.ts +2 -2
  42. package/dist/internal/query-execution.d.ts.map +1 -1
  43. package/dist/internal/query-execution.js +2 -6
  44. package/dist/internal/query-execution.js.map +1 -1
  45. package/dist/internal/recipe.d.ts.map +1 -1
  46. package/dist/internal/recipe.js +7 -18
  47. package/dist/internal/recipe.js.map +1 -1
  48. package/dist/internal/relation-plan.d.ts +1 -1
  49. package/dist/internal/relation-result.d.ts +4 -0
  50. package/dist/internal/relation-result.d.ts.map +1 -0
  51. package/dist/internal/relation-result.js +19 -0
  52. package/dist/internal/relation-result.js.map +1 -0
  53. package/dist/internal/relation-runtime.d.ts +3 -3
  54. package/dist/internal/relation-runtime.d.ts.map +1 -1
  55. package/dist/internal/relation-runtime.js +9 -34
  56. package/dist/internal/relation-runtime.js.map +1 -1
  57. package/dist/internal/relation-stream.d.ts +3 -3
  58. package/dist/internal/relation-stream.d.ts.map +1 -1
  59. package/dist/internal/relation-stream.js +12 -14
  60. package/dist/internal/relation-stream.js.map +1 -1
  61. package/dist/internal/sqlite-datetime.d.ts +1 -1
  62. package/dist/internal/sqlite-datetime.d.ts.map +1 -1
  63. package/dist/internal/sqlite-datetime.js +3 -1
  64. package/dist/internal/sqlite-datetime.js.map +1 -1
  65. package/dist/internal/sqlite-pragmas.d.ts.map +1 -1
  66. package/dist/internal/sqlite-pragmas.js.map +1 -1
  67. package/dist/internal/testing.d.ts +1 -1
  68. package/dist/internal/testing.d.ts.map +1 -1
  69. package/dist/internal/testing.js +5 -2
  70. package/dist/internal/testing.js.map +1 -1
  71. package/dist/internal/transaction.d.ts +5 -5
  72. package/dist/internal/transaction.d.ts.map +1 -1
  73. package/dist/internal/transaction.js +3 -51
  74. package/dist/internal/transaction.js.map +1 -1
  75. package/dist/relation/include-metadata.d.ts.map +1 -1
  76. package/dist/relation/include.d.ts +2 -2
  77. package/dist/relation/include.d.ts.map +1 -1
  78. package/dist/relation/prisma-methods.d.ts +3 -3
  79. package/dist/relation/prisma-methods.d.ts.map +1 -1
  80. package/dist/relation.d.ts +2 -2
  81. package/dist/relation.d.ts.map +1 -1
  82. package/dist/sqlite.d.ts +3 -3
  83. package/dist/sqlite.d.ts.map +1 -1
  84. package/dist/sqlite.js +14 -12
  85. package/dist/sqlite.js.map +1 -1
  86. package/dist/testing/transaction.d.ts +6 -7
  87. package/dist/testing/transaction.d.ts.map +1 -1
  88. package/dist/testing/transaction.js +2 -2
  89. package/dist/testing/transaction.js.map +1 -1
  90. package/dist/testing/types.d.ts +2 -2
  91. package/dist/testing/types.d.ts.map +1 -1
  92. package/dist/testing/vitest.d.ts +3 -3
  93. package/dist/testing/vitest.d.ts.map +1 -1
  94. package/dist/testing/vitest.js +2 -2
  95. package/dist/testing/vitest.js.map +1 -1
  96. package/dist/testing.d.ts +3 -3
  97. package/package.json +2 -2
  98. package/src/bin/normalize-contract.ts +1 -1
  99. package/src/database.ts +49 -67
  100. package/src/error.ts +9 -19
  101. package/src/index.ts +3 -3
  102. package/src/internal/adapters/transaction-settlement.ts +67 -0
  103. package/src/internal/client-lifecycle.ts +3 -10
  104. package/src/internal/contract-normalization.ts +3 -8
  105. package/src/internal/database-facade.ts +143 -0
  106. package/src/internal/database-factory.ts +30 -298
  107. package/src/internal/database-types.ts +69 -0
  108. package/src/internal/dynamic.ts +16 -0
  109. package/src/internal/executor.ts +1 -4
  110. package/src/internal/promise.ts +3 -11
  111. package/src/internal/query-execution.ts +4 -8
  112. package/src/internal/recipe.ts +19 -84
  113. package/src/internal/relation-plan.ts +1 -1
  114. package/src/internal/relation-result.ts +27 -0
  115. package/src/internal/relation-runtime.ts +43 -133
  116. package/src/internal/relation-stream.ts +22 -48
  117. package/src/internal/sqlite-datetime.ts +10 -23
  118. package/src/internal/sqlite-pragmas.ts +1 -4
  119. package/src/internal/testing.ts +13 -15
  120. package/src/internal/transaction.ts +14 -107
  121. package/src/relation/include-metadata.ts +10 -42
  122. package/src/relation/include.ts +19 -115
  123. package/src/relation/prisma-methods.ts +23 -111
  124. package/src/relation.ts +18 -46
  125. package/src/sqlite.ts +57 -78
  126. package/src/testing/transaction.ts +20 -33
  127. package/src/testing/types.ts +9 -28
  128. package/src/testing/vitest.ts +14 -28
  129. package/src/testing.ts +3 -3
package/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 0.6.4 - 2026-09-26
4
+
5
+ ### Changed
6
+
7
+ - Require Effect Test 0.1.2, whose `eventually` retries only typed failures.
4
8
 
5
9
  ## 0.6.3 - 2026-09-04
6
10
 
@@ -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.js";
4
- import { type DatabaseIdentifier, type DatabaseIdentifierLiteral, type DatabaseServiceHolder } from "./internal/database-factory.js";
5
- import type { AnySqlContract } from "./internal/executor.js";
6
- export type { AnyDatabase, DatabaseService, DatabaseServiceOf, } from "./internal/database-factory.js";
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAiB,EAEhB,KAAK,mBAAmB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAI1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,YAAY,EACX,WAAW,EACX,eAAe,EACf,iBAAiB,GACjB,MAAM,gCAAgC,CAAC;AAExC,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,CAClC,QAAQ,SAAS,cAAc,EAC/B,UAAU,SAAS,MAAM,CACxB,SAAQ,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,CACf,OAAO,EAAE,oBAAoB,KACzB,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;CACxE;AAMD,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,CA4CzC,CAAC"}
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 { makeSqlDatabase, namespaceModels, } from "./internal/database-factory.js";
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 clientOptions = {
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
- ...clientOptions,
20
+ ...forwarded,
21
21
  contractJson: options.contractJson,
22
22
  })
23
23
  : postgres({
24
- ...clientOptions,
24
+ ...forwarded,
25
25
  contract: options.contract,
26
26
  });
27
27
  return fromPrismaPromise(() => acquireConnectedClient(client, () => ({
@@ -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,EAAc,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAKN,eAAe,EACf,eAAe,GACf,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA+B1D,MAAM,aAAa,GAAG,CACrB,MAA0D,EACjD,EAAE,CAAC,eAAe,CAAmB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,YAAY,GACxB,GAA0C,EAAE,CAC5C,CACC,UAAiD,EACjD,OAAyC,EACE,EAAE;IAG7C,OAAO,eAAe,CACrB,UAAU,EACV,CAAC,YAAY,EAAE,EAAE;QAChB,MAAM,aAAa,GAAG;YACrB,GAAG,EACF,OAAO,YAAY,CAAC,GAAG,KAAK,QAAQ;gBACnC,CAAC,CAAC,YAAY,CAAC,GAAG;gBAClB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;YACpC,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,YAAY,EAAE,YAAY,CAAC,YAAY;SACvC,CAAC;QACF,MAAM,MAAM,GACX,OAAO,CAAC,QAAQ,KAAK,SAAS;YAC7B,CAAC,CAAC,QAAQ,CAAW;gBACnB,GAAG,aAAa;gBAChB,YAAY,EAAE,OAAO,CAAC,YAAY;aAClC,CAAC;YACH,CAAC,CAAC,QAAQ,CAAW;gBACnB,GAAG,aAAa;gBAChB,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,CAC2C,CAAC;AAC/C,CAAC,CAAC"}
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
  }
@@ -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,0BAExC;IACD,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,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;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;CAAG;;;;AAEL,qBAAa,uBAAwB,SAAQ,6BAE3C;IACD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;CAAG;AAEL,MAAM,MAAM,iBAAiB,GAC1B,oBAAoB,GACpB,kBAAkB,GAClB,uBAAuB,CAAC;;;;AAE3B,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,aAWzD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,KAAG,WA4BpD,CAAC"}
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 ("kind" in error &&
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,CACzD,sBAAsB,CAIrB;CAAG;AAEL,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAM3E;CAAG;AAEL,MAAM,OAAO,uBAAwB,SAAQ,IAAI,CAAC,WAAW,CAC5D,yBAAyB,CAIxB;CAAG;AAOL,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,CACN,MAAM,IAAI,KAAK;QACf,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAC/D,CAAC;AACH,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"}
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.js";
3
- export { PrismaConnectionFailure, PrismaError, type PrismaErrorReason, PrismaQueryFailure, PrismaRuntimeFailure, } from "./error.js";
4
- export type { Relation } from "./relation.js";
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,EAC7C,QAAQ,eAAe,EACvB,YAAY,MAAM,CAAC,KACjB,OAAO,CAAC,CAAC,CAQX,CAAC;AAIF,eAAO,MAAM,yBAAyB,GACrC,YAAY,aAAa,CAAC,MAAM,CAAC,KAC/B,IAQF,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,EAC1C,MAAuB,EACvB,UAAmB,EACN,EAAE;IACf,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,CACxC,UAAiC,EAC1B,EAAE;IACT,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CAClB,yDAAyD,SAAS,EAAE,CACpE,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC,CAAC"}
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":"AAKA;;;GAGG;AACH,eAAO,MAAM,gCAAgC,GAAI,QAAQ,MAAM,KAAG,MAYjE,CAAC"}
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,GAC5B,0EAA0E,CAAC;AAC5E,MAAM,6BAA6B,GAAG,iCAAiC,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,MAAc,EAAU,EAAE;IAC1E,MAAM,UAAU,GAAG,MAAM;SACvB,UAAU,CAAC,kBAAkB,EAAE,MAAM,CAAC;SACtC,UAAU,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAE9C,IAAI,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACd,0GAA0G,CAC1G,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC"}
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 type { orm } from "@prisma-next/sql-orm-client";
2
- import { Context, Effect, Layer } from "effect";
3
- import { type PrismaError } from "../error.js";
4
- import type { Relation } from "../relation.js";
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":"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"}
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 { toPrismaError } from "../error.js";
3
- import { assertAvailableModelNames } from "./client-lifecycle.js";
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 { acquireTransaction, releaseTestTransaction, releaseTransaction, withTransactionSemaphore, } from "./transaction.js";
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 executors = new WeakMap();
32
- const ActiveTransaction = Context.Reference(`${internalContextIdentifierPrefix}ActiveTransaction/${activeTransactionReferenceSequence++}`, { defaultValue: () => undefined });
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,