effect-zero 0.5.0 → 0.6.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +56 -38
  2. package/dist/client-transaction.d.ts +11 -9
  3. package/dist/client-transaction.d.ts.map +1 -1
  4. package/dist/client-transaction.js +4 -1
  5. package/dist/client-transaction.js.map +1 -1
  6. package/dist/client.d.ts +68 -66
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +7 -10
  9. package/dist/client.js.map +1 -1
  10. package/dist/client.test.d.ts +2 -0
  11. package/dist/client.test.d.ts.map +1 -0
  12. package/dist/client.test.js +19 -0
  13. package/dist/client.test.js.map +1 -0
  14. package/dist/internal/server-synchronization-context.d.ts.map +1 -1
  15. package/dist/internal/server-synchronization-context.js +2 -2
  16. package/dist/internal/server-synchronization-context.js.map +1 -1
  17. package/dist/internal/server.d.ts +13 -28
  18. package/dist/internal/server.d.ts.map +1 -1
  19. package/dist/internal/server.js +5 -19
  20. package/dist/internal/server.js.map +1 -1
  21. package/dist/internal/server.test.js +5 -3
  22. package/dist/internal/server.test.js.map +1 -1
  23. package/dist/server-transaction.d.ts +82 -109
  24. package/dist/server-transaction.d.ts.map +1 -1
  25. package/dist/server-transaction.js +26 -74
  26. package/dist/server-transaction.js.map +1 -1
  27. package/dist/server.d.ts +207 -354
  28. package/dist/server.d.ts.map +1 -1
  29. package/dist/server.js +60 -80
  30. package/dist/server.js.map +1 -1
  31. package/dist/types/ast.d.ts +4 -0
  32. package/dist/types/ast.d.ts.map +1 -0
  33. package/dist/types/ast.js +4 -0
  34. package/dist/types/ast.js.map +1 -0
  35. package/dist/types/{queries.d.ts → custom-queries.d.ts} +19 -1
  36. package/dist/types/custom-queries.d.ts.map +1 -0
  37. package/dist/types/{queries.js → custom-queries.js} +5 -6
  38. package/dist/types/custom-queries.js.map +1 -0
  39. package/dist/types/mutate-server.d.ts +160 -0
  40. package/dist/types/mutate-server.d.ts.map +1 -0
  41. package/dist/types/mutate-server.js +29 -0
  42. package/dist/types/mutate-server.js.map +1 -0
  43. package/dist/types/mutation-id.d.ts +7 -0
  44. package/dist/types/mutation-id.d.ts.map +1 -0
  45. package/dist/types/mutation-id.js +8 -0
  46. package/dist/types/mutation-id.js.map +1 -0
  47. package/dist/types/mutation.d.ts +79 -0
  48. package/dist/types/mutation.d.ts.map +1 -0
  49. package/dist/types/mutation.js +125 -0
  50. package/dist/types/mutation.js.map +1 -0
  51. package/dist/types/push.d.ts +100 -85
  52. package/dist/types/push.d.ts.map +1 -1
  53. package/dist/types/push.js +7 -134
  54. package/dist/types/push.js.map +1 -1
  55. package/dist/types/query-server.d.ts +144 -0
  56. package/dist/types/query-server.d.ts.map +1 -0
  57. package/dist/types/query-server.js +19 -0
  58. package/dist/types/query-server.js.map +1 -0
  59. package/dist/types.test.js +4 -4
  60. package/dist/types.test.js.map +1 -1
  61. package/package.json +35 -5
  62. package/src/client-transaction.ts +5 -1
  63. package/src/client.ts +14 -15
  64. package/src/internal/server-synchronization-context.ts +37 -39
  65. package/src/internal/server.ts +8 -31
  66. package/src/server-transaction.ts +55 -101
  67. package/src/server.ts +147 -151
  68. package/src/types/ast.ts +4 -0
  69. package/src/types/{queries.ts → custom-queries.ts} +4 -6
  70. package/src/types/mutate-server.ts +37 -0
  71. package/src/types/mutation-id.ts +10 -0
  72. package/src/types/mutation.ts +155 -0
  73. package/src/types/push.ts +7 -167
  74. package/src/types/query-server.ts +27 -0
  75. package/dist/types/queries.d.ts.map +0 -1
  76. package/dist/types/queries.js.map +0 -1
@@ -1,93 +1,45 @@
1
1
  import * as Cause from "effect/Cause";
2
2
  import * as Ctx from "effect/Context";
3
3
  import * as Data from "effect/Data";
4
- import * as Deferred from "effect/Deferred";
5
4
  import * as Effect from "effect/Effect";
6
- import * as Exit from "effect/Exit";
7
5
  import * as Layer from "effect/Layer";
8
6
  import * as Predicate from "effect/Predicate";
9
- import { MutationAlreadyProcessedError, OutOfOrderMutationError, ServerTransactionInput } from "./internal/server.js";
10
- import * as ServerSynchronizationContext from "./internal/server-synchronization-context.js";
7
+ import * as ClientTransaction from "./client-transaction.js";
11
8
  import { prefixId } from "./internal/utils.js";
9
+ export const DatabaseSymbol = Symbol.for(prefixId("Database"));
10
+ export const ServerTransactionCallbackSymbol = Symbol.for(prefixId("ServerTransactionCallback"));
12
11
  export const make = (id, database, clientTransaction) => {
13
12
  class Context extends Ctx.Service()(`${id}/ServerTransactionContext`) {
14
13
  }
15
- const use = (fn) => Effect.gen(function* () {
16
- const ctx = yield* Context;
14
+ class ServerTransactionCallback extends Ctx.Service()(`${id}/ServerTransactionCallback`) {
15
+ }
16
+ const use = Effect.fn(function* (fn) {
17
+ const transaction = yield* Context;
17
18
  return yield* Effect.tryPromise({
18
- try: (signal) => fn(ctx.transaction, { signal }),
19
- catch: (error) => new ServerTransactionError({ cause: Cause.fail(error) }),
19
+ try: (signal) => fn(transaction, { signal }),
20
+ catch: (error) => new TransactionUseError({ cause: Cause.fail(error) }),
20
21
  });
21
22
  });
22
23
  const execute = Effect.fn(function* (effect) {
23
- const ctx = yield* Effect.context();
24
- const result = yield* Deferred.make();
25
- const transactionInput = yield* ServerTransactionInput;
26
- yield* Effect.tryPromise({
27
- try: (signal) => database.transaction(async (transaction, transactionHooks) => {
28
- const exit = await Effect.flatMap(checkAndIncrementLastMutationId, () => effect).pipe(Effect.provide([
29
- Layer.succeed(Context, { transaction, transactionHooks }),
30
- Layer.succeed(clientTransaction.Context, transaction),
31
- ]), (effect) => Effect.runPromiseExitWith(ctx)(effect, { signal }));
32
- Deferred.doneUnsafe(result, exit);
33
- if (Exit.isFailure(exit)) {
34
- // This error's purpose is to differentiate between "external" errors
35
- // that originate from the user-defined mutator code and "internal" errors
36
- // that originate from our own code and the Zero API.
37
- // Both types are caught in the "catch" block below, but at this point we only need to handle
38
- // the "internal" errors wrapping them in a `ZeroDatabaseError`, because "external" errors
39
- // are already covered by passing the Exit result to the Deferred, which is why
40
- // we have the ServerTransactionUserError silenced below in the pipe.
41
- throw new ServerTransactionUserError();
42
- }
43
- return exit.value;
44
- }, transactionInput),
45
- catch: (error) => {
46
- if (ServerTransactionUserError.is(error)) {
47
- return error;
48
- }
49
- // This is for errors that occur when calling `database.transaction` despite the provided `effect` succeeding.
50
- // This can be caused by e.g. the database connection timing out or other database-related issues.
51
- return new ZeroDatabaseError({ cause: Cause.fail(error) });
52
- },
53
- }).pipe(Effect.catchTag("ServerTransactionUserError", () => Effect.void));
54
- return yield* Deferred.await(result);
55
- }, ServerSynchronizationContext.guard);
56
- const checkAndIncrementLastMutationId = Effect.gen(function* () {
57
- const { transactionHooks } = yield* Context;
58
- const { clientID, mutationID: receivedMutationID } = yield* ServerTransactionInput;
59
- const { lastMutationID } = yield* Effect.tryPromise({
60
- try: () => transactionHooks.updateClientMutationID(),
61
- catch: (error) => new UpdateClientMutationIdError({ cause: Cause.fail(error) }),
62
- });
63
- if (receivedMutationID < lastMutationID) {
64
- return yield* new MutationAlreadyProcessedError({
65
- clientID,
66
- received: receivedMutationID,
67
- actual: lastMutationID,
68
- });
69
- }
70
- if (receivedMutationID > lastMutationID) {
71
- return yield* new OutOfOrderMutationError({
72
- clientID,
73
- receivedMutationID,
74
- lastMutationID,
75
- });
76
- }
24
+ const { transact } = yield* ServerTransactionCallback;
25
+ return yield* transact((transaction) => effect.pipe(
26
+ // Provide the live transaction under both the server- and client-transaction tags.
27
+ Effect.provide([
28
+ Layer.succeed(Context, transaction),
29
+ Layer.succeed(clientTransaction[ClientTransaction.ContextSymbol], transaction),
30
+ ])));
77
31
  });
78
- return { Context, use, execute };
32
+ return {
33
+ use,
34
+ execute,
35
+ [DatabaseSymbol]: database,
36
+ [ServerTransactionCallbackSymbol]: ServerTransactionCallback,
37
+ };
79
38
  };
80
- class ServerTransactionError extends Data.TaggedError("ServerTransactionError") {
81
- }
82
- class UpdateClientMutationIdError extends Data.TaggedError("UpdateClientMutationIdError") {
83
- }
84
- class ZeroDatabaseError extends Data.TaggedError("ZeroDatabaseError") {
85
- }
86
- const ServerTransactionUserErrorTypeId = Symbol.for(prefixId("ServerTransactionUserError"));
87
- class ServerTransactionUserError extends Data.TaggedError("ServerTransactionUserError") {
88
- [ServerTransactionUserErrorTypeId] = ServerTransactionUserErrorTypeId;
89
- static is(e) {
90
- return Predicate.hasProperty(e, ServerTransactionUserErrorTypeId);
39
+ class TransactionUseError extends Data.TaggedError("TransactionUseError") {
40
+ get message() {
41
+ const error = Cause.squash(this.cause);
42
+ return Predicate.isError(error) ? error.message : "Internal error";
91
43
  }
92
44
  }
93
45
  //# sourceMappingURL=server-transaction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-transaction.js","sourceRoot":"","sources":["../src/server-transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-transaction.js","sourceRoot":"","sources":["../src/server-transaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAE9C,OAAO,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAO7D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAK/C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;AAKjG,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,EAAM,EACN,QAA4C,EAC5C,iBAAqD,EACrD,EAAE;IACF,MAAM,OAAQ,SAAQ,GAAG,CAAC,OAAO,EAAyD,CACxF,GAAG,EAAY,2BAAoC,CACpD;KAAG;IAEJ,MAAM,yBAA0B,SAAQ,GAAG,CAAC,OAAO,EAWhD,CAAC,GAAG,EAAY,4BAAqC,CAAC;KAAG;IAE5D,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAC7B,EAGmB;QAEnB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YAC9B,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;YAC5C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;SACxE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAW,MAA8B;QAC1E,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;QACtD,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CACrC,MAAM,CAAC,IAAI;QACT,mFAAmF;QACnF,MAAM,CAAC,OAAO,CAAC;YACb,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;YACnC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;SAC/E,CAAC,CACH,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG;QACH,OAAO;QACP,CAAC,cAAc,CAAC,EAAE,QAAQ;QAC1B,CAAC,+BAA+B,CAAC,EAAE,yBAAyB;KAC7D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAEtE;IACA,IAAa,OAAO;QAClB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACrE,CAAC;CACF"}