@gaganref/confect-server 10.3.1-fork.42 → 10.3.1-fork.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/ActionCall.d.ts.map +1 -1
  2. package/dist/ActionCall.js +5 -5
  3. package/dist/ActionCall.js.map +1 -1
  4. package/dist/ActionRunner.d.ts +1 -1
  5. package/dist/ActionRunner.d.ts.map +1 -1
  6. package/dist/ActionRunner.js +2 -2
  7. package/dist/ActionRunner.js.map +1 -1
  8. package/dist/Callback.js +1 -1
  9. package/dist/GroupImpl.js +1 -1
  10. package/dist/HttpRouter.js +1 -1
  11. package/dist/MutationRunner.d.ts +1 -1
  12. package/dist/MutationRunner.d.ts.map +1 -1
  13. package/dist/MutationRunner.js +2 -2
  14. package/dist/MutationRunner.js.map +1 -1
  15. package/dist/MutationTransactionContext.d.ts.map +1 -1
  16. package/dist/MutationTransactionContext.js +2 -1
  17. package/dist/MutationTransactionContext.js.map +1 -1
  18. package/dist/QueryStream.js +2 -2
  19. package/dist/QueryStreamKeyValues.js +1 -1
  20. package/dist/QueryStreamReadBudget.js +2 -2
  21. package/dist/RegisteredConvexFunction.d.ts.map +1 -1
  22. package/dist/RegisteredConvexFunction.js +3 -3
  23. package/dist/RegisteredConvexFunction.js.map +1 -1
  24. package/dist/RegisteredFunction.d.ts +14 -3
  25. package/dist/RegisteredFunction.d.ts.map +1 -1
  26. package/dist/RegisteredFunction.js +38 -16
  27. package/dist/RegisteredFunction.js.map +1 -1
  28. package/dist/Scheduler.d.ts.map +1 -1
  29. package/dist/Scheduler.js +9 -8
  30. package/dist/Scheduler.js.map +1 -1
  31. package/dist/internal/reservedArgument.d.ts +8 -0
  32. package/dist/internal/reservedArgument.d.ts.map +1 -0
  33. package/dist/internal/reservedArgument.js +30 -0
  34. package/dist/internal/reservedArgument.js.map +1 -0
  35. package/package.json +2 -2
  36. package/src/ActionCall.ts +4 -3
  37. package/src/ActionRunner.ts +3 -2
  38. package/src/MutationRunner.ts +3 -2
  39. package/src/MutationTransactionContext.ts +2 -1
  40. package/src/RegisteredConvexFunction.ts +5 -1
  41. package/src/RegisteredFunction.ts +57 -12
  42. package/src/Scheduler.ts +13 -16
  43. package/src/internal/reservedArgument.ts +56 -0
package/src/Scheduler.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import * as ReservedArgument from "./internal/reservedArgument.js";
1
2
  import type * as IdScope from "@confect/core/IdScope";
2
3
  import { Ref } from "@confect/core";
3
4
  import type { GenericId } from "@confect/core/GenericId";
@@ -12,38 +13,34 @@ import * as Layer from "effect/Layer";
12
13
  const make = (scheduler: ConvexScheduler) => ({
13
14
  cancel: (id: ConvexGenericId<"_scheduled_functions">) =>
14
15
  Effect.promise(() => scheduler.cancel(id)),
15
- runAfter: <Ref_ extends Ref.AnyMutation | Ref.AnyAction>(
16
- delay: Duration.Duration,
17
- ref: Ref_,
18
- ...args: Ref.OptionalArgs<Ref_>
19
- ) => {
16
+ runAfter: Effect.fn("Scheduler.runAfter")(function* <
17
+ Ref_ extends Ref.AnyMutation | Ref.AnyAction,
18
+ >(delay: Duration.Duration, ref: Ref_, ...args: Ref.OptionalArgs<Ref_>) {
20
19
  const delayMs = Duration.toMillis(delay);
21
20
  const functionReference = Ref.getFunctionReference(ref);
22
- const encodedArgs = Ref.encodeArgsSync(
21
+ const encodedArgs = yield* ReservedArgument.encodeArgs(
23
22
  ref,
24
23
  (args[0] ?? {}) as Ref.Args<Ref_>,
25
24
  );
26
25
 
27
- return Effect.promise(() =>
26
+ return yield* Effect.promise(() =>
28
27
  scheduler.runAfter(delayMs, functionReference, encodedArgs),
29
28
  );
30
- },
31
- runAt: <Ref_ extends Ref.AnyMutation | Ref.AnyAction>(
32
- dateTime: DateTime.DateTime,
33
- ref: Ref_,
34
- ...args: Ref.OptionalArgs<Ref_>
35
- ) => {
29
+ }),
30
+ runAt: Effect.fn("Scheduler.runAt")(function* <
31
+ Ref_ extends Ref.AnyMutation | Ref.AnyAction,
32
+ >(dateTime: DateTime.DateTime, ref: Ref_, ...args: Ref.OptionalArgs<Ref_>) {
36
33
  const timestamp = DateTime.toEpochMillis(dateTime);
37
34
  const functionReference = Ref.getFunctionReference(ref);
38
- const encodedArgs = Ref.encodeArgsSync(
35
+ const encodedArgs = yield* ReservedArgument.encodeArgs(
39
36
  ref,
40
37
  (args[0] ?? {}) as Ref.Args<Ref_>,
41
38
  );
42
39
 
43
- return Effect.promise(() =>
40
+ return yield* Effect.promise(() =>
44
41
  scheduler.runAt(timestamp, functionReference, encodedArgs),
45
42
  );
46
- },
43
+ }),
47
44
  });
48
45
 
49
46
  export const Scheduler = Context.Service<ReturnType<typeof make>>(
@@ -0,0 +1,56 @@
1
+ import { convexToJson, type Value } from "convex/values";
2
+ import * as Ref from "@confect/core/Ref";
3
+ import * as Context from "effect/Context";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Tracer from "effect/Tracer";
6
+
7
+ export const Forward = Context.Reference<
8
+ ((span: Tracer.Span) => unknown) | undefined
9
+ >("@confect/server/RegisteredFunction/Forward", {
10
+ defaultValue: () => undefined,
11
+ });
12
+
13
+ const inject = (
14
+ ref: Ref.Any,
15
+ encoded: unknown,
16
+ context: Context.Context<never>,
17
+ ): unknown => {
18
+ if (ref.reservedArgument === undefined || ref.functionType === "query")
19
+ return encoded;
20
+ const forward = Context.get(context, Forward);
21
+ const span = Context.getOrUndefined(context, Tracer.ParentSpan);
22
+ if (forward === undefined || span?._tag !== "Span") return encoded;
23
+ try {
24
+ const value = forward(span);
25
+ if (value === undefined) return encoded;
26
+ convexToJson(value as Value);
27
+ return {
28
+ ...(encoded as Record<string, unknown>),
29
+ [ref.reservedArgument]: value,
30
+ };
31
+ } catch {
32
+ return encoded;
33
+ }
34
+ };
35
+
36
+ export const runWithCodec = <Ref_ extends Ref.Any>(
37
+ ref: Ref_,
38
+ args: Ref.Args<Ref_>,
39
+ call: (
40
+ native: Ref.FunctionReference<Ref_>,
41
+ encoded: unknown,
42
+ ) => PromiseLike<unknown>,
43
+ ) =>
44
+ Effect.withFiber((fiber) =>
45
+ Ref.runWithCodec(ref, args, (native, encoded) =>
46
+ call(native, inject(ref, encoded, fiber.context)),
47
+ ),
48
+ );
49
+
50
+ export const encodeArgs = <Ref_ extends Ref.Any>(
51
+ ref: Ref_,
52
+ args: Ref.Args<Ref_>,
53
+ ) =>
54
+ Effect.withFiberSucceed((fiber) =>
55
+ inject(ref, Ref.encodeArgsSync(ref, args), fiber.context),
56
+ );