effect-zero 0.4.2 → 0.5.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 (71) hide show
  1. package/dist/client-transaction.d.ts +77 -7
  2. package/dist/client-transaction.d.ts.map +1 -1
  3. package/dist/client-transaction.js +11 -7
  4. package/dist/client-transaction.js.map +1 -1
  5. package/dist/client.d.ts +119 -7
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +7 -6
  8. package/dist/client.js.map +1 -1
  9. package/dist/internal/server-synchronization-context.d.ts +19 -0
  10. package/dist/internal/server-synchronization-context.d.ts.map +1 -0
  11. package/dist/internal/server-synchronization-context.js +46 -0
  12. package/dist/internal/server-synchronization-context.js.map +1 -0
  13. package/dist/internal/server.d.ts +5 -16
  14. package/dist/internal/server.d.ts.map +1 -1
  15. package/dist/internal/server.js +1 -38
  16. package/dist/internal/server.js.map +1 -1
  17. package/dist/internal/server.test.js +7 -8
  18. package/dist/internal/server.test.js.map +1 -1
  19. package/dist/internal/utils.d.ts +7 -0
  20. package/dist/internal/utils.d.ts.map +1 -1
  21. package/dist/internal/utils.js +7 -0
  22. package/dist/internal/utils.js.map +1 -1
  23. package/dist/mutators.d.ts +1 -1
  24. package/dist/mutators.d.ts.map +1 -1
  25. package/dist/mutators.js +1 -1
  26. package/dist/query.d.ts +3 -5
  27. package/dist/query.d.ts.map +1 -1
  28. package/dist/query.js +6 -12
  29. package/dist/query.js.map +1 -1
  30. package/dist/result.d.ts +15 -15
  31. package/dist/result.d.ts.map +1 -1
  32. package/dist/result.js +11 -11
  33. package/dist/result.js.map +1 -1
  34. package/dist/server-transaction.d.ts +142 -15
  35. package/dist/server-transaction.d.ts.map +1 -1
  36. package/dist/server-transaction.js +24 -19
  37. package/dist/server-transaction.js.map +1 -1
  38. package/dist/server.d.ts +247 -12
  39. package/dist/server.d.ts.map +1 -1
  40. package/dist/server.js +21 -18
  41. package/dist/server.js.map +1 -1
  42. package/dist/types/common.d.ts +1 -1
  43. package/dist/types/common.d.ts.map +1 -1
  44. package/dist/types/error.d.ts +69 -48
  45. package/dist/types/error.d.ts.map +1 -1
  46. package/dist/types/error.js +38 -30
  47. package/dist/types/error.js.map +1 -1
  48. package/dist/types/push.d.ts +149 -149
  49. package/dist/types/push.d.ts.map +1 -1
  50. package/dist/types/push.js +45 -40
  51. package/dist/types/push.js.map +1 -1
  52. package/dist/types/queries.d.ts +42 -42
  53. package/dist/types/queries.d.ts.map +1 -1
  54. package/dist/types/queries.js +7 -7
  55. package/dist/types/queries.js.map +1 -1
  56. package/dist/types.test.js +13 -15
  57. package/dist/types.test.js.map +1 -1
  58. package/package.json +5 -7
  59. package/src/client-transaction.ts +13 -11
  60. package/src/client.ts +17 -19
  61. package/src/internal/server-synchronization-context.ts +64 -0
  62. package/src/internal/server.ts +3 -59
  63. package/src/internal/utils.ts +8 -0
  64. package/src/mutators.ts +2 -2
  65. package/src/query.ts +8 -20
  66. package/src/result.ts +40 -37
  67. package/src/server-transaction.ts +32 -37
  68. package/src/server.ts +34 -37
  69. package/src/types/error.ts +8 -8
  70. package/src/types/push.ts +22 -22
  71. package/src/types/queries.ts +7 -7
@@ -1,48 +1,48 @@
1
1
  import * as Schema from "effect/Schema";
2
- export declare const TransformRequestMessage: Schema.Tuple2<Schema.Literal<["transform"]>, Schema.Array$<Schema.Struct<{
3
- id: typeof Schema.String;
4
- name: typeof Schema.String;
5
- args: Schema.Array$<typeof Schema.Unknown>;
6
- }>>>;
2
+ export declare const TransformRequestMessage: Schema.Tuple<readonly [Schema.Literal<"transform">, Schema.$Array<Schema.Struct<{
3
+ readonly id: Schema.String;
4
+ readonly name: Schema.String;
5
+ readonly args: Schema.$Array<Schema.Unknown>;
6
+ }>>]>;
7
7
  export type TransformRequestMessage = typeof TransformRequestMessage.Type;
8
- export declare const TransformResponseMessage: Schema.Union<[Schema.Tuple2<Schema.Literal<["transformed"]>, Schema.Array$<Schema.Union<[Schema.Struct<{
9
- id: typeof Schema.String;
10
- name: typeof Schema.String;
11
- ast: typeof Schema.Unknown;
12
- }>, Schema.Union<[Schema.Struct<{
13
- error: Schema.Literal<["app"]>;
14
- id: typeof Schema.String;
15
- name: typeof Schema.String;
16
- message: Schema.optional<typeof Schema.String>;
17
- details: Schema.optional<typeof Schema.Unknown>;
8
+ export declare const TransformResponseMessage: Schema.Union<readonly [Schema.Tuple<readonly [Schema.Literal<"transformed">, Schema.$Array<Schema.Union<readonly [Schema.Struct<{
9
+ readonly id: Schema.String;
10
+ readonly name: Schema.String;
11
+ readonly ast: Schema.Unknown;
12
+ }>, Schema.Union<readonly [Schema.Struct<{
13
+ readonly error: Schema.Literal<"app">;
14
+ readonly id: Schema.String;
15
+ readonly name: Schema.String;
16
+ readonly message: Schema.optional<Schema.String>;
17
+ readonly details: Schema.optional<Schema.Unknown>;
18
18
  }>, Schema.Struct<{
19
- error: Schema.Literal<["parse"]>;
20
- id: typeof Schema.String;
21
- name: typeof Schema.String;
22
- message: typeof Schema.String;
23
- details: Schema.optional<typeof Schema.Unknown>;
24
- }>]>]>>>, Schema.Tuple2<Schema.Literal<["transformFailed"]>, Schema.Union<[Schema.Struct<{
25
- origin: Schema.Literal<["server"]>;
26
- reason: Schema.Literal<["database", "parse", "internal"]>;
27
- kind: Schema.Literal<["TransformFailed"]>;
28
- details: Schema.optional<typeof Schema.Unknown>;
29
- queryIDs: Schema.Array$<typeof Schema.String>;
30
- message: typeof Schema.String;
19
+ readonly error: Schema.Literal<"parse">;
20
+ readonly id: Schema.String;
21
+ readonly name: Schema.String;
22
+ readonly message: Schema.String;
23
+ readonly details: Schema.optional<Schema.Unknown>;
24
+ }>]>]>>]>, Schema.Tuple<readonly [Schema.Literal<"transformFailed">, Schema.Union<readonly [Schema.Struct<{
25
+ readonly origin: Schema.Literal<"server">;
26
+ readonly reason: Schema.Literals<readonly ["database", "parse", "internal"]>;
27
+ readonly kind: Schema.Literal<"TransformFailed">;
28
+ readonly details: Schema.optional<Schema.Unknown>;
29
+ readonly queryIDs: Schema.$Array<Schema.String>;
30
+ readonly message: Schema.String;
31
31
  }>, Schema.Struct<{
32
- origin: Schema.Literal<["zeroCache"]>;
33
- reason: Schema.Literal<["http"]>;
34
- status: typeof Schema.Number;
35
- bodyPreview: Schema.optional<typeof Schema.String>;
36
- kind: Schema.Literal<["TransformFailed"]>;
37
- details: Schema.optional<typeof Schema.Unknown>;
38
- queryIDs: Schema.Array$<typeof Schema.String>;
39
- message: typeof Schema.String;
32
+ readonly origin: Schema.Literal<"zeroCache">;
33
+ readonly reason: Schema.Literal<"http">;
34
+ readonly status: Schema.Number;
35
+ readonly bodyPreview: Schema.optional<Schema.String>;
36
+ readonly kind: Schema.Literal<"TransformFailed">;
37
+ readonly details: Schema.optional<Schema.Unknown>;
38
+ readonly queryIDs: Schema.$Array<Schema.String>;
39
+ readonly message: Schema.String;
40
40
  }>, Schema.Struct<{
41
- origin: Schema.Literal<["zeroCache"]>;
42
- reason: Schema.Literal<["timeout", "parse", "internal"]>;
43
- kind: Schema.Literal<["TransformFailed"]>;
44
- details: Schema.optional<typeof Schema.Unknown>;
45
- queryIDs: Schema.Array$<typeof Schema.String>;
46
- message: typeof Schema.String;
47
- }>]>>]>;
41
+ readonly origin: Schema.Literal<"zeroCache">;
42
+ readonly reason: Schema.Literals<readonly ["timeout", "parse", "internal"]>;
43
+ readonly kind: Schema.Literal<"TransformFailed">;
44
+ readonly details: Schema.optional<Schema.Unknown>;
45
+ readonly queryIDs: Schema.$Array<Schema.String>;
46
+ readonly message: Schema.String;
47
+ }>]>]>]>;
48
48
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/types/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AA6CxC,eAAO,MAAM,uBAAuB;;;;IAAkE,CAAC;AACvG,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAS1E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAA2D,CAAC"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/types/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AA6CxC,eAAO,MAAM,uBAAuB;;;;KAAoE,CAAC;AACzG,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAS1E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAA6D,CAAC"}
@@ -30,12 +30,12 @@ const ParseErroredQuery = Schema.Struct({
30
30
  message: Schema.String,
31
31
  details: Schema.optional(JsonSchema),
32
32
  });
33
- const ErroredQuery = Schema.Union(AppErroredQuery, ParseErroredQuery);
34
- const TransformResponseBody = Schema.Array(Schema.Union(TransformedQuery, ErroredQuery));
35
- export const TransformRequestMessage = Schema.Tuple(Schema.Literal("transform"), TransformRequestBody);
33
+ const ErroredQuery = Schema.Union([AppErroredQuery, ParseErroredQuery]);
34
+ const TransformResponseBody = Schema.Array(Schema.Union([TransformedQuery, ErroredQuery]));
35
+ export const TransformRequestMessage = Schema.Tuple([Schema.Literal("transform"), TransformRequestBody]);
36
36
  // biome-ignore lint/correctness/noUnusedVariables: borrowed code
37
- const TransformErrorMessage = Schema.Tuple(Schema.Literal("transformError"), Schema.Array(ErroredQuery));
38
- const TransformFailedMessage = Schema.Tuple(Schema.Literal("transformFailed"), TransformFailedBody);
39
- const TransformOkMessage = Schema.Tuple(Schema.Literal("transformed"), TransformResponseBody);
40
- export const TransformResponseMessage = Schema.Union(TransformOkMessage, TransformFailedMessage);
37
+ const TransformErrorMessage = Schema.Tuple([Schema.Literal("transformError"), Schema.Array(ErroredQuery)]);
38
+ const TransformFailedMessage = Schema.Tuple([Schema.Literal("transformFailed"), TransformFailedBody]);
39
+ const TransformOkMessage = Schema.Tuple([Schema.Literal("transformed"), TransformResponseBody]);
40
+ export const TransformResponseMessage = Schema.Union([TransformOkMessage, TransformFailedMessage]);
41
41
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/types/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,sDAAsD;AACtD,8HAA8H;AAE9H,uCAAuC;AACvC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;AAE3B,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,CACvC,MAAM,CAAC,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;CAC/B,CAAC,CACH,CAAC;AAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,GAAG,EAAE,GAAG;CACT,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAEtE,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;AAEzF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAGvG,iEAAiE;AACjE,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AAEzG,MAAM,sBAAsB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAEpG,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/types/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,sDAAsD;AACtD,8HAA8H;AAE9H,uCAAuC;AACvC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;AAE3B,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,CACvC,MAAM,CAAC,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;CAC/B,CAAC,CACH,CAAC;AAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,GAAG,EAAE,GAAG;CACT,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAExE,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAGzG,iEAAiE;AACjE,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAE3G,MAAM,sBAAsB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAEtG,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAEhG,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC"}
@@ -1,12 +1,18 @@
1
1
  import { describe, expectTypeOf, it } from "@effect/vitest";
2
2
  import { queryInternalsTag } from "@rocicorp/zero/bindings";
3
+ import * as Context from "effect/Context";
3
4
  import * as Effect from "effect/Effect";
4
5
  import * as Schema from "effect/Schema";
6
+ import * as SchemaGetter from "effect/SchemaGetter";
5
7
  import * as ClientTransaction from "./client-transaction.js";
6
8
  import * as Mutators from "./mutators.js";
7
9
  import * as Query from "./query.js";
8
10
  import * as Server from "./server.js";
9
11
  import * as ServerTransaction from "./server-transaction.js";
12
+ const DateFromNumber = Schema.Number.pipe(Schema.decodeTo(Schema.Date, {
13
+ decode: SchemaGetter.transform((n) => new Date(n)),
14
+ encode: SchemaGetter.transform((d) => d.getTime()),
15
+ }));
10
16
  // Mock Zero schema for type tests
11
17
  const mockZeroSchema = {
12
18
  tables: {
@@ -103,13 +109,9 @@ describe("Type tests", () => {
103
109
  expectTypeOf().toEqualTypeOf();
104
110
  });
105
111
  it("nested mutator requirements should propagate", () => {
106
- class NestedDummyTag extends Effect.Service()("effect-zero/test/NestedDummyTag", {
107
- succeed: {},
108
- }) {
112
+ class NestedDummyTag extends Context.Service()("effect-zero/test/NestedDummyTag") {
109
113
  }
110
- class NestedDummyTag2 extends Effect.Service()("effect-zero/test/NestedDummyTag2", {
111
- succeed: {},
112
- }) {
114
+ class NestedDummyTag2 extends Context.Service()("effect-zero/test/NestedDummyTag2") {
113
115
  }
114
116
  const clientTransaction = ClientTransaction.make("TestClientTransactionNestedReq", mockZeroSchema);
115
117
  const serverTransaction = ServerTransaction.make("TestServerTransactionNestedReq", mockDatabase, clientTransaction);
@@ -136,13 +138,9 @@ describe("Type tests", () => {
136
138
  expectTypeOf().toEqualTypeOf();
137
139
  });
138
140
  it("mutator requirements should propagate", () => {
139
- class DummyTag extends Effect.Service()("effect-zero/test/DummyTag", {
140
- succeed: {},
141
- }) {
141
+ class DummyTag extends Context.Service()("effect-zero/test/DummyTag") {
142
142
  }
143
- class DummyTag2 extends Effect.Service()("effect-zero/test/DummyTag2", {
144
- succeed: {},
145
- }) {
143
+ class DummyTag2 extends Context.Service()("effect-zero/test/DummyTag2") {
146
144
  }
147
145
  const clientTransaction = ClientTransaction.make("TestClientTransaction2", mockZeroSchema);
148
146
  const serverTransaction = ServerTransaction.make("TestServerTransaction", mockDatabase, clientTransaction);
@@ -188,7 +186,7 @@ describe("Type tests", () => {
188
186
  it("query should accept and passthrough encoded non-JSON args", () => {
189
187
  const transformArgsQuery = Query.make({
190
188
  name: "transformArgs",
191
- payload: Schema.DateFromNumber,
189
+ payload: DateFromNumber,
192
190
  query: Effect.fn(function* (a) {
193
191
  // Inside the query, 'a' should be the decoded type (Date)
194
192
  expectTypeOf().toEqualTypeOf();
@@ -251,12 +249,12 @@ describe("Type tests", () => {
251
249
  it("MakeQueryResult should be satisfied by query results", () => {
252
250
  const query1 = Query.make({
253
251
  name: "q1",
254
- payload: Schema.Tuple(Schema.String),
252
+ payload: Schema.Tuple([Schema.String]),
255
253
  query: () => Effect.succeed(makeMockQuery()),
256
254
  });
257
255
  const query2 = Query.make({
258
256
  name: "q2",
259
- payload: Schema.Tuple(),
257
+ payload: Schema.Tuple([]),
260
258
  query: () => Effect.succeed(makeMockQuery()),
261
259
  });
262
260
  // This should compile without error
@@ -1 +1 @@
1
- {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../src/types.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../src/types.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "effect-zero",
3
3
  "type": "module",
4
- "version": "0.4.2",
4
+ "version": "0.5.0-beta.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "url": "https://github.com/realms-labs/effect-zero"
@@ -16,13 +16,12 @@
16
16
  "devDependencies": {
17
17
  "@arethetypeswrong/cli": "^0.18.2",
18
18
  "@biomejs/biome": "^2.2.6",
19
- "@effect-atom/atom": "^0.4.3",
20
- "@effect/language-service": "^0.55.2",
21
- "@effect/vitest": "^0.27.0",
19
+ "@effect/language-service": "^0.85.1",
20
+ "@effect/vitest": "^4.0.0-beta.64",
22
21
  "@rocicorp/zero": "^1.3.0",
23
22
  "@types/bun": "latest",
24
23
  "@types/fs-extra": "^11.0.4",
25
- "effect": "^3.19.3",
24
+ "effect": "^4.0.0-beta.64",
26
25
  "fast-glob": "^3.3.3",
27
26
  "fs-extra": "^11.3.2",
28
27
  "ts-patch": "^3.3.0",
@@ -30,8 +29,7 @@
30
29
  },
31
30
  "peerDependencies": {
32
31
  "@rocicorp/zero": "*",
33
- "effect": "3",
34
- "@effect-atom/atom": "*"
32
+ "effect": "^4.0.0-beta.64"
35
33
  },
36
34
  "exports": {
37
35
  "./client-transaction": {
@@ -1,28 +1,30 @@
1
1
  import type { Schema as ZeroSchema, Transaction as ZeroTransaction } from "@rocicorp/zero";
2
2
  import * as Cause from "effect/Cause";
3
- import * as Context from "effect/Context";
3
+ import * as Ctx from "effect/Context";
4
4
  import * as Data from "effect/Data";
5
5
  import * as Effect from "effect/Effect";
6
+ import type { NodeInspectSymbol } from "effect/Inspectable";
6
7
 
7
- // Necessary workaround for TS declaration generation
8
- export interface ClientTransaction {
9
- readonly _tag: unique symbol;
10
- }
8
+ type _ = NodeInspectSymbol;
9
+
10
+ // biome-ignore lint/suspicious/noExplicitAny: any client transaction (its Id literal is irrelevant here)
11
+ export type Context<TSchema extends ZeroSchema> = ReturnType<typeof make<any, TSchema>>;
11
12
 
12
13
  export const make = <const Id extends string, TSchema extends ZeroSchema>(id: Id, schema: TSchema) => {
13
- const ClientTransaction = Context.Tag(id)<ClientTransaction, ZeroTransaction<TSchema>>();
14
+ class Context extends Ctx.Service<Context, ZeroTransaction<TSchema>>()(id) {}
14
15
 
15
16
  const use = <A>(
16
17
  fn: (transaction: ZeroTransaction<TSchema>, options: { readonly signal: AbortSignal }) => PromiseLike<A>,
17
18
  ) =>
18
- Effect.flatMap(ClientTransaction, (transaction) =>
19
- Effect.tryPromise({
19
+ Effect.gen(function* () {
20
+ const transaction = yield* Context;
21
+ return yield* Effect.tryPromise({
20
22
  try: (signal) => fn(transaction, { signal }),
21
23
  catch: (error) => new ClientTransactionError({ cause: Cause.fail(error) }),
22
- }),
23
- );
24
+ });
25
+ });
24
26
 
25
- return Object.assign(ClientTransaction, { use, schema });
27
+ return { Context, use, schema };
26
28
  };
27
29
 
28
30
  class ClientTransactionError extends Data.TaggedError("ClientTransactionError")<{
package/src/client.ts CHANGED
@@ -3,42 +3,40 @@ import * as Cause from "effect/Cause";
3
3
  import * as Data from "effect/Data";
4
4
  import * as Effect from "effect/Effect";
5
5
  import * as Exit from "effect/Exit";
6
+ import type { NodeInspectSymbol } from "effect/Inspectable";
6
7
  import * as Match from "effect/Match";
7
- import type * as ParseResult from "effect/ParseResult";
8
8
  import * as Predicate from "effect/Predicate";
9
9
  import * as Rec from "effect/Record";
10
- import * as Runtime from "effect/Runtime";
11
10
  import * as Schema from "effect/Schema";
12
11
  import type * as ClientTransaction from "./client-transaction.js";
12
+ import { normalizeArgs } from "./internal/utils.js";
13
13
  import * as Mutators from "./mutators.js";
14
14
 
15
- type ClientTransactionContext<TSchema extends ZeroSchema> = Omit<
16
- ReturnType<typeof ClientTransaction.make<string, TSchema>>,
17
- "use"
18
- >;
15
+ type _ = NodeInspectSymbol;
19
16
 
20
17
  export const make = Effect.fn(function* <TSchema extends ZeroSchema, TMutators extends Mutators.AnyMutators>(
21
- transaction: ClientTransactionContext<TSchema>,
18
+ transaction: ClientTransaction.Context<TSchema>,
22
19
  mutators: TMutators,
23
20
  options: Omit<ZeroOptions<TSchema, UnwrapMutators<TSchema, TMutators>>, "schema" | "mutators">,
24
21
  ) {
25
- const runtime =
26
- yield* Effect.runtime<
27
- Exclude<Mutators.ExtractMutatorsRequirements<TMutators>, ClientTransaction.ClientTransaction>
22
+ const ctx =
23
+ yield* Effect.context<
24
+ Exclude<Mutators.ExtractMutatorsRequirements<TMutators>, (typeof transaction.Context)["Identifier"]>
28
25
  >();
29
26
 
30
27
  function unwrapMutator<E>(mutator: Mutators.AnyMutator<Mutators.ExtractMutatorsRequirements<TMutators>, E>) {
31
28
  return async (tx: ZeroTransaction<TSchema>, args: unknown, _ctx: unknown) => {
32
- const exit = await Schema.decode(mutator[Mutators.MutatorSchemaSymbol])(args).pipe(
33
- Effect.catchTag("ParseError", (e) => new ClientArgsParseError({ cause: Cause.fail(e) })),
29
+ const exit = await Schema.decodeUnknownEffect(mutator[Mutators.MutatorSchemaSymbol])(normalizeArgs(args)).pipe(
30
+ Effect.catchTag("SchemaError", (e) => Effect.fail(new ClientArgsParseError({ cause: Cause.fail(e) }))),
34
31
  Effect.flatMap(mutator),
35
- Effect.provideService(transaction, tx),
36
- Runtime.runPromiseExit(runtime),
32
+ Effect.provideService(transaction.Context, tx),
33
+ Effect.runPromiseExitWith(ctx),
37
34
  );
38
- return Exit.getOrElse(exit, (c) => {
35
+ if (Exit.isFailure(exit)) {
39
36
  // Extract underlying error bypassing FiberFailure
40
- throw Cause.squash(c);
41
- });
37
+ throw Cause.squash(exit.cause);
38
+ }
39
+ return exit.value;
42
40
  };
43
41
  }
44
42
 
@@ -62,7 +60,7 @@ type UnwrapMutator<TSchema extends ZeroSchema, TMutators extends Mutators.AnyMut
62
60
  ? (transaction: ZeroTransaction<TSchema>) => Promise<void>
63
61
  : (
64
62
  transaction: ZeroTransaction<TSchema>,
65
- args: Schema.Schema.Encoded<TMutators[typeof Mutators.MutatorSchemaSymbol]>,
63
+ args: Schema.Codec.Encoded<TMutators[typeof Mutators.MutatorSchemaSymbol]>,
66
64
  ) => Promise<void>;
67
65
 
68
66
  type UnwrapMutators<TSchema extends ZeroSchema, TMutators extends Mutators.AnyMutators> = {
@@ -76,5 +74,5 @@ type UnwrapMutators<TSchema extends ZeroSchema, TMutators extends Mutators.AnyMu
76
74
  } & {};
77
75
 
78
76
  export class ClientArgsParseError extends Data.TaggedError("ClientArgsParseError")<{
79
- readonly cause: Cause.Cause<ParseResult.ParseError>;
77
+ readonly cause: Cause.Cause<Schema.SchemaError>;
80
78
  }> {}
@@ -0,0 +1,64 @@
1
+ import * as Context from "effect/Context";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import * as SynchronizedRef from "effect/SynchronizedRef";
5
+ import { MultipleTransactionsError, NoTransactionError } from "./server.js";
6
+ import { prefixId } from "./utils.js";
7
+
8
+ export class ServerSynchronizationContext extends Context.Service<ServerSynchronizationContext>()(
9
+ prefixId("ServerSynchronizationContext"),
10
+ {
11
+ make: Effect.gen(function* () {
12
+ return {
13
+ wasTransactionExecuted: yield* SynchronizedRef.make(false),
14
+ };
15
+ }),
16
+ },
17
+ ) {}
18
+
19
+ export const layer: Layer.Layer<ServerSynchronizationContext> = Layer.effect(ServerSynchronizationContext)(
20
+ ServerSynchronizationContext.make,
21
+ );
22
+
23
+ // Ensures that only one transaction is executed at a time and checks that another transaction wasn't already executed.
24
+ export const guard = <A, E, R>(effect: Effect.Effect<A, E, R>) =>
25
+ Effect.gen(function* () {
26
+ const ctx = yield* ServerSynchronizationContext;
27
+ return yield* SynchronizedRef.modifyEffect(
28
+ ctx.wasTransactionExecuted,
29
+ Effect.fn(function* (wasTransactionExecuted) {
30
+ if (wasTransactionExecuted) {
31
+ return yield* new MultipleTransactionsError();
32
+ }
33
+ const result = yield* effect;
34
+ return [result, true];
35
+ }),
36
+ );
37
+ });
38
+
39
+ export const finalize = <A, E, R>(effect: Effect.Effect<A, E, R>) =>
40
+ Effect.gen(function* () {
41
+ const { wasTransactionExecuted } = yield* ServerSynchronizationContext;
42
+
43
+ return yield* effect.pipe(
44
+ // Case #2 "One transaction then fail"
45
+ // If the transaction was executed successfully, swallow the error and just log it, otherwise re-throw it
46
+ Effect.catchCause(
47
+ Effect.fn(function* (e) {
48
+ if (yield* SynchronizedRef.get(wasTransactionExecuted)) {
49
+ return yield* Effect.logError("Error occurred after transaction execution completed", e);
50
+ }
51
+ return yield* Effect.failCause(e);
52
+ }),
53
+ ),
54
+ // Case #4 "Zero transactions then succeed"
55
+ // Check that the transaction was executed during the mutation
56
+ Effect.tap(
57
+ Effect.gen(function* () {
58
+ if (!(yield* SynchronizedRef.get(wasTransactionExecuted))) {
59
+ return yield* new NoTransactionError();
60
+ }
61
+ }),
62
+ ),
63
+ );
64
+ });
@@ -1,68 +1,12 @@
1
1
  import type { TransactionProviderInput } from "@rocicorp/zero/server";
2
2
  import * as Context from "effect/Context";
3
3
  import * as Data from "effect/Data";
4
- import * as Effect from "effect/Effect";
5
4
  import * as Predicate from "effect/Predicate";
6
- import * as SynchronizedRef from "effect/SynchronizedRef";
7
5
  import { prefixId } from "./utils.js";
8
6
 
9
- export class ServerTransactionInput extends Context.Tag(prefixId("ServerTransactionInput"))<
10
- ServerTransactionInput,
11
- TransactionProviderInput
12
- >() {}
13
-
14
- export class ServerSynchronizationContext extends Effect.Service<ServerSynchronizationContext>()(
15
- prefixId("ServerSynchronizationContext"),
16
- {
17
- effect: Effect.gen(function* () {
18
- return {
19
- wasTransactionExecuted: yield* SynchronizedRef.make(false),
20
- };
21
- }),
22
- },
23
- ) {
24
- // Ensures that only one transaction is executed at a time and checks that another transaction wasn't already executed.
25
- static guard = <A, E, R>(effect: Effect.Effect<A, E, R>) =>
26
- Effect.flatMap(this, (ctx) =>
27
- SynchronizedRef.modifyEffect(
28
- ctx.wasTransactionExecuted,
29
- Effect.fn(function* (wasTransactionExecuted) {
30
- if (wasTransactionExecuted) {
31
- return yield* new MultipleTransactionsError();
32
- }
33
- const result = yield* effect;
34
- return [result, true];
35
- }),
36
- ),
37
- );
38
-
39
- static finalize = <A, E, R>(effect: Effect.Effect<A, E, R>) =>
40
- Effect.gen(this, function* () {
41
- const wasTransactionExecuted = yield* this.pipe(Effect.map((ctx) => ctx.wasTransactionExecuted));
42
-
43
- return yield* effect.pipe(
44
- // Case #2 "One transaction then fail"
45
- // If the transaction was executed successfully, swallow the error and just log it, otherwise re-throw it
46
- Effect.catchAllCause(
47
- Effect.fn(function* (e) {
48
- if (yield* wasTransactionExecuted) {
49
- return yield* Effect.logError("Error occurred after transaction execution completed", e);
50
- }
51
- return yield* Effect.failCause(e);
52
- }),
53
- ),
54
- // Case #4 "Zero transactions then succeed"
55
- // Check that the transaction was executed during the mutation
56
- Effect.tap(
57
- Effect.gen(function* () {
58
- if (!(yield* wasTransactionExecuted)) {
59
- return yield* new NoTransactionError();
60
- }
61
- }),
62
- ),
63
- );
64
- });
65
- }
7
+ export class ServerTransactionInput extends Context.Service<ServerTransactionInput, TransactionProviderInput>()(
8
+ prefixId("ServerTransactionInput"),
9
+ ) {}
66
10
 
67
11
  export class NoTransactionError extends Data.TaggedError("NoTransactionError") {
68
12
  message = "No transaction detected in a mutation, a transaction is required.";
@@ -2,3 +2,11 @@
2
2
  * Prefix a string with the package name.
3
3
  */
4
4
  export const prefixId = <S extends string>(name: S) => `effect-zero/${name}` as const;
5
+
6
+ /**
7
+ * Zero unconditionally serializes arg-less mutator calls as `null` on the wire
8
+ * (https://github.com/rocicorp/mono/blob/3082c9fa061891067b4bd7dc9fe74f798270d8d7/packages/zero-client/src/client/custom.ts).
9
+ * v3 `Schema.Void` happened to accept any input; v4 `Schema.Void` is strict
10
+ * `=== undefined`, so we renormalize before decoding.
11
+ */
12
+ export const normalizeArgs = (args: unknown): unknown => (args === null ? undefined : args);
package/src/mutators.ts CHANGED
@@ -15,7 +15,7 @@ export type AnyMutatorFns<R = any> = {
15
15
  };
16
16
 
17
17
  // biome-ignore lint/suspicious/noExplicitAny: upper bound to allow everything
18
- export type AnyMutatorSchema = Schema.Schema<any, any, never>;
18
+ export type AnyMutatorSchema = Schema.Codec<any, any>;
19
19
  export type AnyMutatorSchemas = Record<string, AnyMutatorSchema | Record<string, AnyMutatorSchema>>;
20
20
 
21
21
  export type MutatorFns<TSchema extends AnyMutatorSchemas> = {
@@ -71,7 +71,7 @@ export function make(schema: AnyMutatorSchemas, mutators: AnyMutatorFns): AnyMut
71
71
  return Rec.map(mutators, (v, name) => {
72
72
  return Match.value([v, schema[name]]).pipe(
73
73
  Match.when([Predicate.isFunction, Schema.isSchema], ([mutator, schema]) => makeMutator(schema, mutator)),
74
- Match.when([Predicate.isRecord, Predicate.isRecord], ([mutator, schema]) =>
74
+ Match.when([Predicate.isObject, Predicate.isObject], ([mutator, schema]) =>
75
75
  Rec.map(mutator, (mutator, name) => makeMutator(Option.getOrThrow(Rec.get(schema, name)), mutator)),
76
76
  ),
77
77
  Match.orElseAbsurd,