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.
- package/README.md +86 -77
- package/dist/client-transaction.d.ts +0 -1
- package/dist/client-transaction.d.ts.map +1 -1
- package/dist/client.d.ts +38 -138
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +75 -24
- package/dist/client.js.map +1 -1
- package/dist/internal/utils.d.ts +0 -7
- package/dist/internal/utils.d.ts.map +1 -1
- package/dist/internal/utils.js +0 -7
- package/dist/internal/utils.js.map +1 -1
- package/dist/mutator.d.ts +115 -0
- package/dist/mutator.d.ts.map +1 -0
- package/dist/mutator.js +67 -0
- package/dist/mutator.js.map +1 -0
- package/dist/mutator.test.d.ts +2 -0
- package/dist/mutator.test.d.ts.map +1 -0
- package/dist/{client.test.js → mutator.test.js} +5 -5
- package/dist/mutator.test.js.map +1 -0
- package/dist/query.d.ts +2 -2
- package/dist/result.d.ts +1 -1
- package/dist/result.d.ts.map +1 -1
- package/dist/result.js +1 -1
- package/dist/result.js.map +1 -1
- package/dist/server-transaction.d.ts +0 -1
- package/dist/server-transaction.d.ts.map +1 -1
- package/dist/server.d.ts +7 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +30 -15
- package/dist/server.js.map +1 -1
- package/dist/types.test.js +85 -120
- package/dist/types.test.js.map +1 -1
- package/package.json +49 -48
- package/src/client.ts +159 -56
- package/src/internal/utils.ts +0 -8
- package/src/mutator.ts +232 -0
- package/src/result.ts +2 -2
- package/src/server.ts +49 -34
- package/dist/client.test.d.ts +0 -2
- package/dist/client.test.d.ts.map +0 -1
- package/dist/client.test.js.map +0 -1
- package/dist/mutators.d.ts +0 -30
- package/dist/mutators.d.ts.map +0 -1
- package/dist/mutators.js +0 -17
- package/dist/mutators.js.map +0 -1
- 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
|
-
|
|
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
|
-
|
|
18
|
+
// The "client-side" transaction
|
|
19
|
+
export const clientTransaction = ZfxClientTransaction.make("ClientTransaction", schema);
|
|
9
20
|
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
id: Schema.String,
|
|
26
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
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,
|
|
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
|
-
//
|
|
72
|
-
|
|
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:
|
|
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
|
-
|
|
83
|
-
|
|
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 {
|
|
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(
|
|
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
|
-
//
|
|
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
|
|
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 {
|
|
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
|
|
5
|
-
import
|
|
6
|
-
import * as
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
139
|
-
|
|
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
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|