@confect/test 3.0.0 → 5.0.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @confect/test
2
2
 
3
+ ## 5.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [8853cbf]
8
+ - @confect/server@5.0.0
9
+ - @confect/core@5.0.0
10
+
11
+ ## 4.0.0
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [60be7e6]
16
+ - Updated dependencies [641fd99]
17
+ - Updated dependencies [8ae4d51]
18
+ - @confect/server@4.0.0
19
+ - @confect/core@4.0.0
20
+
3
21
  ## 3.0.0
4
22
 
5
23
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"TestConfect.d.ts","names":[],"sources":["../src/TestConfect.ts"],"mappings":";;;;;;;;;;KAaY,0BAAA,uBACY,cAAA,CAAe,YAAA;EAErC,KAAA,oBAAyB,GAAA,CAAI,QAAA,EAC3B,QAAA,EAAU,QAAA,EACV,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,QAAA,MACZ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,QAAA,GAAW,WAAA,CAAY,UAAA;EACtD,QAAA,uBAA+B,GAAA,CAAI,WAAA,EACjC,WAAA,EAAa,WAAA,EACb,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,WAAA,MACZ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,WAAA,GAAc,WAAA,CAAY,UAAA;EACzD,MAAA,qBAA2B,GAAA,CAAI,SAAA,EAC7B,SAAA,EAAW,SAAA,EACX,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,SAAA,MACZ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,SAAA,GAAY,WAAA,CAAY,UAAA;EACvD,GAAA;IAAA,IAEI,OAAA,EAAS,MAAA,CAAO,MAAA,OAEd,CAAA,EACA,wBAAA,CAAyB,gBAAA,CAAiB,aAAA,KAE3C,MAAA,CAAO,MAAA;IAAA,cACI,KAAA,KACZ,OAAA,EAAS,MAAA,CAAO,MAAA,CACd,CAAA,EACA,CAAA,EACA,wBAAA,CAAyB,gBAAA,CAAiB,aAAA,IAE5C,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,CAAA,IACzB,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,WAAA,CAAY,UAAA;EAAA;EAElC,KAAA,GACE,iBAAA,UACA,IAAA,GAAO,WAAA,KACJ,MAAA,CAAO,MAAA,CAAO,QAAA;EACnB,kCAAA,QAA0C,MAAA,CAAO,MAAA;EACjD,2BAAA,GACE,aAAA,iBACG,MAAA,CAAO,MAAA;AAAA;AAAA,KAGF,WAAA,uBAAkC,cAAA,CAAe,YAAA;EAC3D,YAAA,GACE,YAAA,EAAc,OAAA,CAAQ,YAAA,MACnB,0BAAA,CAA2B,aAAA;AAAA,IAC9B,0BAAA,CAA2B,aAAA;AAAA,cAElB,WAAA,yBACW,cAAA,CAAe,YAAA,OAAY,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,aAAA,GAAA,WAAA,CAAA,aAAA;AAAA,cA0NtC,KAAA,2BACc,cAAA,CAAe,YAAA,EACtC,cAAA,EAAgB,eAAA,EAChB,OAAA,EAAS,MAAA,eAAqB,OAAA,iBAE5B,KAAA,CAAM,KAAA,CAAM,WAAA,CAAY,eAAA"}
1
+ {"version":3,"file":"TestConfect.d.ts","names":[],"sources":["../src/TestConfect.ts"],"mappings":";;;;;;;;;;KAaY,0BAAA,uBACY,cAAA,CAAe,YAAA;EAErC,KAAA,oBAAyB,GAAA,CAAI,QAAA,EAC3B,QAAA,EAAU,QAAA,EACV,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,QAAA,MACZ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,QAAA,GAAW,WAAA,CAAY,UAAA;EACtD,QAAA,uBAA+B,GAAA,CAAI,WAAA,EACjC,WAAA,EAAa,WAAA,EACb,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,WAAA,MACZ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,WAAA,GAAc,WAAA,CAAY,UAAA;EACzD,MAAA,qBAA2B,GAAA,CAAI,SAAA,EAC7B,SAAA,EAAW,SAAA,EACX,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,SAAA,MACZ,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,SAAA,GAAY,WAAA,CAAY,UAAA;EACvD,GAAA;IAAA,IAEI,OAAA,EAAS,MAAA,CAAO,MAAA,OAEd,CAAA,EACA,wBAAA,CAAyB,gBAAA,CAAiB,aAAA,KAE3C,MAAA,CAAO,MAAA;IAAA,cACI,KAAA,KACZ,OAAA,EAAS,MAAA,CAAO,MAAA,CACd,CAAA,EACA,CAAA,EACA,wBAAA,CAAyB,gBAAA,CAAiB,aAAA,IAE5C,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,CAAA,IACzB,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,WAAA,CAAY,UAAA;EAAA;EAElC,KAAA,GACE,iBAAA,UACA,IAAA,GAAO,WAAA,KACJ,MAAA,CAAO,MAAA,CAAO,QAAA;EACnB,kCAAA,QAA0C,MAAA,CAAO,MAAA;EACjD,2BAAA,GACE,aAAA,iBACG,MAAA,CAAO,MAAA;AAAA;AAAA,KAGF,WAAA,uBAAkC,cAAA,CAAe,YAAA;EAC3D,YAAA,GACE,YAAA,EAAc,OAAA,CAAQ,YAAA,MACnB,0BAAA,CAA2B,aAAA;AAAA,IAC9B,0BAAA,CAA2B,aAAA;AAAA,cAElB,WAAA,yBACW,cAAA,CAAe,YAAA,OAAY,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,aAAA,GAAA,WAAA,CAAA,aAAA;AAAA,cAiKtC,KAAA,2BACc,cAAA,CAAe,YAAA,EACtC,cAAA,EAAgB,eAAA,EAChB,OAAA,EAAS,MAAA,eAAqB,OAAA,iBAE5B,KAAA,CAAM,KAAA,CAAM,WAAA,CAAY,eAAA"}
@@ -2,7 +2,7 @@ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import { Ref } from "@confect/core";
3
3
  import { RegisteredConvexFunction } from "@confect/server";
4
4
  import { convexTest } from "convex-test";
5
- import { Context, Effect, Layer, Match, Schema } from "effect";
5
+ import { Context, Effect, Layer, Schema } from "effect";
6
6
 
7
7
  //#region src/TestConfect.ts
8
8
  var TestConfect_exports = /* @__PURE__ */ __exportAll({
@@ -15,33 +15,9 @@ var TestConfectImplWithoutIdentity = class {
15
15
  this.confectSchema = confectSchema;
16
16
  this.testConvex = testConvex;
17
17
  }
18
- query = (queryRef, args) => Effect.gen(this, function* () {
19
- const querySpec = Ref.getFunctionSpec(queryRef);
20
- const queryName = Ref.getConvexFunctionName(queryRef);
21
- return yield* Match.value(querySpec.functionProvenance).pipe(Match.tag("Confect", (confect) => Effect.gen(this, function* () {
22
- const encodedArgs = yield* Schema.encode(confect.args)(args);
23
- const encodedReturns = yield* Effect.promise(() => this.testConvex.query(queryName, encodedArgs));
24
- return yield* Schema.decode(confect.returns)(encodedReturns);
25
- })), Match.tag("Convex", () => Effect.promise(() => this.testConvex.query(queryName, args))), Match.exhaustive);
26
- });
27
- mutation = (mutationRef, args) => Effect.gen(this, function* () {
28
- const mutationSpec = Ref.getFunctionSpec(mutationRef);
29
- const mutationName = Ref.getConvexFunctionName(mutationRef);
30
- return yield* Match.value(mutationSpec.functionProvenance).pipe(Match.tag("Confect", (confect) => Effect.gen(this, function* () {
31
- const encodedArgs = yield* Schema.encode(confect.args)(args);
32
- const encodedReturns = yield* Effect.promise(() => this.testConvex.mutation(mutationName, encodedArgs));
33
- return yield* Schema.decode(confect.returns)(encodedReturns);
34
- })), Match.tag("Convex", () => Effect.promise(() => this.testConvex.mutation(mutationName, args))), Match.exhaustive);
35
- });
36
- action = (actionRef, args) => Effect.gen(this, function* () {
37
- const actionSpec = Ref.getFunctionSpec(actionRef);
38
- const actionName = Ref.getConvexFunctionName(actionRef);
39
- return yield* Match.value(actionSpec.functionProvenance).pipe(Match.tag("Confect", (confect) => Effect.gen(this, function* () {
40
- const encodedArgs = yield* Schema.encode(confect.args)(args);
41
- const encodedReturns = yield* Effect.promise(() => this.testConvex.action(actionName, encodedArgs));
42
- return yield* Schema.decode(confect.returns)(encodedReturns);
43
- })), Match.tag("Convex", () => Effect.promise(() => this.testConvex.action(actionName, args))), Match.exhaustive);
44
- });
18
+ query = (queryRef, args) => Ref.runWithCodec(queryRef, args, (functionReference, encodedArgs) => this.testConvex.query(functionReference, encodedArgs));
19
+ mutation = (mutationRef, args) => Ref.runWithCodec(mutationRef, args, (functionReference, encodedArgs) => this.testConvex.mutation(functionReference, encodedArgs));
20
+ action = (actionRef, args) => Ref.runWithCodec(actionRef, args, (functionReference, encodedArgs) => this.testConvex.action(functionReference, encodedArgs));
45
21
  run = ((handler, returns) => {
46
22
  const makeMutationLayer = (mutationCtx) => RegisteredConvexFunction.mutationLayer(this.confectSchema, mutationCtx);
47
23
  return returns === void 0 ? Effect.promise(() => this.testConvex.run((mutationCtx) => Effect.runPromise(handler.pipe(Effect.asVoid, Effect.provide(makeMutationLayer(mutationCtx)))))) : Effect.promise(() => this.testConvex.run((mutationCtx) => Effect.runPromise(handler.pipe(Effect.andThen(Schema.encode(returns)), Effect.provide(makeMutationLayer(mutationCtx)))))).pipe(Effect.andThen(Schema.decode(returns)));
@@ -1 +1 @@
1
- {"version":3,"file":"TestConfect.js","names":[],"sources":["../src/TestConfect.ts"],"sourcesContent":["import { Ref } from \"@confect/core\";\nimport type { DatabaseSchema, DataModel } from \"@confect/server\";\nimport { RegisteredConvexFunction } from \"@confect/server\";\nimport type {\n TestConvexForDataModel,\n TestConvexForDataModelAndIdentity,\n} from \"convex-test\";\nimport { convexTest } from \"convex-test\";\nimport type { GenericMutationCtx, UserIdentity } from \"convex/server\";\nimport type { Value } from \"convex/values\";\nimport type { ParseResult } from \"effect\";\nimport { Context, Effect, Layer, Match, Schema } from \"effect\";\n\nexport type TestConfectWithoutIdentity<\n ConfectSchema extends DatabaseSchema.AnyWithProps,\n> = {\n query: <QueryRef extends Ref.AnyQuery>(\n queryRef: QueryRef,\n args: Ref.Args<QueryRef>,\n ) => Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError>;\n mutation: <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n args: Ref.Args<MutationRef>,\n ) => Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError>;\n action: <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n args: Ref.Args<ActionRef>,\n ) => Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError>;\n run: {\n <E>(\n handler: Effect.Effect<\n void,\n E,\n RegisteredConvexFunction.MutationServices<ConfectSchema>\n >,\n ): Effect.Effect<void>;\n <A, B extends Value, E>(\n handler: Effect.Effect<\n A,\n E,\n RegisteredConvexFunction.MutationServices<ConfectSchema>\n >,\n returns: Schema.Schema<A, B>,\n ): Effect.Effect<A, ParseResult.ParseError>;\n };\n fetch: (\n pathQueryFragment: string,\n init?: RequestInit,\n ) => Effect.Effect<Response>;\n finishInProgressScheduledFunctions: () => Effect.Effect<void>;\n finishAllScheduledFunctions: (\n advanceTimers: () => void,\n ) => Effect.Effect<void>;\n};\n\nexport type TestConfect<ConfectSchema extends DatabaseSchema.AnyWithProps> = {\n withIdentity: (\n userIdentity: Partial<UserIdentity>,\n ) => TestConfectWithoutIdentity<ConfectSchema>;\n} & TestConfectWithoutIdentity<ConfectSchema>;\n\nexport const TestConfect = <\n ConfectSchema extends DatabaseSchema.AnyWithProps,\n>() =>\n Context.GenericTag<TestConfect<ConfectSchema>>(\"@confect/test/TestConfect\");\n\nclass TestConfectImplWithoutIdentity<\n ConfectSchema extends DatabaseSchema.AnyWithProps,\n> implements TestConfectWithoutIdentity<ConfectSchema> {\n constructor(\n private confectSchema: ConfectSchema,\n private testConvex: TestConvexForDataModel<\n DataModel.ToConvex<DataModel.FromSchema<ConfectSchema>>\n >,\n ) {}\n\n readonly query = <QueryRef extends Ref.AnyQuery>(\n queryRef: QueryRef,\n args: Ref.Args<QueryRef>,\n ): Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError> =>\n Effect.gen(this, function* () {\n const querySpec = Ref.getFunctionSpec(queryRef);\n const queryName = Ref.getConvexFunctionName(queryRef);\n\n return yield* Match.value(querySpec.functionProvenance).pipe(\n Match.tag(\"Confect\", (confect) =>\n Effect.gen(this, function* () {\n const encodedArgs = yield* Schema.encode(confect.args)(args);\n const encodedReturns = yield* Effect.promise(() =>\n this.testConvex.query(queryName as any, encodedArgs),\n );\n return yield* Schema.decode(confect.returns)(encodedReturns);\n }),\n ),\n Match.tag(\"Convex\", () =>\n Effect.promise(() =>\n this.testConvex.query(queryName as any, args as any),\n ),\n ),\n Match.exhaustive,\n );\n });\n\n readonly mutation = <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n args: Ref.Args<MutationRef>,\n ): Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError> =>\n Effect.gen(this, function* () {\n const mutationSpec = Ref.getFunctionSpec(mutationRef);\n const mutationName = Ref.getConvexFunctionName(mutationRef);\n\n return yield* Match.value(mutationSpec.functionProvenance).pipe(\n Match.tag(\"Confect\", (confect) =>\n Effect.gen(this, function* () {\n const encodedArgs = yield* Schema.encode(confect.args)(args);\n const encodedReturns = yield* Effect.promise(() =>\n this.testConvex.mutation(mutationName as any, encodedArgs),\n );\n return yield* Schema.decode(confect.returns)(encodedReturns);\n }),\n ),\n Match.tag(\"Convex\", () =>\n Effect.promise(() =>\n this.testConvex.mutation(mutationName as any, args as any),\n ),\n ),\n Match.exhaustive,\n );\n });\n\n readonly action = <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n args: Ref.Args<ActionRef>,\n ): Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError> =>\n Effect.gen(this, function* () {\n const actionSpec = Ref.getFunctionSpec(actionRef);\n const actionName = Ref.getConvexFunctionName(actionRef);\n\n return yield* Match.value(actionSpec.functionProvenance).pipe(\n Match.tag(\"Confect\", (confect) =>\n Effect.gen(this, function* () {\n const encodedArgs = yield* Schema.encode(confect.args)(args);\n const encodedReturns = yield* Effect.promise(() =>\n this.testConvex.action(actionName as any, encodedArgs),\n );\n return yield* Schema.decode(confect.returns)(encodedReturns);\n }),\n ),\n Match.tag(\"Convex\", () =>\n Effect.promise(() =>\n this.testConvex.action(actionName as any, args as any),\n ),\n ),\n Match.exhaustive,\n );\n });\n\n readonly run: TestConfectWithoutIdentity<ConfectSchema>[\"run\"] = (<\n A,\n B extends Value,\n E,\n >(\n handler: Effect.Effect<\n A,\n E,\n RegisteredConvexFunction.MutationServices<ConfectSchema>\n >,\n returns?: Schema.Schema<A, B>,\n ): Effect.Effect<void> | Effect.Effect<A, ParseResult.ParseError> => {\n const makeMutationLayer = (\n mutationCtx: GenericMutationCtx<\n DataModel.ToConvex<DataModel.FromSchema<ConfectSchema>>\n >,\n ): Layer.Layer<RegisteredConvexFunction.MutationServices<ConfectSchema>> =>\n RegisteredConvexFunction.mutationLayer(\n this.confectSchema,\n mutationCtx,\n ) as Layer.Layer<\n RegisteredConvexFunction.MutationServices<ConfectSchema>\n >;\n\n return returns === undefined\n ? Effect.promise(() =>\n this.testConvex.run((mutationCtx) =>\n Effect.runPromise(\n handler.pipe(\n Effect.asVoid,\n Effect.provide(makeMutationLayer(mutationCtx)),\n ),\n ),\n ),\n )\n : Effect.promise(() =>\n this.testConvex.run((mutationCtx) =>\n Effect.runPromise(\n handler.pipe(\n Effect.andThen(Schema.encode(returns)),\n Effect.provide(makeMutationLayer(mutationCtx)),\n ),\n ),\n ),\n ).pipe(Effect.andThen(Schema.decode(returns)));\n }) as TestConfectWithoutIdentity<ConfectSchema>[\"run\"];\n\n readonly fetch = <PathQueryFragment extends string>(\n pathQueryFragment: PathQueryFragment,\n init?: RequestInit,\n ) => Effect.promise(() => this.testConvex.fetch(pathQueryFragment, init));\n\n readonly finishInProgressScheduledFunctions = () =>\n Effect.promise(() => this.testConvex.finishInProgressScheduledFunctions());\n\n readonly finishAllScheduledFunctions = (advanceTimers: () => void) =>\n Effect.promise(() =>\n this.testConvex.finishAllScheduledFunctions(advanceTimers),\n );\n}\n\nclass TestConfectImpl<\n ConfectSchema extends DatabaseSchema.AnyWithProps,\n> implements TestConfect<ConfectSchema> {\n private readonly testConfectImplWithoutIdentity: TestConfectImplWithoutIdentity<ConfectSchema>;\n\n constructor(\n private confectSchema: ConfectSchema,\n private testConvex: TestConvexForDataModelAndIdentity<\n DataModel.ToConvex<DataModel.FromSchema<ConfectSchema>>\n >,\n ) {\n this.testConvex = testConvex;\n this.testConfectImplWithoutIdentity = new TestConfectImplWithoutIdentity(\n confectSchema,\n testConvex,\n );\n }\n\n readonly withIdentity = (userIdentity: Partial<UserIdentity>) =>\n new TestConfectImplWithoutIdentity(\n this.confectSchema,\n this.testConvex.withIdentity(userIdentity),\n );\n\n readonly query = <QueryRef extends Ref.AnyQuery>(\n queryRef: QueryRef,\n args: Ref.Args<QueryRef>,\n ) => this.testConfectImplWithoutIdentity.query(queryRef, args);\n\n readonly mutation = <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n args: Ref.Args<MutationRef>,\n ) => this.testConfectImplWithoutIdentity.mutation(mutationRef, args);\n\n readonly action = <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n args: Ref.Args<ActionRef>,\n ) => this.testConfectImplWithoutIdentity.action(actionRef, args);\n\n readonly run: TestConfect<ConfectSchema>[\"run\"] = ((\n handler: any,\n returns?: any,\n ) =>\n this.testConfectImplWithoutIdentity.run(\n handler,\n returns,\n )) as TestConfect<ConfectSchema>[\"run\"];\n\n readonly fetch = <PathQueryFragment extends string>(\n pathQueryFragment: PathQueryFragment,\n init?: RequestInit,\n ) => this.testConfectImplWithoutIdentity.fetch(pathQueryFragment, init);\n\n readonly finishInProgressScheduledFunctions = () =>\n this.testConfectImplWithoutIdentity.finishInProgressScheduledFunctions();\n\n readonly finishAllScheduledFunctions = (advanceTimers: () => void) =>\n this.testConfectImplWithoutIdentity.finishAllScheduledFunctions(\n advanceTimers,\n );\n}\n\nexport const layer =\n <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(\n databaseSchema: DatabaseSchema_,\n modules: Record<string, () => Promise<any>>,\n ) =>\n (): Layer.Layer<TestConfect<DatabaseSchema_>> =>\n Layer.sync(\n TestConfect<DatabaseSchema_>(),\n () =>\n new TestConfectImpl(\n databaseSchema,\n convexTest(\n databaseSchema.convexSchemaDefinition,\n modules,\n ) as unknown as TestConvexForDataModelAndIdentity<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n ),\n );\n"],"mappings":"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"}
1
+ {"version":3,"file":"TestConfect.js","names":[],"sources":["../src/TestConfect.ts"],"sourcesContent":["import { Ref } from \"@confect/core\";\nimport type { DatabaseSchema, DataModel } from \"@confect/server\";\nimport { RegisteredConvexFunction } from \"@confect/server\";\nimport type {\n TestConvexForDataModel,\n TestConvexForDataModelAndIdentity,\n} from \"convex-test\";\nimport { convexTest } from \"convex-test\";\nimport type { GenericMutationCtx, UserIdentity } from \"convex/server\";\nimport type { Value } from \"convex/values\";\nimport type { ParseResult } from \"effect\";\nimport { Context, Effect, Layer, Schema } from \"effect\";\n\nexport type TestConfectWithoutIdentity<\n ConfectSchema extends DatabaseSchema.AnyWithProps,\n> = {\n query: <QueryRef extends Ref.AnyQuery>(\n queryRef: QueryRef,\n args: Ref.Args<QueryRef>,\n ) => Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError>;\n mutation: <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n args: Ref.Args<MutationRef>,\n ) => Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError>;\n action: <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n args: Ref.Args<ActionRef>,\n ) => Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError>;\n run: {\n <E>(\n handler: Effect.Effect<\n void,\n E,\n RegisteredConvexFunction.MutationServices<ConfectSchema>\n >,\n ): Effect.Effect<void>;\n <A, B extends Value, E>(\n handler: Effect.Effect<\n A,\n E,\n RegisteredConvexFunction.MutationServices<ConfectSchema>\n >,\n returns: Schema.Schema<A, B>,\n ): Effect.Effect<A, ParseResult.ParseError>;\n };\n fetch: (\n pathQueryFragment: string,\n init?: RequestInit,\n ) => Effect.Effect<Response>;\n finishInProgressScheduledFunctions: () => Effect.Effect<void>;\n finishAllScheduledFunctions: (\n advanceTimers: () => void,\n ) => Effect.Effect<void>;\n};\n\nexport type TestConfect<ConfectSchema extends DatabaseSchema.AnyWithProps> = {\n withIdentity: (\n userIdentity: Partial<UserIdentity>,\n ) => TestConfectWithoutIdentity<ConfectSchema>;\n} & TestConfectWithoutIdentity<ConfectSchema>;\n\nexport const TestConfect = <\n ConfectSchema extends DatabaseSchema.AnyWithProps,\n>() =>\n Context.GenericTag<TestConfect<ConfectSchema>>(\"@confect/test/TestConfect\");\n\nclass TestConfectImplWithoutIdentity<\n ConfectSchema extends DatabaseSchema.AnyWithProps,\n> implements TestConfectWithoutIdentity<ConfectSchema> {\n constructor(\n private confectSchema: ConfectSchema,\n private testConvex: TestConvexForDataModel<\n DataModel.ToConvex<DataModel.FromSchema<ConfectSchema>>\n >,\n ) {}\n\n readonly query = <QueryRef extends Ref.AnyQuery>(\n queryRef: QueryRef,\n args: Ref.Args<QueryRef>,\n ): Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError> =>\n Ref.runWithCodec(queryRef, args, (functionReference, encodedArgs) =>\n this.testConvex.query(functionReference, encodedArgs),\n );\n\n readonly mutation = <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n args: Ref.Args<MutationRef>,\n ): Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError> =>\n Ref.runWithCodec(mutationRef, args, (functionReference, encodedArgs) =>\n this.testConvex.mutation(functionReference, encodedArgs),\n );\n\n readonly action = <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n args: Ref.Args<ActionRef>,\n ): Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError> =>\n Ref.runWithCodec(actionRef, args, (functionReference, encodedArgs) =>\n this.testConvex.action(functionReference, encodedArgs),\n );\n\n readonly run: TestConfectWithoutIdentity<ConfectSchema>[\"run\"] = (<\n A,\n B extends Value,\n E,\n >(\n handler: Effect.Effect<\n A,\n E,\n RegisteredConvexFunction.MutationServices<ConfectSchema>\n >,\n returns?: Schema.Schema<A, B>,\n ): Effect.Effect<void> | Effect.Effect<A, ParseResult.ParseError> => {\n const makeMutationLayer = (\n mutationCtx: GenericMutationCtx<\n DataModel.ToConvex<DataModel.FromSchema<ConfectSchema>>\n >,\n ): Layer.Layer<RegisteredConvexFunction.MutationServices<ConfectSchema>> =>\n RegisteredConvexFunction.mutationLayer(\n this.confectSchema,\n mutationCtx,\n ) as Layer.Layer<\n RegisteredConvexFunction.MutationServices<ConfectSchema>\n >;\n\n return returns === undefined\n ? Effect.promise(() =>\n this.testConvex.run((mutationCtx) =>\n Effect.runPromise(\n handler.pipe(\n Effect.asVoid,\n Effect.provide(makeMutationLayer(mutationCtx)),\n ),\n ),\n ),\n )\n : Effect.promise(() =>\n this.testConvex.run((mutationCtx) =>\n Effect.runPromise(\n handler.pipe(\n Effect.andThen(Schema.encode(returns)),\n Effect.provide(makeMutationLayer(mutationCtx)),\n ),\n ),\n ),\n ).pipe(Effect.andThen(Schema.decode(returns)));\n }) as TestConfectWithoutIdentity<ConfectSchema>[\"run\"];\n\n readonly fetch = <PathQueryFragment extends string>(\n pathQueryFragment: PathQueryFragment,\n init?: RequestInit,\n ) => Effect.promise(() => this.testConvex.fetch(pathQueryFragment, init));\n\n readonly finishInProgressScheduledFunctions = () =>\n Effect.promise(() => this.testConvex.finishInProgressScheduledFunctions());\n\n readonly finishAllScheduledFunctions = (advanceTimers: () => void) =>\n Effect.promise(() =>\n this.testConvex.finishAllScheduledFunctions(advanceTimers),\n );\n}\n\nclass TestConfectImpl<\n ConfectSchema extends DatabaseSchema.AnyWithProps,\n> implements TestConfect<ConfectSchema> {\n private readonly testConfectImplWithoutIdentity: TestConfectImplWithoutIdentity<ConfectSchema>;\n\n constructor(\n private confectSchema: ConfectSchema,\n private testConvex: TestConvexForDataModelAndIdentity<\n DataModel.ToConvex<DataModel.FromSchema<ConfectSchema>>\n >,\n ) {\n this.testConvex = testConvex;\n this.testConfectImplWithoutIdentity = new TestConfectImplWithoutIdentity(\n confectSchema,\n testConvex,\n );\n }\n\n readonly withIdentity = (userIdentity: Partial<UserIdentity>) =>\n new TestConfectImplWithoutIdentity(\n this.confectSchema,\n this.testConvex.withIdentity(userIdentity),\n );\n\n readonly query = <QueryRef extends Ref.AnyQuery>(\n queryRef: QueryRef,\n args: Ref.Args<QueryRef>,\n ) => this.testConfectImplWithoutIdentity.query(queryRef, args);\n\n readonly mutation = <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n args: Ref.Args<MutationRef>,\n ) => this.testConfectImplWithoutIdentity.mutation(mutationRef, args);\n\n readonly action = <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n args: Ref.Args<ActionRef>,\n ) => this.testConfectImplWithoutIdentity.action(actionRef, args);\n\n readonly run: TestConfect<ConfectSchema>[\"run\"] = ((\n handler: any,\n returns?: any,\n ) =>\n this.testConfectImplWithoutIdentity.run(\n handler,\n returns,\n )) as TestConfect<ConfectSchema>[\"run\"];\n\n readonly fetch = <PathQueryFragment extends string>(\n pathQueryFragment: PathQueryFragment,\n init?: RequestInit,\n ) => this.testConfectImplWithoutIdentity.fetch(pathQueryFragment, init);\n\n readonly finishInProgressScheduledFunctions = () =>\n this.testConfectImplWithoutIdentity.finishInProgressScheduledFunctions();\n\n readonly finishAllScheduledFunctions = (advanceTimers: () => void) =>\n this.testConfectImplWithoutIdentity.finishAllScheduledFunctions(\n advanceTimers,\n );\n}\n\nexport const layer =\n <DatabaseSchema_ extends DatabaseSchema.AnyWithProps>(\n databaseSchema: DatabaseSchema_,\n modules: Record<string, () => Promise<any>>,\n ) =>\n (): Layer.Layer<TestConfect<DatabaseSchema_>> =>\n Layer.sync(\n TestConfect<DatabaseSchema_>(),\n () =>\n new TestConfectImpl(\n databaseSchema,\n convexTest(\n databaseSchema.convexSchemaDefinition,\n modules,\n ) as unknown as TestConvexForDataModelAndIdentity<\n DataModel.ToConvex<DataModel.FromSchema<DatabaseSchema_>>\n >,\n ),\n );\n"],"mappings":";;;;;;;;;;;AA6DA,MAAa,oBAGX,QAAQ,WAAuC,4BAA4B;AAE7E,IAAM,iCAAN,MAEuD;CACrD,YACE,AAAQ,eACR,AAAQ,YAGR;EAJQ;EACA;;CAKV,AAAS,SACP,UACA,SAEA,IAAI,aAAa,UAAU,OAAO,mBAAmB,gBACnD,KAAK,WAAW,MAAM,mBAAmB,YAAY,CACtD;CAEH,AAAS,YACP,aACA,SAEA,IAAI,aAAa,aAAa,OAAO,mBAAmB,gBACtD,KAAK,WAAW,SAAS,mBAAmB,YAAY,CACzD;CAEH,AAAS,UACP,WACA,SAEA,IAAI,aAAa,WAAW,OAAO,mBAAmB,gBACpD,KAAK,WAAW,OAAO,mBAAmB,YAAY,CACvD;CAEH,AAAS,QAKP,SAKA,YACmE;EACnE,MAAM,qBACJ,gBAIA,yBAAyB,cACvB,KAAK,eACL,YACD;AAIH,SAAO,YAAY,SACf,OAAO,cACL,KAAK,WAAW,KAAK,gBACnB,OAAO,WACL,QAAQ,KACN,OAAO,QACP,OAAO,QAAQ,kBAAkB,YAAY,CAAC,CAC/C,CACF,CACF,CACF,GACD,OAAO,cACL,KAAK,WAAW,KAAK,gBACnB,OAAO,WACL,QAAQ,KACN,OAAO,QAAQ,OAAO,OAAO,QAAQ,CAAC,EACtC,OAAO,QAAQ,kBAAkB,YAAY,CAAC,CAC/C,CACF,CACF,CACF,CAAC,KAAK,OAAO,QAAQ,OAAO,OAAO,QAAQ,CAAC,CAAC;;CAGpD,AAAS,SACP,mBACA,SACG,OAAO,cAAc,KAAK,WAAW,MAAM,mBAAmB,KAAK,CAAC;CAEzE,AAAS,2CACP,OAAO,cAAc,KAAK,WAAW,oCAAoC,CAAC;CAE5E,AAAS,+BAA+B,kBACtC,OAAO,cACL,KAAK,WAAW,4BAA4B,cAAc,CAC3D;;AAGL,IAAM,kBAAN,MAEwC;CACtC,AAAiB;CAEjB,YACE,AAAQ,eACR,AAAQ,YAGR;EAJQ;EACA;AAIR,OAAK,aAAa;AAClB,OAAK,iCAAiC,IAAI,+BACxC,eACA,WACD;;CAGH,AAAS,gBAAgB,iBACvB,IAAI,+BACF,KAAK,eACL,KAAK,WAAW,aAAa,aAAa,CAC3C;CAEH,AAAS,SACP,UACA,SACG,KAAK,+BAA+B,MAAM,UAAU,KAAK;CAE9D,AAAS,YACP,aACA,SACG,KAAK,+BAA+B,SAAS,aAAa,KAAK;CAEpE,AAAS,UACP,WACA,SACG,KAAK,+BAA+B,OAAO,WAAW,KAAK;CAEhE,AAAS,QACP,SACA,YAEA,KAAK,+BAA+B,IAClC,SACA,QACD;CAEH,AAAS,SACP,mBACA,SACG,KAAK,+BAA+B,MAAM,mBAAmB,KAAK;CAEvE,AAAS,2CACP,KAAK,+BAA+B,oCAAoC;CAE1E,AAAS,+BAA+B,kBACtC,KAAK,+BAA+B,4BAClC,cACD;;AAGL,MAAa,SAET,gBACA,kBAGA,MAAM,KACJ,aAA8B,QAE5B,IAAI,gBACF,gBACA,WACE,eAAe,wBACf,QACD,CAGF,CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@confect/test",
3
- "version": "3.0.0",
3
+ "version": "5.0.0",
4
4
  "description": "Utilities for testing Confect apps without a live Convex backend",
5
5
  "repository": {
6
6
  "type": "git",
@@ -53,8 +53,8 @@
53
53
  "convex": "^1.30.0",
54
54
  "convex-test": "^0.0.38",
55
55
  "effect": "^3.19.16",
56
- "@confect/core": "3.0.0",
57
- "@confect/server": "3.0.0"
56
+ "@confect/core": "5.0.0",
57
+ "@confect/server": "5.0.0"
58
58
  },
59
59
  "engines": {
60
60
  "node": ">=22",
@@ -9,7 +9,7 @@ import { convexTest } from "convex-test";
9
9
  import type { GenericMutationCtx, UserIdentity } from "convex/server";
10
10
  import type { Value } from "convex/values";
11
11
  import type { ParseResult } from "effect";
12
- import { Context, Effect, Layer, Match, Schema } from "effect";
12
+ import { Context, Effect, Layer, Schema } from "effect";
13
13
 
14
14
  export type TestConfectWithoutIdentity<
15
15
  ConfectSchema extends DatabaseSchema.AnyWithProps,
@@ -78,82 +78,25 @@ class TestConfectImplWithoutIdentity<
78
78
  queryRef: QueryRef,
79
79
  args: Ref.Args<QueryRef>,
80
80
  ): Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError> =>
81
- Effect.gen(this, function* () {
82
- const querySpec = Ref.getFunctionSpec(queryRef);
83
- const queryName = Ref.getConvexFunctionName(queryRef);
84
-
85
- return yield* Match.value(querySpec.functionProvenance).pipe(
86
- Match.tag("Confect", (confect) =>
87
- Effect.gen(this, function* () {
88
- const encodedArgs = yield* Schema.encode(confect.args)(args);
89
- const encodedReturns = yield* Effect.promise(() =>
90
- this.testConvex.query(queryName as any, encodedArgs),
91
- );
92
- return yield* Schema.decode(confect.returns)(encodedReturns);
93
- }),
94
- ),
95
- Match.tag("Convex", () =>
96
- Effect.promise(() =>
97
- this.testConvex.query(queryName as any, args as any),
98
- ),
99
- ),
100
- Match.exhaustive,
101
- );
102
- });
81
+ Ref.runWithCodec(queryRef, args, (functionReference, encodedArgs) =>
82
+ this.testConvex.query(functionReference, encodedArgs),
83
+ );
103
84
 
104
85
  readonly mutation = <MutationRef extends Ref.AnyMutation>(
105
86
  mutationRef: MutationRef,
106
87
  args: Ref.Args<MutationRef>,
107
88
  ): Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError> =>
108
- Effect.gen(this, function* () {
109
- const mutationSpec = Ref.getFunctionSpec(mutationRef);
110
- const mutationName = Ref.getConvexFunctionName(mutationRef);
111
-
112
- return yield* Match.value(mutationSpec.functionProvenance).pipe(
113
- Match.tag("Confect", (confect) =>
114
- Effect.gen(this, function* () {
115
- const encodedArgs = yield* Schema.encode(confect.args)(args);
116
- const encodedReturns = yield* Effect.promise(() =>
117
- this.testConvex.mutation(mutationName as any, encodedArgs),
118
- );
119
- return yield* Schema.decode(confect.returns)(encodedReturns);
120
- }),
121
- ),
122
- Match.tag("Convex", () =>
123
- Effect.promise(() =>
124
- this.testConvex.mutation(mutationName as any, args as any),
125
- ),
126
- ),
127
- Match.exhaustive,
128
- );
129
- });
89
+ Ref.runWithCodec(mutationRef, args, (functionReference, encodedArgs) =>
90
+ this.testConvex.mutation(functionReference, encodedArgs),
91
+ );
130
92
 
131
93
  readonly action = <ActionRef extends Ref.AnyAction>(
132
94
  actionRef: ActionRef,
133
95
  args: Ref.Args<ActionRef>,
134
96
  ): Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError> =>
135
- Effect.gen(this, function* () {
136
- const actionSpec = Ref.getFunctionSpec(actionRef);
137
- const actionName = Ref.getConvexFunctionName(actionRef);
138
-
139
- return yield* Match.value(actionSpec.functionProvenance).pipe(
140
- Match.tag("Confect", (confect) =>
141
- Effect.gen(this, function* () {
142
- const encodedArgs = yield* Schema.encode(confect.args)(args);
143
- const encodedReturns = yield* Effect.promise(() =>
144
- this.testConvex.action(actionName as any, encodedArgs),
145
- );
146
- return yield* Schema.decode(confect.returns)(encodedReturns);
147
- }),
148
- ),
149
- Match.tag("Convex", () =>
150
- Effect.promise(() =>
151
- this.testConvex.action(actionName as any, args as any),
152
- ),
153
- ),
154
- Match.exhaustive,
155
- );
156
- });
97
+ Ref.runWithCodec(actionRef, args, (functionReference, encodedArgs) =>
98
+ this.testConvex.action(functionReference, encodedArgs),
99
+ );
157
100
 
158
101
  readonly run: TestConfectWithoutIdentity<ConfectSchema>["run"] = (<
159
102
  A,