@gaganref/confect-server 10.3.1-fork.4 → 10.3.1-fork.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ActionCall.d.ts +30 -0
- package/dist/ActionCall.d.ts.map +1 -0
- package/dist/ActionCall.js +41 -0
- package/dist/ActionCall.js.map +1 -0
- package/dist/ActionCtx.d.ts +1 -1
- package/dist/ActionCtx.d.ts.map +1 -1
- package/dist/ActionCtx.js.map +1 -1
- package/dist/ActionRunner.js +2 -2
- package/dist/AiGatewayDecisionClient.d.ts +2 -2
- package/dist/AiGatewayDecisionClient.d.ts.map +1 -1
- package/dist/AiGatewayDecisionClient.js +1 -1
- package/dist/AiGatewayDecisionClient.js.map +1 -1
- package/dist/AiGatewayLanguageClient.d.ts +2 -2
- package/dist/AiGatewayLanguageClient.d.ts.map +1 -1
- package/dist/AiGatewayLanguageClient.js +1 -1
- package/dist/AiGatewayLanguageClient.js.map +1 -1
- package/dist/Auth.d.ts +14 -2
- package/dist/Auth.d.ts.map +1 -1
- package/dist/Auth.js +13 -3
- package/dist/Auth.js.map +1 -1
- package/dist/Callback.js +3 -3
- package/dist/ComponentCtx.d.ts +1 -1
- package/dist/ComponentCtx.d.ts.map +1 -1
- package/dist/ConvexConfigProvider.js +2 -2
- package/dist/ConvexFunctionDefinitions.d.ts +4 -4
- package/dist/ConvexFunctionDefinitions.d.ts.map +1 -1
- package/dist/ConvexFunctionDefinitions.js +4 -4
- package/dist/ConvexFunctionDefinitions.js.map +1 -1
- package/dist/ConvexLogger.js +1 -1
- package/dist/CronJobs.d.ts +1 -1
- package/dist/CronJobs.d.ts.map +1 -1
- package/dist/CronJobs.js +6 -6
- package/dist/CronJobs.js.map +1 -1
- package/dist/DataModel.d.ts +3 -3
- package/dist/DataModel.d.ts.map +1 -1
- package/dist/DataModel.js.map +1 -1
- package/dist/DatabaseReader.d.ts +4 -4
- package/dist/DatabaseReader.d.ts.map +1 -1
- package/dist/DatabaseReader.js.map +1 -1
- package/dist/DatabaseSchema.d.ts +1 -1
- package/dist/DatabaseSchema.d.ts.map +1 -1
- package/dist/DatabaseSchema.js +2 -2
- package/dist/DatabaseSchema.js.map +1 -1
- package/dist/DatabaseWriter.d.ts +41 -7
- package/dist/DatabaseWriter.d.ts.map +1 -1
- package/dist/DatabaseWriter.js +55 -8
- package/dist/DatabaseWriter.js.map +1 -1
- package/dist/Document.d.ts +4 -4
- package/dist/Document.d.ts.map +1 -1
- package/dist/Document.js.map +1 -1
- package/dist/ExecutionMetadata.js +1 -1
- package/dist/FunctionImpl.d.ts +2 -2
- package/dist/FunctionImpl.d.ts.map +1 -1
- package/dist/FunctionImpl.js +2 -2
- package/dist/FunctionImpl.js.map +1 -1
- package/dist/FunctionRegistryItem.d.ts +1 -1
- package/dist/FunctionRegistryItem.d.ts.map +1 -1
- package/dist/FunctionRegistryItem.js +1 -1
- package/dist/FunctionRegistryItem.js.map +1 -1
- package/dist/GroupImpl.d.ts +24 -5
- package/dist/GroupImpl.d.ts.map +1 -1
- package/dist/GroupImpl.js +21 -22
- package/dist/GroupImpl.js.map +1 -1
- package/dist/GroupRegistry.d.ts +3 -2
- package/dist/GroupRegistry.d.ts.map +1 -1
- package/dist/GroupRegistry.js +10 -3
- package/dist/GroupRegistry.js.map +1 -1
- package/dist/Handler.d.ts +31 -27
- package/dist/Handler.d.ts.map +1 -1
- package/dist/Handler.js.map +1 -1
- package/dist/HttpRouter.d.ts +15 -13
- package/dist/HttpRouter.d.ts.map +1 -1
- package/dist/HttpRouter.js +16 -7
- package/dist/HttpRouter.js.map +1 -1
- package/dist/MiddlewareImpl.d.ts +14 -14
- package/dist/MiddlewareImpl.d.ts.map +1 -1
- package/dist/MiddlewareImpl.js +1 -1
- package/dist/MiddlewareImpl.js.map +1 -1
- package/dist/MutationCtx.d.ts +1 -1
- package/dist/MutationCtx.d.ts.map +1 -1
- package/dist/MutationCtx.js.map +1 -1
- package/dist/MutationRunner.d.ts +1 -1
- package/dist/MutationRunner.d.ts.map +1 -1
- package/dist/MutationRunner.js +2 -2
- package/dist/MutationRunner.js.map +1 -1
- package/dist/MutationTransactionContext.d.ts +2 -2
- package/dist/MutationTransactionContext.d.ts.map +1 -1
- package/dist/MutationTransactionContext.js +2 -2
- package/dist/MutationTransactionContext.js.map +1 -1
- package/dist/OfficialComponent.d.ts +50 -0
- package/dist/OfficialComponent.d.ts.map +1 -0
- package/dist/OfficialComponent.js +70 -0
- package/dist/OfficialComponent.js.map +1 -0
- package/dist/OrderedQuery.d.ts +4 -4
- package/dist/OrderedQuery.d.ts.map +1 -1
- package/dist/OrderedQuery.js.map +1 -1
- package/dist/QueryCtx.d.ts +1 -1
- package/dist/QueryCtx.d.ts.map +1 -1
- package/dist/QueryCtx.js.map +1 -1
- package/dist/QueryInitializer.d.ts +10 -10
- package/dist/QueryInitializer.d.ts.map +1 -1
- package/dist/QueryInitializer.js +2 -2
- package/dist/QueryInitializer.js.map +1 -1
- package/dist/QueryRunner.d.ts +2 -2
- package/dist/QueryRunner.d.ts.map +1 -1
- package/dist/QueryRunner.js +2 -2
- package/dist/QueryRunner.js.map +1 -1
- package/dist/QueryStream.d.ts +131 -23
- package/dist/QueryStream.d.ts.map +1 -1
- package/dist/QueryStream.js +142 -40
- package/dist/QueryStream.js.map +1 -1
- package/dist/QueryStreamCursor.d.ts +2 -2
- package/dist/QueryStreamCursor.d.ts.map +1 -1
- package/dist/QueryStreamCursor.js +1 -1
- package/dist/QueryStreamCursor.js.map +1 -1
- package/dist/QueryStreamIndexPrefix.d.ts +2 -2
- package/dist/QueryStreamIndexPrefix.d.ts.map +1 -1
- package/dist/QueryStreamIndexPrefix.js +1 -1
- package/dist/QueryStreamIndexPrefix.js.map +1 -1
- package/dist/QueryStreamIndexRange.d.ts +4 -4
- package/dist/QueryStreamIndexRange.d.ts.map +1 -1
- package/dist/QueryStreamIndexRange.js +2 -2
- package/dist/QueryStreamIndexRange.js.map +1 -1
- package/dist/QueryStreamKey.d.ts +2 -2
- package/dist/QueryStreamKey.d.ts.map +1 -1
- package/dist/QueryStreamKey.js +1 -1
- package/dist/QueryStreamKey.js.map +1 -1
- package/dist/QueryStreamKeyBounds.d.ts +3 -3
- package/dist/QueryStreamKeyBounds.d.ts.map +1 -1
- package/dist/QueryStreamKeyBounds.js +2 -2
- package/dist/QueryStreamKeyBounds.js.map +1 -1
- package/dist/QueryStreamKeyLayout.d.ts +1 -1
- package/dist/QueryStreamKeyLayout.d.ts.map +1 -1
- package/dist/QueryStreamKeyLayout.js +2 -2
- package/dist/QueryStreamKeyLayout.js.map +1 -1
- package/dist/QueryStreamKeyValues.d.ts +1 -1
- package/dist/QueryStreamKeyValues.d.ts.map +1 -1
- package/dist/QueryStreamKeyValues.js +1 -1
- package/dist/QueryStreamKeyValues.js.map +1 -1
- package/dist/QueryStreamPagination.d.ts +1 -1
- package/dist/QueryStreamPagination.d.ts.map +1 -1
- package/dist/QueryStreamPagination.js +1 -1
- package/dist/QueryStreamPagination.js.map +1 -1
- package/dist/QueryStreamReadBudget.d.ts +3 -2
- package/dist/QueryStreamReadBudget.d.ts.map +1 -1
- package/dist/QueryStreamReadBudget.js +7 -4
- package/dist/QueryStreamReadBudget.js.map +1 -1
- package/dist/QueryTransactionContext.js +2 -2
- package/dist/RegisteredConvexFunction.d.ts +27 -24
- package/dist/RegisteredConvexFunction.d.ts.map +1 -1
- package/dist/RegisteredConvexFunction.js +39 -26
- package/dist/RegisteredConvexFunction.js.map +1 -1
- package/dist/RegisteredFunction.d.ts +51 -47
- package/dist/RegisteredFunction.d.ts.map +1 -1
- package/dist/RegisteredFunction.js +126 -37
- package/dist/RegisteredFunction.js.map +1 -1
- package/dist/RegisteredFunctions.d.ts +3 -3
- package/dist/RegisteredFunctions.d.ts.map +1 -1
- package/dist/RegisteredFunctions.js.map +1 -1
- package/dist/RegisteredNodeFunction.d.ts +7 -7
- package/dist/RegisteredNodeFunction.d.ts.map +1 -1
- package/dist/RegisteredNodeFunction.js +8 -6
- package/dist/RegisteredNodeFunction.js.map +1 -1
- package/dist/Registry.d.ts +1 -1
- package/dist/Registry.d.ts.map +1 -1
- package/dist/Registry.js.map +1 -1
- package/dist/RegistryItems.d.ts +7 -0
- package/dist/RegistryItems.d.ts.map +1 -1
- package/dist/RegistryItems.js +8 -3
- package/dist/RegistryItems.js.map +1 -1
- package/dist/RequestMetadata.js +1 -1
- package/dist/ResolvedMiddleware.d.ts +2 -2
- package/dist/ResolvedMiddleware.d.ts.map +1 -1
- package/dist/ResolvedMiddleware.js.map +1 -1
- package/dist/Scheduler.js +2 -2
- package/dist/Storage.d.ts +6 -6
- package/dist/Storage.d.ts.map +1 -1
- package/dist/Storage.js +1 -1
- package/dist/Storage.js.map +1 -1
- package/dist/StorageActionWriter.d.ts +1 -1
- package/dist/StorageActionWriter.d.ts.map +1 -1
- package/dist/StorageActionWriter.js +1 -1
- package/dist/StorageActionWriter.js.map +1 -1
- package/dist/StorageReader.d.ts +1 -1
- package/dist/StorageReader.d.ts.map +1 -1
- package/dist/StorageReader.js +1 -1
- package/dist/StorageReader.js.map +1 -1
- package/dist/StorageWriter.d.ts +1 -1
- package/dist/StorageWriter.d.ts.map +1 -1
- package/dist/StorageWriter.js +1 -1
- package/dist/StorageWriter.js.map +1 -1
- package/dist/TableInfo.d.ts +2 -2
- package/dist/TableInfo.d.ts.map +1 -1
- package/dist/TableInfo.js.map +1 -1
- package/dist/TransactionMetadata.js +1 -1
- package/dist/VectorSearch.d.ts +1 -1
- package/dist/VectorSearch.d.ts.map +1 -1
- package/dist/VectorSearch.js +1 -1
- package/dist/VectorSearch.js.map +1 -1
- package/dist/index.d.ts +62 -60
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -18
- package/dist/internal/AiGatewayDecisionClient.d.ts +1 -1
- package/dist/internal/AiGatewayDecisionClient.d.ts.map +1 -1
- package/dist/internal/AiGatewayDecisionClient.js +1 -1
- package/dist/internal/AiGatewayDecisionClient.js.map +1 -1
- package/dist/internal/AiGatewayLanguageClient.d.ts +1 -1
- package/dist/internal/AiGatewayLanguageClient.d.ts.map +1 -1
- package/dist/internal/AiGatewayLanguageClient.js +1 -1
- package/dist/internal/AiGatewayLanguageClient.js.map +1 -1
- package/dist/internal/AiGatewayServiceToken.js +1 -1
- package/dist/internal/DocumentPatch.d.ts +16 -0
- package/dist/internal/DocumentPatch.d.ts.map +1 -0
- package/dist/internal/DocumentPatch.js +36 -0
- package/dist/internal/DocumentPatch.js.map +1 -0
- package/dist/internal/observability.d.ts +5 -0
- package/dist/internal/observability.d.ts.map +1 -0
- package/dist/internal/observability.js +21 -0
- package/dist/internal/observability.js.map +1 -0
- package/dist/node.d.ts +1 -1
- package/dist/node.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/ActionCall.ts +82 -0
- package/src/ActionCtx.ts +1 -1
- package/src/AiGatewayDecisionClient.ts +3 -3
- package/src/AiGatewayLanguageClient.ts +3 -3
- package/src/Auth.ts +24 -2
- package/src/ComponentCtx.ts +1 -1
- package/src/ConvexFunctionDefinitions.ts +10 -9
- package/src/CronJobs.ts +1 -1
- package/src/DataModel.ts +3 -3
- package/src/DatabaseReader.ts +4 -4
- package/src/DatabaseSchema.ts +1 -1
- package/src/DatabaseWriter.ts +189 -31
- package/src/Document.ts +4 -4
- package/src/FunctionImpl.ts +5 -5
- package/src/FunctionRegistryItem.ts +1 -1
- package/src/GroupImpl.ts +66 -13
- package/src/GroupRegistry.ts +11 -7
- package/src/Handler.ts +44 -28
- package/src/HttpRouter.ts +71 -21
- package/src/MiddlewareImpl.ts +17 -17
- package/src/MutationCtx.ts +1 -1
- package/src/MutationRunner.ts +1 -1
- package/src/MutationTransactionContext.ts +2 -2
- package/src/OfficialComponent.ts +151 -0
- package/src/OrderedQuery.ts +4 -4
- package/src/QueryCtx.ts +1 -1
- package/src/QueryInitializer.ts +9 -9
- package/src/QueryRunner.ts +2 -2
- package/src/QueryStream.ts +406 -76
- package/src/QueryStreamCursor.ts +3 -3
- package/src/QueryStreamIndexPrefix.ts +2 -2
- package/src/QueryStreamIndexRange.ts +4 -4
- package/src/QueryStreamKey.ts +2 -2
- package/src/QueryStreamKeyBounds.ts +3 -3
- package/src/QueryStreamKeyLayout.ts +1 -1
- package/src/QueryStreamKeyValues.ts +1 -1
- package/src/QueryStreamPagination.ts +2 -2
- package/src/QueryStreamReadBudget.ts +19 -6
- package/src/RegisteredConvexFunction.ts +38 -21
- package/src/RegisteredFunction.ts +209 -60
- package/src/RegisteredFunctions.ts +4 -4
- package/src/RegisteredNodeFunction.ts +15 -9
- package/src/Registry.ts +1 -1
- package/src/RegistryItems.ts +33 -2
- package/src/ResolvedMiddleware.ts +2 -2
- package/src/Storage.ts +3 -3
- package/src/StorageActionWriter.ts +1 -1
- package/src/StorageReader.ts +1 -1
- package/src/StorageWriter.ts +1 -1
- package/src/TableInfo.ts +2 -2
- package/src/VectorSearch.ts +1 -1
- package/src/index.ts +62 -60
- package/src/internal/AiGatewayDecisionClient.ts +2 -2
- package/src/internal/AiGatewayLanguageClient.ts +2 -2
- package/src/internal/DocumentPatch.ts +87 -0
- package/src/internal/observability.ts +27 -0
- package/src/node.ts +1 -1
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,sBAAsB,MAAM,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,sBAAsB,MAAM,6BAA6B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gaganref/confect-server",
|
|
3
|
-
"version": "10.3.1-fork.
|
|
3
|
+
"version": "10.3.1-fork.41",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@effect/ai-openai-compat": "4.0.4",
|
|
6
6
|
"@effect/ai-openrouter": "4.0.4"
|
|
7
7
|
},
|
|
8
8
|
"peerDependencies": {
|
|
9
|
-
"@confect/core": "npm:@gaganref/confect-core@10.3.1-fork.
|
|
10
|
-
"@effect/platform-node": "
|
|
11
|
-
"convex": "^1.
|
|
12
|
-
"effect": "
|
|
9
|
+
"@confect/core": "npm:@gaganref/confect-core@10.3.1-fork.41",
|
|
10
|
+
"@effect/platform-node": ">=4.0.0 <4.1.0",
|
|
11
|
+
"convex": "^1.48.0",
|
|
12
|
+
"effect": ">=4.0.4 <4.1.0"
|
|
13
13
|
},
|
|
14
14
|
"description": "Backend bindings to the Convex platform",
|
|
15
15
|
"author": "RJ Dellecese",
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as ActionCall from "@confect/core/ActionCall";
|
|
2
|
+
import * as Ref from "@confect/core/Ref";
|
|
3
|
+
import type { FunctionReference } from "convex/server";
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
|
+
import * as Data from "effect/Data";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as ActionCtx from "./ActionCtx.js";
|
|
8
|
+
import * as ActionRunner from "./ActionRunner.js";
|
|
9
|
+
import type * as DatabaseSchema from "./DatabaseSchema.js";
|
|
10
|
+
import type * as DataModel from "./DataModel.js";
|
|
11
|
+
import type * as Handler from "./Handler.js";
|
|
12
|
+
import * as MiddlewareImpl from "./MiddlewareImpl.js";
|
|
13
|
+
import * as MutationRunner from "./MutationRunner.js";
|
|
14
|
+
import * as QueryRunner from "./QueryRunner.js";
|
|
15
|
+
import * as Scheduler from "./Scheduler.js";
|
|
16
|
+
|
|
17
|
+
export class ActionCallAlreadyUsed extends Data.TaggedError(
|
|
18
|
+
"ActionCallAlreadyUsed",
|
|
19
|
+
)<{}> {}
|
|
20
|
+
export class ActionCallNotUsed extends Data.TaggedError(
|
|
21
|
+
"ActionCallNotUsed",
|
|
22
|
+
)<{}> {}
|
|
23
|
+
export class MissingFunctionType extends Data.TaggedError(
|
|
24
|
+
"MissingFunctionType",
|
|
25
|
+
)<{}> {}
|
|
26
|
+
export class NestedActionNotAllowed extends Data.TaggedError(
|
|
27
|
+
"NestedActionNotAllowed",
|
|
28
|
+
)<{}> {}
|
|
29
|
+
|
|
30
|
+
export class SchedulingNotAllowed extends Data.TaggedError(
|
|
31
|
+
"SchedulingNotAllowed",
|
|
32
|
+
)<{}> {}
|
|
33
|
+
|
|
34
|
+
export const layer = <S extends DatabaseSchema.AnyWithProps>(schema: S) =>
|
|
35
|
+
MiddlewareImpl.make(schema, ActionCall.Middleware, (effect) =>
|
|
36
|
+
Effect.gen(function* () {
|
|
37
|
+
const ctx = yield* ActionCtx.ActionCtx<
|
|
38
|
+
DataModel.ToConvex<DataModel.FromSchema<S>>,
|
|
39
|
+
DatabaseSchema.Scope<S>
|
|
40
|
+
>();
|
|
41
|
+
let claimed = false;
|
|
42
|
+
const call: ActionCall.Call = <
|
|
43
|
+
Target extends Ref.AnyQuery | Ref.AnyMutation,
|
|
44
|
+
>(
|
|
45
|
+
ref: Target,
|
|
46
|
+
...args: Ref.OptionalArgs<NoInfer<Target>>
|
|
47
|
+
) =>
|
|
48
|
+
Effect.suspend(() => {
|
|
49
|
+
if (claimed) return Effect.die(new ActionCallAlreadyUsed());
|
|
50
|
+
claimed = true;
|
|
51
|
+
if (ref.functionType !== "query" && ref.functionType !== "mutation")
|
|
52
|
+
return Effect.die(new MissingFunctionType());
|
|
53
|
+
return Ref.runWithCodec(
|
|
54
|
+
ref,
|
|
55
|
+
(args[0] ?? {}) as Ref.Args<Target>,
|
|
56
|
+
(native, encoded) =>
|
|
57
|
+
ref.functionType === "query"
|
|
58
|
+
? ctx.runQuery(
|
|
59
|
+
native as FunctionReference<"query">,
|
|
60
|
+
encoded as never,
|
|
61
|
+
)
|
|
62
|
+
: ctx.runMutation(
|
|
63
|
+
native as FunctionReference<"mutation">,
|
|
64
|
+
encoded as never,
|
|
65
|
+
),
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
return yield* effect.pipe(
|
|
69
|
+
Effect.provideService(ActionCall.ActionCall, call),
|
|
70
|
+
Effect.updateContext(
|
|
71
|
+
(context: Context.Context<Handler.ActionServices<S>>) =>
|
|
72
|
+
Context.omit(
|
|
73
|
+
QueryRunner.QueryRunner,
|
|
74
|
+
MutationRunner.MutationRunner,
|
|
75
|
+
ActionRunner.ActionRunner,
|
|
76
|
+
ActionCtx.ActionCtx(),
|
|
77
|
+
Scheduler.Scheduler,
|
|
78
|
+
)(context),
|
|
79
|
+
),
|
|
80
|
+
);
|
|
81
|
+
}),
|
|
82
|
+
);
|
package/src/ActionCtx.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as IdScope from "@confect/core/IdScope";
|
|
2
2
|
import type { GenericActionCtx, GenericDataModel } from "convex/server";
|
|
3
3
|
import * as Context from "effect/Context";
|
|
4
|
-
import type * as ComponentCtx from "./ComponentCtx";
|
|
4
|
+
import type * as ComponentCtx from "./ComponentCtx.js";
|
|
5
5
|
import * as Layer from "effect/Layer";
|
|
6
6
|
|
|
7
7
|
export type ActionCtxTag<
|
|
@@ -2,14 +2,14 @@ import * as OpenRouterClient from "@effect/ai-openrouter/OpenRouterClient";
|
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
4
|
import type * as HttpClient from "effect/http/HttpClient";
|
|
5
|
-
import * as InternalAiGatewayDecisionClient from "./internal/AiGatewayDecisionClient";
|
|
6
|
-
import * as AiGatewayServiceToken from "./internal/AiGatewayServiceToken";
|
|
5
|
+
import * as InternalAiGatewayDecisionClient from "./internal/AiGatewayDecisionClient.js";
|
|
6
|
+
import * as AiGatewayServiceToken from "./internal/AiGatewayServiceToken.js";
|
|
7
7
|
|
|
8
8
|
export {
|
|
9
9
|
AiGatewayDisabled,
|
|
10
10
|
AiGatewayError,
|
|
11
11
|
AiGatewayUnavailable,
|
|
12
|
-
} from "./internal/AiGatewayServiceToken";
|
|
12
|
+
} from "./internal/AiGatewayServiceToken.js";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* The client configured for Convex AI gateway decisions.
|
|
@@ -2,14 +2,14 @@ import * as OpenAiClient from "@effect/ai-openai-compat/OpenAiClient";
|
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
4
|
import type * as HttpClient from "effect/http/HttpClient";
|
|
5
|
-
import * as InternalAiGatewayLanguageClient from "./internal/AiGatewayLanguageClient";
|
|
6
|
-
import * as AiGatewayServiceToken from "./internal/AiGatewayServiceToken";
|
|
5
|
+
import * as InternalAiGatewayLanguageClient from "./internal/AiGatewayLanguageClient.js";
|
|
6
|
+
import * as AiGatewayServiceToken from "./internal/AiGatewayServiceToken.js";
|
|
7
7
|
|
|
8
8
|
export {
|
|
9
9
|
AiGatewayDisabled,
|
|
10
10
|
AiGatewayError,
|
|
11
11
|
AiGatewayUnavailable,
|
|
12
|
-
} from "./internal/AiGatewayServiceToken";
|
|
12
|
+
} from "./internal/AiGatewayServiceToken.js";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* The client service configured for Convex AI gateway language models.
|
package/src/Auth.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
Auth as ConvexAuth,
|
|
3
|
+
MutationAuth as ConvexMutationAuth,
|
|
4
|
+
SignJwtOptions,
|
|
5
|
+
} from "convex/server";
|
|
2
6
|
import * as Context from "effect/Context";
|
|
3
7
|
import { flow } from "effect/Function";
|
|
4
8
|
import * as Effect from "effect/Effect";
|
|
@@ -6,7 +10,7 @@ import * as Layer from "effect/Layer";
|
|
|
6
10
|
import * as Match from "effect/Match";
|
|
7
11
|
import * as Option from "effect/Option";
|
|
8
12
|
import * as Schema from "effect/Schema";
|
|
9
|
-
import type * as DatabaseSchema from "./DatabaseSchema";
|
|
13
|
+
import type * as DatabaseSchema from "./DatabaseSchema.js";
|
|
10
14
|
|
|
11
15
|
const make = (auth: ConvexAuth) => ({
|
|
12
16
|
getUserIdentity: Effect.promise(() => auth.getUserIdentity()).pipe(
|
|
@@ -28,6 +32,24 @@ export class Auth extends Context.Service<Auth, ReturnType<typeof make>>()(
|
|
|
28
32
|
|
|
29
33
|
export const layer = (auth: ConvexAuth) => Layer.succeed(Auth, make(auth));
|
|
30
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Mutation-only deployment signing, available in applications and components.
|
|
37
|
+
*/
|
|
38
|
+
export class MutationAuth extends Context.Service<
|
|
39
|
+
MutationAuth,
|
|
40
|
+
{
|
|
41
|
+
readonly signJwt: (options: SignJwtOptions) => Effect.Effect<string>;
|
|
42
|
+
}
|
|
43
|
+
>()("@confect/server/Auth/MutationAuth") {}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* SDK rejections remain defects, as with the other native auth operations.
|
|
47
|
+
*/
|
|
48
|
+
export const mutationLayer = (auth: ConvexMutationAuth) =>
|
|
49
|
+
Layer.succeed(MutationAuth, {
|
|
50
|
+
signJwt: (options) => Effect.promise(() => auth.signJwt(options)),
|
|
51
|
+
});
|
|
52
|
+
|
|
31
53
|
export type ForTarget<Target extends DatabaseSchema.Target> =
|
|
32
54
|
Target["kind"] extends "component" ? never : Auth;
|
|
33
55
|
|
package/src/ComponentCtx.ts
CHANGED
|
@@ -17,7 +17,7 @@ import type {
|
|
|
17
17
|
VectorIndexNames,
|
|
18
18
|
VectorSearchQuery,
|
|
19
19
|
} from "convex/server";
|
|
20
|
-
import type { PatchValue } from "./DatabaseWriter";
|
|
20
|
+
import type { PatchValue } from "./DatabaseWriter.js";
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Distinguishes raw component services from structurally compatible app ctxs.
|
|
@@ -3,14 +3,14 @@ import * as Match from "effect/Match";
|
|
|
3
3
|
import * as Record from "effect/Record";
|
|
4
4
|
import type * as GroupSpec from "@confect/core/GroupSpec";
|
|
5
5
|
import type * as FunctionSpec from "@confect/core/FunctionSpec";
|
|
6
|
-
import type * as DatabaseSchema from "./DatabaseSchema";
|
|
7
|
-
import type * as GroupImpl from "./GroupImpl";
|
|
8
|
-
import * as GroupRegistry from "./GroupRegistry";
|
|
9
|
-
import * as FunctionRegistryItem from "./FunctionRegistryItem";
|
|
10
|
-
import * as RegisteredConvexFunction from "./RegisteredConvexFunction";
|
|
11
|
-
import type * as RegisteredFunctions from "./RegisteredFunctions";
|
|
12
|
-
import * as ResolvedMiddleware from "./ResolvedMiddleware";
|
|
13
|
-
import { mapLeaves } from "./internal/utils";
|
|
6
|
+
import type * as DatabaseSchema from "./DatabaseSchema.js";
|
|
7
|
+
import type * as GroupImpl from "./GroupImpl.js";
|
|
8
|
+
import * as GroupRegistry from "./GroupRegistry.js";
|
|
9
|
+
import * as FunctionRegistryItem from "./FunctionRegistryItem.js";
|
|
10
|
+
import * as RegisteredConvexFunction from "./RegisteredConvexFunction.js";
|
|
11
|
+
import type * as RegisteredFunctions from "./RegisteredFunctions.js";
|
|
12
|
+
import * as ResolvedMiddleware from "./ResolvedMiddleware.js";
|
|
13
|
+
import { mapLeaves } from "./internal/utils.js";
|
|
14
14
|
|
|
15
15
|
export interface Definitions {
|
|
16
16
|
readonly [name: string]: RegisteredConvexFunction.Definition | Definitions;
|
|
@@ -63,7 +63,7 @@ export const buildForGroup = <Group extends GroupSpec.AnyWithProps>(
|
|
|
63
63
|
databaseSchema: DatabaseSchema.AnyWithProps,
|
|
64
64
|
groupLayer: Layer.Layer<GroupImpl.GroupImpl<"Finalized">>,
|
|
65
65
|
): ForGroup<Group> => {
|
|
66
|
-
const { functionRegistryItems, middlewareRegistryItems } =
|
|
66
|
+
const { functionRegistryItems, middlewareRegistryItems, observability } =
|
|
67
67
|
GroupRegistry.make(groupLayer);
|
|
68
68
|
return mapLeaves<
|
|
69
69
|
FunctionRegistryItem.AnyWithProps,
|
|
@@ -83,6 +83,7 @@ export const buildForGroup = <Group extends GroupSpec.AnyWithProps>(
|
|
|
83
83
|
databaseSchema,
|
|
84
84
|
confect,
|
|
85
85
|
ResolvedMiddleware.resolve(confect, middlewareRegistryItems),
|
|
86
|
+
observability,
|
|
86
87
|
),
|
|
87
88
|
),
|
|
88
89
|
Match.exhaustive,
|
package/src/CronJobs.ts
CHANGED
|
@@ -11,7 +11,7 @@ import * as Option from "effect/Option";
|
|
|
11
11
|
import * as Order from "effect/Order";
|
|
12
12
|
import * as Predicate from "effect/Predicate";
|
|
13
13
|
import * as Record from "effect/Record";
|
|
14
|
-
import type * as CronJob from "./CronJob";
|
|
14
|
+
import type * as CronJob from "./CronJob.js";
|
|
15
15
|
|
|
16
16
|
export const TypeId = "~@confect/server/CronJobs";
|
|
17
17
|
export type TypeId = typeof TypeId;
|
package/src/DataModel.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type * as DatabaseSchema from "./DatabaseSchema";
|
|
2
|
-
import type * as Table from "./Table";
|
|
3
|
-
import type * as TableInfo from "./TableInfo";
|
|
1
|
+
import type * as DatabaseSchema from "./DatabaseSchema.js";
|
|
2
|
+
import type * as Table from "./Table.js";
|
|
3
|
+
import type * as TableInfo from "./TableInfo.js";
|
|
4
4
|
import type * as GenericId from "@confect/core/GenericId";
|
|
5
5
|
|
|
6
6
|
export declare const TypeId: "~@confect/server/DataModel";
|
package/src/DatabaseReader.ts
CHANGED
|
@@ -2,10 +2,10 @@ import type { GenericDatabaseReader } from "convex/server";
|
|
|
2
2
|
import * as Context from "effect/Context";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
4
|
import type { BaseDatabaseReader } from "@confect/core/Types";
|
|
5
|
-
import * as DatabaseSchema from "./DatabaseSchema";
|
|
6
|
-
import type * as DataModel from "./DataModel";
|
|
7
|
-
import * as QueryInitializer from "./QueryInitializer";
|
|
8
|
-
import * as Table from "./Table";
|
|
5
|
+
import * as DatabaseSchema from "./DatabaseSchema.js";
|
|
6
|
+
import type * as DataModel from "./DataModel.js";
|
|
7
|
+
import * as QueryInitializer from "./QueryInitializer.js";
|
|
8
|
+
import * as Table from "./Table.js";
|
|
9
9
|
|
|
10
10
|
type IncludedTables<DatabaseSchema_ extends DatabaseSchema.AnyWithProps> =
|
|
11
11
|
| DatabaseSchema.Tables<DatabaseSchema_>
|
package/src/DatabaseSchema.ts
CHANGED
|
@@ -3,7 +3,7 @@ import * as Data from "effect/Data";
|
|
|
3
3
|
import * as Result from "effect/Result";
|
|
4
4
|
import * as Predicate from "effect/Predicate";
|
|
5
5
|
import * as Record from "effect/Record";
|
|
6
|
-
import type * as Table from "./Table";
|
|
6
|
+
import type * as Table from "./Table.js";
|
|
7
7
|
|
|
8
8
|
export class EmptyDatabaseScopeError extends Data.TaggedError(
|
|
9
9
|
"EmptyDatabaseScopeError",
|
package/src/DatabaseWriter.ts
CHANGED
|
@@ -10,13 +10,16 @@ import { pipe } from "effect/Function";
|
|
|
10
10
|
import * as Context from "effect/Context";
|
|
11
11
|
import * as Effect from "effect/Effect";
|
|
12
12
|
import * as Layer from "effect/Layer";
|
|
13
|
+
import * as Predicate from "effect/Predicate";
|
|
13
14
|
import * as Record from "effect/Record";
|
|
14
|
-
import * as
|
|
15
|
-
import
|
|
16
|
-
import type
|
|
17
|
-
import
|
|
18
|
-
import * as
|
|
19
|
-
import
|
|
15
|
+
import * as Result from "effect/Result";
|
|
16
|
+
import * as DatabaseSchema from "./DatabaseSchema.js";
|
|
17
|
+
import type * as DataModel from "./DataModel.js";
|
|
18
|
+
import type { DocumentByName as DocumentByName_ } from "./DataModel.js";
|
|
19
|
+
import * as Document from "./Document.js";
|
|
20
|
+
import * as DocumentPatch from "./internal/DocumentPatch.js";
|
|
21
|
+
import * as QueryInitializer from "./QueryInitializer.js";
|
|
22
|
+
import type * as Table from "./Table.js";
|
|
20
23
|
|
|
21
24
|
/**
|
|
22
25
|
* The argument accepted by `patch`: like `Partial<Doc>` without system fields,
|
|
@@ -97,11 +100,54 @@ export type DatabaseWriterTag<
|
|
|
97
100
|
DatabaseWriterService<DatabaseSchema_, Docs>
|
|
98
101
|
>;
|
|
99
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Decoded documents surrounding one successful write.
|
|
105
|
+
*/
|
|
106
|
+
export type Change<S extends DatabaseSchema.AnyWithProps> = {
|
|
107
|
+
[Name in DataModel.TableNames<DataModel.FromSchema<S>>]: {
|
|
108
|
+
readonly tableName: Name;
|
|
109
|
+
} & (
|
|
110
|
+
| {
|
|
111
|
+
readonly operation: "insert";
|
|
112
|
+
readonly oldDoc: null;
|
|
113
|
+
readonly newDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;
|
|
114
|
+
}
|
|
115
|
+
| {
|
|
116
|
+
readonly operation: "update";
|
|
117
|
+
readonly oldDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;
|
|
118
|
+
readonly newDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;
|
|
119
|
+
}
|
|
120
|
+
| {
|
|
121
|
+
readonly operation: "delete";
|
|
122
|
+
readonly oldDoc: DocumentByName_<DataModel.FromSchema<S>, Name>;
|
|
123
|
+
readonly newDoc: null;
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}[DataModel.TableNames<DataModel.FromSchema<S>>];
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Runs after the write, in its transaction. A defect aborts the mutation.
|
|
130
|
+
*
|
|
131
|
+
* Only writes through this writer are observed. Raw `ctx.db`, `MutationCtx`
|
|
132
|
+
* writes and a second `DatabaseWriter.make` bypass the hook, so a host that
|
|
133
|
+
* relies on it keeps raw writers out of its functions. Component writers and
|
|
134
|
+
* nested `runMutation` calls each need their own hook installation.
|
|
135
|
+
*
|
|
136
|
+
* Concurrent writes to one document (for example under `Effect.all`) can
|
|
137
|
+
* interleave the read-write-read steps. Await them sequentially when the hook
|
|
138
|
+
* needs exact per-write snapshots. The writer takes no lock, because a hook
|
|
139
|
+
* that writes through the same writer would deadlock under one.
|
|
140
|
+
*/
|
|
141
|
+
export type Hook<S extends DatabaseSchema.AnyWithProps> = (
|
|
142
|
+
change: Change<S>,
|
|
143
|
+
) => Effect.Effect<void>;
|
|
144
|
+
|
|
100
145
|
export const make = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(
|
|
101
146
|
databaseSchema: DatabaseSchema_,
|
|
102
147
|
convexDatabaseWriter: GenericDatabaseWriter<
|
|
103
148
|
DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>
|
|
104
149
|
>,
|
|
150
|
+
hook?: Hook<DatabaseSchema_>,
|
|
105
151
|
): DatabaseWriterService<DatabaseSchema_> => {
|
|
106
152
|
type DataModel_ = DataModel.FromSchema<DatabaseSchema_>;
|
|
107
153
|
|
|
@@ -131,38 +177,108 @@ export const make = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(
|
|
|
131
177
|
return id as unknown as DataModel.Id<DataModel_, TableName>;
|
|
132
178
|
});
|
|
133
179
|
|
|
180
|
+
// A codec whose encoding spans fields cannot encode a patch on its own, so
|
|
181
|
+
// the patch is merged into the decoded document and the result replaces it.
|
|
182
|
+
const replacePatched = (
|
|
183
|
+
id: DataModel.Id<DataModel_, TableName>,
|
|
184
|
+
patchedValues: PatchValue<
|
|
185
|
+
Document.WithoutSystemFields<DocumentByName_<DataModel_, TableName>>
|
|
186
|
+
>,
|
|
187
|
+
) =>
|
|
188
|
+
Effect.gen(function* () {
|
|
189
|
+
const originalDecodedDoc = yield* QueryInitializer.getById<
|
|
190
|
+
Table.AnyWithProps,
|
|
191
|
+
TableName
|
|
192
|
+
>(
|
|
193
|
+
convexDatabaseWriter as any,
|
|
194
|
+
tableDef,
|
|
195
|
+
)(id as unknown as GenericId<TableName>);
|
|
196
|
+
|
|
197
|
+
const updatedEncodedDoc = yield* pipe(
|
|
198
|
+
patchedValues,
|
|
199
|
+
Record.reduce(originalDecodedDoc, (acc, value, key) =>
|
|
200
|
+
value === undefined
|
|
201
|
+
? Record.remove(acc, key)
|
|
202
|
+
: Record.set(acc, key, value),
|
|
203
|
+
),
|
|
204
|
+
Document.encode(tableDef),
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
yield* Effect.promise(() =>
|
|
208
|
+
convexDatabaseWriter.replace(
|
|
209
|
+
id as unknown as GenericId<TableName>,
|
|
210
|
+
updatedEncodedDoc as Expand<
|
|
211
|
+
BetterOmit<
|
|
212
|
+
DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,
|
|
213
|
+
"_creationTime" | "_id"
|
|
214
|
+
>
|
|
215
|
+
>,
|
|
216
|
+
),
|
|
217
|
+
);
|
|
218
|
+
});
|
|
219
|
+
|
|
134
220
|
const patch = Effect.fn("DatabaseWriter.patch")(function* (
|
|
135
221
|
id: DataModel.Id<DataModel_, TableName>,
|
|
136
222
|
patchedValues: PatchValue<
|
|
137
223
|
Document.WithoutSystemFields<DocumentByName_<DataModel_, TableName>>
|
|
138
224
|
>,
|
|
139
225
|
) {
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
convexDatabaseWriter as any,
|
|
145
|
-
tableDef,
|
|
146
|
-
)(id as unknown as GenericId<TableName>);
|
|
226
|
+
const encodePatch = DocumentPatch.encoder(tableDef);
|
|
227
|
+
if (encodePatch === undefined) {
|
|
228
|
+
return yield* replacePatched(id, patchedValues);
|
|
229
|
+
}
|
|
147
230
|
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
231
|
+
const storedDoc = yield* pipe(
|
|
232
|
+
Effect.promise(() =>
|
|
233
|
+
convexDatabaseWriter.get(id as unknown as GenericId<TableName>),
|
|
234
|
+
),
|
|
235
|
+
Effect.andThen((value) =>
|
|
236
|
+
Effect.fromResult(
|
|
237
|
+
Result.fromNullishOr(
|
|
238
|
+
value,
|
|
239
|
+
() =>
|
|
240
|
+
new QueryInitializer.GetByIdFailure({
|
|
241
|
+
tableName,
|
|
242
|
+
id,
|
|
243
|
+
}),
|
|
244
|
+
),
|
|
245
|
+
),
|
|
246
|
+
),
|
|
247
|
+
);
|
|
248
|
+
// The patch must encode and the patched document must decode. When
|
|
249
|
+
// either fails, the stored document decides whose fault that is.
|
|
250
|
+
const encodedPatch = yield* pipe(
|
|
251
|
+
encodePatch(patchedValues),
|
|
252
|
+
Effect.mapError(({ message }) => message),
|
|
253
|
+
Effect.tap((delta) =>
|
|
254
|
+
pipe(
|
|
255
|
+
{ ...storedDoc, ...delta },
|
|
256
|
+
Record.filter(Predicate.isNotUndefined),
|
|
257
|
+
Document.decode(tableDef),
|
|
258
|
+
Effect.mapError(({ parseError }) => parseError),
|
|
259
|
+
),
|
|
260
|
+
),
|
|
261
|
+
Effect.catch((parseError) =>
|
|
262
|
+
pipe(
|
|
263
|
+
Document.decode(storedDoc, tableDef),
|
|
264
|
+
Effect.andThen(
|
|
265
|
+
Effect.fail(
|
|
266
|
+
new Document.DocumentEncodeError({
|
|
267
|
+
tableName,
|
|
268
|
+
id,
|
|
269
|
+
parseError,
|
|
270
|
+
}),
|
|
271
|
+
),
|
|
272
|
+
),
|
|
273
|
+
),
|
|
154
274
|
),
|
|
155
|
-
Document.encode(tableDef),
|
|
156
275
|
);
|
|
157
276
|
|
|
158
277
|
yield* Effect.promise(() =>
|
|
159
|
-
convexDatabaseWriter.
|
|
278
|
+
convexDatabaseWriter.patch(
|
|
160
279
|
id as unknown as GenericId<TableName>,
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
DocumentByName<DataModel.ToConvex<DataModel_>, TableName>,
|
|
164
|
-
"_creationTime" | "_id"
|
|
165
|
-
>
|
|
280
|
+
encodedPatch as Partial<
|
|
281
|
+
DocumentByName<DataModel.ToConvex<DataModel_>, TableName>
|
|
166
282
|
>,
|
|
167
283
|
),
|
|
168
284
|
);
|
|
@@ -194,11 +310,52 @@ export const make = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(
|
|
|
194
310
|
convexDatabaseWriter.delete(id as unknown as GenericId<TableName>),
|
|
195
311
|
);
|
|
196
312
|
|
|
313
|
+
const accessor = { insert, patch, replace, delete: delete_ };
|
|
314
|
+
if (hook === undefined) return accessor;
|
|
315
|
+
|
|
316
|
+
const read = (id: DataModel.Id<DataModel_, TableName>) =>
|
|
317
|
+
QueryInitializer.getById<Table.AnyWithProps, TableName>(
|
|
318
|
+
convexDatabaseWriter as any,
|
|
319
|
+
tableDef,
|
|
320
|
+
)(id as unknown as GenericId<TableName>);
|
|
321
|
+
const notify = (
|
|
322
|
+
operation: "insert" | "update" | "delete",
|
|
323
|
+
oldDoc: unknown,
|
|
324
|
+
newDoc: unknown,
|
|
325
|
+
) =>
|
|
326
|
+
hook({ tableName, operation, oldDoc, newDoc } as Change<DatabaseSchema_>);
|
|
327
|
+
const update =
|
|
328
|
+
<A extends ReadonlyArray<unknown>, E, BeforeError>(
|
|
329
|
+
before: (
|
|
330
|
+
id: DataModel.Id<DataModel_, TableName>,
|
|
331
|
+
) => Effect.Effect<unknown, BeforeError>,
|
|
332
|
+
write: (
|
|
333
|
+
id: DataModel.Id<DataModel_, TableName>,
|
|
334
|
+
...args: A
|
|
335
|
+
) => Effect.Effect<void, E>,
|
|
336
|
+
) =>
|
|
337
|
+
(id: DataModel.Id<DataModel_, TableName>, ...args: A) =>
|
|
338
|
+
Effect.gen(function* () {
|
|
339
|
+
const oldDoc = yield* before(id);
|
|
340
|
+
yield* write(id, ...args);
|
|
341
|
+
yield* notify("update", oldDoc, yield* read(id).pipe(Effect.orDie));
|
|
342
|
+
});
|
|
343
|
+
|
|
197
344
|
return {
|
|
198
|
-
insert
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
345
|
+
insert: (document: Parameters<typeof insert>[0]) =>
|
|
346
|
+
Effect.gen(function* () {
|
|
347
|
+
const id = yield* insert(document);
|
|
348
|
+
yield* notify("insert", null, yield* read(id).pipe(Effect.orDie));
|
|
349
|
+
return id;
|
|
350
|
+
}),
|
|
351
|
+
patch: update(read, patch),
|
|
352
|
+
replace: update((id) => read(id).pipe(Effect.orDie), replace),
|
|
353
|
+
delete: (id: DataModel.Id<DataModel_, TableName>) =>
|
|
354
|
+
Effect.gen(function* () {
|
|
355
|
+
const oldDoc = yield* read(id).pipe(Effect.orDie);
|
|
356
|
+
yield* delete_(id);
|
|
357
|
+
yield* notify("delete", oldDoc, null);
|
|
358
|
+
}),
|
|
202
359
|
};
|
|
203
360
|
};
|
|
204
361
|
|
|
@@ -225,8 +382,9 @@ export const layer = <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(
|
|
|
225
382
|
convexDatabaseWriter: GenericDatabaseWriter<
|
|
226
383
|
DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>
|
|
227
384
|
>,
|
|
385
|
+
hook?: Hook<DatabaseSchema_>,
|
|
228
386
|
) =>
|
|
229
387
|
Layer.succeed(
|
|
230
388
|
DatabaseWriter<DatabaseSchema_>(),
|
|
231
|
-
make(databaseSchema, convexDatabaseWriter),
|
|
389
|
+
make(databaseSchema, convexDatabaseWriter, hook),
|
|
232
390
|
);
|
package/src/Document.ts
CHANGED
|
@@ -4,10 +4,10 @@ import * as Effect from "effect/Effect";
|
|
|
4
4
|
import * as Function from "effect/Function";
|
|
5
5
|
import * as Schema from "effect/Schema";
|
|
6
6
|
import type { ReadonlyRecord } from "effect/Record";
|
|
7
|
-
import type * as DatabaseSchema from "./DatabaseSchema";
|
|
8
|
-
import type * as DataModel from "./DataModel";
|
|
9
|
-
import type * as TableInfo from "./TableInfo";
|
|
10
|
-
import type * as Table from "./Table";
|
|
7
|
+
import type * as DatabaseSchema from "./DatabaseSchema.js";
|
|
8
|
+
import type * as DataModel from "./DataModel.js";
|
|
9
|
+
import type * as TableInfo from "./TableInfo.js";
|
|
10
|
+
import type * as Table from "./Table.js";
|
|
11
11
|
|
|
12
12
|
export type Document<
|
|
13
13
|
Schema_ extends DatabaseSchema.AnyWithProps,
|
package/src/FunctionImpl.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type * as FunctionSpec from "@confect/core/FunctionSpec";
|
|
2
2
|
import type * as GroupSpec from "@confect/core/GroupSpec";
|
|
3
3
|
import type * as MiddlewareSpec from "@confect/core/MiddlewareSpec";
|
|
4
|
-
import * as Registry from "./Registry";
|
|
4
|
+
import * as Registry from "./Registry.js";
|
|
5
5
|
import * as Context from "effect/Context";
|
|
6
6
|
import * as Effect from "effect/Effect";
|
|
7
7
|
import * as Layer from "effect/Layer";
|
|
8
8
|
import * as Ref from "effect/Ref";
|
|
9
|
-
import type * as DatabaseSchema from "./DatabaseSchema";
|
|
10
|
-
import type * as Handler from "./Handler";
|
|
11
|
-
import { setNestedProperty } from "./internal/utils";
|
|
12
|
-
import * as FunctionRegistryItem from "./FunctionRegistryItem";
|
|
9
|
+
import type * as DatabaseSchema from "./DatabaseSchema.js";
|
|
10
|
+
import type * as Handler from "./Handler.js";
|
|
11
|
+
import { setNestedProperty } from "./internal/utils.js";
|
|
12
|
+
import * as FunctionRegistryItem from "./FunctionRegistryItem.js";
|
|
13
13
|
|
|
14
14
|
export interface FunctionImpl<Name_ extends string> {
|
|
15
15
|
readonly name: Name_;
|
|
@@ -5,7 +5,7 @@ import type { FunctionType, FunctionVisibility } from "convex/server";
|
|
|
5
5
|
import * as Match from "effect/Match";
|
|
6
6
|
import * as Predicate from "effect/Predicate";
|
|
7
7
|
import type * as Schema from "effect/Schema";
|
|
8
|
-
import type * as Handler from "./Handler";
|
|
8
|
+
import type * as Handler from "./Handler.js";
|
|
9
9
|
|
|
10
10
|
export const TypeId = "~@confect/server/FunctionRegistryItem";
|
|
11
11
|
export type TypeId = typeof TypeId;
|