@confect/core 10.0.0-next.21 → 10.0.0-next.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +168 -81
  2. package/dist/FunctionProvenance.d.ts +34 -26
  3. package/dist/FunctionProvenance.d.ts.map +1 -1
  4. package/dist/FunctionProvenance.js +14 -13
  5. package/dist/FunctionProvenance.js.map +1 -1
  6. package/dist/FunctionSpec.d.ts +15 -9
  7. package/dist/FunctionSpec.d.ts.map +1 -1
  8. package/dist/FunctionSpec.js +12 -6
  9. package/dist/FunctionSpec.js.map +1 -1
  10. package/dist/GroupPath.d.ts +5 -6
  11. package/dist/GroupPath.d.ts.map +1 -1
  12. package/dist/GroupPath.js.map +1 -1
  13. package/dist/GroupSpec.d.ts +10 -3
  14. package/dist/GroupSpec.d.ts.map +1 -1
  15. package/dist/GroupSpec.js +33 -19
  16. package/dist/GroupSpec.js.map +1 -1
  17. package/dist/Identifier.d.ts +6 -5
  18. package/dist/Identifier.d.ts.map +1 -1
  19. package/dist/Identifier.js +6 -5
  20. package/dist/Identifier.js.map +1 -1
  21. package/dist/Lazy.d.ts +11 -13
  22. package/dist/Lazy.d.ts.map +1 -1
  23. package/dist/Lazy.js +11 -13
  24. package/dist/Lazy.js.map +1 -1
  25. package/dist/MiddlewareAttachment.d.ts +171 -0
  26. package/dist/MiddlewareAttachment.d.ts.map +1 -0
  27. package/dist/MiddlewareAttachment.js +48 -0
  28. package/dist/MiddlewareAttachment.js.map +1 -0
  29. package/dist/MiddlewareSpec.d.ts +59 -45
  30. package/dist/MiddlewareSpec.d.ts.map +1 -1
  31. package/dist/MiddlewareSpec.js +9 -4
  32. package/dist/MiddlewareSpec.js.map +1 -1
  33. package/dist/PaginationError.d.ts +9 -3
  34. package/dist/PaginationError.d.ts.map +1 -1
  35. package/dist/PaginationError.js +9 -3
  36. package/dist/PaginationError.js.map +1 -1
  37. package/dist/PaginationOptions.d.ts +3 -3
  38. package/dist/PaginationOptions.js +3 -3
  39. package/dist/PaginationOptions.js.map +1 -1
  40. package/dist/Ref.d.ts +42 -35
  41. package/dist/Ref.d.ts.map +1 -1
  42. package/dist/Ref.js +32 -30
  43. package/dist/Ref.js.map +1 -1
  44. package/dist/Refs.d.ts +1 -1
  45. package/dist/Refs.d.ts.map +1 -1
  46. package/dist/Refs.js +3 -2
  47. package/dist/Refs.js.map +1 -1
  48. package/dist/SchemaToValidator.d.ts.map +1 -1
  49. package/dist/SchemaToValidator.js +4 -2
  50. package/dist/SchemaToValidator.js.map +1 -1
  51. package/dist/Spec.d.ts +15 -12
  52. package/dist/Spec.d.ts.map +1 -1
  53. package/dist/Spec.js +13 -8
  54. package/dist/Spec.js.map +1 -1
  55. package/dist/SystemFields.d.ts +15 -14
  56. package/dist/SystemFields.d.ts.map +1 -1
  57. package/dist/SystemFields.js +11 -10
  58. package/dist/SystemFields.js.map +1 -1
  59. package/dist/Table.d.ts +1 -0
  60. package/dist/Table.d.ts.map +1 -1
  61. package/dist/Table.js.map +1 -1
  62. package/dist/index.d.ts +1 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +3 -2
  65. package/package.json +8 -7
  66. package/src/FunctionProvenance.ts +35 -27
  67. package/src/FunctionSpec.ts +33 -15
  68. package/src/GroupPath.ts +5 -6
  69. package/src/GroupSpec.ts +83 -31
  70. package/src/Identifier.ts +6 -5
  71. package/src/Lazy.ts +11 -13
  72. package/src/MiddlewareAttachment.ts +106 -0
  73. package/src/MiddlewareSpec.ts +79 -43
  74. package/src/PaginationError.ts +9 -3
  75. package/src/PaginationOptions.ts +3 -3
  76. package/src/Ref.ts +76 -65
  77. package/src/Refs.ts +3 -3
  78. package/src/SchemaToValidator.ts +53 -44
  79. package/src/Spec.ts +50 -39
  80. package/src/SystemFields.ts +18 -17
  81. package/src/Table.ts +3 -2
  82. package/src/index.ts +1 -0
@@ -0,0 +1,48 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Data from "effect/Data";
3
+ import * as Schema from "effect/Schema";
4
+ import * as Result from "effect/Result";
5
+ //#region src/MiddlewareAttachment.ts
6
+ var MiddlewareAttachment_exports = /* @__PURE__ */ __exportAll({
7
+ ValidationError: () => ValidationError,
8
+ formatValidationError: () => formatValidationError,
9
+ validateAll: () => validateAll
10
+ });
11
+ const ValidationError = Data.taggedEnum();
12
+ const formatValidationError = ValidationError.$match({
13
+ InvalidOptions: ({ middlewareKey, location, attachmentIndex }) => `Middleware "${middlewareKey}" has invalid options at attachment ${attachmentIndex + 1} on ${location}`,
14
+ ConflictingSpecs: ({ middlewareKey, location }) => `Different middleware specs share key "${middlewareKey}" on ${location}`,
15
+ EquivalentOptions: ({ middlewareKey, location, attachmentIndex, previousIndex }) => `Middleware "${middlewareKey}" has equivalent options at attachments ${previousIndex + 1} and ${attachmentIndex + 1} on ${location}`
16
+ });
17
+ const validateAll = (attachments, location) => {
18
+ for (const [index, attachment] of attachments.entries()) {
19
+ const schema = attachment.spec.options;
20
+ if (schema !== void 0 && !Schema.is(schema)(attachment.options)) return Result.fail(ValidationError.InvalidOptions({
21
+ middlewareKey: attachment.spec.key,
22
+ location,
23
+ attachmentIndex: index
24
+ }));
25
+ const equivalent = schema === void 0 ? void 0 : Schema.toEquivalence(schema);
26
+ for (const [previousIndex, previous] of attachments.entries()) {
27
+ if (previousIndex === index) break;
28
+ if (previous.spec.key !== attachment.spec.key) continue;
29
+ if (previous.spec !== attachment.spec) return Result.fail(ValidationError.ConflictingSpecs({
30
+ middlewareKey: attachment.spec.key,
31
+ location,
32
+ attachmentIndex: index,
33
+ previousIndex
34
+ }));
35
+ if (equivalent === void 0 || equivalent(previous.options, attachment.options)) return Result.fail(ValidationError.EquivalentOptions({
36
+ middlewareKey: attachment.spec.key,
37
+ location,
38
+ attachmentIndex: index,
39
+ previousIndex
40
+ }));
41
+ }
42
+ }
43
+ return Result.void;
44
+ };
45
+ //#endregion
46
+ export { MiddlewareAttachment_exports, ValidationError, formatValidationError, validateAll };
47
+
48
+ //# sourceMappingURL=MiddlewareAttachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MiddlewareAttachment.js","names":[],"sources":["../src/MiddlewareAttachment.ts"],"sourcesContent":["import * as Data from \"effect/Data\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport type * as MiddlewareSpec from \"./MiddlewareSpec\";\n\nexport type MiddlewareAttachment<\n MiddlewareSpec_ extends MiddlewareSpec.AnyMiddlewareSpec =\n MiddlewareSpec.AnyMiddlewareSpec,\n> = MiddlewareSpec_ extends MiddlewareSpec.AnyMiddlewareSpec\n ? {\n readonly spec: MiddlewareSpec_;\n readonly options: [MiddlewareSpec_[\"~Options\"]] extends [never]\n ? undefined\n : MiddlewareSpec.Options<MiddlewareSpec_>;\n }\n : never;\n\nexport type Args<MiddlewareSpec_ extends MiddlewareSpec.AnyMiddlewareSpec> = [\n MiddlewareSpec_[\"~Options\"],\n] extends [never]\n ? []\n : [options: MiddlewareSpec.Options<MiddlewareSpec_>];\n\nexport type ValidationError = Data.TaggedEnum<{\n InvalidOptions: {\n readonly middlewareKey: string;\n readonly location: string;\n readonly attachmentIndex: number;\n };\n ConflictingSpecs: {\n readonly middlewareKey: string;\n readonly location: string;\n readonly attachmentIndex: number;\n readonly previousIndex: number;\n };\n EquivalentOptions: {\n readonly middlewareKey: string;\n readonly location: string;\n readonly attachmentIndex: number;\n readonly previousIndex: number;\n };\n}>;\n\nexport const ValidationError = Data.taggedEnum<ValidationError>();\n\nexport const formatValidationError = ValidationError.$match({\n InvalidOptions: ({ middlewareKey, location, attachmentIndex }) =>\n `Middleware \"${middlewareKey}\" has invalid options at attachment ${attachmentIndex + 1} on ${location}`,\n ConflictingSpecs: ({ middlewareKey, location }) =>\n `Different middleware specs share key \"${middlewareKey}\" on ${location}`,\n EquivalentOptions: ({\n middlewareKey,\n location,\n attachmentIndex,\n previousIndex,\n }) =>\n `Middleware \"${middlewareKey}\" has equivalent options at attachments ${previousIndex + 1} and ${attachmentIndex + 1} on ${location}`,\n});\n\nexport const validateAll = (\n attachments: ReadonlyArray<MiddlewareAttachment>,\n location: string,\n): Result.Result<void, ValidationError> => {\n for (const [index, attachment] of attachments.entries()) {\n const schema = attachment.spec.options;\n if (schema !== undefined && !Schema.is(schema)(attachment.options)) {\n return Result.fail(\n ValidationError.InvalidOptions({\n middlewareKey: attachment.spec.key,\n location,\n attachmentIndex: index,\n }),\n );\n }\n const equivalent =\n schema === undefined ? undefined : Schema.toEquivalence(schema);\n for (const [previousIndex, previous] of attachments.entries()) {\n if (previousIndex === index) break;\n if (previous.spec.key !== attachment.spec.key) continue;\n if (previous.spec !== attachment.spec) {\n return Result.fail(\n ValidationError.ConflictingSpecs({\n middlewareKey: attachment.spec.key,\n location,\n attachmentIndex: index,\n previousIndex,\n }),\n );\n }\n if (\n equivalent === undefined ||\n equivalent(previous.options, attachment.options)\n ) {\n return Result.fail(\n ValidationError.EquivalentOptions({\n middlewareKey: attachment.spec.key,\n location,\n attachmentIndex: index,\n previousIndex,\n }),\n );\n }\n }\n }\n return Result.void;\n};\n"],"mappings":";;;;;;;;;;AA2CA,MAAa,kBAAkB,KAAK,WAA4B;AAEhE,MAAa,wBAAwB,gBAAgB,OAAO;CAC1D,iBAAiB,EAAE,eAAe,UAAU,sBAC1C,eAAe,cAAc,sCAAsC,kBAAkB,EAAE,MAAM;CAC/F,mBAAmB,EAAE,eAAe,eAClC,yCAAyC,cAAc,OAAO;CAChE,oBAAoB,EAClB,eACA,UACA,iBACA,oBAEA,eAAe,cAAc,0CAA0C,gBAAgB,EAAE,OAAO,kBAAkB,EAAE,MAAM;AAC9H,CAAC;AAED,MAAa,eACX,aACA,aACyC;CACzC,KAAK,MAAM,CAAC,OAAO,eAAe,YAAY,QAAQ,GAAG;EACvD,MAAM,SAAS,WAAW,KAAK;EAC/B,IAAI,WAAW,KAAA,KAAa,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,WAAW,OAAO,GAC/D,OAAO,OAAO,KACZ,gBAAgB,eAAe;GAC7B,eAAe,WAAW,KAAK;GAC/B;GACA,iBAAiB;EACnB,CAAC,CACH;EAEF,MAAM,aACJ,WAAW,KAAA,IAAY,KAAA,IAAY,OAAO,cAAc,MAAM;EAChE,KAAK,MAAM,CAAC,eAAe,aAAa,YAAY,QAAQ,GAAG;GAC7D,IAAI,kBAAkB,OAAO;GAC7B,IAAI,SAAS,KAAK,QAAQ,WAAW,KAAK,KAAK;GAC/C,IAAI,SAAS,SAAS,WAAW,MAC/B,OAAO,OAAO,KACZ,gBAAgB,iBAAiB;IAC/B,eAAe,WAAW,KAAK;IAC/B;IACA,iBAAiB;IACjB;GACF,CAAC,CACH;GAEF,IACE,eAAe,KAAA,KACf,WAAW,SAAS,SAAS,WAAW,OAAO,GAE/C,OAAO,OAAO,KACZ,gBAAgB,kBAAkB;IAChC,eAAe,WAAW,KAAK;IAC/B;IACA,iBAAiB;IACjB;GACF,CAAC,CACH;EAEJ;CACF;CACA,OAAO,OAAO;AAChB"}
@@ -25,32 +25,36 @@ export interface SuccessValue {
25
25
  }
26
26
  /**
27
27
  * The wrap-style middleware implementation shape: receives the downstream
28
- * effect (the remaining middleware plus the function handler) and the
29
- * covered invocation's metadata, and returns the effect that runs in its
30
- * place.
28
+ * effect (the remaining middleware plus the function handler) and the covered
29
+ * invocation's metadata, and returns the effect that runs in its place.
31
30
  *
32
31
  * Mirrors `RpcMiddleware.RpcMiddleware` in Effect.
33
32
  */
34
- export interface MiddlewareImpl<Provides_, E, R> {
35
- (effect: Effect.Effect<SuccessValue, E | unhandled, Provides_>, options: MiddlewareOptions): Effect.Effect<SuccessValue, E | unhandled, R>;
33
+ export interface MiddlewareImpl<Provides_, E, R, Options_ = never> {
34
+ (effect: Effect.Effect<SuccessValue, E | unhandled, Provides_>, context: MiddlewareOptions<Options_>): Effect.Effect<SuccessValue, E | unhandled, R>;
36
35
  }
37
- export interface MiddlewareOptions {
38
- readonly name: string;
39
- readonly functionType: FunctionType;
40
- readonly functionVisibility: FunctionVisibility;
41
- readonly args: unknown;
42
- }
43
- export interface AnyMiddlewareImpl extends MiddlewareImpl<any, any, any> {
36
+ export type MiddlewareOptions<Options_ = never> = {
37
+ readonly invocation: {
38
+ readonly name: string;
39
+ readonly functionType: FunctionType;
40
+ readonly functionVisibility: FunctionVisibility;
41
+ readonly args: unknown;
42
+ };
43
+ } & ([Options_] extends [never] ? unknown : {
44
+ readonly options: Options_;
45
+ });
46
+ export interface AnyMiddlewareImpl {
47
+ (effect: Effect.Effect<SuccessValue, any, any>, context: MiddlewareOptions | MiddlewareOptions<unknown>): Effect.Effect<SuccessValue, any, any>;
44
48
  }
45
49
  /**
46
- * The class shape produced by {@link MiddlewareSpec}. Only the static side is ever
47
- * used — the class is a value-level carrier for the middleware's key, its
50
+ * The class shape produced by {@link MiddlewareSpec}. Only the static side is
51
+ * ever used—the class is a value-level carrier for the middleware's key, its
48
52
  * declared functionTypes, and its (lazily-evaluated) error schema, plus the
49
53
  * type-level `Provides`/`Error` metadata. It is deliberately not a
50
54
  * `Context.Tag`: implementations are registered through the group `Registry`
51
55
  * (like `FunctionImpl`s), not resolved from a Layer context.
52
56
  */
53
- export interface MiddlewareSpec<in out Self, Key_ extends string, Provides_, Requires_, ErrorSchema_ extends Schema.Codec<any, any>, FunctionTypes_ extends FunctionType> {
57
+ export interface MiddlewareSpec<in out Self, Key_ extends string, Provides_, Requires_, ErrorSchema_ extends Schema.Codec<any, any>, FunctionTypes_ extends FunctionType, OptionsSchema_ extends Schema.Schema<any> = never> {
54
58
  new (_: never): {
55
59
  readonly [TypeId]: TypeId;
56
60
  readonly key: Key_;
@@ -59,27 +63,33 @@ export interface MiddlewareSpec<in out Self, Key_ extends string, Provides_, Req
59
63
  readonly key: Key_;
60
64
  readonly functionTypes: SupportedFunctionTypes;
61
65
  readonly error?: ErrorSchema_;
66
+ readonly options?: OptionsSchema_;
62
67
  readonly "~Provides": Provides_;
63
68
  readonly "~Requires": Requires_;
64
69
  readonly "~Error": ErrorSchema_;
65
70
  readonly "~FunctionTypes": FunctionTypes_;
66
71
  readonly "~Self": Self;
72
+ readonly "~Options": OptionsSchema_;
67
73
  }
68
74
  export interface AnyMiddlewareSpec {
69
75
  readonly [TypeId]: TypeId;
70
76
  readonly key: string;
71
77
  readonly functionTypes: SupportedFunctionTypes;
72
78
  readonly error?: Schema.Codec<any, any>;
79
+ readonly options?: Schema.Schema<any>;
73
80
  readonly "~Provides": any;
74
81
  readonly "~Requires": any;
75
82
  readonly "~Error": any;
76
83
  readonly "~FunctionTypes": FunctionType;
84
+ readonly "~Options": any;
77
85
  }
86
+ export type Options<MiddlewareSpec_ extends AnyMiddlewareSpec> = MiddlewareSpec_["~Options"]["Type"];
87
+ export type WithoutOptions<MiddlewareSpec_ extends AnyMiddlewareSpec> = MiddlewareSpec_ extends AnyMiddlewareSpec ? [MiddlewareSpec_["~Options"]] extends [never] ? MiddlewareSpec_ : never : never;
78
88
  export type Key<MiddlewareSpec_ extends AnyMiddlewareSpec> = MiddlewareSpec_["key"];
79
89
  export type Provides<MiddlewareSpec_ extends AnyMiddlewareSpec> = MiddlewareSpec_ extends AnyMiddlewareSpec ? MiddlewareSpec_["~Provides"] : never;
80
90
  /**
81
- * The services a middleware's implementation may consume from middleware
82
- * that runs earlier in the same chain (type-level only, like `provides`).
91
+ * The services a middleware's implementation may consume from middleware that
92
+ * runs earlier in the same chain (type-level only, like `provides`).
83
93
  */
84
94
  export type Requires<MiddlewareSpec_ extends AnyMiddlewareSpec> = MiddlewareSpec_ extends AnyMiddlewareSpec ? MiddlewareSpec_["~Requires"] : never;
85
95
  export type ErrorSchema<MiddlewareSpec_ extends AnyMiddlewareSpec> = MiddlewareSpec_ extends AnyMiddlewareSpec ? MiddlewareSpec_["~Error"] : never;
@@ -92,24 +102,29 @@ export type FunctionTypes<MiddlewareSpec_ extends AnyMiddlewareSpec> = Middlewar
92
102
  * encode through, and the function types it may attach to.
93
103
  *
94
104
  * ```ts
95
- * class RequireUser extends MiddlewareSpec.MiddlewareSpec<RequireUser, {
96
- * provides: CurrentUser
97
- * }>()("RequireUser", {
105
+ * class RequireUser extends MiddlewareSpec.MiddlewareSpec<
106
+ * RequireUser,
107
+ * {
108
+ * provides: CurrentUser;
109
+ * }
110
+ * >()("RequireUser", {
98
111
  * error: () => NotSignedIn,
99
112
  * functionTypes: { query: true, mutation: true, action: false },
100
113
  * }) {}
101
114
  * ```
102
115
  *
103
116
  * The implementation is server-only and supplied separately via
104
- * `MiddlewareImpl.make` (or `makeByFunctionType`/`provides`) in `@confect/server`.
117
+ * `MiddlewareImpl.make` (or `makeByFunctionType`/`provides`) in
118
+ * `@confect/server`.
105
119
  */
106
120
  export declare const MiddlewareSpec: <Self, Config extends {
107
121
  provides?: any;
108
122
  requires?: any;
109
- } = {}>() => <const Key_ extends string, const FunctionTypesConfig_ extends SupportedFunctionTypes, ErrorSchema_ extends Schema.Codec<any, any> = never>(key: Key_, options: {
123
+ } = {}>() => <const Key_ extends string, const FunctionTypesConfig_ extends SupportedFunctionTypes, ErrorSchema_ extends Schema.Codec<any, any> = never, OptionsSchema_ extends Schema.Schema<any> = never>(key: Key_, options: {
110
124
  readonly error?: () => ErrorSchema_;
125
+ readonly options?: () => OptionsSchema_;
111
126
  readonly functionTypes: FunctionTypesConfig_ & ValidateFunctionTypesConfig<FunctionTypesConfig_>;
112
- }) => MiddlewareSpec<Self, Key_, "provides" extends keyof Config ? Config["provides"] : never, "requires" extends keyof Config ? Config["requires"] : never, ErrorSchema_, FunctionTypesFromConfig<FunctionTypesConfig_>>;
127
+ }) => MiddlewareSpec<Self, Key_, "provides" extends keyof Config ? Config["provides"] : never, "requires" extends keyof Config ? Config["requires"] : never, ErrorSchema_, FunctionTypesFromConfig<FunctionTypesConfig_>, OptionsSchema_>;
113
128
  type FunctionTypesFromConfig<Config extends SupportedFunctionTypes> = {
114
129
  [K in FunctionType]: Config[K] extends true ? K : never;
115
130
  }[FunctionType];
@@ -120,7 +135,7 @@ export declare const errorSchemas: (middlewareSpecs: ReadonlyArray<AnyMiddleware
120
135
  /**
121
136
  * A branded, unconstructible type carrying a spec-authoring error message.
122
137
  * Surfaced as (part of) a parameter type so the diagnostic names the exact
123
- * problem at the `.middleware()` / `.addFunction()` call site.
138
+ * problem at the `.middleware()`/`.addFunction()` call site.
124
139
  */
125
140
  export interface AttachmentError<Message extends string> {
126
141
  readonly "~@confect/core/MiddlewareSpec/AttachmentError": Message;
@@ -128,56 +143,55 @@ export interface AttachmentError<Message extends string> {
128
143
  type FunctionTypeOf<FunctionSpec_ extends FunctionSpec.AnyWithProps> = FunctionSpec_["runtimeAndFunctionType"]["functionType"];
129
144
  type ValidationResult<Errors> = [Errors] extends [never] ? unknown : Errors;
130
145
  /**
131
- * A matching-type Convex-provenance function is rejected rather than
132
- * silently skipped: its raw handler passes through Confect untouched, so
133
- * the middleware could not actually cover it, and skipping it would be a
134
- * policy hole.
146
+ * A matching-type Convex-provenance function is rejected rather than silently
147
+ * skipped: its raw handler passes through Confect untouched, so the middleware
148
+ * could not actually cover it, and skipping it would be a policy hole.
135
149
  */
136
150
  export type ValidateFunction<FunctionSpec_ extends FunctionSpec.AnyWithProps, MiddlewareSpec_ extends AnyMiddlewareSpec> = FunctionSpec_ extends any ? MiddlewareSpec_ extends any ? FunctionSpec_ extends {
137
151
  readonly functionProvenance: {
138
152
  readonly _tag: "Convex";
139
153
  };
140
- } ? FunctionTypeOf<FunctionSpec_> extends FunctionTypes<MiddlewareSpec_> ? AttachmentError<`Convex-provenance function "${FunctionSpec_["name"]}" cannot be covered by middleware "${Key<MiddlewareSpec_>}" — attach middleware only to groups whose matching-type functions are all Confect-provenance`> : never : [
154
+ } ? FunctionTypeOf<FunctionSpec_> extends FunctionTypes<MiddlewareSpec_> ? AttachmentError<`Convex-provenance function "${FunctionSpec_["name"]}" cannot be covered by middleware "${Key<MiddlewareSpec_>}"—attach middleware only to groups whose matching-type functions are all Confect-provenance`> : never : [
141
155
  Extract<FunctionSpec.MiddlewareSpecs<FunctionSpec_>, {
142
- readonly key: Key<MiddlewareSpec_>;
156
+ readonly key: Key<WithoutOptions<MiddlewareSpec_>>;
143
157
  }>
144
158
  ] extends [never] ? FunctionTypeOf<FunctionSpec_> extends FunctionTypes<MiddlewareSpec_> ? never : AttachmentError<`Middleware "${Key<MiddlewareSpec_>}" does not declare function type "${FunctionTypeOf<FunctionSpec_>}", the type of function "${FunctionSpec_["name"]}"`> : AttachmentError<`Middleware "${Key<MiddlewareSpec_>}" is already attached to function "${FunctionSpec_["name"]}"`> : never : never;
145
159
  /**
146
- * Attachment order is chain order, so requiring `requires` to be satisfied
147
- * by already-attached middleware is exactly requiring the provider to run
160
+ * Attachment order is chain order, so requiring `requires` to be satisfied by
161
+ * already-attached middleware is exactly requiring the provider to run
148
162
  * earlier.
149
163
  */
150
164
  export type ValidateAttach<MiddlewareSpec_ extends AnyMiddlewareSpec, Functions_ extends FunctionSpec.AnyWithProps, MiddlewareSpecs_ extends AnyMiddlewareSpec> = [
151
165
  Extract<MiddlewareSpecs_, {
152
- readonly key: Key<MiddlewareSpec_>;
166
+ readonly key: Key<WithoutOptions<MiddlewareSpec_>>;
153
167
  }>
154
168
  ] extends [never] ? [Exclude<Requires<MiddlewareSpec_>, Provides<MiddlewareSpecs_>>] extends [
155
169
  never
156
- ] ? ValidationResult<ValidateFunction<Functions_, MiddlewareSpec_>> : AttachmentError<`Middleware "${Key<MiddlewareSpec_>}" requires services that no middleware attached earlier to this group provides — attach the providing middleware first`> : AttachmentError<`Middleware "${Key<MiddlewareSpec_>}" is already attached to this group`>;
170
+ ] ? ValidationResult<ValidateFunction<Functions_, MiddlewareSpec_>> : AttachmentError<`Middleware "${Key<MiddlewareSpec_>}" requires services that no middleware attached earlier to this group provides—attach the providing middleware first`> : AttachmentError<`Middleware "${Key<MiddlewareSpec_>}" is already attached to this group`>;
157
171
  export type ValidateAddedFunction<FunctionSpec_ extends FunctionSpec.AnyWithProps, MiddlewareSpecs_ extends AnyMiddlewareSpec> = [MiddlewareSpecs_] extends [never] ? unknown : ValidationResult<ValidateFunction<FunctionSpec_, MiddlewareSpecs_> | GroupOverlap<FunctionSpec_, MiddlewareSpecs_>>;
158
172
  type GroupOverlap<FunctionSpec_ extends FunctionSpec.AnyWithProps, MiddlewareSpecs_ extends AnyMiddlewareSpec> = FunctionSpec.MiddlewareSpecs<FunctionSpec_> extends infer FunctionMiddlewareSpec ? FunctionMiddlewareSpec extends AnyMiddlewareSpec ? [
159
173
  Extract<MiddlewareSpecs_, {
160
- readonly key: Key<FunctionMiddlewareSpec>;
174
+ readonly key: Key<WithoutOptions<FunctionMiddlewareSpec>>;
161
175
  }>
162
176
  ] extends [never] ? never : AttachmentError<`Middleware "${Key<FunctionMiddlewareSpec>}" is attached to both function "${FunctionSpec_["name"]}" and its group`> : never : never;
163
177
  /**
164
- * The parameter-type validation applied to the group spec at
165
- * `GroupImpl.make`: every function's attached middleware must have its
166
- * `requires` services provided by some middleware covering that function
167
- * (the group's or the function's own). Checked here — with the group fully
168
- * assembled — rather than at the spec builders, because a function-level
169
- * middleware's `requires` may legitimately be satisfied by a group
170
- * middleware the function spec never sees, and group attachment is
171
- * declaratively order-independent with respect to `addFunction`.
178
+ * The parameter-type validation applied to the group spec at `GroupImpl.make`:
179
+ * every function's attached middleware must have its `requires` services
180
+ * provided by some middleware covering that function (the group's or the
181
+ * function's own). Checked here—with the group fully assembled—rather than at
182
+ * the spec builders, because a function-level middleware's `requires` may
183
+ * legitimately be satisfied by a group middleware the function spec never sees,
184
+ * and group attachment is declaratively order-independent with respect to
185
+ * `addFunction`.
172
186
  */
173
187
  export type ValidateImplRequires<Functions_ extends FunctionSpec.AnyWithProps, GroupMiddlewareSpecs_ extends AnyMiddlewareSpec> = ValidationResult<Functions_ extends any ? [
174
188
  Exclude<Requires<FunctionSpec.MiddlewareSpecs<Functions_>>, Provides<GroupMiddlewareSpecs_ | FunctionSpec.MiddlewareSpecs<Functions_>>>
175
189
  ] extends [never] ? never : AttachmentError<`Function "${Functions_["name"]}" has middleware requiring services that no middleware covering it provides`> : never>;
176
190
  export type ValidateFunctionAttach<MiddlewareSpec_ extends AnyMiddlewareSpec, RuntimeAndFunctionType_ extends RuntimeAndFunctionType.RuntimeAndFunctionType, FunctionProvenance_ extends FunctionProvenance.FunctionProvenance, MiddlewareSpecs_ extends AnyMiddlewareSpec> = FunctionProvenance_ extends {
177
191
  readonly _tag: "Convex";
178
- } ? AttachmentError<`Plain Convex functions cannot have middleware — their raw handlers are passed through untouched`> : [
192
+ } ? AttachmentError<`Plain Convex functions cannot have middleware—their raw handlers are passed through untouched`> : [
179
193
  Extract<MiddlewareSpecs_, {
180
- readonly key: Key<MiddlewareSpec_>;
194
+ readonly key: Key<WithoutOptions<MiddlewareSpec_>>;
181
195
  }>
182
196
  ] extends [never] ? RuntimeAndFunctionType_["functionType"] extends FunctionTypes<MiddlewareSpec_> ? unknown : AttachmentError<`Middleware "${Key<MiddlewareSpec_>}" does not declare function type "${RuntimeAndFunctionType_["functionType"]}"`> : AttachmentError<`Middleware "${Key<MiddlewareSpec_>}" is already attached to this function`>;
183
197
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"MiddlewareSpec.d.ts","sourceRoot":"","sources":["../src/MiddlewareSpec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MiddlewareSpec.d.ts","sourceRoot":"","sources":["../src/MiddlewareSpec.ts"],"names":[],"mappings":"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"}
@@ -22,16 +22,20 @@ const allFunctionTypes = [
22
22
  * encode through, and the function types it may attach to.
23
23
  *
24
24
  * ```ts
25
- * class RequireUser extends MiddlewareSpec.MiddlewareSpec<RequireUser, {
26
- * provides: CurrentUser
27
- * }>()("RequireUser", {
25
+ * class RequireUser extends MiddlewareSpec.MiddlewareSpec<
26
+ * RequireUser,
27
+ * {
28
+ * provides: CurrentUser;
29
+ * }
30
+ * >()("RequireUser", {
28
31
  * error: () => NotSignedIn,
29
32
  * functionTypes: { query: true, mutation: true, action: false },
30
33
  * }) {}
31
34
  * ```
32
35
  *
33
36
  * The implementation is server-only and supplied separately via
34
- * `MiddlewareImpl.make` (or `makeByFunctionType`/`provides`) in `@confect/server`.
37
+ * `MiddlewareImpl.make` (or `makeByFunctionType`/`provides`) in
38
+ * `@confect/server`.
35
39
  */
36
40
  const MiddlewareSpec = () => (key, options) => {
37
41
  const { query, mutation, action } = options.functionTypes;
@@ -46,6 +50,7 @@ const MiddlewareSpec = () => (key, options) => {
46
50
  action
47
51
  };
48
52
  if (options.error !== void 0) defineProperty(class_, "error", options.error);
53
+ if (options.options !== void 0) defineProperty(class_, "options", options.options);
49
54
  return class_;
50
55
  };
51
56
  const errorSchemas = (middlewareSpecs) => middlewareSpecs.flatMap((middlewareSpec) => "error" in middlewareSpec && middlewareSpec.error !== void 0 ? [middlewareSpec.error] : []);
@@ -1 +1 @@
1
- {"version":3,"file":"MiddlewareSpec.js","names":[],"sources":["../src/MiddlewareSpec.ts"],"sourcesContent":["import type { FunctionType, FunctionVisibility } from \"convex/server\";\nimport type * as Effect from \"effect/Effect\";\nimport * as Predicate from \"effect/Predicate\";\nimport type * as Schema from \"effect/Schema\";\nimport type { unhandled } from \"effect/Types\";\nimport type * as FunctionProvenance from \"./FunctionProvenance\";\nimport type * as FunctionSpec from \"./FunctionSpec\";\nimport * as Lazy from \"./Lazy\";\nimport type * as RuntimeAndFunctionType from \"./RuntimeAndFunctionType\";\n\nexport const TypeId = \"~@confect/core/MiddlewareSpec\";\nexport type TypeId = typeof TypeId;\n\nexport const isMiddlewareSpec = (u: unknown): u is AnyMiddlewareSpec =>\n Predicate.hasProperty(u, TypeId);\n\nexport const allFunctionTypes: ReadonlyArray<FunctionType> = [\n \"query\",\n \"mutation\",\n \"action\",\n];\n\nexport interface SupportedFunctionTypes {\n readonly query: boolean;\n readonly mutation: boolean;\n readonly action: boolean;\n}\n\n/**\n * Marker success type used by middleware to represent the handler's outcome\n * without exposing its concrete success value.\n *\n * Mirrors `RpcMiddleware.SuccessValue` in Effect.\n */\nexport interface SuccessValue {\n readonly _: unique symbol;\n}\n\n/**\n * The wrap-style middleware implementation shape: receives the downstream\n * effect (the remaining middleware plus the function handler) and the\n * covered invocation's metadata, and returns the effect that runs in its\n * place.\n *\n * Mirrors `RpcMiddleware.RpcMiddleware` in Effect.\n */\nexport interface MiddlewareImpl<Provides_, E, R> {\n (\n effect: Effect.Effect<SuccessValue, E | unhandled, Provides_>,\n options: MiddlewareOptions,\n ): Effect.Effect<SuccessValue, E | unhandled, R>;\n}\n\nexport interface MiddlewareOptions {\n readonly name: string;\n readonly functionType: FunctionType;\n readonly functionVisibility: FunctionVisibility;\n readonly args: unknown;\n}\n\nexport interface AnyMiddlewareImpl extends MiddlewareImpl<any, any, any> {}\n\n/**\n * The class shape produced by {@link MiddlewareSpec}. Only the static side is ever\n * used — the class is a value-level carrier for the middleware's key, its\n * declared functionTypes, and its (lazily-evaluated) error schema, plus the\n * type-level `Provides`/`Error` metadata. It is deliberately not a\n * `Context.Tag`: implementations are registered through the group `Registry`\n * (like `FunctionImpl`s), not resolved from a Layer context.\n */\nexport interface MiddlewareSpec<\n in out Self,\n Key_ extends string,\n Provides_,\n Requires_,\n ErrorSchema_ extends Schema.Codec<any, any>,\n FunctionTypes_ extends FunctionType,\n> {\n new (_: never): {\n readonly [TypeId]: TypeId;\n readonly key: Key_;\n };\n readonly [TypeId]: TypeId;\n readonly key: Key_;\n readonly functionTypes: SupportedFunctionTypes;\n readonly error?: ErrorSchema_;\n readonly \"~Provides\": Provides_;\n readonly \"~Requires\": Requires_;\n readonly \"~Error\": ErrorSchema_;\n readonly \"~FunctionTypes\": FunctionTypes_;\n readonly \"~Self\": Self;\n}\n\nexport interface AnyMiddlewareSpec {\n readonly [TypeId]: TypeId;\n readonly key: string;\n readonly functionTypes: SupportedFunctionTypes;\n readonly error?: Schema.Codec<any, any>;\n readonly \"~Provides\": any;\n readonly \"~Requires\": any;\n readonly \"~Error\": any;\n readonly \"~FunctionTypes\": FunctionType;\n}\n\nexport type Key<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_[\"key\"];\n\nexport type Provides<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~Provides\"]\n : never;\n\n/**\n * The services a middleware's implementation may consume from middleware\n * that runs earlier in the same chain (type-level only, like `provides`).\n */\nexport type Requires<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~Requires\"]\n : never;\n\nexport type ErrorSchema<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec ? MiddlewareSpec_[\"~Error\"] : never;\n\nexport type Error<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~Error\"][\"Type\"]\n : never;\n\nexport type EncodedError<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~Error\"][\"Encoded\"]\n : never;\n\nexport type FunctionTypes<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~FunctionTypes\"]\n : never;\n\n/**\n * Declare a middleware's client-safe interface: its identifying key, the\n * service it provides to downstream handlers, the error schema its failures\n * encode through, and the function types it may attach to.\n *\n * ```ts\n * class RequireUser extends MiddlewareSpec.MiddlewareSpec<RequireUser, {\n * provides: CurrentUser\n * }>()(\"RequireUser\", {\n * error: () => NotSignedIn,\n * functionTypes: { query: true, mutation: true, action: false },\n * }) {}\n * ```\n *\n * The implementation is server-only and supplied separately via\n * `MiddlewareImpl.make` (or `makeByFunctionType`/`provides`) in `@confect/server`.\n */\nexport const MiddlewareSpec =\n <Self, Config extends { provides?: any; requires?: any } = {}>() =>\n <\n const Key_ extends string,\n const FunctionTypesConfig_ extends SupportedFunctionTypes,\n ErrorSchema_ extends Schema.Codec<any, any> = never,\n >(\n key: Key_,\n options: {\n readonly error?: () => ErrorSchema_;\n readonly functionTypes: FunctionTypesConfig_ &\n ValidateFunctionTypesConfig<FunctionTypesConfig_>;\n },\n ): MiddlewareSpec<\n Self,\n Key_,\n \"provides\" extends keyof Config ? Config[\"provides\"] : never,\n \"requires\" extends keyof Config ? Config[\"requires\"] : never,\n ErrorSchema_,\n FunctionTypesFromConfig<FunctionTypesConfig_>\n > => {\n const { query, mutation, action } = options.functionTypes;\n if (!query && !mutation && !action) {\n throw new Error(\n `Middleware \"${key}\" must declare at least one function type`,\n );\n }\n\n function MiddlewareSpecClass() {}\n const class_ = MiddlewareSpecClass as any;\n class_[TypeId] = TypeId;\n class_.key = key;\n class_.functionTypes = {\n query,\n mutation,\n action,\n } satisfies SupportedFunctionTypes;\n if (options.error !== undefined) {\n Lazy.defineProperty(class_, \"error\", options.error);\n }\n return class_;\n };\n\ntype FunctionTypesFromConfig<Config extends SupportedFunctionTypes> = {\n [K in FunctionType]: Config[K] extends true ? K : never;\n}[FunctionType];\n\ntype ValidateFunctionTypesConfig<Config extends SupportedFunctionTypes> =\n ValidationResult<\n | {\n [K in keyof Config]: boolean extends Config[K]\n ? AttachmentError<`Function type flag \"${K & string}\" must be a literal \\`true\\` or \\`false\\`, not a computed \\`boolean\\``>\n : never;\n }[keyof Config]\n | ([FunctionTypesFromConfig<Config>] extends [never]\n ? AttachmentError<`A middleware must declare at least one function type`>\n : never)\n >;\n\nexport const errorSchemas = (\n middlewareSpecs: ReadonlyArray<AnyMiddlewareSpec>,\n): ReadonlyArray<Schema.Codec<any, any>> =>\n middlewareSpecs.flatMap((middlewareSpec) =>\n \"error\" in middlewareSpec && middlewareSpec.error !== undefined\n ? [middlewareSpec.error]\n : [],\n );\n\n/**\n * A branded, unconstructible type carrying a spec-authoring error message.\n * Surfaced as (part of) a parameter type so the diagnostic names the exact\n * problem at the `.middleware()` / `.addFunction()` call site.\n */\nexport interface AttachmentError<Message extends string> {\n readonly \"~@confect/core/MiddlewareSpec/AttachmentError\": Message;\n}\n\ntype FunctionTypeOf<FunctionSpec_ extends FunctionSpec.AnyWithProps> =\n FunctionSpec_[\"runtimeAndFunctionType\"][\"functionType\"];\n\ntype ValidationResult<Errors> = [Errors] extends [never] ? unknown : Errors;\n\n/**\n * A matching-type Convex-provenance function is rejected rather than\n * silently skipped: its raw handler passes through Confect untouched, so\n * the middleware could not actually cover it, and skipping it would be a\n * policy hole.\n */\nexport type ValidateFunction<\n FunctionSpec_ extends FunctionSpec.AnyWithProps,\n MiddlewareSpec_ extends AnyMiddlewareSpec,\n> = FunctionSpec_ extends any\n ? MiddlewareSpec_ extends any\n ? FunctionSpec_ extends {\n readonly functionProvenance: { readonly _tag: \"Convex\" };\n }\n ? FunctionTypeOf<FunctionSpec_> extends FunctionTypes<MiddlewareSpec_>\n ? AttachmentError<`Convex-provenance function \"${FunctionSpec_[\"name\"]}\" cannot be covered by middleware \"${Key<MiddlewareSpec_>}\" — attach middleware only to groups whose matching-type functions are all Confect-provenance`>\n : never\n : [\n Extract<\n FunctionSpec.MiddlewareSpecs<FunctionSpec_>,\n { readonly key: Key<MiddlewareSpec_> }\n >,\n ] extends [never]\n ? FunctionTypeOf<FunctionSpec_> extends FunctionTypes<MiddlewareSpec_>\n ? never\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" does not declare function type \"${FunctionTypeOf<FunctionSpec_>}\", the type of function \"${FunctionSpec_[\"name\"]}\"`>\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" is already attached to function \"${FunctionSpec_[\"name\"]}\"`>\n : never\n : never;\n\n/**\n * Attachment order is chain order, so requiring `requires` to be satisfied\n * by already-attached middleware is exactly requiring the provider to run\n * earlier.\n */\nexport type ValidateAttach<\n MiddlewareSpec_ extends AnyMiddlewareSpec,\n Functions_ extends FunctionSpec.AnyWithProps,\n MiddlewareSpecs_ extends AnyMiddlewareSpec,\n> = [\n Extract<MiddlewareSpecs_, { readonly key: Key<MiddlewareSpec_> }>,\n] extends [never]\n ? [Exclude<Requires<MiddlewareSpec_>, Provides<MiddlewareSpecs_>>] extends [\n never,\n ]\n ? ValidationResult<ValidateFunction<Functions_, MiddlewareSpec_>>\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" requires services that no middleware attached earlier to this group provides — attach the providing middleware first`>\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" is already attached to this group`>;\n\nexport type ValidateAddedFunction<\n FunctionSpec_ extends FunctionSpec.AnyWithProps,\n MiddlewareSpecs_ extends AnyMiddlewareSpec,\n> = [MiddlewareSpecs_] extends [never]\n ? unknown\n : ValidationResult<\n | ValidateFunction<FunctionSpec_, MiddlewareSpecs_>\n | GroupOverlap<FunctionSpec_, MiddlewareSpecs_>\n >;\n\ntype GroupOverlap<\n FunctionSpec_ extends FunctionSpec.AnyWithProps,\n MiddlewareSpecs_ extends AnyMiddlewareSpec,\n> =\n FunctionSpec.MiddlewareSpecs<FunctionSpec_> extends infer FunctionMiddlewareSpec\n ? FunctionMiddlewareSpec extends AnyMiddlewareSpec\n ? [\n Extract<\n MiddlewareSpecs_,\n { readonly key: Key<FunctionMiddlewareSpec> }\n >,\n ] extends [never]\n ? never\n : AttachmentError<`Middleware \"${Key<FunctionMiddlewareSpec>}\" is attached to both function \"${FunctionSpec_[\"name\"]}\" and its group`>\n : never\n : never;\n\n/**\n * The parameter-type validation applied to the group spec at\n * `GroupImpl.make`: every function's attached middleware must have its\n * `requires` services provided by some middleware covering that function\n * (the group's or the function's own). Checked here — with the group fully\n * assembled — rather than at the spec builders, because a function-level\n * middleware's `requires` may legitimately be satisfied by a group\n * middleware the function spec never sees, and group attachment is\n * declaratively order-independent with respect to `addFunction`.\n */\nexport type ValidateImplRequires<\n Functions_ extends FunctionSpec.AnyWithProps,\n GroupMiddlewareSpecs_ extends AnyMiddlewareSpec,\n> = ValidationResult<\n Functions_ extends any\n ? [\n Exclude<\n Requires<FunctionSpec.MiddlewareSpecs<Functions_>>,\n Provides<\n GroupMiddlewareSpecs_ | FunctionSpec.MiddlewareSpecs<Functions_>\n >\n >,\n ] extends [never]\n ? never\n : AttachmentError<`Function \"${Functions_[\"name\"]}\" has middleware requiring services that no middleware covering it provides`>\n : never\n>;\n\nexport type ValidateFunctionAttach<\n MiddlewareSpec_ extends AnyMiddlewareSpec,\n RuntimeAndFunctionType_ extends RuntimeAndFunctionType.RuntimeAndFunctionType,\n FunctionProvenance_ extends FunctionProvenance.FunctionProvenance,\n MiddlewareSpecs_ extends AnyMiddlewareSpec,\n> = FunctionProvenance_ extends { readonly _tag: \"Convex\" }\n ? AttachmentError<`Plain Convex functions cannot have middleware — their raw handlers are passed through untouched`>\n : [\n Extract<MiddlewareSpecs_, { readonly key: Key<MiddlewareSpec_> }>,\n ] extends [never]\n ? RuntimeAndFunctionType_[\"functionType\"] extends FunctionTypes<MiddlewareSpec_>\n ? unknown\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" does not declare function type \"${RuntimeAndFunctionType_[\"functionType\"]}\"`>\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" is already attached to this function`>;\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,SAAS;AAGtB,MAAa,oBAAoB,MAC/B,UAAU,YAAY,GAAG,MAAM;AAEjC,MAAa,mBAAgD;CAC3D;CACA;CACA;AACF;;;;;;;;;;;;;;;;;;AAwIA,MAAa,wBAOT,KACA,YAYG;CACH,MAAM,EAAE,OAAO,UAAU,WAAW,QAAQ;CAC5C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAC1B,MAAM,IAAI,MACR,eAAe,IAAI,0CACrB;CAGF,SAAS,sBAAsB,CAAC;CAChC,MAAM,SAAS;CACf,OAAO,UAAU;CACjB,OAAO,MAAM;CACb,OAAO,gBAAgB;EACrB;EACA;EACA;CACF;CACA,IAAI,QAAQ,UAAU,KAAA,GACpB,eAAoB,QAAQ,SAAS,QAAQ,KAAK;CAEpD,OAAO;AACT;AAkBF,MAAa,gBACX,oBAEA,gBAAgB,SAAS,mBACvB,WAAW,kBAAkB,eAAe,UAAU,KAAA,IAClD,CAAC,eAAe,KAAK,IACrB,CAAC,CACP"}
1
+ {"version":3,"file":"MiddlewareSpec.js","names":[],"sources":["../src/MiddlewareSpec.ts"],"sourcesContent":["import type { FunctionType, FunctionVisibility } from \"convex/server\";\nimport type * as Effect from \"effect/Effect\";\nimport * as Predicate from \"effect/Predicate\";\nimport type * as Schema from \"effect/Schema\";\nimport type { unhandled } from \"effect/Types\";\nimport type * as FunctionProvenance from \"./FunctionProvenance\";\nimport type * as FunctionSpec from \"./FunctionSpec\";\nimport * as Lazy from \"./Lazy\";\nimport type * as RuntimeAndFunctionType from \"./RuntimeAndFunctionType\";\n\nexport const TypeId = \"~@confect/core/MiddlewareSpec\";\nexport type TypeId = typeof TypeId;\n\nexport const isMiddlewareSpec = (u: unknown): u is AnyMiddlewareSpec =>\n Predicate.hasProperty(u, TypeId);\n\nexport const allFunctionTypes: ReadonlyArray<FunctionType> = [\n \"query\",\n \"mutation\",\n \"action\",\n];\n\nexport interface SupportedFunctionTypes {\n readonly query: boolean;\n readonly mutation: boolean;\n readonly action: boolean;\n}\n\n/**\n * Marker success type used by middleware to represent the handler's outcome\n * without exposing its concrete success value.\n *\n * Mirrors `RpcMiddleware.SuccessValue` in Effect.\n */\nexport interface SuccessValue {\n readonly _: unique symbol;\n}\n\n/**\n * The wrap-style middleware implementation shape: receives the downstream\n * effect (the remaining middleware plus the function handler) and the covered\n * invocation's metadata, and returns the effect that runs in its place.\n *\n * Mirrors `RpcMiddleware.RpcMiddleware` in Effect.\n */\nexport interface MiddlewareImpl<Provides_, E, R, Options_ = never> {\n (\n effect: Effect.Effect<SuccessValue, E | unhandled, Provides_>,\n context: MiddlewareOptions<Options_>,\n ): Effect.Effect<SuccessValue, E | unhandled, R>;\n}\n\nexport type MiddlewareOptions<Options_ = never> = {\n readonly invocation: {\n readonly name: string;\n readonly functionType: FunctionType;\n readonly functionVisibility: FunctionVisibility;\n readonly args: unknown;\n };\n} & ([Options_] extends [never] ? unknown : { readonly options: Options_ });\n\nexport interface AnyMiddlewareImpl {\n (\n effect: Effect.Effect<SuccessValue, any, any>,\n context: MiddlewareOptions | MiddlewareOptions<unknown>,\n ): Effect.Effect<SuccessValue, any, any>;\n}\n\n/**\n * The class shape produced by {@link MiddlewareSpec}. Only the static side is\n * ever used—the class is a value-level carrier for the middleware's key, its\n * declared functionTypes, and its (lazily-evaluated) error schema, plus the\n * type-level `Provides`/`Error` metadata. It is deliberately not a\n * `Context.Tag`: implementations are registered through the group `Registry`\n * (like `FunctionImpl`s), not resolved from a Layer context.\n */\nexport interface MiddlewareSpec<\n in out Self,\n Key_ extends string,\n Provides_,\n Requires_,\n ErrorSchema_ extends Schema.Codec<any, any>,\n FunctionTypes_ extends FunctionType,\n OptionsSchema_ extends Schema.Schema<any> = never,\n> {\n new (_: never): {\n readonly [TypeId]: TypeId;\n readonly key: Key_;\n };\n readonly [TypeId]: TypeId;\n readonly key: Key_;\n readonly functionTypes: SupportedFunctionTypes;\n readonly error?: ErrorSchema_;\n readonly options?: OptionsSchema_;\n readonly \"~Provides\": Provides_;\n readonly \"~Requires\": Requires_;\n readonly \"~Error\": ErrorSchema_;\n readonly \"~FunctionTypes\": FunctionTypes_;\n readonly \"~Self\": Self;\n readonly \"~Options\": OptionsSchema_;\n}\n\nexport interface AnyMiddlewareSpec {\n readonly [TypeId]: TypeId;\n readonly key: string;\n readonly functionTypes: SupportedFunctionTypes;\n readonly error?: Schema.Codec<any, any>;\n readonly options?: Schema.Schema<any>;\n readonly \"~Provides\": any;\n readonly \"~Requires\": any;\n readonly \"~Error\": any;\n readonly \"~FunctionTypes\": FunctionType;\n readonly \"~Options\": any;\n}\n\nexport type Options<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_[\"~Options\"][\"Type\"];\n\nexport type WithoutOptions<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? [MiddlewareSpec_[\"~Options\"]] extends [never]\n ? MiddlewareSpec_\n : never\n : never;\n\nexport type Key<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_[\"key\"];\n\nexport type Provides<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~Provides\"]\n : never;\n\n/**\n * The services a middleware's implementation may consume from middleware that\n * runs earlier in the same chain (type-level only, like `provides`).\n */\nexport type Requires<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~Requires\"]\n : never;\n\nexport type ErrorSchema<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec ? MiddlewareSpec_[\"~Error\"] : never;\n\nexport type Error<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~Error\"][\"Type\"]\n : never;\n\nexport type EncodedError<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~Error\"][\"Encoded\"]\n : never;\n\nexport type FunctionTypes<MiddlewareSpec_ extends AnyMiddlewareSpec> =\n MiddlewareSpec_ extends AnyMiddlewareSpec\n ? MiddlewareSpec_[\"~FunctionTypes\"]\n : never;\n\n/**\n * Declare a middleware's client-safe interface: its identifying key, the\n * service it provides to downstream handlers, the error schema its failures\n * encode through, and the function types it may attach to.\n *\n * ```ts\n * class RequireUser extends MiddlewareSpec.MiddlewareSpec<\n * RequireUser,\n * {\n * provides: CurrentUser;\n * }\n * >()(\"RequireUser\", {\n * error: () => NotSignedIn,\n * functionTypes: { query: true, mutation: true, action: false },\n * }) {}\n * ```\n *\n * The implementation is server-only and supplied separately via\n * `MiddlewareImpl.make` (or `makeByFunctionType`/`provides`) in\n * `@confect/server`.\n */\nexport const MiddlewareSpec =\n <Self, Config extends { provides?: any; requires?: any } = {}>() =>\n <\n const Key_ extends string,\n const FunctionTypesConfig_ extends SupportedFunctionTypes,\n ErrorSchema_ extends Schema.Codec<any, any> = never,\n OptionsSchema_ extends Schema.Schema<any> = never,\n >(\n key: Key_,\n options: {\n readonly error?: () => ErrorSchema_;\n readonly options?: () => OptionsSchema_;\n readonly functionTypes: FunctionTypesConfig_ &\n ValidateFunctionTypesConfig<FunctionTypesConfig_>;\n },\n ): MiddlewareSpec<\n Self,\n Key_,\n \"provides\" extends keyof Config ? Config[\"provides\"] : never,\n \"requires\" extends keyof Config ? Config[\"requires\"] : never,\n ErrorSchema_,\n FunctionTypesFromConfig<FunctionTypesConfig_>,\n OptionsSchema_\n > => {\n const { query, mutation, action } = options.functionTypes;\n if (!query && !mutation && !action) {\n throw new Error(\n `Middleware \"${key}\" must declare at least one function type`,\n );\n }\n\n function MiddlewareSpecClass() {}\n const class_ = MiddlewareSpecClass as any;\n class_[TypeId] = TypeId;\n class_.key = key;\n class_.functionTypes = {\n query,\n mutation,\n action,\n } satisfies SupportedFunctionTypes;\n if (options.error !== undefined) {\n Lazy.defineProperty(class_, \"error\", options.error);\n }\n if (options.options !== undefined) {\n Lazy.defineProperty(class_, \"options\", options.options);\n }\n return class_;\n };\n\ntype FunctionTypesFromConfig<Config extends SupportedFunctionTypes> = {\n [K in FunctionType]: Config[K] extends true ? K : never;\n}[FunctionType];\n\ntype ValidateFunctionTypesConfig<Config extends SupportedFunctionTypes> =\n ValidationResult<\n | {\n [K in keyof Config]: boolean extends Config[K]\n ? AttachmentError<`Function type flag \"${K & string}\" must be a literal \\`true\\` or \\`false\\`, not a computed \\`boolean\\``>\n : never;\n }[keyof Config]\n | ([FunctionTypesFromConfig<Config>] extends [never]\n ? AttachmentError<`A middleware must declare at least one function type`>\n : never)\n >;\n\nexport const errorSchemas = (\n middlewareSpecs: ReadonlyArray<AnyMiddlewareSpec>,\n): ReadonlyArray<Schema.Codec<any, any>> =>\n middlewareSpecs.flatMap((middlewareSpec) =>\n \"error\" in middlewareSpec && middlewareSpec.error !== undefined\n ? [middlewareSpec.error]\n : [],\n );\n\n/**\n * A branded, unconstructible type carrying a spec-authoring error message.\n * Surfaced as (part of) a parameter type so the diagnostic names the exact\n * problem at the `.middleware()`/`.addFunction()` call site.\n */\nexport interface AttachmentError<Message extends string> {\n readonly \"~@confect/core/MiddlewareSpec/AttachmentError\": Message;\n}\n\ntype FunctionTypeOf<FunctionSpec_ extends FunctionSpec.AnyWithProps> =\n FunctionSpec_[\"runtimeAndFunctionType\"][\"functionType\"];\n\ntype ValidationResult<Errors> = [Errors] extends [never] ? unknown : Errors;\n\n/**\n * A matching-type Convex-provenance function is rejected rather than silently\n * skipped: its raw handler passes through Confect untouched, so the middleware\n * could not actually cover it, and skipping it would be a policy hole.\n */\nexport type ValidateFunction<\n FunctionSpec_ extends FunctionSpec.AnyWithProps,\n MiddlewareSpec_ extends AnyMiddlewareSpec,\n> = FunctionSpec_ extends any\n ? MiddlewareSpec_ extends any\n ? FunctionSpec_ extends {\n readonly functionProvenance: { readonly _tag: \"Convex\" };\n }\n ? FunctionTypeOf<FunctionSpec_> extends FunctionTypes<MiddlewareSpec_>\n ? AttachmentError<`Convex-provenance function \"${FunctionSpec_[\"name\"]}\" cannot be covered by middleware \"${Key<MiddlewareSpec_>}\"—attach middleware only to groups whose matching-type functions are all Confect-provenance`>\n : never\n : [\n Extract<\n FunctionSpec.MiddlewareSpecs<FunctionSpec_>,\n { readonly key: Key<WithoutOptions<MiddlewareSpec_>> }\n >,\n ] extends [never]\n ? FunctionTypeOf<FunctionSpec_> extends FunctionTypes<MiddlewareSpec_>\n ? never\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" does not declare function type \"${FunctionTypeOf<FunctionSpec_>}\", the type of function \"${FunctionSpec_[\"name\"]}\"`>\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" is already attached to function \"${FunctionSpec_[\"name\"]}\"`>\n : never\n : never;\n\n/**\n * Attachment order is chain order, so requiring `requires` to be satisfied by\n * already-attached middleware is exactly requiring the provider to run\n * earlier.\n */\nexport type ValidateAttach<\n MiddlewareSpec_ extends AnyMiddlewareSpec,\n Functions_ extends FunctionSpec.AnyWithProps,\n MiddlewareSpecs_ extends AnyMiddlewareSpec,\n> = [\n Extract<\n MiddlewareSpecs_,\n { readonly key: Key<WithoutOptions<MiddlewareSpec_>> }\n >,\n] extends [never]\n ? [Exclude<Requires<MiddlewareSpec_>, Provides<MiddlewareSpecs_>>] extends [\n never,\n ]\n ? ValidationResult<ValidateFunction<Functions_, MiddlewareSpec_>>\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" requires services that no middleware attached earlier to this group provides—attach the providing middleware first`>\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" is already attached to this group`>;\n\nexport type ValidateAddedFunction<\n FunctionSpec_ extends FunctionSpec.AnyWithProps,\n MiddlewareSpecs_ extends AnyMiddlewareSpec,\n> = [MiddlewareSpecs_] extends [never]\n ? unknown\n : ValidationResult<\n | ValidateFunction<FunctionSpec_, MiddlewareSpecs_>\n | GroupOverlap<FunctionSpec_, MiddlewareSpecs_>\n >;\n\ntype GroupOverlap<\n FunctionSpec_ extends FunctionSpec.AnyWithProps,\n MiddlewareSpecs_ extends AnyMiddlewareSpec,\n> =\n FunctionSpec.MiddlewareSpecs<FunctionSpec_> extends infer FunctionMiddlewareSpec\n ? FunctionMiddlewareSpec extends AnyMiddlewareSpec\n ? [\n Extract<\n MiddlewareSpecs_,\n { readonly key: Key<WithoutOptions<FunctionMiddlewareSpec>> }\n >,\n ] extends [never]\n ? never\n : AttachmentError<`Middleware \"${Key<FunctionMiddlewareSpec>}\" is attached to both function \"${FunctionSpec_[\"name\"]}\" and its group`>\n : never\n : never;\n\n/**\n * The parameter-type validation applied to the group spec at `GroupImpl.make`:\n * every function's attached middleware must have its `requires` services\n * provided by some middleware covering that function (the group's or the\n * function's own). Checked here—with the group fully assembled—rather than at\n * the spec builders, because a function-level middleware's `requires` may\n * legitimately be satisfied by a group middleware the function spec never sees,\n * and group attachment is declaratively order-independent with respect to\n * `addFunction`.\n */\nexport type ValidateImplRequires<\n Functions_ extends FunctionSpec.AnyWithProps,\n GroupMiddlewareSpecs_ extends AnyMiddlewareSpec,\n> = ValidationResult<\n Functions_ extends any\n ? [\n Exclude<\n Requires<FunctionSpec.MiddlewareSpecs<Functions_>>,\n Provides<\n GroupMiddlewareSpecs_ | FunctionSpec.MiddlewareSpecs<Functions_>\n >\n >,\n ] extends [never]\n ? never\n : AttachmentError<`Function \"${Functions_[\"name\"]}\" has middleware requiring services that no middleware covering it provides`>\n : never\n>;\n\nexport type ValidateFunctionAttach<\n MiddlewareSpec_ extends AnyMiddlewareSpec,\n RuntimeAndFunctionType_ extends RuntimeAndFunctionType.RuntimeAndFunctionType,\n FunctionProvenance_ extends FunctionProvenance.FunctionProvenance,\n MiddlewareSpecs_ extends AnyMiddlewareSpec,\n> = FunctionProvenance_ extends { readonly _tag: \"Convex\" }\n ? AttachmentError<`Plain Convex functions cannot have middleware—their raw handlers are passed through untouched`>\n : [\n Extract<\n MiddlewareSpecs_,\n { readonly key: Key<WithoutOptions<MiddlewareSpec_>> }\n >,\n ] extends [never]\n ? RuntimeAndFunctionType_[\"functionType\"] extends FunctionTypes<MiddlewareSpec_>\n ? unknown\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" does not declare function type \"${RuntimeAndFunctionType_[\"functionType\"]}\"`>\n : AttachmentError<`Middleware \"${Key<MiddlewareSpec_>}\" is already attached to this function`>;\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,SAAS;AAGtB,MAAa,oBAAoB,MAC/B,UAAU,YAAY,GAAG,MAAM;AAEjC,MAAa,mBAAgD;CAC3D;CACA;CACA;AACF;;;;;;;;;;;;;;;;;;;;;;AAiKA,MAAa,wBAQT,KACA,YAcG;CACH,MAAM,EAAE,OAAO,UAAU,WAAW,QAAQ;CAC5C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAC1B,MAAM,IAAI,MACR,eAAe,IAAI,0CACrB;CAGF,SAAS,sBAAsB,CAAC;CAChC,MAAM,SAAS;CACf,OAAO,UAAU;CACjB,OAAO,MAAM;CACb,OAAO,gBAAgB;EACrB;EACA;EACA;CACF;CACA,IAAI,QAAQ,UAAU,KAAA,GACpB,eAAoB,QAAQ,SAAS,QAAQ,KAAK;CAEpD,IAAI,QAAQ,YAAY,KAAA,GACtB,eAAoB,QAAQ,WAAW,QAAQ,OAAO;CAExD,OAAO;AACT;AAkBF,MAAa,gBACX,oBAEA,gBAAgB,SAAS,mBACvB,WAAW,kBAAkB,eAAe,UAAU,KAAA,IAClD,CAAC,eAAe,KAAK,IACrB,CAAC,CACP"}
@@ -3,12 +3,18 @@ import * as Schema from "effect/Schema";
3
3
  declare const InvalidCursor_base: Schema.Class<InvalidCursor, Schema.TaggedStruct<"InvalidCursor", {
4
4
  readonly cause: Schema.Defect;
5
5
  }>, import("effect/Cause").YieldableError>;
6
- /** A Convex pagination cursor that no longer describes the current query. */
6
+ /**
7
+ * A Convex pagination cursor that no longer describes the current query.
8
+ */
7
9
  export declare class InvalidCursor extends InvalidCursor_base {
8
10
  }
9
- /** Recognizes an invalid-cursor error emitted by a Convex query. */
11
+ /**
12
+ * Recognizes an invalid-cursor error emitted by a Convex query.
13
+ */
10
14
  export declare const fromConvexQueryError: (error: unknown) => Option.Option<InvalidCursor>;
11
- /** Recognizes the error data attached to Convex's invalid-cursor error. */
15
+ /**
16
+ * Recognizes the error data attached to Convex's invalid-cursor error.
17
+ */
12
18
  export declare const fromConvexErrorData: (errorData: unknown) => Option.Option<InvalidCursor>;
13
19
  export {};
14
20
  //# sourceMappingURL=PaginationError.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaginationError.d.ts","sourceRoot":"","sources":["../src/PaginationError.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;AAExC,6EAA6E;AAC7E,qBAAa,aAAc,SAAQ,kBAKlC;CAAG;AA8BJ,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,UACxB,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,aAAa,CAc3B,CAAC;AAEJ,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,cACnB,OAAO,KACjB,MAAM,CAAC,MAAM,CAAC,aAAa,CAO3B,CAAC"}
1
+ {"version":3,"file":"PaginationError.d.ts","sourceRoot":"","sources":["../src/PaginationError.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;AAExC;;GAEG;AACH,qBAAa,aAAc,SAAQ,kBAKlC;CAAG;AA8BJ;;GAEG;AACH,eAAO,MAAM,oBAAoB,UACxB,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,aAAa,CAc3B,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,mBAAmB,cACnB,OAAO,KACjB,MAAM,CAAC,MAAM,CAAC,aAAa,CAO3B,CAAC"}
@@ -9,15 +9,21 @@ var PaginationError_exports = /* @__PURE__ */ __exportAll({
9
9
  fromConvexErrorData: () => fromConvexErrorData,
10
10
  fromConvexQueryError: () => fromConvexQueryError
11
11
  });
12
- /** A Convex pagination cursor that no longer describes the current query. */
12
+ /**
13
+ * A Convex pagination cursor that no longer describes the current query.
14
+ */
13
15
  var InvalidCursor = class extends Schema.TaggedError()("InvalidCursor", { cause: Schema.Defect() }) {};
14
16
  const ConvexErrorIdentifier = Symbol.for("ConvexError");
15
17
  const isConvexError = (error) => error instanceof ConvexError || typeof error === "object" && error !== null && ConvexErrorIdentifier in error;
16
18
  const isInvalidCursorData = (value) => typeof value === "object" && value !== null && "isConvexSystemError" in value && value.isConvexSystemError === true && "paginationError" in value && value.paginationError === "InvalidCursor";
17
19
  const fromErrorMessage = (error) => error.message.includes("InvalidCursor") ? Option.some(new InvalidCursor({ cause: error })) : Option.none();
18
- /** Recognizes an invalid-cursor error emitted by a Convex query. */
20
+ /**
21
+ * Recognizes an invalid-cursor error emitted by a Convex query.
22
+ */
19
23
  const fromConvexQueryError = (error) => Match.value(error).pipe(Match.when(isConvexError, (convexError) => Match.value(isInvalidCursorData(convexError.data)).pipe(Match.when(true, () => Option.some(new InvalidCursor({ cause: error }))), Match.when(false, () => fromErrorMessage(convexError)), Match.exhaustive)), Match.when(Match.instanceOf(globalThis.Error), fromErrorMessage), Match.when(Match.any, () => Option.none()), Match.exhaustive);
20
- /** Recognizes the error data attached to Convex's invalid-cursor error. */
24
+ /**
25
+ * Recognizes the error data attached to Convex's invalid-cursor error.
26
+ */
21
27
  const fromConvexErrorData = (errorData) => Match.value(errorData).pipe(Match.when(isInvalidCursorData, (cause) => Option.some(new InvalidCursor({ cause }))), Match.when(Match.any, () => Option.none()), Match.exhaustive);
22
28
  //#endregion
23
29
  export { InvalidCursor, PaginationError_exports, fromConvexErrorData, fromConvexQueryError };
@@ -1 +1 @@
1
- {"version":3,"file":"PaginationError.js","names":[],"sources":["../src/PaginationError.ts"],"sourcesContent":["import { ConvexError } from \"convex/values\";\nimport type { Value } from \"convex/values\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\n/** A Convex pagination cursor that no longer describes the current query. */\nexport class InvalidCursor extends Schema.TaggedError<InvalidCursor>()(\n \"InvalidCursor\",\n {\n cause: Schema.Defect(),\n },\n) {}\n\ninterface InvalidCursorData {\n readonly isConvexSystemError: true;\n readonly paginationError: \"InvalidCursor\";\n}\n\nconst ConvexErrorIdentifier = Symbol.for(\"ConvexError\");\n\nconst isConvexError = (error: unknown): error is ConvexError<Value> =>\n error instanceof ConvexError ||\n (typeof error === \"object\" &&\n error !== null &&\n ConvexErrorIdentifier in error);\n\nconst isInvalidCursorData = (value: unknown): value is InvalidCursorData =>\n typeof value === \"object\" &&\n value !== null &&\n \"isConvexSystemError\" in value &&\n value.isConvexSystemError === true &&\n \"paginationError\" in value &&\n value.paginationError === \"InvalidCursor\";\n\nconst fromErrorMessage = (\n error: globalThis.Error,\n): Option.Option<InvalidCursor> =>\n error.message.includes(\"InvalidCursor\")\n ? Option.some(new InvalidCursor({ cause: error }))\n : Option.none();\n\n/** Recognizes an invalid-cursor error emitted by a Convex query. */\nexport const fromConvexQueryError = (\n error: unknown,\n): Option.Option<InvalidCursor> =>\n Match.value(error).pipe(\n Match.when(isConvexError, (convexError) =>\n Match.value(isInvalidCursorData(convexError.data)).pipe(\n Match.when(true, () =>\n Option.some(new InvalidCursor({ cause: error })),\n ),\n Match.when(false, () => fromErrorMessage(convexError)),\n Match.exhaustive,\n ),\n ),\n Match.when(Match.instanceOf(globalThis.Error), fromErrorMessage),\n Match.when(Match.any, () => Option.none<InvalidCursor>()),\n Match.exhaustive,\n );\n\n/** Recognizes the error data attached to Convex's invalid-cursor error. */\nexport const fromConvexErrorData = (\n errorData: unknown,\n): Option.Option<InvalidCursor> =>\n Match.value(errorData).pipe(\n Match.when(isInvalidCursorData, (cause) =>\n Option.some(new InvalidCursor({ cause })),\n ),\n Match.when(Match.any, () => Option.none<InvalidCursor>()),\n Match.exhaustive,\n );\n"],"mappings":";;;;;;;;;;;;AAOA,IAAa,gBAAb,cAAmC,OAAO,YAA2B,CAAC,CACpE,iBACA,EACE,OAAO,OAAO,OAAO,EACvB,CACF,CAAC,CAAC,CAAC;AAOH,MAAM,wBAAwB,OAAO,IAAI,aAAa;AAEtD,MAAM,iBAAiB,UACrB,iBAAiB,eAChB,OAAO,UAAU,YAChB,UAAU,QACV,yBAAyB;AAE7B,MAAM,uBAAuB,UAC3B,OAAO,UAAU,YACjB,UAAU,QACV,yBAAyB,SACzB,MAAM,wBAAwB,QAC9B,qBAAqB,SACrB,MAAM,oBAAoB;AAE5B,MAAM,oBACJ,UAEA,MAAM,QAAQ,SAAS,eAAe,IAClC,OAAO,KAAK,IAAI,cAAc,EAAE,OAAO,MAAM,CAAC,CAAC,IAC/C,OAAO,KAAK;;AAGlB,MAAa,wBACX,UAEA,MAAM,MAAM,KAAK,CAAC,CAAC,KACjB,MAAM,KAAK,gBAAgB,gBACzB,MAAM,MAAM,oBAAoB,YAAY,IAAI,CAAC,CAAC,CAAC,KACjD,MAAM,KAAK,YACT,OAAO,KAAK,IAAI,cAAc,EAAE,OAAO,MAAM,CAAC,CAAC,CACjD,GACA,MAAM,KAAK,aAAa,iBAAiB,WAAW,CAAC,GACrD,MAAM,UACR,CACF,GACA,MAAM,KAAK,MAAM,WAAW,WAAW,KAAK,GAAG,gBAAgB,GAC/D,MAAM,KAAK,MAAM,WAAW,OAAO,KAAoB,CAAC,GACxD,MAAM,UACR;;AAGF,MAAa,uBACX,cAEA,MAAM,MAAM,SAAS,CAAC,CAAC,KACrB,MAAM,KAAK,sBAAsB,UAC/B,OAAO,KAAK,IAAI,cAAc,EAAE,MAAM,CAAC,CAAC,CAC1C,GACA,MAAM,KAAK,MAAM,WAAW,OAAO,KAAoB,CAAC,GACxD,MAAM,UACR"}
1
+ {"version":3,"file":"PaginationError.js","names":[],"sources":["../src/PaginationError.ts"],"sourcesContent":["import { ConvexError } from \"convex/values\";\nimport type { Value } from \"convex/values\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\n/**\n * A Convex pagination cursor that no longer describes the current query.\n */\nexport class InvalidCursor extends Schema.TaggedError<InvalidCursor>()(\n \"InvalidCursor\",\n {\n cause: Schema.Defect(),\n },\n) {}\n\ninterface InvalidCursorData {\n readonly isConvexSystemError: true;\n readonly paginationError: \"InvalidCursor\";\n}\n\nconst ConvexErrorIdentifier = Symbol.for(\"ConvexError\");\n\nconst isConvexError = (error: unknown): error is ConvexError<Value> =>\n error instanceof ConvexError ||\n (typeof error === \"object\" &&\n error !== null &&\n ConvexErrorIdentifier in error);\n\nconst isInvalidCursorData = (value: unknown): value is InvalidCursorData =>\n typeof value === \"object\" &&\n value !== null &&\n \"isConvexSystemError\" in value &&\n value.isConvexSystemError === true &&\n \"paginationError\" in value &&\n value.paginationError === \"InvalidCursor\";\n\nconst fromErrorMessage = (\n error: globalThis.Error,\n): Option.Option<InvalidCursor> =>\n error.message.includes(\"InvalidCursor\")\n ? Option.some(new InvalidCursor({ cause: error }))\n : Option.none();\n\n/**\n * Recognizes an invalid-cursor error emitted by a Convex query.\n */\nexport const fromConvexQueryError = (\n error: unknown,\n): Option.Option<InvalidCursor> =>\n Match.value(error).pipe(\n Match.when(isConvexError, (convexError) =>\n Match.value(isInvalidCursorData(convexError.data)).pipe(\n Match.when(true, () =>\n Option.some(new InvalidCursor({ cause: error })),\n ),\n Match.when(false, () => fromErrorMessage(convexError)),\n Match.exhaustive,\n ),\n ),\n Match.when(Match.instanceOf(globalThis.Error), fromErrorMessage),\n Match.when(Match.any, () => Option.none<InvalidCursor>()),\n Match.exhaustive,\n );\n\n/**\n * Recognizes the error data attached to Convex's invalid-cursor error.\n */\nexport const fromConvexErrorData = (\n errorData: unknown,\n): Option.Option<InvalidCursor> =>\n Match.value(errorData).pipe(\n Match.when(isInvalidCursorData, (cause) =>\n Option.some(new InvalidCursor({ cause })),\n ),\n Match.when(Match.any, () => Option.none<InvalidCursor>()),\n Match.exhaustive,\n );\n"],"mappings":";;;;;;;;;;;;;;AASA,IAAa,gBAAb,cAAmC,OAAO,YAA2B,CAAC,CACpE,iBACA,EACE,OAAO,OAAO,OAAO,EACvB,CACF,CAAC,CAAC,CAAC;AAOH,MAAM,wBAAwB,OAAO,IAAI,aAAa;AAEtD,MAAM,iBAAiB,UACrB,iBAAiB,eAChB,OAAO,UAAU,YAChB,UAAU,QACV,yBAAyB;AAE7B,MAAM,uBAAuB,UAC3B,OAAO,UAAU,YACjB,UAAU,QACV,yBAAyB,SACzB,MAAM,wBAAwB,QAC9B,qBAAqB,SACrB,MAAM,oBAAoB;AAE5B,MAAM,oBACJ,UAEA,MAAM,QAAQ,SAAS,eAAe,IAClC,OAAO,KAAK,IAAI,cAAc,EAAE,OAAO,MAAM,CAAC,CAAC,IAC/C,OAAO,KAAK;;;;AAKlB,MAAa,wBACX,UAEA,MAAM,MAAM,KAAK,CAAC,CAAC,KACjB,MAAM,KAAK,gBAAgB,gBACzB,MAAM,MAAM,oBAAoB,YAAY,IAAI,CAAC,CAAC,CAAC,KACjD,MAAM,KAAK,YACT,OAAO,KAAK,IAAI,cAAc,EAAE,OAAO,MAAM,CAAC,CAAC,CACjD,GACA,MAAM,KAAK,aAAa,iBAAiB,WAAW,CAAC,GACrD,MAAM,UACR,CACF,GACA,MAAM,KAAK,MAAM,WAAW,WAAW,KAAK,GAAG,gBAAgB,GAC/D,MAAM,KAAK,MAAM,WAAW,OAAO,KAAoB,CAAC,GACxD,MAAM,UACR;;;;AAKF,MAAa,uBACX,cAEA,MAAM,MAAM,SAAS,CAAC,CAAC,KACrB,MAAM,KAAK,sBAAsB,UAC/B,OAAO,KAAK,IAAI,cAAc,EAAE,MAAM,CAAC,CAAC,CAC1C,GACA,MAAM,KAAK,MAAM,WAAW,OAAO,KAAoB,CAAC,GACxD,MAAM,UACR"}
@@ -1,12 +1,12 @@
1
1
  import * as Schema from "effect/Schema";
2
2
  /**
3
- * Schema for the `paginationOpts` argument that every paginated query
4
- * receives. Mirrors `paginationOptsValidator` from `convex/server`.
3
+ * Schema for the `paginationOpts` argument that every paginated query receives.
4
+ * Mirrors `paginationOptsValidator` from `convex/server`.
5
5
  *
6
6
  * Use this as the `paginationOpts` field of a paginated query's args schema.
7
7
  * Beyond `numItems` and `cursor`, Convex's pagination protocol sends the
8
8
  * optional fields (`endCursor`, `id`, `maximumRowsRead`, `maximumBytesRead`)
9
- * with real requests — most notably `usePaginatedQuery` from `convex/react`
9
+ * with real requests—most notably `usePaginatedQuery` from `convex/react`
10
10
  * always includes `id`, and includes `endCursor` when splitting pages.
11
11
  * Declaring them is required for the generated Convex argument validator to
12
12
  * accept those requests and for the fields to survive decoding and reach
@@ -3,13 +3,13 @@ import * as Schema from "effect/Schema";
3
3
  //#region src/PaginationOptions.ts
4
4
  var PaginationOptions_exports = /* @__PURE__ */ __exportAll({ PaginationOptions: () => PaginationOptions });
5
5
  /**
6
- * Schema for the `paginationOpts` argument that every paginated query
7
- * receives. Mirrors `paginationOptsValidator` from `convex/server`.
6
+ * Schema for the `paginationOpts` argument that every paginated query receives.
7
+ * Mirrors `paginationOptsValidator` from `convex/server`.
8
8
  *
9
9
  * Use this as the `paginationOpts` field of a paginated query's args schema.
10
10
  * Beyond `numItems` and `cursor`, Convex's pagination protocol sends the
11
11
  * optional fields (`endCursor`, `id`, `maximumRowsRead`, `maximumBytesRead`)
12
- * with real requests — most notably `usePaginatedQuery` from `convex/react`
12
+ * with real requests—most notably `usePaginatedQuery` from `convex/react`
13
13
  * always includes `id`, and includes `endCursor` when splitting pages.
14
14
  * Declaring them is required for the generated Convex argument validator to
15
15
  * accept those requests and for the fields to survive decoding and reach
@@ -1 +1 @@
1
- {"version":3,"file":"PaginationOptions.js","names":[],"sources":["../src/PaginationOptions.ts"],"sourcesContent":["import * as Schema from \"effect/Schema\";\n\n/**\n * Schema for the `paginationOpts` argument that every paginated query\n * receives. Mirrors `paginationOptsValidator` from `convex/server`.\n *\n * Use this as the `paginationOpts` field of a paginated query's args schema.\n * Beyond `numItems` and `cursor`, Convex's pagination protocol sends the\n * optional fields (`endCursor`, `id`, `maximumRowsRead`, `maximumBytesRead`)\n * with real requests — most notably `usePaginatedQuery` from `convex/react`\n * always includes `id`, and includes `endCursor` when splitting pages.\n * Declaring them is required for the generated Convex argument validator to\n * accept those requests and for the fields to survive decoding and reach\n * `paginate`.\n */\nexport const PaginationOptions = Schema.Struct({\n numItems: Schema.Finite,\n cursor: Schema.Union([Schema.String, Schema.Null]),\n endCursor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n id: Schema.optionalKey(Schema.Finite),\n maximumRowsRead: Schema.optionalKey(Schema.Finite),\n maximumBytesRead: Schema.optionalKey(Schema.Finite),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AAeA,MAAa,oBAAoB,OAAO,OAAO;CAC7C,UAAU,OAAO;CACjB,QAAQ,OAAO,MAAM,CAAC,OAAO,QAAQ,OAAO,IAAI,CAAC;CACjD,WAAW,OAAO,YAAY,OAAO,MAAM,CAAC,OAAO,QAAQ,OAAO,IAAI,CAAC,CAAC;CACxE,IAAI,OAAO,YAAY,OAAO,MAAM;CACpC,iBAAiB,OAAO,YAAY,OAAO,MAAM;CACjD,kBAAkB,OAAO,YAAY,OAAO,MAAM;AACpD,CAAC"}
1
+ {"version":3,"file":"PaginationOptions.js","names":[],"sources":["../src/PaginationOptions.ts"],"sourcesContent":["import * as Schema from \"effect/Schema\";\n\n/**\n * Schema for the `paginationOpts` argument that every paginated query receives.\n * Mirrors `paginationOptsValidator` from `convex/server`.\n *\n * Use this as the `paginationOpts` field of a paginated query's args schema.\n * Beyond `numItems` and `cursor`, Convex's pagination protocol sends the\n * optional fields (`endCursor`, `id`, `maximumRowsRead`, `maximumBytesRead`)\n * with real requests—most notably `usePaginatedQuery` from `convex/react`\n * always includes `id`, and includes `endCursor` when splitting pages.\n * Declaring them is required for the generated Convex argument validator to\n * accept those requests and for the fields to survive decoding and reach\n * `paginate`.\n */\nexport const PaginationOptions = Schema.Struct({\n numItems: Schema.Finite,\n cursor: Schema.Union([Schema.String, Schema.Null]),\n endCursor: Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])),\n id: Schema.optionalKey(Schema.Finite),\n maximumRowsRead: Schema.optionalKey(Schema.Finite),\n maximumBytesRead: Schema.optionalKey(Schema.Finite),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AAeA,MAAa,oBAAoB,OAAO,OAAO;CAC7C,UAAU,OAAO;CACjB,QAAQ,OAAO,MAAM,CAAC,OAAO,QAAQ,OAAO,IAAI,CAAC;CACjD,WAAW,OAAO,YAAY,OAAO,MAAM,CAAC,OAAO,QAAQ,OAAO,IAAI,CAAC,CAAC;CACxE,IAAI,OAAO,YAAY,OAAO,MAAM;CACpC,iBAAiB,OAAO,YAAY,OAAO,MAAM;CACjD,kBAAkB,OAAO,YAAY,OAAO,MAAM;AACpD,CAAC"}