effect-zero 0.7.0 → 0.9.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 (46) hide show
  1. package/README.md +86 -77
  2. package/dist/client-transaction.d.ts +0 -1
  3. package/dist/client-transaction.d.ts.map +1 -1
  4. package/dist/client.d.ts +38 -138
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js +75 -24
  7. package/dist/client.js.map +1 -1
  8. package/dist/internal/utils.d.ts +0 -7
  9. package/dist/internal/utils.d.ts.map +1 -1
  10. package/dist/internal/utils.js +0 -7
  11. package/dist/internal/utils.js.map +1 -1
  12. package/dist/mutator.d.ts +115 -0
  13. package/dist/mutator.d.ts.map +1 -0
  14. package/dist/mutator.js +67 -0
  15. package/dist/mutator.js.map +1 -0
  16. package/dist/mutator.test.d.ts +2 -0
  17. package/dist/mutator.test.d.ts.map +1 -0
  18. package/dist/{client.test.js → mutator.test.js} +5 -5
  19. package/dist/mutator.test.js.map +1 -0
  20. package/dist/query.d.ts +2 -2
  21. package/dist/result.d.ts +1 -1
  22. package/dist/result.d.ts.map +1 -1
  23. package/dist/result.js +1 -1
  24. package/dist/result.js.map +1 -1
  25. package/dist/server-transaction.d.ts +0 -1
  26. package/dist/server-transaction.d.ts.map +1 -1
  27. package/dist/server.d.ts +7 -3
  28. package/dist/server.d.ts.map +1 -1
  29. package/dist/server.js +30 -15
  30. package/dist/server.js.map +1 -1
  31. package/dist/types.test.js +85 -120
  32. package/dist/types.test.js.map +1 -1
  33. package/package.json +49 -48
  34. package/src/client.ts +159 -56
  35. package/src/internal/utils.ts +0 -8
  36. package/src/mutator.ts +232 -0
  37. package/src/result.ts +2 -2
  38. package/src/server.ts +49 -34
  39. package/dist/client.test.d.ts +0 -2
  40. package/dist/client.test.d.ts.map +0 -1
  41. package/dist/client.test.js.map +0 -1
  42. package/dist/mutators.d.ts +0 -30
  43. package/dist/mutators.d.ts.map +0 -1
  44. package/dist/mutators.js +0 -17
  45. package/dist/mutators.js.map +0 -1
  46. package/src/mutators.ts +0 -80
package/README.md CHANGED
@@ -1,99 +1,94 @@
1
1
  # effect-zero
2
2
 
3
3
  ## Custom mutators
4
- ### Defining mutators schema
4
+
5
+ Mutators follow Zero's [mutation request model](https://zero.rocicorp.dev/docs/mutators): you define them once,
6
+ register them, and run a mutation by calling a mutator to get a request.
7
+
8
+ ### Defining mutators
9
+
5
10
  ```ts
6
11
  // mutators.ts
12
+ import * as ZfxClientTransaction from "effect-zero/client-transaction";
13
+ import * as ZfxMutator from "effect-zero/mutator";
14
+ import * as Effect from "effect/Effect";
15
+ import * as Schema from "effect/Schema";
16
+ import { schema } from "./schema"; // your Zero schema (define it, or use something like drizzle-zero)
7
17
 
8
- import * as ZfxMutators from "effect-zero/mutators";
18
+ // The "client-side" transaction
19
+ export const clientTransaction = ZfxClientTransaction.make("ClientTransaction", schema);
9
20
 
10
- // Define your mutators schema
11
- // Both root-level and nested mutators are supported (up to 1 level of nesting)
12
- export const mutatorSchema = ZfxMutators.schema({
13
- // root-level mutator
14
- /*
15
- foo: Schema.Struct({
16
- message: Schema.String,
21
+ // Each mutator has a payload codec and an Effect body, like `ZfxQuery.make`
22
+ const createTodo = ZfxMutator.make({
23
+ payload: Schema.Struct({ id: Schema.String, title: Schema.String }),
24
+ mutator: Effect.fn(function* ({ id, title }) {
25
+ yield* clientTransaction.use((tx) => tx.mutate.TodoTable.insert({ id, title, createdAt: Date.now() }));
17
26
  }),
18
- // mutator without arguments
19
- /*
20
- bar: Schema.Void,
21
- */
27
+ });
28
+
29
+ // Mutators are named after their path in the registry, like Zero's `defineMutators`: "todo.create", "todo.toggle"
30
+ export const mutators = ZfxMutator.registry(clientTransaction, {
22
31
  todo: {
23
- // nested mutator
24
- create: Schema.Struct({
25
- id: Schema.String,
26
- title: Schema.String,
32
+ create: createTodo,
33
+ toggle: ZfxMutator.make({
34
+ payload: Schema.Struct({ id: Schema.String, done: Schema.Boolean }),
35
+ mutator: Effect.fn(function* ({ id, done }) {
36
+ yield* clientTransaction.use((tx) => tx.mutate.TodoTable.update({ id, done }));
37
+ }),
27
38
  }),
28
- toggle: Schema.Struct({
29
- id: Schema.String,
30
- done: Schema.Boolean,
39
+ // A mutator without arguments
40
+ clear: ZfxMutator.make({
41
+ payload: Schema.Void,
42
+ mutator: Effect.fn(function* () {
43
+ // ...
44
+ }),
31
45
  }),
32
46
  },
33
47
  });
34
48
  ```
35
49
 
50
+ > [!NOTE]
51
+ > Calling a mutator encodes its args right away, so the payload must encode without services.
52
+ > Zero stores and sends `undefined` mutator args as `null`, so a mutator may receive `null` where `undefined` was
53
+ > passed. Use `Schema.Void` for mutators without arguments, and `Schema.NullOr(...)` (not `Schema.UndefinedOr(...)`)
54
+ > for optional arguments.
55
+
36
56
  ### Server setup
37
57
 
38
58
  ```ts
39
59
  // server.ts
40
-
41
60
  import { zeroPostgresJS } from "@rocicorp/zero/server/adapters/postgresjs";
42
61
  import * as ZfxMutateServerTypes from "effect-zero/types/mutate-server";
43
62
  import * as ZfxPushTypes from "effect-zero/types/push";
44
63
  import * as ZfxServerTransaction from "effect-zero/server-transaction";
45
- import * as ZfxMutators from "effect-zero/mutators";
64
+ import * as ZfxMutator from "effect-zero/mutator";
46
65
  import * as ZfxServer from "effect-zero/server";
47
66
  import * as Schema from "effect/Schema";
48
67
  import * as Effect from "effect/Effect";
49
68
  import postgres from "postgres";
50
- import { clientTransaction, clientMutators } from "./client"; // see below
51
- import { mutatorSchema } from "./mutators";
52
-
53
- // zero schema (define or use something like drizzle-zero)
69
+ import { clientTransaction, mutators } from "./mutators";
54
70
  import { schema } from "./schema";
55
71
 
56
- // setup connection
57
72
  // for more driver options, see: https://zero.rocicorp.dev/docs/zql-on-the-server#creating-a-database
58
- const database = zeroPostgresJS(
59
- schema,
60
- postgres(process.env.ZERO_UPSTREAM_DB!),
61
- );
73
+ const database = zeroPostgresJS(schema, postgres(process.env.ZERO_UPSTREAM_DB!));
62
74
 
63
- // The "server-side" transaction
64
- const serverTransaction = ZfxServerTransaction.make(
65
- "ServerTransaction",
66
- database,
67
- // passing a client transaction allows us to use the client mutators on the server side
68
- clientTransaction,
69
- );
75
+ // The "server-side" transaction. Passing the client transaction lets mutators' shared bodies run on the server.
76
+ const serverTransaction = ZfxServerTransaction.make("ServerTransaction", database, clientTransaction);
70
77
 
71
- // define server mutators
72
- export const serverMutators = ZfxMutators.make(mutatorSchema, {
78
+ // On the server, every mutator runs its shared body in a server transaction, unless it's overridden here
79
+ // (pass `{}` if nothing is). An override runs outside the transaction, so it can do work before and after it.
80
+ export const serverMutators = ZfxMutator.server(mutators, {
73
81
  todo: {
74
- create: ({ id, title }) => Effect.gen(function* () {
75
- // Note, we can run arbitrary logic before/after performing the zero transaction
76
- // this is a unique feature which is not supported by the default zero push processor implementation
77
- // shipped with the base `@rocicorp/zero` package
78
-
82
+ create: Effect.fn(function* (args) {
79
83
  // before the transaction
80
84
  yield* Effect.log("before the transaction");
81
85
 
82
- yield* Effect.gen(function* () {
83
- // during the transaction
84
- yield* Effect.log("during the transaction");
85
- yield* serverTransaction.use((tx) => tx.mutate.TodoTable.insert({ id, title, createdAt: Date.now() }));
86
- yield* serverTransaction.use((tx) => tx.mutate.TodoTable.update({ id, done: false }));
87
- // ...
88
- }).pipe(serverTransaction.execute);
86
+ // the shared body, in the transaction
87
+ yield* mutators.todo.create.mutator(args).pipe(serverTransaction.execute);
89
88
 
90
89
  // after the transaction
91
90
  yield* Effect.log("after the transaction");
92
91
  }),
93
- toggle: Effect.fn(function* ({ id, done }) {
94
- // You can also reuse client mutators on the server
95
- yield* clientMutators.todo.toggle({ id, done }).pipe(serverTransaction.execute);
96
- }),
97
92
  },
98
93
  });
99
94
 
@@ -127,41 +122,55 @@ export async function handleZeroPush(req: Request): Promise<Response> {
127
122
  ```ts
128
123
  // client.ts
129
124
  import * as ZfxClient from "effect-zero/client";
130
- import * as ZfxClientTransaction from "effect-zero/client-transaction";
131
- import * as ZfxMutators from "effect-zero/mutators";
132
125
  import * as Effect from "effect/Effect";
133
- import { schema } from "./schema"; // your schema
134
- import { mutatorSchema } from "./mutators"; // see above
135
-
136
- // The "client-side" transaction
137
- export const clientTransaction = ZfxClientTransaction.make("ClientTransaction", schema);
138
-
139
- export const clientMutators = ZfxMutators.make(mutatorSchema, {
140
- todo: {
141
- create: Effect.fn(function* ({ id, title }) {
142
- yield* clientTransaction.use((tx) => tx.mutate.TodoTable.insert({ id, title, createdAt: Date.now() }));
143
- }),
144
- toggle: Effect.fn(function* ({ id, done }) {
145
- yield* clientTransaction.use((tx) => tx.mutate.TodoTable.update({ id, done }));
146
- }),
147
- },
148
- });
126
+ import { mutators } from "./mutators";
149
127
 
150
128
  // Helper to create a vanilla Zero client instance for querying and mutating
151
129
  export const createZero = Effect.fn(function* (opts: { userID: string; auth?: string; server: string; mutateURL: string }) {
152
- // `ZfxClient.make` returns an Effect containing a Zero client instance
130
+ // `ZfxClient.make` returns an Effect containing a Zero client instance. It captures the services the mutators need.
153
131
  // Note: this is a scoped effect, so it must be run within a scope (e.g., Effect.scoped)
154
- return yield* ZfxClient.make(clientTransaction, clientMutators, {
132
+ return yield* ZfxClient.make(mutators, {
155
133
  userID: opts.userID,
156
134
  auth: opts.auth,
157
135
  server: opts.server, // your zero-cache server URL
158
136
  mutateURL: opts.mutateURL, // your push endpoint URL
159
137
  kvStore: "idb", // or "mem" for in-memory
160
- // "mutators" and "schema" are inferred from other arguments, so we don't need to pass them here
138
+ // Zero's own logs go through Effect's logger; pass `logSink` to send them elsewhere
161
139
  });
162
140
  });
163
141
  ```
164
142
 
143
+ ### Running mutations
144
+
145
+ ```ts
146
+ const program = Effect.gen(function* () {
147
+ const zero = yield* createZero({ /* ... */ });
148
+
149
+ const mutation = yield* ZfxClient.mutate(zero, mutators.todo.create({ id: "1", title: "Write docs" }));
150
+
151
+ // The client and server outcomes settle independently; await either, both, or neither.
152
+ yield* mutation.client; // applied locally; fails with `MutationError`
153
+ yield* mutation.server; // applied by the server; fails with `MutationError`
154
+ });
155
+ ```
156
+
157
+ `ZfxClient.mutate` sends the mutation with `zero.mutate(request)` as soon as it runs, with the same args Zero would
158
+ send. A rejected mutation (Zero offline, or a mutator failing) fails `client` or `server` with a `MutationError`
159
+ carrying Zero's error (`type: "zero" | "app"`, `message`, `details`) and its `origin` (`"client" | "server"`). As in
160
+ Zero, a mutator's error survives as its name in `details`.
161
+
162
+ Each mutation is traced:
163
+ - **`zero.mutation`** (with `zero.mutator`, `zero.clientID`, `zero.clientGroupID` and the connection state) spans the
164
+ whole write, with **`zero.mutation.client`** and **`zero.mutation.server`** children for its two outcomes. They're
165
+ recorded whether or not you await them.
166
+ - **`zero.mutator`** spans each run of the mutator's body on the client, with `zero.clientID`, Zero's `zero.mutationID`
167
+ and `zero.mutation.reason` (`optimistic` or `rebase`).
168
+ - **`zero.mutation.handle`** spans each mutation on the server, with the same `zero.clientID` and `zero.mutationID`, so
169
+ the client's runs and the server's handling of a write can be joined on them.
170
+
171
+ Zero's own `zero.mutate(request)` also works with these requests, but isn't traced and resolves Zero's result details
172
+ instead of failing.
173
+
165
174
  ## Synced queries
166
175
 
167
176
  ### Defining queries
@@ -44,7 +44,6 @@ export declare const make: <const Id extends string, TSchema extends ZeroSchema>
44
44
  readonly "~effect/Context/Service": typeof Ctx.ServiceTypeId;
45
45
  };
46
46
  readonly Service: ZeroTransaction<TSchema>;
47
- readonly stack?: string | undefined;
48
47
  readonly "~effect/Context/Service": Ctx.ServiceTypeId;
49
48
  readonly "~effect/Effect": Effect.Variance<ZeroTransaction<TSchema>, never, {
50
49
  readonly Service: ZeroTransaction<TSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"client-transaction.d.ts","sourceRoot":"","sources":["../src/client-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAM3C,eAAO,MAAM,aAAa,eAAkC,CAAC;AAC7D,eAAO,MAAM,YAAY,eAAiC,CAAC;AAG3D,MAAM,MAAM,OAAO,CAAC,OAAO,SAAS,UAAU,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAExF,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,OAAO,SAAS,UAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,OAAO;UAGlF,CAAC,MACR,CAAC,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;KAAE,KAAK,WAAW,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAW3G,CAAC;;;;AAEF,cAAM,sBAAuB,SAAQ,4BAA2C;IAC9E,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CACtC,CAAC;IACA,IAAa,OAAO,WAGnB;CACF"}
1
+ {"version":3,"file":"client-transaction.d.ts","sourceRoot":"","sources":["../src/client-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAM3C,eAAO,MAAM,aAAa,eAAkC,CAAC;AAC7D,eAAO,MAAM,YAAY,eAAiC,CAAC;AAG3D,MAAM,MAAM,OAAO,CAAC,OAAO,SAAS,UAAU,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAExF,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,OAAO,SAAS,UAAU,EAAE,IAAI,EAAE,EAAE,QAAQ,OAAO;UAGlF,CAAC,MACR,CAAC,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;KAAE,KAAK,WAAW,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAW3G,CAAC;;;;AAEF,cAAM,sBAAuB,SAAQ,4BAA2C;IAC9E,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CACtC,CAAC;IACA,IAAa,OAAO,WAGnB;CACF"}
package/dist/client.d.ts CHANGED
@@ -1,144 +1,44 @@
1
- import { Zero, type ZeroOptions, type Schema as ZeroSchema, type Transaction as ZeroTransaction } from "@rocicorp/zero";
2
- import * as Cause from "effect/Cause";
1
+ import { type MutatorResultErrorDetails, type ReadonlyJSONValue, Zero, type ZeroOptions } from "@rocicorp/zero";
3
2
  import * as Effect from "effect/Effect";
4
- import type { NodeInspectSymbol } from "effect/Inspectable";
5
- import * as Rec from "effect/Record";
6
- import * as Schema from "effect/Schema";
7
- import type * as Unify from "effect/Unify";
8
- import { ContextSymbol, SchemaSymbol } from "./client-transaction.js";
9
- import * as Mutators from "./mutators.js";
10
- export declare const make: <TSchema extends ZeroSchema, TMutators extends Mutators.AnyMutators>(transaction: {
11
- use: <A>(fn: (transaction: ZeroTransaction<TSchema>, options: {
12
- readonly signal: AbortSignal;
13
- }) => PromiseLike<A>) => Effect.Effect<A, {
14
- get message(): string;
15
- readonly "~effect/Effect": Effect.Variance<never, /*elided*/ any, never>;
16
- [Symbol.iterator](): Effect.EffectIterator<Effect.Effect<never, /*elided*/ any, never>>;
17
- name: string;
18
- stack?: string;
19
- cause: Cause.Cause<unknown>;
20
- readonly "~effect/ErrorReporter/ignore"?: boolean;
21
- readonly "~effect/ErrorReporter/severity"?: import("effect/LogLevel").Severity;
22
- readonly "~effect/ErrorReporter/attributes"?: Rec.ReadonlyRecord<string, unknown>;
23
- pipe<A_1>(this: A_1): A_1;
24
- pipe<A_1, B = never>(this: A_1, ab: (_: A_1) => B): B;
25
- pipe<A_1, B_1 = never, C = never>(this: A_1, ab: (_: A_1) => B_1, bc: (_: B_1) => C): C;
26
- pipe<A_1, B_2 = never, C_1 = never, D = never>(this: A_1, ab: (_: A_1) => B_2, bc: (_: B_2) => C_1, cd: (_: C_1) => D): D;
27
- pipe<A_1, B_3 = never, C_2 = never, D_1 = never, E = never>(this: A_1, ab: (_: A_1) => B_3, bc: (_: B_3) => C_2, cd: (_: C_2) => D_1, de: (_: D_1) => E): E;
28
- pipe<A_1, B_4 = never, C_3 = never, D_2 = never, E_1 = never, F = never>(this: A_1, ab: (_: A_1) => B_4, bc: (_: B_4) => C_3, cd: (_: C_3) => D_2, de: (_: D_2) => E_1, ef: (_: E_1) => F): F;
29
- pipe<A_1, B_5 = never, C_4 = never, D_3 = never, E_2 = never, F_1 = never, G = never>(this: A_1, ab: (_: A_1) => B_5, bc: (_: B_5) => C_4, cd: (_: C_4) => D_3, de: (_: D_3) => E_2, ef: (_: E_2) => F_1, fg: (_: F_1) => G): G;
30
- pipe<A_1, B_6 = never, C_5 = never, D_4 = never, E_3 = never, F_2 = never, G_1 = never, H = never>(this: A_1, ab: (_: A_1) => B_6, bc: (_: B_6) => C_5, cd: (_: C_5) => D_4, de: (_: D_4) => E_3, ef: (_: E_3) => F_2, fg: (_: F_2) => G_1, gh: (_: G_1) => H): H;
31
- pipe<A_1, B_7 = never, C_6 = never, D_5 = never, E_4 = never, F_3 = never, G_2 = never, H_1 = never, I = never>(this: A_1, ab: (_: A_1) => B_7, bc: (_: B_7) => C_6, cd: (_: C_6) => D_5, de: (_: D_5) => E_4, ef: (_: E_4) => F_3, fg: (_: F_3) => G_2, gh: (_: G_2) => H_1, hi: (_: H_1) => I): I;
32
- pipe<A_1, B_8 = never, C_7 = never, D_6 = never, E_5 = never, F_4 = never, G_3 = never, H_2 = never, I_1 = never, J = never>(this: A_1, ab: (_: A_1) => B_8, bc: (_: B_8) => C_7, cd: (_: C_7) => D_6, de: (_: D_6) => E_5, ef: (_: E_5) => F_4, fg: (_: F_4) => G_3, gh: (_: G_3) => H_2, hi: (_: H_2) => I_1, ij: (_: I_1) => J): J;
33
- pipe<A_1, B_9 = never, C_8 = never, D_7 = never, E_6 = never, F_5 = never, G_4 = never, H_3 = never, I_2 = never, J_1 = never, K = never>(this: A_1, ab: (_: A_1) => B_9, bc: (_: B_9) => C_8, cd: (_: C_8) => D_7, de: (_: D_7) => E_6, ef: (_: E_6) => F_5, fg: (_: F_5) => G_4, gh: (_: G_4) => H_3, hi: (_: H_3) => I_2, ij: (_: I_2) => J_1, jk: (_: J_1) => K): K;
34
- pipe<A_1, B_10 = never, C_9 = never, D_8 = never, E_7 = never, F_6 = never, G_5 = never, H_4 = never, I_3 = never, J_2 = never, K_1 = never, L = never>(this: A_1, ab: (_: A_1) => B_10, bc: (_: B_10) => C_9, cd: (_: C_9) => D_8, de: (_: D_8) => E_7, ef: (_: E_7) => F_6, fg: (_: F_6) => G_5, gh: (_: G_5) => H_4, hi: (_: H_4) => I_3, ij: (_: I_3) => J_2, jk: (_: J_2) => K_1, kl: (_: K_1) => L): L;
35
- pipe<A_1, B_11 = never, C_10 = never, D_9 = never, E_8 = never, F_7 = never, G_6 = never, H_5 = never, I_4 = never, J_3 = never, K_2 = never, L_1 = never, M = never>(this: A_1, ab: (_: A_1) => B_11, bc: (_: B_11) => C_10, cd: (_: C_10) => D_9, de: (_: D_9) => E_8, ef: (_: E_8) => F_7, fg: (_: F_7) => G_6, gh: (_: G_6) => H_5, hi: (_: H_5) => I_4, ij: (_: I_4) => J_3, jk: (_: J_3) => K_2, kl: (_: K_2) => L_1, lm: (_: L_1) => M): M;
36
- pipe<A_1, B_12 = never, C_11 = never, D_10 = never, E_9 = never, F_8 = never, G_7 = never, H_6 = never, I_5 = never, J_4 = never, K_3 = never, L_2 = never, M_1 = never, N = never>(this: A_1, ab: (_: A_1) => B_12, bc: (_: B_12) => C_11, cd: (_: C_11) => D_10, de: (_: D_10) => E_9, ef: (_: E_9) => F_8, fg: (_: F_8) => G_7, gh: (_: G_7) => H_6, hi: (_: H_6) => I_5, ij: (_: I_5) => J_4, jk: (_: J_4) => K_3, kl: (_: K_3) => L_2, lm: (_: L_2) => M_1, mn: (_: M_1) => N): N;
37
- pipe<A_1, B_13 = never, C_12 = never, D_11 = never, E_10 = never, F_9 = never, G_8 = never, H_7 = never, I_6 = never, J_5 = never, K_4 = never, L_3 = never, M_2 = never, N_1 = never, O = never>(this: A_1, ab: (_: A_1) => B_13, bc: (_: B_13) => C_12, cd: (_: C_12) => D_11, de: (_: D_11) => E_10, ef: (_: E_10) => F_9, fg: (_: F_9) => G_8, gh: (_: G_8) => H_7, hi: (_: H_7) => I_6, ij: (_: I_6) => J_5, jk: (_: J_5) => K_4, kl: (_: K_4) => L_3, lm: (_: L_3) => M_2, mn: (_: M_2) => N_1, no: (_: N_1) => O): O;
38
- pipe<A_1, B_14 = never, C_13 = never, D_12 = never, E_11 = never, F_10 = never, G_9 = never, H_8 = never, I_7 = never, J_6 = never, K_5 = never, L_4 = never, M_3 = never, N_2 = never, O_1 = never, P = never>(this: A_1, ab: (_: A_1) => B_14, bc: (_: B_14) => C_13, cd: (_: C_13) => D_12, de: (_: D_12) => E_11, ef: (_: E_11) => F_10, fg: (_: F_10) => G_9, gh: (_: G_9) => H_8, hi: (_: H_8) => I_7, ij: (_: I_7) => J_6, jk: (_: J_6) => K_5, kl: (_: K_5) => L_4, lm: (_: L_4) => M_3, mn: (_: M_3) => N_2, no: (_: N_2) => O_1, op: (_: O_1) => P): P;
39
- pipe<A_1, B_15 = never, C_14 = never, D_13 = never, E_12 = never, F_11 = never, G_10 = never, H_9 = never, I_8 = never, J_7 = never, K_6 = never, L_5 = never, M_4 = never, N_3 = never, O_2 = never, P_1 = never, Q = never>(this: A_1, ab: (_: A_1) => B_15, bc: (_: B_15) => C_14, cd: (_: C_14) => D_13, de: (_: D_13) => E_12, ef: (_: E_12) => F_11, fg: (_: F_11) => G_10, gh: (_: G_10) => H_9, hi: (_: H_9) => I_8, ij: (_: I_8) => J_7, jk: (_: J_7) => K_6, kl: (_: K_6) => L_5, lm: (_: L_5) => M_4, mn: (_: M_4) => N_3, no: (_: N_3) => O_2, op: (_: O_2) => P_1, pq: (_: P_1) => Q): Q;
40
- pipe<A_1, B_16 = never, C_15 = never, D_14 = never, E_13 = never, F_12 = never, G_11 = never, H_10 = never, I_9 = never, J_8 = never, K_7 = never, L_6 = never, M_5 = never, N_4 = never, O_3 = never, P_2 = never, Q_1 = never, R = never>(this: A_1, ab: (_: A_1) => B_16, bc: (_: B_16) => C_15, cd: (_: C_15) => D_14, de: (_: D_14) => E_13, ef: (_: E_13) => F_12, fg: (_: F_12) => G_11, gh: (_: G_11) => H_10, hi: (_: H_10) => I_9, ij: (_: I_9) => J_8, jk: (_: J_8) => K_7, kl: (_: K_7) => L_6, lm: (_: L_6) => M_5, mn: (_: M_5) => N_4, no: (_: N_4) => O_3, op: (_: O_3) => P_2, pq: (_: P_2) => Q_1, qr: (_: Q_1) => R): R;
41
- pipe<A_1, B_17 = never, C_16 = never, D_15 = never, E_14 = never, F_13 = never, G_12 = never, H_11 = never, I_10 = never, J_9 = never, K_8 = never, L_7 = never, M_6 = never, N_5 = never, O_4 = never, P_3 = never, Q_2 = never, R_1 = never, S = never>(this: A_1, ab: (_: A_1) => B_17, bc: (_: B_17) => C_16, cd: (_: C_16) => D_15, de: (_: D_15) => E_14, ef: (_: E_14) => F_13, fg: (_: F_13) => G_12, gh: (_: G_12) => H_11, hi: (_: H_11) => I_10, ij: (_: I_10) => J_9, jk: (_: J_9) => K_8, kl: (_: K_8) => L_7, lm: (_: L_7) => M_6, mn: (_: M_6) => N_5, no: (_: N_5) => O_4, op: (_: O_4) => P_3, pq: (_: P_3) => Q_2, qr: (_: Q_2) => R_1, rs: (_: R_1) => S): S;
42
- pipe<A_1, B_18 = never, C_17 = never, D_16 = never, E_15 = never, F_14 = never, G_13 = never, H_12 = never, I_11 = never, J_10 = never, K_9 = never, L_8 = never, M_7 = never, N_6 = never, O_5 = never, P_4 = never, Q_3 = never, R_2 = never, S_1 = never, T = never>(this: A_1, ab: (_: A_1) => B_18, bc: (_: B_18) => C_17, cd: (_: C_17) => D_16, de: (_: D_16) => E_15, ef: (_: E_15) => F_14, fg: (_: F_14) => G_13, gh: (_: G_13) => H_12, hi: (_: H_12) => I_11, ij: (_: I_11) => J_10, jk: (_: J_10) => K_9, kl: (_: K_9) => L_8, lm: (_: L_8) => M_7, mn: (_: M_7) => N_6, no: (_: N_6) => O_5, op: (_: O_5) => P_4, pq: (_: P_4) => Q_3, qr: (_: Q_3) => R_2, rs: (_: R_2) => S_1, st: (_: S_1) => T): T;
43
- pipe<A_1, B_19 = never, C_18 = never, D_17 = never, E_16 = never, F_15 = never, G_14 = never, H_13 = never, I_12 = never, J_11 = never, K_10 = never, L_9 = never, M_8 = never, N_7 = never, O_6 = never, P_5 = never, Q_4 = never, R_3 = never, S_2 = never, T_1 = never, U = never>(this: A_1, ab: (_: A_1) => B_19, bc: (_: B_19) => C_18, cd: (_: C_18) => D_17, de: (_: D_17) => E_16, ef: (_: E_16) => F_15, fg: (_: F_15) => G_14, gh: (_: G_14) => H_13, hi: (_: H_13) => I_12, ij: (_: I_12) => J_11, jk: (_: J_11) => K_10, kl: (_: K_10) => L_9, lm: (_: L_9) => M_8, mn: (_: M_8) => N_7, no: (_: N_7) => O_6, op: (_: O_6) => P_5, pq: (_: P_5) => Q_4, qr: (_: Q_4) => R_3, rs: (_: R_3) => S_2, st: (_: S_2) => T_1, tu: (_: T_1) => U): U;
44
- pipe<A_1, B_20 = never, C_19 = never, D_18 = never, E_17 = never, F_16 = never, G_15 = never, H_14 = never, I_13 = never, J_12 = never, K_11 = never, L_10 = never, M_9 = never, N_8 = never, O_7 = never, P_6 = never, Q_5 = never, R_4 = never, S_3 = never, T_2 = never, U_1 = never>(this: A_1, ab: (_: A_1) => B_20, bc: (_: B_20) => C_19, cd: (_: C_19) => D_18, de: (_: D_18) => E_17, ef: (_: E_17) => F_16, fg: (_: F_16) => G_15, gh: (_: G_15) => H_14, hi: (_: H_14) => I_13, ij: (_: I_13) => J_12, jk: (_: J_12) => K_11, kl: (_: K_11) => L_10, lm: (_: L_10) => M_9, mn: (_: M_9) => N_8, no: (_: N_8) => O_7, op: (_: O_7) => P_6, pq: (_: P_6) => Q_5, qr: (_: Q_5) => R_4, rs: (_: R_4) => S_3, st: (_: S_3) => T_2, tu: (_: T_2) => U_1): U_1;
45
- toString(): string;
46
- toJSON(): unknown;
47
- [NodeInspectSymbol](): unknown;
48
- readonly _tag: "ClientTransactionError";
49
- }, {
50
- readonly Service: ZeroTransaction<TSchema>;
51
- readonly key: any;
52
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
53
- }>;
54
- [ContextSymbol]: {
55
- new (_: never): {
56
- readonly Service: ZeroTransaction<TSchema>;
57
- readonly key: any;
58
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
59
- };
60
- readonly key: any;
61
- of(this: void, self: ZeroTransaction<TSchema>): ZeroTransaction<TSchema>;
62
- context(self: ZeroTransaction<TSchema>): import("effect/Context").Context<{
63
- readonly Service: ZeroTransaction<TSchema>;
64
- readonly key: any;
65
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
66
- }>;
67
- use<A, E_18, R_5>(f: (service: ZeroTransaction<TSchema>) => Effect.Effect<A, E_18, R_5>): Effect.Effect<A, E_18, {
68
- readonly Service: ZeroTransaction<TSchema>;
69
- readonly key: any;
70
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
71
- } | R_5>;
72
- useSync<A>(f: (service: ZeroTransaction<TSchema>) => A): Effect.Effect<A, never, {
73
- readonly Service: ZeroTransaction<TSchema>;
74
- readonly key: any;
75
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
76
- }>;
77
- readonly Identifier: {
78
- readonly Service: ZeroTransaction<TSchema>;
79
- readonly key: any;
80
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
81
- };
82
- readonly Service: ZeroTransaction<TSchema>;
83
- readonly stack?: string | undefined;
84
- readonly "~effect/Context/Service": import("effect/Context").ServiceTypeId;
85
- readonly "~effect/Effect": Effect.Variance<ZeroTransaction<TSchema>, never, {
86
- readonly Service: ZeroTransaction<TSchema>;
87
- readonly key: any;
88
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
89
- }>;
90
- [Symbol.iterator](): Effect.EffectIterator<Effect.Effect<ZeroTransaction<TSchema>, never, {
91
- readonly Service: ZeroTransaction<TSchema>;
92
- readonly key: any;
93
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
94
- }>>;
95
- [Unify.typeSymbol]?: unknown;
96
- [Unify.unifySymbol]?: Effect.EffectUnify<import("effect/Context").ServiceClass<{
97
- readonly Service: ZeroTransaction<TSchema>;
98
- readonly key: any;
99
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
100
- }, any, ZeroTransaction<TSchema>>> | undefined;
101
- [Unify.ignoreSymbol]?: {};
102
- pipe<A>(this: A): A;
103
- pipe<A, B = never>(this: A, ab: (_: A) => B): B;
104
- pipe<A, B_1 = never, C = never>(this: A, ab: (_: A) => B_1, bc: (_: B_1) => C): C;
105
- pipe<A, B_2 = never, C_1 = never, D = never>(this: A, ab: (_: A) => B_2, bc: (_: B_2) => C_1, cd: (_: C_1) => D): D;
106
- pipe<A, B_3 = never, C_2 = never, D_1 = never, E = never>(this: A, ab: (_: A) => B_3, bc: (_: B_3) => C_2, cd: (_: C_2) => D_1, de: (_: D_1) => E): E;
107
- pipe<A, B_4 = never, C_3 = never, D_2 = never, E_1 = never, F = never>(this: A, ab: (_: A) => B_4, bc: (_: B_4) => C_3, cd: (_: C_3) => D_2, de: (_: D_2) => E_1, ef: (_: E_1) => F): F;
108
- pipe<A, B_5 = never, C_4 = never, D_3 = never, E_2 = never, F_1 = never, G = never>(this: A, ab: (_: A) => B_5, bc: (_: B_5) => C_4, cd: (_: C_4) => D_3, de: (_: D_3) => E_2, ef: (_: E_2) => F_1, fg: (_: F_1) => G): G;
109
- pipe<A, B_6 = never, C_5 = never, D_4 = never, E_3 = never, F_2 = never, G_1 = never, H = never>(this: A, ab: (_: A) => B_6, bc: (_: B_6) => C_5, cd: (_: C_5) => D_4, de: (_: D_4) => E_3, ef: (_: E_3) => F_2, fg: (_: F_2) => G_1, gh: (_: G_1) => H): H;
110
- pipe<A, B_7 = never, C_6 = never, D_5 = never, E_4 = never, F_3 = never, G_2 = never, H_1 = never, I = never>(this: A, ab: (_: A) => B_7, bc: (_: B_7) => C_6, cd: (_: C_6) => D_5, de: (_: D_5) => E_4, ef: (_: E_4) => F_3, fg: (_: F_3) => G_2, gh: (_: G_2) => H_1, hi: (_: H_1) => I): I;
111
- pipe<A, B_8 = never, C_7 = never, D_6 = never, E_5 = never, F_4 = never, G_3 = never, H_2 = never, I_1 = never, J = never>(this: A, ab: (_: A) => B_8, bc: (_: B_8) => C_7, cd: (_: C_7) => D_6, de: (_: D_6) => E_5, ef: (_: E_5) => F_4, fg: (_: F_4) => G_3, gh: (_: G_3) => H_2, hi: (_: H_2) => I_1, ij: (_: I_1) => J): J;
112
- pipe<A, B_9 = never, C_8 = never, D_7 = never, E_6 = never, F_5 = never, G_4 = never, H_3 = never, I_2 = never, J_1 = never, K = never>(this: A, ab: (_: A) => B_9, bc: (_: B_9) => C_8, cd: (_: C_8) => D_7, de: (_: D_7) => E_6, ef: (_: E_6) => F_5, fg: (_: F_5) => G_4, gh: (_: G_4) => H_3, hi: (_: H_3) => I_2, ij: (_: I_2) => J_1, jk: (_: J_1) => K): K;
113
- pipe<A, B_10 = never, C_9 = never, D_8 = never, E_7 = never, F_6 = never, G_5 = never, H_4 = never, I_3 = never, J_2 = never, K_1 = never, L = never>(this: A, ab: (_: A) => B_10, bc: (_: B_10) => C_9, cd: (_: C_9) => D_8, de: (_: D_8) => E_7, ef: (_: E_7) => F_6, fg: (_: F_6) => G_5, gh: (_: G_5) => H_4, hi: (_: H_4) => I_3, ij: (_: I_3) => J_2, jk: (_: J_2) => K_1, kl: (_: K_1) => L): L;
114
- pipe<A, B_11 = never, C_10 = never, D_9 = never, E_8 = never, F_7 = never, G_6 = never, H_5 = never, I_4 = never, J_3 = never, K_2 = never, L_1 = never, M = never>(this: A, ab: (_: A) => B_11, bc: (_: B_11) => C_10, cd: (_: C_10) => D_9, de: (_: D_9) => E_8, ef: (_: E_8) => F_7, fg: (_: F_7) => G_6, gh: (_: G_6) => H_5, hi: (_: H_5) => I_4, ij: (_: I_4) => J_3, jk: (_: J_3) => K_2, kl: (_: K_2) => L_1, lm: (_: L_1) => M): M;
115
- pipe<A, B_12 = never, C_11 = never, D_10 = never, E_9 = never, F_8 = never, G_7 = never, H_6 = never, I_5 = never, J_4 = never, K_3 = never, L_2 = never, M_1 = never, N = never>(this: A, ab: (_: A) => B_12, bc: (_: B_12) => C_11, cd: (_: C_11) => D_10, de: (_: D_10) => E_9, ef: (_: E_9) => F_8, fg: (_: F_8) => G_7, gh: (_: G_7) => H_6, hi: (_: H_6) => I_5, ij: (_: I_5) => J_4, jk: (_: J_4) => K_3, kl: (_: K_3) => L_2, lm: (_: L_2) => M_1, mn: (_: M_1) => N): N;
116
- pipe<A, B_13 = never, C_12 = never, D_11 = never, E_10 = never, F_9 = never, G_8 = never, H_7 = never, I_6 = never, J_5 = never, K_4 = never, L_3 = never, M_2 = never, N_1 = never, O = never>(this: A, ab: (_: A) => B_13, bc: (_: B_13) => C_12, cd: (_: C_12) => D_11, de: (_: D_11) => E_10, ef: (_: E_10) => F_9, fg: (_: F_9) => G_8, gh: (_: G_8) => H_7, hi: (_: H_7) => I_6, ij: (_: I_6) => J_5, jk: (_: J_5) => K_4, kl: (_: K_4) => L_3, lm: (_: L_3) => M_2, mn: (_: M_2) => N_1, no: (_: N_1) => O): O;
117
- pipe<A, B_14 = never, C_13 = never, D_12 = never, E_11 = never, F_10 = never, G_9 = never, H_8 = never, I_7 = never, J_6 = never, K_5 = never, L_4 = never, M_3 = never, N_2 = never, O_1 = never, P = never>(this: A, ab: (_: A) => B_14, bc: (_: B_14) => C_13, cd: (_: C_13) => D_12, de: (_: D_12) => E_11, ef: (_: E_11) => F_10, fg: (_: F_10) => G_9, gh: (_: G_9) => H_8, hi: (_: H_8) => I_7, ij: (_: I_7) => J_6, jk: (_: J_6) => K_5, kl: (_: K_5) => L_4, lm: (_: L_4) => M_3, mn: (_: M_3) => N_2, no: (_: N_2) => O_1, op: (_: O_1) => P): P;
118
- pipe<A, B_15 = never, C_14 = never, D_13 = never, E_12 = never, F_11 = never, G_10 = never, H_9 = never, I_8 = never, J_7 = never, K_6 = never, L_5 = never, M_4 = never, N_3 = never, O_2 = never, P_1 = never, Q = never>(this: A, ab: (_: A) => B_15, bc: (_: B_15) => C_14, cd: (_: C_14) => D_13, de: (_: D_13) => E_12, ef: (_: E_12) => F_11, fg: (_: F_11) => G_10, gh: (_: G_10) => H_9, hi: (_: H_9) => I_8, ij: (_: I_8) => J_7, jk: (_: J_7) => K_6, kl: (_: K_6) => L_5, lm: (_: L_5) => M_4, mn: (_: M_4) => N_3, no: (_: N_3) => O_2, op: (_: O_2) => P_1, pq: (_: P_1) => Q): Q;
119
- pipe<A, B_16 = never, C_15 = never, D_14 = never, E_13 = never, F_12 = never, G_11 = never, H_10 = never, I_9 = never, J_8 = never, K_7 = never, L_6 = never, M_5 = never, N_4 = never, O_3 = never, P_2 = never, Q_1 = never, R = never>(this: A, ab: (_: A) => B_16, bc: (_: B_16) => C_15, cd: (_: C_15) => D_14, de: (_: D_14) => E_13, ef: (_: E_13) => F_12, fg: (_: F_12) => G_11, gh: (_: G_11) => H_10, hi: (_: H_10) => I_9, ij: (_: I_9) => J_8, jk: (_: J_8) => K_7, kl: (_: K_7) => L_6, lm: (_: L_6) => M_5, mn: (_: M_5) => N_4, no: (_: N_4) => O_3, op: (_: O_3) => P_2, pq: (_: P_2) => Q_1, qr: (_: Q_1) => R): R;
120
- pipe<A, B_17 = never, C_16 = never, D_15 = never, E_14 = never, F_13 = never, G_12 = never, H_11 = never, I_10 = never, J_9 = never, K_8 = never, L_7 = never, M_6 = never, N_5 = never, O_4 = never, P_3 = never, Q_2 = never, R_1 = never, S = never>(this: A, ab: (_: A) => B_17, bc: (_: B_17) => C_16, cd: (_: C_16) => D_15, de: (_: D_15) => E_14, ef: (_: E_14) => F_13, fg: (_: F_13) => G_12, gh: (_: G_12) => H_11, hi: (_: H_11) => I_10, ij: (_: I_10) => J_9, jk: (_: J_9) => K_8, kl: (_: K_8) => L_7, lm: (_: L_7) => M_6, mn: (_: M_6) => N_5, no: (_: N_5) => O_4, op: (_: O_4) => P_3, pq: (_: P_3) => Q_2, qr: (_: Q_2) => R_1, rs: (_: R_1) => S): S;
121
- pipe<A, B_18 = never, C_17 = never, D_16 = never, E_15 = never, F_14 = never, G_13 = never, H_12 = never, I_11 = never, J_10 = never, K_9 = never, L_8 = never, M_7 = never, N_6 = never, O_5 = never, P_4 = never, Q_3 = never, R_2 = never, S_1 = never, T = never>(this: A, ab: (_: A) => B_18, bc: (_: B_18) => C_17, cd: (_: C_17) => D_16, de: (_: D_16) => E_15, ef: (_: E_15) => F_14, fg: (_: F_14) => G_13, gh: (_: G_13) => H_12, hi: (_: H_12) => I_11, ij: (_: I_11) => J_10, jk: (_: J_10) => K_9, kl: (_: K_9) => L_8, lm: (_: L_8) => M_7, mn: (_: M_7) => N_6, no: (_: N_6) => O_5, op: (_: O_5) => P_4, pq: (_: P_4) => Q_3, qr: (_: Q_3) => R_2, rs: (_: R_2) => S_1, st: (_: S_1) => T): T;
122
- pipe<A, B_19 = never, C_18 = never, D_17 = never, E_16 = never, F_15 = never, G_14 = never, H_13 = never, I_12 = never, J_11 = never, K_10 = never, L_9 = never, M_8 = never, N_7 = never, O_6 = never, P_5 = never, Q_4 = never, R_3 = never, S_2 = never, T_1 = never, U = never>(this: A, ab: (_: A) => B_19, bc: (_: B_19) => C_18, cd: (_: C_18) => D_17, de: (_: D_17) => E_16, ef: (_: E_16) => F_15, fg: (_: F_15) => G_14, gh: (_: G_14) => H_13, hi: (_: H_13) => I_12, ij: (_: I_12) => J_11, jk: (_: J_11) => K_10, kl: (_: K_10) => L_9, lm: (_: L_9) => M_8, mn: (_: M_8) => N_7, no: (_: N_7) => O_6, op: (_: O_6) => P_5, pq: (_: P_5) => Q_4, qr: (_: Q_4) => R_3, rs: (_: R_3) => S_2, st: (_: S_2) => T_1, tu: (_: T_1) => U): U;
123
- pipe<A, B_20 = never, C_19 = never, D_18 = never, E_17 = never, F_16 = never, G_15 = never, H_14 = never, I_13 = never, J_12 = never, K_11 = never, L_10 = never, M_9 = never, N_8 = never, O_7 = never, P_6 = never, Q_5 = never, R_4 = never, S_3 = never, T_2 = never, U_1 = never>(this: A, ab: (_: A) => B_20, bc: (_: B_20) => C_19, cd: (_: C_19) => D_18, de: (_: D_18) => E_17, ef: (_: E_17) => F_16, fg: (_: F_16) => G_15, gh: (_: G_15) => H_14, hi: (_: H_14) => I_13, ij: (_: I_13) => J_12, jk: (_: J_12) => K_11, kl: (_: K_11) => L_10, lm: (_: L_10) => M_9, mn: (_: M_9) => N_8, no: (_: N_8) => O_7, op: (_: O_7) => P_6, pq: (_: P_6) => Q_5, qr: (_: Q_5) => R_4, rs: (_: R_4) => S_3, st: (_: S_3) => T_2, tu: (_: T_2) => U_1): U_1;
124
- toString(): string;
125
- toJSON(): unknown;
126
- [NodeInspectSymbol](): unknown;
127
- };
128
- [SchemaSymbol]: TSchema;
129
- }, mutators: TMutators, options: Omit<ZeroOptions<TSchema, { [A in keyof TMutators]: TMutators[A] extends Mutators.AnyMutator<any, any> ? UnwrapMutator<TSchema, TMutators[A]> : { [B_21 in keyof TMutators[A]]: TMutators[A][B_21] extends Mutators.AnyMutator<any, any> ? UnwrapMutator<TSchema, TMutators[A][B_21]> : never; }; }>, "schema" | "mutators">) => Effect.Effect<Zero<TSchema, { [A in keyof TMutators]: TMutators[A] extends Mutators.AnyMutator<any, any> ? UnwrapMutator<TSchema, TMutators[A]> : { [B_21 in keyof TMutators[A]]: TMutators[A][B_21] extends Mutators.AnyMutator<any, any> ? UnwrapMutator<TSchema, TMutators[A][B_21]> : never; }; }, unknown>, never, import("effect/Scope").Scope | Exclude<Mutators.ExtractMutatorsRequirements<TMutators>, {
130
- readonly Service: ZeroTransaction<TSchema>;
131
- readonly key: any;
132
- readonly "~effect/Context/Service": typeof import("effect/Context").ServiceTypeId;
133
- }>>;
134
- type UnwrapMutator<TSchema extends ZeroSchema, TMutators extends Mutators.AnyMutator> = Parameters<TMutators> extends [] ? (transaction: ZeroTransaction<TSchema>) => Promise<void> : (transaction: ZeroTransaction<TSchema>, args: Schema.Codec.Encoded<TMutators[typeof Mutators.MutatorSchemaSymbol]>) => Promise<void>;
135
- declare const ClientArgsParseError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Cause.YieldableError & {
136
- readonly _tag: "ClientArgsParseError";
3
+ import * as Scope from "effect/Scope";
4
+ import { type ContextSymbol } from "./client-transaction.js";
5
+ import * as Mutator from "./mutator.js";
6
+ export type Options<TRegistry extends Mutator.AnyRegistry> = Omit<ZeroOptions<Mutator.ZeroSchemaOf<TRegistry>>, "schema" | "mutators" | "context">;
7
+ /**
8
+ * Makes a Zero client that runs the registry's mutators with the services in scope here.
9
+ * Run mutations with {@link mutate}.
10
+ */
11
+ export declare const make: <TRegistry extends Mutator.AnyRegistry>(mutators: TRegistry, options: Options<TRegistry>) => Effect.Effect<Zero<Mutator.ZeroSchemaOf<TRegistry>, undefined, unknown>, never, Scope.Scope | Exclude<Mutator.Requirements<TRegistry>, Mutator.Transaction<TRegistry>[typeof ContextSymbol]["Identifier"]>>;
12
+ /** A mutation sent with {@link mutate}. Its client and server outcomes settle independently. */
13
+ export interface Mutation {
14
+ /** Completes once the mutation is applied locally; fails if Zero or the client mutator rejected it. */
15
+ readonly client: Effect.Effect<void, MutationError>;
16
+ /** Completes once the server applied the mutation; fails if it was rejected anywhere. */
17
+ readonly server: Effect.Effect<void, MutationError>;
18
+ }
19
+ /**
20
+ * Sends a mutation with `zero.mutate(request)` and traces it. Awaiting `client` or `server` is optional; both
21
+ * outcomes are always recorded on the `zero.mutation` span, as the `zero.mutation.client` and
22
+ * `zero.mutation.server` child spans.
23
+ */
24
+ export declare const mutate: <Type>(zero: Zero<any, any, any>, request: Mutator.MutateRequest<Type>) => Effect.Effect<{
25
+ client: Effect.Effect<void, MutationError, never>;
26
+ server: Effect.Effect<void, MutationError, never>;
27
+ }, never, never>;
28
+ declare const MutationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
29
+ readonly _tag: "MutationError";
137
30
  } & Readonly<A>;
138
- export declare class ClientArgsParseError extends ClientArgsParseError_base<{
139
- readonly cause: Cause.Cause<unknown>;
31
+ /**
32
+ * Zero rejected a mutation, with Zero's own error details: `type` is `"zero"` when Zero itself refused it
33
+ * (e.g. offline), and `"app"` when a mutator failed. `origin` is where it failed.
34
+ */
35
+ export declare class MutationError extends MutationError_base<{
36
+ readonly mutator: string;
37
+ readonly origin: "client" | "server";
38
+ readonly type: MutatorResultErrorDetails["error"]["type"];
39
+ readonly message: string;
40
+ readonly details?: ReadonlyJSONValue | undefined;
140
41
  }> {
141
- get message(): string;
142
42
  }
143
43
  export {};
144
44
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,IAAI,UAAU,EAAE,KAAK,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAK1C,eAAO,MAAM,IAAI,GAAwB,OAAO,SAAS,UAAU,EAAE,SAAS,SAAS,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DA4CxG,CAAC,kUAAD,CAAC;;;;GAVF,CAAC;AAEH,KAAK,aAAa,CAAC,OAAO,SAAS,UAAU,EAAE,SAAS,SAAS,QAAQ,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,GACpH,CAAC,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACxD,CACE,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC,EACrC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,QAAQ,CAAC,mBAAmB,CAAC,CAAC,KACvE,OAAO,CAAC,IAAI,CAAC,CAAC;;;;AAYvB,qBAAa,oBAAqB,SAAQ,0BAAyC;IACjF,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CACtC,CAAC;IACA,IAAa,OAAO,WAGnB;CACF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,yBAAyB,EAE9B,KAAK,iBAAiB,EACtB,IAAI,EACJ,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAUxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAKxC,MAAM,MAAM,OAAO,CAAC,SAAS,SAAS,OAAO,CAAC,WAAW,IAAI,IAAI,CAC/D,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAC5C,QAAQ,GAAG,UAAU,GAAG,SAAS,CAClC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,IAAI,GAAwB,SAAS,SAAS,OAAO,CAAC,WAAW,kQAsC5E,CAAC;AAEH,gGAAgG;AAChG,MAAM,WAAW,QAAQ;IACvB,uGAAuG;IACvG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACpD,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;CACrD;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAwB,IAAI;;;gBAuD7C,CAAC;;;;AA0BH;;;GAGG;AACH,qBAAa,aAAc,SAAQ,mBAAkC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAClD,CAAC;CAAG"}
package/dist/client.js CHANGED
@@ -1,32 +1,83 @@
1
- import { Zero } from "@rocicorp/zero";
2
- import * as Cause from "effect/Cause";
1
+ import { Zero, } from "@rocicorp/zero";
3
2
  import * as Data from "effect/Data";
4
3
  import * as Effect from "effect/Effect";
4
+ import * as Exit from "effect/Exit";
5
+ import * as Fiber from "effect/Fiber";
6
+ import * as Fn from "effect/Function";
5
7
  import * as Match from "effect/Match";
8
+ import * as Option from "effect/Option";
6
9
  import * as Predicate from "effect/Predicate";
7
10
  import * as Rec from "effect/Record";
8
- import * as Schema from "effect/Schema";
9
- import { ContextSymbol, SchemaSymbol } from "./client-transaction.js";
10
- import { normalizeArgs } from "./internal/utils.js";
11
- import * as Mutators from "./mutators.js";
12
- export const make = Effect.fn(function* (transaction, mutators, options) {
13
- const ctx = yield* Effect.context();
14
- function unwrapMutator(mutator) {
15
- return (tx, args, _ctx) => Schema.decodeUnknownEffect(mutator[Mutators.MutatorSchemaSymbol])(normalizeArgs(args)).pipe(Effect.catchTag("SchemaError", (e) => Effect.fail(new ClientArgsParseError({ cause: Cause.fail(e) }))), Effect.flatMap(mutator), Effect.provideService(transaction[ContextSymbol], tx), Effect.runPromiseWith(ctx));
16
- }
17
- const unwrappedMutators = Rec.map(mutators, (v) => Match.value(v).pipe(Match.when(Predicate.isFunction, unwrapMutator), Match.orElse(Rec.map(unwrapMutator))));
18
- return yield* Effect.acquireRelease(Effect.sync(() => {
19
- return new Zero({
20
- ...options,
21
- schema: transaction[SchemaSymbol],
22
- mutators: unwrappedMutators,
23
- });
24
- }), (zero) => Effect.promise(() => zero.close()));
11
+ import * as Scope from "effect/Scope";
12
+ import { SchemaSymbol } from "./client-transaction.js";
13
+ import * as Mutator from "./mutator.js";
14
+ /**
15
+ * Makes a Zero client that runs the registry's mutators with the services in scope here.
16
+ * Run mutations with {@link mutate}.
17
+ */
18
+ export const make = Effect.fn(function* (mutators, options) {
19
+ const context = yield* Effect.context();
20
+ return yield* Effect.acquireRelease(Effect.sync(() => new Zero({
21
+ // Zero's own logs (at its `logLevel`, "warn" by default) go through Effect's logger, unless `options` sets
22
+ // a `logSink`.
23
+ logSink: {
24
+ log: (level, logContext, ...args) => Match.value(level).pipe(Match.withReturnType(), Match.when("debug", () => "Debug"), Match.when("info", () => "Info"), Match.when("warn", () => "Warn"), Match.when("error", () => "Error"), Match.exhaustive, (severity) => Effect.logWithLevel(severity)(...args), Effect.annotateLogs({ ...logContext, logger: "zero" }), Effect.runForkWith(context)),
25
+ },
26
+ ...options,
27
+ schema: mutators[Mutator.RegistryTypeId].transaction[SchemaSymbol],
28
+ mutators,
29
+ // The mutators run with these services.
30
+ context,
31
+ })), (zero) => Effect.promise(() => zero.close()));
25
32
  });
26
- export class ClientArgsParseError extends Data.TaggedError("ClientArgsParseError") {
27
- get message() {
28
- const error = Cause.squash(this.cause);
29
- return Predicate.isError(error) ? error.message : "Internal error";
30
- }
33
+ /**
34
+ * Sends a mutation with `zero.mutate(request)` and traces it. Awaiting `client` or `server` is optional; both
35
+ * outcomes are always recorded on the `zero.mutation` span, as the `zero.mutation.client` and
36
+ * `zero.mutation.server` child spans.
37
+ */
38
+ export const mutate = Effect.fn(function* (
39
+ // biome-ignore lint/suspicious/noExplicitAny: any Zero instance made with `make`
40
+ zero, request) {
41
+ const mutator = request.mutator.mutatorName;
42
+ const connection = zero.connection.state.current;
43
+ // The span outlives this call: it ends when this scope closes, once both outcomes are known.
44
+ const scope = yield* Scope.make();
45
+ const span = yield* Effect.makeSpanScoped("zero.mutation", {
46
+ attributes: {
47
+ "zero.mutator": mutator,
48
+ "zero.clientID": zero.clientID,
49
+ "zero.connection.state": connection.name,
50
+ ...Rec.getSomes({
51
+ "zero.connection.reason": Option.fromNullishOr("reason" in connection ? connection.reason : undefined).pipe(Option.map((reason) => (Predicate.isString(reason) ? reason : reason.type))),
52
+ }),
53
+ },
54
+ }).pipe(Scope.provide(scope));
55
+ const result = yield* Effect.sync(() => zero.mutate(request)).pipe(Effect.onError((cause) => Scope.close(scope, Exit.failCause(cause))));
56
+ const client = yield* Effect.promise(() => result.client).pipe(Effect.filterOrElse(isApplied, (details) => new MutationError({ mutator, origin: "client", ...details.error })), Effect.asVoid, traceOutcome({ origin: "client", parent: span, mutator }), Effect.forkDetach);
57
+ const server = yield* Effect.promise(() => result.server).pipe(Effect.filterOrElse(isApplied, Effect.fnUntraced(function* (details) {
58
+ // A write the client rejected is never pushed; Zero reports the client's error for the server too.
59
+ const origin = Exit.isFailure(yield* Fiber.await(client)) ? "client" : "server";
60
+ return yield* new MutationError({ mutator, origin, ...details.error });
61
+ })), Effect.asVoid, traceOutcome({ origin: "server", parent: span, mutator }), Effect.forkDetach);
62
+ yield* Effect.gen(function* () {
63
+ span.attribute("zero.clientGroupID", yield* Effect.promise(() => zero.clientGroupID));
64
+ const clientExit = yield* Fiber.await(client);
65
+ const serverExit = yield* Fiber.await(server);
66
+ yield* Scope.close(scope, Exit.isFailure(clientExit) ? clientExit : serverExit);
67
+ }).pipe(Effect.forkDetach);
68
+ // Joining a fiber never re-runs it, so either outcome can be awaited any number of times.
69
+ return { client: Fiber.join(client), server: Fiber.join(server) };
70
+ });
71
+ const isApplied = (details) => details.type === "success";
72
+ /** Runs a mutation's outcome in its `zero.mutation.client` or `zero.mutation.server` span. */
73
+ const traceOutcome = Fn.dual(2, (self, { origin, parent, mutator }) => self.pipe(Effect.tapError((error) => Effect.annotateCurrentSpan({
74
+ "zero.mutation.error.type": error.type,
75
+ "zero.mutation.error.origin": error.origin,
76
+ })), Effect.withSpan(`zero.mutation.${origin}`, { parent, attributes: { "zero.mutator": mutator } })));
77
+ /**
78
+ * Zero rejected a mutation, with Zero's own error details: `type` is `"zero"` when Zero itself refused it
79
+ * (e.g. offline), and `"app"` when a mutator failed. `origin` is where it failed.
80
+ */
81
+ export class MutationError extends Data.TaggedError("MutationError") {
31
82
  }
32
83
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoF,MAAM,gBAAgB,CAAC;AACxH,OAAO,KAAK,KAAK,MAAM,cAAc,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;AAC9C,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAK1C,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EACrC,WAA+C,EAC/C,QAAmB,EACnB,OAA8F;IAE9F,MAAM,GAAG,GACP,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAElB,CAAC;IAEN,SAAS,aAAa,CAAI,OAAgF;QACxG,OAAO,CAAC,EAA4B,EAAE,IAAa,EAAE,IAAa,EAAE,EAAE,CACpE,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACzF,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACtG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EACvB,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EACrD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAC3B,CAAC;IACN,CAAC;IAED,MAAM,iBAAiB,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAChD,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CACnC,CAAC;IAE1E,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CACjC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,OAAO,IAAI,IAAI,CAAC;YACd,GAAG,OAAO;YACV,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC;YACjC,QAAQ,EAAE,iBAAiB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,EACF,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAC7C,CAAC;AACJ,CAAC,CAAC,CAAC;AAmBH,MAAM,OAAO,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAE/E;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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}