@gaganref/confect-server 10.3.1-fork.5 → 10.3.1-fork.51

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 (147) hide show
  1. package/dist/ActionCall.d.ts +30 -0
  2. package/dist/ActionCall.d.ts.map +1 -0
  3. package/dist/ActionCall.js +41 -0
  4. package/dist/ActionCall.js.map +1 -0
  5. package/dist/ActionRunner.d.ts +1 -1
  6. package/dist/ActionRunner.d.ts.map +1 -1
  7. package/dist/ActionRunner.js +3 -3
  8. package/dist/ActionRunner.js.map +1 -1
  9. package/dist/AiGatewayDecisionClient.js +1 -1
  10. package/dist/AiGatewayLanguageClient.js +1 -1
  11. package/dist/Auth.d.ts +13 -1
  12. package/dist/Auth.d.ts.map +1 -1
  13. package/dist/Auth.js +13 -3
  14. package/dist/Auth.js.map +1 -1
  15. package/dist/Callback.js +4 -4
  16. package/dist/ConvexConfigProvider.js +2 -2
  17. package/dist/ConvexFunctionDefinitions.d.ts.map +1 -1
  18. package/dist/ConvexFunctionDefinitions.js +4 -4
  19. package/dist/ConvexFunctionDefinitions.js.map +1 -1
  20. package/dist/ConvexLogger.js +1 -1
  21. package/dist/CronJobs.js +6 -6
  22. package/dist/DatabaseSchema.js +2 -2
  23. package/dist/DatabaseWriter.d.ts +36 -2
  24. package/dist/DatabaseWriter.d.ts.map +1 -1
  25. package/dist/DatabaseWriter.js +55 -8
  26. package/dist/DatabaseWriter.js.map +1 -1
  27. package/dist/ExecutionMetadata.js +1 -1
  28. package/dist/FunctionImpl.js +2 -2
  29. package/dist/FunctionRegistryItem.d.ts +1 -0
  30. package/dist/FunctionRegistryItem.d.ts.map +1 -1
  31. package/dist/FunctionRegistryItem.js +2 -1
  32. package/dist/FunctionRegistryItem.js.map +1 -1
  33. package/dist/GroupImpl.d.ts +21 -2
  34. package/dist/GroupImpl.d.ts.map +1 -1
  35. package/dist/GroupImpl.js +21 -22
  36. package/dist/GroupImpl.js.map +1 -1
  37. package/dist/GroupRegistry.d.ts +1 -0
  38. package/dist/GroupRegistry.d.ts.map +1 -1
  39. package/dist/GroupRegistry.js +10 -3
  40. package/dist/GroupRegistry.js.map +1 -1
  41. package/dist/Handler.d.ts +8 -4
  42. package/dist/Handler.d.ts.map +1 -1
  43. package/dist/Handler.js.map +1 -1
  44. package/dist/HttpRouter.d.ts +2 -0
  45. package/dist/HttpRouter.d.ts.map +1 -1
  46. package/dist/HttpRouter.js +17 -8
  47. package/dist/HttpRouter.js.map +1 -1
  48. package/dist/MiddlewareImpl.js +1 -1
  49. package/dist/MutationRunner.d.ts +1 -1
  50. package/dist/MutationRunner.d.ts.map +1 -1
  51. package/dist/MutationRunner.js +3 -3
  52. package/dist/MutationRunner.js.map +1 -1
  53. package/dist/MutationTransactionContext.d.ts.map +1 -1
  54. package/dist/MutationTransactionContext.js +4 -3
  55. package/dist/MutationTransactionContext.js.map +1 -1
  56. package/dist/OfficialComponent.d.ts +60 -0
  57. package/dist/OfficialComponent.d.ts.map +1 -0
  58. package/dist/OfficialComponent.js +71 -0
  59. package/dist/OfficialComponent.js.map +1 -0
  60. package/dist/QueryInitializer.js +2 -2
  61. package/dist/QueryRunner.js +2 -2
  62. package/dist/QueryStream.d.ts +120 -12
  63. package/dist/QueryStream.d.ts.map +1 -1
  64. package/dist/QueryStream.js +143 -41
  65. package/dist/QueryStream.js.map +1 -1
  66. package/dist/QueryStreamCursor.js +1 -1
  67. package/dist/QueryStreamIndexPrefix.js +1 -1
  68. package/dist/QueryStreamIndexRange.js +2 -2
  69. package/dist/QueryStreamKey.js +1 -1
  70. package/dist/QueryStreamKeyBounds.js +2 -2
  71. package/dist/QueryStreamKeyLayout.js +2 -2
  72. package/dist/QueryStreamKeyValues.js +2 -2
  73. package/dist/QueryStreamPagination.js +1 -1
  74. package/dist/QueryStreamReadBudget.d.ts +3 -2
  75. package/dist/QueryStreamReadBudget.d.ts.map +1 -1
  76. package/dist/QueryStreamReadBudget.js +8 -5
  77. package/dist/QueryStreamReadBudget.js.map +1 -1
  78. package/dist/QueryTransactionContext.js +2 -2
  79. package/dist/RegisteredConvexFunction.d.ts +10 -5
  80. package/dist/RegisteredConvexFunction.d.ts.map +1 -1
  81. package/dist/RegisteredConvexFunction.js +45 -29
  82. package/dist/RegisteredConvexFunction.js.map +1 -1
  83. package/dist/RegisteredFunction.d.ts +39 -22
  84. package/dist/RegisteredFunction.d.ts.map +1 -1
  85. package/dist/RegisteredFunction.js +155 -42
  86. package/dist/RegisteredFunction.js.map +1 -1
  87. package/dist/RegisteredNodeFunction.d.ts +1 -1
  88. package/dist/RegisteredNodeFunction.d.ts.map +1 -1
  89. package/dist/RegisteredNodeFunction.js +10 -6
  90. package/dist/RegisteredNodeFunction.js.map +1 -1
  91. package/dist/RegistryItems.d.ts +7 -0
  92. package/dist/RegistryItems.d.ts.map +1 -1
  93. package/dist/RegistryItems.js +8 -3
  94. package/dist/RegistryItems.js.map +1 -1
  95. package/dist/RequestMetadata.js +1 -1
  96. package/dist/Scheduler.d.ts.map +1 -1
  97. package/dist/Scheduler.js +11 -10
  98. package/dist/Scheduler.js.map +1 -1
  99. package/dist/Storage.js +1 -1
  100. package/dist/StorageActionWriter.js +1 -1
  101. package/dist/StorageReader.js +1 -1
  102. package/dist/StorageWriter.js +1 -1
  103. package/dist/TransactionMetadata.js +1 -1
  104. package/dist/VectorSearch.js +1 -1
  105. package/dist/index.d.ts +2 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +20 -18
  108. package/dist/internal/AiGatewayDecisionClient.js +1 -1
  109. package/dist/internal/AiGatewayLanguageClient.js +1 -1
  110. package/dist/internal/AiGatewayServiceToken.js +1 -1
  111. package/dist/internal/DocumentPatch.d.ts +16 -0
  112. package/dist/internal/DocumentPatch.d.ts.map +1 -0
  113. package/dist/internal/DocumentPatch.js +36 -0
  114. package/dist/internal/DocumentPatch.js.map +1 -0
  115. package/dist/internal/observability.d.ts +5 -0
  116. package/dist/internal/observability.d.ts.map +1 -0
  117. package/dist/internal/observability.js +21 -0
  118. package/dist/internal/observability.js.map +1 -0
  119. package/dist/internal/reservedArgument.d.ts +8 -0
  120. package/dist/internal/reservedArgument.d.ts.map +1 -0
  121. package/dist/internal/reservedArgument.js +30 -0
  122. package/dist/internal/reservedArgument.js.map +1 -0
  123. package/package.json +5 -5
  124. package/src/ActionCall.ts +83 -0
  125. package/src/ActionRunner.ts +3 -2
  126. package/src/Auth.ts +23 -1
  127. package/src/ConvexFunctionDefinitions.ts +2 -1
  128. package/src/DatabaseWriter.ts +183 -25
  129. package/src/FunctionRegistryItem.ts +4 -0
  130. package/src/GroupImpl.ts +61 -8
  131. package/src/GroupRegistry.ts +7 -3
  132. package/src/Handler.ts +21 -5
  133. package/src/HttpRouter.ts +54 -4
  134. package/src/MutationRunner.ts +3 -2
  135. package/src/MutationTransactionContext.ts +2 -1
  136. package/src/OfficialComponent.ts +167 -0
  137. package/src/QueryStream.ts +391 -61
  138. package/src/QueryStreamReadBudget.ts +19 -6
  139. package/src/RegisteredConvexFunction.ts +35 -2
  140. package/src/RegisteredFunction.ts +251 -45
  141. package/src/RegisteredNodeFunction.ts +11 -1
  142. package/src/RegistryItems.ts +31 -0
  143. package/src/Scheduler.ts +13 -16
  144. package/src/index.ts +2 -0
  145. package/src/internal/DocumentPatch.ts +87 -0
  146. package/src/internal/observability.ts +27 -0
  147. package/src/internal/reservedArgument.ts +56 -0
@@ -0,0 +1,30 @@
1
+ import type * as DatabaseSchema from "./DatabaseSchema.js";
2
+ import * as MiddlewareImpl from "./MiddlewareImpl.js";
3
+ declare const ActionCallAlreadyUsed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
4
+ readonly _tag: "ActionCallAlreadyUsed";
5
+ } & Readonly<A>;
6
+ export declare class ActionCallAlreadyUsed extends ActionCallAlreadyUsed_base<{}> {
7
+ }
8
+ declare const ActionCallNotUsed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
9
+ readonly _tag: "ActionCallNotUsed";
10
+ } & Readonly<A>;
11
+ export declare class ActionCallNotUsed extends ActionCallNotUsed_base<{}> {
12
+ }
13
+ declare const MissingFunctionType_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
14
+ readonly _tag: "MissingFunctionType";
15
+ } & Readonly<A>;
16
+ export declare class MissingFunctionType extends MissingFunctionType_base<{}> {
17
+ }
18
+ declare const NestedActionNotAllowed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
19
+ readonly _tag: "NestedActionNotAllowed";
20
+ } & Readonly<A>;
21
+ export declare class NestedActionNotAllowed extends NestedActionNotAllowed_base<{}> {
22
+ }
23
+ declare const SchedulingNotAllowed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
24
+ readonly _tag: "SchedulingNotAllowed";
25
+ } & Readonly<A>;
26
+ export declare class SchedulingNotAllowed extends SchedulingNotAllowed_base<{}> {
27
+ }
28
+ export declare const layer: <S extends DatabaseSchema.AnyWithProps>(schema: S) => import("effect/Layer").Layer<MiddlewareImpl.MiddlewareImpl<"@confect/core/ActionCall/Middleware">, never, never>;
29
+ export {};
30
+ //# sourceMappingURL=ActionCall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionCall.d.ts","sourceRoot":"","sources":["../src/ActionCall.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAG3D,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;;;;AAKtD,qBAAa,qBAAsB,SAAQ,2BAEzC,EAAE,CAAC;CAAG;;;;AACR,qBAAa,iBAAkB,SAAQ,uBAErC,EAAE,CAAC;CAAG;;;;AACR,qBAAa,mBAAoB,SAAQ,yBAEvC,EAAE,CAAC;CAAG;;;;AACR,qBAAa,sBAAuB,SAAQ,4BAE1C,EAAE,CAAC;CAAG;;;;AAER,qBAAa,oBAAqB,SAAQ,0BAExC,EAAE,CAAC;CAAG;AAER,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,cAAc,CAAC,YAAY,UAAU,CAAC,qHAgDnE,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { runWithCodec } from "./internal/reservedArgument.js";
3
+ import { ActionCtx } from "./ActionCtx.js";
4
+ import { ActionRunner } from "./ActionRunner.js";
5
+ import { make } from "./MiddlewareImpl.js";
6
+ import { MutationRunner } from "./MutationRunner.js";
7
+ import { QueryRunner } from "./QueryRunner.js";
8
+ import { Scheduler } from "./Scheduler.js";
9
+ import * as Context from "effect/Context";
10
+ import * as Effect from "effect/Effect";
11
+ import * as ActionCall from "@confect/core/ActionCall";
12
+ import * as Data from "effect/Data";
13
+ //#region src/ActionCall.ts
14
+ var ActionCall_exports = /* @__PURE__ */ __exportAll({
15
+ ActionCallAlreadyUsed: () => ActionCallAlreadyUsed,
16
+ ActionCallNotUsed: () => ActionCallNotUsed,
17
+ MissingFunctionType: () => MissingFunctionType,
18
+ NestedActionNotAllowed: () => NestedActionNotAllowed,
19
+ SchedulingNotAllowed: () => SchedulingNotAllowed,
20
+ layer: () => layer
21
+ });
22
+ var ActionCallAlreadyUsed = class extends Data.TaggedError("ActionCallAlreadyUsed") {};
23
+ var ActionCallNotUsed = class extends Data.TaggedError("ActionCallNotUsed") {};
24
+ var MissingFunctionType = class extends Data.TaggedError("MissingFunctionType") {};
25
+ var NestedActionNotAllowed = class extends Data.TaggedError("NestedActionNotAllowed") {};
26
+ var SchedulingNotAllowed = class extends Data.TaggedError("SchedulingNotAllowed") {};
27
+ const layer = (schema) => make(schema, ActionCall.Middleware, (effect) => Effect.gen(function* () {
28
+ const ctx = yield* ActionCtx();
29
+ let claimed = false;
30
+ const call = (ref, ...args) => Effect.suspend(() => {
31
+ if (claimed) return Effect.die(new ActionCallAlreadyUsed());
32
+ claimed = true;
33
+ if (ref.functionType !== "query" && ref.functionType !== "mutation") return Effect.die(new MissingFunctionType());
34
+ return runWithCodec(ref, args[0] ?? {}, (native, encoded) => ref.functionType === "query" ? ctx.runQuery(native, encoded) : ctx.runMutation(native, encoded));
35
+ }).pipe(Effect.withSpan("ActionCall.call"));
36
+ return yield* effect.pipe(Effect.provideService(ActionCall.ActionCall, call), Effect.updateContext((context) => Context.omit(QueryRunner, MutationRunner, ActionRunner, ActionCtx(), Scheduler)(context)));
37
+ }));
38
+ //#endregion
39
+ export { ActionCallAlreadyUsed, ActionCallNotUsed, ActionCall_exports, MissingFunctionType, NestedActionNotAllowed, SchedulingNotAllowed, layer };
40
+
41
+ //# sourceMappingURL=ActionCall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionCall.js","names":["MiddlewareImpl.make","ActionCtx.ActionCtx","ReservedArgument.runWithCodec","QueryRunner.QueryRunner","MutationRunner.MutationRunner","ActionRunner.ActionRunner","Scheduler.Scheduler"],"sources":["../src/ActionCall.ts"],"sourcesContent":["import * as ReservedArgument from \"./internal/reservedArgument.js\";\nimport * as ActionCall from \"@confect/core/ActionCall\";\nimport type * as Ref from \"@confect/core/Ref\";\nimport type { FunctionReference } from \"convex/server\";\nimport * as Context from \"effect/Context\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as ActionCtx from \"./ActionCtx.js\";\nimport * as ActionRunner from \"./ActionRunner.js\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport type * as DataModel from \"./DataModel.js\";\nimport type * as Handler from \"./Handler.js\";\nimport * as MiddlewareImpl from \"./MiddlewareImpl.js\";\nimport * as MutationRunner from \"./MutationRunner.js\";\nimport * as QueryRunner from \"./QueryRunner.js\";\nimport * as Scheduler from \"./Scheduler.js\";\n\nexport class ActionCallAlreadyUsed extends Data.TaggedError(\n \"ActionCallAlreadyUsed\",\n)<{}> {}\nexport class ActionCallNotUsed extends Data.TaggedError(\n \"ActionCallNotUsed\",\n)<{}> {}\nexport class MissingFunctionType extends Data.TaggedError(\n \"MissingFunctionType\",\n)<{}> {}\nexport class NestedActionNotAllowed extends Data.TaggedError(\n \"NestedActionNotAllowed\",\n)<{}> {}\n\nexport class SchedulingNotAllowed extends Data.TaggedError(\n \"SchedulingNotAllowed\",\n)<{}> {}\n\nexport const layer = <S extends DatabaseSchema.AnyWithProps>(schema: S) =>\n MiddlewareImpl.make(schema, ActionCall.Middleware, (effect) =>\n Effect.gen(function* () {\n const ctx = yield* ActionCtx.ActionCtx<\n DataModel.ToConvex<DataModel.FromSchema<S>>,\n DatabaseSchema.Scope<S>\n >();\n let claimed = false;\n const call: ActionCall.Call = <\n Target extends Ref.AnyQuery | Ref.AnyMutation,\n >(\n ref: Target,\n ...args: Ref.OptionalArgs<NoInfer<Target>>\n ) =>\n Effect.suspend(() => {\n if (claimed) return Effect.die(new ActionCallAlreadyUsed());\n claimed = true;\n if (ref.functionType !== \"query\" && ref.functionType !== \"mutation\")\n return Effect.die(new MissingFunctionType());\n return ReservedArgument.runWithCodec(\n ref,\n (args[0] ?? {}) as Ref.Args<Target>,\n (native, encoded) =>\n ref.functionType === \"query\"\n ? ctx.runQuery(\n native as FunctionReference<\"query\">,\n encoded as never,\n )\n : ctx.runMutation(\n native as FunctionReference<\"mutation\">,\n encoded as never,\n ),\n );\n }).pipe(Effect.withSpan(\"ActionCall.call\"));\n return yield* effect.pipe(\n Effect.provideService(ActionCall.ActionCall, call),\n Effect.updateContext(\n (context: Context.Context<Handler.ActionServices<S>>) =>\n Context.omit(\n QueryRunner.QueryRunner,\n MutationRunner.MutationRunner,\n ActionRunner.ActionRunner,\n ActionCtx.ActionCtx(),\n Scheduler.Scheduler,\n )(context),\n ),\n );\n }),\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,IAAa,wBAAb,cAA2C,KAAK,YAC9C,uBACF,CAAC,CAAK,CAAC;AACP,IAAa,oBAAb,cAAuC,KAAK,YAC1C,mBACF,CAAC,CAAK,CAAC;AACP,IAAa,sBAAb,cAAyC,KAAK,YAC5C,qBACF,CAAC,CAAK,CAAC;AACP,IAAa,yBAAb,cAA4C,KAAK,YAC/C,wBACF,CAAC,CAAK,CAAC;AAEP,IAAa,uBAAb,cAA0C,KAAK,YAC7C,sBACF,CAAC,CAAK,CAAC;AAEP,MAAa,SAAgD,WAC3DA,KAAoB,QAAQ,WAAW,aAAa,WAClD,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,OAAOC,UAGjB;CACF,IAAI,UAAU;CACd,MAAM,QAGJ,KACA,GAAG,SAEH,OAAO,cAAc;EACnB,IAAI,SAAS,OAAO,OAAO,IAAI,IAAI,sBAAsB,CAAC;EAC1D,UAAU;EACV,IAAI,IAAI,iBAAiB,WAAW,IAAI,iBAAiB,YACvD,OAAO,OAAO,IAAI,IAAI,oBAAoB,CAAC;EAC7C,OAAOC,aACL,KACC,KAAK,MAAM,CAAC,IACZ,QAAQ,YACP,IAAI,iBAAiB,UACjB,IAAI,SACF,QACA,OACF,IACA,IAAI,YACF,QACA,OACF,CACR;CACF,CAAC,CAAC,CAAC,KAAK,OAAO,SAAS,iBAAiB,CAAC;CAC5C,OAAO,OAAO,OAAO,KACnB,OAAO,eAAe,WAAW,YAAY,IAAI,GACjD,OAAO,eACJ,YACC,QAAQ,KACNC,aACAC,gBACAC,cACAJ,UAAoB,GACpBK,SACF,CAAC,CAAC,OAAO,CACb,CACF;AACF,CAAC,CACH"}
@@ -1,4 +1,4 @@
1
- import * as Ref from "@confect/core/Ref";
1
+ import type * as Ref from "@confect/core/Ref";
2
2
  import { type GenericActionCtx } from "convex/server";
3
3
  import * as Effect from "effect/Effect";
4
4
  import * as Context from "effect/Context";
@@ -1 +1 @@
1
- {"version":3,"file":"ActionRunner.d.ts","sourceRoot":"","sources":["../src/ActionRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAwB7C,eAAO,MAAM,YAAY;gBAjBX,MAAM,SAAS,GAAG,CAAC,SAAS,UAC9B,MAAM,WACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CACvC;;;EAaF,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,UAAU,CAAC;AAE1D,eAAO,MAAM,KAAK,cAAe,gBAAgB,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;gBAtBrD,MAAM,SAAS,GAAG,CAAC,SAAS,UAC9B,MAAM,WACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CACvC;gBAiB2C,CAAC"}
1
+ {"version":3,"file":"ActionRunner.d.ts","sourceRoot":"","sources":["../src/ActionRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAwB7C,eAAO,MAAM,YAAY;gBAjBX,MAAM,SAAS,GAAG,CAAC,SAAS,UAC9B,MAAM,WACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CACvC;;;EAaF,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,UAAU,CAAC;AAE1D,eAAO,MAAM,KAAK,cAAe,gBAAgB,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;gBAtBrD,MAAM,SAAS,GAAG,CAAC,SAAS,UAC9B,MAAM,WACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CACvC;gBAiB2C,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { runWithCodec } from "./internal/reservedArgument.js";
2
3
  import * as Context from "effect/Context";
3
- import * as Layer from "effect/Layer";
4
- import * as Ref from "@confect/core/Ref";
5
4
  import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
6
  //#region src/ActionRunner.ts
7
7
  var ActionRunner_exports = /* @__PURE__ */ __exportAll({
8
8
  ActionRunner: () => ActionRunner,
9
9
  layer: () => layer
10
10
  });
11
11
  const run = Effect.fn("ActionRunner.runAction")((effect) => effect);
12
- const make = (runAction) => ({ runAction: (action, ...args) => run(Ref.runWithCodec(action, args[0] ?? {}, (functionReference, encodedArgs) => runAction(functionReference, encodedArgs))) });
12
+ const make = (runAction) => ({ runAction: (action, ...args) => run(runWithCodec(action, args[0] ?? {}, (functionReference, encodedArgs) => runAction(functionReference, encodedArgs))) });
13
13
  const ActionRunner = Context.Service("@confect/server/ActionRunner");
14
14
  const layer = (runAction) => Layer.succeed(ActionRunner, make(runAction));
15
15
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ActionRunner.js","names":[],"sources":["../src/ActionRunner.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { type GenericActionCtx } from \"convex/server\";\nimport * as Effect from \"effect/Effect\";\nimport * as Context from \"effect/Context\";\nimport * as Layer from \"effect/Layer\";\nimport type * as Schema from \"effect/Schema\";\n\nconst run = Effect.fn(\"ActionRunner.runAction\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nconst make = (runAction: GenericActionCtx<any>[\"runAction\"]) => ({\n runAction: <Action extends Ref.AnyAction>(\n action: Action,\n ...args: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | Schema.SchemaError\n > =>\n run(\n Ref.runWithCodec(\n action,\n (args[0] ?? {}) as Ref.Args<Action>,\n (functionReference, encodedArgs) =>\n runAction(functionReference, encodedArgs),\n ),\n ),\n});\n\nexport const ActionRunner = Context.Service<ReturnType<typeof make>>(\n \"@confect/server/ActionRunner\",\n);\nexport type ActionRunner = typeof ActionRunner.Identifier;\n\nexport const layer = (runAction: GenericActionCtx<any>[\"runAction\"]) =>\n Layer.succeed(ActionRunner, make(runAction));\n"],"mappings":";;;;;;;;;;AAOA,MAAM,MAAM,OAAO,GAAG,wBAAwB,CAAC,EACtC,WAAqD,MAC9D;AAEA,MAAM,QAAQ,eAAmD,EAC/D,YACE,QACA,GAAG,SAKH,IACE,IAAI,aACF,QACC,KAAK,MAAM,CAAC,IACZ,mBAAmB,gBAClB,UAAU,mBAAmB,WAAW,CAC5C,CACF,EACJ;AAEA,MAAa,eAAe,QAAQ,QAClC,8BACF;AAGA,MAAa,SAAS,cACpB,MAAM,QAAQ,cAAc,KAAK,SAAS,CAAC"}
1
+ {"version":3,"file":"ActionRunner.js","names":["ReservedArgument.runWithCodec"],"sources":["../src/ActionRunner.ts"],"sourcesContent":["import * as ReservedArgument from \"./internal/reservedArgument.js\";\nimport type * as Ref from \"@confect/core/Ref\";\nimport { type GenericActionCtx } from \"convex/server\";\nimport * as Effect from \"effect/Effect\";\nimport * as Context from \"effect/Context\";\nimport * as Layer from \"effect/Layer\";\nimport type * as Schema from \"effect/Schema\";\n\nconst run = Effect.fn(\"ActionRunner.runAction\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nconst make = (runAction: GenericActionCtx<any>[\"runAction\"]) => ({\n runAction: <Action extends Ref.AnyAction>(\n action: Action,\n ...args: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | Schema.SchemaError\n > =>\n run(\n ReservedArgument.runWithCodec(\n action,\n (args[0] ?? {}) as Ref.Args<Action>,\n (functionReference, encodedArgs) =>\n runAction(functionReference, encodedArgs),\n ),\n ),\n});\n\nexport const ActionRunner = Context.Service<ReturnType<typeof make>>(\n \"@confect/server/ActionRunner\",\n);\nexport type ActionRunner = typeof ActionRunner.Identifier;\n\nexport const layer = (runAction: GenericActionCtx<any>[\"runAction\"]) =>\n Layer.succeed(ActionRunner, make(runAction));\n"],"mappings":";;;;;;;;;;AAQA,MAAM,MAAM,OAAO,GAAG,wBAAwB,CAAC,EACtC,WAAqD,MAC9D;AAEA,MAAM,QAAQ,eAAmD,EAC/D,YACE,QACA,GAAG,SAKH,IACEA,aACE,QACC,KAAK,MAAM,CAAC,IACZ,mBAAmB,gBAClB,UAAU,mBAAmB,WAAW,CAC5C,CACF,EACJ;AAEA,MAAa,eAAe,QAAQ,QAClC,8BACF;AAGA,MAAa,SAAS,cACpB,MAAM,QAAQ,cAAc,KAAK,SAAS,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import { AiGatewayDisabled, AiGatewayError, AiGatewayUnavailable, layer as layer$1 } from "./internal/AiGatewayServiceToken.js";
3
3
  import { layer as layer$2, make as make$1 } from "./internal/AiGatewayDecisionClient.js";
4
- import * as Layer from "effect/Layer";
5
4
  import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
6
  import * as OpenRouterClient from "@effect/ai-openrouter/OpenRouterClient";
7
7
  //#region src/AiGatewayDecisionClient.ts
8
8
  var AiGatewayDecisionClient_exports = /* @__PURE__ */ __exportAll({
@@ -1,8 +1,8 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import { AiGatewayDisabled, AiGatewayError, AiGatewayUnavailable, layer as layer$1 } from "./internal/AiGatewayServiceToken.js";
3
3
  import { layer as layer$2, make as make$1 } from "./internal/AiGatewayLanguageClient.js";
4
- import * as Layer from "effect/Layer";
5
4
  import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
6
  import * as OpenAiClient from "@effect/ai-openai-compat/OpenAiClient";
7
7
  //#region src/AiGatewayLanguageClient.ts
8
8
  var AiGatewayLanguageClient_exports = /* @__PURE__ */ __exportAll({
package/dist/Auth.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Auth as ConvexAuth } from "convex/server";
1
+ import type { Auth as ConvexAuth, MutationAuth as ConvexMutationAuth, SignJwtOptions } from "convex/server";
2
2
  import * as Context from "effect/Context";
3
3
  import * as Effect from "effect/Effect";
4
4
  import * as Layer from "effect/Layer";
@@ -10,6 +10,18 @@ declare const Auth_base: Context.ServiceClass<Auth, "@confect/server/Auth", {
10
10
  export declare class Auth extends Auth_base {
11
11
  }
12
12
  export declare const layer: (auth: ConvexAuth) => Layer.Layer<Auth, never, never>;
13
+ declare const MutationAuth_base: Context.ServiceClass<MutationAuth, "@confect/server/Auth/MutationAuth", {
14
+ readonly signJwt: (options: SignJwtOptions) => Effect.Effect<string>;
15
+ }>;
16
+ /**
17
+ * Mutation-only deployment signing, available in applications and components.
18
+ */
19
+ export declare class MutationAuth extends MutationAuth_base {
20
+ }
21
+ /**
22
+ * SDK rejections remain defects, as with the other native auth operations.
23
+ */
24
+ export declare const mutationLayer: (auth: ConvexMutationAuth) => Layer.Layer<MutationAuth, never, never>;
13
25
  export type ForTarget<Target extends DatabaseSchema.Target> = Target["kind"] extends "component" ? never : Auth;
14
26
  export declare const layerForTarget: <Target extends DatabaseSchema.Target>(target: Target, auth: ConvexAuth) => Layer.Layer<ForTarget<Target>>;
15
27
  declare const NoUserIdentityFoundError_base: Schema.Class<NoUserIdentityFoundError, Schema.TaggedStruct<"NoUserIdentityFoundError", {}>, import("effect/Cause").YieldableError>;
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;;;;AAgB3D,qBAAa,IAAK,SAAQ,SAEzB;CAAG;AAEJ,eAAO,MAAM,KAAK,SAAU,UAAU,oCAAoC,CAAC;AAE3E,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,cAAc,CAAC,MAAM,IACxD,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AAEpD,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,cAAc,CAAC,MAAM,UACzD,MAAM,QACR,UAAU,KACf,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAKK,CAAC;;AAEtC,qBAAa,wBAAyB,SAAQ,6BAG7C;IACC,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
1
+ {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,IAAI,UAAU,EAClB,YAAY,IAAI,kBAAkB,EAClC,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;;;;AAgB3D,qBAAa,IAAK,SAAQ,SAEzB;CAAG;AAEJ,eAAO,MAAM,KAAK,SAAU,UAAU,oCAAoC,CAAC;;sBAQrD,CAAC,OAAO,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;;AANxE;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBAKM;CAAG;AAE3C;;GAEG;AACH,eAAO,MAAM,aAAa,SAAU,kBAAkB,4CAGlD,CAAC;AAEL,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,cAAc,CAAC,MAAM,IACxD,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AAEpD,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,cAAc,CAAC,MAAM,UACzD,MAAM,QACR,UAAU,KACf,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAKK,CAAC;;AAEtC,qBAAa,wBAAyB,SAAQ,6BAG7C;IACC,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
package/dist/Auth.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import * as Context from "effect/Context";
3
- import * as Layer from "effect/Layer";
4
3
  import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
5
  import * as Schema from "effect/Schema";
6
6
  import { flow } from "effect/Function";
7
7
  import * as Match from "effect/Match";
@@ -9,9 +9,11 @@ import * as Option from "effect/Option";
9
9
  //#region src/Auth.ts
10
10
  var Auth_exports = /* @__PURE__ */ __exportAll({
11
11
  Auth: () => Auth,
12
+ MutationAuth: () => MutationAuth,
12
13
  NoUserIdentityFoundError: () => NoUserIdentityFoundError,
13
14
  layer: () => layer,
14
- layerForTarget: () => layerForTarget
15
+ layerForTarget: () => layerForTarget,
16
+ mutationLayer: () => mutationLayer
15
17
  });
16
18
  const make = (auth) => ({ getUserIdentity: Effect.promise(() => auth.getUserIdentity()).pipe(Effect.andThen(flow(Option.fromNullishOr, Option.match({
17
19
  onNone: () => Effect.fail(new NoUserIdentityFoundError()),
@@ -19,6 +21,14 @@ const make = (auth) => ({ getUserIdentity: Effect.promise(() => auth.getUserIden
19
21
  })))) });
20
22
  var Auth = class extends Context.Service()("@confect/server/Auth") {};
21
23
  const layer = (auth) => Layer.succeed(Auth, make(auth));
24
+ /**
25
+ * Mutation-only deployment signing, available in applications and components.
26
+ */
27
+ var MutationAuth = class extends Context.Service()("@confect/server/Auth/MutationAuth") {};
28
+ /**
29
+ * SDK rejections remain defects, as with the other native auth operations.
30
+ */
31
+ const mutationLayer = (auth) => Layer.succeed(MutationAuth, { signJwt: (options) => Effect.promise(() => auth.signJwt(options)) });
22
32
  const layerForTarget = (target, auth) => Match.value(target.kind).pipe(Match.when("app", () => layer(auth)), Match.when("component", () => Layer.empty), Match.exhaustive);
23
33
  var NoUserIdentityFoundError = class extends Schema.TaggedError()("NoUserIdentityFoundError", {}) {
24
34
  get message() {
@@ -26,6 +36,6 @@ var NoUserIdentityFoundError = class extends Schema.TaggedError()("NoUserIdentit
26
36
  }
27
37
  };
28
38
  //#endregion
29
- export { Auth, Auth_exports, NoUserIdentityFoundError, layer, layerForTarget };
39
+ export { Auth, Auth_exports, MutationAuth, NoUserIdentityFoundError, layer, layerForTarget, mutationLayer };
30
40
 
31
41
  //# sourceMappingURL=Auth.js.map
package/dist/Auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.js","names":[],"sources":["../src/Auth.ts"],"sourcesContent":["import type { Auth as ConvexAuth } from \"convex/server\";\nimport * as Context from \"effect/Context\";\nimport { flow } from \"effect/Function\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\n\nconst make = (auth: ConvexAuth) => ({\n getUserIdentity: Effect.promise(() => auth.getUserIdentity()).pipe(\n Effect.andThen(\n flow(\n Option.fromNullishOr,\n Option.match({\n onNone: () => Effect.fail(new NoUserIdentityFoundError()),\n onSome: Effect.succeed,\n }),\n ),\n ),\n ),\n});\n\nexport class Auth extends Context.Service<Auth, ReturnType<typeof make>>()(\n \"@confect/server/Auth\",\n) {}\n\nexport const layer = (auth: ConvexAuth) => Layer.succeed(Auth, make(auth));\n\nexport type ForTarget<Target extends DatabaseSchema.Target> =\n Target[\"kind\"] extends \"component\" ? never : Auth;\n\nexport const layerForTarget = <Target extends DatabaseSchema.Target>(\n target: Target,\n auth: ConvexAuth,\n): Layer.Layer<ForTarget<Target>> =>\n Match.value(target.kind).pipe(\n Match.when(\"app\", () => layer(auth)),\n Match.when(\"component\", () => Layer.empty),\n Match.exhaustive,\n ) as Layer.Layer<ForTarget<Target>>;\n\nexport class NoUserIdentityFoundError extends Schema.TaggedError<NoUserIdentityFoundError>()(\n \"NoUserIdentityFoundError\",\n {},\n) {\n override get message(): string {\n return \"No user identity found\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAUA,MAAM,QAAQ,UAAsB,EAClC,iBAAiB,OAAO,cAAc,KAAK,gBAAgB,CAAC,CAAC,CAAC,KAC5D,OAAO,QACL,KACE,OAAO,eACP,OAAO,MAAM;CACX,cAAc,OAAO,KAAK,IAAI,yBAAyB,CAAC;CACxD,QAAQ,OAAO;AACjB,CAAC,CACH,CACF,CACF,EACF;AAEA,IAAa,OAAb,cAA0B,QAAQ,QAAuC,CAAC,CACxE,sBACF,CAAC,CAAC,CAAC;AAEH,MAAa,SAAS,SAAqB,MAAM,QAAQ,MAAM,KAAK,IAAI,CAAC;AAKzE,MAAa,kBACX,QACA,SAEA,MAAM,MAAM,OAAO,IAAI,CAAC,CAAC,KACvB,MAAM,KAAK,aAAa,MAAM,IAAI,CAAC,GACnC,MAAM,KAAK,mBAAmB,MAAM,KAAK,GACzC,MAAM,UACR;AAEF,IAAa,2BAAb,cAA8C,OAAO,YAAsC,CAAC,CAC1F,4BACA,CAAC,CACH,CAAC,CAAC;CACA,IAAa,UAAkB;EAC7B,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"Auth.js","names":[],"sources":["../src/Auth.ts"],"sourcesContent":["import type {\n Auth as ConvexAuth,\n MutationAuth as ConvexMutationAuth,\n SignJwtOptions,\n} from \"convex/server\";\nimport * as Context from \"effect/Context\";\nimport { flow } from \"effect/Function\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\n\nconst make = (auth: ConvexAuth) => ({\n getUserIdentity: Effect.promise(() => auth.getUserIdentity()).pipe(\n Effect.andThen(\n flow(\n Option.fromNullishOr,\n Option.match({\n onNone: () => Effect.fail(new NoUserIdentityFoundError()),\n onSome: Effect.succeed,\n }),\n ),\n ),\n ),\n});\n\nexport class Auth extends Context.Service<Auth, ReturnType<typeof make>>()(\n \"@confect/server/Auth\",\n) {}\n\nexport const layer = (auth: ConvexAuth) => Layer.succeed(Auth, make(auth));\n\n/**\n * Mutation-only deployment signing, available in applications and components.\n */\nexport class MutationAuth extends Context.Service<\n MutationAuth,\n {\n readonly signJwt: (options: SignJwtOptions) => Effect.Effect<string>;\n }\n>()(\"@confect/server/Auth/MutationAuth\") {}\n\n/**\n * SDK rejections remain defects, as with the other native auth operations.\n */\nexport const mutationLayer = (auth: ConvexMutationAuth) =>\n Layer.succeed(MutationAuth, {\n signJwt: (options) => Effect.promise(() => auth.signJwt(options)),\n });\n\nexport type ForTarget<Target extends DatabaseSchema.Target> =\n Target[\"kind\"] extends \"component\" ? never : Auth;\n\nexport const layerForTarget = <Target extends DatabaseSchema.Target>(\n target: Target,\n auth: ConvexAuth,\n): Layer.Layer<ForTarget<Target>> =>\n Match.value(target.kind).pipe(\n Match.when(\"app\", () => layer(auth)),\n Match.when(\"component\", () => Layer.empty),\n Match.exhaustive,\n ) as Layer.Layer<ForTarget<Target>>;\n\nexport class NoUserIdentityFoundError extends Schema.TaggedError<NoUserIdentityFoundError>()(\n \"NoUserIdentityFoundError\",\n {},\n) {\n override get message(): string {\n return \"No user identity found\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAcA,MAAM,QAAQ,UAAsB,EAClC,iBAAiB,OAAO,cAAc,KAAK,gBAAgB,CAAC,CAAC,CAAC,KAC5D,OAAO,QACL,KACE,OAAO,eACP,OAAO,MAAM;CACX,cAAc,OAAO,KAAK,IAAI,yBAAyB,CAAC;CACxD,QAAQ,OAAO;AACjB,CAAC,CACH,CACF,CACF,EACF;AAEA,IAAa,OAAb,cAA0B,QAAQ,QAAuC,CAAC,CACxE,sBACF,CAAC,CAAC,CAAC;AAEH,MAAa,SAAS,SAAqB,MAAM,QAAQ,MAAM,KAAK,IAAI,CAAC;;;;AAKzE,IAAa,eAAb,cAAkC,QAAQ,QAKxC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;;;;AAK1C,MAAa,iBAAiB,SAC5B,MAAM,QAAQ,cAAc,EAC1B,UAAU,YAAY,OAAO,cAAc,KAAK,QAAQ,OAAO,CAAC,EAClE,CAAC;AAKH,MAAa,kBACX,QACA,SAEA,MAAM,MAAM,OAAO,IAAI,CAAC,CAAC,KACvB,MAAM,KAAK,aAAa,MAAM,IAAI,CAAC,GACnC,MAAM,KAAK,mBAAmB,MAAM,KAAK,GACzC,MAAM,UACR;AAEF,IAAa,2BAAb,cAA8C,OAAO,YAAsC,CAAC,CAC1F,4BACA,CAAC,CACH,CAAC,CAAC;CACA,IAAa,UAAkB;EAC7B,OAAO;CACT;AACF"}
package/dist/Callback.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { convexToJson, v } from "convex/values";
2
3
  import * as Ref from "@confect/core/Ref";
3
4
  import * as Effect from "effect/Effect";
5
+ import * as MiddlewareSpec from "@confect/core/MiddlewareSpec";
6
+ import * as Predicate from "effect/Predicate";
7
+ import * as Array from "effect/Array";
4
8
  import { createFunctionHandle } from "convex/server";
5
9
  import * as Schema from "effect/Schema";
6
10
  import { pipe } from "effect/Function";
7
11
  import * as Option from "effect/Option";
8
12
  import * as Callback from "@confect/core/Callback";
9
- import * as MiddlewareSpec from "@confect/core/MiddlewareSpec";
10
13
  import { UnsupportedPropertySignatureKeyTypeError, compileAst } from "@confect/core/SchemaToValidator";
11
- import { convexToJson, v } from "convex/values";
12
- import * as Array from "effect/Array";
13
14
  import * as Number from "effect/Number";
14
15
  import * as Order from "effect/Order";
15
- import * as Predicate from "effect/Predicate";
16
16
  import * as Result from "effect/Result";
17
17
  import * as SchemaAST from "effect/SchemaAST";
18
18
  //#region src/Callback.ts
@@ -1,8 +1,8 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
- import * as Layer from "effect/Layer";
3
2
  import * as Effect from "effect/Effect";
4
- import { pipe } from "effect/Function";
3
+ import * as Layer from "effect/Layer";
5
4
  import * as Array from "effect/Array";
5
+ import { pipe } from "effect/Function";
6
6
  import * as ConfigProvider from "effect/ConfigProvider";
7
7
  //#region src/ConvexConfigProvider.ts
8
8
  var ConvexConfigProvider_exports = /* @__PURE__ */ __exportAll({
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexFunctionDefinitions.d.ts","sourceRoot":"","sources":["../src/ConvexFunctionDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,wBAAwB,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,KAAK,mBAAmB,MAAM,0BAA0B,CAAC;AAIrE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAAC,UAAU,GAAG,WAAW,CAAC;CAC5E;AAED,KAAK,aAAa,CAChB,QAAQ,SAAS,YAAY,CAAC,YAAY,EAC1C,UAAU,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IACzC,UAAU,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC9C,YAAY,GACZ,GAAG,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;AAErH,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,SAAS,CAAC,YAAY,IAAI;IAC3D,QAAQ,EAAE,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CACvE,wBAAwB,CAAC,UAAU,EACnC;QACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAC1B,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACxD,CAAC;KACH,CACF;CACF,GAAG;IACF,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAClE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAClD;CACF,CAAC;AAEF,eAAO,MAAM,YAAY,UAChB,wBAAwB,CAAC,UAAU,GAAG,WAAW,KACvD,KAAK,IAAI,wBAAwB,CAAC,UACL,CAAC;AAWjC,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,eAC9C,WAAW,KACvB,mBAAmB,CAAC,+BAA+B,CAAC,KAAK,CAGK,CAAC;AAElE,eAAO,MAAM,aAAa,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,kBAChD,cAAc,CAAC,YAAY,cAC/B,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KACxD,QAAQ,CAAC,KAAK,CA0BhB,CAAC"}
1
+ {"version":3,"file":"ConvexFunctionDefinitions.d.ts","sourceRoot":"","sources":["../src/ConvexFunctionDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,wBAAwB,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,KAAK,mBAAmB,MAAM,0BAA0B,CAAC;AAIrE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAAC,UAAU,GAAG,WAAW,CAAC;CAC5E;AAED,KAAK,aAAa,CAChB,QAAQ,SAAS,YAAY,CAAC,YAAY,EAC1C,UAAU,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IACzC,UAAU,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC9C,YAAY,GACZ,GAAG,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;AAErH,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,SAAS,CAAC,YAAY,IAAI;IAC3D,QAAQ,EAAE,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CACvE,wBAAwB,CAAC,UAAU,EACnC;QACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAC1B,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACxD,CAAC;KACH,CACF;CACF,GAAG;IACF,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAClE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAClD;CACF,CAAC;AAEF,eAAO,MAAM,YAAY,UAChB,wBAAwB,CAAC,UAAU,GAAG,WAAW,KACvD,KAAK,IAAI,wBAAwB,CAAC,UACL,CAAC;AAWjC,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,eAC9C,WAAW,KACvB,mBAAmB,CAAC,+BAA+B,CAAC,KAAK,CAGK,CAAC;AAElE,eAAO,MAAM,aAAa,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,kBAChD,cAAc,CAAC,YAAY,cAC/B,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KACxD,QAAQ,CAAC,KAAK,CA2BhB,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { mapLeaves } from "./internal/utils.js";
2
3
  import { make } from "./GroupRegistry.js";
3
4
  import { isFunctionRegistryItem } from "./FunctionRegistryItem.js";
4
5
  import { Definition, prepare, register as register$1 } from "./RegisteredConvexFunction.js";
5
6
  import { resolve } from "./ResolvedMiddleware.js";
6
- import { mapLeaves } from "./internal/utils.js";
7
- import * as Match from "effect/Match";
8
7
  import * as Record from "effect/Record";
8
+ import * as Match from "effect/Match";
9
9
  //#region src/ConvexFunctionDefinitions.ts
10
10
  var ConvexFunctionDefinitions_exports = /* @__PURE__ */ __exportAll({
11
11
  buildForGroup: () => buildForGroup,
@@ -16,8 +16,8 @@ const isDefinition = (value) => typeof value._tag === "string";
16
16
  const registerDefinitions = (definitions) => Record.map(definitions, (value) => isDefinition(value) ? register$1(value) : registerDefinitions(value));
17
17
  const register = (definitions) => registerDefinitions(definitions);
18
18
  const buildForGroup = (databaseSchema, groupLayer) => {
19
- const { functionRegistryItems, middlewareRegistryItems } = make(groupLayer);
20
- return mapLeaves(functionRegistryItems, isFunctionRegistryItem, (item) => Match.value(item).pipe(Match.tag("Convex", ({ handler }) => Definition.Registered({ handler })), Match.tag("Confect", (confect) => prepare(databaseSchema, confect, resolve(confect, middlewareRegistryItems))), Match.exhaustive));
19
+ const { functionRegistryItems, middlewareRegistryItems, observability } = make(groupLayer);
20
+ return mapLeaves(functionRegistryItems, isFunctionRegistryItem, (item) => Match.value(item).pipe(Match.tag("Convex", ({ handler }) => Definition.Registered({ handler })), Match.tag("Confect", (confect) => prepare(databaseSchema, confect, resolve(confect, middlewareRegistryItems), observability)), Match.exhaustive));
21
21
  };
22
22
  //#endregion
23
23
  export { ConvexFunctionDefinitions_exports, buildForGroup, isDefinition, register };
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexFunctionDefinitions.js","names":["RegisteredConvexFunction.register","GroupRegistry.make","FunctionRegistryItem.isFunctionRegistryItem","RegisteredConvexFunction.prepare","ResolvedMiddleware.resolve"],"sources":["../src/ConvexFunctionDefinitions.ts"],"sourcesContent":["import type * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Record from \"effect/Record\";\nimport type * as GroupSpec from \"@confect/core/GroupSpec\";\nimport type * as FunctionSpec from \"@confect/core/FunctionSpec\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport type * as GroupImpl from \"./GroupImpl.js\";\nimport * as GroupRegistry from \"./GroupRegistry.js\";\nimport * as FunctionRegistryItem from \"./FunctionRegistryItem.js\";\nimport * as RegisteredConvexFunction from \"./RegisteredConvexFunction.js\";\nimport type * as RegisteredFunctions from \"./RegisteredFunctions.js\";\nimport * as ResolvedMiddleware from \"./ResolvedMiddleware.js\";\nimport { mapLeaves } from \"./internal/utils.js\";\n\nexport interface Definitions {\n readonly [name: string]: RegisteredConvexFunction.Definition | Definitions;\n}\n\ntype DefinitionTag<\n Function extends FunctionSpec.AnyWithProps,\n Provenance = Function[\"functionProvenance\"],\n> = Provenance extends { readonly _tag: \"Convex\" }\n ? \"Registered\"\n : `${Capitalize<Function[\"functionVisibility\"]>}${Capitalize<Function[\"runtimeAndFunctionType\"][\"functionType\"]>}`;\n\nexport type ForGroup<Group extends GroupSpec.AnyWithProps> = {\n readonly [Name in FunctionSpec.Name<GroupSpec.Functions<Group>>]: Extract<\n RegisteredConvexFunction.Definition,\n {\n readonly _tag: DefinitionTag<\n FunctionSpec.WithName<GroupSpec.Functions<Group>, Name>\n >;\n }\n >;\n} & {\n readonly [Name in GroupSpec.Name<GroupSpec.Groups<Group>>]: ForGroup<\n GroupSpec.WithName<GroupSpec.Groups<Group>, Name>\n >;\n};\n\nexport const isDefinition = (\n value: RegisteredConvexFunction.Definition | Definitions,\n): value is RegisteredConvexFunction.Definition =>\n typeof value._tag === \"string\";\n\nconst registerDefinitions = (\n definitions: Definitions,\n): RegisteredFunctions.AnyWithProps =>\n Record.map(definitions, (value) =>\n isDefinition(value)\n ? RegisteredConvexFunction.register(value)\n : registerDefinitions(value),\n );\n\nexport const register = <Group extends GroupSpec.AnyWithProps>(\n definitions: Definitions,\n): RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group> =>\n registerDefinitions(\n definitions,\n ) as RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group>;\n\nexport const buildForGroup = <Group extends GroupSpec.AnyWithProps>(\n databaseSchema: DatabaseSchema.AnyWithProps,\n groupLayer: Layer.Layer<GroupImpl.GroupImpl<\"Finalized\">>,\n): ForGroup<Group> => {\n const { functionRegistryItems, middlewareRegistryItems } =\n GroupRegistry.make(groupLayer);\n return mapLeaves<\n FunctionRegistryItem.AnyWithProps,\n RegisteredConvexFunction.Definition\n >(\n functionRegistryItems as {\n [key: string]: FunctionRegistryItem.AnyWithProps;\n },\n FunctionRegistryItem.isFunctionRegistryItem,\n (item) =>\n Match.value(item).pipe(\n Match.tag(\"Convex\", ({ handler }) =>\n RegisteredConvexFunction.Definition.Registered({ handler }),\n ),\n Match.tag(\"Confect\", (confect) =>\n RegisteredConvexFunction.prepare(\n databaseSchema,\n confect,\n ResolvedMiddleware.resolve(confect, middlewareRegistryItems),\n ),\n ),\n Match.exhaustive,\n ),\n ) as ForGroup<Group>;\n};\n"],"mappings":";;;;;;;;;;;;;;AAwCA,MAAa,gBACX,UAEA,OAAO,MAAM,SAAS;AAExB,MAAM,uBACJ,gBAEA,OAAO,IAAI,cAAc,UACvB,aAAa,KAAK,IACdA,WAAkC,KAAK,IACvC,oBAAoB,KAAK,CAC/B;AAEF,MAAa,YACX,gBAEA,oBACE,WACF;AAEF,MAAa,iBACX,gBACA,eACoB;CACpB,MAAM,EAAE,uBAAuB,4BAC7BC,KAAmB,UAAU;CAC/B,OAAO,UAIL,uBAGAC,yBACC,SACC,MAAM,MAAM,IAAI,CAAC,CAAC,KAChB,MAAM,IAAI,WAAW,EAAE,cAAA,WACe,WAAW,EAAE,QAAQ,CAAC,CAC5D,GACA,MAAM,IAAI,YAAY,YACpBC,QACE,gBACA,SACAC,QAA2B,SAAS,uBAAuB,CAC7D,CACF,GACA,MAAM,UACR,CACJ;AACF"}
1
+ {"version":3,"file":"ConvexFunctionDefinitions.js","names":["RegisteredConvexFunction.register","GroupRegistry.make","FunctionRegistryItem.isFunctionRegistryItem","RegisteredConvexFunction.prepare","ResolvedMiddleware.resolve"],"sources":["../src/ConvexFunctionDefinitions.ts"],"sourcesContent":["import type * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Record from \"effect/Record\";\nimport type * as GroupSpec from \"@confect/core/GroupSpec\";\nimport type * as FunctionSpec from \"@confect/core/FunctionSpec\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport type * as GroupImpl from \"./GroupImpl.js\";\nimport * as GroupRegistry from \"./GroupRegistry.js\";\nimport * as FunctionRegistryItem from \"./FunctionRegistryItem.js\";\nimport * as RegisteredConvexFunction from \"./RegisteredConvexFunction.js\";\nimport type * as RegisteredFunctions from \"./RegisteredFunctions.js\";\nimport * as ResolvedMiddleware from \"./ResolvedMiddleware.js\";\nimport { mapLeaves } from \"./internal/utils.js\";\n\nexport interface Definitions {\n readonly [name: string]: RegisteredConvexFunction.Definition | Definitions;\n}\n\ntype DefinitionTag<\n Function extends FunctionSpec.AnyWithProps,\n Provenance = Function[\"functionProvenance\"],\n> = Provenance extends { readonly _tag: \"Convex\" }\n ? \"Registered\"\n : `${Capitalize<Function[\"functionVisibility\"]>}${Capitalize<Function[\"runtimeAndFunctionType\"][\"functionType\"]>}`;\n\nexport type ForGroup<Group extends GroupSpec.AnyWithProps> = {\n readonly [Name in FunctionSpec.Name<GroupSpec.Functions<Group>>]: Extract<\n RegisteredConvexFunction.Definition,\n {\n readonly _tag: DefinitionTag<\n FunctionSpec.WithName<GroupSpec.Functions<Group>, Name>\n >;\n }\n >;\n} & {\n readonly [Name in GroupSpec.Name<GroupSpec.Groups<Group>>]: ForGroup<\n GroupSpec.WithName<GroupSpec.Groups<Group>, Name>\n >;\n};\n\nexport const isDefinition = (\n value: RegisteredConvexFunction.Definition | Definitions,\n): value is RegisteredConvexFunction.Definition =>\n typeof value._tag === \"string\";\n\nconst registerDefinitions = (\n definitions: Definitions,\n): RegisteredFunctions.AnyWithProps =>\n Record.map(definitions, (value) =>\n isDefinition(value)\n ? RegisteredConvexFunction.register(value)\n : registerDefinitions(value),\n );\n\nexport const register = <Group extends GroupSpec.AnyWithProps>(\n definitions: Definitions,\n): RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group> =>\n registerDefinitions(\n definitions,\n ) as RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group>;\n\nexport const buildForGroup = <Group extends GroupSpec.AnyWithProps>(\n databaseSchema: DatabaseSchema.AnyWithProps,\n groupLayer: Layer.Layer<GroupImpl.GroupImpl<\"Finalized\">>,\n): ForGroup<Group> => {\n const { functionRegistryItems, middlewareRegistryItems, observability } =\n GroupRegistry.make(groupLayer);\n return mapLeaves<\n FunctionRegistryItem.AnyWithProps,\n RegisteredConvexFunction.Definition\n >(\n functionRegistryItems as {\n [key: string]: FunctionRegistryItem.AnyWithProps;\n },\n FunctionRegistryItem.isFunctionRegistryItem,\n (item) =>\n Match.value(item).pipe(\n Match.tag(\"Convex\", ({ handler }) =>\n RegisteredConvexFunction.Definition.Registered({ handler }),\n ),\n Match.tag(\"Confect\", (confect) =>\n RegisteredConvexFunction.prepare(\n databaseSchema,\n confect,\n ResolvedMiddleware.resolve(confect, middlewareRegistryItems),\n observability,\n ),\n ),\n Match.exhaustive,\n ),\n ) as ForGroup<Group>;\n};\n"],"mappings":";;;;;;;;;;;;;;AAwCA,MAAa,gBACX,UAEA,OAAO,MAAM,SAAS;AAExB,MAAM,uBACJ,gBAEA,OAAO,IAAI,cAAc,UACvB,aAAa,KAAK,IACdA,WAAkC,KAAK,IACvC,oBAAoB,KAAK,CAC/B;AAEF,MAAa,YACX,gBAEA,oBACE,WACF;AAEF,MAAa,iBACX,gBACA,eACoB;CACpB,MAAM,EAAE,uBAAuB,yBAAyB,kBACtDC,KAAmB,UAAU;CAC/B,OAAO,UAIL,uBAGAC,yBACC,SACC,MAAM,MAAM,IAAI,CAAC,CAAC,KAChB,MAAM,IAAI,WAAW,EAAE,cAAA,WACe,WAAW,EAAE,QAAQ,CAAC,CAC5D,GACA,MAAM,IAAI,YAAY,YACpBC,QACE,gBACA,SACAC,QAA2B,SAAS,uBAAuB,GAC3D,aACF,CACF,GACA,MAAM,UACR,CACJ;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
- import * as Layer from "effect/Layer";
3
2
  import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
4
  import * as Match from "effect/Match";
5
5
  import * as Console from "effect/Console";
6
6
  import * as Logger from "effect/Logger";
package/dist/CronJobs.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Predicate from "effect/Predicate";
3
+ import * as Array from "effect/Array";
4
+ import * as Record from "effect/Record";
5
+ import { Ref } from "@confect/core";
6
+ import * as DateTime from "effect/DateTime";
7
+ import * as Duration from "effect/Duration";
2
8
  import { cronJobs } from "convex/server";
3
9
  import { pipe } from "effect/Function";
4
10
  import * as Match from "effect/Match";
5
11
  import * as Option from "effect/Option";
6
- import * as Array from "effect/Array";
7
12
  import * as Order from "effect/Order";
8
- import * as Predicate from "effect/Predicate";
9
- import * as Record from "effect/Record";
10
- import * as Duration from "effect/Duration";
11
- import { Ref } from "@confect/core";
12
- import * as DateTime from "effect/DateTime";
13
13
  import * as Cron from "effect/Cron";
14
14
  //#region src/CronJobs.ts
15
15
  var CronJobs_exports = /* @__PURE__ */ __exportAll({
@@ -1,8 +1,8 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Data from "effect/Data";
2
3
  import * as Predicate from "effect/Predicate";
3
- import * as Result from "effect/Result";
4
4
  import * as Record from "effect/Record";
5
- import * as Data from "effect/Data";
5
+ import * as Result from "effect/Result";
6
6
  import * as IdScope from "@confect/core/IdScope";
7
7
  //#region src/DatabaseSchema.ts
8
8
  var DatabaseSchema_exports = /* @__PURE__ */ __exportAll({
@@ -37,8 +37,42 @@ export interface DatabaseWriterService<DatabaseSchema_ extends DatabaseSchema.An
37
37
  * interfaces.
38
38
  */
39
39
  export type DatabaseWriterTag<DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Docs = {}> = Context.Service<DatabaseWriterService<DatabaseSchema_>, DatabaseWriterService<DatabaseSchema_, Docs>>;
40
- export declare const make: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(databaseSchema: DatabaseSchema_, convexDatabaseWriter: GenericDatabaseWriter<DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>>) => DatabaseWriterService<DatabaseSchema_>;
40
+ /**
41
+ * Decoded documents surrounding one successful write.
42
+ */
43
+ export type Change<S extends DatabaseSchema.AnyWithProps> = {
44
+ [Name in DataModel.TableNames<DataModel.FromSchema<S>>]: {
45
+ readonly tableName: Name;
46
+ } & ({
47
+ readonly operation: "insert";
48
+ readonly oldDoc: null;
49
+ readonly newDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;
50
+ } | {
51
+ readonly operation: "update";
52
+ readonly oldDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;
53
+ readonly newDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;
54
+ } | {
55
+ readonly operation: "delete";
56
+ readonly oldDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;
57
+ readonly newDoc: null;
58
+ });
59
+ }[DataModel.TableNames<DataModel.FromSchema<S>>];
60
+ /**
61
+ * Runs after the write, in its transaction. A defect aborts the mutation.
62
+ *
63
+ * Only writes through this writer are observed. Raw `ctx.db`, `MutationCtx`
64
+ * writes and a second `DatabaseWriter.make` bypass the hook, so a host that
65
+ * relies on it keeps raw writers out of its functions. Component writers and
66
+ * nested `runMutation` calls each need their own hook installation.
67
+ *
68
+ * Concurrent writes to one document (for example under `Effect.all`) can
69
+ * interleave the read-write-read steps. Await them sequentially when the hook
70
+ * needs exact per-write snapshots. The writer takes no lock, because a hook
71
+ * that writes through the same writer would deadlock under one.
72
+ */
73
+ export type Hook<S extends DatabaseSchema.AnyWithProps> = (change: Change<S>) => Effect.Effect<void>;
74
+ export declare const make: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(databaseSchema: DatabaseSchema_, convexDatabaseWriter: GenericDatabaseWriter<DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>>, hook?: Hook<DatabaseSchema_>) => DatabaseWriterService<DatabaseSchema_>;
41
75
  export declare const DatabaseWriter: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps, Docs = {}>() => DatabaseWriterTag<DatabaseSchema_, Docs>;
42
76
  export type DatabaseWriter<DatabaseSchema_ extends DatabaseSchema.AnyWithProps> = DatabaseWriterService<DatabaseSchema_>;
43
- export declare const layer: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(databaseSchema: DatabaseSchema_, convexDatabaseWriter: GenericDatabaseWriter<DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>>) => Layer.Layer<DatabaseWriterService<DatabaseSchema_, {}>, never, never>;
77
+ export declare const layer: <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(databaseSchema: DatabaseSchema_, convexDatabaseWriter: GenericDatabaseWriter<DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>>, hook?: Hook<DatabaseSchema_>) => Layer.Layer<DatabaseWriterService<DatabaseSchema_, {}>, never, never>;
44
78
  //# sourceMappingURL=DatabaseWriter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatabaseWriter.d.ts","sourceRoot":"","sources":["../src/DatabaseWriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DatabaseWriter.d.ts","sourceRoot":"","sources":["../src/DatabaseWriter.ts"],"names":[],"mappings":"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"}
@@ -1,46 +1,93 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import { tables } from "./DatabaseSchema.js";
3
- import { encode } from "./Document.js";
4
- import { getById } from "./QueryInitializer.js";
3
+ import { DocumentEncodeError, decode, encode } from "./Document.js";
4
+ import { GetByIdFailure, getById } from "./QueryInitializer.js";
5
+ import { encoder } from "./internal/DocumentPatch.js";
5
6
  import * as Context from "effect/Context";
6
- import * as Layer from "effect/Layer";
7
7
  import * as Effect from "effect/Effect";
8
- import { pipe } from "effect/Function";
8
+ import * as Layer from "effect/Layer";
9
+ import * as Predicate from "effect/Predicate";
9
10
  import * as Record from "effect/Record";
11
+ import { pipe } from "effect/Function";
12
+ import * as Result from "effect/Result";
10
13
  //#region src/DatabaseWriter.ts
11
14
  var DatabaseWriter_exports = /* @__PURE__ */ __exportAll({
12
15
  DatabaseWriter: () => DatabaseWriter,
13
16
  layer: () => layer,
14
17
  make: () => make
15
18
  });
16
- const make = (databaseSchema, convexDatabaseWriter) => {
19
+ const make = (databaseSchema, convexDatabaseWriter, hook) => {
17
20
  const table = (tableName) => {
18
21
  const tableDef = tables(databaseSchema)[tableName];
19
22
  const insert = Effect.fn("DatabaseWriter.insert")(function* (document) {
20
23
  const encodedDocument = yield* encode(document, tableDef);
21
24
  return yield* Effect.promise(() => convexDatabaseWriter.insert(tableName, encodedDocument));
22
25
  });
23
- const patch = Effect.fn("DatabaseWriter.patch")(function* (id, patchedValues) {
26
+ const replacePatched = (id, patchedValues) => Effect.gen(function* () {
24
27
  const originalDecodedDoc = yield* getById(convexDatabaseWriter, tableDef)(id);
25
28
  const updatedEncodedDoc = yield* pipe(patchedValues, Record.reduce(originalDecodedDoc, (acc, value, key) => value === void 0 ? Record.remove(acc, key) : Record.set(acc, key, value)), encode(tableDef));
26
29
  yield* Effect.promise(() => convexDatabaseWriter.replace(id, updatedEncodedDoc));
27
30
  });
31
+ const patch = Effect.fn("DatabaseWriter.patch")(function* (id, patchedValues) {
32
+ const encodePatch = encoder(tableDef);
33
+ if (encodePatch === void 0) return yield* replacePatched(id, patchedValues);
34
+ const storedDoc = yield* pipe(Effect.promise(() => convexDatabaseWriter.get(id)), Effect.andThen((value) => Effect.fromResult(Result.fromNullishOr(value, () => new GetByIdFailure({
35
+ tableName,
36
+ id
37
+ })))));
38
+ const encodedPatch = yield* pipe(encodePatch(patchedValues), Effect.mapError(({ message }) => message), Effect.tap((delta) => pipe({
39
+ ...storedDoc,
40
+ ...delta
41
+ }, Record.filter(Predicate.isNotUndefined), decode(tableDef), Effect.mapError(({ parseError }) => parseError))), Effect.catch((parseError) => pipe(decode(storedDoc, tableDef), Effect.andThen(Effect.fail(new DocumentEncodeError({
42
+ tableName,
43
+ id,
44
+ parseError
45
+ }))))));
46
+ yield* Effect.promise(() => convexDatabaseWriter.patch(id, encodedPatch));
47
+ });
28
48
  const replace = Effect.fn("DatabaseWriter.replace")(function* (id, value) {
29
49
  const updatedEncodedDoc = yield* encode(value, tableDef);
30
50
  yield* Effect.promise(() => convexDatabaseWriter.replace(id, updatedEncodedDoc));
31
51
  });
32
52
  const delete_ = (id) => Effect.promise(() => convexDatabaseWriter.delete(id));
33
- return {
53
+ const accessor = {
34
54
  insert,
35
55
  patch,
36
56
  replace,
37
57
  delete: delete_
38
58
  };
59
+ if (hook === void 0) return accessor;
60
+ const read = (id) => getById(convexDatabaseWriter, tableDef)(id);
61
+ const notify = (operation, oldDoc, newDoc) => hook({
62
+ tableName,
63
+ operation,
64
+ oldDoc,
65
+ newDoc
66
+ });
67
+ const update = (before, write) => (id, ...args) => Effect.gen(function* () {
68
+ const oldDoc = yield* before(id);
69
+ yield* write(id, ...args);
70
+ yield* notify("update", oldDoc, yield* read(id).pipe(Effect.orDie));
71
+ });
72
+ return {
73
+ insert: (document) => Effect.gen(function* () {
74
+ const id = yield* insert(document);
75
+ yield* notify("insert", null, yield* read(id).pipe(Effect.orDie));
76
+ return id;
77
+ }),
78
+ patch: update(read, patch),
79
+ replace: update((id) => read(id).pipe(Effect.orDie), replace),
80
+ delete: (id) => Effect.gen(function* () {
81
+ const oldDoc = yield* read(id).pipe(Effect.orDie);
82
+ yield* delete_(id);
83
+ yield* notify("delete", oldDoc, null);
84
+ })
85
+ };
39
86
  };
40
87
  return { table };
41
88
  };
42
89
  const DatabaseWriter = () => Context.Service("@confect/server/DatabaseWriter");
43
- const layer = (databaseSchema, convexDatabaseWriter) => Layer.succeed(DatabaseWriter(), make(databaseSchema, convexDatabaseWriter));
90
+ const layer = (databaseSchema, convexDatabaseWriter, hook) => Layer.succeed(DatabaseWriter(), make(databaseSchema, convexDatabaseWriter, hook));
44
91
  //#endregion
45
92
  export { DatabaseWriter, DatabaseWriter_exports, layer, make };
46
93