effect-zero 0.3.2 → 0.4.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 +23 -16
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/internal/query-result.d.ts +2 -1
- package/dist/internal/query-result.d.ts.map +1 -1
- package/dist/internal/query-result.js.map +1 -1
- package/dist/query.d.ts +12 -13
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +11 -14
- package/dist/query.js.map +1 -1
- package/dist/query.test.d.ts +2 -0
- package/dist/query.test.d.ts.map +1 -0
- package/dist/query.test.js +86 -0
- package/dist/query.test.js.map +1 -0
- package/dist/result.d.ts +1 -1
- package/dist/result.d.ts.map +1 -1
- package/dist/server.d.ts +33 -14
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -8
- package/dist/server.js.map +1 -1
- package/dist/snapshot.d.ts +2 -2
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/types.test.d.ts +2 -0
- package/dist/types.test.d.ts.map +1 -0
- package/dist/types.test.js +268 -0
- package/dist/types.test.js.map +1 -0
- package/package.json +26 -26
- package/src/client.ts +3 -3
- package/src/internal/query-result.ts +2 -5
- package/src/query.ts +27 -35
- package/src/result.ts +1 -1
- package/src/server.ts +16 -14
- package/src/snapshot.ts +2 -2
- package/src/internal/server.test.ts +0 -37
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/snapshot.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { JSONValue, ReadonlyJSONValue } from "@rocicorp/zero";
|
|
2
|
-
import type {
|
|
1
|
+
import type { HumanReadable, JSONValue, ReadonlyJSONValue } from "@rocicorp/zero";
|
|
2
|
+
import type { QueryResult } from "@rocicorp/zero/react";
|
|
3
3
|
export declare function getDefaultSnapshot<TReturn>(singular: boolean): QueryResult<TReturn>;
|
|
4
4
|
/**
|
|
5
5
|
* Returns a new snapshot or one of the empty predefined ones. Returning the
|
package/dist/snapshot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAYxD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAEnF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EACjC,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,UAAU,EAAE,MAAM,GACjB,WAAW,CAAC,OAAO,CAAC,CActB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CAG7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../src/types.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { describe, expectTypeOf, it } from "@effect/vitest";
|
|
2
|
+
import { queryInternalsTag } from "@rocicorp/zero/bindings";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import * as ClientTransaction from "./client-transaction.js";
|
|
6
|
+
import * as Mutators from "./mutators.js";
|
|
7
|
+
import * as Query from "./query.js";
|
|
8
|
+
import * as Server from "./server.js";
|
|
9
|
+
import * as ServerTransaction from "./server-transaction.js";
|
|
10
|
+
// Mock Zero schema for type tests
|
|
11
|
+
const mockZeroSchema = {
|
|
12
|
+
tables: {
|
|
13
|
+
messages: {
|
|
14
|
+
tableName: "messages",
|
|
15
|
+
columns: {
|
|
16
|
+
id: { type: "string" },
|
|
17
|
+
body: { type: "string" },
|
|
18
|
+
},
|
|
19
|
+
primaryKey: ["id"],
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
// Mock database for type tests
|
|
24
|
+
const mockDatabase = {};
|
|
25
|
+
describe("Type tests", () => {
|
|
26
|
+
describe("Mutators", () => {
|
|
27
|
+
it("mutators should have correct argument types", () => {
|
|
28
|
+
const mutatorSchema = Mutators.schema({
|
|
29
|
+
messages: {
|
|
30
|
+
create: Schema.Struct({
|
|
31
|
+
id: Schema.String,
|
|
32
|
+
body: Schema.String,
|
|
33
|
+
}),
|
|
34
|
+
},
|
|
35
|
+
optionalVoidArg: Schema.Void,
|
|
36
|
+
noArgs: Schema.Void,
|
|
37
|
+
transformArgs: Schema.Struct({
|
|
38
|
+
foo: Schema.NumberFromString,
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
const clientTransaction = ClientTransaction.make("TestClientTransaction", mockZeroSchema);
|
|
42
|
+
const mutators = Mutators.make(mutatorSchema, {
|
|
43
|
+
messages: {
|
|
44
|
+
create: (msg) => clientTransaction.use(async () => {
|
|
45
|
+
// Use msg to verify type
|
|
46
|
+
const _id = msg.id;
|
|
47
|
+
const _body = msg.body;
|
|
48
|
+
}),
|
|
49
|
+
},
|
|
50
|
+
optionalVoidArg: Effect.fn(function* (_a) { }),
|
|
51
|
+
noArgs: Effect.fn(function* () { }),
|
|
52
|
+
transformArgs: Effect.fn(function* (_a) { }),
|
|
53
|
+
});
|
|
54
|
+
// Test void/undefined optional parameter
|
|
55
|
+
expectTypeOf().toEqualTypeOf();
|
|
56
|
+
// Test no-arg mutator
|
|
57
|
+
expectTypeOf().toEqualTypeOf();
|
|
58
|
+
// Test nested mutator with struct schema
|
|
59
|
+
expectTypeOf().toEqualTypeOf();
|
|
60
|
+
// Test transformed args - mutator receives decoded (Type) version
|
|
61
|
+
expectTypeOf().toEqualTypeOf();
|
|
62
|
+
});
|
|
63
|
+
it("nested mutators using Effect.fn should have correct argument types", () => {
|
|
64
|
+
const mutatorSchema = Mutators.schema({
|
|
65
|
+
todo: {
|
|
66
|
+
create: Schema.Struct({
|
|
67
|
+
id: Schema.String,
|
|
68
|
+
title: Schema.String,
|
|
69
|
+
}),
|
|
70
|
+
toggle: Schema.Struct({
|
|
71
|
+
id: Schema.String,
|
|
72
|
+
done: Schema.Boolean,
|
|
73
|
+
}),
|
|
74
|
+
delete: Schema.Void,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
const clientTransaction = ClientTransaction.make("TestClientTransactionNested", mockZeroSchema);
|
|
78
|
+
// Note: When using Effect.fn with destructuring, TypeScript infers the parameter as `any`.
|
|
79
|
+
// The runtime still correctly validates/transforms args via the schema.
|
|
80
|
+
// To get proper type inference, use explicit parameter types or regular arrow functions.
|
|
81
|
+
const mutators = Mutators.make(mutatorSchema, {
|
|
82
|
+
todo: {
|
|
83
|
+
// Using arrow function with explicit type for best inference
|
|
84
|
+
create: (args) => clientTransaction.use(async () => {
|
|
85
|
+
const _id = args.id;
|
|
86
|
+
const _title = args.title;
|
|
87
|
+
}),
|
|
88
|
+
// Using Effect.fn with explicit type annotation
|
|
89
|
+
toggle: Effect.fn(function* (args) {
|
|
90
|
+
yield* clientTransaction.use(async () => { });
|
|
91
|
+
}),
|
|
92
|
+
// Using Effect.fn with no args (void schema)
|
|
93
|
+
delete: Effect.fn(function* () {
|
|
94
|
+
yield* clientTransaction.use(async () => { });
|
|
95
|
+
}),
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
// Test nested mutator with arrow function - preserves type
|
|
99
|
+
expectTypeOf().toEqualTypeOf();
|
|
100
|
+
// Test nested mutator with Effect.fn and explicit type annotation - preserves type
|
|
101
|
+
expectTypeOf().toEqualTypeOf();
|
|
102
|
+
// Test nested mutator with void schema - delete
|
|
103
|
+
expectTypeOf().toEqualTypeOf();
|
|
104
|
+
});
|
|
105
|
+
it("nested mutator requirements should propagate", () => {
|
|
106
|
+
class NestedDummyTag extends Effect.Service()("effect-zero/test/NestedDummyTag", {
|
|
107
|
+
succeed: {},
|
|
108
|
+
}) {
|
|
109
|
+
}
|
|
110
|
+
class NestedDummyTag2 extends Effect.Service()("effect-zero/test/NestedDummyTag2", {
|
|
111
|
+
succeed: {},
|
|
112
|
+
}) {
|
|
113
|
+
}
|
|
114
|
+
const clientTransaction = ClientTransaction.make("TestClientTransactionNestedReq", mockZeroSchema);
|
|
115
|
+
const serverTransaction = ServerTransaction.make("TestServerTransactionNestedReq", mockDatabase, clientTransaction);
|
|
116
|
+
const mutatorSchema = Mutators.schema({
|
|
117
|
+
nested: {
|
|
118
|
+
withTag1: Schema.Void,
|
|
119
|
+
withTag2: Schema.Void,
|
|
120
|
+
noTags: Schema.Void,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
const mutators = Mutators.make(mutatorSchema, {
|
|
124
|
+
nested: {
|
|
125
|
+
withTag1: Effect.fn(function* () {
|
|
126
|
+
yield* NestedDummyTag;
|
|
127
|
+
}),
|
|
128
|
+
withTag2: Effect.fn(function* () {
|
|
129
|
+
yield* NestedDummyTag2;
|
|
130
|
+
}),
|
|
131
|
+
noTags: Effect.fn(function* () { }),
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
const serverEffect = Server.processPush(serverTransaction, mutators, {}, {});
|
|
135
|
+
// Server effect should require both NestedDummyTag and NestedDummyTag2
|
|
136
|
+
expectTypeOf().toEqualTypeOf();
|
|
137
|
+
});
|
|
138
|
+
it("mutator requirements should propagate", () => {
|
|
139
|
+
class DummyTag extends Effect.Service()("effect-zero/test/DummyTag", {
|
|
140
|
+
succeed: {},
|
|
141
|
+
}) {
|
|
142
|
+
}
|
|
143
|
+
class DummyTag2 extends Effect.Service()("effect-zero/test/DummyTag2", {
|
|
144
|
+
succeed: {},
|
|
145
|
+
}) {
|
|
146
|
+
}
|
|
147
|
+
const clientTransaction = ClientTransaction.make("TestClientTransaction2", mockZeroSchema);
|
|
148
|
+
const serverTransaction = ServerTransaction.make("TestServerTransaction", mockDatabase, clientTransaction);
|
|
149
|
+
const mutatorSchema = Mutators.schema({
|
|
150
|
+
dummy: Schema.Void,
|
|
151
|
+
dummy2: Schema.Void,
|
|
152
|
+
});
|
|
153
|
+
const mutators = Mutators.make(mutatorSchema, {
|
|
154
|
+
dummy: Effect.fn(function* () {
|
|
155
|
+
yield* DummyTag;
|
|
156
|
+
}),
|
|
157
|
+
dummy2: Effect.fn(function* () {
|
|
158
|
+
yield* DummyTag2;
|
|
159
|
+
}),
|
|
160
|
+
});
|
|
161
|
+
const serverEffect = Server.processPush(serverTransaction, mutators, {}, {});
|
|
162
|
+
// Server effect should require both DummyTag and DummyTag2
|
|
163
|
+
expectTypeOf().toEqualTypeOf();
|
|
164
|
+
});
|
|
165
|
+
it("processPush has no extra requirements when mutators have none", () => {
|
|
166
|
+
const clientTransaction = ClientTransaction.make("TestClientTransaction3", mockZeroSchema);
|
|
167
|
+
const serverTransaction = ServerTransaction.make("TestServerTransaction2", mockDatabase, clientTransaction);
|
|
168
|
+
const mutatorSchema = Mutators.schema({
|
|
169
|
+
simple: Schema.Void,
|
|
170
|
+
});
|
|
171
|
+
const mutators = Mutators.make(mutatorSchema, {
|
|
172
|
+
simple: Effect.fn(function* () { }),
|
|
173
|
+
});
|
|
174
|
+
const effect = Server.processPush(serverTransaction, mutators, {}, {});
|
|
175
|
+
expectTypeOf().toEqualTypeOf();
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe("Query", () => {
|
|
179
|
+
// biome-ignore lint/suspicious/noExplicitAny: allowed in tests
|
|
180
|
+
const makeMockQuery = () => {
|
|
181
|
+
const mockQuery = {
|
|
182
|
+
[queryInternalsTag]: true,
|
|
183
|
+
format: { singular: false },
|
|
184
|
+
nameAndArgs: () => mockQuery,
|
|
185
|
+
};
|
|
186
|
+
return mockQuery;
|
|
187
|
+
};
|
|
188
|
+
it("query should accept and passthrough encoded non-JSON args", () => {
|
|
189
|
+
const transformArgsQuery = Query.make({
|
|
190
|
+
name: "transformArgs",
|
|
191
|
+
payload: Schema.DateFromNumber,
|
|
192
|
+
query: Effect.fn(function* (a) {
|
|
193
|
+
// Inside the query, 'a' should be the decoded type (Date)
|
|
194
|
+
expectTypeOf().toEqualTypeOf();
|
|
195
|
+
return yield* Effect.succeed(makeMockQuery());
|
|
196
|
+
}),
|
|
197
|
+
});
|
|
198
|
+
// Query function should accept decoded type (Date)
|
|
199
|
+
expectTypeOf().toEqualTypeOf();
|
|
200
|
+
});
|
|
201
|
+
it("query with string tuple should have correct parameter types", () => {
|
|
202
|
+
const stringQuery = Query.make({
|
|
203
|
+
name: "stringQuery",
|
|
204
|
+
payload: Schema.String,
|
|
205
|
+
query: Effect.fn(function* (s) {
|
|
206
|
+
expectTypeOf().toEqualTypeOf();
|
|
207
|
+
return yield* Effect.succeed(makeMockQuery());
|
|
208
|
+
}),
|
|
209
|
+
});
|
|
210
|
+
expectTypeOf().toEqualTypeOf();
|
|
211
|
+
});
|
|
212
|
+
// Queries were changed to only support a single argument in 0.25
|
|
213
|
+
//
|
|
214
|
+
// it("query with multiple args should have correct parameter types", () => {
|
|
215
|
+
// const multiArgQuery = Query.make({
|
|
216
|
+
// name: "multiArgQuery",
|
|
217
|
+
// payload: Schema.Tuple(Schema.String, Schema.Number),
|
|
218
|
+
// query: Effect.fn(function* (s, n) {
|
|
219
|
+
// expectTypeOf<typeof s>().toEqualTypeOf<string>();
|
|
220
|
+
// expectTypeOf<typeof n>().toEqualTypeOf<number>();
|
|
221
|
+
// return yield* Effect.succeed(makeMockQuery());
|
|
222
|
+
// }),
|
|
223
|
+
// });
|
|
224
|
+
// expectTypeOf<Parameters<typeof multiArgQuery>>().toEqualTypeOf<[string, number]>();
|
|
225
|
+
// });
|
|
226
|
+
it("query with no args should have empty parameter types", () => {
|
|
227
|
+
const noArgQuery = Query.make({
|
|
228
|
+
name: "noArgQuery",
|
|
229
|
+
payload: Schema.Void,
|
|
230
|
+
query: Effect.fn(function* () {
|
|
231
|
+
return yield* Effect.succeed(makeMockQuery());
|
|
232
|
+
}),
|
|
233
|
+
});
|
|
234
|
+
// biome-ignore lint/suspicious/noConfusingVoidType: Necessary for type check
|
|
235
|
+
expectTypeOf().toEqualTypeOf();
|
|
236
|
+
});
|
|
237
|
+
it("query with complex struct arg should have correct parameter types", () => {
|
|
238
|
+
const complexQuery = Query.make({
|
|
239
|
+
name: "complexQuery",
|
|
240
|
+
payload: Schema.Struct({
|
|
241
|
+
id: Schema.String,
|
|
242
|
+
nested: Schema.Struct({ value: Schema.Number }),
|
|
243
|
+
}),
|
|
244
|
+
query: Effect.fn(function* (arg) {
|
|
245
|
+
expectTypeOf().toEqualTypeOf();
|
|
246
|
+
return yield* Effect.succeed(makeMockQuery());
|
|
247
|
+
}),
|
|
248
|
+
});
|
|
249
|
+
expectTypeOf().toEqualTypeOf();
|
|
250
|
+
});
|
|
251
|
+
it("MakeQueryResult should be satisfied by query results", () => {
|
|
252
|
+
const query1 = Query.make({
|
|
253
|
+
name: "q1",
|
|
254
|
+
payload: Schema.Tuple(Schema.String),
|
|
255
|
+
query: () => Effect.succeed(makeMockQuery()),
|
|
256
|
+
});
|
|
257
|
+
const query2 = Query.make({
|
|
258
|
+
name: "q2",
|
|
259
|
+
payload: Schema.Tuple(),
|
|
260
|
+
query: () => Effect.succeed(makeMockQuery()),
|
|
261
|
+
});
|
|
262
|
+
// This should compile without error
|
|
263
|
+
const queries = [query1, query2];
|
|
264
|
+
expectTypeOf(queries).toExtend();
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
//# sourceMappingURL=types.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../src/types.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect-zero",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "https://github.com/realms-labs/effect-zero"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"@effect-atom/atom": "^0.4.3",
|
|
20
20
|
"@effect/language-service": "^0.55.2",
|
|
21
21
|
"@effect/vitest": "^0.27.0",
|
|
22
|
-
"@rocicorp/zero": "^0.
|
|
22
|
+
"@rocicorp/zero": "^0.26.1",
|
|
23
23
|
"@types/bun": "latest",
|
|
24
24
|
"@types/fs-extra": "^11.0.4",
|
|
25
25
|
"effect": "^3.19.3",
|
|
@@ -40,22 +40,16 @@
|
|
|
40
40
|
"default": "./dist/server.js"
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
|
-
"./
|
|
44
|
-
"import": {
|
|
45
|
-
"types": "./dist/result.d.ts",
|
|
46
|
-
"default": "./dist/result.js"
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
"./server-transaction": {
|
|
43
|
+
"./query": {
|
|
50
44
|
"import": {
|
|
51
|
-
"types": "./dist/
|
|
52
|
-
"default": "./dist/
|
|
45
|
+
"types": "./dist/query.d.ts",
|
|
46
|
+
"default": "./dist/query.js"
|
|
53
47
|
}
|
|
54
48
|
},
|
|
55
|
-
"./
|
|
49
|
+
"./mutators": {
|
|
56
50
|
"import": {
|
|
57
|
-
"types": "./dist/
|
|
58
|
-
"default": "./dist/
|
|
51
|
+
"types": "./dist/mutators.d.ts",
|
|
52
|
+
"default": "./dist/mutators.js"
|
|
59
53
|
}
|
|
60
54
|
},
|
|
61
55
|
"./snapshot": {
|
|
@@ -64,28 +58,28 @@
|
|
|
64
58
|
"default": "./dist/snapshot.js"
|
|
65
59
|
}
|
|
66
60
|
},
|
|
67
|
-
"./
|
|
61
|
+
"./client-transaction": {
|
|
68
62
|
"import": {
|
|
69
|
-
"types": "./dist/
|
|
70
|
-
"default": "./dist/
|
|
63
|
+
"types": "./dist/client-transaction.d.ts",
|
|
64
|
+
"default": "./dist/client-transaction.js"
|
|
71
65
|
}
|
|
72
66
|
},
|
|
73
|
-
"./
|
|
67
|
+
"./server-transaction": {
|
|
74
68
|
"import": {
|
|
75
|
-
"types": "./dist/
|
|
76
|
-
"default": "./dist/
|
|
69
|
+
"types": "./dist/server-transaction.d.ts",
|
|
70
|
+
"default": "./dist/server-transaction.js"
|
|
77
71
|
}
|
|
78
72
|
},
|
|
79
|
-
"./
|
|
73
|
+
"./result": {
|
|
80
74
|
"import": {
|
|
81
|
-
"types": "./dist/
|
|
82
|
-
"default": "./dist/
|
|
75
|
+
"types": "./dist/result.d.ts",
|
|
76
|
+
"default": "./dist/result.js"
|
|
83
77
|
}
|
|
84
78
|
},
|
|
85
|
-
"./
|
|
79
|
+
"./client": {
|
|
86
80
|
"import": {
|
|
87
|
-
"types": "./dist/
|
|
88
|
-
"default": "./dist/
|
|
81
|
+
"types": "./dist/client.d.ts",
|
|
82
|
+
"default": "./dist/client.js"
|
|
89
83
|
}
|
|
90
84
|
},
|
|
91
85
|
"./types/push": {
|
|
@@ -99,6 +93,12 @@
|
|
|
99
93
|
"types": "./dist/types/queries.d.ts",
|
|
100
94
|
"default": "./dist/types/queries.js"
|
|
101
95
|
}
|
|
96
|
+
},
|
|
97
|
+
"./types/common": {
|
|
98
|
+
"import": {
|
|
99
|
+
"types": "./dist/types/common.d.ts",
|
|
100
|
+
"default": "./dist/types/common.js"
|
|
101
|
+
}
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
}
|
package/src/client.ts
CHANGED
|
@@ -20,7 +20,7 @@ type ClientTransactionContext<TSchema extends ZeroSchema> = Omit<
|
|
|
20
20
|
export const make = Effect.fn(function* <TSchema extends ZeroSchema, TMutators extends Mutators.AnyMutators>(
|
|
21
21
|
transaction: ClientTransactionContext<TSchema>,
|
|
22
22
|
mutators: TMutators,
|
|
23
|
-
options: Omit<ZeroOptions<TSchema
|
|
23
|
+
options: Omit<ZeroOptions<TSchema, UnwrapMutators<TSchema, TMutators>>, "schema" | "mutators">,
|
|
24
24
|
) {
|
|
25
25
|
const runtime =
|
|
26
26
|
yield* Effect.runtime<
|
|
@@ -28,7 +28,7 @@ export const make = Effect.fn(function* <TSchema extends ZeroSchema, TMutators e
|
|
|
28
28
|
>();
|
|
29
29
|
|
|
30
30
|
function unwrapMutator<E>(mutator: Mutators.AnyMutator<Mutators.ExtractMutatorsRequirements<TMutators>, E>) {
|
|
31
|
-
return async (tx: ZeroTransaction<TSchema>, args: unknown) => {
|
|
31
|
+
return async (tx: ZeroTransaction<TSchema>, args: unknown, _ctx: unknown) => {
|
|
32
32
|
const exit = await Schema.decode(mutator[Mutators.MutatorSchemaSymbol])(args).pipe(
|
|
33
33
|
Effect.catchTag("ParseError", (e) => new ClientArgsParseError({ cause: Cause.fail(e) })),
|
|
34
34
|
Effect.flatMap(mutator),
|
|
@@ -44,7 +44,7 @@ export const make = Effect.fn(function* <TSchema extends ZeroSchema, TMutators e
|
|
|
44
44
|
|
|
45
45
|
const unwrappedMutators = Rec.map(mutators, (v) =>
|
|
46
46
|
Match.value(v).pipe(Match.when(Predicate.isFunction, unwrapMutator), Match.orElse(Rec.map(unwrapMutator))),
|
|
47
|
-
) as UnwrapMutators<TSchema, TMutators
|
|
47
|
+
) as ZeroOptions<TSchema, UnwrapMutators<TSchema, TMutators>>["mutators"];
|
|
48
48
|
|
|
49
49
|
return yield* Effect.acquireRelease(
|
|
50
50
|
Effect.sync(() => {
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
QueryResult as ZeroQueryResult,
|
|
4
|
-
QueryResultDetails as ZeroQueryResultDetails,
|
|
5
|
-
} from "@rocicorp/zero/react";
|
|
1
|
+
import type { HumanReadable, QueryResultDetails as ZeroQueryResultDetails } from "@rocicorp/zero";
|
|
2
|
+
import type { QueryResult as ZeroQueryResult } from "@rocicorp/zero/react";
|
|
6
3
|
import * as Match from "effect/Match";
|
|
7
4
|
|
|
8
5
|
// Our internal representation of Zero's QueryResult type.
|
package/src/query.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { HumanReadable, ReadonlyJSONValue, Zero, Query as ZeroQuery, Schema as ZeroSchema } from "@rocicorp/zero";
|
|
2
|
+
import { asQueryInternals } from "@rocicorp/zero/bindings";
|
|
2
3
|
import * as Effect from "effect/Effect";
|
|
3
4
|
import * as Equal from "effect/Equal";
|
|
4
5
|
import * as Hash from "effect/Hash";
|
|
@@ -10,15 +11,8 @@ import * as QueryResult from "./internal/query-result.js";
|
|
|
10
11
|
import { prefixId } from "./internal/utils.js";
|
|
11
12
|
import { deepClone, getDefaultSnapshot, getSnapshot } from "./snapshot.js";
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
type QueryArgs<
|
|
16
|
-
A extends ReadonlyJSONValue[],
|
|
17
|
-
B extends unknown[],
|
|
18
|
-
> = // biome-ignore lint/suspicious/noExplicitAny: handles "any query" case
|
|
19
|
-
| { _tag: "Encoded"; args: any extends A ? any : readonly [...A] }
|
|
20
|
-
// biome-ignore lint/suspicious/noExplicitAny: handles "any query" case
|
|
21
|
-
| { _tag: "Decoded"; args: any extends B ? any : readonly [...B] };
|
|
14
|
+
// biome-ignore lint/suspicious/noConfusingVoidType: necessary to allow Schema.Void
|
|
15
|
+
type QueryArgs<A extends ReadonlyJSONValue | void, B> = { _tag: "Encoded"; args: A } | { _tag: "Decoded"; args: B };
|
|
22
16
|
|
|
23
17
|
export const RunQuerySymbol = Symbol.for(prefixId("RunQuery"));
|
|
24
18
|
export const QueryNameSymbol = Symbol.for(prefixId("QueryName"));
|
|
@@ -26,19 +20,20 @@ export const QueryNameSymbol = Symbol.for(prefixId("QueryName"));
|
|
|
26
20
|
export const make = <
|
|
27
21
|
N extends string,
|
|
28
22
|
// The encoded format that is sent over the wire, must conform to JSON
|
|
29
|
-
|
|
23
|
+
// biome-ignore lint/suspicious/noConfusingVoidType: necessary to allow Schema.Void
|
|
24
|
+
A extends ReadonlyJSONValue | void,
|
|
30
25
|
// The decoded format, can be anything
|
|
31
|
-
B
|
|
32
|
-
S extends ZeroSchema,
|
|
26
|
+
B,
|
|
33
27
|
T extends keyof S["tables"] & string,
|
|
28
|
+
S extends ZeroSchema,
|
|
34
29
|
R,
|
|
35
30
|
E,
|
|
36
31
|
R1,
|
|
37
32
|
R2,
|
|
38
33
|
>(options: {
|
|
39
34
|
name: N;
|
|
40
|
-
payload: Schema.Schema<
|
|
41
|
-
query: (
|
|
35
|
+
payload: Schema.Schema<B, A, R1>;
|
|
36
|
+
query: (args: NoInfer<B>) => Effect.Effect<ZeroQuery<T, S, R>, E, R2>;
|
|
42
37
|
}) => {
|
|
43
38
|
const runQuery = Effect.fn(function* (args: QueryArgs<A, B>) {
|
|
44
39
|
const { encoded, decoded } = yield* Match.valueTags(args, {
|
|
@@ -48,17 +43,16 @@ export const make = <
|
|
|
48
43
|
Effect.map(Schema.encode(options.payload)(decoded), (encoded) => ({ encoded, decoded })),
|
|
49
44
|
});
|
|
50
45
|
|
|
51
|
-
return yield* options.query(
|
|
46
|
+
return yield* options.query(decoded).pipe(
|
|
52
47
|
Effect.map((rawQuery) => {
|
|
53
|
-
const query = rawQuery.nameAndArgs(
|
|
48
|
+
const query = asQueryInternals(rawQuery).nameAndArgs(
|
|
54
49
|
options.name,
|
|
55
50
|
// We pass the encoded `args` to the `nameAndArgs` method, as that is the wire format which
|
|
56
51
|
// is sent to the server.
|
|
57
|
-
encoded,
|
|
58
|
-
) as
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
};
|
|
52
|
+
encoded !== undefined ? [encoded] : [],
|
|
53
|
+
) as ZeroQuery<T, S, R> & Equal.Equal;
|
|
54
|
+
// Adapted from https://github.com/rocicorp/mono/blob/17171f975e61f7ec93c61569da7bda1d962ac962/packages/zero-protocol/src/query-hash.ts#L17
|
|
55
|
+
query[Hash.symbol] = () => Hash.string(`${options.name}:${JSON.stringify(encoded)}`);
|
|
62
56
|
query[Equal.symbol] = function (that) {
|
|
63
57
|
if (Hash.isHash(that)) {
|
|
64
58
|
return Equal.equals(this[Hash.symbol](), that[Hash.symbol]());
|
|
@@ -71,7 +65,7 @@ export const make = <
|
|
|
71
65
|
});
|
|
72
66
|
|
|
73
67
|
// We return a callable object for ease of use on the frontend.
|
|
74
|
-
return Object.assign((
|
|
68
|
+
return Object.assign((args: B) => runQuery({ _tag: "Decoded", args }), {
|
|
75
69
|
[QueryNameSymbol]: options.name,
|
|
76
70
|
// Internally, we include the full `runQuery` function for use in library's server logic.
|
|
77
71
|
[RunQuerySymbol]: runQuery,
|
|
@@ -81,13 +75,12 @@ export const make = <
|
|
|
81
75
|
// biome-ignore lint/suspicious/noExplicitAny: accept any query
|
|
82
76
|
export type MakeQueryResult<E = any, R1 = any, R2 = any> = ReturnType<
|
|
83
77
|
// biome-ignore lint/suspicious/noExplicitAny: accept any query
|
|
84
|
-
typeof make<string, any, any,
|
|
78
|
+
typeof make<string, any, any, string, ZeroSchema, Record<string, any> | undefined, E, R1, R2>
|
|
85
79
|
>;
|
|
86
80
|
|
|
87
|
-
export const stream = <
|
|
81
|
+
export const stream = <T extends keyof S["tables"] & string, S extends ZeroSchema, R>(
|
|
88
82
|
zero: Zero<S>,
|
|
89
|
-
|
|
90
|
-
query: ZeroQuery<S, T, R> | Query<S, T, R>,
|
|
83
|
+
query: ZeroQuery<T, S, R>,
|
|
91
84
|
) =>
|
|
92
85
|
Effect.gen(function* () {
|
|
93
86
|
const view = yield* Effect.acquireRelease(
|
|
@@ -101,25 +94,24 @@ export const stream = <S extends ZeroSchema, T extends keyof S["tables"] & strin
|
|
|
101
94
|
Stream.mapEffect(([data, resultType]) =>
|
|
102
95
|
Effect.sync(() => {
|
|
103
96
|
// logic here borrowed from: https://github.com/rocicorp/mono/blob/288b00ec94f5a9ae6e988513423af25c281dbb2a/packages/zero-react/src/use-query.tsx#L295
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return getSnapshot<R>(query.format.singular, cloned, resultType);
|
|
97
|
+
const cloned = data === undefined ? data : (deepClone(data as ReadonlyJSONValue) as HumanReadable<R>);
|
|
98
|
+
return getSnapshot<R>(asQueryInternals(query).format.singular, cloned, resultType);
|
|
107
99
|
}),
|
|
108
100
|
),
|
|
109
101
|
Stream.map(QueryResult.make),
|
|
110
102
|
);
|
|
111
103
|
}).pipe(Stream.unwrapScoped);
|
|
112
104
|
|
|
113
|
-
export const initialValue = <
|
|
114
|
-
query: ZeroQuery<
|
|
115
|
-
) => QueryResult.make<R>(getDefaultSnapshot(query.format.singular));
|
|
105
|
+
export const initialValue = <T extends keyof S["tables"] & string, S extends ZeroSchema, R>(
|
|
106
|
+
query: ZeroQuery<T, S, R>,
|
|
107
|
+
) => QueryResult.make<R>(getDefaultSnapshot(asQueryInternals(query).format.singular));
|
|
116
108
|
|
|
117
|
-
export const subscribable = <
|
|
109
|
+
export const subscribable = <T extends keyof S["tables"] & string, S extends ZeroSchema, R>(
|
|
118
110
|
zero: Zero<S>,
|
|
119
|
-
query: ZeroQuery<
|
|
111
|
+
query: ZeroQuery<T, S, R>,
|
|
120
112
|
) => {
|
|
121
113
|
return Subscribable.make({
|
|
122
|
-
get: Effect.promise(() => zero.run(query
|
|
114
|
+
get: Effect.promise(() => zero.run(query, { type: "unknown" })).pipe(
|
|
123
115
|
Effect.map((value) => ({ _tag: "Partial", value }) satisfies QueryResult.QueryResult.Partial<R>),
|
|
124
116
|
),
|
|
125
117
|
changes: stream(zero, query),
|
package/src/result.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Result as AtomResult } from "@effect-atom/atom";
|
|
2
|
-
import type { HumanReadable } from "@rocicorp/zero
|
|
2
|
+
import type { HumanReadable } from "@rocicorp/zero";
|
|
3
3
|
import * as Cause from "effect/Cause";
|
|
4
4
|
import * as Data from "effect/Data";
|
|
5
5
|
import * as Fn from "effect/Function";
|