effect-zero 0.8.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.
@@ -0,0 +1,115 @@
1
+ import type { AnyMutatorRegistry, MutateRequest as ZeroMutateRequest, Schema as ZeroSchema, Transaction as ZeroTransaction } from "@rocicorp/zero";
2
+ import * as Cause from "effect/Cause";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Schema from "effect/Schema";
5
+ import type * as ClientTransaction from "./client-transaction.js";
6
+ import { ContextSymbol } from "./client-transaction.js";
7
+ export declare const RegistryTypeId: unique symbol;
8
+ /**
9
+ * A mutator that isn't part of a registry yet, made with {@link make}. Like `defineMutator`, it gets its name
10
+ * from its path in the {@link registry}.
11
+ */
12
+ export interface Definition<Type, Encoded, E, R> {
13
+ readonly payload: Schema.Codec<Type, Encoded, R>;
14
+ readonly mutator: (args: Type) => Effect.Effect<unknown, E, R>;
15
+ }
16
+ export type AnyDefinition = Definition<any, any, any, any>;
17
+ export type Definitions = {
18
+ readonly [key: string]: AnyDefinition | Definitions;
19
+ };
20
+ /**
21
+ * A registered mutator. Calling it encodes `args` and returns a request for `ZfxClient.mutate(zero, request)`, or
22
+ * for Zero's own `zero.mutate(request)`. It is also a Zero `Mutator`, so the registry can be passed to Zero.
23
+ */
24
+ export interface Mutator<Type, Encoded, E, R> extends Definition<Type, Encoded, E, R> {
25
+ (args: Type): MutateRequest<Type>;
26
+ readonly mutatorName: string;
27
+ /** Runs the mutator for Zero, which calls it with the transaction and the `context` from `ZfxClient.make`. */
28
+ readonly fn: (options: {
29
+ readonly args: unknown;
30
+ readonly ctx: unknown;
31
+ readonly tx: ZeroTransaction<ZeroSchema>;
32
+ }) => Promise<void>;
33
+ readonly "~": "Mutator";
34
+ }
35
+ export type AnyMutator = Mutator<any, any, any, any>;
36
+ /** A request to run a mutator, for `ZfxClient.mutate` or Zero's own `zero.mutate`. */
37
+ export type MutateRequest<Type> = ZeroMutateRequest<any, any, any, any> & {
38
+ readonly mutator: Mutator<Type, any, any, any>;
39
+ };
40
+ type Tree<D> = {
41
+ readonly [K in keyof D]: D[K] extends Definition<infer Type, infer Encoded, infer E, infer R> ? Mutator<Type, Encoded, E, R> : Tree<D[K]>;
42
+ };
43
+ /** A tree of registered mutators, made with {@link registry}. Pass it to `ZfxClient.make` and the server. */
44
+ export type Registry<D extends Definitions, TTransaction extends AnyClientTransaction> = Tree<D> & {
45
+ readonly "~": AnyMutatorRegistry["~"];
46
+ readonly [RegistryTypeId]: {
47
+ readonly transaction: TTransaction;
48
+ };
49
+ };
50
+ export type AnyRegistry = Registry<any, AnyClientTransaction>;
51
+ type AnyClientTransaction = ClientTransaction.Context<any>;
52
+ type Keys<T> = Exclude<Extract<keyof T, string>, "~">;
53
+ /** The services a registry's mutators require. */
54
+ export type Requirements<T> = T extends Mutator<any, any, any, infer R> ? R : {
55
+ [K in Keys<T>]: Requirements<T[K]>;
56
+ }[Keys<T>];
57
+ /** The client transaction a registry's mutators run in. */
58
+ export type Transaction<T extends AnyRegistry> = T[typeof RegistryTypeId]["transaction"];
59
+ /** The Zero schema a registry's mutators run against. */
60
+ export type ZeroSchemaOf<T extends AnyRegistry> = Transaction<T> extends ClientTransaction.Context<infer S> ? S : never;
61
+ /**
62
+ * Defines a mutator. Its `payload` codec decodes the args on both the client and the server; it must encode without
63
+ * services, since calling a registered mutator encodes its args synchronously.
64
+ */
65
+ export declare const make: <Type, Encoded, RD = never, A = unknown, E = never, R = never>(options: {
66
+ readonly payload: Schema.Codec<Type, Encoded, RD, never>;
67
+ readonly mutator: (args: NoInfer<Type>) => Effect.Effect<A, E, R>;
68
+ }) => Definition<Type, Encoded, E, R | RD>;
69
+ /**
70
+ * Registers mutators under their path, like Zero's `defineMutators`: `{ todo: { create } }` registers
71
+ * `"todo.create"`. The result is also a Zero mutator registry, so it can be passed to `new Zero({ mutators })`.
72
+ */
73
+ export declare const registry: <TTransaction extends AnyClientTransaction, const D extends Definitions>(transaction: TTransaction, definitions: D) => Registry<D, TTransaction>;
74
+ type Overrides<T> = {
75
+ readonly [K in Keys<T>]?: T[K] extends Mutator<infer Type, infer _Encoded, infer _E, infer _R> ? (args: Type) => Effect.Effect<unknown, any, any> : Overrides<T[K]>;
76
+ };
77
+ /** The server's view of a registry, made with {@link server}. */
78
+ export interface ServerMutators<TRegistry extends AnyRegistry, O> {
79
+ readonly registry: TRegistry;
80
+ readonly overrides: O;
81
+ }
82
+ export type AnyServerMutators = ServerMutators<AnyRegistry, unknown>;
83
+ /**
84
+ * The registry's mutators as the server runs them, for `ZfxServer.handleMutate`. `overrides` replaces some mutators'
85
+ * bodies, like Zero's `defineMutators(base, overrides)`; every other mutator runs its shared body in a server
86
+ * transaction, so pass `{}` if nothing differs. An override runs outside the transaction, so it can do work before
87
+ * and after `serverTransaction.execute`, e.g. `registry.todo.create.mutator(args).pipe(serverTransaction.execute)`.
88
+ */
89
+ export declare const server: <TRegistry extends AnyRegistry, const O extends Overrides<TRegistry>>(registry: TRegistry, overrides: O) => ServerMutators<TRegistry, O>;
90
+ type ServerTreeRequirements<T, O, ClientTransactionId> = {
91
+ [K in Keys<T>]: T[K] extends AnyMutator ? K extends keyof O ? O[K] extends (args: never) => Effect.Effect<infer _A, infer _E, infer R> ? R : never : Exclude<Requirements<T[K]>, ClientTransactionId> : ServerTreeRequirements<T[K], K extends keyof O ? O[K] : unknown, ClientTransactionId>;
92
+ }[Keys<T>];
93
+ /**
94
+ * The services the server needs to run these mutators. Mutators that aren't overridden run in a server transaction,
95
+ * which provides their client transaction.
96
+ */
97
+ export type ServerRequirements<T extends AnyServerMutators> = T extends ServerMutators<infer TRegistry, infer O> ? ServerTreeRequirements<TRegistry, O, Transaction<TRegistry>[typeof ContextSymbol]["Identifier"]> : never;
98
+ 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 & {
99
+ readonly _tag: "ClientArgsParseError";
100
+ } & Readonly<A>;
101
+ export declare class ClientArgsParseError extends ClientArgsParseError_base<{
102
+ readonly cause: Cause.Cause<unknown>;
103
+ }> {
104
+ get message(): string;
105
+ }
106
+ declare const MutatorContextNotFound_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 & {
107
+ readonly _tag: "MutatorContextNotFound";
108
+ } & Readonly<A>;
109
+ /** A mutator ran on a Zero instance that wasn't made with `ZfxClient.make`. */
110
+ export declare class MutatorContextNotFound extends MutatorContextNotFound_base<{
111
+ readonly mutator: string;
112
+ }> {
113
+ }
114
+ export {};
115
+ //# sourceMappingURL=mutator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutator.d.ts","sourceRoot":"","sources":["../src/mutator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import * as Cause from "effect/Cause";
2
+ import * as Context from "effect/Context";
3
+ import * as Data from "effect/Data";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Predicate from "effect/Predicate";
6
+ import * as Rec from "effect/Record";
7
+ import * as Schema from "effect/Schema";
8
+ import { ContextSymbol } from "./client-transaction.js";
9
+ import { prefixId } from "./internal/utils.js";
10
+ export const RegistryTypeId = Symbol.for(prefixId("MutatorRegistry"));
11
+ /**
12
+ * Defines a mutator. Its `payload` codec decodes the args on both the client and the server; it must encode without
13
+ * services, since calling a registered mutator encodes its args synchronously.
14
+ */
15
+ export const make = (options) => options;
16
+ /**
17
+ * Registers mutators under their path, like Zero's `defineMutators`: `{ todo: { create } }` registers
18
+ * `"todo.create"`. The result is also a Zero mutator registry, so it can be passed to `new Zero({ mutators })`.
19
+ */
20
+ export const registry = (transaction, definitions) => {
21
+ const register = (definitions, path) => Rec.map(definitions, (value, key) => isDefinition(value) ? makeMutator(transaction, [...path, key].join("."), value) : register(value, [...path, key]));
22
+ // The registry's shape is only known from `D`.
23
+ return Object.assign(register(definitions, []), {
24
+ "~": "MutatorRegistry",
25
+ [RegistryTypeId]: { transaction },
26
+ });
27
+ };
28
+ const isDefinition = (u) => Predicate.hasProperty(u, "payload") && Schema.isSchema(u.payload);
29
+ const makeMutator = (transaction, name, definition) => {
30
+ const run = (args, tx) => Schema.decodeUnknownEffect(definition.payload)(args).pipe(Effect.catchTag("SchemaError", (error) => new ClientArgsParseError({ cause: Cause.fail(error) })), Effect.flatMap(definition.mutator), Effect.withSpan("zero.mutator", {
31
+ attributes: {
32
+ "zero.mutator": name,
33
+ "zero.clientID": tx.clientID,
34
+ "zero.mutationID": tx.mutationID,
35
+ "zero.mutation.reason": tx.reason,
36
+ },
37
+ }), Effect.provideService(transaction[ContextSymbol], tx), Effect.asVoid);
38
+ const mutator = Object.assign((args) =>
39
+ // A Zero `MutateRequest`, whose brand only exists at the type level.
40
+ ({ mutator, args: Schema.encodeSync(definition.payload)(args), "~": "MutateRequest" }), {
41
+ ...definition,
42
+ mutatorName: name,
43
+ "~": "Mutator",
44
+ fn: ({ args, ctx, tx, }) => Context.isContext(ctx)
45
+ ? // `ZfxClient.make` passes the services it captured, which cover every mutator's requirements.
46
+ run(args, tx).pipe(Effect.runPromiseWith(ctx))
47
+ : Promise.reject(new MutatorContextNotFound({ mutator: name })),
48
+ });
49
+ return mutator;
50
+ };
51
+ /**
52
+ * The registry's mutators as the server runs them, for `ZfxServer.handleMutate`. `overrides` replaces some mutators'
53
+ * bodies, like Zero's `defineMutators(base, overrides)`; every other mutator runs its shared body in a server
54
+ * transaction, so pass `{}` if nothing differs. An override runs outside the transaction, so it can do work before
55
+ * and after `serverTransaction.execute`, e.g. `registry.todo.create.mutator(args).pipe(serverTransaction.execute)`.
56
+ */
57
+ export const server = (registry, overrides) => ({ registry, overrides });
58
+ export class ClientArgsParseError extends Data.TaggedError("ClientArgsParseError") {
59
+ get message() {
60
+ const error = Cause.squash(this.cause);
61
+ return Predicate.isError(error) && !Schema.isSchemaError(error) ? error.message : "Internal error";
62
+ }
63
+ }
64
+ /** A mutator ran on a Zero instance that wasn't made with `ZfxClient.make`. */
65
+ export class MutatorContextNotFound extends Data.TaggedError("MutatorContextNotFound") {
66
+ }
67
+ //# sourceMappingURL=mutator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutator.js","sourceRoot":"","sources":["../src/mutator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mutator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutator.test.d.ts","sourceRoot":"","sources":["../src/mutator.test.ts"],"names":[],"mappings":""}
@@ -2,7 +2,7 @@ import { describe, it } from "@effect/vitest";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as Exit from "effect/Exit";
4
4
  import * as Schema from "effect/Schema";
5
- import { ClientArgsParseError } from "./client.js";
5
+ import { ClientArgsParseError } from "./mutator.js";
6
6
  describe("ClientArgsParseError", () => {
7
7
  // The schema validation detail is masked to a generic "Internal error" rather than leaked. The getter
8
8
  // still exists so a `getErrorMessage`-style consumer reads that clean string instead of serializing the
@@ -16,4 +16,4 @@ describe("ClientArgsParseError", () => {
16
16
  expect(error.message).toBe("Internal error");
17
17
  }));
18
18
  });
19
- //# sourceMappingURL=client.test.js.map
19
+ //# sourceMappingURL=mutator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutator.test.js","sourceRoot":"","sources":["../src/mutator.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,sGAAsG;IACtG,wGAAwG;IACxG,4CAA4C;IAC5C,EAAE,CAAC,MAAM,CACP,wDAAwD,EACxD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO;QAElC,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
package/dist/server.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as Cause from "effect/Cause";
4
4
  import * as Effect from "effect/Effect";
5
5
  import { TransactCallbackNotInvokedError, TransactInternalError } from "./internal/server.js";
6
6
  import * as ServerSynchronizationContext from "./internal/server-synchronization-context.js";
7
- import * as Mutators from "./mutators.js";
7
+ import type * as Mutator from "./mutator.js";
8
8
  import { type MakeQueryResult } from "./query.js";
9
9
  import type * as ServerTransaction from "./server-transaction.js";
10
10
  import type { TransformRequestMessage } from "./types/custom-queries.js";
@@ -16,7 +16,11 @@ type MutateUserId = Extract<Awaited<ReturnType<typeof handleMutateRequest>>, {
16
16
  type QueryUserId = Extract<Awaited<ReturnType<typeof handleQueryRequest>>, {
17
17
  kind: "QueryResponse";
18
18
  }>["userID"];
19
- export declare const handleMutate: <TSchema extends ZeroSchema, TTransaction, TMutators extends Mutators.AnyMutators>(args_0: {
19
+ /**
20
+ * Handles Zero's push endpoint, running each mutation's server implementation: its override from
21
+ * `ZfxMutator.server`, or else its shared body in a server transaction.
22
+ */
23
+ export declare const handleMutate: <TSchema extends ZeroSchema, TTransaction, TMutators extends Mutator.AnyServerMutators>(args_0: {
20
24
  transaction: ServerTransaction.Context<TSchema, TTransaction>;
21
25
  mutators: TMutators;
22
26
  query: MutateParams;
@@ -149,7 +153,7 @@ export declare const handleMutate: <TSchema extends ZeroSchema, TTransaction, TM
149
153
  }[];
150
154
  origin: "zeroCache";
151
155
  reason: "parse" | "timeout" | "internal";
152
- }, HandleMutateError, Exclude<Mutators.ExtractMutatorsRequirements<TMutators>, ServerSynchronizationContext.ServerSynchronizationContext | {
156
+ }, HandleMutateError, Exclude<Mutator.ServerRequirements<TMutators>, ServerSynchronizationContext.ServerSynchronizationContext | {
153
157
  readonly Service: {
154
158
  readonly transact: <A, E, R>(fn: (transaction: ZeroServerTransaction<TSchema, TTransaction>) => Effect.Effect<A, E, R>) => Effect.Effect<A, import("./internal/server.js").MultipleTransactionsError | TransactInternalError | TransactCallbackNotInvokedError | E, ServerSynchronizationContext.ServerSynchronizationContext | R>;
155
159
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,MAAM,IAAI,UAAU,EACpB,iBAAiB,IAAI,qBAAqB,EAC3C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAsB,MAAM,uBAAuB,CAAC;AAEtH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAYxC,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,4BAA4B,MAAM,8CAA8C,CAAC;AAC7F,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,YAAY,CAAC;AACnF,OAAO,KAAK,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAWhD,KAAK,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnH,KAAK,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAEhH,eAAO,MAAM,YAAY,GACvB,OAAO,SAAS,UAAU,EAC1B,YAAY,EACZ,SAAS,SAAS,QAAQ,CAAC,WAAW;iBAQzB,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;cACnD,SAAS;WACZ,YAAY;UACb,QAAQ;YACN,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EpB,CAAC;AA0BH,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,oDAI/D,CAAC;;;;AAcF,cAAM,iBAAkB,SAAQ,uBAAsC;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;CAAG;AAElH,eAAO,MAAM,WAAW,GAAwB,CAAC,EAAE,EAAE,EAAE,EAAE;aAM9C,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;YAC7B,UAAU;UACZ,uBAAuB;YACrB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAoBnB,CAAC;;;;AAQH,cAAM,gBAAiB,SAAQ,sBAAqC;IAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;CAAG"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,MAAM,IAAI,UAAU,EACpB,iBAAiB,IAAI,qBAAqB,EAC3C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAsB,MAAM,uBAAuB,CAAC;AAEtH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAUxC,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,4BAA4B,MAAM,8CAA8C,CAAC;AAC7F,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,YAAY,CAAC;AACnF,OAAO,KAAK,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAWhD,KAAK,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnH,KAAK,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAEhH;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,SAAS,UAAU,EAC1B,YAAY,EACZ,SAAS,SAAS,OAAO,CAAC,iBAAiB;iBAQ9B,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;cACnD,SAAS;WACZ,YAAY;UACb,QAAQ;YACN,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFpB,CAAC;AAuCH,eAAO,MAAM,oBAAoB,GAAI,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,oDAI/D,CAAC;;;;AAcF,cAAM,iBAAkB,SAAQ,uBAAsC;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;CAAG;AAElH,eAAO,MAAM,WAAW,GAAwB,CAAC,EAAE,EAAE,EAAE,EAAE;aAM9C,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;YAC7B,UAAU;UACZ,uBAAuB;YACrB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAoBnB,CAAC;;;;AAQH,cAAM,gBAAiB,SAAQ,sBAAqC;IAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC;CAAG"}
package/dist/server.js CHANGED
@@ -5,9 +5,7 @@ import * as Data from "effect/Data";
5
5
  import * as Deferred from "effect/Deferred";
6
6
  import * as Effect from "effect/Effect";
7
7
  import * as Exit from "effect/Exit";
8
- import * as Fn from "effect/Function";
9
8
  import * as Layer from "effect/Layer";
10
- import * as Match from "effect/Match";
11
9
  import * as Option from "effect/Option";
12
10
  import * as Predicate from "effect/Predicate";
13
11
  import * as Rec from "effect/Record";
@@ -15,9 +13,12 @@ import * as Schema from "effect/Schema";
15
13
  import * as Str from "effect/String";
16
14
  import { TransactCallbackNotInvokedError, TransactInternalError } from "./internal/server.js";
17
15
  import * as ServerSynchronizationContext from "./internal/server-synchronization-context.js";
18
- import * as Mutators from "./mutators.js";
19
16
  import { QueryNameSymbol, RunQuerySymbol } from "./query.js";
20
17
  import { DatabaseSymbol, ServerTransactionCallbackSymbol } from "./server-transaction.js";
18
+ /**
19
+ * Handles Zero's push endpoint, running each mutation's server implementation: its override from
20
+ * `ZfxMutator.server`, or else its shared body in a server transaction.
21
+ */
21
22
  export const handleMutate = Effect.fn(function* ({ transaction, mutators, query, body, userId, }) {
22
23
  const ctx = yield* Effect.context();
23
24
  return yield* Effect.tryPromise({
@@ -34,10 +35,16 @@ export const handleMutate = Effect.fn(function* ({ transaction, mutators, query,
34
35
  }).pipe(Effect.flatMap((value) => Deferred.succeed(response, value)));
35
36
  return yield* Deferred.poll(exitDeferred).pipe(Effect.flatMap(Effect.fromOption(() => new TransactCallbackNotInvokedError())), Effect.flatten);
36
37
  }, ServerSynchronizationContext.guard);
37
- const exit = yield* runMutation(mutators, mutation).pipe(ServerSynchronizationContext.finalize, Effect.provide([
38
+ const exit = yield* runMutation(mutators, transaction, mutation).pipe(ServerSynchronizationContext.finalize, Effect.provide([
38
39
  Layer.succeed(transaction[ServerTransactionCallbackSymbol], { transact }),
39
40
  ServerSynchronizationContext.layer,
40
- ]), Effect.exit);
41
+ ]), Effect.withSpan("zero.mutation.handle", {
42
+ attributes: {
43
+ "zero.mutator": mutation.name,
44
+ "zero.clientID": mutation.clientID,
45
+ "zero.mutationID": mutation.id,
46
+ },
47
+ }), Effect.exit);
41
48
  return yield* Deferred.poll(response).pipe(Effect.flatMap(Effect.fromOption), Effect.catchTag("NoSuchElementError", () => Effect.failCause(Exit.isFailure(exit) ? exit.cause : Cause.empty)), Effect.flatten);
42
49
  }).pipe(Effect.catchCause((cause) => {
43
50
  const error = cause.pipe(Cause.squash, (squashed) => TransactInternalError.is(squashed) ? Cause.squash(squashed.cause) : squashed);
@@ -51,12 +58,21 @@ export const handleMutate = Effect.fn(function* ({ transaction, mutators, query,
51
58
  catch: (e) => new HandleMutateError({ cause: Cause.fail(e) }),
52
59
  });
53
60
  });
54
- const runMutation = Effect.fn(function* (mutators, mutation) {
55
- // Support both "namespace|name" and "namespace.name" formats, and single-segment names.
56
- const [namespace, name] = mutation.name.includes("|") ? Str.split(mutation.name, "|") : Str.split(mutation.name, ".");
57
- const mutator = yield* Fn.pipe(mutators, Rec.get(namespace), Option.flatMap((mutator) => Match.value([mutator, name]).pipe(Match.when([Predicate.isObject, Predicate.isString], ([mutator, name]) => Rec.get(name)(mutator)), Match.when([Predicate.isFunction, Predicate.isUndefined], ([mutator]) => Option.some(mutator)), Match.orElse(() => Option.none()))), Effect.fromOption(() => new MutatorNotFoundError({ name: mutation.name })));
58
- const args = yield* Schema.decodeUnknownEffect(mutator[Mutators.MutatorSchemaSymbol])(mutation.args[0]).pipe(Effect.catchTag("SchemaError", (e) => Effect.fail(new ServerArgsParseError({ cause: Cause.fail(e) }))));
59
- return yield* mutator(args);
61
+ /**
62
+ * Runs a mutation: its override if it has one, or else its shared body in a server transaction. Like upstream, names
63
+ * are split on "." or "|" (the separator of Zero's legacy custom mutators), at any depth. Their services aren't tracked
64
+ * from here on: `handleMutate` already requires every implementation's.
65
+ */
66
+ const runMutation = Effect.fn(function* (mutators, transaction, mutation) {
67
+ const { registry, overrides } = Rec.map(mutators, (root) => Arr.reduce(Str.split(mutation.name, /[.|]/), Option.some(root), (tree, key) =>
68
+ // Only an object has keys to walk into; the checks below make sure the walk ended at a mutator.
69
+ tree.pipe(Option.filter(Predicate.isObject), Option.flatMap(Rec.get(key)))));
70
+ const mutator = yield* registry.pipe(Option.filter((u) => Predicate.isFunction(u) && Predicate.hasProperty(u, "mutatorName")), Effect.fromOption(() => new MutatorNotFoundError({ name: mutation.name })));
71
+ const args = yield* Schema.decodeUnknownEffect(mutator.payload)(mutation.args[0]).pipe(Effect.catchTag("SchemaError", (e) => Effect.fail(new ServerArgsParseError({ cause: Cause.fail(e) }))));
72
+ return yield* overrides.pipe(Option.filter((u) => Predicate.isFunction(u)), Option.match({
73
+ onNone: () => transaction.execute(mutator.mutator(args)),
74
+ onSome: (run) => run(args),
75
+ }));
60
76
  });
61
77
  export const makeApplicationError = (cause) => {
62
78
  const error = Cause.squash(cause);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}