@confect/server 1.0.0-next.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.
Files changed (157) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +7 -0
  3. package/dist/ActionCtx.d.ts +12 -0
  4. package/dist/ActionCtx.d.ts.map +1 -0
  5. package/dist/ActionCtx.js +10 -0
  6. package/dist/ActionCtx.js.map +1 -0
  7. package/dist/ActionRunner.d.ts +15 -0
  8. package/dist/ActionRunner.d.ts.map +1 -0
  9. package/dist/ActionRunner.js +23 -0
  10. package/dist/ActionRunner.js.map +1 -0
  11. package/dist/Api.d.ts +27 -0
  12. package/dist/Api.d.ts.map +1 -0
  13. package/dist/Api.js +26 -0
  14. package/dist/Api.js.map +1 -0
  15. package/dist/Auth.d.ts +30 -0
  16. package/dist/Auth.d.ts.map +1 -0
  17. package/dist/Auth.js +24 -0
  18. package/dist/Auth.js.map +1 -0
  19. package/dist/DataModel.d.ts +33 -0
  20. package/dist/DataModel.d.ts.map +1 -0
  21. package/dist/DataModel.js +6 -0
  22. package/dist/DataModel.js.map +1 -0
  23. package/dist/DatabaseReader.d.ts +73 -0
  24. package/dist/DatabaseReader.d.ts.map +1 -0
  25. package/dist/DatabaseReader.js +32 -0
  26. package/dist/DatabaseReader.js.map +1 -0
  27. package/dist/DatabaseSchema.d.ts +139 -0
  28. package/dist/DatabaseSchema.d.ts.map +1 -0
  29. package/dist/DatabaseSchema.js +45 -0
  30. package/dist/DatabaseSchema.js.map +1 -0
  31. package/dist/DatabaseWriter.d.ts +39 -0
  32. package/dist/DatabaseWriter.d.ts.map +1 -0
  33. package/dist/DatabaseWriter.js +43 -0
  34. package/dist/DatabaseWriter.js.map +1 -0
  35. package/dist/Document.d.ts +47 -0
  36. package/dist/Document.d.ts.map +1 -0
  37. package/dist/Document.js +66 -0
  38. package/dist/Document.js.map +1 -0
  39. package/dist/FunctionImpl.d.ts +34 -0
  40. package/dist/FunctionImpl.d.ts.map +1 -0
  41. package/dist/FunctionImpl.js +35 -0
  42. package/dist/FunctionImpl.js.map +1 -0
  43. package/dist/GroupImpl.d.ts +24 -0
  44. package/dist/GroupImpl.d.ts.map +1 -0
  45. package/dist/GroupImpl.js +14 -0
  46. package/dist/GroupImpl.js.map +1 -0
  47. package/dist/Handler.d.ts +31 -0
  48. package/dist/Handler.d.ts.map +1 -0
  49. package/dist/Handler.js +6 -0
  50. package/dist/Handler.js.map +1 -0
  51. package/dist/HttpApi.d.ts +26 -0
  52. package/dist/HttpApi.d.ts.map +1 -0
  53. package/dist/HttpApi.js +74 -0
  54. package/dist/HttpApi.js.map +1 -0
  55. package/dist/Impl.d.ts +24 -0
  56. package/dist/Impl.d.ts.map +1 -0
  57. package/dist/Impl.js +28 -0
  58. package/dist/Impl.js.map +1 -0
  59. package/dist/MutationCtx.d.ts +12 -0
  60. package/dist/MutationCtx.d.ts.map +1 -0
  61. package/dist/MutationCtx.js +10 -0
  62. package/dist/MutationCtx.js.map +1 -0
  63. package/dist/MutationRunner.d.ts +24 -0
  64. package/dist/MutationRunner.d.ts.map +1 -0
  65. package/dist/MutationRunner.js +33 -0
  66. package/dist/MutationRunner.js.map +1 -0
  67. package/dist/OrderedQuery.d.ts +23 -0
  68. package/dist/OrderedQuery.d.ts.map +1 -0
  69. package/dist/OrderedQuery.js +34 -0
  70. package/dist/OrderedQuery.js.map +1 -0
  71. package/dist/QueryCtx.d.ts +12 -0
  72. package/dist/QueryCtx.d.ts.map +1 -0
  73. package/dist/QueryCtx.js +10 -0
  74. package/dist/QueryCtx.js.map +1 -0
  75. package/dist/QueryInitializer.d.ts +49 -0
  76. package/dist/QueryInitializer.d.ts.map +1 -0
  77. package/dist/QueryInitializer.js +83 -0
  78. package/dist/QueryInitializer.js.map +1 -0
  79. package/dist/QueryRunner.d.ts +14 -0
  80. package/dist/QueryRunner.d.ts.map +1 -0
  81. package/dist/QueryRunner.js +23 -0
  82. package/dist/QueryRunner.js.map +1 -0
  83. package/dist/RegisteredFunctions.d.ts +66 -0
  84. package/dist/RegisteredFunctions.d.ts.map +1 -0
  85. package/dist/RegisteredFunctions.js +71 -0
  86. package/dist/RegisteredFunctions.js.map +1 -0
  87. package/dist/Registry.d.ts +15 -0
  88. package/dist/Registry.d.ts.map +1 -0
  89. package/dist/Registry.js +10 -0
  90. package/dist/Registry.js.map +1 -0
  91. package/dist/RegistryItem.d.ts +31 -0
  92. package/dist/RegistryItem.d.ts.map +1 -0
  93. package/dist/RegistryItem.js +20 -0
  94. package/dist/RegistryItem.js.map +1 -0
  95. package/dist/Scheduler.d.ts +23 -0
  96. package/dist/Scheduler.d.ts.map +1 -0
  97. package/dist/Scheduler.js +24 -0
  98. package/dist/Scheduler.js.map +1 -0
  99. package/dist/SchemaToValidator.d.ts +88 -0
  100. package/dist/SchemaToValidator.d.ts.map +1 -0
  101. package/dist/SchemaToValidator.js +155 -0
  102. package/dist/SchemaToValidator.js.map +1 -0
  103. package/dist/Storage.d.ts +69 -0
  104. package/dist/Storage.d.ts.map +1 -0
  105. package/dist/Storage.js +46 -0
  106. package/dist/Storage.js.map +1 -0
  107. package/dist/Table.d.ts +247 -0
  108. package/dist/Table.d.ts.map +1 -0
  109. package/dist/Table.js +97 -0
  110. package/dist/Table.js.map +1 -0
  111. package/dist/TableInfo.d.ts +48 -0
  112. package/dist/TableInfo.d.ts.map +1 -0
  113. package/dist/TableInfo.js +6 -0
  114. package/dist/TableInfo.js.map +1 -0
  115. package/dist/VectorSearch.d.ts +42 -0
  116. package/dist/VectorSearch.d.ts.map +1 -0
  117. package/dist/VectorSearch.js +16 -0
  118. package/dist/VectorSearch.js.map +1 -0
  119. package/dist/_virtual/rolldown_runtime.js +13 -0
  120. package/dist/index.d.ts +30 -0
  121. package/dist/index.js +31 -0
  122. package/dist/internal/utils.d.ts +15 -0
  123. package/dist/internal/utils.d.ts.map +1 -0
  124. package/dist/internal/utils.js +49 -0
  125. package/dist/internal/utils.js.map +1 -0
  126. package/package.json +90 -0
  127. package/src/ActionCtx.ts +9 -0
  128. package/src/ActionRunner.ts +28 -0
  129. package/src/Api.ts +63 -0
  130. package/src/Auth.ts +31 -0
  131. package/src/DataModel.ts +69 -0
  132. package/src/DatabaseReader.ts +75 -0
  133. package/src/DatabaseSchema.ts +134 -0
  134. package/src/DatabaseWriter.ts +166 -0
  135. package/src/Document.ts +200 -0
  136. package/src/FunctionImpl.ts +112 -0
  137. package/src/GroupImpl.ts +60 -0
  138. package/src/Handler.ts +105 -0
  139. package/src/HttpApi.ts +232 -0
  140. package/src/Impl.ts +57 -0
  141. package/src/MutationCtx.ts +11 -0
  142. package/src/MutationRunner.ts +41 -0
  143. package/src/OrderedQuery.ts +109 -0
  144. package/src/QueryCtx.ts +9 -0
  145. package/src/QueryInitializer.ts +308 -0
  146. package/src/QueryRunner.ts +29 -0
  147. package/src/RegisteredFunctions.ts +381 -0
  148. package/src/Registry.ts +13 -0
  149. package/src/RegistryItem.ts +44 -0
  150. package/src/Scheduler.ts +39 -0
  151. package/src/SchemaToValidator.ts +619 -0
  152. package/src/Storage.ts +86 -0
  153. package/src/Table.ts +439 -0
  154. package/src/TableInfo.ts +91 -0
  155. package/src/VectorSearch.ts +46 -0
  156. package/src/index.ts +29 -0
  157. package/src/internal/utils.ts +87 -0
@@ -0,0 +1,74 @@
1
+ import { __export } from "./_virtual/rolldown_runtime.js";
2
+ import { ActionCtx } from "./ActionCtx.js";
3
+ import { layer } from "./ActionRunner.js";
4
+ import { layer as layer$1 } from "./Auth.js";
5
+ import { layer as layer$2 } from "./MutationRunner.js";
6
+ import { layer as layer$3 } from "./QueryRunner.js";
7
+ import { layer as layer$4 } from "./Scheduler.js";
8
+ import { StorageActionWriter as StorageActionWriter$1, StorageReader as StorageReader$1, StorageWriter as StorageWriter$1 } from "./Storage.js";
9
+ import { Array, Layer, Record, pipe } from "effect";
10
+ import { ROUTABLE_HTTP_METHODS, httpActionGeneric, httpRouter } from "convex/server";
11
+ import { HttpApiBuilder, HttpApiScalar, HttpServer } from "@effect/platform";
12
+
13
+ //#region src/HttpApi.ts
14
+ var HttpApi_exports = /* @__PURE__ */ __export({ make: () => make });
15
+ const makeHandler = ({ pathPrefix, apiLive, middleware, scalar }) => (ctx, request) => {
16
+ const ApiLive = apiLive.pipe(Layer.provide(Layer.mergeAll(layer$3(ctx.runQuery), layer$2(ctx.runMutation), layer(ctx.runAction), layer$4(ctx.scheduler), layer$1(ctx.auth), StorageReader$1.layer(ctx.storage), StorageWriter$1.layer(ctx.storage), StorageActionWriter$1.layer(ctx.storage), Layer.succeed(ActionCtx(), ctx))));
17
+ const ApiDocsLive = HttpApiScalar.layer({
18
+ path: `${pathPrefix}docs`,
19
+ scalar: {
20
+ baseServerURL: `${process.env["CONVEX_SITE_URL"]}${pathPrefix}`,
21
+ ...scalar
22
+ }
23
+ }).pipe(Layer.provide(ApiLive));
24
+ const EnvLive = Layer.mergeAll(ApiLive, ApiDocsLive, HttpServer.layerContext);
25
+ const { handler } = HttpApiBuilder.toWebHandler(EnvLive, middleware ? { middleware } : {});
26
+ return handler(request);
27
+ };
28
+ const makeHttpAction = ({ pathPrefix, apiLive, middleware, scalar }) => httpActionGeneric(makeHandler({
29
+ pathPrefix,
30
+ apiLive,
31
+ ...middleware ? { middleware } : {},
32
+ ...scalar ? { scalar } : {}
33
+ }));
34
+ const mountEffectHttpApi = ({ pathPrefix, apiLive, middleware, scalar }) => (convexHttpRouter) => {
35
+ const handler = makeHttpAction({
36
+ pathPrefix,
37
+ apiLive,
38
+ ...middleware ? { middleware } : {},
39
+ ...scalar ? { scalar } : {}
40
+ });
41
+ Array.forEach(ROUTABLE_HTTP_METHODS, (method) => {
42
+ const routeSpec = {
43
+ pathPrefix,
44
+ method,
45
+ handler
46
+ };
47
+ convexHttpRouter.route(routeSpec);
48
+ });
49
+ return convexHttpRouter;
50
+ };
51
+ const make = (httpApis) => {
52
+ applyMonkeyPatches();
53
+ return pipe(httpApis, Record.toEntries, Array.reduce(httpRouter(), (convexHttpRouter, [pathPrefix, { apiLive, middleware, scalar }]) => mountEffectHttpApi({
54
+ pathPrefix,
55
+ apiLive,
56
+ ...middleware ? { middleware } : {},
57
+ ...scalar ? { scalar } : {}
58
+ })(convexHttpRouter)));
59
+ };
60
+ const applyMonkeyPatches = () => {
61
+ URL = class extends URL {
62
+ get username() {
63
+ return "";
64
+ }
65
+ get password() {
66
+ return "";
67
+ }
68
+ };
69
+ Object.defineProperty(Request.prototype, "signal", { get: () => new AbortSignal() });
70
+ };
71
+
72
+ //#endregion
73
+ export { HttpApi_exports, make };
74
+ //# sourceMappingURL=HttpApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpApi.js","names":["QueryRunner.layer","MutationRunner.layer","ActionRunner.layer","Scheduler.layer","Auth.layer","StorageReader","StorageWriter","StorageActionWriter","ActionCtx.ActionCtx","routeSpec: RouteSpecWithPathPrefix"],"sources":["../src/HttpApi.ts"],"sourcesContent":["import {\n type HttpApi,\n HttpApiBuilder,\n HttpApiScalar,\n type HttpApp,\n type HttpRouter,\n HttpServer,\n} from \"@effect/platform\";\nimport {\n type HttpRouter as ConvexHttpRouter,\n type GenericActionCtx,\n type GenericDataModel,\n httpActionGeneric,\n httpRouter,\n ROUTABLE_HTTP_METHODS,\n type RouteSpecWithPathPrefix,\n} from \"convex/server\";\nimport { Array, Layer, pipe, Record } from \"effect\";\nimport * as ActionRunner from \"./ActionRunner\";\nimport * as Auth from \"./Auth\";\nimport * as MutationRunner from \"./MutationRunner\";\nimport * as QueryRunner from \"./QueryRunner\";\nimport * as Scheduler from \"./Scheduler\";\nimport { StorageActionWriter, StorageReader, StorageWriter } from \"./Storage\";\nimport * as ActionCtx from \"./ActionCtx\";\n\ntype Middleware = (\n httpApp: HttpApp.Default,\n) => HttpApp.Default<\n never,\n HttpApi.Api | HttpApiBuilder.Router | HttpRouter.HttpRouter.DefaultServices\n>;\n\nconst makeHandler =\n <DataModel extends GenericDataModel>({\n pathPrefix,\n apiLive,\n middleware,\n scalar,\n }: {\n pathPrefix: RoutePath;\n apiLive: Layer.Layer<\n HttpApi.Api,\n never,\n | QueryRunner.QueryRunner\n | MutationRunner.MutationRunner\n | ActionRunner.ActionRunner\n | Scheduler.Scheduler\n | Auth.Auth\n | StorageReader\n | StorageWriter\n | StorageActionWriter\n | GenericActionCtx<DataModel>\n >;\n middleware?: Middleware;\n scalar?: HttpApiScalar.ScalarConfig;\n }) =>\n (ctx: GenericActionCtx<DataModel>, request: Request): Promise<Response> => {\n const ApiLive = apiLive.pipe(\n Layer.provide(\n Layer.mergeAll(\n QueryRunner.layer(ctx.runQuery),\n MutationRunner.layer(ctx.runMutation),\n ActionRunner.layer(ctx.runAction),\n Scheduler.layer(ctx.scheduler),\n Auth.layer(ctx.auth),\n StorageReader.layer(ctx.storage),\n StorageWriter.layer(ctx.storage),\n StorageActionWriter.layer(ctx.storage),\n Layer.succeed(ActionCtx.ActionCtx<DataModel>(), ctx),\n ),\n ),\n );\n\n const ApiDocsLive = HttpApiScalar.layer({\n path: `${pathPrefix}docs`,\n scalar: {\n baseServerURL: `${process.env[\"CONVEX_SITE_URL\"]}${pathPrefix}`,\n ...scalar,\n },\n }).pipe(Layer.provide(ApiLive));\n\n const EnvLive = Layer.mergeAll(\n ApiLive,\n ApiDocsLive,\n HttpServer.layerContext,\n );\n\n const { handler } = HttpApiBuilder.toWebHandler(\n EnvLive,\n middleware ? { middleware } : {},\n );\n\n return handler(request);\n };\n\nconst makeHttpAction = <DataModel extends GenericDataModel>({\n pathPrefix,\n apiLive,\n middleware,\n scalar,\n}: {\n pathPrefix: RoutePath;\n apiLive: Layer.Layer<\n HttpApi.Api,\n never,\n | QueryRunner.QueryRunner\n | MutationRunner.MutationRunner\n | ActionRunner.ActionRunner\n | Scheduler.Scheduler\n | Auth.Auth\n | StorageReader\n | StorageWriter\n | StorageActionWriter\n | GenericActionCtx<DataModel>\n >;\n middleware?: Middleware;\n scalar?: HttpApiScalar.ScalarConfig;\n}) =>\n httpActionGeneric(\n makeHandler<DataModel>({\n pathPrefix,\n apiLive,\n ...(middleware ? { middleware } : {}),\n ...(scalar ? { scalar } : {}),\n }) as unknown as (\n ctx: GenericActionCtx<GenericDataModel>,\n request: Request,\n ) => Promise<Response>,\n );\n\nexport type HttpApi_ = {\n apiLive: Layer.Layer<\n HttpApi.Api,\n never,\n | QueryRunner.QueryRunner\n | MutationRunner.MutationRunner\n | ActionRunner.ActionRunner\n | Scheduler.Scheduler\n | Auth.Auth\n | StorageReader\n | StorageWriter\n | StorageActionWriter\n >;\n middleware?: Middleware;\n scalar?: HttpApiScalar.ScalarConfig;\n};\n\nexport type RoutePath = \"/\" | `/${string}/`;\n\nconst mountEffectHttpApi =\n <DataModel extends GenericDataModel>({\n pathPrefix,\n apiLive,\n middleware,\n scalar,\n }: {\n pathPrefix: RoutePath;\n apiLive: Layer.Layer<\n HttpApi.Api,\n never,\n | QueryRunner.QueryRunner\n | MutationRunner.MutationRunner\n | ActionRunner.ActionRunner\n | Scheduler.Scheduler\n | Auth.Auth\n | StorageReader\n | StorageWriter\n | StorageActionWriter\n | GenericActionCtx<DataModel>\n >;\n middleware?: Middleware;\n scalar?: HttpApiScalar.ScalarConfig;\n }) =>\n (convexHttpRouter: ConvexHttpRouter): ConvexHttpRouter => {\n const handler = makeHttpAction<DataModel>({\n pathPrefix,\n apiLive,\n ...(middleware ? { middleware } : {}),\n ...(scalar ? { scalar } : {}),\n });\n\n Array.forEach(ROUTABLE_HTTP_METHODS, (method) => {\n const routeSpec: RouteSpecWithPathPrefix = {\n pathPrefix,\n method,\n handler,\n };\n convexHttpRouter.route(routeSpec);\n });\n\n return convexHttpRouter;\n };\n\ntype HttpApis = Partial<Record<RoutePath, HttpApi_>>;\n\nexport const make = (httpApis: HttpApis): ConvexHttpRouter => {\n applyMonkeyPatches();\n\n return pipe(\n httpApis as Record<RoutePath, HttpApi_>,\n Record.toEntries,\n Array.reduce(\n httpRouter(),\n (convexHttpRouter, [pathPrefix, { apiLive, middleware, scalar }]) =>\n mountEffectHttpApi({\n pathPrefix: pathPrefix as RoutePath,\n apiLive,\n ...(middleware ? { middleware } : {}),\n ...(scalar ? { scalar } : {}),\n })(convexHttpRouter),\n ),\n );\n};\n\nconst applyMonkeyPatches = () => {\n // These are necessary until the Convex runtime supports these APIs. See https://discord.com/channels/1019350475847499849/1281364098419785760\n\n // eslint-disable-next-line no-global-assign\n URL = class extends URL {\n override get username() {\n return \"\";\n }\n override get password() {\n return \"\";\n }\n };\n\n Object.defineProperty(Request.prototype, \"signal\", {\n get: () => new AbortSignal(),\n });\n};\n"],"mappings":";;;;;;;;;;;;;;AAiCA,MAAM,eACiC,EACnC,YACA,SACA,YACA,cAmBD,KAAkC,YAAwC;CACzE,MAAM,UAAU,QAAQ,KACtB,MAAM,QACJ,MAAM,SACJA,QAAkB,IAAI,SAAS,EAC/BC,QAAqB,IAAI,YAAY,EACrCC,MAAmB,IAAI,UAAU,EACjCC,QAAgB,IAAI,UAAU,EAC9BC,QAAW,IAAI,KAAK,EACpBC,gBAAc,MAAM,IAAI,QAAQ,EAChCC,gBAAc,MAAM,IAAI,QAAQ,EAChCC,sBAAoB,MAAM,IAAI,QAAQ,EACtC,MAAM,QAAQC,WAAgC,EAAE,IAAI,CACrD,CACF,CACF;CAED,MAAM,cAAc,cAAc,MAAM;EACtC,MAAM,GAAG,WAAW;EACpB,QAAQ;GACN,eAAe,GAAG,QAAQ,IAAI,qBAAqB;GACnD,GAAG;GACJ;EACF,CAAC,CAAC,KAAK,MAAM,QAAQ,QAAQ,CAAC;CAE/B,MAAM,UAAU,MAAM,SACpB,SACA,aACA,WAAW,aACZ;CAED,MAAM,EAAE,YAAY,eAAe,aACjC,SACA,aAAa,EAAE,YAAY,GAAG,EAAE,CACjC;AAED,QAAO,QAAQ,QAAQ;;AAG3B,MAAM,kBAAsD,EAC1D,YACA,SACA,YACA,aAmBA,kBACE,YAAuB;CACrB;CACA;CACA,GAAI,aAAa,EAAE,YAAY,GAAG,EAAE;CACpC,GAAI,SAAS,EAAE,QAAQ,GAAG,EAAE;CAC7B,CAAC,CAIH;AAqBH,MAAM,sBACiC,EACnC,YACA,SACA,YACA,cAmBD,qBAAyD;CACxD,MAAM,UAAU,eAA0B;EACxC;EACA;EACA,GAAI,aAAa,EAAE,YAAY,GAAG,EAAE;EACpC,GAAI,SAAS,EAAE,QAAQ,GAAG,EAAE;EAC7B,CAAC;AAEF,OAAM,QAAQ,wBAAwB,WAAW;EAC/C,MAAMC,YAAqC;GACzC;GACA;GACA;GACD;AACD,mBAAiB,MAAM,UAAU;GACjC;AAEF,QAAO;;AAKX,MAAa,QAAQ,aAAyC;AAC5D,qBAAoB;AAEpB,QAAO,KACL,UACA,OAAO,WACP,MAAM,OACJ,YAAY,GACX,kBAAkB,CAAC,YAAY,EAAE,SAAS,YAAY,cACrD,mBAAmB;EACL;EACZ;EACA,GAAI,aAAa,EAAE,YAAY,GAAG,EAAE;EACpC,GAAI,SAAS,EAAE,QAAQ,GAAG,EAAE;EAC7B,CAAC,CAAC,iBAAiB,CACvB,CACF;;AAGH,MAAM,2BAA2B;AAI/B,OAAM,cAAc,IAAI;EACtB,IAAa,WAAW;AACtB,UAAO;;EAET,IAAa,WAAW;AACtB,UAAO;;;AAIX,QAAO,eAAe,QAAQ,WAAW,UAAU,EACjD,WAAW,IAAI,aAAa,EAC7B,CAAC"}
package/dist/Impl.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { AnyWithProps as AnyWithProps$1, Groups } from "./Api.js";
2
+ import { FromGroups } from "./GroupImpl.js";
3
+ import { Context, Layer } from "effect";
4
+
5
+ //#region src/Impl.d.ts
6
+ declare namespace Impl_d_exports {
7
+ export { AnyWithProps, FinalizationStatus, Impl, TypeId, finalize, isImpl, make };
8
+ }
9
+ declare const TypeId = "@confect/server/Impl";
10
+ type TypeId = typeof TypeId;
11
+ declare const isImpl: (u: unknown) => u is AnyWithProps;
12
+ interface Impl<Api_ extends AnyWithProps$1, FinalizationStatus_ extends FinalizationStatus> {
13
+ readonly [TypeId]: TypeId;
14
+ readonly api: Api_;
15
+ readonly finalizationStatus: FinalizationStatus_;
16
+ }
17
+ type FinalizationStatus = "Unfinalized" | "Finalized";
18
+ interface AnyWithProps extends Impl<AnyWithProps$1, FinalizationStatus> {}
19
+ declare const Impl: <Api_ extends AnyWithProps$1, FinalizationStatus_ extends FinalizationStatus>() => Context.Tag<Impl<Api_, FinalizationStatus_>, Impl<Api_, FinalizationStatus_>>;
20
+ declare const make: <Api_ extends AnyWithProps$1>(api: Api_) => Layer.Layer<Impl<Api_, "Unfinalized">, never, FromGroups<Groups<Api_>>>;
21
+ declare const finalize: <Api_ extends AnyWithProps$1>(impl: Layer.Layer<Impl<Api_, "Unfinalized">>) => Layer.Layer<Impl<Api_, "Finalized">>;
22
+ //#endregion
23
+ export { AnyWithProps, FinalizationStatus, Impl, Impl_d_exports, TypeId, finalize, isImpl, make };
24
+ //# sourceMappingURL=Impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Impl.d.ts","names":[],"sources":["../src/Impl.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAKa,MAAA;KACD,MAAA,UAAgB;cAEf,6BAA4B;UAGxB,kBACF,4CACe;YAElB,MAAA,GAAS;gBACL;+BACe;;KAGnB,kBAAA;UAEK,YAAA,SACP,KAAK,gBAAkB;AAlBpB,cAoBA,IApBM,EAAA,CAAA,aAqBJ,cArBI,EAAA,4BAsBW,kBAtBX,CAAA,GAAA,GAsB6B,OAAA,CAAA,GAtB7B,CAsB6B,IAtB7B,CAsB6B,IAtB7B,EAsB6B,mBAtB7B,CAAA,EAsB6B,IAtB7B,CAsB6B,IAtB7B,EAsB6B,mBAtB7B,CAAA,CAAA;AACP,cAyBC,IAzBe,EAAA,CAAA,aAyBM,cAzBA,CAAA,CAAA,GAAA,EA0B3B,IA1B2B,EAAA,GA2B/B,KAAA,CAAM,KA3ByB,CA4BhC,IA5BgC,CA4B3B,IA5B2B,EAAA,aAAA,CAAA,EAAA,KAAA,EA8BhC,UA9BgC,CA8BX,MA9BW,CA8BD,IA9BC,CAAA,CAAA,CAAA;AAErB,cAuCA,QAvC4B,EAAA,CAAA,aAuCH,cAtCJ,CAAA,CAAA,IAAA,EAuC1B,KAAA,CAAM,KAvCoB,CAuCd,IAvCc,CAuCT,IAvCS,EAAA,aAAA,CAAA,CAAA,EAAA,GAwC/B,KAAA,CAAM,KAxCyB,CAwCnB,IAxCmB,CAwCd,IAxCc,EAAA,WAAA,CAAA,CAAA"}
package/dist/Impl.js ADDED
@@ -0,0 +1,28 @@
1
+ import { __export } from "./_virtual/rolldown_runtime.js";
2
+ import { Context, Effect, Layer, Predicate } from "effect";
3
+
4
+ //#region src/Impl.ts
5
+ var Impl_exports = /* @__PURE__ */ __export({
6
+ Impl: () => Impl,
7
+ TypeId: () => TypeId,
8
+ finalize: () => finalize,
9
+ isImpl: () => isImpl,
10
+ make: () => make
11
+ });
12
+ const TypeId = "@confect/server/Impl";
13
+ const isImpl = (u) => Predicate.hasProperty(u, TypeId);
14
+ const Impl = () => Context.GenericTag(`@confect/server/Impl`);
15
+ const make = (api) => Layer.effect(Impl(), Effect.succeed({
16
+ [TypeId]: TypeId,
17
+ api,
18
+ finalizationStatus: "Unfinalized"
19
+ }));
20
+ const finalize = (impl) => Layer.map(impl, (context) => Context.make(Impl(), {
21
+ [TypeId]: TypeId,
22
+ api: Context.get(context, Impl()).api,
23
+ finalizationStatus: "Finalized"
24
+ }));
25
+
26
+ //#endregion
27
+ export { Impl, Impl_exports, TypeId, finalize, isImpl, make };
28
+ //# sourceMappingURL=Impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Impl.js","names":[],"sources":["../src/Impl.ts"],"sourcesContent":["import { Context, Effect, Layer, Predicate } from \"effect\";\nimport type * as Api from \"./Api\";\nimport type { Groups as ApiGroups } from \"./Api\";\nimport type * as GroupImpl from \"./GroupImpl\";\n\nexport const TypeId = \"@confect/server/Impl\";\nexport type TypeId = typeof TypeId;\n\nexport const isImpl = (u: unknown): u is AnyWithProps =>\n Predicate.hasProperty(u, TypeId);\n\nexport interface Impl<\n Api_ extends Api.AnyWithProps,\n FinalizationStatus_ extends FinalizationStatus,\n> {\n readonly [TypeId]: TypeId;\n readonly api: Api_;\n readonly finalizationStatus: FinalizationStatus_;\n}\n\nexport type FinalizationStatus = \"Unfinalized\" | \"Finalized\";\n\nexport interface AnyWithProps\n extends Impl<Api.AnyWithProps, FinalizationStatus> {}\n\nexport const Impl = <\n Api_ extends Api.AnyWithProps,\n FinalizationStatus_ extends FinalizationStatus,\n>() =>\n Context.GenericTag<Impl<Api_, FinalizationStatus_>>(`@confect/server/Impl`);\n\nexport const make = <Api_ extends Api.AnyWithProps>(\n api: Api_,\n): Layer.Layer<\n Impl<Api_, \"Unfinalized\">,\n never,\n GroupImpl.FromGroups<ApiGroups<Api_>>\n> =>\n Layer.effect(\n Impl<Api_, \"Unfinalized\">(),\n Effect.succeed({\n [TypeId]: TypeId,\n api,\n finalizationStatus: \"Unfinalized\" as const,\n }),\n );\n\nexport const finalize = <Api_ extends Api.AnyWithProps>(\n impl: Layer.Layer<Impl<Api_, \"Unfinalized\">>,\n): Layer.Layer<Impl<Api_, \"Finalized\">> =>\n Layer.map(impl, (context) =>\n Context.make(Impl<Api_, \"Finalized\">(), {\n [TypeId]: TypeId,\n api: Context.get(context, Impl<Api_, \"Unfinalized\">()).api,\n finalizationStatus: \"Finalized\",\n }),\n );\n"],"mappings":";;;;;;;;;;;AAKA,MAAa,SAAS;AAGtB,MAAa,UAAU,MACrB,UAAU,YAAY,GAAG,OAAO;AAgBlC,MAAa,aAIX,QAAQ,WAA4C,uBAAuB;AAE7E,MAAa,QACX,QAMA,MAAM,OACJ,MAA2B,EAC3B,OAAO,QAAQ;EACZ,SAAS;CACV;CACA,oBAAoB;CACrB,CAAC,CACH;AAEH,MAAa,YACX,SAEA,MAAM,IAAI,OAAO,YACf,QAAQ,KAAK,MAAyB,EAAE;EACrC,SAAS;CACV,KAAK,QAAQ,IAAI,SAAS,MAA2B,CAAC,CAAC;CACvD,oBAAoB;CACrB,CAAC,CACH"}
@@ -0,0 +1,12 @@
1
+ import { Context } from "effect";
2
+ import { GenericDataModel, GenericMutationCtx } from "convex/server";
3
+
4
+ //#region src/MutationCtx.d.ts
5
+ declare namespace MutationCtx_d_exports {
6
+ export { MutationCtx };
7
+ }
8
+ declare const MutationCtx: <DataModel extends GenericDataModel>() => Context.Tag<GenericMutationCtx<DataModel>, GenericMutationCtx<DataModel>>;
9
+ type MutationCtx<DataModel extends GenericDataModel> = ReturnType<typeof MutationCtx<DataModel>>["Identifier"];
10
+ //#endregion
11
+ export { MutationCtx, MutationCtx_d_exports };
12
+ //# sourceMappingURL=MutationCtx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationCtx.d.ts","names":[],"sources":["../src/MutationCtx.ts"],"sourcesContent":[],"mappings":";;;;;;;cAGa,gCAAiC,uBAAgB,OAAA,CAAA,IAAA,mBAAA,YAAA,mBAAA;KAKlD,8BAA8B,oBAAoB,kBACrD,YAAY"}
@@ -0,0 +1,10 @@
1
+ import { __export } from "./_virtual/rolldown_runtime.js";
2
+ import { Context } from "effect";
3
+
4
+ //#region src/MutationCtx.ts
5
+ var MutationCtx_exports = /* @__PURE__ */ __export({ MutationCtx: () => MutationCtx });
6
+ const MutationCtx = () => Context.GenericTag("@confect/server/MutationCtx");
7
+
8
+ //#endregion
9
+ export { MutationCtx, MutationCtx_exports };
10
+ //# sourceMappingURL=MutationCtx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationCtx.js","names":[],"sources":["../src/MutationCtx.ts"],"sourcesContent":["import type { GenericDataModel, GenericMutationCtx } from \"convex/server\";\nimport { Context } from \"effect\";\n\nexport const MutationCtx = <DataModel extends GenericDataModel>() =>\n Context.GenericTag<GenericMutationCtx<DataModel>>(\n \"@confect/server/MutationCtx\",\n );\n\nexport type MutationCtx<DataModel extends GenericDataModel> = ReturnType<\n typeof MutationCtx<DataModel>\n>[\"Identifier\"];\n"],"mappings":";;;;;AAGA,MAAa,oBACX,QAAQ,WACN,8BACD"}
@@ -0,0 +1,24 @@
1
+ import { Context, Effect, Layer, Schema } from "effect";
2
+ import * as Ref$1 from "@confect/core/Ref";
3
+ import { GenericMutationCtx } from "convex/server";
4
+ import * as effect_ParseResult2 from "effect/ParseResult";
5
+
6
+ //#region src/MutationRunner.d.ts
7
+ declare namespace MutationRunner_d_exports {
8
+ export { MutationRollback, MutationRunner, layer };
9
+ }
10
+ declare const MutationRunner: Context.Tag<(<Mutation extends Ref$1.AnyMutation>(mutation: Mutation, args: Ref$1.Args<Mutation>["Type"]) => Effect.Effect<any, effect_ParseResult2.ParseError, never>), <Mutation extends Ref$1.AnyMutation>(mutation: Mutation, args: Ref$1.Args<Mutation>["Type"]) => Effect.Effect<any, effect_ParseResult2.ParseError, never>>;
11
+ type MutationRunner = typeof MutationRunner.Identifier;
12
+ declare const layer: (runMutation: GenericMutationCtx<any>["runMutation"]) => Layer.Layer<(<Mutation extends Ref$1.AnyMutation>(mutation: Mutation, args: Ref$1.Args<Mutation>["Type"]) => Effect.Effect<any, effect_ParseResult2.ParseError, never>), never, never>;
13
+ declare const MutationRollback_base: Schema.TaggedErrorClass<MutationRollback, "MutationRollback", {
14
+ readonly _tag: Schema.tag<"MutationRollback">;
15
+ } & {
16
+ mutationName: typeof Schema.String;
17
+ error: typeof Schema.Unknown;
18
+ }>;
19
+ declare class MutationRollback extends MutationRollback_base {
20
+ get message(): string;
21
+ }
22
+ //#endregion
23
+ export { MutationRollback, MutationRunner, MutationRunner_d_exports, layer };
24
+ //# sourceMappingURL=MutationRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationRunner.d.ts","names":[],"sources":["../src/MutationRunner.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAqBa,gBAAc,OAAA,CAAA,uBAfP,KAAA,CAAI,uBACV,gBACJ,KAAA,CAAI,KAAK,sBAAiB,MAAA,CAAA,YAAlB,mBAAA,CAAkB,UAAA,6BAFhB,KAAA,CAAI,uBACV,gBACJ,KAAA,CAAI,KAAK,sBAAiB,MAAA,CAAA,YAAlB,mBAAA,CAAkB,UAAA;KAgBxB,cAAA,UAAwB,cAAA,CAAe;cAEtC,qBAAsB,2CAAsC,KAAA,CAAA,yBApBrD,KAAA,CAAI,uBACV,gBACJ,KAAA,CAAI,KAAK,sBAAiB,MAAA,CAAA,YAAlB,mBAAA,CAAkB,UAAA;cAmB6B;;;;;;AANpD,cAQA,gBAAA,SAAyB,qBAAA,CANH;EAjBf,IAAI,OAAA,CAAA,CAAA,EAAA,MAAA"}
@@ -0,0 +1,33 @@
1
+ import { __export } from "./_virtual/rolldown_runtime.js";
2
+ import { Context, Effect, Layer, Schema } from "effect";
3
+ import * as Ref$1 from "@confect/core/Ref";
4
+ import "convex/server";
5
+
6
+ //#region src/MutationRunner.ts
7
+ var MutationRunner_exports = /* @__PURE__ */ __export({
8
+ MutationRollback: () => MutationRollback,
9
+ MutationRunner: () => MutationRunner,
10
+ layer: () => layer
11
+ });
12
+ const makeMutationRunner = (runMutation) => (mutation, args) => Effect.gen(function* () {
13
+ const function_ = Ref$1.getFunction(mutation);
14
+ const functionName = Ref$1.getConvexFunctionName(mutation);
15
+ const encodedArgs = yield* Schema.encode(function_.args)(args);
16
+ const encodedReturns = yield* Effect.promise(() => runMutation(functionName, encodedArgs));
17
+ return yield* Schema.decode(function_.returns)(encodedReturns);
18
+ });
19
+ const MutationRunner = Context.GenericTag("@confect/server/MutationRunner");
20
+ const layer = (runMutation) => Layer.succeed(MutationRunner, makeMutationRunner(runMutation));
21
+ var MutationRollback = class extends Schema.TaggedError("MutationRollback")("MutationRollback", {
22
+ mutationName: Schema.String,
23
+ error: Schema.Unknown
24
+ }) {
25
+ /* v8 ignore start */
26
+ get message() {
27
+ return `Mutation ${this.mutationName} failed and was rolled back.\n\n${this.error}`;
28
+ }
29
+ };
30
+
31
+ //#endregion
32
+ export { MutationRollback, MutationRunner, MutationRunner_exports, layer };
33
+ //# sourceMappingURL=MutationRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MutationRunner.js","names":["Ref"],"sources":["../src/MutationRunner.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { type GenericMutationCtx } from \"convex/server\";\nimport { Context, Effect, Layer, Schema } from \"effect\";\n\nconst makeMutationRunner =\n (runMutation: GenericMutationCtx<any>[\"runMutation\"]) =>\n <Mutation extends Ref.AnyMutation>(\n mutation: Mutation,\n args: Ref.Args<Mutation>[\"Type\"],\n ) =>\n Effect.gen(function* () {\n const function_ = Ref.getFunction(mutation);\n const functionName = Ref.getConvexFunctionName(mutation);\n\n const encodedArgs = yield* Schema.encode(function_.args)(args);\n const encodedReturns = yield* Effect.promise(() =>\n runMutation(functionName as any, encodedArgs),\n );\n return yield* Schema.decode(function_.returns)(encodedReturns);\n });\n\nexport const MutationRunner = Context.GenericTag<\n ReturnType<typeof makeMutationRunner>\n>(\"@confect/server/MutationRunner\");\nexport type MutationRunner = typeof MutationRunner.Identifier;\n\nexport const layer = (runMutation: GenericMutationCtx<any>[\"runMutation\"]) =>\n Layer.succeed(MutationRunner, makeMutationRunner(runMutation));\n\nexport class MutationRollback extends Schema.TaggedError<MutationRollback>(\n \"MutationRollback\",\n)(\"MutationRollback\", {\n mutationName: Schema.String,\n error: Schema.Unknown,\n}) {\n /* v8 ignore start */\n override get message(): string {\n return `Mutation ${this.mutationName} failed and was rolled back.\\n\\n${this.error}`;\n }\n /* v8 ignore stop */\n}\n"],"mappings":";;;;;;;;;;;AAIA,MAAM,sBACH,iBAEC,UACA,SAEA,OAAO,IAAI,aAAa;CACtB,MAAM,YAAYA,MAAI,YAAY,SAAS;CAC3C,MAAM,eAAeA,MAAI,sBAAsB,SAAS;CAExD,MAAM,cAAc,OAAO,OAAO,OAAO,UAAU,KAAK,CAAC,KAAK;CAC9D,MAAM,iBAAiB,OAAO,OAAO,cACnC,YAAY,cAAqB,YAAY,CAC9C;AACD,QAAO,OAAO,OAAO,OAAO,UAAU,QAAQ,CAAC,eAAe;EAC9D;AAEN,MAAa,iBAAiB,QAAQ,WAEpC,iCAAiC;AAGnC,MAAa,SAAS,gBACpB,MAAM,QAAQ,gBAAgB,mBAAmB,YAAY,CAAC;AAEhE,IAAa,mBAAb,cAAsC,OAAO,YAC3C,mBACD,CAAC,oBAAoB;CACpB,cAAc,OAAO;CACrB,OAAO,OAAO;CACf,CAAC,CAAC;;CAED,IAAa,UAAkB;AAC7B,SAAO,YAAY,KAAK,aAAa,kCAAkC,KAAK"}
@@ -0,0 +1,23 @@
1
+ import { DocumentDecodeError } from "./Document.js";
2
+ import { AnyWithProps, ConvexTableInfo, TableSchema } from "./TableInfo.js";
3
+ import { Effect, Option, Stream } from "effect";
4
+ import { OrderedQuery as OrderedQuery$1, PaginationResult } from "convex/server";
5
+
6
+ //#region src/OrderedQuery.d.ts
7
+ declare namespace OrderedQuery_d_exports {
8
+ export { OrderedQuery, make };
9
+ }
10
+ type OrderedQuery<TableInfo_ extends AnyWithProps, _TableName extends string> = {
11
+ readonly first: () => Effect.Effect<Option.Option<TableInfo_["document"]>, DocumentDecodeError>;
12
+ readonly take: (n: number) => Effect.Effect<ReadonlyArray<TableInfo_["document"]>, DocumentDecodeError>;
13
+ readonly collect: () => Effect.Effect<ReadonlyArray<TableInfo_["document"]>, DocumentDecodeError>;
14
+ readonly stream: () => Stream.Stream<TableInfo_["document"], DocumentDecodeError>;
15
+ readonly paginate: (options: {
16
+ cursor: string | null;
17
+ numItems: number;
18
+ }) => Effect.Effect<PaginationResult<TableInfo_["document"]>, DocumentDecodeError>;
19
+ };
20
+ declare const make: <TableInfo_ extends AnyWithProps, TableName extends string>(query: OrderedQuery$1<ConvexTableInfo<TableInfo_>>, tableName: TableName, tableSchema: TableSchema<TableInfo_>) => OrderedQuery<TableInfo_, TableName>;
21
+ //#endregion
22
+ export { OrderedQuery, OrderedQuery_d_exports, make };
23
+ //# sourceMappingURL=OrderedQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderedQuery.d.ts","names":[],"sources":["../src/OrderedQuery.ts"],"sourcesContent":[],"mappings":";;;;;;;;;KAQY,gCACS;wBAGG,MAAA,CAAO,OAC3B,MAAA,CAAO,OAAO,yBACd;gCAIG,MAAA,CAAO,OACV,cAAc,yBACd;0BAEsB,MAAA,CAAO,OAC7B,cAAc,yBACd;yBAEqB,MAAA,CAAO,OAC5B,wBACA;;;IApBQ,QAAA,EAAA,MAAY;EACH,CAAA,EAAA,GAwBb,MAAA,CAAO,MAxBM,CAyBjB,gBAzBiB,CAyBA,UAzBA,CAAA,UAAA,CAAA,CAAA,EA0BjB,mBA1BiB,CAAA;CAIH;AAAd,cA0BS,IA1BF,EAAA,CAAA,mBA2BU,YA3BV,EAAA,kBAAA,MAAA,CAAA,CAAA,KAAA,EA8BF,cA9BE,CA8BiB,eA9BjB,CA8B2C,UA9B3C,CAAA,CAAA,EAAA,SAAA,EA+BE,SA/BF,EAAA,WAAA,EAgCI,WAhCJ,CAgC0B,UAhC1B,CAAA,EAAA,GAiCR,YAjCQ,CAiCK,UAjCL,EAiCiB,SAjCjB,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { __export } from "./_virtual/rolldown_runtime.js";
2
+ import { decode } from "./Document.js";
3
+ import { Chunk, Effect, Stream, identity, pipe } from "effect";
4
+
5
+ //#region src/OrderedQuery.ts
6
+ var OrderedQuery_exports = /* @__PURE__ */ __export({ make: () => make });
7
+ const make = (query, tableName, tableSchema) => {
8
+ const streamEncoded = Stream.fromAsyncIterable(query, identity).pipe(Stream.orDie);
9
+ const stream = () => pipe(streamEncoded, Stream.mapEffect(decode(tableName, tableSchema)));
10
+ const first = () => pipe(stream(), Stream.take(1), Stream.runHead);
11
+ const take = (n) => pipe(stream(), Stream.take(n), Stream.runCollect, Effect.map((chunk) => Chunk.toReadonlyArray(chunk)));
12
+ const collect = () => pipe(stream(), Stream.runCollect, Effect.map(Chunk.toReadonlyArray));
13
+ const paginate = (options) => Effect.gen(function* () {
14
+ const paginationResult = yield* Effect.promise(() => query.paginate(options));
15
+ return {
16
+ page: yield* Effect.forEach(paginationResult.page, decode(tableName, tableSchema)),
17
+ isDone: paginationResult.isDone,
18
+ continueCursor: paginationResult.continueCursor,
19
+ ...paginationResult.splitCursor ? { splitCursor: paginationResult.splitCursor } : {},
20
+ ...paginationResult.pageStatus ? { pageStatus: paginationResult.pageStatus } : {}
21
+ };
22
+ });
23
+ return {
24
+ first,
25
+ take,
26
+ collect,
27
+ paginate,
28
+ stream
29
+ };
30
+ };
31
+
32
+ //#endregion
33
+ export { OrderedQuery_exports, make };
34
+ //# sourceMappingURL=OrderedQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderedQuery.js","names":["stream: OrderedQueryFunction<\"stream\">","Document.decode","first: OrderedQueryFunction<\"first\">","take: OrderedQueryFunction<\"take\">","collect: OrderedQueryFunction<\"collect\">","paginate: OrderedQueryFunction<\"paginate\">"],"sources":["../src/OrderedQuery.ts"],"sourcesContent":["import type {\n OrderedQuery as ConvexOrderedQuery,\n PaginationResult,\n} from \"convex/server\";\nimport { Chunk, Effect, identity, type Option, pipe, Stream } from \"effect\";\nimport * as Document from \"./Document\";\nimport type * as TableInfo from \"./TableInfo\";\n\nexport type OrderedQuery<\n TableInfo_ extends TableInfo.AnyWithProps,\n _TableName extends string,\n> = {\n readonly first: () => Effect.Effect<\n Option.Option<TableInfo_[\"document\"]>,\n Document.DocumentDecodeError\n >;\n readonly take: (\n n: number,\n ) => Effect.Effect<\n ReadonlyArray<TableInfo_[\"document\"]>,\n Document.DocumentDecodeError\n >;\n readonly collect: () => Effect.Effect<\n ReadonlyArray<TableInfo_[\"document\"]>,\n Document.DocumentDecodeError\n >;\n readonly stream: () => Stream.Stream<\n TableInfo_[\"document\"],\n Document.DocumentDecodeError\n >;\n readonly paginate: (options: {\n cursor: string | null;\n numItems: number;\n }) => Effect.Effect<\n PaginationResult<TableInfo_[\"document\"]>,\n Document.DocumentDecodeError\n >;\n};\n\nexport const make = <\n TableInfo_ extends TableInfo.AnyWithProps,\n TableName extends string,\n>(\n query: ConvexOrderedQuery<TableInfo.ConvexTableInfo<TableInfo_>>,\n tableName: TableName,\n tableSchema: TableInfo.TableSchema<TableInfo_>,\n): OrderedQuery<TableInfo_, TableName> => {\n type OrderedQueryFunction<\n FunctionName extends keyof OrderedQuery<TableInfo_, TableName>,\n > = OrderedQuery<TableInfo_, TableName>[FunctionName];\n\n const streamEncoded = Stream.fromAsyncIterable(query, identity).pipe(\n Stream.orDie,\n );\n\n const stream: OrderedQueryFunction<\"stream\"> = () =>\n pipe(\n streamEncoded,\n Stream.mapEffect(Document.decode(tableName, tableSchema)),\n );\n\n const first: OrderedQueryFunction<\"first\"> = () =>\n pipe(stream(), Stream.take(1), Stream.runHead);\n\n const take: OrderedQueryFunction<\"take\"> = (n: number) =>\n pipe(\n stream(),\n Stream.take(n),\n Stream.runCollect,\n Effect.map((chunk) => Chunk.toReadonlyArray(chunk)),\n );\n\n const collect: OrderedQueryFunction<\"collect\"> = () =>\n pipe(stream(), Stream.runCollect, Effect.map(Chunk.toReadonlyArray));\n\n const paginate: OrderedQueryFunction<\"paginate\"> = (options) =>\n Effect.gen(function* () {\n const paginationResult = yield* Effect.promise(() =>\n query.paginate(options),\n );\n\n const parsedPage = yield* Effect.forEach(\n paginationResult.page,\n Document.decode(tableName, tableSchema),\n );\n\n return {\n page: parsedPage,\n isDone: paginationResult.isDone,\n continueCursor: paginationResult.continueCursor,\n /* v8 ignore start */\n ...(paginationResult.splitCursor\n ? { splitCursor: paginationResult.splitCursor }\n : {}),\n ...(paginationResult.pageStatus\n ? { pageStatus: paginationResult.pageStatus }\n : {}),\n /* v8 ignore stop */\n };\n });\n\n return {\n first,\n take,\n collect,\n paginate,\n stream,\n };\n};\n"],"mappings":";;;;;;AAuCA,MAAa,QAIX,OACA,WACA,gBACwC;CAKxC,MAAM,gBAAgB,OAAO,kBAAkB,OAAO,SAAS,CAAC,KAC9D,OAAO,MACR;CAED,MAAMA,eACJ,KACE,eACA,OAAO,UAAUC,OAAgB,WAAW,YAAY,CAAC,CAC1D;CAEH,MAAMC,cACJ,KAAK,QAAQ,EAAE,OAAO,KAAK,EAAE,EAAE,OAAO,QAAQ;CAEhD,MAAMC,QAAsC,MAC1C,KACE,QAAQ,EACR,OAAO,KAAK,EAAE,EACd,OAAO,YACP,OAAO,KAAK,UAAU,MAAM,gBAAgB,MAAM,CAAC,CACpD;CAEH,MAAMC,gBACJ,KAAK,QAAQ,EAAE,OAAO,YAAY,OAAO,IAAI,MAAM,gBAAgB,CAAC;CAEtE,MAAMC,YAA8C,YAClD,OAAO,IAAI,aAAa;EACtB,MAAM,mBAAmB,OAAO,OAAO,cACrC,MAAM,SAAS,QAAQ,CACxB;AAOD,SAAO;GACL,MANiB,OAAO,OAAO,QAC/B,iBAAiB,MACjBJ,OAAgB,WAAW,YAAY,CACxC;GAIC,QAAQ,iBAAiB;GACzB,gBAAgB,iBAAiB;GAEjC,GAAI,iBAAiB,cACjB,EAAE,aAAa,iBAAiB,aAAa,GAC7C,EAAE;GACN,GAAI,iBAAiB,aACjB,EAAE,YAAY,iBAAiB,YAAY,GAC3C,EAAE;GAEP;GACD;AAEJ,QAAO;EACL;EACA;EACA;EACA;EACA;EACD"}
@@ -0,0 +1,12 @@
1
+ import { Context } from "effect";
2
+ import { GenericDataModel, GenericQueryCtx } from "convex/server";
3
+
4
+ //#region src/QueryCtx.d.ts
5
+ declare namespace QueryCtx_d_exports {
6
+ export { QueryCtx };
7
+ }
8
+ declare const QueryCtx: <DataModel extends GenericDataModel>() => Context.Tag<GenericQueryCtx<DataModel>, GenericQueryCtx<DataModel>>;
9
+ type QueryCtx<DataModel extends GenericDataModel> = ReturnType<typeof QueryCtx<DataModel>>["Identifier"];
10
+ //#endregion
11
+ export { QueryCtx, QueryCtx_d_exports };
12
+ //# sourceMappingURL=QueryCtx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryCtx.d.ts","names":[],"sources":["../src/QueryCtx.ts"],"sourcesContent":[],"mappings":";;;;;;;cAGa,6BAA8B,uBAAgB,OAAA,CAAA,IAAA,gBAAA,YAAA,gBAAA;KAG/C,2BAA2B,oBAAoB,kBAClD,SAAS"}
@@ -0,0 +1,10 @@
1
+ import { __export } from "./_virtual/rolldown_runtime.js";
2
+ import { Context } from "effect";
3
+
4
+ //#region src/QueryCtx.ts
5
+ var QueryCtx_exports = /* @__PURE__ */ __export({ QueryCtx: () => QueryCtx });
6
+ const QueryCtx = () => Context.GenericTag("@confect/server/QueryCtx");
7
+
8
+ //#endregion
9
+ export { QueryCtx, QueryCtx_exports };
10
+ //# sourceMappingURL=QueryCtx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryCtx.js","names":[],"sources":["../src/QueryCtx.ts"],"sourcesContent":["import type { GenericDataModel, GenericQueryCtx } from \"convex/server\";\nimport { Context } from \"effect\";\n\nexport const QueryCtx = <DataModel extends GenericDataModel>() =>\n Context.GenericTag<GenericQueryCtx<DataModel>>(\"@confect/server/QueryCtx\");\n\nexport type QueryCtx<DataModel extends GenericDataModel> = ReturnType<\n typeof QueryCtx<DataModel>\n>[\"Identifier\"];\n"],"mappings":";;;;;AAGA,MAAa,iBACX,QAAQ,WAAuC,2BAA2B"}
@@ -0,0 +1,49 @@
1
+ import { AnyWithProps, Name, WithName } from "./Table.js";
2
+ import { DocumentDecodeError } from "./Document.js";
3
+ import { AnyWithProps as AnyWithProps$1 } from "./TableInfo.js";
4
+ import { AnyWithProps as AnyWithProps$2, DataModel, FromTables, TableInfoWithName, TableInfoWithName_, TableNames, ToConvex } from "./DataModel.js";
5
+ import { OrderedQuery as OrderedQuery$1 } from "./OrderedQuery.js";
6
+ import { Effect, Schema } from "effect";
7
+ import { DocumentByInfo, GenericTableInfo, IndexRange, IndexRangeBuilder, Indexes, NamedIndex, NamedSearchIndex, SearchFilter, SearchFilterBuilder, SearchIndexes } from "convex/server";
8
+ import { GenericId } from "convex/values";
9
+ import { BaseDatabaseReader, IndexFieldTypesForEq } from "@confect/core/Types";
10
+
11
+ //#region src/QueryInitializer.d.ts
12
+ declare namespace QueryInitializer_d_exports {
13
+ export { GetByIdFailure, GetByIndexFailure, getById, make };
14
+ }
15
+ type QueryInitializer<DataModel_ extends AnyWithProps$2, TableName extends TableNames<DataModel_>, _ConvexTableInfo extends GenericTableInfo, _TableInfo extends AnyWithProps$1> = {
16
+ readonly get: {
17
+ (id: GenericId<TableName>): Effect.Effect<_TableInfo["document"], DocumentDecodeError | GetByIdFailure>;
18
+ <IndexName extends keyof Indexes<_ConvexTableInfo>>(indexName: IndexName, ...indexFieldValues: IndexFieldTypesForEq<ToConvex<DataModel_>, TableName, Indexes<_ConvexTableInfo>[IndexName]>): Effect.Effect<_TableInfo["document"], DocumentDecodeError | GetByIndexFailure>;
19
+ };
20
+ readonly index: {
21
+ <IndexName extends keyof Indexes<_ConvexTableInfo>>(indexName: IndexName, indexRange?: (q: IndexRangeBuilder<_TableInfo["convexDocument"], NamedIndex<_ConvexTableInfo, IndexName>>) => IndexRange, order?: "asc" | "desc"): OrderedQuery$1<_TableInfo, TableName>;
22
+ <IndexName extends keyof Indexes<_ConvexTableInfo>>(indexName: IndexName, order?: "asc" | "desc"): OrderedQuery$1<_TableInfo, TableName>;
23
+ };
24
+ readonly search: <IndexName extends keyof SearchIndexes<_ConvexTableInfo>>(indexName: IndexName, searchFilter: (q: SearchFilterBuilder<DocumentByInfo<_ConvexTableInfo>, NamedSearchIndex<_ConvexTableInfo, IndexName>>) => SearchFilter) => OrderedQuery$1<_TableInfo, TableName>;
25
+ };
26
+ declare const make: <Tables extends AnyWithProps, TableName extends Name<Tables>>(tableName: TableName, convexDatabaseReader: BaseDatabaseReader<ToConvex<FromTables<Tables>>>, table: WithName<Tables, TableName>) => QueryInitializer<DataModel<Tables>, TableName, TableInfoWithName<DataModel<Tables>, TableName>, TableInfoWithName_<DataModel<Tables>, TableName>>;
27
+ declare const getById: <Tables extends AnyWithProps, TableName extends Name<Tables>>(tableName: TableName, convexDatabaseReader: BaseDatabaseReader<ToConvex<FromTables<Tables>>>, table: WithName<Tables, TableName>) => (id: GenericId<TableName>) => Effect.Effect<any, GetByIdFailure | DocumentDecodeError, never>;
28
+ declare const GetByIdFailure_base: Schema.TaggedErrorClass<GetByIdFailure, "GetByIdFailure", {
29
+ readonly _tag: Schema.tag<"GetByIdFailure">;
30
+ } & {
31
+ id: typeof Schema.String;
32
+ tableName: typeof Schema.String;
33
+ }>;
34
+ declare class GetByIdFailure extends GetByIdFailure_base {
35
+ get message(): string;
36
+ }
37
+ declare const GetByIndexFailure_base: Schema.TaggedErrorClass<GetByIndexFailure, "GetByIndexFailure", {
38
+ readonly _tag: Schema.tag<"GetByIndexFailure">;
39
+ } & {
40
+ tableName: typeof Schema.String;
41
+ indexName: typeof Schema.String;
42
+ indexFieldValues: Schema.Array$<typeof Schema.String>;
43
+ }>;
44
+ declare class GetByIndexFailure extends GetByIndexFailure_base {
45
+ get message(): string;
46
+ }
47
+ //#endregion
48
+ export { GetByIdFailure, GetByIndexFailure, QueryInitializer_d_exports, getById, make };
49
+ //# sourceMappingURL=QueryInitializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryInitializer.d.ts","names":[],"sources":["../src/QueryInitializer.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;KA6BK,oCACgB,kCACD,WAAqB,sCACd,qCACN;;SAIX,UAAU,aACb,MAAA,CAAO,OACR,wBACA,sBAA+B;6BAER,QAAQ,8BACpB,gCACU,qBACnB,SAAmB,aACnB,WACA,QAAQ,kBAAkB,cAE3B,MAAA,CAAO,OACR,wBACA,sBAA+B;;;6BAIR,QAAQ,8BACpB,4BAEN,kBACD,8BACA,WAAW,kBAAkB,gBAE5B,qCAEJ,eAA0B,YAAY;6BAChB,QAAQ,8BACpB,oCAEV,eAA0B,YAAY;;EAvCxC,SAAA,MAAA,EAAA,CAAA,kBAAgB,MAyCuB,aAzCvB,CAyCqC,gBAzCrC,CAAA,CAAA,CAAA,SAAA,EA0CN,SA1CM,EAAA,YAAA,EAAA,CAAA,CAAA,EA4CZ,mBA5CY,CA6Cb,cA7Ca,CA6CE,gBA7CF,CAAA,EA8Cb,gBA9Ca,CA8CI,gBA9CJ,EA8CsB,SA9CtB,CAAA,CAAA,EAAA,GAgDZ,YAhDY,EAAA,GAiDd,cAjDc,CAiDY,UAjDZ,EAiDwB,SAjDxB,CAAA;CACA;AACoB,cAkD5B,IAlD4B,EAAA,CAAA,eAmDxB,YAnDwB,EAAA,kBAoDrB,IApDqB,CAoDV,MApDU,CAAA,CAAA,CAAA,SAAA,EAsD5B,SAtD4B,EAAA,oBAAA,EAuDjB,kBAvDiB,CAwDrC,QAxDqC,CAwDlB,UAxDkB,CAwDG,MAxDH,CAAA,CAAA,CAAA,EAAA,KAAA,EA0DhC,QA1DgC,CA0DjB,MA1DiB,EA0DT,SA1DS,CAAA,EAAA,GA2DtC,gBA3DsC,CA4DvC,SA5DuC,CA4DnB,MA5DmB,CAAA,EA6DvC,SA7DuC,EA8DvC,iBA9DuC,CA8DX,SA9DW,CA8DS,MA9DT,CAAA,EA8DkB,SA9DlB,CAAA,EA+DvC,kBA/DuC,CA+DV,SA/DU,CA+DU,MA/DV,CAAA,EA+DmB,SA/DnB,CAAA,CAAA;AAArB,cA0OP,OA1OO,EAAA,CAAA,eA2OF,YA3OE,EAAA,kBA2OoC,IA3OpC,CA2O+C,MA3O/C,CAAA,CAAA,CAAA,SAAA,EA4OL,SA5OK,EAAA,oBAAA,EA6OM,kBA7ON,CA8Od,QA9Oc,CA8OK,UA9OL,CA8O0B,MA9O1B,CAAA,CAAA,CAAA,EAAA,KAAA,EAgPT,QAhPS,CAgPM,MAhPN,EAgPc,SAhPd,CAAA,EAAA,GAAA,CAAA,EAAA,EAkPb,SAlPa,CAkPH,SAlPG,CAAA,EAAA,GAkPO,MAAA,CAAA,MAlPP,CAAA,GAAA,EAkPO,cAlPP,GAkPO,mBAlPP,EAAA,KAAA,CAAA;cAyPd,mBAxPqB,yBAAA,eAAA,EAAA,gBAAA,EAAA;EACN,SAAA,IAAA,YAAA,CAAA,gBAAA,CAAA;CAID,GAAA;EAAV,EAAA,EAAA,oBAAA;EAEJ,SAAA,EAAA,oBAAA;CACA,CAAA;AAA+B,cAkPxB,cAAA,SAAuB,mBAAA,CAlPC;EAF9B,IAAO,OAAA,CAAA,CAAA,EAAA,MAAA;;cAiQb,sBA7P4B,yBAAA,kBAAA,EAAA,mBAAA,EAAA;EACZ,SAAA,IAAA,YAAA,CAAA,mBAAA,CAAA;CAEU,GAAA;EAAnB,SAAA,EAAA,oBAAA;EACA,SAAA,EAAA,oBAAA;EACQ,gBAAA,eAAA,CAAA,oBAAA,CAAA;CAAR,CAAA;AAA0B,cA0PrB,iBAAA,SAA0B,sBAAA,CA1PL;EAHP,IAAA,OAAA,CAAA,CAAA,EAAA,MAAA"}
@@ -0,0 +1,83 @@
1
+ import { __export } from "./_virtual/rolldown_runtime.js";
2
+ import { decode, documentErrorMessage } from "./Document.js";
3
+ import { make as make$1 } from "./OrderedQuery.js";
4
+ import { Array, Effect, Either, Schema, pipe } from "effect";
5
+
6
+ //#region src/QueryInitializer.ts
7
+ var QueryInitializer_exports = /* @__PURE__ */ __export({
8
+ GetByIdFailure: () => GetByIdFailure,
9
+ GetByIndexFailure: () => GetByIndexFailure,
10
+ getById: () => getById,
11
+ make: () => make
12
+ });
13
+ const make = (tableName, convexDatabaseReader, table) => {
14
+ const getByIndex = (indexName, indexFieldValues) => {
15
+ const indexFields = table.indexes[indexName];
16
+ return pipe(Effect.promise(() => convexDatabaseReader.query(tableName).withIndex(indexName, (q) => Array.reduce(indexFieldValues, q, (q_, v, i) => q_.eq(indexFields[i], v))).unique()), Effect.andThen(Either.fromNullable(() => new GetByIndexFailure({
17
+ tableName,
18
+ indexName,
19
+ indexFieldValues
20
+ }))), Effect.andThen(decode(tableName, table.Fields)));
21
+ };
22
+ const get = ((...args) => {
23
+ if (args.length === 1) {
24
+ const id = args[0];
25
+ return getById(tableName, convexDatabaseReader, table)(id);
26
+ } else {
27
+ const [indexName, ...indexFieldValues] = args;
28
+ return getByIndex(indexName, indexFieldValues);
29
+ }
30
+ });
31
+ const index = (indexName, indexRangeOrOrder, order) => {
32
+ const { applyWithIndex, applyOrder } = indexRangeOrOrder === void 0 ? {
33
+ applyWithIndex: (q) => q.withIndex(indexName),
34
+ applyOrder: (q) => q.order("asc")
35
+ } : typeof indexRangeOrOrder === "function" ? order === void 0 ? {
36
+ applyWithIndex: (q) => q.withIndex(indexName, indexRangeOrOrder),
37
+ applyOrder: (q) => q.order("asc")
38
+ } : {
39
+ applyWithIndex: (q) => q.withIndex(indexName, indexRangeOrOrder),
40
+ applyOrder: (q) => q.order(order)
41
+ } : {
42
+ applyWithIndex: (q) => q.withIndex(indexName),
43
+ applyOrder: (q) => q.order(indexRangeOrOrder)
44
+ };
45
+ const orderedQuery = pipe(convexDatabaseReader.query(tableName), applyWithIndex, applyOrder);
46
+ return make$1(orderedQuery, tableName, table.Fields);
47
+ };
48
+ const search = (indexName, searchFilter) => make$1(convexDatabaseReader.query(tableName).withSearchIndex(indexName, searchFilter), tableName, table.Fields);
49
+ return {
50
+ get,
51
+ index,
52
+ search
53
+ };
54
+ };
55
+ const getById = (tableName, convexDatabaseReader, table) => (id) => pipe(Effect.promise(() => convexDatabaseReader.get(id)), Effect.andThen(Either.fromNullable(() => new GetByIdFailure({
56
+ tableName,
57
+ id
58
+ }))), Effect.andThen(decode(tableName, table.Fields)));
59
+ var GetByIdFailure = class extends Schema.TaggedError("GetByIdFailure")("GetByIdFailure", {
60
+ id: Schema.String,
61
+ tableName: Schema.String
62
+ }) {
63
+ get message() {
64
+ return documentErrorMessage({
65
+ id: this.id,
66
+ tableName: this.tableName,
67
+ message: "not found"
68
+ });
69
+ }
70
+ };
71
+ var GetByIndexFailure = class extends Schema.TaggedError("GetByIndexFailure")("GetByIndexFailure", {
72
+ tableName: Schema.String,
73
+ indexName: Schema.String,
74
+ indexFieldValues: Schema.Array(Schema.String)
75
+ }) {
76
+ get message() {
77
+ return `No documents found in table '${this.tableName}' with index '${this.indexName}' and field values '${this.indexFieldValues}'`;
78
+ }
79
+ };
80
+
81
+ //#endregion
82
+ export { GetByIdFailure, GetByIndexFailure, QueryInitializer_exports, getById, make };
83
+ //# sourceMappingURL=QueryInitializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryInitializer.js","names":["indexFields: GenericTableIndexes[keyof GenericTableIndexes]","Document.decode","get: QueryInitializerFunction<\"get\">","index: QueryInitializerFunction<\"index\">","OrderedQuery.make","search: QueryInitializerFunction<\"search\">","Document.documentErrorMessage"],"sources":["../src/QueryInitializer.ts"],"sourcesContent":["import type {\n OrderedQuery as ConvexOrderedQuery,\n QueryInitializer as ConvexQueryInitializer,\n DocumentByInfo,\n GenericTableIndexes,\n GenericTableInfo,\n Indexes,\n IndexRange,\n IndexRangeBuilder,\n NamedIndex,\n NamedSearchIndex,\n NamedTableInfo,\n Query,\n SearchFilter,\n SearchFilterBuilder,\n SearchIndexes,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\nimport { Array, Effect, Either, pipe, Schema } from \"effect\";\nimport type {\n BaseDatabaseReader,\n IndexFieldTypesForEq,\n} from \"@confect/core/Types\";\nimport type * as DataModel from \"./DataModel\";\nimport * as Document from \"./Document\";\nimport * as OrderedQuery from \"./OrderedQuery\";\nimport type * as Table from \"./Table\";\nimport type * as TableInfo from \"./TableInfo\";\n\ntype QueryInitializer<\n DataModel_ extends DataModel.AnyWithProps,\n TableName extends DataModel.TableNames<DataModel_>,\n _ConvexTableInfo extends GenericTableInfo,\n _TableInfo extends TableInfo.AnyWithProps,\n> = {\n readonly get: {\n (\n id: GenericId<TableName>,\n ): Effect.Effect<\n _TableInfo[\"document\"],\n Document.DocumentDecodeError | GetByIdFailure\n >;\n <IndexName extends keyof Indexes<_ConvexTableInfo>>(\n indexName: IndexName,\n ...indexFieldValues: IndexFieldTypesForEq<\n DataModel.ToConvex<DataModel_>,\n TableName,\n Indexes<_ConvexTableInfo>[IndexName]\n >\n ): Effect.Effect<\n _TableInfo[\"document\"],\n Document.DocumentDecodeError | GetByIndexFailure\n >;\n };\n readonly index: {\n <IndexName extends keyof Indexes<_ConvexTableInfo>>(\n indexName: IndexName,\n indexRange?: (\n q: IndexRangeBuilder<\n _TableInfo[\"convexDocument\"],\n NamedIndex<_ConvexTableInfo, IndexName>\n >,\n ) => IndexRange,\n order?: \"asc\" | \"desc\",\n ): OrderedQuery.OrderedQuery<_TableInfo, TableName>;\n <IndexName extends keyof Indexes<_ConvexTableInfo>>(\n indexName: IndexName,\n order?: \"asc\" | \"desc\",\n ): OrderedQuery.OrderedQuery<_TableInfo, TableName>;\n };\n readonly search: <IndexName extends keyof SearchIndexes<_ConvexTableInfo>>(\n indexName: IndexName,\n searchFilter: (\n q: SearchFilterBuilder<\n DocumentByInfo<_ConvexTableInfo>,\n NamedSearchIndex<_ConvexTableInfo, IndexName>\n >,\n ) => SearchFilter,\n ) => OrderedQuery.OrderedQuery<_TableInfo, TableName>;\n};\n\nexport const make = <\n Tables extends Table.AnyWithProps,\n TableName extends Table.Name<Tables>,\n>(\n tableName: TableName,\n convexDatabaseReader: BaseDatabaseReader<\n DataModel.ToConvex<DataModel.FromTables<Tables>>\n >,\n table: Table.WithName<Tables, TableName>,\n): QueryInitializer<\n DataModel.DataModel<Tables>,\n TableName,\n DataModel.TableInfoWithName<DataModel.DataModel<Tables>, TableName>,\n DataModel.TableInfoWithName_<DataModel.DataModel<Tables>, TableName>\n> => {\n type DataModel_ = DataModel.DataModel<Tables>;\n type ConvexDataModel_ = DataModel.ToConvex<DataModel_>;\n type ThisQueryInitializer = QueryInitializer<\n DataModel_,\n TableName,\n DataModel.TableInfoWithName<DataModel_, TableName>,\n DataModel.TableInfoWithName_<DataModel_, TableName>\n >;\n type QueryInitializerFunction<\n FunctionName extends keyof ThisQueryInitializer,\n > = ThisQueryInitializer[FunctionName];\n\n const getByIndex = <\n IndexName extends keyof Indexes<\n DataModel.TableInfoWithName<DataModel_, TableName>\n >,\n >(\n indexName: IndexName,\n indexFieldValues: IndexFieldTypesForEq<\n DataModel.ToConvex<DataModel_>,\n TableName,\n Indexes<DataModel.TableInfoWithName<DataModel_, TableName>>[IndexName]\n >,\n ): Effect.Effect<\n DataModel.DocumentWithName<DataModel_, TableName>,\n Document.DocumentDecodeError | GetByIndexFailure\n > => {\n const indexFields: GenericTableIndexes[keyof GenericTableIndexes] = (\n table.indexes as GenericTableIndexes\n )[indexName as keyof GenericTableIndexes]!;\n\n return pipe(\n Effect.promise(() =>\n convexDatabaseReader\n .query(tableName)\n .withIndex(indexName, (q) =>\n Array.reduce(\n indexFieldValues,\n q,\n (q_, v, i) => q_.eq(indexFields[i] as any, v as any) as any,\n ),\n )\n .unique(),\n ),\n Effect.andThen(\n Either.fromNullable(\n () =>\n new GetByIndexFailure({\n tableName,\n indexName: indexName as string,\n indexFieldValues: indexFieldValues as string[],\n }),\n ),\n ),\n Effect.andThen(Document.decode(tableName, table.Fields)),\n );\n };\n\n const get: QueryInitializerFunction<\"get\"> = ((\n ...args: Parameters<QueryInitializerFunction<\"get\">>\n ) => {\n if (args.length === 1) {\n const id = args[0] as GenericId<TableName>;\n\n return getById(tableName, convexDatabaseReader, table)(id);\n } else {\n const [indexName, ...indexFieldValues] = args;\n\n return getByIndex(\n indexName as keyof Indexes<\n DataModel.TableInfoWithName<DataModel_, TableName>\n >,\n indexFieldValues,\n );\n }\n }) as QueryInitializerFunction<\"get\">;\n\n const index: QueryInitializerFunction<\"index\"> = <\n IndexName extends keyof Indexes<\n DataModel.TableInfoWithName<DataModel_, TableName>\n >,\n >(\n indexName: IndexName,\n indexRangeOrOrder?:\n | ((\n q: IndexRangeBuilder<\n DataModel.TableInfoWithName_<\n DataModel_,\n TableName\n >[\"convexDocument\"],\n NamedIndex<\n DataModel.TableInfoWithName<DataModel_, TableName>,\n IndexName\n >\n >,\n ) => IndexRange)\n | \"asc\"\n | \"desc\",\n order?: \"asc\" | \"desc\",\n ) => {\n const {\n applyWithIndex,\n applyOrder,\n }: {\n applyWithIndex: (\n queryInitializer: ConvexQueryInitializer<\n NamedTableInfo<ConvexDataModel_, TableName>\n >,\n ) => Query<NamedTableInfo<ConvexDataModel_, TableName>>;\n applyOrder: (\n query: Query<NamedTableInfo<ConvexDataModel_, TableName>>,\n ) => ConvexOrderedQuery<NamedTableInfo<ConvexDataModel_, TableName>>;\n } =\n indexRangeOrOrder === undefined\n ? {\n applyWithIndex: (q) => q.withIndex(indexName),\n applyOrder: (q) => q.order(\"asc\"),\n }\n : typeof indexRangeOrOrder === \"function\"\n ? order === undefined\n ? {\n applyWithIndex: (q) =>\n q.withIndex(indexName, indexRangeOrOrder),\n applyOrder: (q) => q.order(\"asc\"),\n }\n : {\n applyWithIndex: (q) =>\n q.withIndex(indexName, indexRangeOrOrder),\n applyOrder: (q) => q.order(order),\n }\n : {\n applyWithIndex: (q) => q.withIndex(indexName),\n applyOrder: (q) => q.order(indexRangeOrOrder),\n };\n\n const orderedQuery = pipe(\n convexDatabaseReader.query(tableName),\n applyWithIndex,\n applyOrder,\n );\n\n return OrderedQuery.make<\n DataModel.TableInfoWithName_<DataModel_, TableName>,\n TableName\n >(orderedQuery, tableName, table.Fields);\n };\n\n const search: QueryInitializerFunction<\"search\"> = (\n indexName,\n searchFilter,\n ) =>\n OrderedQuery.make<\n DataModel.TableInfoWithName_<DataModel_, TableName>,\n TableName\n >(\n convexDatabaseReader\n .query(tableName)\n .withSearchIndex(indexName, searchFilter),\n tableName,\n table.Fields,\n );\n\n return {\n get,\n index,\n search,\n };\n};\n\nexport const getById =\n <Tables extends Table.AnyWithProps, TableName extends Table.Name<Tables>>(\n tableName: TableName,\n convexDatabaseReader: BaseDatabaseReader<\n DataModel.ToConvex<DataModel.FromTables<Tables>>\n >,\n table: Table.WithName<Tables, TableName>,\n ) =>\n (id: GenericId<TableName>) =>\n pipe(\n Effect.promise(() => convexDatabaseReader.get(id)),\n Effect.andThen(\n Either.fromNullable(() => new GetByIdFailure({ tableName, id })),\n ),\n Effect.andThen(Document.decode(tableName, table.Fields)),\n );\n\nexport class GetByIdFailure extends Schema.TaggedError<GetByIdFailure>(\n \"GetByIdFailure\",\n)(\"GetByIdFailure\", {\n id: Schema.String,\n tableName: Schema.String,\n}) {\n override get message(): string {\n return Document.documentErrorMessage({\n id: this.id,\n tableName: this.tableName,\n message: \"not found\",\n });\n }\n}\n\nexport class GetByIndexFailure extends Schema.TaggedError<GetByIndexFailure>(\n \"GetByIndexFailure\",\n)(\"GetByIndexFailure\", {\n tableName: Schema.String,\n indexName: Schema.String,\n indexFieldValues: Schema.Array(Schema.String),\n}) {\n override get message(): string {\n return `No documents found in table '${this.tableName}' with index '${this.indexName}' and field values '${this.indexFieldValues}'`;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAiFA,MAAa,QAIX,WACA,sBAGA,UAMG;CAaH,MAAM,cAKJ,WACA,qBAQG;EACH,MAAMA,cACJ,MAAM,QACN;AAEF,SAAO,KACL,OAAO,cACL,qBACG,MAAM,UAAU,CAChB,UAAU,YAAY,MACrB,MAAM,OACJ,kBACA,IACC,IAAI,GAAG,MAAM,GAAG,GAAG,YAAY,IAAW,EAAS,CACrD,CACF,CACA,QAAQ,CACZ,EACD,OAAO,QACL,OAAO,mBAEH,IAAI,kBAAkB;GACpB;GACW;GACO;GACnB,CAAC,CACL,CACF,EACD,OAAO,QAAQC,OAAgB,WAAW,MAAM,OAAO,CAAC,CACzD;;CAGH,MAAMC,QACJ,GAAG,SACA;AACH,MAAI,KAAK,WAAW,GAAG;GACrB,MAAM,KAAK,KAAK;AAEhB,UAAO,QAAQ,WAAW,sBAAsB,MAAM,CAAC,GAAG;SACrD;GACL,MAAM,CAAC,WAAW,GAAG,oBAAoB;AAEzC,UAAO,WACL,WAGA,iBACD;;;CAIL,MAAMC,SAKJ,WACA,mBAeA,UACG;EACH,MAAM,EACJ,gBACA,eAWA,sBAAsB,SAClB;GACE,iBAAiB,MAAM,EAAE,UAAU,UAAU;GAC7C,aAAa,MAAM,EAAE,MAAM,MAAM;GAClC,GACD,OAAO,sBAAsB,aAC3B,UAAU,SACR;GACE,iBAAiB,MACf,EAAE,UAAU,WAAW,kBAAkB;GAC3C,aAAa,MAAM,EAAE,MAAM,MAAM;GAClC,GACD;GACE,iBAAiB,MACf,EAAE,UAAU,WAAW,kBAAkB;GAC3C,aAAa,MAAM,EAAE,MAAM,MAAM;GAClC,GACH;GACE,iBAAiB,MAAM,EAAE,UAAU,UAAU;GAC7C,aAAa,MAAM,EAAE,MAAM,kBAAkB;GAC9C;EAET,MAAM,eAAe,KACnB,qBAAqB,MAAM,UAAU,EACrC,gBACA,WACD;AAED,SAAOC,OAGL,cAAc,WAAW,MAAM,OAAO;;CAG1C,MAAMC,UACJ,WACA,iBAEAD,OAIE,qBACG,MAAM,UAAU,CAChB,gBAAgB,WAAW,aAAa,EAC3C,WACA,MAAM,OACP;AAEH,QAAO;EACL;EACA;EACA;EACD;;AAGH,MAAa,WAET,WACA,sBAGA,WAED,OACC,KACE,OAAO,cAAc,qBAAqB,IAAI,GAAG,CAAC,EAClD,OAAO,QACL,OAAO,mBAAmB,IAAI,eAAe;CAAE;CAAW;CAAI,CAAC,CAAC,CACjE,EACD,OAAO,QAAQH,OAAgB,WAAW,MAAM,OAAO,CAAC,CACzD;AAEL,IAAa,iBAAb,cAAoC,OAAO,YACzC,iBACD,CAAC,kBAAkB;CAClB,IAAI,OAAO;CACX,WAAW,OAAO;CACnB,CAAC,CAAC;CACD,IAAa,UAAkB;AAC7B,SAAOK,qBAA8B;GACnC,IAAI,KAAK;GACT,WAAW,KAAK;GAChB,SAAS;GACV,CAAC;;;AAIN,IAAa,oBAAb,cAAuC,OAAO,YAC5C,oBACD,CAAC,qBAAqB;CACrB,WAAW,OAAO;CAClB,WAAW,OAAO;CAClB,kBAAkB,OAAO,MAAM,OAAO,OAAO;CAC9C,CAAC,CAAC;CACD,IAAa,UAAkB;AAC7B,SAAO,gCAAgC,KAAK,UAAU,gBAAgB,KAAK,UAAU,sBAAsB,KAAK,iBAAiB"}
@@ -0,0 +1,14 @@
1
+ import { Context, Effect, Layer, ParseResult } from "effect";
2
+ import * as Ref$1 from "@confect/core/Ref";
3
+ import { GenericQueryCtx } from "convex/server";
4
+
5
+ //#region src/QueryRunner.d.ts
6
+ declare namespace QueryRunner_d_exports {
7
+ export { QueryRunner, layer };
8
+ }
9
+ declare const QueryRunner: Context.Tag<(<Query extends Ref$1.AnyQuery>(query: Query, args: Ref$1.Args<Query>["Type"]) => Effect.Effect<Ref$1.Returns<Query>["Type"], ParseResult.ParseError>), <Query extends Ref$1.AnyQuery>(query: Query, args: Ref$1.Args<Query>["Type"]) => Effect.Effect<Ref$1.Returns<Query>["Type"], ParseResult.ParseError>>;
10
+ type QueryRunner = typeof QueryRunner.Identifier;
11
+ declare const layer: (runQuery: GenericQueryCtx<any>["runQuery"]) => Layer.Layer<(<Query extends Ref$1.AnyQuery>(query: Query, args: Ref$1.Args<Query>["Type"]) => Effect.Effect<Ref$1.Returns<Query>["Type"], ParseResult.ParseError>), never, never>;
12
+ //#endregion
13
+ export { QueryRunner, QueryRunner_d_exports, layer };
14
+ //# sourceMappingURL=QueryRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryRunner.d.ts","names":[],"sources":["../src/QueryRunner.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAsBa,aAAW,OAAA,CAAA,oBAfP,KAAA,CAAI,iBACV,aACD,KAAA,CAAI,KAAK,mBACd,MAAA,CAAO,OAAO,KAAA,CAAI,QAAQ,gBAAgB,WAAA,CAAY,6BAH1C,KAAA,CAAI,iBACV,aACD,KAAA,CAAI,KAAK,mBACd,MAAA,CAAO,OAAO,KAAA,CAAI,QAAQ,gBAAgB,WAAA,CAAY;KAe/C,WAAA,UAAqB,WAAA,CAAY;cAEhC,kBAAmB,qCAAgC,KAAA,CAAA,sBApB/C,KAAA,CAAI,iBACV,aACD,KAAA,CAAI,KAAK,mBACd,MAAA,CAAO,OAAO,KAAA,CAAI,QAAQ,gBAAgB,WAAA,CAAY"}
@@ -0,0 +1,23 @@
1
+ import { __export } from "./_virtual/rolldown_runtime.js";
2
+ import { Context, Effect, Layer, Schema } from "effect";
3
+ import * as Ref$1 from "@confect/core/Ref";
4
+ import "convex/server";
5
+
6
+ //#region src/QueryRunner.ts
7
+ var QueryRunner_exports = /* @__PURE__ */ __export({
8
+ QueryRunner: () => QueryRunner,
9
+ layer: () => layer
10
+ });
11
+ const make = (runQuery) => (query, args) => Effect.gen(function* () {
12
+ const function_ = Ref$1.getFunction(query);
13
+ const functionName = Ref$1.getConvexFunctionName(query);
14
+ const encodedArgs = yield* Schema.encode(function_.args)(args);
15
+ const encodedReturns = yield* Effect.promise(() => runQuery(functionName, encodedArgs));
16
+ return yield* Schema.decode(function_.returns)(encodedReturns);
17
+ });
18
+ const QueryRunner = Context.GenericTag("@confect/server/QueryRunner");
19
+ const layer = (runQuery) => Layer.succeed(QueryRunner, make(runQuery));
20
+
21
+ //#endregion
22
+ export { QueryRunner, QueryRunner_exports, layer };
23
+ //# sourceMappingURL=QueryRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryRunner.js","names":["Ref"],"sources":["../src/QueryRunner.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { type GenericQueryCtx } from \"convex/server\";\nimport type { ParseResult } from \"effect\";\nimport { Context, Effect, Layer, Schema } from \"effect\";\n\nconst make =\n (runQuery: GenericQueryCtx<any>[\"runQuery\"]) =>\n <Query extends Ref.AnyQuery>(\n query: Query,\n args: Ref.Args<Query>[\"Type\"],\n ): Effect.Effect<Ref.Returns<Query>[\"Type\"], ParseResult.ParseError> =>\n Effect.gen(function* () {\n const function_ = Ref.getFunction(query);\n const functionName = Ref.getConvexFunctionName(query);\n\n const encodedArgs = yield* Schema.encode(function_.args)(args);\n const encodedReturns = yield* Effect.promise(() =>\n runQuery(functionName as any, encodedArgs),\n );\n return yield* Schema.decode(function_.returns)(encodedReturns);\n });\n\nexport const QueryRunner = Context.GenericTag<ReturnType<typeof make>>(\n \"@confect/server/QueryRunner\",\n);\nexport type QueryRunner = typeof QueryRunner.Identifier;\n\nexport const layer = (runQuery: GenericQueryCtx<any>[\"runQuery\"]) =>\n Layer.succeed(QueryRunner, make(runQuery));\n"],"mappings":";;;;;;;;;;AAKA,MAAM,QACH,cAEC,OACA,SAEA,OAAO,IAAI,aAAa;CACtB,MAAM,YAAYA,MAAI,YAAY,MAAM;CACxC,MAAM,eAAeA,MAAI,sBAAsB,MAAM;CAErD,MAAM,cAAc,OAAO,OAAO,OAAO,UAAU,KAAK,CAAC,KAAK;CAC9D,MAAM,iBAAiB,OAAO,OAAO,cACnC,SAAS,cAAqB,YAAY,CAC3C;AACD,QAAO,OAAO,OAAO,OAAO,UAAU,QAAQ,CAAC,eAAe;EAC9D;AAEN,MAAa,cAAc,QAAQ,WACjC,8BACD;AAGD,MAAa,SAAS,aACpB,MAAM,QAAQ,aAAa,KAAK,SAAS,CAAC"}