effect-zero 0.3.3 → 0.4.1
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 +15 -13
- package/dist/query.js.map +1 -1
- package/dist/query.test.js +4 -2
- package/dist/query.test.js.map +1 -1
- package/dist/result.d.ts +1 -1
- package/dist/result.d.ts.map +1 -1
- package/dist/server.d.ts +35 -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 +3 -3
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +66 -8
- package/dist/snapshot.js.map +1 -1
- package/dist/types/error.d.ts +59 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +58 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/push.d.ts +53 -1
- package/dist/types/push.d.ts.map +1 -1
- package/dist/types/push.js +63 -10
- package/dist/types/push.js.map +1 -1
- package/dist/types/queries.d.ts +28 -9
- package/dist/types/queries.d.ts.map +1 -1
- package/dist/types/queries.js +14 -15
- package/dist/types/queries.js.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 +32 -26
- package/src/client.ts +3 -3
- package/src/internal/query-result.ts +2 -5
- package/src/query.ts +36 -34
- package/src/result.ts +1 -1
- package/src/server.ts +16 -14
- package/src/snapshot.ts +71 -12
- package/src/types/error.ts +71 -0
- package/src/types/push.ts +69 -10
- package/src/types/queries.ts +16 -16
package/README.md
CHANGED
|
@@ -41,6 +41,7 @@ export const mutatorSchema = Mutators.schema({
|
|
|
41
41
|
import { zeroPostgresJS } from "@rocicorp/zero/server/adapters/postgresjs";
|
|
42
42
|
import { PushResponse, PushParams, PushBody } from "effect-zero/types/push";
|
|
43
43
|
import * as ServerTransaction from "effect-zero/server-transaction";
|
|
44
|
+
import * as Mutators from "effect-zero/mutators";
|
|
44
45
|
import * as Server from "effect-zero/server";
|
|
45
46
|
import * as Schema from "effect/Schema";
|
|
46
47
|
import * as Effect from "effect/Effect";
|
|
@@ -77,7 +78,7 @@ export const serverMutators = Mutators.make(mutatorSchema, {
|
|
|
77
78
|
// before the transaction
|
|
78
79
|
yield* Effect.log("before the transaction");
|
|
79
80
|
|
|
80
|
-
Effect.gen(function* () {
|
|
81
|
+
yield* Effect.gen(function* () {
|
|
81
82
|
// during the transaction
|
|
82
83
|
yield* Effect.log("during the transaction");
|
|
83
84
|
yield* serverTransaction.use((tx) => tx.mutate.TodoTable.insert({ id, title, createdAt: Date.now() }));
|
|
@@ -116,14 +117,15 @@ export async function handleZeroPush(req: Request): Promise<Response> {
|
|
|
116
117
|
|
|
117
118
|
```ts
|
|
118
119
|
// client.ts
|
|
119
|
-
import
|
|
120
|
+
import * as Client from "effect-zero/client";
|
|
120
121
|
import * as ClientTransaction from "effect-zero/client-transaction";
|
|
122
|
+
import * as Mutators from "effect-zero/mutators";
|
|
121
123
|
import * as Effect from "effect/Effect";
|
|
122
124
|
import { schema } from "./schema"; // your schema
|
|
123
|
-
import { mutatorSchema } from "./mutators"; // see
|
|
125
|
+
import { mutatorSchema } from "./mutators"; // see above
|
|
124
126
|
|
|
125
127
|
// The "client-side" transaction
|
|
126
|
-
const clientTransaction = ClientTransaction.make("ClientTransaction", schema);
|
|
128
|
+
export const clientTransaction = ClientTransaction.make("ClientTransaction", schema);
|
|
127
129
|
|
|
128
130
|
export const clientMutators = Mutators.make(mutatorSchema, {
|
|
129
131
|
todo: {
|
|
@@ -137,12 +139,14 @@ export const clientMutators = Mutators.make(mutatorSchema, {
|
|
|
137
139
|
});
|
|
138
140
|
|
|
139
141
|
// Helper to create a vanilla Zero client instance for querying and mutating
|
|
140
|
-
export const createZero = Effect.fn(function* (opts: { userID: string; auth?: string; server: string }) {
|
|
142
|
+
export const createZero = Effect.fn(function* (opts: { userID: string; auth?: string; server: string; mutateURL: string }) {
|
|
141
143
|
// `Client.make` returns an Effect containing a Zero client instance
|
|
144
|
+
// Note: this is a scoped effect, so it must be run within a scope (e.g., Effect.scoped)
|
|
142
145
|
return yield* Client.make(clientTransaction, clientMutators, {
|
|
143
146
|
userID: opts.userID,
|
|
144
147
|
auth: opts.auth,
|
|
145
|
-
server: opts.server, // your
|
|
148
|
+
server: opts.server, // your zero-cache server URL
|
|
149
|
+
mutateURL: opts.mutateURL, // your push endpoint URL
|
|
146
150
|
kvStore: "idb", // or "mem" for in-memory
|
|
147
151
|
// "mutators" and "schema" are inferred from other arguments, so we don't need to pass them here
|
|
148
152
|
});
|
|
@@ -157,12 +161,14 @@ export const createZero = Effect.fn(function* (opts: { userID: string; auth?: st
|
|
|
157
161
|
|
|
158
162
|
import { createBuilder } from "@rocicorp/zero";
|
|
159
163
|
import * as Query from "effect-zero/query";
|
|
164
|
+
import * as Effect from "effect/Effect";
|
|
165
|
+
import * as Schema from "effect/Schema";
|
|
160
166
|
import { schema } from "./schema"; // your schema
|
|
161
167
|
|
|
162
168
|
const builder = createBuilder(schema);
|
|
163
169
|
|
|
164
170
|
export const getTodoByIdQuery = Query.make({
|
|
165
|
-
name: "
|
|
171
|
+
name: "getTodoById",
|
|
166
172
|
payload: Schema.Tuple(Schema.String),
|
|
167
173
|
query: Effect.fn(function* (id) {
|
|
168
174
|
return yield* Effect.succeed(builder.todos.where("id", id).one());
|
|
@@ -184,11 +190,12 @@ import { TransformRequestMessage } from "effect-zero/types/queries";
|
|
|
184
190
|
import * as Effect from "effect/Effect";
|
|
185
191
|
import * as Schema from "effect/Schema";
|
|
186
192
|
import { queries } from "./queries";
|
|
193
|
+
import { schema } from "./schema"; // your schema
|
|
187
194
|
|
|
188
195
|
// See `handleZeroPush` notes
|
|
189
|
-
export async function
|
|
196
|
+
export async function handleZeroQueryRequest(req: Request): Promise<Response> {
|
|
190
197
|
const payload = Schema.decodeSync(TransformRequestMessage)(await req.json());
|
|
191
|
-
const result = await Effect.runPromise(Server.
|
|
198
|
+
const result = await Effect.runPromise(Server.handleQuery(queries, schema, payload));
|
|
192
199
|
return new Response(JSON.stringify(result), { status: 200, headers: { "content-type": "application/json" } });
|
|
193
200
|
}
|
|
194
201
|
```
|
|
@@ -201,18 +208,18 @@ export async function handleZeroGetQueries(req: Request): Promise<Response> {
|
|
|
201
208
|
import * as Effect from 'effect/Effect';
|
|
202
209
|
import * as Query from "effect-zero/query";
|
|
203
210
|
import { getTodoByIdQuery } from "./queries";
|
|
211
|
+
import { createZero } from "./client"; // see "Custom mutators" -> "Client setup"
|
|
204
212
|
|
|
205
213
|
const getTodoById = Effect.fn(function* (id: string) {
|
|
206
214
|
// Create the query instance
|
|
207
215
|
const query = yield* getTodoByIdQuery(id);
|
|
208
216
|
|
|
209
|
-
|
|
210
|
-
const zero = yield* createZero({ ... });
|
|
217
|
+
const zero = yield* createZero({ userID: "anon", server: "http://localhost:4848" });
|
|
211
218
|
|
|
212
|
-
// `Query.
|
|
219
|
+
// `Query.stream` creates an Effect's Stream from a query
|
|
213
220
|
const stream = Query.stream(zero, query);
|
|
214
221
|
|
|
215
|
-
// `Query.
|
|
222
|
+
// `Query.subscribable` creates an Effect's Subscribable from a query
|
|
216
223
|
const sub = Query.subscribable(zero, query);
|
|
217
224
|
|
|
218
225
|
// You can also use the query with the Zero client as usual
|
|
@@ -236,11 +243,11 @@ import { zeroAtom } from "./zero"; // you can create zeroAtom using `createZero`
|
|
|
236
243
|
type Schema = typeof schema;
|
|
237
244
|
|
|
238
245
|
export const queryAtom = Atom.family(
|
|
239
|
-
<T extends keyof Schema["tables"] & string, R>(query: Query.Query<
|
|
246
|
+
<T extends keyof Schema["tables"] & string, R>(query: Query.Query<T, Schema, R>) => {
|
|
240
247
|
return Atom.subscribable(
|
|
241
248
|
Effect.fn(function* (get) {
|
|
242
249
|
const zero = yield* get.result(zeroAtom);
|
|
243
|
-
return Query.subscribable(zero, query).pipe(Subscribable.map(({
|
|
250
|
+
return Query.subscribable(zero, query).pipe(Subscribable.map(({ value }) => value));
|
|
244
251
|
}),
|
|
245
252
|
);
|
|
246
253
|
},
|
|
@@ -269,4 +276,4 @@ One key difference is that `effect-zero` requires you to manually wrap your DB-r
|
|
|
269
276
|
3. "Two or more transactions" -> This is a sub-case of the "One transaction then fail (#2)" scenario; the first transaction will succeed (and thus we must return a successful response from the push endpoint), and the second one will fail. We must be careful of performing multiple transactions in the mutator for this reason.
|
|
270
277
|
4. "Zero transactions then succeed" -> error response, because all mutations must have a transaction.
|
|
271
278
|
5. "Zero transactions then fail" -> error response containing the first error encountered.
|
|
272
|
-
6. "Fail before transaction" -> same as #5.
|
|
279
|
+
6. "Fail before transaction" -> same as #5.
|
package/dist/client.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import * as Schema from "effect/Schema";
|
|
|
6
6
|
import type * as ClientTransaction from "./client-transaction.js";
|
|
7
7
|
import * as Mutators from "./mutators.js";
|
|
8
8
|
type ClientTransactionContext<TSchema extends ZeroSchema> = Omit<ReturnType<typeof ClientTransaction.make<string, TSchema>>, "use">;
|
|
9
|
-
export declare const make: <TSchema extends ZeroSchema, TMutators extends Mutators.AnyMutators>(transaction: ClientTransactionContext<TSchema>, mutators: TMutators, options: Omit<ZeroOptions<TSchema,
|
|
9
|
+
export declare const make: <TSchema extends ZeroSchema, TMutators extends Mutators.AnyMutators>(transaction: ClientTransactionContext<TSchema>, mutators: TMutators, options: Omit<ZeroOptions<TSchema, { [A in keyof TMutators]: TMutators[A] extends Mutators.AnyMutator<any, any> ? UnwrapMutator<TSchema, TMutators[A]> : { [B in keyof TMutators[A]]: TMutators[A][B] extends Mutators.AnyMutator<any, any> ? UnwrapMutator<TSchema, TMutators[A][B]> : never; }; }>, "schema" | "mutators">) => Effect.Effect<Zero<TSchema, { [A in keyof TMutators]: TMutators[A] extends Mutators.AnyMutator<any, any> ? UnwrapMutator<TSchema, TMutators[A]> : { [B in keyof TMutators[A]]: TMutators[A][B] extends Mutators.AnyMutator<any, any> ? UnwrapMutator<TSchema, TMutators[A][B]> : never; }; }, unknown>, never, import("effect/Scope").Scope | Exclude<Mutators.ExtractMutatorsRequirements<TMutators>, ClientTransaction.ClientTransaction>>;
|
|
10
10
|
type UnwrapMutator<TSchema extends ZeroSchema, TMutators extends Mutators.AnyMutator> = Parameters<TMutators> extends [] ? (transaction: ZeroTransaction<TSchema>) => Promise<void> : (transaction: ZeroTransaction<TSchema>, args: Schema.Schema.Encoded<TMutators[typeof Mutators.MutatorSchemaSymbol]>) => Promise<void>;
|
|
11
11
|
declare const ClientArgsParseError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Cause.YieldableError & {
|
|
12
12
|
readonly _tag: "ClientArgsParseError";
|
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,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;AAGxC,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAIvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,KAAK,wBAAwB,CAAC,OAAO,SAAS,UAAU,IAAI,IAAI,CAC9D,UAAU,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC1D,KAAK,CACN,CAAC;AAEF,eAAO,MAAM,IAAI,GAAwB,OAAO,SAAS,UAAU,EAAE,SAAS,SAAS,QAAQ,CAAC,WAAW,
|
|
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;AAGxC,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAIvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,KAAK,wBAAwB,CAAC,OAAO,SAAS,UAAU,IAAI,IAAI,CAC9D,UAAU,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC1D,KAAK,CACN,CAAC;AAEF,eAAO,MAAM,IAAI,GAAwB,OAAO,SAAS,UAAU,EAAE,SAAS,SAAS,QAAQ,CAAC,WAAW,6GAiDxG,CAAC,qHAGK,CAAC,mMAHP,CAAC,qHAGK,CAAC,sRAbR,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,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,QAAQ,CAAC,mBAAmB,CAAC,CAAC,KACxE,OAAO,CAAC,IAAI,CAAC,CAAC;;;;AAYvB,qBAAa,oBAAqB,SAAQ,0BAAyC;IACjF,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;CACrD,CAAC;CAAG"}
|
package/dist/client.js
CHANGED
|
@@ -12,7 +12,7 @@ import * as Mutators from "./mutators.js";
|
|
|
12
12
|
export const make = Effect.fn(function* (transaction, mutators, options) {
|
|
13
13
|
const runtime = yield* Effect.runtime();
|
|
14
14
|
function unwrapMutator(mutator) {
|
|
15
|
-
return async (tx, args) => {
|
|
15
|
+
return async (tx, args, _ctx) => {
|
|
16
16
|
const exit = await Schema.decode(mutator[Mutators.MutatorSchemaSymbol])(args).pipe(Effect.catchTag("ParseError", (e) => new ClientArgsParseError({ cause: Cause.fail(e) })), Effect.flatMap(mutator), Effect.provideService(transaction, tx), Runtime.runPromiseExit(runtime));
|
|
17
17
|
return Exit.getOrElse(exit, (c) => {
|
|
18
18
|
// Extract underlying error bypassing FiberFailure
|
package/dist/client.js.map
CHANGED
|
@@ -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;AACxC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAO1C,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EACrC,WAA8C,EAC9C,QAAmB,EACnB,
|
|
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;AACxC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAO1C,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EACrC,WAA8C,EAC9C,QAAmB,EACnB,OAA8F;IAE9F,MAAM,OAAO,GACX,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAElB,CAAC;IAEN,SAAS,aAAa,CAAI,OAAgF;QACxG,OAAO,KAAK,EAAE,EAA4B,EAAE,IAAa,EAAE,IAAa,EAAE,EAAE;YAC1E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAChF,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACxF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EACvB,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,EACtC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAChC,CAAC;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChC,kDAAkD;gBAClD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,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,MAAM;YAC1B,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;CAAG"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { HumanReadable,
|
|
1
|
+
import type { HumanReadable, QueryResultDetails as ZeroQueryResultDetails } from "@rocicorp/zero";
|
|
2
|
+
import type { QueryResult as ZeroQueryResult } from "@rocicorp/zero/react";
|
|
2
3
|
export type QueryResult<A> = QueryResult.Partial<A> | QueryResult.Complete<A> | QueryResult.Error;
|
|
3
4
|
export declare namespace QueryResult {
|
|
4
5
|
interface Complete<A> {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-result.d.ts","sourceRoot":"","sources":["../../src/internal/query-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"query-result.d.ts","sourceRoot":"","sources":["../../src/internal/query-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAK3E,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;AAClG,yBAAiB,WAAW,CAAC;IAC3B,UAAiB,QAAQ,CAAC,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;KAClC;IACD,UAAiB,OAAO,CAAC,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;KAClC;IACD,UAAiB,KAAK;QACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;SAAE,CAAC,EAAE,MAAM,CAAC,CAAC;KAC7F;CACF;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,kBAAkB,eAAe,CAAC,CAAC,CAAC,KAAG,WAAW,CAAC,CAAC,CAO3E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-result.js","sourceRoot":"","sources":["../../src/internal/query-result.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query-result.js","sourceRoot":"","sources":["../../src/internal/query-result.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAoBtC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAI,CAAC,KAAK,EAAE,OAAO,CAAqB,EAAkB,EAAE;IAC9E,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAU,CAAC,EAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAU,CAAC,EAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAU,CAAC,EACrG,KAAK,CAAC,UAAU,CACjB,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/query.d.ts
CHANGED
|
@@ -5,27 +5,26 @@ import * as Schema from "effect/Schema";
|
|
|
5
5
|
import * as Stream from "effect/Stream";
|
|
6
6
|
import * as Subscribable from "effect/Subscribable";
|
|
7
7
|
import * as QueryResult from "./internal/query-result.js";
|
|
8
|
-
|
|
9
|
-
type QueryArgs<A extends ReadonlyJSONValue[], B extends unknown[]> = {
|
|
8
|
+
type QueryArgs<A extends ReadonlyJSONValue | void, B> = {
|
|
10
9
|
_tag: "Encoded";
|
|
11
|
-
args:
|
|
10
|
+
args: A;
|
|
12
11
|
} | {
|
|
13
12
|
_tag: "Decoded";
|
|
14
|
-
args:
|
|
13
|
+
args: B;
|
|
15
14
|
};
|
|
16
15
|
export declare const RunQuerySymbol: unique symbol;
|
|
17
16
|
export declare const QueryNameSymbol: unique symbol;
|
|
18
|
-
export declare const make: <N extends string, A extends ReadonlyJSONValue
|
|
17
|
+
export declare const make: <N extends string, A extends ReadonlyJSONValue | void, B, T extends keyof S["tables"] & string, S extends ZeroSchema, R, E, R1, R2>(options: {
|
|
19
18
|
name: N;
|
|
20
|
-
payload: Schema.Schema<
|
|
21
|
-
query: (
|
|
22
|
-
}) => ((
|
|
19
|
+
payload: Schema.Schema<B, A, R1>;
|
|
20
|
+
query: (args: NoInfer<B>) => Effect.Effect<ZeroQuery<T, S, R>, E, R2>;
|
|
21
|
+
}) => ((args: B) => Effect.Effect<ZeroQuery<T, S, R> & Equal.Equal, import("effect/ParseResult").ParseError | E, R1 | R2>) & {
|
|
23
22
|
[QueryNameSymbol]: N;
|
|
24
|
-
[RunQuerySymbol]: (args: QueryArgs<A, B>) => Effect.Effect<
|
|
23
|
+
[RunQuerySymbol]: (args: QueryArgs<A, B>) => Effect.Effect<ZeroQuery<T, S, R> & Equal.Equal, import("effect/ParseResult").ParseError | E, R1 | R2>;
|
|
25
24
|
};
|
|
26
|
-
export type MakeQueryResult<E = any, R1 = any, R2 = any> = ReturnType<typeof make<string, any, any,
|
|
27
|
-
export declare const stream: <
|
|
28
|
-
export declare const initialValue: <
|
|
29
|
-
export declare const subscribable: <
|
|
25
|
+
export type MakeQueryResult<E = any, R1 = any, R2 = any> = ReturnType<typeof make<string, any, any, string, ZeroSchema, Record<string, any> | undefined, E, R1, R2>>;
|
|
26
|
+
export declare const stream: <T extends keyof S["tables"] & string, S extends ZeroSchema, R>(zero: Zero<S>, query: ZeroQuery<T, S, R>) => Stream.Stream<QueryResult.QueryResult<R>, never, never>;
|
|
27
|
+
export declare const initialValue: <T extends keyof S["tables"] & string, S extends ZeroSchema, R>(query: ZeroQuery<T, S, R>) => QueryResult.QueryResult<R>;
|
|
28
|
+
export declare const subscribable: <T extends keyof S["tables"] & string, S extends ZeroSchema, R>(zero: Zero<S>, query: ZeroQuery<T, S, R>) => Subscribable.Subscribable<QueryResult.QueryResult<R>, never, never>;
|
|
30
29
|
export {};
|
|
31
30
|
//# sourceMappingURL=query.d.ts.map
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,iBAAiB,EAAE,IAAI,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,iBAAiB,EAAE,IAAI,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEvH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAC;AAK1D,KAAK,SAAS,CAAC,CAAC,SAAS,iBAAiB,GAAG,IAAI,EAAE,CAAC,IAAI;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAEpH,eAAO,MAAM,cAAc,eAAmC,CAAC;AAC/D,eAAO,MAAM,eAAe,eAAoC,CAAC;AAEjE,eAAO,MAAM,IAAI,GACf,CAAC,SAAS,MAAM,EAGhB,CAAC,SAAS,iBAAiB,GAAG,IAAI,EAElC,CAAC,EACD,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,EACpC,CAAC,SAAS,UAAU,EACpB,CAAC,EACD,CAAC,EACD,EAAE,EACF,EAAE,EACF,SAAS;IACT,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;CACvE,aA+B6B,CAAC;;;CAK9B,CAAC;AAGF,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,UAAU,CAEnE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAC9F,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,EAClF,MAAM,IAAI,CAAC,CAAC,CAAC,EACb,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,4DA6BG,CAAC;AAE/B,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,EACxF,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,+BAC0D,CAAC;AAEtF,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,EACxF,MAAM,IAAI,CAAC,CAAC,CAAC,EACb,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,wEAQ1B,CAAC"}
|
package/dist/query.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { asQueryInternals } from "@rocicorp/zero/bindings";
|
|
1
2
|
import * as Effect from "effect/Effect";
|
|
2
3
|
import * as Equal from "effect/Equal";
|
|
3
4
|
import * as Hash from "effect/Hash";
|
|
@@ -16,11 +17,11 @@ export const make = (options) => {
|
|
|
16
17
|
Encoded: ({ args: encoded }) => Effect.map(Schema.decode(options.payload)(encoded), (decoded) => ({ encoded, decoded })),
|
|
17
18
|
Decoded: ({ args: decoded }) => Effect.map(Schema.encode(options.payload)(decoded), (encoded) => ({ encoded, decoded })),
|
|
18
19
|
});
|
|
19
|
-
return yield* options.query(
|
|
20
|
-
const query = rawQuery.nameAndArgs(options.name,
|
|
20
|
+
return yield* options.query(decoded).pipe(Effect.map((rawQuery) => {
|
|
21
|
+
const query = asQueryInternals(rawQuery).nameAndArgs(options.name,
|
|
21
22
|
// We pass the encoded `args` to the `nameAndArgs` method, as that is the wire format which
|
|
22
23
|
// is sent to the server.
|
|
23
|
-
encoded);
|
|
24
|
+
encoded !== undefined ? [encoded] : []);
|
|
24
25
|
// Adapted from https://github.com/rocicorp/mono/blob/17171f975e61f7ec93c61569da7bda1d962ac962/packages/zero-protocol/src/query-hash.ts#L17
|
|
25
26
|
query[Hash.symbol] = () => Hash.string(`${options.name}:${JSON.stringify(encoded)}`);
|
|
26
27
|
query[Equal.symbol] = function (that) {
|
|
@@ -33,24 +34,25 @@ export const make = (options) => {
|
|
|
33
34
|
}));
|
|
34
35
|
});
|
|
35
36
|
// We return a callable object for ease of use on the frontend.
|
|
36
|
-
return Object.assign((
|
|
37
|
+
return Object.assign((args) => runQuery({ _tag: "Decoded", args }), {
|
|
37
38
|
[QueryNameSymbol]: options.name,
|
|
38
39
|
// Internally, we include the full `runQuery` function for use in library's server logic.
|
|
39
40
|
[RunQuerySymbol]: runQuery,
|
|
40
41
|
});
|
|
41
42
|
};
|
|
42
|
-
export const stream = (zero,
|
|
43
|
-
// TODO: Look into why this is needed, instead of just `ZeroQuery<S, T, R>`
|
|
44
|
-
query) => Effect.gen(function* () {
|
|
43
|
+
export const stream = (zero, query) => Effect.gen(function* () {
|
|
45
44
|
const view = yield* Effect.acquireRelease(Effect.sync(() => zero.materialize(query)), (view) => Effect.sync(() => view.destroy()));
|
|
46
|
-
return Stream.asyncEffect((emit) => Effect.sync(() => view.addListener((...args) => emit.single(args)))).pipe(Stream.mapEffect(([data, resultType]) => Effect.sync(() => {
|
|
47
|
-
// logic here borrowed from: https://github.com/rocicorp/mono/blob/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
return Stream.asyncEffect((emit) => Effect.sync(() => view.addListener((...args) => emit.single(args)))).pipe(Stream.mapEffect(([data, resultType, error]) => Effect.sync(() => {
|
|
46
|
+
// logic here borrowed from: https://github.com/rocicorp/mono/blob/8e0f600fb3a9185facf60cfd4971d260b266690e/packages/zero-react/src/use-query.tsx#L543
|
|
47
|
+
const cloned = data === undefined ? data : deepClone(data);
|
|
48
|
+
return getSnapshot(asQueryInternals(query).format.singular, cloned, resultType,
|
|
49
|
+
// TODO: Look into this. It seems like this is difficult but not impossible to model in the Effect paradigm.
|
|
50
|
+
// Likely need some kind of stateful piece between the publisher and and subscriber, allowing the subscriber to swap out
|
|
51
|
+
// the publisher when this function is called.
|
|
52
|
+
() => Effect.dieMessage("retry not available in `effect-zero`"), error);
|
|
51
53
|
})), Stream.map(QueryResult.make));
|
|
52
54
|
}).pipe(Stream.unwrapScoped);
|
|
53
|
-
export const initialValue = (query) => QueryResult.make(getDefaultSnapshot(query.format.singular));
|
|
55
|
+
export const initialValue = (query) => QueryResult.make(getDefaultSnapshot(asQueryInternals(query).format.singular));
|
|
54
56
|
export const subscribable = (zero, query) => {
|
|
55
57
|
return Subscribable.make({
|
|
56
58
|
get: Effect.promise(() => zero.run(query, { type: "unknown" })).pipe(Effect.map((value) => ({ _tag: "Partial", value }))),
|
package/dist/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/dist/query.test.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { describe, it } from "@effect/vitest";
|
|
2
|
+
import { queryInternalsTag } 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";
|
|
@@ -8,6 +9,7 @@ describe("Query hashing", () => {
|
|
|
8
9
|
// biome-ignore lint/suspicious/noExplicitAny: allowed in tests
|
|
9
10
|
const makeMockQuery = () => {
|
|
10
11
|
const mockQuery = {
|
|
12
|
+
[queryInternalsTag]: true,
|
|
11
13
|
format: { singular: false },
|
|
12
14
|
nameAndArgs: () => mockQuery,
|
|
13
15
|
};
|
|
@@ -15,7 +17,7 @@ describe("Query hashing", () => {
|
|
|
15
17
|
};
|
|
16
18
|
const makeTestQuery = (name) => Query.make({
|
|
17
19
|
name,
|
|
18
|
-
payload: Schema.
|
|
20
|
+
payload: Schema.String,
|
|
19
21
|
query: () => Effect.succeed(makeMockQuery()),
|
|
20
22
|
});
|
|
21
23
|
it.effect("queries with the same name and arguments should have the same hash", Effect.fn(function* ({ expect }) {
|
|
@@ -71,7 +73,7 @@ describe("Query hashing", () => {
|
|
|
71
73
|
it.effect("hash should work with complex arguments", Effect.fn(function* ({ expect }) {
|
|
72
74
|
const complexQuery = Query.make({
|
|
73
75
|
name: "complexQuery",
|
|
74
|
-
payload: Schema.
|
|
76
|
+
payload: Schema.Struct({ id: Schema.String, nested: Schema.Struct({ value: Schema.Number }) }),
|
|
75
77
|
query: () => Effect.succeed(makeMockQuery()),
|
|
76
78
|
});
|
|
77
79
|
const query1 = yield* complexQuery({ id: "test", nested: { value: 42 } });
|
package/dist/query.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.test.js","sourceRoot":"","sources":["../src/query.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,+DAA+D;IAC/D,MAAM,aAAa,GAAG,GAAQ,EAAE;QAC9B,MAAM,SAAS,GAAG;YAChB,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC3B,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;SAC7B,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CACrC,KAAK,CAAC,IAAI,CAAC;QACT,IAAI;QACJ,OAAO,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"query.test.js","sourceRoot":"","sources":["../src/query.test.ts"],"names":[],"mappings":"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"}
|
package/dist/result.d.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 type { QueryResult } from "./internal/query-result.js";
|
|
5
5
|
export type Result<A, E = never> = AtomResult.Result<QueryResult.Partial<A> | QueryResult.Complete<A>, E | QueryError>;
|
package/dist/result.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare const processPush: <TSchema extends ZeroSchema, TTransaction, TMu
|
|
|
11
11
|
readonly schema: string;
|
|
12
12
|
readonly appID: string;
|
|
13
13
|
}, request: {
|
|
14
|
+
readonly auth?: string | undefined;
|
|
14
15
|
readonly timestamp: number;
|
|
15
16
|
readonly clientGroupID: string;
|
|
16
17
|
readonly mutations: readonly ({
|
|
@@ -72,6 +73,7 @@ export declare const processPush: <TSchema extends ZeroSchema, TTransaction, TMu
|
|
|
72
73
|
};
|
|
73
74
|
readonly result: {
|
|
74
75
|
readonly error: "app";
|
|
76
|
+
readonly message?: string | undefined;
|
|
75
77
|
readonly details?: unknown;
|
|
76
78
|
} | {
|
|
77
79
|
readonly error: "oooMutation" | "alreadyProcessed";
|
|
@@ -87,31 +89,50 @@ declare const CustomMutationExpectedError_base: new <A extends Record<string, an
|
|
|
87
89
|
} & Readonly<A>;
|
|
88
90
|
declare class CustomMutationExpectedError extends CustomMutationExpectedError_base {
|
|
89
91
|
}
|
|
90
|
-
export declare const
|
|
92
|
+
export declare const handleQuery: <E, R1, R2>(queries: MakeQueryResult<E, R1, R2>[], schema: ZeroSchema, payload: readonly ["transform", readonly {
|
|
91
93
|
readonly name: string;
|
|
92
94
|
readonly id: string;
|
|
93
95
|
readonly args: readonly unknown[];
|
|
94
96
|
}[]]) => Effect.Effect<["transformed", ({
|
|
97
|
+
message?: string | undefined;
|
|
98
|
+
details?: ReadonlyJSONValue | undefined;
|
|
99
|
+
error: "app";
|
|
95
100
|
id: string;
|
|
96
101
|
name: string;
|
|
97
|
-
ast: import("@rocicorp/zero").AST;
|
|
98
102
|
} | {
|
|
99
|
-
|
|
103
|
+
details?: ReadonlyJSONValue | undefined;
|
|
104
|
+
error: "parse";
|
|
100
105
|
id: string;
|
|
101
106
|
name: string;
|
|
102
|
-
|
|
107
|
+
message: string;
|
|
103
108
|
} | {
|
|
104
|
-
error: "http";
|
|
105
109
|
id: string;
|
|
106
110
|
name: string;
|
|
111
|
+
ast: import("@rocicorp/zero").AST;
|
|
112
|
+
})[]] | ["transformFailed", {
|
|
113
|
+
details?: ReadonlyJSONValue | undefined;
|
|
114
|
+
message: string;
|
|
115
|
+
kind: "TransformFailed";
|
|
116
|
+
queryIDs: string[];
|
|
117
|
+
origin: "server";
|
|
118
|
+
reason: "parse" | "database" | "internal";
|
|
119
|
+
} | {
|
|
120
|
+
details?: ReadonlyJSONValue | undefined;
|
|
121
|
+
bodyPreview?: string | undefined;
|
|
122
|
+
message: string;
|
|
123
|
+
kind: "TransformFailed";
|
|
124
|
+
queryIDs: string[];
|
|
125
|
+
origin: "zeroCache";
|
|
126
|
+
reason: "http";
|
|
107
127
|
status: number;
|
|
108
|
-
details: ReadonlyJSONValue;
|
|
109
128
|
} | {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
129
|
+
details?: ReadonlyJSONValue | undefined;
|
|
130
|
+
message: string;
|
|
131
|
+
kind: "TransformFailed";
|
|
132
|
+
queryIDs: string[];
|
|
133
|
+
origin: "zeroCache";
|
|
134
|
+
reason: "parse" | "internal" | "timeout";
|
|
135
|
+
}], ParseResult.ParseError | E | QueryNotFound | QueryRequestError, R1 | R2>;
|
|
115
136
|
declare const QueryNotFound_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Cause.YieldableError & {
|
|
116
137
|
readonly _tag: "QueryNotFound";
|
|
117
138
|
} & Readonly<A>;
|
|
@@ -120,10 +141,10 @@ declare class QueryNotFound extends QueryNotFound_base<{
|
|
|
120
141
|
}> {
|
|
121
142
|
get message(): string;
|
|
122
143
|
}
|
|
123
|
-
declare const
|
|
124
|
-
readonly _tag: "
|
|
144
|
+
declare const QueryRequestError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Cause.YieldableError & {
|
|
145
|
+
readonly _tag: "QueryRequestError";
|
|
125
146
|
} & Readonly<A>;
|
|
126
|
-
declare class
|
|
147
|
+
declare class QueryRequestError extends QueryRequestError_base<{
|
|
127
148
|
cause: Cause.Cause<unknown>;
|
|
128
149
|
}> {
|
|
129
150
|
}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAOvD,OAAO,EAGL,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,YAAY,CAAC;AACnF,OAAO,KAAK,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,KAAK,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAOvD,OAAO,EAGL,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,YAAY,CAAC;AACnF,OAAO,KAAK,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAQlE,KAAK,wBAAwB,CAAC,OAAO,SAAS,UAAU,EAAE,YAAY,IAAI,IAAI,CAC5E,UAAU,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,EACxE,KAAK,CACN,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,OAAO,SAAS,UAAU,EAC1B,YAAY,EACZ,SAAS,SAAS,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wJAyCtC,CAAC;;;;AA+EH,cAAM,2BAA4B,SAAQ,gCAA+C;CAAG;AAwB5F,eAAO,MAAM,WAAW,GAAwB,CAAC,EAAE,EAAE,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EA2BvD,CAAC;;;;AAEH,cAAM,aAAc,SAAQ,mBAAkC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;IAC7E,IAAa,OAAO,WAEnB;CACF;;;;AAYD,cAAM,iBAAkB,SAAQ,uBAAsC;IAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;CAAG"}
|
package/dist/server.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { handleQueryRequest } from "@rocicorp/zero/server";
|
|
2
2
|
import * as Arr from "effect/Array";
|
|
3
3
|
import * as Cause from "effect/Cause";
|
|
4
4
|
import * as Chunk from "effect/Chunk";
|
|
@@ -32,14 +32,14 @@ export const processPush = Effect.fn(function* (transaction, mutators, params, r
|
|
|
32
32
|
mutationID: mutation.id,
|
|
33
33
|
clientGroupID: request.clientGroupID,
|
|
34
34
|
upstreamSchema: params.schema,
|
|
35
|
-
}));
|
|
35
|
+
}), Effect.provide(ServerSynchronizationContext.Default));
|
|
36
36
|
})),
|
|
37
37
|
// We only stop processing if the mutation is out of order.
|
|
38
38
|
// If the mutation has already been processed or if it returns an application error,
|
|
39
39
|
// we continue processing the next mutation.
|
|
40
40
|
Stream.takeUntil(({ result }) => Predicate.hasProperty(result, "error") && result.error === "oooMutation"), Stream.runCollect);
|
|
41
41
|
return { mutations: Chunk.toArray(responses) };
|
|
42
|
-
}
|
|
42
|
+
});
|
|
43
43
|
const processMutation = Effect.fn(function* (mutators, mutation) {
|
|
44
44
|
// Support both "namespace|name" and "namespace.name" formats, and single-segment names.
|
|
45
45
|
const [namespace, name] = mutation.name.includes("|") ? Str.split(mutation.name, "|") : Str.split(mutation.name, ".");
|
|
@@ -88,13 +88,13 @@ class MutationUserError extends Data.TaggedError("MutationUserError") {
|
|
|
88
88
|
return err instanceof Error ? err.message : "exception was not of type `Error`";
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
export const
|
|
91
|
+
export const handleQuery = Effect.fn(function* (queries, schema, payload) {
|
|
92
92
|
const runtime = yield* Effect.runtime();
|
|
93
93
|
return yield* Effect.tryPromise({
|
|
94
|
-
try: () =>
|
|
94
|
+
try: () => handleQueryRequest((name, args) => Arr.findFirst(queries, (q) => q[QueryNameSymbol] === name).pipe(Effect.catchTag("NoSuchElementException", () => new QueryNotFound({ name })), Effect.flatMap((query) => query[RunQuerySymbol]({ _tag: "Encoded", args })), (effect) => Runtime.runSyncExit(runtime, effect), Exit.getOrElse((cause) => {
|
|
95
95
|
throw new QueryUserError({ cause });
|
|
96
|
-
}))
|
|
97
|
-
catch: (e) => Option.liftPredicate(e, (QueryUserError.is)).pipe(Option.flatMap((e) => Cause.failureOption(e.cause)), Option.getOrElse(() => new
|
|
96
|
+
})), schema, payload),
|
|
97
|
+
catch: (e) => Option.liftPredicate(e, (QueryUserError.is)).pipe(Option.flatMap((e) => Cause.failureOption(e.cause)), Option.getOrElse(() => new QueryRequestError({ cause: Cause.fail(e) }))),
|
|
98
98
|
});
|
|
99
99
|
});
|
|
100
100
|
class QueryNotFound extends Data.TaggedError("QueryNotFound") {
|
|
@@ -109,6 +109,6 @@ class QueryUserError extends Data.TaggedError("QueryUserError") {
|
|
|
109
109
|
return Predicate.hasProperty(e, QueryUserErrorTypeId);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
class
|
|
112
|
+
class QueryRequestError extends Data.TaggedError("QueryRequestError") {
|
|
113
113
|
}
|
|
114
114
|
//# sourceMappingURL=server.js.map
|