@confect/test 5.0.0 → 6.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,19 @@
1
1
  # @confect/test
2
2
 
3
+ ## 6.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - df95ce7: Add `Ref.OptionalArgs` type utility to `@confect/core` for conditionally optional function args. `QueryRunner`, `MutationRunner`, and `ActionRunner` now accept optional args for no-arg Confect functions. `useQuery`, `useMutation`, and `useAction` now accept optional args for no-arg Confect functions. `TestConfect` `query`/`mutation`/`action` helpers now accept optional args for no-arg Confect functions.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [df95ce7]
12
+ - Updated dependencies [a8083e8]
13
+ - Updated dependencies [228589b]
14
+ - @confect/core@6.0.0
15
+ - @confect/server@6.0.0
16
+
3
17
  ## 5.0.0
4
18
 
5
19
  ### Patch Changes
@@ -9,9 +9,9 @@ declare namespace TestConfect_d_exports {
9
9
  export { TestConfect, TestConfectWithoutIdentity, layer };
10
10
  }
11
11
  type TestConfectWithoutIdentity<ConfectSchema extends DatabaseSchema.AnyWithProps> = {
12
- query: <QueryRef extends Ref.AnyQuery>(queryRef: QueryRef, args: Ref.Args<QueryRef>) => Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError>;
13
- mutation: <MutationRef extends Ref.AnyMutation>(mutationRef: MutationRef, args: Ref.Args<MutationRef>) => Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError>;
14
- action: <ActionRef extends Ref.AnyAction>(actionRef: ActionRef, args: Ref.Args<ActionRef>) => Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError>;
12
+ query: <QueryRef extends Ref.AnyQuery>(queryRef: QueryRef, ...args: Ref.OptionalArgs<QueryRef>) => Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError>;
13
+ mutation: <MutationRef extends Ref.AnyMutation>(mutationRef: MutationRef, ...args: Ref.OptionalArgs<MutationRef>) => Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError>;
14
+ action: <ActionRef extends Ref.AnyAction>(actionRef: ActionRef, ...args: Ref.OptionalArgs<ActionRef>) => Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError>;
15
15
  run: {
16
16
  <E>(handler: Effect.Effect<void, E, RegisteredConvexFunction.MutationServices<ConfectSchema>>): Effect.Effect<void>;
17
17
  <A, B extends Value, E>(handler: Effect.Effect<A, E, RegisteredConvexFunction.MutationServices<ConfectSchema>>, returns: Schema.Schema<A, B>): Effect.Effect<A, ParseResult.ParseError>;
@@ -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,cAiKtC,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,KACP,IAAA,EAAM,GAAA,CAAI,YAAA,CAAa,QAAA,MACvB,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,QAAA,GAAW,WAAA,CAAY,UAAA;EACtD,QAAA,uBAA+B,GAAA,CAAI,WAAA,EACjC,WAAA,EAAa,WAAA,KACV,IAAA,EAAM,GAAA,CAAI,YAAA,CAAa,WAAA,MACvB,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,WAAA,GAAc,WAAA,CAAY,UAAA;EACzD,MAAA,qBAA2B,GAAA,CAAI,SAAA,EAC7B,SAAA,EAAW,SAAA,KACR,IAAA,EAAM,GAAA,CAAI,YAAA,CAAa,SAAA,MACvB,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,cA0KtC,KAAA,2BACc,cAAA,CAAe,YAAA,EACtC,cAAA,EAAgB,eAAA,EAChB,OAAA,EAAS,MAAA,eAAqB,OAAA,iBAE5B,KAAA,CAAM,KAAA,CAAM,WAAA,CAAY,eAAA"}
@@ -15,9 +15,9 @@ var TestConfectImplWithoutIdentity = class {
15
15
  this.confectSchema = confectSchema;
16
16
  this.testConvex = testConvex;
17
17
  }
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));
18
+ query = (queryRef, ...args) => Ref.runWithCodec(queryRef, args[0] ?? {}, (functionReference, encodedArgs) => this.testConvex.query(functionReference, encodedArgs));
19
+ mutation = (mutationRef, ...args) => Ref.runWithCodec(mutationRef, args[0] ?? {}, (functionReference, encodedArgs) => this.testConvex.mutation(functionReference, encodedArgs));
20
+ action = (actionRef, ...args) => Ref.runWithCodec(actionRef, args[0] ?? {}, (functionReference, encodedArgs) => this.testConvex.action(functionReference, encodedArgs));
21
21
  run = ((handler, returns) => {
22
22
  const makeMutationLayer = (mutationCtx) => RegisteredConvexFunction.mutationLayer(this.confectSchema, mutationCtx);
23
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)));
@@ -35,9 +35,9 @@ var TestConfectImpl = class {
35
35
  this.testConfectImplWithoutIdentity = new TestConfectImplWithoutIdentity(confectSchema, testConvex);
36
36
  }
37
37
  withIdentity = (userIdentity) => new TestConfectImplWithoutIdentity(this.confectSchema, this.testConvex.withIdentity(userIdentity));
38
- query = (queryRef, args) => this.testConfectImplWithoutIdentity.query(queryRef, args);
39
- mutation = (mutationRef, args) => this.testConfectImplWithoutIdentity.mutation(mutationRef, args);
40
- action = (actionRef, args) => this.testConfectImplWithoutIdentity.action(actionRef, args);
38
+ query = (queryRef, ...args) => this.testConfectImplWithoutIdentity.query(queryRef, ...args);
39
+ mutation = (mutationRef, ...args) => this.testConfectImplWithoutIdentity.mutation(mutationRef, ...args);
40
+ action = (actionRef, ...args) => this.testConfectImplWithoutIdentity.action(actionRef, ...args);
41
41
  run = ((handler, returns) => this.testConfectImplWithoutIdentity.run(handler, returns));
42
42
  fetch = (pathQueryFragment, init) => this.testConfectImplWithoutIdentity.fetch(pathQueryFragment, init);
43
43
  finishInProgressScheduledFunctions = () => this.testConfectImplWithoutIdentity.finishInProgressScheduledFunctions();
@@ -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, 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"}
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.OptionalArgs<QueryRef>\n ) => Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError>;\n mutation: <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n ...args: Ref.OptionalArgs<MutationRef>\n ) => Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError>;\n action: <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n ...args: Ref.OptionalArgs<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.OptionalArgs<QueryRef>\n ): Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError> =>\n Ref.runWithCodec(\n queryRef,\n (args[0] ?? {}) as Ref.Args<QueryRef>,\n (functionReference, encodedArgs) =>\n this.testConvex.query(functionReference, encodedArgs),\n );\n\n readonly mutation = <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n ...args: Ref.OptionalArgs<MutationRef>\n ): Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError> =>\n Ref.runWithCodec(\n mutationRef,\n (args[0] ?? {}) as Ref.Args<MutationRef>,\n (functionReference, encodedArgs) =>\n this.testConvex.mutation(functionReference, encodedArgs),\n );\n\n readonly action = <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n ...args: Ref.OptionalArgs<ActionRef>\n ): Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError> =>\n Ref.runWithCodec(\n actionRef,\n (args[0] ?? {}) as Ref.Args<ActionRef>,\n (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.OptionalArgs<QueryRef>\n ) => this.testConfectImplWithoutIdentity.query(queryRef, ...args);\n\n readonly mutation = <MutationRef extends Ref.AnyMutation>(\n mutationRef: MutationRef,\n ...args: Ref.OptionalArgs<MutationRef>\n ) => this.testConfectImplWithoutIdentity.mutation(mutationRef, ...args);\n\n readonly action = <ActionRef extends Ref.AnyAction>(\n actionRef: ActionRef,\n ...args: Ref.OptionalArgs<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,GAAG,SAEH,IAAI,aACF,UACC,KAAK,MAAM,EAAE,GACb,mBAAmB,gBAClB,KAAK,WAAW,MAAM,mBAAmB,YAAY,CACxD;CAEH,AAAS,YACP,aACA,GAAG,SAEH,IAAI,aACF,aACC,KAAK,MAAM,EAAE,GACb,mBAAmB,gBAClB,KAAK,WAAW,SAAS,mBAAmB,YAAY,CAC3D;CAEH,AAAS,UACP,WACA,GAAG,SAEH,IAAI,aACF,WACC,KAAK,MAAM,EAAE,GACb,mBAAmB,gBAClB,KAAK,WAAW,OAAO,mBAAmB,YAAY,CACzD;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,GAAG,SACA,KAAK,+BAA+B,MAAM,UAAU,GAAG,KAAK;CAEjE,AAAS,YACP,aACA,GAAG,SACA,KAAK,+BAA+B,SAAS,aAAa,GAAG,KAAK;CAEvE,AAAS,UACP,WACA,GAAG,SACA,KAAK,+BAA+B,OAAO,WAAW,GAAG,KAAK;CAEnE,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": "5.0.0",
3
+ "version": "6.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": "5.0.0",
57
- "@confect/server": "5.0.0"
56
+ "@confect/core": "6.0.0",
57
+ "@confect/server": "6.0.0"
58
58
  },
59
59
  "engines": {
60
60
  "node": ">=22",
@@ -16,15 +16,15 @@ export type TestConfectWithoutIdentity<
16
16
  > = {
17
17
  query: <QueryRef extends Ref.AnyQuery>(
18
18
  queryRef: QueryRef,
19
- args: Ref.Args<QueryRef>,
19
+ ...args: Ref.OptionalArgs<QueryRef>
20
20
  ) => Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError>;
21
21
  mutation: <MutationRef extends Ref.AnyMutation>(
22
22
  mutationRef: MutationRef,
23
- args: Ref.Args<MutationRef>,
23
+ ...args: Ref.OptionalArgs<MutationRef>
24
24
  ) => Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError>;
25
25
  action: <ActionRef extends Ref.AnyAction>(
26
26
  actionRef: ActionRef,
27
- args: Ref.Args<ActionRef>,
27
+ ...args: Ref.OptionalArgs<ActionRef>
28
28
  ) => Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError>;
29
29
  run: {
30
30
  <E>(
@@ -76,26 +76,35 @@ class TestConfectImplWithoutIdentity<
76
76
 
77
77
  readonly query = <QueryRef extends Ref.AnyQuery>(
78
78
  queryRef: QueryRef,
79
- args: Ref.Args<QueryRef>,
79
+ ...args: Ref.OptionalArgs<QueryRef>
80
80
  ): Effect.Effect<Ref.Returns<QueryRef>, ParseResult.ParseError> =>
81
- Ref.runWithCodec(queryRef, args, (functionReference, encodedArgs) =>
82
- this.testConvex.query(functionReference, encodedArgs),
81
+ Ref.runWithCodec(
82
+ queryRef,
83
+ (args[0] ?? {}) as Ref.Args<QueryRef>,
84
+ (functionReference, encodedArgs) =>
85
+ this.testConvex.query(functionReference, encodedArgs),
83
86
  );
84
87
 
85
88
  readonly mutation = <MutationRef extends Ref.AnyMutation>(
86
89
  mutationRef: MutationRef,
87
- args: Ref.Args<MutationRef>,
90
+ ...args: Ref.OptionalArgs<MutationRef>
88
91
  ): Effect.Effect<Ref.Returns<MutationRef>, ParseResult.ParseError> =>
89
- Ref.runWithCodec(mutationRef, args, (functionReference, encodedArgs) =>
90
- this.testConvex.mutation(functionReference, encodedArgs),
92
+ Ref.runWithCodec(
93
+ mutationRef,
94
+ (args[0] ?? {}) as Ref.Args<MutationRef>,
95
+ (functionReference, encodedArgs) =>
96
+ this.testConvex.mutation(functionReference, encodedArgs),
91
97
  );
92
98
 
93
99
  readonly action = <ActionRef extends Ref.AnyAction>(
94
100
  actionRef: ActionRef,
95
- args: Ref.Args<ActionRef>,
101
+ ...args: Ref.OptionalArgs<ActionRef>
96
102
  ): Effect.Effect<Ref.Returns<ActionRef>, ParseResult.ParseError> =>
97
- Ref.runWithCodec(actionRef, args, (functionReference, encodedArgs) =>
98
- this.testConvex.action(functionReference, encodedArgs),
103
+ Ref.runWithCodec(
104
+ actionRef,
105
+ (args[0] ?? {}) as Ref.Args<ActionRef>,
106
+ (functionReference, encodedArgs) =>
107
+ this.testConvex.action(functionReference, encodedArgs),
99
108
  );
100
109
 
101
110
  readonly run: TestConfectWithoutIdentity<ConfectSchema>["run"] = (<
@@ -185,18 +194,18 @@ class TestConfectImpl<
185
194
 
186
195
  readonly query = <QueryRef extends Ref.AnyQuery>(
187
196
  queryRef: QueryRef,
188
- args: Ref.Args<QueryRef>,
189
- ) => this.testConfectImplWithoutIdentity.query(queryRef, args);
197
+ ...args: Ref.OptionalArgs<QueryRef>
198
+ ) => this.testConfectImplWithoutIdentity.query(queryRef, ...args);
190
199
 
191
200
  readonly mutation = <MutationRef extends Ref.AnyMutation>(
192
201
  mutationRef: MutationRef,
193
- args: Ref.Args<MutationRef>,
194
- ) => this.testConfectImplWithoutIdentity.mutation(mutationRef, args);
202
+ ...args: Ref.OptionalArgs<MutationRef>
203
+ ) => this.testConfectImplWithoutIdentity.mutation(mutationRef, ...args);
195
204
 
196
205
  readonly action = <ActionRef extends Ref.AnyAction>(
197
206
  actionRef: ActionRef,
198
- args: Ref.Args<ActionRef>,
199
- ) => this.testConfectImplWithoutIdentity.action(actionRef, args);
207
+ ...args: Ref.OptionalArgs<ActionRef>
208
+ ) => this.testConfectImplWithoutIdentity.action(actionRef, ...args);
200
209
 
201
210
  readonly run: TestConfect<ConfectSchema>["run"] = ((
202
211
  handler: any,