fluent-convex 0.7.2 → 0.7.4

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.
@@ -1,27 +1,18 @@
1
1
  import type { GenericDataModel } from "convex/server";
2
- import { InferredArgs } from "./types";
3
- import { InferHandlerReturn } from "./types";
4
2
  import { ConvexBuilderDef } from "./types";
5
- import { CallableBuilder } from "./types";
6
- import { ConvexBuilderWithHandler } from "./ConvexBuilderWithHandler";
3
+ import { ConvexBuilderWithFunctionKind } from "./ConvexBuilderWithFunctionKind";
7
4
  import type { ConvexMiddleware } from "./middleware";
8
- import type { FunctionType, Context, EmptyObject, ConvexArgsValidator, ConvexReturnsValidator, QueryCtx, MutationCtx, ActionCtx } from "./types";
9
- import { type ValidatorInput, type ToConvexArgsValidator, type ReturnsValidatorInput, type ToConvexReturnsValidator } from "./zod_support";
10
- export declare class ConvexBuilder<TDataModel extends GenericDataModel = GenericDataModel, TFunctionType extends FunctionType | undefined = undefined, TInitialContext extends Context = EmptyObject, TCurrentContext extends Context = EmptyObject, TArgsValidator extends ConvexArgsValidator | undefined = undefined, TReturnsValidator extends ConvexReturnsValidator | undefined = undefined> {
11
- protected def: ConvexBuilderDef<TFunctionType, TArgsValidator, TReturnsValidator>;
12
- constructor(def: ConvexBuilderDef<TFunctionType, TArgsValidator, TReturnsValidator>);
13
- query(this: ConvexBuilder<TDataModel, undefined, TInitialContext, TCurrentContext, TArgsValidator, TReturnsValidator>): ConvexBuilder<TDataModel, "query", QueryCtx<TDataModel>, QueryCtx<TDataModel>>;
14
- mutation(this: ConvexBuilder<TDataModel, undefined, TInitialContext, TCurrentContext, TArgsValidator, TReturnsValidator>): ConvexBuilder<TDataModel, "mutation", MutationCtx<TDataModel>, MutationCtx<TDataModel>>;
15
- action(this: ConvexBuilder<TDataModel, undefined, TInitialContext, TCurrentContext, TArgsValidator, TReturnsValidator>): ConvexBuilder<TDataModel, "action", ActionCtx<TDataModel>, ActionCtx<TDataModel>>;
16
- $context<U extends Context>(): ConvexBuilder<TDataModel, TFunctionType, U & EmptyObject, U, TArgsValidator, TReturnsValidator>;
17
- middleware<UOutContext extends Context>(middleware: ConvexMiddleware<TInitialContext, UOutContext>): ConvexMiddleware<TInitialContext, UOutContext>;
5
+ import type { QueryCtx, MutationCtx, ActionCtx, Context, EmptyObject } from "./types";
6
+ export declare class ConvexBuilder<TDataModel extends GenericDataModel = GenericDataModel> {
7
+ private def;
8
+ constructor(def: ConvexBuilderDef<undefined, undefined, undefined, "public">);
9
+ query(): ConvexBuilderWithFunctionKind<TDataModel, "query", QueryCtx<TDataModel>, QueryCtx<TDataModel>>;
10
+ mutation(): ConvexBuilderWithFunctionKind<TDataModel, "mutation", MutationCtx<TDataModel>, MutationCtx<TDataModel>>;
11
+ action(): ConvexBuilderWithFunctionKind<TDataModel, "action", ActionCtx<TDataModel>, ActionCtx<TDataModel>>;
12
+ $context<U extends Context>(): {
13
+ middleware<UOutContext extends Context>(middleware: ConvexMiddleware<U, UOutContext>): ConvexMiddleware<U, UOutContext>;
14
+ };
15
+ middleware<UOutContext extends Context>(middleware: ConvexMiddleware<EmptyObject, UOutContext>): ConvexMiddleware<EmptyObject, UOutContext>;
18
16
  middleware<UInContext extends Context, UOutContext extends Context>(middleware: ConvexMiddleware<UInContext, UOutContext>): ConvexMiddleware<UInContext, UOutContext>;
19
- use<UOutContext extends Context>(this: ConvexBuilder<TDataModel, FunctionType, TInitialContext, TCurrentContext, TArgsValidator, TReturnsValidator>, middleware: ConvexMiddleware<TCurrentContext, UOutContext>): ConvexBuilder<TDataModel, TFunctionType, TInitialContext, TCurrentContext & UOutContext, TArgsValidator, TReturnsValidator>;
20
- input<UInput extends ValidatorInput>(this: ConvexBuilder<TDataModel, FunctionType, TInitialContext, TCurrentContext, TArgsValidator, TReturnsValidator>, validator: UInput): ConvexBuilder<TDataModel, TFunctionType, TInitialContext, TCurrentContext, ToConvexArgsValidator<UInput>, TReturnsValidator>;
21
- returns<UReturns extends ReturnsValidatorInput>(this: ConvexBuilder<TDataModel, FunctionType, TInitialContext, TCurrentContext, TArgsValidator, TReturnsValidator>, validator: UReturns): ConvexBuilder<TDataModel, TFunctionType, TInitialContext, TCurrentContext, TArgsValidator, ToConvexReturnsValidator<UReturns>>;
22
- handler<TReturn extends InferHandlerReturn<TReturnsValidator, any> = InferHandlerReturn<TReturnsValidator, any>>(this: ConvexBuilder<TDataModel, FunctionType, TInitialContext, TCurrentContext, TArgsValidator, TReturnsValidator>, handlerFn: (options: {
23
- context: TCurrentContext;
24
- input: InferredArgs<TArgsValidator>;
25
- }) => Promise<TReturn>): ConvexBuilderWithHandler<TDataModel, TFunctionType & FunctionType, TCurrentContext, TArgsValidator, TReturnsValidator, InferHandlerReturn<TReturnsValidator, TReturn>> & CallableBuilder<TCurrentContext, TArgsValidator, InferHandlerReturn<TReturnsValidator, TReturn>>;
26
17
  }
27
18
  //# sourceMappingURL=ConvexBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexBuilder.d.ts","sourceRoot":"","sources":["../src/ConvexBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConvexBuilder.d.ts","sourceRoot":"","sources":["../src/ConvexBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,OAAO,EACP,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,qBAAa,aAAa,CACxB,UAAU,SAAS,gBAAgB,GAAG,gBAAgB;IAEtD,OAAO,CAAC,GAAG,CAA8D;gBAGvE,GAAG,EAAE,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;IAKlE,KAAK,IAAI,6BAA6B,CACpC,UAAU,EACV,OAAO,EACP,QAAQ,CAAC,UAAU,CAAC,EACpB,QAAQ,CAAC,UAAU,CAAC,CACrB;IAYD,QAAQ,IAAI,6BAA6B,CACvC,UAAU,EACV,UAAU,EACV,WAAW,CAAC,UAAU,CAAC,EACvB,WAAW,CAAC,UAAU,CAAC,CACxB;IAYD,MAAM,IAAI,6BAA6B,CACrC,UAAU,EACV,QAAQ,EACR,SAAS,CAAC,UAAU,CAAC,EACrB,SAAS,CAAC,UAAU,CAAC,CACtB;IAYD,QAAQ,CAAC,CAAC,SAAS,OAAO,KAAK;QAC7B,UAAU,CAAC,WAAW,SAAS,OAAO,EACpC,UAAU,EAAE,gBAAgB,CAAC,CAAC,EAAE,WAAW,CAAC,GAC3C,gBAAgB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;KACrC;IAWD,UAAU,CAAC,WAAW,SAAS,OAAO,EACpC,UAAU,EAAE,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,GACrD,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;IAC7C,UAAU,CAAC,UAAU,SAAS,OAAO,EAAE,WAAW,SAAS,OAAO,EAChE,UAAU,EAAE,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,GACpD,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC;CAM7C"}
@@ -1,71 +1,37 @@
1
- import { ConvexBuilderWithHandler } from "./ConvexBuilderWithHandler";
2
- import { isZodSchema, toConvexValidator, } from "./zod_support";
1
+ import { ConvexBuilderWithFunctionKind } from "./ConvexBuilderWithFunctionKind";
3
2
  export class ConvexBuilder {
4
3
  def;
5
4
  constructor(def) {
6
5
  this.def = def;
7
6
  }
8
7
  query() {
9
- return new ConvexBuilder({
8
+ return new ConvexBuilderWithFunctionKind({
10
9
  ...this.def,
11
10
  functionType: "query",
12
11
  });
13
12
  }
14
13
  mutation() {
15
- return new ConvexBuilder({
14
+ return new ConvexBuilderWithFunctionKind({
16
15
  ...this.def,
17
16
  functionType: "mutation",
18
17
  });
19
18
  }
20
19
  action() {
21
- return new ConvexBuilder({
20
+ return new ConvexBuilderWithFunctionKind({
22
21
  ...this.def,
23
22
  functionType: "action",
24
23
  });
25
24
  }
26
25
  $context() {
27
- return new ConvexBuilder({
28
- ...this.def,
29
- middlewares: [],
30
- });
26
+ // Return an object that allows middleware creation with a specific context type
27
+ return {
28
+ middleware(middleware) {
29
+ return middleware;
30
+ },
31
+ };
31
32
  }
32
33
  middleware(middleware) {
33
34
  return middleware;
34
35
  }
35
- use(middleware) {
36
- return new ConvexBuilder({
37
- ...this.def,
38
- middlewares: [...this.def.middlewares, middleware],
39
- });
40
- }
41
- input(validator) {
42
- const convexValidator = (isZodSchema(validator) ? toConvexValidator(validator) : validator);
43
- return new ConvexBuilder({
44
- ...this.def,
45
- argsValidator: convexValidator,
46
- });
47
- }
48
- returns(validator) {
49
- const convexValidator = (isZodSchema(validator) ? toConvexValidator(validator) : validator);
50
- return new ConvexBuilder({
51
- ...this.def,
52
- returnsValidator: convexValidator,
53
- });
54
- }
55
- handler(handlerFn) {
56
- if (this.def.handler) {
57
- throw new Error("Handler already defined. Only one handler can be set per function chain.");
58
- }
59
- const rawHandler = async (transformedCtx, baseArgs) => {
60
- return handlerFn({
61
- context: transformedCtx,
62
- input: baseArgs,
63
- });
64
- };
65
- return new ConvexBuilderWithHandler({
66
- ...this.def,
67
- handler: rawHandler,
68
- });
69
- }
70
36
  }
71
37
  //# sourceMappingURL=ConvexBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexBuilder.js","sourceRoot":"","sources":["../src/ConvexBuilder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAYtE,OAAO,EAGL,WAAW,EACX,iBAAiB,GAGlB,MAAM,eAAe,CAAC;AAEvB,MAAM,OAAO,aAAa;IAQd,GAAG,CAIX;IAEF,YACE,GAAuE;QAEvE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK;QAeH,OAAO,IAAI,aAAa,CAAC;YACvB,GAAG,IAAI,CAAC,GAAG;YACX,YAAY,EAAE,OAAO;SACtB,CAAQ,CAAC;IACZ,CAAC;IAED,QAAQ;QAeN,OAAO,IAAI,aAAa,CAAC;YACvB,GAAG,IAAI,CAAC,GAAG;YACX,YAAY,EAAE,UAAU;SACzB,CAAQ,CAAC;IACZ,CAAC;IAED,MAAM;QAeJ,OAAO,IAAI,aAAa,CAAC;YACvB,GAAG,IAAI,CAAC,GAAG;YACX,YAAY,EAAE,QAAQ;SACvB,CAAQ,CAAC;IACZ,CAAC;IAED,QAAQ;QAQN,OAAO,IAAI,aAAa,CAAC;YACvB,GAAG,IAAI,CAAC,GAAG;YACX,WAAW,EAAE,EAAE;SAChB,CAAQ,CAAC;IACZ,CAAC;IAQD,UAAU,CACR,UAAqD;QAErD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,GAAG,CASD,UAA0D;QAS1D,OAAO,IAAI,aAAa,CAAC;YACvB,GAAG,IAAI,CAAC,GAAG;YACX,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAiC,CAAC;SAC1E,CAAQ,CAAC;IACZ,CAAC;IAED,KAAK,CASH,SAAiB;QASjB,MAAM,eAAe,GAAG,CACtB,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CACjC,CAAC;QAEnC,OAAO,IAAI,aAAa,CAAC;YACvB,GAAG,IAAI,CAAC,GAAG;YACX,aAAa,EAAE,eAAe;SAC/B,CAAQ,CAAC;IACZ,CAAC;IAED,OAAO,CASL,SAAmB;QASnB,MAAM,eAAe,GAAG,CACtB,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAC5B,CAAC;QAExC,OAAO,IAAI,aAAa,CAAC;YACvB,GAAG,IAAI,CAAC,GAAG;YACX,gBAAgB,EAAE,eAAe;SAClC,CAAQ,CAAC;IACZ,CAAC;IAED,OAAO,CAcL,SAGsB;QActB,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,EACtB,cAAuB,EACvB,QAAsC,EACtC,EAAE;YACF,OAAO,SAAS,CAAC;gBACf,OAAO,EAAE,cAAiC;gBAC1C,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;QACL,CAAC,CAAC;QAIF,OAAO,IAAI,wBAAwB,CAOjC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,OAAO,EAAE,UAAiB;SACpB,CAAQ,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"ConvexBuilder.js","sourceRoot":"","sources":["../src/ConvexBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAUhF,MAAM,OAAO,aAAa;IAGhB,GAAG,CAA8D;IAEzE,YACE,GAAgE;QAEhE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK;QAMH,OAAO,IAAI,6BAA6B,CAKtC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,YAAY,EAAE,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QAMN,OAAO,IAAI,6BAA6B,CAKtC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,YAAY,EAAE,UAAU;SACzB,CAAC,CAAC;IACL,CAAC;IAED,MAAM;QAMJ,OAAO,IAAI,6BAA6B,CAKtC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,YAAY,EAAE,QAAQ;SACvB,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QAKN,gFAAgF;QAChF,OAAO;YACL,UAAU,CACR,UAA4C;gBAE5C,OAAO,UAAU,CAAC;YACpB,CAAC;SACF,CAAC;IACJ,CAAC;IAQD,UAAU,CACR,UAAqD;QAErD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import type { GenericDataModel } from "convex/server";
2
+ import { ConvexBuilderWithHandler } from "./ConvexBuilderWithHandler";
3
+ import { InferredArgs } from "./types";
4
+ import { ExpectedReturnType } from "./types";
5
+ import { ConvexBuilderDef } from "./types";
6
+ import { CallableBuilder } from "./types";
7
+ import type { ConvexMiddleware } from "./middleware";
8
+ import type { FunctionType, Context, EmptyObject, ConvexArgsValidator, ConvexReturnsValidator, Visibility } from "./types";
9
+ import { type ValidatorInput, type ToConvexArgsValidator, type ReturnsValidatorInput, type ToConvexReturnsValidator } from "./zod_support";
10
+ export declare class ConvexBuilderWithFunctionKind<TDataModel extends GenericDataModel = GenericDataModel, TFunctionType extends FunctionType = FunctionType, TInitialContext extends Context = EmptyObject, TCurrentContext extends Context = EmptyObject, TArgsValidator extends ConvexArgsValidator | undefined = undefined, TReturnsValidator extends ConvexReturnsValidator | undefined = undefined, TVisibility extends Visibility = "public", THasHandler extends boolean = false, THandlerReturn = any> {
11
+ protected def: ConvexBuilderDef<TFunctionType, TArgsValidator, TReturnsValidator, TVisibility>;
12
+ constructor(def: ConvexBuilderDef<TFunctionType, TArgsValidator, TReturnsValidator, TVisibility>);
13
+ $context<U extends Context>(): ConvexBuilderWithFunctionKind<TDataModel, TFunctionType, U & EmptyObject, U, TArgsValidator, TReturnsValidator, TVisibility, THasHandler, THandlerReturn>;
14
+ middleware<UOutContext extends Context>(middleware: ConvexMiddleware<TInitialContext, UOutContext>): ConvexMiddleware<TInitialContext, UOutContext>;
15
+ middleware<UInContext extends Context, UOutContext extends Context>(middleware: ConvexMiddleware<UInContext, UOutContext>): ConvexMiddleware<UInContext, UOutContext>;
16
+ use<UOutContext extends Context>(middleware: ConvexMiddleware<TCurrentContext, UOutContext>): ConvexBuilderWithFunctionKind<TDataModel, TFunctionType, TInitialContext, TCurrentContext & UOutContext, TArgsValidator, TReturnsValidator, TVisibility, THasHandler, THandlerReturn>;
17
+ input<UInput extends ValidatorInput>(validator: UInput): ConvexBuilderWithFunctionKind<TDataModel, TFunctionType, TInitialContext, TCurrentContext, ToConvexArgsValidator<UInput>, TReturnsValidator, TVisibility, THasHandler, THandlerReturn>;
18
+ returns<UReturns extends ReturnsValidatorInput>(validator: UReturns): ConvexBuilderWithFunctionKind<TDataModel, TFunctionType, TInitialContext, TCurrentContext, TArgsValidator, ToConvexReturnsValidator<UReturns>, TVisibility, THasHandler, THandlerReturn>;
19
+ handler<TReturn extends [TReturnsValidator] extends [ConvexReturnsValidator] ? ExpectedReturnType<TReturnsValidator> : any = [TReturnsValidator] extends [ConvexReturnsValidator] ? ExpectedReturnType<TReturnsValidator> : any>(handlerFn: (options: {
20
+ context: TCurrentContext;
21
+ input: InferredArgs<TArgsValidator>;
22
+ }) => Promise<TReturn>): ConvexBuilderWithHandler<TDataModel, TFunctionType, TInitialContext, TCurrentContext, TArgsValidator, TReturnsValidator, TVisibility, [
23
+ TReturnsValidator
24
+ ] extends [ConvexReturnsValidator] ? ExpectedReturnType<TReturnsValidator> : TReturn> & CallableBuilder<TCurrentContext, TArgsValidator, [
25
+ TReturnsValidator
26
+ ] extends [ConvexReturnsValidator] ? ExpectedReturnType<TReturnsValidator> : TReturn>;
27
+ }
28
+ //# sourceMappingURL=ConvexBuilderWithFunctionKind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConvexBuilderWithFunctionKind.d.ts","sourceRoot":"","sources":["../src/ConvexBuilderWithFunctionKind.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import { ConvexBuilderWithHandler } from "./ConvexBuilderWithHandler";
2
+ import { isZodSchema, toConvexValidator, } from "./zod_support";
3
+ export class ConvexBuilderWithFunctionKind {
4
+ def;
5
+ constructor(def) {
6
+ this.def = def;
7
+ }
8
+ $context() {
9
+ return new ConvexBuilderWithFunctionKind({
10
+ ...this.def,
11
+ middlewares: [],
12
+ });
13
+ }
14
+ middleware(middleware) {
15
+ return middleware;
16
+ }
17
+ use(middleware) {
18
+ return new ConvexBuilderWithFunctionKind({
19
+ ...this.def,
20
+ middlewares: [...this.def.middlewares, middleware],
21
+ });
22
+ }
23
+ input(validator) {
24
+ const convexValidator = isZodSchema(validator)
25
+ ? toConvexValidator(validator)
26
+ : validator;
27
+ return new ConvexBuilderWithFunctionKind({
28
+ ...this.def,
29
+ argsValidator: convexValidator,
30
+ });
31
+ }
32
+ returns(validator) {
33
+ const convexValidator = isZodSchema(validator)
34
+ ? toConvexValidator(validator)
35
+ : validator;
36
+ return new ConvexBuilderWithFunctionKind({
37
+ ...this.def,
38
+ returnsValidator: convexValidator,
39
+ });
40
+ }
41
+ handler(handlerFn) {
42
+ if (this.def.handler) {
43
+ throw new Error("Handler already defined. Only one handler can be set per function chain.");
44
+ }
45
+ // Store the raw handler function - it will be composed with all middlewares
46
+ // (including those added after .handler()) when .public() or .internal() is called
47
+ // The handler signature matches what Convex expects: (ctx, args) => Promise<return>
48
+ const rawHandler = async (transformedCtx, baseArgs) => {
49
+ return handlerFn({
50
+ context: transformedCtx,
51
+ input: baseArgs,
52
+ });
53
+ };
54
+ return new ConvexBuilderWithHandler({
55
+ ...this.def,
56
+ handler: rawHandler,
57
+ });
58
+ }
59
+ }
60
+ //# sourceMappingURL=ConvexBuilderWithFunctionKind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConvexBuilderWithFunctionKind.js","sourceRoot":"","sources":["../src/ConvexBuilderWithFunctionKind.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AActE,OAAO,EAGL,WAAW,EACX,iBAAiB,GAGlB,MAAM,eAAe,CAAC;AAEvB,MAAM,OAAO,6BAA6B;IAW9B,GAAG,CAKX;IAEF,YACE,GAKC;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,QAAQ;QAWN,OAAO,IAAI,6BAA6B,CAUtC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;IACL,CAAC;IAQD,UAAU,CACR,UAAqD;QAErD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,GAAG,CACD,UAA0D;QAY1D,OAAO,IAAI,6BAA6B,CAUtC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,UAAiC,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CACH,SAAiB;QAYjB,MAAM,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC;YAC5C,CAAC,CAAE,iBAAiB,CAAC,SAAS,CAAmC;YACjE,CAAC,CAAE,SAA2C,CAAC;QAEjD,OAAO,IAAI,6BAA6B,CAUtC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,aAAa,EAAE,eAAe;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CACL,SAAmB;QAYnB,MAAM,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC;YAC5C,CAAC,CAAE,iBAAiB,CAAC,SAAS,CAAwC;YACtE,CAAC,CAAE,SAAgD,CAAC;QAEtD,OAAO,IAAI,6BAA6B,CAUtC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,gBAAgB,EAAE,eAAe;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAOL,SAGsB;QAoBtB,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;QACJ,CAAC;QAED,4EAA4E;QAC5E,mFAAmF;QACnF,oFAAoF;QACpF,MAAM,UAAU,GAAG,KAAK,EACtB,cAAuB,EACvB,QAAsC,EACtC,EAAE;YACF,OAAO,SAAS,CAAC;gBACf,OAAO,EAAE,cAAiC;gBAC1C,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;QACL,CAAC,CAAC;QAMF,OAAO,IAAI,wBAAwB,CASjC;YACA,GAAG,IAAI,CAAC,GAAG;YACX,OAAO,EAAE,UAAiB;SAC3B,CAUiE,CAAC;IACrE,CAAC;CACF"}
@@ -1,14 +1,11 @@
1
1
  import { type GenericDataModel, type RegisteredQuery, type RegisteredMutation, type RegisteredAction } from "convex/server";
2
- import { InferredArgs } from "./types";
3
- import { ConvexBuilderDef } from "./types";
4
- import { CallableBuilder } from "./types";
5
2
  import type { ConvexMiddleware } from "./middleware";
6
- import type { FunctionType, Context, EmptyObject, ConvexArgsValidator, ConvexReturnsValidator } from "./types";
7
- export declare class ConvexBuilderWithHandler<TDataModel extends GenericDataModel = GenericDataModel, TFunctionType extends FunctionType = FunctionType, TCurrentContext extends Context = EmptyObject, TArgsValidator extends ConvexArgsValidator | undefined = undefined, TReturnsValidator extends ConvexReturnsValidator | undefined = undefined, THandlerReturn = any> {
3
+ import type { FunctionType, Context, EmptyObject, ConvexArgsValidator, ConvexReturnsValidator, Visibility, ConvexBuilderDef, InferredArgs, CallableBuilder } from "./types";
4
+ export declare class ConvexBuilderWithHandler<TDataModel extends GenericDataModel = GenericDataModel, TFunctionType extends FunctionType | undefined = undefined, TInitialContext extends Context = EmptyObject, TCurrentContext extends Context = EmptyObject, TArgsValidator extends ConvexArgsValidator | undefined = undefined, TReturnsValidator extends ConvexReturnsValidator | undefined = undefined, TVisibility extends Visibility = "public", THandlerReturn = any> {
8
5
  private def;
9
- constructor(def: ConvexBuilderDef<TFunctionType, TArgsValidator, TReturnsValidator>);
6
+ constructor(def: ConvexBuilderDef<TFunctionType, TArgsValidator, TReturnsValidator, TVisibility>);
10
7
  private _call;
11
- use<UOutContext extends Context>(middleware: ConvexMiddleware<TCurrentContext, UOutContext>): ConvexBuilderWithHandler<TDataModel, TFunctionType, TCurrentContext & UOutContext, TArgsValidator, TReturnsValidator, THandlerReturn> & CallableBuilder<TCurrentContext & UOutContext, TArgsValidator, THandlerReturn>;
8
+ use<UOutContext extends Context>(middleware: ConvexMiddleware<TCurrentContext, UOutContext>): ConvexBuilderWithHandler<TDataModel, TFunctionType, TInitialContext, TCurrentContext & UOutContext, TArgsValidator, TReturnsValidator, TVisibility, THandlerReturn> & CallableBuilder<TCurrentContext & UOutContext, TArgsValidator, THandlerReturn>;
12
9
  public(): TFunctionType extends "query" ? RegisteredQuery<"public", InferredArgs<TArgsValidator>, Promise<THandlerReturn>> : TFunctionType extends "mutation" ? RegisteredMutation<"public", InferredArgs<TArgsValidator>, Promise<THandlerReturn>> : TFunctionType extends "action" ? RegisteredAction<"public", InferredArgs<TArgsValidator>, Promise<THandlerReturn>> : never;
13
10
  internal(): TFunctionType extends "query" ? RegisteredQuery<"internal", InferredArgs<TArgsValidator>, Promise<THandlerReturn>> : TFunctionType extends "mutation" ? RegisteredMutation<"internal", InferredArgs<TArgsValidator>, Promise<THandlerReturn>> : TFunctionType extends "action" ? RegisteredAction<"internal", InferredArgs<TArgsValidator>, Promise<THandlerReturn>> : never;
14
11
  private _register;
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexBuilderWithHandler.d.ts","sourceRoot":"","sources":["../src/ConvexBuilderWithHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAOtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAuB,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAEjB,qBAAa,wBAAwB,CACnC,UAAU,SAAS,gBAAgB,GAAG,gBAAgB,EACtD,aAAa,SAAS,YAAY,GAAG,YAAY,EACjD,eAAe,SAAS,OAAO,GAAG,WAAW,EAC7C,cAAc,SAAS,mBAAmB,GAAG,SAAS,GAAG,SAAS,EAClE,iBAAiB,SAAS,sBAAsB,GAAG,SAAS,GAAG,SAAS,EACxE,cAAc,GAAG,GAAG;IAEpB,OAAO,CAAC,GAAG,CAIT;gBAGA,GAAG,EAAE,gBAAgB,CAAC,aAAa,EAAE,cAAc,EAAE,iBAAiB,CAAC;IAazE,OAAO,CAAC,KAAK;IAeb,GAAG,CAAC,WAAW,SAAS,OAAO,EAC7B,UAAU,EAAE,gBAAgB,CAAC,eAAe,EAAE,WAAW,CAAC,GACzD,wBAAwB,CACzB,UAAU,EACV,aAAa,EACb,eAAe,GAAG,WAAW,EAC7B,cAAc,EACd,iBAAiB,EACjB,cAAc,CACf,GACC,eAAe,CACb,eAAe,GAAG,WAAW,EAC7B,cAAc,EACd,cAAc,CACf;IAOH,MAAM,IAAI,aAAa,SAAS,OAAO,GACnC,eAAe,CACb,QAAQ,EACR,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,aAAa,SAAS,UAAU,GAC9B,kBAAkB,CAChB,QAAQ,EACR,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,aAAa,SAAS,QAAQ,GAC5B,gBAAgB,CACd,QAAQ,EACR,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,KAAK;IAIb,QAAQ,IAAI,aAAa,SAAS,OAAO,GACrC,eAAe,CACb,UAAU,EACV,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,aAAa,SAAS,UAAU,GAC9B,kBAAkB,CAChB,UAAU,EACV,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,aAAa,SAAS,QAAQ,GAC5B,gBAAgB,CACd,UAAU,EACV,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,KAAK;IAIb,OAAO,CAAC,SAAS;CAgDlB"}
1
+ {"version":3,"file":"ConvexBuilderWithHandler.d.ts","sourceRoot":"","sources":["../src/ConvexBuilderWithHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAOtB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAuB,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EAIhB,MAAM,SAAS,CAAC;AAEjB,qBAAa,wBAAwB,CACnC,UAAU,SAAS,gBAAgB,GAAG,gBAAgB,EACtD,aAAa,SAAS,YAAY,GAAG,SAAS,GAAG,SAAS,EAC1D,eAAe,SAAS,OAAO,GAAG,WAAW,EAC7C,eAAe,SAAS,OAAO,GAAG,WAAW,EAC7C,cAAc,SAAS,mBAAmB,GAAG,SAAS,GAAG,SAAS,EAClE,iBAAiB,SAAS,sBAAsB,GAAG,SAAS,GAAG,SAAS,EACxE,WAAW,SAAS,UAAU,GAAG,QAAQ,EACzC,cAAc,GAAG,GAAG;IAEpB,OAAO,CAAC,GAAG,CAKT;gBAGA,GAAG,EAAE,gBAAgB,CACnB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,WAAW,CACZ;IAaH,OAAO,CAAC,KAAK;IA0Bb,GAAG,CAAC,WAAW,SAAS,OAAO,EAC7B,UAAU,EAAE,gBAAgB,CAAC,eAAe,EAAE,WAAW,CAAC,GACzD,wBAAwB,CACzB,UAAU,EACV,aAAa,EACb,eAAe,EACf,eAAe,GAAG,WAAW,EAC7B,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,cAAc,CACf,GACC,eAAe,CACb,eAAe,GAAG,WAAW,EAC7B,cAAc,EACd,cAAc,CACf;IA8BH,MAAM,IAAI,aAAa,SAAS,OAAO,GACnC,eAAe,CACb,QAAQ,EACR,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,aAAa,SAAS,UAAU,GAC9B,kBAAkB,CAChB,QAAQ,EACR,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,aAAa,SAAS,QAAQ,GAC5B,gBAAgB,CACd,QAAQ,EACR,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,KAAK;IAIb,QAAQ,IAAI,aAAa,SAAS,OAAO,GACrC,eAAe,CACb,UAAU,EACV,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,aAAa,SAAS,UAAU,GAC9B,kBAAkB,CAChB,UAAU,EACV,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,aAAa,SAAS,QAAQ,GAC5B,gBAAgB,CACd,UAAU,EACV,YAAY,CAAC,cAAc,CAAC,EAC5B,OAAO,CAAC,cAAc,CAAC,CACxB,GACD,KAAK;IAIb,OAAO,CAAC,SAAS;CA2DlB"}
@@ -1,5 +1,4 @@
1
1
  import { queryGeneric, internalQueryGeneric, mutationGeneric, internalMutationGeneric, actionGeneric, internalActionGeneric, } from "convex/server";
2
- import { applyMiddlewares } from "./builder";
3
2
  export class ConvexBuilderWithHandler {
4
3
  def;
5
4
  constructor(def) {
@@ -18,8 +17,17 @@ export class ConvexBuilderWithHandler {
18
17
  throw new Error("Handler not set.");
19
18
  }
20
19
  return async (args) => {
21
- const transformedContext = await applyMiddlewares(context, middlewares);
22
- return handler(transformedContext, args);
20
+ let currentContext = context;
21
+ // Apply all middlewares in order
22
+ for (const middleware of middlewares) {
23
+ const result = await middleware({
24
+ context: currentContext,
25
+ next: async (options) => ({ context: options.context }),
26
+ });
27
+ currentContext = result.context;
28
+ }
29
+ // Call the raw handler with the transformed context
30
+ return handler(currentContext, args);
23
31
  };
24
32
  }
25
33
  use(middleware) {
@@ -44,8 +52,17 @@ export class ConvexBuilderWithHandler {
44
52
  }
45
53
  // Compose the handler with all middlewares (including those added after .handler())
46
54
  const composedHandler = async (baseCtx, baseArgs) => {
47
- const transformedContext = await applyMiddlewares(baseCtx, middlewares);
48
- return handler(transformedContext, baseArgs);
55
+ let currentContext = baseCtx;
56
+ // Apply all middlewares in order
57
+ for (const middleware of middlewares) {
58
+ const result = await middleware({
59
+ context: currentContext,
60
+ next: async (options) => ({ context: options.context }),
61
+ });
62
+ currentContext = result.context;
63
+ }
64
+ // Call the raw handler with the transformed context
65
+ return handler(currentContext, baseArgs);
49
66
  };
50
67
  const config = {
51
68
  args: argsValidator || {},
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexBuilderWithHandler.js","sourceRoot":"","sources":["../src/ConvexBuilderWithHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConvexBuilderWithHandler.js","sourceRoot":"","sources":["../src/ConvexBuilderWithHandler.ts"],"names":[],"mappings":"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"}
package/dist/builder.d.ts CHANGED
@@ -1,7 +1,4 @@
1
1
  import { type GenericDataModel } from "convex/server";
2
- import type { AnyConvexMiddleware } from "./middleware";
3
- import type { Context } from "./types";
4
2
  import { ConvexBuilder } from "./ConvexBuilder";
5
- export declare function applyMiddlewares(initialContext: Context, middlewares: readonly AnyConvexMiddleware[]): Promise<Context>;
6
3
  export declare function createBuilder<TDataModel extends GenericDataModel>(): ConvexBuilder<TDataModel>;
7
4
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,OAAO,EACvB,WAAW,EAAE,SAAS,mBAAmB,EAAE,GAC1C,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,wBAAgB,aAAa,CAC3B,UAAU,SAAS,gBAAgB,KAChC,aAAa,CAAC,UAAU,CAAC,CAI7B"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAgB,aAAa,CAC3B,UAAU,SAAS,gBAAgB,KAChC,aAAa,CAAC,UAAU,CAAC,CAK7B"}
package/dist/builder.js CHANGED
@@ -1,18 +1,8 @@
1
1
  import { ConvexBuilder } from "./ConvexBuilder";
2
- export async function applyMiddlewares(initialContext, middlewares) {
3
- let currentContext = initialContext;
4
- for (const middleware of middlewares) {
5
- const result = await middleware({
6
- context: currentContext,
7
- next: async (options) => ({ context: options.context }),
8
- });
9
- currentContext = result.context;
10
- }
11
- return currentContext;
12
- }
13
2
  export function createBuilder() {
14
3
  return new ConvexBuilder({
15
4
  middlewares: [],
5
+ visibility: "public",
16
6
  });
17
7
  }
18
8
  //# sourceMappingURL=builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,cAAuB,EACvB,WAA2C;IAE3C,IAAI,cAAc,GAAY,cAAc,CAAC;IAC7C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;SACxD,CAAC,CAAC;QACH,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,aAAa;IAG3B,OAAO,IAAI,aAAa,CAAa;QACnC,WAAW,EAAE,EAAE;KAChB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,UAAU,aAAa;IAG3B,OAAO,IAAI,aAAa,CAAa;QACnC,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,QAAQ;KACrB,CAAC,CAAC;AACL,CAAC"}
package/dist/types.d.ts CHANGED
@@ -30,14 +30,14 @@ export type Visibility = "public" | "internal";
30
30
  export type CallableBuilder<TCurrentContext extends Context, TArgsValidator extends ConvexArgsValidator | undefined, THandlerReturn> = {
31
31
  (context: TCurrentContext): (args: InferredArgs<TArgsValidator>) => Promise<THandlerReturn>;
32
32
  };
33
- export interface ConvexBuilderDef<TFunctionType extends FunctionType | undefined, TArgsValidator extends ConvexArgsValidator | undefined, TReturnsValidator extends ConvexReturnsValidator | undefined> {
33
+ export interface ConvexBuilderDef<TFunctionType extends FunctionType | undefined, TArgsValidator extends ConvexArgsValidator | undefined, TReturnsValidator extends ConvexReturnsValidator | undefined, TVisibility extends Visibility> {
34
34
  functionType?: TFunctionType;
35
35
  middlewares: readonly AnyConvexMiddleware[];
36
36
  argsValidator?: TArgsValidator;
37
37
  returnsValidator?: TReturnsValidator;
38
+ visibility: TVisibility;
38
39
  handler?: (context: Context, input: any) => Promise<any>;
39
40
  }
40
- export type InferHandlerReturn<TReturnsValidator extends ConvexReturnsValidator | undefined, TReturn> = [TReturnsValidator] extends [ConvexReturnsValidator] ? ExpectedReturnType<TReturnsValidator> : TReturn;
41
41
  export type ExpectedReturnType<TReturnsValidator extends ConvexReturnsValidator | undefined> = TReturnsValidator extends ConvexReturnsValidator ? InferReturns<TReturnsValidator> : any;
42
42
  export type InferredArgs<T extends ConvexArgsValidator | undefined> = T extends ConvexArgsValidator ? InferArgs<T> : EmptyObject;
43
43
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;AACxE,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEtD,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAEvE,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAE/C,MAAM,MAAM,mBAAmB,CAC7B,SAAS,SAAS,OAAO,EACzB,SAAS,SAAS,OAAO,IACvB,SAAS,SAAS,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI;KACrD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,GACzC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,UAAU,GACnC,CAAC,GACD,KAAK,GACP,KAAK;CACV,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI;KACrD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,GACzC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,UAAU,GACnC,KAAK,GACL,CAAC,GACH,KAAK;CACV,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI;KACrD,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,GAClD,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GAC/B,KAAK;CACV,CAAC;AAEF,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI;KACrD,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,mBAAmB,IACjD,CAAC,SAAS,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAE7E,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,sBAAsB,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;AAE9E,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE/C,MAAM,MAAM,QAAQ,CAAC,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,IACxE,eAAe,CAAC,SAAS,CAAC,CAAC;AAC7B,MAAM,MAAM,WAAW,CAAC,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,IAC3E,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAChC,MAAM,MAAM,SAAS,CAAC,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,IACzE,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAE9B,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,eAAe,CACzB,eAAe,SAAS,OAAO,EAC/B,cAAc,SAAS,mBAAmB,GAAG,SAAS,EACtD,cAAc,IACZ;IACF,CACE,OAAO,EAAE,eAAe,GACvB,CAAC,IAAI,EAAE,YAAY,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACpE,CAAC;AACF,MAAM,WAAW,gBAAgB,CAC/B,aAAa,SAAS,YAAY,GAAG,SAAS,EAC9C,cAAc,SAAS,mBAAmB,GAAG,SAAS,EACtD,iBAAiB,SAAS,sBAAsB,GAAG,SAAS,EAC5D,WAAW,SAAS,UAAU;IAE9B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC5C,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC1D;AACD,MAAM,MAAM,kBAAkB,CAC5B,iBAAiB,SAAS,sBAAsB,GAAG,SAAS,IAC1D,iBAAiB,SAAS,sBAAsB,GAChD,YAAY,CAAC,iBAAiB,CAAC,GAC/B,GAAG,CAAC;AACR,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,mBAAmB,GAAG,SAAS,IAChE,CAAC,SAAS,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluent-convex",
3
- "version": "0.7.2",
3
+ "version": "0.7.4",
4
4
  "description": "A fluent API builder for Convex functions with middleware support, inspired by oRPC",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,129 +1,95 @@
1
1
  import type { GenericDataModel } from "convex/server";
2
- import { InferredArgs } from "./types";
3
- import { InferHandlerReturn } from "./types";
4
2
  import { ConvexBuilderDef } from "./types";
5
- import { CallableBuilder } from "./types";
6
- import { ConvexBuilderWithHandler } from "./ConvexBuilderWithHandler";
7
- import type { ConvexMiddleware, AnyConvexMiddleware } from "./middleware";
3
+ import { ConvexBuilderWithFunctionKind } from "./ConvexBuilderWithFunctionKind";
4
+ import type { ConvexMiddleware } from "./middleware";
8
5
  import type {
9
- FunctionType,
10
- Context,
11
- EmptyObject,
12
- ConvexArgsValidator,
13
- ConvexReturnsValidator,
14
6
  QueryCtx,
15
7
  MutationCtx,
16
8
  ActionCtx,
9
+ Context,
10
+ EmptyObject,
17
11
  } from "./types";
18
- import {
19
- type ValidatorInput,
20
- type ToConvexArgsValidator,
21
- isZodSchema,
22
- toConvexValidator,
23
- type ReturnsValidatorInput,
24
- type ToConvexReturnsValidator,
25
- } from "./zod_support";
26
12
 
27
13
  export class ConvexBuilder<
28
14
  TDataModel extends GenericDataModel = GenericDataModel,
29
- TFunctionType extends FunctionType | undefined = undefined,
30
- TInitialContext extends Context = EmptyObject,
31
- TCurrentContext extends Context = EmptyObject,
32
- TArgsValidator extends ConvexArgsValidator | undefined = undefined,
33
- TReturnsValidator extends ConvexReturnsValidator | undefined = undefined,
34
15
  > {
35
- protected def: ConvexBuilderDef<
36
- TFunctionType,
37
- TArgsValidator,
38
- TReturnsValidator
39
- >;
16
+ private def: ConvexBuilderDef<undefined, undefined, undefined, "public">;
40
17
 
41
18
  constructor(
42
- def: ConvexBuilderDef<TFunctionType, TArgsValidator, TReturnsValidator>
19
+ def: ConvexBuilderDef<undefined, undefined, undefined, "public">
43
20
  ) {
44
21
  this.def = def;
45
22
  }
46
23
 
47
- query(
48
- this: ConvexBuilder<
49
- TDataModel,
50
- undefined,
51
- TInitialContext,
52
- TCurrentContext,
53
- TArgsValidator,
54
- TReturnsValidator
55
- >
56
- ): ConvexBuilder<
24
+ query(): ConvexBuilderWithFunctionKind<
57
25
  TDataModel,
58
26
  "query",
59
27
  QueryCtx<TDataModel>,
60
28
  QueryCtx<TDataModel>
61
29
  > {
62
- return new ConvexBuilder({
30
+ return new ConvexBuilderWithFunctionKind<
31
+ TDataModel,
32
+ "query",
33
+ QueryCtx<TDataModel>,
34
+ QueryCtx<TDataModel>
35
+ >({
63
36
  ...this.def,
64
37
  functionType: "query",
65
- }) as any;
38
+ });
66
39
  }
67
40
 
68
- mutation(
69
- this: ConvexBuilder<
70
- TDataModel,
71
- undefined,
72
- TInitialContext,
73
- TCurrentContext,
74
- TArgsValidator,
75
- TReturnsValidator
76
- >
77
- ): ConvexBuilder<
41
+ mutation(): ConvexBuilderWithFunctionKind<
78
42
  TDataModel,
79
43
  "mutation",
80
44
  MutationCtx<TDataModel>,
81
45
  MutationCtx<TDataModel>
82
46
  > {
83
- return new ConvexBuilder({
47
+ return new ConvexBuilderWithFunctionKind<
48
+ TDataModel,
49
+ "mutation",
50
+ MutationCtx<TDataModel>,
51
+ MutationCtx<TDataModel>
52
+ >({
84
53
  ...this.def,
85
54
  functionType: "mutation",
86
- }) as any;
55
+ });
87
56
  }
88
57
 
89
- action(
90
- this: ConvexBuilder<
91
- TDataModel,
92
- undefined,
93
- TInitialContext,
94
- TCurrentContext,
95
- TArgsValidator,
96
- TReturnsValidator
97
- >
98
- ): ConvexBuilder<
58
+ action(): ConvexBuilderWithFunctionKind<
99
59
  TDataModel,
100
60
  "action",
101
61
  ActionCtx<TDataModel>,
102
62
  ActionCtx<TDataModel>
103
63
  > {
104
- return new ConvexBuilder({
64
+ return new ConvexBuilderWithFunctionKind<
65
+ TDataModel,
66
+ "action",
67
+ ActionCtx<TDataModel>,
68
+ ActionCtx<TDataModel>
69
+ >({
105
70
  ...this.def,
106
71
  functionType: "action",
107
- }) as any;
72
+ });
108
73
  }
109
74
 
110
- $context<U extends Context>(): ConvexBuilder<
111
- TDataModel,
112
- TFunctionType,
113
- U & EmptyObject,
114
- U,
115
- TArgsValidator,
116
- TReturnsValidator
117
- > {
118
- return new ConvexBuilder({
119
- ...this.def,
120
- middlewares: [],
121
- }) as any;
75
+ $context<U extends Context>(): {
76
+ middleware<UOutContext extends Context>(
77
+ middleware: ConvexMiddleware<U, UOutContext>
78
+ ): ConvexMiddleware<U, UOutContext>;
79
+ } {
80
+ // Return an object that allows middleware creation with a specific context type
81
+ return {
82
+ middleware<UOutContext extends Context>(
83
+ middleware: ConvexMiddleware<U, UOutContext>
84
+ ): ConvexMiddleware<U, UOutContext> {
85
+ return middleware;
86
+ },
87
+ };
122
88
  }
123
89
 
124
90
  middleware<UOutContext extends Context>(
125
- middleware: ConvexMiddleware<TInitialContext, UOutContext>
126
- ): ConvexMiddleware<TInitialContext, UOutContext>;
91
+ middleware: ConvexMiddleware<EmptyObject, UOutContext>
92
+ ): ConvexMiddleware<EmptyObject, UOutContext>;
127
93
  middleware<UInContext extends Context, UOutContext extends Context>(
128
94
  middleware: ConvexMiddleware<UInContext, UOutContext>
129
95
  ): ConvexMiddleware<UInContext, UOutContext>;
@@ -132,146 +98,4 @@ export class ConvexBuilder<
132
98
  ): ConvexMiddleware<UInContext, UOutContext> {
133
99
  return middleware;
134
100
  }
135
-
136
- use<UOutContext extends Context>(
137
- this: ConvexBuilder<
138
- TDataModel,
139
- FunctionType,
140
- TInitialContext,
141
- TCurrentContext,
142
- TArgsValidator,
143
- TReturnsValidator
144
- >,
145
- middleware: ConvexMiddleware<TCurrentContext, UOutContext>
146
- ): ConvexBuilder<
147
- TDataModel,
148
- TFunctionType,
149
- TInitialContext,
150
- TCurrentContext & UOutContext,
151
- TArgsValidator,
152
- TReturnsValidator
153
- > {
154
- return new ConvexBuilder({
155
- ...this.def,
156
- middlewares: [...this.def.middlewares, middleware as AnyConvexMiddleware],
157
- }) as any;
158
- }
159
-
160
- input<UInput extends ValidatorInput>(
161
- this: ConvexBuilder<
162
- TDataModel,
163
- FunctionType,
164
- TInitialContext,
165
- TCurrentContext,
166
- TArgsValidator,
167
- TReturnsValidator
168
- >,
169
- validator: UInput
170
- ): ConvexBuilder<
171
- TDataModel,
172
- TFunctionType,
173
- TInitialContext,
174
- TCurrentContext,
175
- ToConvexArgsValidator<UInput>,
176
- TReturnsValidator
177
- > {
178
- const convexValidator = (
179
- isZodSchema(validator) ? toConvexValidator(validator) : validator
180
- ) as ToConvexArgsValidator<UInput>;
181
-
182
- return new ConvexBuilder({
183
- ...this.def,
184
- argsValidator: convexValidator,
185
- }) as any;
186
- }
187
-
188
- returns<UReturns extends ReturnsValidatorInput>(
189
- this: ConvexBuilder<
190
- TDataModel,
191
- FunctionType,
192
- TInitialContext,
193
- TCurrentContext,
194
- TArgsValidator,
195
- TReturnsValidator
196
- >,
197
- validator: UReturns
198
- ): ConvexBuilder<
199
- TDataModel,
200
- TFunctionType,
201
- TInitialContext,
202
- TCurrentContext,
203
- TArgsValidator,
204
- ToConvexReturnsValidator<UReturns>
205
- > {
206
- const convexValidator = (
207
- isZodSchema(validator) ? toConvexValidator(validator) : validator
208
- ) as ToConvexReturnsValidator<UReturns>;
209
-
210
- return new ConvexBuilder({
211
- ...this.def,
212
- returnsValidator: convexValidator,
213
- }) as any;
214
- }
215
-
216
- handler<
217
- TReturn extends InferHandlerReturn<
218
- TReturnsValidator,
219
- any
220
- > = InferHandlerReturn<TReturnsValidator, any>,
221
- >(
222
- this: ConvexBuilder<
223
- TDataModel,
224
- FunctionType,
225
- TInitialContext,
226
- TCurrentContext,
227
- TArgsValidator,
228
- TReturnsValidator
229
- >,
230
- handlerFn: (options: {
231
- context: TCurrentContext;
232
- input: InferredArgs<TArgsValidator>;
233
- }) => Promise<TReturn>
234
- ): ConvexBuilderWithHandler<
235
- TDataModel,
236
- TFunctionType & FunctionType,
237
- TCurrentContext,
238
- TArgsValidator,
239
- TReturnsValidator,
240
- InferHandlerReturn<TReturnsValidator, TReturn>
241
- > &
242
- CallableBuilder<
243
- TCurrentContext,
244
- TArgsValidator,
245
- InferHandlerReturn<TReturnsValidator, TReturn>
246
- > {
247
- if (this.def.handler) {
248
- throw new Error(
249
- "Handler already defined. Only one handler can be set per function chain."
250
- );
251
- }
252
-
253
- const rawHandler = async (
254
- transformedCtx: Context,
255
- baseArgs: InferredArgs<TArgsValidator>
256
- ) => {
257
- return handlerFn({
258
- context: transformedCtx as TCurrentContext,
259
- input: baseArgs,
260
- });
261
- };
262
-
263
- type InferredReturn = InferHandlerReturn<TReturnsValidator, TReturn>;
264
-
265
- return new ConvexBuilderWithHandler<
266
- TDataModel,
267
- TFunctionType & FunctionType,
268
- TCurrentContext,
269
- TArgsValidator,
270
- TReturnsValidator,
271
- InferredReturn
272
- >({
273
- ...this.def,
274
- handler: rawHandler as any,
275
- } as any) as any;
276
- }
277
101
  }
@@ -0,0 +1,265 @@
1
+ import type { GenericDataModel } from "convex/server";
2
+ import { ConvexBuilderWithHandler } from "./ConvexBuilderWithHandler";
3
+ import { InferredArgs } from "./types";
4
+ import { ExpectedReturnType } from "./types";
5
+ import { ConvexBuilderDef } from "./types";
6
+ import { CallableBuilder } from "./types";
7
+ import type { ConvexMiddleware, AnyConvexMiddleware } from "./middleware";
8
+ import type {
9
+ FunctionType,
10
+ Context,
11
+ EmptyObject,
12
+ ConvexArgsValidator,
13
+ ConvexReturnsValidator,
14
+ Visibility,
15
+ } from "./types";
16
+ import {
17
+ type ValidatorInput,
18
+ type ToConvexArgsValidator,
19
+ isZodSchema,
20
+ toConvexValidator,
21
+ type ReturnsValidatorInput,
22
+ type ToConvexReturnsValidator,
23
+ } from "./zod_support";
24
+
25
+ export class ConvexBuilderWithFunctionKind<
26
+ TDataModel extends GenericDataModel = GenericDataModel,
27
+ TFunctionType extends FunctionType = FunctionType,
28
+ TInitialContext extends Context = EmptyObject,
29
+ TCurrentContext extends Context = EmptyObject,
30
+ TArgsValidator extends ConvexArgsValidator | undefined = undefined,
31
+ TReturnsValidator extends ConvexReturnsValidator | undefined = undefined,
32
+ TVisibility extends Visibility = "public",
33
+ THasHandler extends boolean = false,
34
+ THandlerReturn = any,
35
+ > {
36
+ protected def: ConvexBuilderDef<
37
+ TFunctionType,
38
+ TArgsValidator,
39
+ TReturnsValidator,
40
+ TVisibility
41
+ >;
42
+
43
+ constructor(
44
+ def: ConvexBuilderDef<
45
+ TFunctionType,
46
+ TArgsValidator,
47
+ TReturnsValidator,
48
+ TVisibility
49
+ >
50
+ ) {
51
+ this.def = def;
52
+ }
53
+
54
+ $context<U extends Context>(): ConvexBuilderWithFunctionKind<
55
+ TDataModel,
56
+ TFunctionType,
57
+ U & EmptyObject,
58
+ U,
59
+ TArgsValidator,
60
+ TReturnsValidator,
61
+ TVisibility,
62
+ THasHandler,
63
+ THandlerReturn
64
+ > {
65
+ return new ConvexBuilderWithFunctionKind<
66
+ TDataModel,
67
+ TFunctionType,
68
+ U & EmptyObject,
69
+ U,
70
+ TArgsValidator,
71
+ TReturnsValidator,
72
+ TVisibility,
73
+ THasHandler,
74
+ THandlerReturn
75
+ >({
76
+ ...this.def,
77
+ middlewares: [],
78
+ });
79
+ }
80
+
81
+ middleware<UOutContext extends Context>(
82
+ middleware: ConvexMiddleware<TInitialContext, UOutContext>
83
+ ): ConvexMiddleware<TInitialContext, UOutContext>;
84
+ middleware<UInContext extends Context, UOutContext extends Context>(
85
+ middleware: ConvexMiddleware<UInContext, UOutContext>
86
+ ): ConvexMiddleware<UInContext, UOutContext>;
87
+ middleware<UInContext extends Context, UOutContext extends Context>(
88
+ middleware: ConvexMiddleware<UInContext, UOutContext>
89
+ ): ConvexMiddleware<UInContext, UOutContext> {
90
+ return middleware;
91
+ }
92
+
93
+ use<UOutContext extends Context>(
94
+ middleware: ConvexMiddleware<TCurrentContext, UOutContext>
95
+ ): ConvexBuilderWithFunctionKind<
96
+ TDataModel,
97
+ TFunctionType,
98
+ TInitialContext,
99
+ TCurrentContext & UOutContext,
100
+ TArgsValidator,
101
+ TReturnsValidator,
102
+ TVisibility,
103
+ THasHandler,
104
+ THandlerReturn
105
+ > {
106
+ return new ConvexBuilderWithFunctionKind<
107
+ TDataModel,
108
+ TFunctionType,
109
+ TInitialContext,
110
+ TCurrentContext & UOutContext,
111
+ TArgsValidator,
112
+ TReturnsValidator,
113
+ TVisibility,
114
+ THasHandler,
115
+ THandlerReturn
116
+ >({
117
+ ...this.def,
118
+ middlewares: [...this.def.middlewares, middleware as AnyConvexMiddleware],
119
+ });
120
+ }
121
+
122
+ input<UInput extends ValidatorInput>(
123
+ validator: UInput
124
+ ): ConvexBuilderWithFunctionKind<
125
+ TDataModel,
126
+ TFunctionType,
127
+ TInitialContext,
128
+ TCurrentContext,
129
+ ToConvexArgsValidator<UInput>,
130
+ TReturnsValidator,
131
+ TVisibility,
132
+ THasHandler,
133
+ THandlerReturn
134
+ > {
135
+ const convexValidator = isZodSchema(validator)
136
+ ? (toConvexValidator(validator) as ToConvexArgsValidator<UInput>)
137
+ : (validator as ToConvexArgsValidator<UInput>);
138
+
139
+ return new ConvexBuilderWithFunctionKind<
140
+ TDataModel,
141
+ TFunctionType,
142
+ TInitialContext,
143
+ TCurrentContext,
144
+ ToConvexArgsValidator<UInput>,
145
+ TReturnsValidator,
146
+ TVisibility,
147
+ THasHandler,
148
+ THandlerReturn
149
+ >({
150
+ ...this.def,
151
+ argsValidator: convexValidator,
152
+ });
153
+ }
154
+
155
+ returns<UReturns extends ReturnsValidatorInput>(
156
+ validator: UReturns
157
+ ): ConvexBuilderWithFunctionKind<
158
+ TDataModel,
159
+ TFunctionType,
160
+ TInitialContext,
161
+ TCurrentContext,
162
+ TArgsValidator,
163
+ ToConvexReturnsValidator<UReturns>,
164
+ TVisibility,
165
+ THasHandler,
166
+ THandlerReturn
167
+ > {
168
+ const convexValidator = isZodSchema(validator)
169
+ ? (toConvexValidator(validator) as ToConvexReturnsValidator<UReturns>)
170
+ : (validator as ToConvexReturnsValidator<UReturns>);
171
+
172
+ return new ConvexBuilderWithFunctionKind<
173
+ TDataModel,
174
+ TFunctionType,
175
+ TInitialContext,
176
+ TCurrentContext,
177
+ TArgsValidator,
178
+ ToConvexReturnsValidator<UReturns>,
179
+ TVisibility,
180
+ THasHandler,
181
+ THandlerReturn
182
+ >({
183
+ ...this.def,
184
+ returnsValidator: convexValidator,
185
+ });
186
+ }
187
+
188
+ handler<
189
+ TReturn extends [TReturnsValidator] extends [ConvexReturnsValidator]
190
+ ? ExpectedReturnType<TReturnsValidator>
191
+ : any = [TReturnsValidator] extends [ConvexReturnsValidator]
192
+ ? ExpectedReturnType<TReturnsValidator>
193
+ : any,
194
+ >(
195
+ handlerFn: (options: {
196
+ context: TCurrentContext;
197
+ input: InferredArgs<TArgsValidator>;
198
+ }) => Promise<TReturn>
199
+ ): ConvexBuilderWithHandler<
200
+ TDataModel,
201
+ TFunctionType,
202
+ TInitialContext,
203
+ TCurrentContext,
204
+ TArgsValidator,
205
+ TReturnsValidator,
206
+ TVisibility,
207
+ [TReturnsValidator] extends [ConvexReturnsValidator]
208
+ ? ExpectedReturnType<TReturnsValidator>
209
+ : TReturn
210
+ > &
211
+ CallableBuilder<
212
+ TCurrentContext,
213
+ TArgsValidator,
214
+ [TReturnsValidator] extends [ConvexReturnsValidator]
215
+ ? ExpectedReturnType<TReturnsValidator>
216
+ : TReturn
217
+ > {
218
+ if (this.def.handler) {
219
+ throw new Error(
220
+ "Handler already defined. Only one handler can be set per function chain."
221
+ );
222
+ }
223
+
224
+ // Store the raw handler function - it will be composed with all middlewares
225
+ // (including those added after .handler()) when .public() or .internal() is called
226
+ // The handler signature matches what Convex expects: (ctx, args) => Promise<return>
227
+ const rawHandler = async (
228
+ transformedCtx: Context,
229
+ baseArgs: InferredArgs<TArgsValidator>
230
+ ) => {
231
+ return handlerFn({
232
+ context: transformedCtx as TCurrentContext,
233
+ input: baseArgs,
234
+ });
235
+ };
236
+
237
+ type InferredReturn = [TReturnsValidator] extends [ConvexReturnsValidator]
238
+ ? ExpectedReturnType<TReturnsValidator>
239
+ : TReturn;
240
+
241
+ return new ConvexBuilderWithHandler<
242
+ TDataModel,
243
+ TFunctionType,
244
+ TInitialContext,
245
+ TCurrentContext,
246
+ TArgsValidator,
247
+ TReturnsValidator,
248
+ TVisibility,
249
+ InferredReturn
250
+ >({
251
+ ...this.def,
252
+ handler: rawHandler as any,
253
+ }) as ConvexBuilderWithHandler<
254
+ TDataModel,
255
+ TFunctionType,
256
+ TInitialContext,
257
+ TCurrentContext,
258
+ TArgsValidator,
259
+ TReturnsValidator,
260
+ TVisibility,
261
+ InferredReturn
262
+ > &
263
+ CallableBuilder<TCurrentContext, TArgsValidator, InferredReturn>;
264
+ }
265
+ }
@@ -10,10 +10,6 @@ import {
10
10
  actionGeneric,
11
11
  internalActionGeneric,
12
12
  } from "convex/server";
13
- import { applyMiddlewares } from "./builder";
14
- import { InferredArgs } from "./types";
15
- import { ConvexBuilderDef } from "./types";
16
- import { CallableBuilder } from "./types";
17
13
  import type { ConvexMiddleware, AnyConvexMiddleware } from "./middleware";
18
14
  import type {
19
15
  FunctionType,
@@ -21,6 +17,10 @@ import type {
21
17
  EmptyObject,
22
18
  ConvexArgsValidator,
23
19
  ConvexReturnsValidator,
20
+ Visibility,
21
+ ConvexBuilderDef,
22
+ InferredArgs,
23
+ CallableBuilder,
24
24
  QueryCtx,
25
25
  MutationCtx,
26
26
  ActionCtx,
@@ -28,20 +28,28 @@ import type {
28
28
 
29
29
  export class ConvexBuilderWithHandler<
30
30
  TDataModel extends GenericDataModel = GenericDataModel,
31
- TFunctionType extends FunctionType = FunctionType,
31
+ TFunctionType extends FunctionType | undefined = undefined,
32
+ TInitialContext extends Context = EmptyObject,
32
33
  TCurrentContext extends Context = EmptyObject,
33
34
  TArgsValidator extends ConvexArgsValidator | undefined = undefined,
34
35
  TReturnsValidator extends ConvexReturnsValidator | undefined = undefined,
36
+ TVisibility extends Visibility = "public",
35
37
  THandlerReturn = any,
36
38
  > {
37
39
  private def: ConvexBuilderDef<
38
40
  TFunctionType,
39
41
  TArgsValidator,
40
- TReturnsValidator
42
+ TReturnsValidator,
43
+ TVisibility
41
44
  >;
42
45
 
43
46
  constructor(
44
- def: ConvexBuilderDef<TFunctionType, TArgsValidator, TReturnsValidator>
47
+ def: ConvexBuilderDef<
48
+ TFunctionType,
49
+ TArgsValidator,
50
+ TReturnsValidator,
51
+ TVisibility
52
+ >
45
53
  ) {
46
54
  this.def = def;
47
55
 
@@ -64,8 +72,19 @@ export class ConvexBuilderWithHandler<
64
72
  }
65
73
 
66
74
  return async (args: InferredArgs<TArgsValidator>) => {
67
- const transformedContext = await applyMiddlewares(context, middlewares);
68
- return handler(transformedContext as any, args);
75
+ let currentContext: Context = context;
76
+
77
+ // Apply all middlewares in order
78
+ for (const middleware of middlewares) {
79
+ const result = await middleware({
80
+ context: currentContext,
81
+ next: async (options) => ({ context: options.context }),
82
+ });
83
+ currentContext = result.context;
84
+ }
85
+
86
+ // Call the raw handler with the transformed context
87
+ return handler(currentContext as any, args);
69
88
  };
70
89
  }
71
90
 
@@ -74,9 +93,11 @@ export class ConvexBuilderWithHandler<
74
93
  ): ConvexBuilderWithHandler<
75
94
  TDataModel,
76
95
  TFunctionType,
96
+ TInitialContext,
77
97
  TCurrentContext & UOutContext,
78
98
  TArgsValidator,
79
99
  TReturnsValidator,
100
+ TVisibility,
80
101
  THandlerReturn
81
102
  > &
82
103
  CallableBuilder<
@@ -84,10 +105,33 @@ export class ConvexBuilderWithHandler<
84
105
  TArgsValidator,
85
106
  THandlerReturn
86
107
  > {
87
- return new ConvexBuilderWithHandler({
108
+ return new ConvexBuilderWithHandler<
109
+ TDataModel,
110
+ TFunctionType,
111
+ TInitialContext,
112
+ TCurrentContext & UOutContext,
113
+ TArgsValidator,
114
+ TReturnsValidator,
115
+ TVisibility,
116
+ THandlerReturn
117
+ >({
88
118
  ...this.def,
89
119
  middlewares: [...this.def.middlewares, middleware as AnyConvexMiddleware],
90
- }) as any;
120
+ }) as ConvexBuilderWithHandler<
121
+ TDataModel,
122
+ TFunctionType,
123
+ TInitialContext,
124
+ TCurrentContext & UOutContext,
125
+ TArgsValidator,
126
+ TReturnsValidator,
127
+ TVisibility,
128
+ THandlerReturn
129
+ > &
130
+ CallableBuilder<
131
+ TCurrentContext & UOutContext,
132
+ TArgsValidator,
133
+ THandlerReturn
134
+ >;
91
135
  }
92
136
 
93
137
  public(): TFunctionType extends "query"
@@ -134,7 +178,7 @@ export class ConvexBuilderWithHandler<
134
178
  return this._register("internal") as any;
135
179
  }
136
180
 
137
- private _register(visibility: "public" | "internal"): any {
181
+ private _register(visibility: Visibility): any {
138
182
  const {
139
183
  functionType,
140
184
  argsValidator,
@@ -163,8 +207,19 @@ export class ConvexBuilderWithHandler<
163
207
  | ActionCtx<TDataModel>,
164
208
  baseArgs: any
165
209
  ) => {
166
- const transformedContext = await applyMiddlewares(baseCtx, middlewares);
167
- return handler(transformedContext as any, baseArgs);
210
+ let currentContext: Context = baseCtx;
211
+
212
+ // Apply all middlewares in order
213
+ for (const middleware of middlewares) {
214
+ const result = await middleware({
215
+ context: currentContext,
216
+ next: async (options) => ({ context: options.context }),
217
+ });
218
+ currentContext = result.context;
219
+ }
220
+
221
+ // Call the raw handler with the transformed context
222
+ return handler(currentContext as any, baseArgs);
168
223
  };
169
224
 
170
225
  const config = {
package/src/builder.ts CHANGED
@@ -1,27 +1,11 @@
1
1
  import { type GenericDataModel } from "convex/server";
2
- import type { AnyConvexMiddleware } from "./middleware";
3
- import type { Context } from "./types";
4
2
  import { ConvexBuilder } from "./ConvexBuilder";
5
3
 
6
- export async function applyMiddlewares(
7
- initialContext: Context,
8
- middlewares: readonly AnyConvexMiddleware[]
9
- ): Promise<Context> {
10
- let currentContext: Context = initialContext;
11
- for (const middleware of middlewares) {
12
- const result = await middleware({
13
- context: currentContext,
14
- next: async (options) => ({ context: options.context }),
15
- });
16
- currentContext = result.context;
17
- }
18
- return currentContext;
19
- }
20
-
21
4
  export function createBuilder<
22
5
  TDataModel extends GenericDataModel,
23
6
  >(): ConvexBuilder<TDataModel> {
24
7
  return new ConvexBuilder<TDataModel>({
25
8
  middlewares: [],
9
+ visibility: "public",
26
10
  });
27
11
  }
package/src/types.ts CHANGED
@@ -5,7 +5,6 @@ import type {
5
5
  GenericQueryCtx,
6
6
  GenericDataModel,
7
7
  } from "convex/server";
8
-
9
8
  import type { AnyConvexMiddleware } from "./middleware";
10
9
 
11
10
  export type Context = object;
@@ -63,8 +62,7 @@ export type ActionCtx<DataModel extends GenericDataModel = GenericDataModel> =
63
62
  GenericActionCtx<DataModel>;
64
63
 
65
64
  export type FunctionType = "query" | "mutation" | "action";
66
- export type Visibility = "public" | "internal";
67
- // Type for a callable ConvexBuilderWithHandler
65
+ export type Visibility = "public" | "internal"; // Type for a callable ConvexBuilderWithHandler
68
66
 
69
67
  export type CallableBuilder<
70
68
  TCurrentContext extends Context,
@@ -79,19 +77,15 @@ export interface ConvexBuilderDef<
79
77
  TFunctionType extends FunctionType | undefined,
80
78
  TArgsValidator extends ConvexArgsValidator | undefined,
81
79
  TReturnsValidator extends ConvexReturnsValidator | undefined,
80
+ TVisibility extends Visibility,
82
81
  > {
83
82
  functionType?: TFunctionType;
84
83
  middlewares: readonly AnyConvexMiddleware[];
85
84
  argsValidator?: TArgsValidator;
86
85
  returnsValidator?: TReturnsValidator;
86
+ visibility: TVisibility;
87
87
  handler?: (context: Context, input: any) => Promise<any>;
88
88
  }
89
- export type InferHandlerReturn<
90
- TReturnsValidator extends ConvexReturnsValidator | undefined,
91
- TReturn,
92
- > = [TReturnsValidator] extends [ConvexReturnsValidator]
93
- ? ExpectedReturnType<TReturnsValidator>
94
- : TReturn;
95
89
  export type ExpectedReturnType<
96
90
  TReturnsValidator extends ConvexReturnsValidator | undefined,
97
91
  > = TReturnsValidator extends ConvexReturnsValidator