kitcn 0.0.1 → 0.12.1

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 (93) hide show
  1. package/bin/intent.js +3 -0
  2. package/dist/aggregate/index.d.ts +388 -0
  3. package/dist/aggregate/index.js +37 -0
  4. package/dist/api-entry-BckXqaLb.js +66 -0
  5. package/dist/auth/client/index.d.ts +37 -0
  6. package/dist/auth/client/index.js +217 -0
  7. package/dist/auth/config/index.d.ts +45 -0
  8. package/dist/auth/config/index.js +24 -0
  9. package/dist/auth/generated/index.d.ts +2 -0
  10. package/dist/auth/generated/index.js +3 -0
  11. package/dist/auth/http/index.d.ts +64 -0
  12. package/dist/auth/http/index.js +461 -0
  13. package/dist/auth/index.d.ts +221 -0
  14. package/dist/auth/index.js +1398 -0
  15. package/dist/auth/nextjs/index.d.ts +50 -0
  16. package/dist/auth/nextjs/index.js +81 -0
  17. package/dist/auth-store-Cljlmdmi.js +197 -0
  18. package/dist/builder-CBdG5W6A.js +1974 -0
  19. package/dist/caller-factory-cTXNvYdz.js +216 -0
  20. package/dist/cli.mjs +13264 -0
  21. package/dist/codegen-lF80HSWu.mjs +3416 -0
  22. package/dist/context-utils-HPC5nXzx.d.ts +17 -0
  23. package/dist/create-schema-odyF4kCy.js +156 -0
  24. package/dist/create-schema-orm-DOyiNDCx.js +246 -0
  25. package/dist/crpc/index.d.ts +105 -0
  26. package/dist/crpc/index.js +169 -0
  27. package/dist/customFunctions-C0voKmtx.js +144 -0
  28. package/dist/error-BZEnI7Sq.js +41 -0
  29. package/dist/generated-contract-disabled-Cih4eITO.js +50 -0
  30. package/dist/generated-contract-disabled-D-sOFy92.d.ts +354 -0
  31. package/dist/http-types-DqJubRPJ.d.ts +292 -0
  32. package/dist/meta-utils-0Pu0Nrap.js +117 -0
  33. package/dist/middleware-BUybuv9n.d.ts +34 -0
  34. package/dist/middleware-C2qTZ3V7.js +84 -0
  35. package/dist/orm/index.d.ts +17 -0
  36. package/dist/orm/index.js +10713 -0
  37. package/dist/plugins/index.d.ts +2 -0
  38. package/dist/plugins/index.js +3 -0
  39. package/dist/procedure-caller-DtxLmGwA.d.ts +1467 -0
  40. package/dist/procedure-caller-MWcxhQDv.js +349 -0
  41. package/dist/query-context-B8o6-8kC.js +1518 -0
  42. package/dist/query-context-CFZqIvD7.d.ts +42 -0
  43. package/dist/query-options-Dw7cOyXl.js +121 -0
  44. package/dist/ratelimit/index.d.ts +269 -0
  45. package/dist/ratelimit/index.js +856 -0
  46. package/dist/ratelimit/react/index.d.ts +76 -0
  47. package/dist/ratelimit/react/index.js +183 -0
  48. package/dist/react/index.d.ts +1284 -0
  49. package/dist/react/index.js +2526 -0
  50. package/dist/rsc/index.d.ts +276 -0
  51. package/dist/rsc/index.js +233 -0
  52. package/dist/runtime-CtvJPkur.js +2453 -0
  53. package/dist/server/index.d.ts +5 -0
  54. package/dist/server/index.js +6 -0
  55. package/dist/solid/index.d.ts +1221 -0
  56. package/dist/solid/index.js +2940 -0
  57. package/dist/transformer-DtDhR3Lc.js +194 -0
  58. package/dist/types-BTb_4BaU.d.ts +42 -0
  59. package/dist/types-BiJE7qxR.d.ts +4 -0
  60. package/dist/types-DEJpkIhw.d.ts +88 -0
  61. package/dist/types-HhO_R6pd.d.ts +213 -0
  62. package/dist/validators-B7oIJCAp.js +279 -0
  63. package/dist/validators-vzRKjBJC.d.ts +88 -0
  64. package/dist/watcher.mjs +96 -0
  65. package/dist/where-clause-compiler-DdjN63Io.d.ts +4756 -0
  66. package/package.json +107 -34
  67. package/skills/convex/SKILL.md +486 -0
  68. package/skills/convex/references/features/aggregates.md +353 -0
  69. package/skills/convex/references/features/auth-admin.md +446 -0
  70. package/skills/convex/references/features/auth-organizations.md +1141 -0
  71. package/skills/convex/references/features/auth-polar.md +579 -0
  72. package/skills/convex/references/features/auth.md +470 -0
  73. package/skills/convex/references/features/create-plugins.md +153 -0
  74. package/skills/convex/references/features/http.md +676 -0
  75. package/skills/convex/references/features/migrations.md +162 -0
  76. package/skills/convex/references/features/orm.md +1166 -0
  77. package/skills/convex/references/features/react.md +657 -0
  78. package/skills/convex/references/features/scheduling.md +267 -0
  79. package/skills/convex/references/features/testing.md +209 -0
  80. package/skills/convex/references/setup/auth.md +501 -0
  81. package/skills/convex/references/setup/biome.md +190 -0
  82. package/skills/convex/references/setup/doc-guidelines.md +145 -0
  83. package/skills/convex/references/setup/index.md +761 -0
  84. package/skills/convex/references/setup/next.md +116 -0
  85. package/skills/convex/references/setup/react.md +175 -0
  86. package/skills/convex/references/setup/server.md +473 -0
  87. package/skills/convex/references/setup/start.md +67 -0
  88. package/LICENSE +0 -21
  89. package/README.md +0 -0
  90. package/dist/index.d.mts +0 -5
  91. package/dist/index.d.mts.map +0 -1
  92. package/dist/index.mjs +0 -6
  93. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,4756 @@
1
+ import { a as ReturnTypeOrValue, i as KnownKeysOnly, o as Simplify$1, t as Assume } from "./types-BTb_4BaU.js";
2
+ import * as convex_values0 from "convex/values";
3
+ import { GenericId, Validator, Value } from "convex/values";
4
+ import { DefineSchemaOptions, FilterExpression, GenericDatabaseReader, GenericDatabaseWriter, GenericIndexFields, GenericSchema, GenericTableIndexes, GenericTableSearchIndexes, GenericTableVectorIndexes, IndexRange, IndexRangeBuilder, SchedulableFunctionReference, Scheduler, SchemaDefinition, TableDefinition, VectorFilterBuilder, internalActionGeneric, internalMutationGeneric } from "convex/server";
5
+
6
+ //#region src/orm/builders/column-builder.d.ts
7
+ /**
8
+ * Core data types supported by column builders
9
+ * Maps to Convex types: string, number (float64), boolean, bigint (int64), vector
10
+ */
11
+ type ColumnDataType = 'string' | 'number' | 'boolean' | 'bigint' | 'bytes' | 'any' | 'vector';
12
+ type ForeignKeyAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';
13
+ interface ColumnReferenceConfig {
14
+ name?: string;
15
+ onDelete?: ForeignKeyAction;
16
+ onUpdate?: ForeignKeyAction;
17
+ }
18
+ /**
19
+ * Base configuration for all column builders
20
+ * Stores type-level metadata extracted by TypeScript
21
+ * Matches Drizzle's ColumnBuilderBaseConfig structure
22
+ */
23
+ interface ColumnBuilderBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> {
24
+ columnType: TColumnType;
25
+ data: unknown;
26
+ dataType: TDataType;
27
+ driverParam: unknown;
28
+ enumValues: string[] | undefined;
29
+ name: string;
30
+ }
31
+ /**
32
+ * Runtime configuration stored in builder instance
33
+ * Updated by chaining methods (.notNull(), .default(), etc.)
34
+ */
35
+ interface ColumnBuilderRuntimeConfig<TData> {
36
+ columnType: string;
37
+ dataType: string;
38
+ default: TData | undefined;
39
+ defaultFn?: (() => unknown) | undefined;
40
+ foreignKeyConfigs: {
41
+ ref: () => ColumnBuilderBase;
42
+ config: ColumnReferenceConfig;
43
+ }[];
44
+ hasDefault: boolean;
45
+ isUnique: boolean;
46
+ name: string;
47
+ notNull: boolean;
48
+ onUpdateFn?: (() => unknown) | undefined;
49
+ primaryKey: boolean;
50
+ referenceTable?: string;
51
+ table?: unknown;
52
+ tableName?: string;
53
+ uniqueName?: string;
54
+ uniqueNulls?: 'distinct' | 'not distinct';
55
+ }
56
+ /**
57
+ * Phantom type configuration - never instantiated, just for TypeScript
58
+ * Tracks type-level state through method chaining
59
+ * Matches Drizzle's exact structure
60
+ */
61
+ type ColumnBuilderTypeConfig<T extends ColumnBuilderBaseConfig<ColumnDataType, string>, TTypeConfig extends object> = Simplify$1<{
62
+ brand: 'ColumnBuilder';
63
+ name: T['name'];
64
+ dataType: T['dataType'];
65
+ columnType: T['columnType'];
66
+ data: T['data'];
67
+ driverParam: T['driverParam'];
68
+ notNull: T extends {
69
+ notNull: infer U;
70
+ } ? U : boolean;
71
+ hasDefault: T extends {
72
+ hasDefault: infer U;
73
+ } ? U : boolean;
74
+ isPrimaryKey: T extends {
75
+ isPrimaryKey: infer U;
76
+ } ? U : boolean;
77
+ isUnique: T extends {
78
+ isUnique: infer U;
79
+ } ? U : boolean;
80
+ enumValues: T['enumValues'];
81
+ } & TTypeConfig>;
82
+ /**
83
+ * entityKind symbol for runtime type checking
84
+ * Following Drizzle's pattern for type guards
85
+ */
86
+ declare const entityKind: unique symbol;
87
+ interface DrizzleEntity {
88
+ [entityKind]: string;
89
+ }
90
+ /**
91
+ * ColumnBuilderBase interface - defines the phantom _ property
92
+ * This interface is crucial for proper type intersection with NotNull/HasDefault/etc.
93
+ */
94
+ interface ColumnBuilderBase<T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>, TTypeConfig extends object = object> {
95
+ _: ColumnBuilderTypeConfig<T, TTypeConfig>;
96
+ }
97
+ /**
98
+ * Use as the return type for self-referencing `.references()` callbacks.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * parentId: text().references((): AnyColumn => commentsTable.id, { onDelete: 'cascade' })
103
+ * ```
104
+ */
105
+ type AnyColumn = ColumnBuilderBase;
106
+ /**
107
+ * Base ColumnBuilder abstract class
108
+ *
109
+ * All column builders inherit from this class.
110
+ * Implements chaining methods and stores runtime config.
111
+ */
112
+ declare abstract class ColumnBuilder<T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>, TRuntimeConfig extends object = object, TTypeConfig extends object = object> implements ColumnBuilderBase<T, TTypeConfig>, DrizzleEntity {
113
+ static readonly [entityKind]: string;
114
+ readonly [entityKind]: string;
115
+ /**
116
+ * Phantom property - never instantiated, just for types
117
+ * Accumulates type info through method chaining
118
+ */
119
+ _: ColumnBuilderTypeConfig<T, TTypeConfig>;
120
+ /**
121
+ * Runtime configuration - actual mutable state
122
+ */
123
+ protected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;
124
+ constructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']);
125
+ /**
126
+ * Mark column as NOT NULL
127
+ * Returns type-branded instance with notNull: true
128
+ */
129
+ notNull(): NotNull<this>;
130
+ /**
131
+ * Override the TypeScript type for this column.
132
+ * Mirrors Drizzle's $type() (type-only, no runtime validation changes).
133
+ */
134
+ $type<TType>(): $Type<this, TType>;
135
+ /**
136
+ * Set default value for column
137
+ * Makes field optional on insert
138
+ */
139
+ default(value: ColumnData<this>): HasDefault<this>;
140
+ /**
141
+ * Set default function for column (runtime evaluated on insert).
142
+ * Mirrors Drizzle's $defaultFn() / $default().
143
+ */
144
+ $defaultFn(fn: () => ColumnData<this>): HasDefault<this>;
145
+ /**
146
+ * Alias of $defaultFn for Drizzle parity.
147
+ */
148
+ $default(fn: () => ColumnData<this>): HasDefault<this>;
149
+ /**
150
+ * Set on-update function for column (runtime evaluated on update).
151
+ * Mirrors Drizzle's $onUpdateFn() / $onUpdate().
152
+ */
153
+ $onUpdateFn(fn: () => ColumnData<this>): HasDefault<this>;
154
+ /**
155
+ * Alias of $onUpdateFn for Drizzle parity.
156
+ */
157
+ $onUpdate(fn: () => ColumnData<this>): HasDefault<this>;
158
+ /**
159
+ * Mark column as primary key
160
+ * Implies NOT NULL
161
+ */
162
+ primaryKey(): IsPrimaryKey<NotNull<this>>;
163
+ /**
164
+ * Mark column as UNIQUE
165
+ * Mirrors Drizzle column unique API
166
+ */
167
+ unique(name?: string, config?: {
168
+ nulls: 'distinct' | 'not distinct';
169
+ }): IsUnique<this>;
170
+ /**
171
+ * Define a foreign key reference
172
+ * Mirrors Drizzle column references() API
173
+ */
174
+ references(ref: () => ColumnBuilderBase, config?: ColumnReferenceConfig): this;
175
+ /**
176
+ * Build method - must be implemented by subclasses
177
+ * Compiles builder to Convex validator
178
+ *
179
+ * @returns Convex validator for this column
180
+ */
181
+ abstract build(): Validator<any, any, any>;
182
+ }
183
+ /**
184
+ * Type utilities for phantom type branding
185
+ * Drizzle's EXACT pattern - verified working
186
+ */
187
+ /**
188
+ * Brand a builder as NOT NULL
189
+ * Removes | null from extracted type
190
+ */
191
+ type NotNull<T extends ColumnBuilderBase> = T & {
192
+ _: {
193
+ notNull: true;
194
+ };
195
+ };
196
+ /**
197
+ * Brand a builder with a table name
198
+ * Used for relation typing (fields/references must match table)
199
+ */
200
+ type ColumnBuilderWithTableName<T extends ColumnBuilderBase, TTableName extends string> = T & {
201
+ _: {
202
+ tableName: TTableName;
203
+ };
204
+ };
205
+ /**
206
+ * Brand a builder as UNIQUE
207
+ */
208
+ type IsUnique<T extends ColumnBuilderBase> = T & {
209
+ _: {
210
+ isUnique: true;
211
+ };
212
+ };
213
+ /**
214
+ * Brand a builder with a default value
215
+ * Makes field optional on insert
216
+ */
217
+ type HasDefault<T extends ColumnBuilderBase> = T & {
218
+ _: {
219
+ hasDefault: true;
220
+ };
221
+ };
222
+ type ColumnData<TBuilder extends ColumnBuilderBase> = TBuilder['_'] extends {
223
+ $type: infer TType;
224
+ } ? TType : TBuilder['_']['data'];
225
+ type $Type<TBuilder extends ColumnBuilderBase, TType> = TBuilder & {
226
+ _: {
227
+ $type: TType;
228
+ };
229
+ };
230
+ /**
231
+ * Brand a builder as a primary key
232
+ * Implies NOT NULL
233
+ */
234
+ type IsPrimaryKey<T extends ColumnBuilderBase> = T & {
235
+ _: {
236
+ isPrimaryKey: true;
237
+ notNull: true;
238
+ };
239
+ };
240
+ //#endregion
241
+ //#region src/orm/filter-expression.d.ts
242
+ /**
243
+ * Extract TypeScript type from a column builder
244
+ * Uses phantom `_` property to get type info
245
+ */
246
+ type ColumnToType<TBuilder extends ColumnBuilder<any, any, any>> = TBuilder['_']['notNull'] extends true ? TBuilder['_']['data'] : TBuilder['_']['data'] | null;
247
+ /**
248
+ * Unique symbol for FilterExpression brand
249
+ * Prevents structural typing - only expressions created by factory functions are valid
250
+ */
251
+ declare const FilterExpressionBrand: unique symbol;
252
+ /**
253
+ * Base filter expression interface
254
+ * All filter expressions (binary, logical, unary) implement this interface
255
+ *
256
+ * @template TValue - The TypeScript type this expression evaluates to
257
+ */
258
+ interface FilterExpression$1<_TValue = boolean> {
259
+ /** Accept visitor for traversal */
260
+ accept<R>(visitor: ExpressionVisitor<R>): R;
261
+ /** Expression operands (FieldReference, values, or nested expressions) */
262
+ readonly operands: readonly any[];
263
+ /** Operator string (eq, and, not, etc.) */
264
+ readonly operator: string;
265
+ /** Expression type discriminator */
266
+ readonly type: 'binary' | 'logical' | 'unary';
267
+ /** Brand symbol for nominal typing */
268
+ readonly [FilterExpressionBrand]: true;
269
+ }
270
+ /**
271
+ * Binary operator expression (eq, ne, gt, gte, lt, lte, inArray, notInArray)
272
+ * Compares field to value: field eq value
273
+ *
274
+ * @template TField - Field type being compared
275
+ */
276
+ interface BinaryExpression<TField = any> extends FilterExpression$1<boolean> {
277
+ /** [field, value] or [field, array] for inArray/notInArray */
278
+ readonly operands: readonly [FieldReference<TField>, TField | TField[]];
279
+ readonly operator: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'inArray' | 'notInArray' | 'arrayContains' | 'arrayContained' | 'arrayOverlaps' | 'like' | 'ilike' | 'notLike' | 'notIlike' | 'startsWith' | 'endsWith' | 'contains';
280
+ readonly type: 'binary';
281
+ }
282
+ /**
283
+ * Logical operator expression (and, or)
284
+ * Combines multiple filter expressions
285
+ */
286
+ interface LogicalExpression extends FilterExpression$1<boolean> {
287
+ /** Array of nested filter expressions */
288
+ readonly operands: readonly FilterExpression$1<boolean>[];
289
+ readonly operator: 'and' | 'or';
290
+ readonly type: 'logical';
291
+ }
292
+ /**
293
+ * Unary operator expression (not, isNull, isNotNull)
294
+ * Negates or checks null state of an expression
295
+ */
296
+ interface UnaryExpression extends FilterExpression$1<boolean> {
297
+ /** Single nested filter expression or field reference for null checks */
298
+ readonly operands: readonly [FilterExpression$1<boolean> | FieldReference<any>];
299
+ readonly operator: 'not' | 'isNull' | 'isNotNull';
300
+ readonly type: 'unary';
301
+ }
302
+ /**
303
+ * CRITICAL: FieldReference abstraction
304
+ *
305
+ * Decouples filter expressions from M2 table configuration
306
+ * Allows filter expressions to reference fields without knowing about validators
307
+ *
308
+ * @template TValue - TypeScript type of the field
309
+ */
310
+ interface FieldReference<TValue = unknown> {
311
+ readonly __brand: 'FieldReference';
312
+ /** Phantom type for type inference - not present at runtime */
313
+ readonly __type?: TValue;
314
+ readonly fieldName: string;
315
+ }
316
+ /**
317
+ * Create a field reference
318
+ * Used internally by operator functions
319
+ */
320
+ declare function fieldRef<T>(fieldName: string): FieldReference<T>;
321
+ /**
322
+ * Type guard for FieldReference
323
+ */
324
+ declare function isFieldReference(value: any): value is FieldReference<any>;
325
+ /**
326
+ * Column wrapper - combines builder with column name
327
+ * Used in where clause to pass column objects to operators
328
+ * Following Drizzle's pattern: operators receive columns, not extracted types
329
+ *
330
+ * @template TBuilder - The column builder type
331
+ * @template TName - The column name (string literal)
332
+ */
333
+ interface Column<TBuilder extends ColumnBuilder<any, any, any> = any, TName extends string = string> {
334
+ readonly builder: TBuilder;
335
+ readonly columnName: TName;
336
+ }
337
+ type ColumnArgument<TBuilder extends ColumnBuilder<any, any, any>> = Column<TBuilder, string> | TBuilder;
338
+ /**
339
+ * Create a column wrapper
340
+ * Used internally by query builder's _createColumnProxies
341
+ */
342
+ /**
343
+ * Expression visitor interface for tree traversal
344
+ * Extensible pattern - add new visit methods without modifying expression classes
345
+ *
346
+ * @template R - Return type of visit operations
347
+ */
348
+ interface ExpressionVisitor<R = void> {
349
+ visitBinary(expr: BinaryExpression): R;
350
+ visitLogical(expr: LogicalExpression): R;
351
+ visitUnary(expr: UnaryExpression): R;
352
+ }
353
+ /**
354
+ * Equality operator: field == value
355
+ *
356
+ * @example
357
+ * const filter = eq(cols.name, 'Alice');
358
+ */
359
+ declare function eq<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, value: ColumnToType<TBuilder>): BinaryExpression<ColumnToType<TBuilder>>;
360
+ /**
361
+ * Not equal operator: field != value
362
+ */
363
+ declare function ne<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, value: ColumnToType<TBuilder>): BinaryExpression<ColumnToType<TBuilder>>;
364
+ /**
365
+ * Greater than operator: field > value
366
+ */
367
+ declare function gt<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, value: ColumnToType<TBuilder>): BinaryExpression<ColumnToType<TBuilder>>;
368
+ /**
369
+ * Greater than or equal operator: field >= value
370
+ */
371
+ declare function gte<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, value: ColumnToType<TBuilder>): BinaryExpression<ColumnToType<TBuilder>>;
372
+ /**
373
+ * Less than operator: field < value
374
+ */
375
+ declare function lt<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, value: ColumnToType<TBuilder>): BinaryExpression<ColumnToType<TBuilder>>;
376
+ /**
377
+ * Less than or equal operator: field <= value
378
+ */
379
+ declare function lte<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, value: ColumnToType<TBuilder>): BinaryExpression<ColumnToType<TBuilder>>;
380
+ /**
381
+ * Between operator: field BETWEEN min AND max (inclusive)
382
+ *
383
+ * Sugar for and(gte(field, min), lte(field, max)).
384
+ */
385
+ declare function between<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, min: ColumnToType<TBuilder>, max: ColumnToType<TBuilder>): FilterExpression$1<boolean>;
386
+ /**
387
+ * Not between operator: field < min OR field > max
388
+ *
389
+ * Sugar for or(lt(field, min), gt(field, max)).
390
+ */
391
+ declare function notBetween<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, min: ColumnToType<TBuilder>, max: ColumnToType<TBuilder>): FilterExpression$1<boolean>;
392
+ /**
393
+ * LIKE operator: SQL-style pattern matching with % wildcards
394
+ * Note: Implemented as post-filter (Convex has no native LIKE)
395
+ *
396
+ * @example
397
+ * const users = await db.query.users.findMany({
398
+ * where: like(users.name, '%alice%'),
399
+ * });
400
+ */
401
+ declare function like<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, pattern: string): BinaryExpression<string>;
402
+ /**
403
+ * ILIKE operator: Case-insensitive LIKE
404
+ * Note: Implemented as post-filter (Convex has no native LIKE)
405
+ *
406
+ * @example
407
+ * const users = await db.query.users.findMany({
408
+ * where: ilike(users.name, '%ALICE%'),
409
+ * });
410
+ */
411
+ declare function ilike<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, pattern: string): BinaryExpression<string>;
412
+ /**
413
+ * startsWith operator: Check if string starts with prefix
414
+ * Optimized for prefix matching
415
+ *
416
+ * @example
417
+ * const users = await db.query.users.findMany({
418
+ * where: startsWith(users.email, 'admin@'),
419
+ * });
420
+ */
421
+ declare function startsWith<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, prefix: string): BinaryExpression<string>;
422
+ /**
423
+ * endsWith operator: Check if string ends with suffix
424
+ *
425
+ * @example
426
+ * const users = await db.query.users.findMany({
427
+ * where: endsWith(users.email, '@example.com'),
428
+ * });
429
+ */
430
+ declare function endsWith<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, suffix: string): BinaryExpression<string>;
431
+ /**
432
+ * contains operator: Check if string contains substring
433
+ * Can use search index for optimization when available
434
+ *
435
+ * @example
436
+ * const posts = await db.query.posts.findMany({
437
+ * where: contains(posts.title, 'javascript'),
438
+ * });
439
+ */
440
+ declare function contains<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, substring: string): BinaryExpression<string>;
441
+ /**
442
+ * Logical AND: all expressions must be true
443
+ * Filters out undefined expressions (following Drizzle pattern)
444
+ *
445
+ * @example
446
+ * const filter = and(
447
+ * eq(fieldRef('age'), 25),
448
+ * eq(fieldRef('name'), 'Alice')
449
+ * );
450
+ */
451
+ declare function and(...expressions: (FilterExpression$1<boolean> | undefined)[]): LogicalExpression | undefined;
452
+ /**
453
+ * Logical OR: at least one expression must be true
454
+ * Filters out undefined expressions (following Drizzle pattern)
455
+ *
456
+ * @example
457
+ * const filter = or(
458
+ * eq(fieldRef('status'), 'active'),
459
+ * eq(fieldRef('status'), 'pending')
460
+ * );
461
+ */
462
+ declare function or(...expressions: (FilterExpression$1<boolean> | undefined)[]): LogicalExpression | undefined;
463
+ /**
464
+ * Logical NOT: negates expression
465
+ *
466
+ * @example
467
+ * const filter = not(eq(fieldRef('isDeleted'), true));
468
+ */
469
+ declare function not(expression: FilterExpression$1<boolean>): UnaryExpression;
470
+ /**
471
+ * Array membership operator: field IN array
472
+ *
473
+ * @example
474
+ * const filter = inArray(cols.status, ['active', 'pending']);
475
+ */
476
+ declare function inArray<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, values: readonly ColumnToType<TBuilder>[]): BinaryExpression<ColumnToType<TBuilder>>;
477
+ /**
478
+ * Array exclusion operator: field NOT IN array
479
+ * Validates array is non-empty at construction time
480
+ *
481
+ * @example
482
+ * const filter = notInArray(cols.role, ['admin', 'moderator']);
483
+ */
484
+ declare function notInArray<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>, values: readonly ColumnToType<TBuilder>[]): BinaryExpression<ColumnToType<TBuilder>>;
485
+ /**
486
+ * Null check operator: field IS NULL
487
+ * Type validation: Only works with nullable fields
488
+ *
489
+ * @example
490
+ * const filter = isNull(cols.deletedAt);
491
+ */
492
+ declare function isNull<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>): UnaryExpression;
493
+ /**
494
+ * Not null check operator: field IS NOT NULL
495
+ * Type validation: Only works with nullable fields
496
+ *
497
+ * @example
498
+ * const filter = isNotNull(cols.deletedAt);
499
+ */
500
+ declare function isNotNull<TBuilder extends ColumnBuilder<any, any, any>>(col: ColumnArgument<TBuilder>): UnaryExpression;
501
+ //#endregion
502
+ //#region src/orm/builders/system-fields.d.ts
503
+ /**
504
+ * System ID field builder (public id, internal _id)
505
+ * Always present, always non-null
506
+ */
507
+ type ConvexSystemIdConfig = ColumnBuilderBaseConfig<'string', 'ConvexSystemId'> & {
508
+ data: string;
509
+ driverParam: string;
510
+ enumValues: undefined;
511
+ };
512
+ declare class ConvexSystemIdBuilder<_TTableName extends string> extends ColumnBuilder<ConvexSystemIdConfig, {}, {
513
+ notNull: true;
514
+ }> {
515
+ static readonly [entityKind]: string;
516
+ readonly [entityKind]: string;
517
+ constructor();
518
+ build(): convex_values0.VString<string, "required">;
519
+ /**
520
+ * Convex validator - runtime access
521
+ * System fields use v.string() for _id
522
+ */
523
+ get convexValidator(): convex_values0.VString<string, "required">;
524
+ }
525
+ /**
526
+ * System creation time field builder (_creationTime)
527
+ * Always present, always non-null, always a number (milliseconds)
528
+ */
529
+ type ConvexSystemCreationTimeConfig = ColumnBuilderBaseConfig<'number', 'ConvexSystemCreationTime'> & {
530
+ data: number;
531
+ driverParam: number;
532
+ enumValues: undefined;
533
+ };
534
+ declare class ConvexSystemCreationTimeBuilder extends ColumnBuilder<ConvexSystemCreationTimeConfig, {}, {
535
+ notNull: true;
536
+ }> {
537
+ static readonly [entityKind]: string;
538
+ readonly [entityKind]: string;
539
+ constructor();
540
+ build(): convex_values0.VFloat64<number, "required">;
541
+ /**
542
+ * Convex validator - runtime access
543
+ * System fields use v.number() for _creationTime
544
+ */
545
+ get convexValidator(): convex_values0.VFloat64<number, "required">;
546
+ }
547
+ type ConvexSystemCreatedAtConfig = ColumnBuilderBaseConfig<'number', 'ConvexSystemCreatedAt'> & {
548
+ data: number;
549
+ driverParam: number;
550
+ enumValues: undefined;
551
+ };
552
+ declare class ConvexSystemCreatedAtBuilder extends ColumnBuilder<ConvexSystemCreatedAtConfig, {}, {
553
+ notNull: true;
554
+ }> {
555
+ static readonly [entityKind]: string;
556
+ readonly [entityKind]: string;
557
+ constructor();
558
+ build(): convex_values0.VFloat64<number, "required">;
559
+ get convexValidator(): convex_values0.VFloat64<number, "required">;
560
+ }
561
+ /**
562
+ * Create system field builders for a table
563
+ * These are automatically added to every ConvexTable
564
+ */
565
+ type SystemFields<TName extends string> = {
566
+ id: ColumnBuilderWithTableName<ConvexSystemIdBuilder<TName>, TName>;
567
+ };
568
+ type InternalSystemFields<TName extends string> = {
569
+ _creationTime: ColumnBuilderWithTableName<ConvexSystemCreationTimeBuilder, TName>;
570
+ };
571
+ type SystemFieldAliases<TName extends string, TColumns extends Record<string, unknown> = {}> = 'createdAt' extends keyof TColumns ? {} : {
572
+ createdAt: ColumnBuilderWithTableName<ConvexSystemCreatedAtBuilder, TName>;
573
+ };
574
+ type SystemFieldsWithAliases<TName extends string, TColumns extends Record<string, unknown> = {}> = SystemFields<TName> & InternalSystemFields<TName> & SystemFieldAliases<TName, TColumns>;
575
+ //#endregion
576
+ //#region src/orm/symbols.d.ts
577
+ /**
578
+ * Symbol-based metadata storage for ORM tables
579
+ * Following Drizzle's pattern for type-safe runtime introspection
580
+ */
581
+ type OrmRuntimeDefaults = {
582
+ defaultLimit?: number;
583
+ countBackfillBatchSize?: number;
584
+ relationFanOutMaxKeys?: number;
585
+ aggregateCartesianMaxKeys?: number;
586
+ aggregateWorkBudget?: number;
587
+ mutationBatchSize?: number;
588
+ mutationLeafBatchSize?: number;
589
+ mutationMaxRows?: number;
590
+ mutationMaxBytesPerBatch?: number;
591
+ mutationScheduleCallCap?: number;
592
+ mutationExecutionMode?: 'sync' | 'async';
593
+ mutationAsyncDelayMs?: number;
594
+ };
595
+ type OrmDeleteMode = 'hard' | 'soft' | 'scheduled';
596
+ type OrmTableDeleteConfig = {
597
+ mode: OrmDeleteMode;
598
+ delayMs?: number;
599
+ };
600
+ type TablePolymorphicVariantRuntime = {
601
+ fieldNames: readonly string[];
602
+ requiredFieldNames: readonly string[];
603
+ };
604
+ type TablePolymorphicConfigRuntime = {
605
+ discriminator: string;
606
+ alias: string;
607
+ generatedFieldNames: readonly string[];
608
+ variants: Readonly<Record<string, TablePolymorphicVariantRuntime>>;
609
+ };
610
+ declare const TableName: unique symbol;
611
+ declare const Columns: unique symbol;
612
+ declare const Brand: unique symbol;
613
+ declare const RlsPolicies: unique symbol;
614
+ declare const EnableRLS: unique symbol;
615
+ declare const TableDeleteConfig: unique symbol;
616
+ declare const TablePolymorphic: unique symbol;
617
+ declare const OrmSchemaDefinition: unique symbol;
618
+ declare const OrmSchemaExtensionTables: unique symbol;
619
+ declare const OrmSchemaExtensions: unique symbol;
620
+ declare const OrmSchemaExtensionRelations: unique symbol;
621
+ declare const OrmSchemaExtensionTriggers: unique symbol;
622
+ declare const OrmSchemaRelations: unique symbol;
623
+ declare const OrmSchemaTriggers: unique symbol;
624
+ //#endregion
625
+ //#region src/orm/unset-token.d.ts
626
+ declare const unsetToken: unique symbol;
627
+ type UnsetToken = typeof unsetToken;
628
+ //#endregion
629
+ //#region src/orm/types.d.ts
630
+ /**
631
+ * Value or array helper (Drizzle pattern).
632
+ */
633
+ type ValueOrArray<T> = T | T[];
634
+ /**
635
+ * Type equality check - returns true if X and Y are exactly the same type
636
+ * Pattern from Drizzle: drizzle-orm/src/utils.ts:172
637
+ */
638
+ type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;
639
+ /**
640
+ * Merge two object types without using intersection
641
+ * Intersection can cause TypeScript to lose phantom type brands
642
+ * This manually combines keys from both types
643
+ */
644
+ type Merge<A, B> = { [K in keyof A | keyof B]: K extends keyof B ? B[K] : K extends keyof A ? A[K] : never };
645
+ type IndexKey = (Value | undefined)[];
646
+ type FindManyUnionSource<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = {
647
+ where?: RelationsFilter<TTableConfig, any> | WhereCallback<TTableConfig>;
648
+ };
649
+ type PipelineRelationName<TTableConfig extends TableRelationalConfig> = Extract<keyof TTableConfig['relations'], string>;
650
+ type FindManyPipelineFlatMapConfig<TTableConfig extends TableRelationalConfig = TableRelationalConfig, TRelationName extends PipelineRelationName<TTableConfig> = PipelineRelationName<TTableConfig>> = {
651
+ relation: TRelationName;
652
+ where?: unknown;
653
+ orderBy?: unknown;
654
+ limit?: number;
655
+ includeParent?: boolean;
656
+ };
657
+ type FindManyPipelineFlatMapStage<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = {
658
+ flatMap: FindManyPipelineFlatMapConfig<TTableConfig>;
659
+ };
660
+ type FindManyPipelineFilterWithStage<TRow = unknown> = {
661
+ filterWith: (row: TRow) => boolean | Promise<boolean>;
662
+ };
663
+ type FindManyPipelineMapStage<TRow = unknown, TOutput = unknown> = {
664
+ map: (row: TRow) => TOutput | null | Promise<TOutput | null>;
665
+ };
666
+ type FindManyPipelineDistinctStage = {
667
+ distinct: {
668
+ fields: string[];
669
+ };
670
+ };
671
+ type FindManyPipelineStageForInput<TSchema extends TablesRelationalConfig = TablesRelationalConfig, TTableConfig extends TableRelationalConfig = TableRelationalConfig, TRow = BuildQueryResult<TSchema, TTableConfig, true>> = FindManyPipelineFilterWithStage<TRow> | FindManyPipelineMapStage<TRow> | FindManyPipelineDistinctStage | FindManyPipelineFlatMapStage<TTableConfig>;
672
+ type FindManyPipelineConfig<TSchema extends TablesRelationalConfig = TablesRelationalConfig, TTableConfig extends TableRelationalConfig = TableRelationalConfig, TStages extends readonly unknown[] = readonly FindManyPipelineStageForInput<TSchema, TTableConfig, BuildQueryResult<TSchema, TTableConfig, true>>[]> = {
673
+ union?: FindManyUnionSource<TTableConfig>[];
674
+ interleaveBy?: string[];
675
+ stages?: TStages;
676
+ };
677
+ type FindManyPageByKeyConfig = {
678
+ index?: string;
679
+ order?: 'asc' | 'desc';
680
+ startKey?: IndexKey;
681
+ startInclusive?: boolean;
682
+ endKey?: IndexKey;
683
+ endInclusive?: boolean;
684
+ targetMaxRows?: number;
685
+ absoluteMaxRows?: number;
686
+ };
687
+ type KeyPageResult<T> = {
688
+ page: T[];
689
+ indexKeys: IndexKey[];
690
+ hasMore: boolean;
691
+ };
692
+ /**
693
+ * Extract full document type from a ConvexTable (includes system fields)
694
+ * Uses GetColumnData in 'query' mode to respect notNull brands
695
+ *
696
+ * @example
697
+ * const users = convexTable('users', { name: text().notNull() });
698
+ * type User = InferSelectModel<typeof users>;
699
+ * // → { id: string, createdAt: number, name: string }
700
+ *
701
+ * const posts = convexTable('posts', { title: text() }); // nullable
702
+ * type Post = InferSelectModel<typeof posts>;
703
+ * // → { id: string, createdAt: number, title: string | null }
704
+ */
705
+ type InferSelectModel<TTable extends ConvexTable<any>> = Simplify$1<Merge<{
706
+ id: string;
707
+ createdAt: number;
708
+ }, { [K in keyof TTable['_']['columns']]: GetColumnData<TTable['_']['columns'][K], 'query'> }>>;
709
+ type RequiredKeyOnly<TKey extends string, TColumn extends ColumnBuilderBase> = TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? never : TKey : never;
710
+ type OptionalKeyOnly<TKey extends string, TColumn extends ColumnBuilderBase> = TColumn['_']['notNull'] extends true ? TColumn['_']['hasDefault'] extends true ? TKey : never : TKey;
711
+ type InferInsertModelFromColumns<TColumns extends Record<string, ColumnBuilderBase>, TExcludeKeys extends string = never> = Simplify$1<{ [K in keyof TColumns & string as K extends TExcludeKeys ? never : RequiredKeyOnly<K, TColumns[K]>]: GetColumnData<TColumns[K], 'query'> } & { [K in keyof TColumns & string as K extends TExcludeKeys ? never : OptionalKeyOnly<K, TColumns[K]>]?: GetColumnData<TColumns[K], 'query'> | undefined }>;
712
+ type TablePolymorphicInsertMetadata<TTable extends ConvexTable<any>> = { [K in keyof TTable['_']['columns'] & string]: TTable['_']['columns'][K] extends {
713
+ __polymorphic: infer TMeta;
714
+ } ? TMeta extends {
715
+ variants: infer TVariants extends Record<string, Record<string, ColumnBuilderBase>>;
716
+ } ? {
717
+ discriminator: K;
718
+ variants: TVariants;
719
+ } : never : never }[keyof TTable['_']['columns'] & string];
720
+ type PolymorphicVariantFieldNames<TVariants extends Record<string, Record<string, ColumnBuilderBase>>> = Extract<TVariants[keyof TVariants & string] extends infer TVariantColumns ? TVariantColumns extends Record<string, ColumnBuilderBase> ? keyof TVariantColumns : never : never, string>;
721
+ type PolymorphicVariantInsertCase<TBase extends Record<string, unknown>, TDiscriminator extends string, TCase extends string, TVariantColumns extends Record<string, ColumnBuilderBase>, TAllGeneratedFields extends string> = Simplify$1<TBase & { [K in TDiscriminator]: TCase } & { [K in keyof TVariantColumns & string as RequiredKeyOnly<K, TVariantColumns[K]>]: GetColumnData<TVariantColumns[K], 'query'> } & { [K in keyof TVariantColumns & string as OptionalKeyOnly<K, TVariantColumns[K]>]?: GetColumnData<TVariantColumns[K], 'query'> | undefined } & { [K in Exclude<TAllGeneratedFields, keyof TVariantColumns & string>]?: never }>;
722
+ type PolymorphicVariantInsertUnion<TBase extends Record<string, unknown>, TMetadata extends {
723
+ discriminator: string;
724
+ variants: Record<string, Record<string, ColumnBuilderBase>>;
725
+ }> = { [TCase in keyof TMetadata['variants'] & string]: PolymorphicVariantInsertCase<TBase, TMetadata['discriminator'], TCase, TMetadata['variants'][TCase], PolymorphicVariantFieldNames<TMetadata['variants']>> }[keyof TMetadata['variants'] & string];
726
+ type InferPolymorphicInsertModel<TTable extends ConvexTable<any>, TMetadata extends {
727
+ discriminator: string;
728
+ variants: Record<string, Record<string, ColumnBuilderBase>>;
729
+ }> = PolymorphicVariantInsertUnion<InferInsertModelFromColumns<TTable['_']['columns'], TMetadata['discriminator'] | PolymorphicVariantFieldNames<TMetadata['variants']>>, TMetadata>;
730
+ /**
731
+ * Extract insert type from a ConvexTable (excludes system fields).
732
+ * Mirrors Drizzle behavior: required if notNull && no default, otherwise optional.
733
+ *
734
+ * @example
735
+ * const users = convexTable('users', { name: text().notNull() });
736
+ * type NewUser = InferInsertModel<typeof users>;
737
+ * // → { name: string }
738
+ */
739
+ type InferInsertModel<TTable extends ConvexTable<any>> = Simplify$1<[TablePolymorphicInsertMetadata<TTable>] extends [never] ? InferInsertModelFromColumns<TTable['_']['columns']> : InferPolymorphicInsertModel<TTable, Extract<TablePolymorphicInsertMetadata<TTable>, object>>>;
740
+ /**
741
+ * Extract column data type with mode-based handling (Drizzle pattern)
742
+ *
743
+ * Following Drizzle's GetColumnData pattern for consistent type extraction:
744
+ * - 'raw' mode: Returns base data type without null (for inserts, operator comparisons)
745
+ * - 'query' mode: Respects notNull brand, adds | null for nullable fields (for selects)
746
+ *
747
+ * @template TColumn - Column builder type
748
+ * @template TInferMode - 'query' (default, adds | null) or 'raw' (base type only)
749
+ *
750
+ * @example
751
+ * const name = text().notNull();
752
+ * type NameQuery = GetColumnData<typeof name, 'query'>; // string
753
+ * type NameRaw = GetColumnData<typeof name, 'raw'>; // string
754
+ *
755
+ * const age = integer(); // nullable
756
+ * type AgeQuery = GetColumnData<typeof age, 'query'>; // number | null
757
+ * type AgeRaw = GetColumnData<typeof age, 'raw'>; // number
758
+ */
759
+ type GetColumnData<TColumn extends ColumnBuilderBase, TInferMode extends 'query' | 'raw' = 'query'> = TInferMode extends 'raw' ? ColumnDataWithOverride<TColumn> : TColumn['_']['notNull'] extends true ? ColumnDataWithOverride<TColumn> : ColumnDataWithOverride<TColumn> | null;
760
+ type ColumnDataWithOverride<TColumn extends ColumnBuilderBase> = TColumn['_'] extends {
761
+ $type: infer TType;
762
+ } ? unknown extends TType ? TColumn['_']['data'] : TType : TColumn['_']['data'];
763
+ type AggregateIndexMap<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = TTableConfig['table'] extends ConvexTable<any, any, any, any, infer TAggregateIndexes extends Record<string, string>> ? TAggregateIndexes : Record<string, string>;
764
+ type AggregateIndexedFieldName<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = Extract<{ [K in keyof AggregateIndexMap<TTableConfig>]: AggregateIndexMap<TTableConfig>[K] }[keyof AggregateIndexMap<TTableConfig>], string>;
765
+ type AggregateScalarFieldName<TTableConfig extends TableRelationalConfig> = Extract<keyof TTableConfig['table']['_']['columns'], string>;
766
+ type AggregateWhereFieldName<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = AggregateIndexedFieldName<TTableConfig>;
767
+ type AggregateWhereFieldValue<TTableConfig extends TableRelationalConfig, TFieldName extends string> = TFieldName extends keyof TTableConfig['table']['_']['columns'] ? TTableConfig['table']['_']['columns'][TFieldName] extends ColumnBuilderBase ? GetColumnData<TTableConfig['table']['_']['columns'][TFieldName], 'query'> : unknown : unknown;
768
+ type AggregateWhereFieldFilter<TValue> = TValue | {
769
+ eq?: TValue | undefined;
770
+ in?: readonly TValue[] | undefined;
771
+ isNull?: true | undefined;
772
+ gt?: TValue | undefined;
773
+ gte?: TValue | undefined;
774
+ lt?: TValue | undefined;
775
+ lte?: TValue | undefined;
776
+ };
777
+ type AggregateNoScanWhereBase<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = { [K in AggregateWhereFieldName<TTableConfig>]?: AggregateWhereFieldFilter<AggregateWhereFieldValue<TTableConfig, K>> };
778
+ type AggregateNoScanWhere<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = Simplify$1<AggregateNoScanWhereBase<TTableConfig> & {
779
+ AND?: AggregateNoScanWhereBase<TTableConfig>[] | undefined;
780
+ OR?: AggregateNoScanWhereBase<TTableConfig>[] | undefined;
781
+ }>;
782
+ type AggregateNoScanWhereArg<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = [AggregateWhereFieldName<TTableConfig>] extends [never] ? never : AggregateNoScanWhere<TTableConfig>;
783
+ /**
784
+ * Query configuration for findMany/findFirst
785
+ *
786
+ * @template TRelationType - 'one' or 'many' determines available options
787
+ * @template TSchema - Full schema configuration
788
+ * @template TTableConfig - Configuration for the queried table
789
+ */
790
+ type DBQueryConfig<TRelationType extends 'one' | 'many' = 'one' | 'many', _TIsRoot extends boolean = boolean, TSchema extends TablesRelationalConfig = TablesRelationalConfig, TTableConfig extends TableRelationalConfig = TableRelationalConfig> = {
791
+ /**
792
+ * Column selection - pick specific columns to return
793
+ * If omitted, all columns are selected
794
+ */
795
+ columns?: { [K in keyof TableColumns<TTableConfig>]?: boolean } | undefined;
796
+ /**
797
+ * Relation loading - specify which relations to include
798
+ * Can be `true` for default config or nested config object
799
+ */
800
+ with?: KnownKeysOnly<{ [K in keyof TTableConfig['relations']]?: true | DBQueryConfig<TTableConfig['relations'][K] extends One<any, any> ? 'one' : 'many', false, TSchema, FindTableByDBName<TSchema, TTableConfig['relations'][K]['targetTableName']>> | undefined } & {
801
+ _count?: { [K in keyof TTableConfig['relations']]?: true | {
802
+ where?: AggregateNoScanWhereArg<FindTableByDBName<TSchema, Extract<TTableConfig['relations'][K]['targetTableName'], string>>> | undefined;
803
+ } } | undefined;
804
+ }, TTableConfig['relations'] & {
805
+ _count?: unknown;
806
+ }> | undefined;
807
+ /**
808
+ * Auto-include one() relations for discriminator-backed tables.
809
+ */
810
+ withVariants?: true | undefined;
811
+ /**
812
+ * Extra computed fields (post-fetch, computed in JS at runtime)
813
+ */
814
+ extras?: Record<string, Value | ((row: InferModelFromColumns<TableColumns<TTableConfig>>) => Value)> | ((fields: Simplify$1<[TableColumns<TTableConfig>] extends [never] ? {} : TableColumns<TTableConfig>>) => Record<string, Value | ((row: InferModelFromColumns<TableColumns<TTableConfig>>) => Value)>) | undefined;
815
+ /**
816
+ * Order results - callback or object syntax
817
+ */
818
+ orderBy?: DBQueryConfigOrderBy<TTableConfig> | undefined; /** Skip first N results */
819
+ offset?: number | undefined;
820
+ /**
821
+ * Cursor pagination (Convex native). When `cursor` is provided, `limit` is
822
+ * required and the result type changes to a paginated shape.
823
+ *
824
+ * - First page: cursor: null
825
+ * - Next page: cursor: previous.continueCursor
826
+ */
827
+ cursor?: _TIsRoot extends true ? string | null : never;
828
+ /**
829
+ * Pin the end boundary to a previously returned cursor.
830
+ * Only valid with cursor pagination.
831
+ */
832
+ endCursor?: _TIsRoot extends true ? string | null : never;
833
+ /**
834
+ * Maximum documents to scan during predicate `where(fn)` pagination.
835
+ * Only valid when `cursor` is provided.
836
+ */
837
+ maxScan?: _TIsRoot extends true ? number : never;
838
+ /**
839
+ * Full-text search query configuration.
840
+ * Only available on tables that declare search indexes.
841
+ */
842
+ search?: SearchQueryConfig<TTableConfig> | undefined;
843
+ /**
844
+ * Vector search query configuration.
845
+ * Only available on tables that declare vector indexes.
846
+ */
847
+ vectorSearch?: VectorQueryConfig<TTableConfig> | undefined;
848
+ /**
849
+ * Stream-backed advanced query pipeline.
850
+ */
851
+ pipeline?: _TIsRoot extends true ? FindManyPipelineConfig<TSchema, TTableConfig> : never;
852
+ /**
853
+ * Key-based page boundaries.
854
+ */
855
+ pageByKey?: _TIsRoot extends true ? FindManyPageByKeyConfig : never;
856
+ } & (TRelationType extends 'many' ? {
857
+ /** Limit number of results */limit?: number | undefined;
858
+ } : {}) & {
859
+ /**
860
+ * Relation-aware filter object (v1) or callback expression.
861
+ */
862
+ where?: RelationsFilter<TTableConfig, TSchema> | WhereCallback<TTableConfig> | undefined;
863
+ /**
864
+ * Allow full scans when no index can be used.
865
+ */
866
+ allowFullScan?: boolean | undefined;
867
+ };
868
+ type CountConfig<_TSchema extends TablesRelationalConfig = TablesRelationalConfig, TTableConfig extends TableRelationalConfig = TableRelationalConfig> = {
869
+ where?: AggregateNoScanWhereArg<TTableConfig> | undefined;
870
+ orderBy?: DBQueryConfigOrderBy<TTableConfig> | undefined;
871
+ skip?: number | undefined;
872
+ take?: number | undefined;
873
+ cursor?: { [K in Extract<keyof TTableConfig['table']['_']['columns'], string>]?: GetColumnData<TableColumns<TTableConfig>[K], 'query'> | undefined } | undefined;
874
+ select?: ({
875
+ _all?: true | undefined;
876
+ } & { [K in Extract<keyof TTableConfig['table']['_']['columns'], string>]?: true | undefined }) | undefined;
877
+ };
878
+ type AggregateNumericFieldName<TTableConfig extends TableRelationalConfig> = { [K in AggregateScalarFieldName<TTableConfig>]: NonNullable<GetColumnData<TableColumns<TTableConfig>[K], 'query'>> extends number ? K : never }[AggregateScalarFieldName<TTableConfig>];
879
+ type AggregateFieldValue<TTableConfig extends TableRelationalConfig, TField extends AggregateScalarFieldName<TTableConfig>> = GetColumnData<TableColumns<TTableConfig>[TField], 'query'>;
880
+ type AggregateConfig<_TSchema extends TablesRelationalConfig = TablesRelationalConfig, TTableConfig extends TableRelationalConfig = TableRelationalConfig> = {
881
+ where?: AggregateNoScanWhereArg<TTableConfig> | undefined;
882
+ orderBy?: DBQueryConfigOrderBy<TTableConfig> | undefined;
883
+ skip?: number | undefined;
884
+ take?: number | undefined;
885
+ cursor?: { [K in Extract<keyof TTableConfig['table']['_']['columns'], string>]?: GetColumnData<TableColumns<TTableConfig>[K], 'query'> | undefined } | undefined;
886
+ _count?: true | ({
887
+ _all?: true | undefined;
888
+ } & { [K in AggregateScalarFieldName<TTableConfig>]?: true | undefined }) | undefined;
889
+ _sum?: { [K in AggregateNumericFieldName<TTableConfig>]?: true | undefined } | undefined;
890
+ _avg?: { [K in AggregateNumericFieldName<TTableConfig>]?: true | undefined } | undefined;
891
+ _min?: { [K in AggregateScalarFieldName<TTableConfig>]?: true | undefined } | undefined;
892
+ _max?: { [K in AggregateScalarFieldName<TTableConfig>]?: true | undefined } | undefined;
893
+ };
894
+ type GroupByByInput<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = AggregateWhereFieldName<TTableConfig> | readonly AggregateWhereFieldName<TTableConfig>[];
895
+ type GroupBySelectedFields<TBy> = TBy extends readonly (infer TField)[] ? Extract<TField, string> : Extract<TBy, string>;
896
+ type GroupByByResult<TTableConfig extends TableRelationalConfig, TBy> = Simplify$1<{ [K in GroupBySelectedFields<TBy> & AggregateScalarFieldName<TTableConfig>]: AggregateFieldValue<TTableConfig, K> }>;
897
+ type GroupByOrderDirection = 'asc' | 'desc';
898
+ type GroupByByOrderBy<TBy> = Partial<Record<GroupBySelectedFields<TBy>, GroupByOrderDirection>>;
899
+ type GroupByMetricOrderBy<TTableConfig extends TableRelationalConfig> = {
900
+ _count?: GroupByOrderDirection | ({
901
+ _all?: GroupByOrderDirection | undefined;
902
+ } & { [K in AggregateScalarFieldName<TTableConfig>]?: GroupByOrderDirection | undefined }) | undefined;
903
+ _sum?: { [K in AggregateNumericFieldName<TTableConfig>]?: GroupByOrderDirection | undefined } | undefined;
904
+ _avg?: { [K in AggregateNumericFieldName<TTableConfig>]?: GroupByOrderDirection | undefined } | undefined;
905
+ _min?: { [K in AggregateScalarFieldName<TTableConfig>]?: GroupByOrderDirection | undefined } | undefined;
906
+ _max?: { [K in AggregateScalarFieldName<TTableConfig>]?: GroupByOrderDirection | undefined } | undefined;
907
+ };
908
+ type GroupByOrderBy<TTableConfig extends TableRelationalConfig, TBy> = ValueOrArray<GroupByByOrderBy<TBy> | GroupByMetricOrderBy<TTableConfig>>;
909
+ type GroupByHavingValue<TValue> = TValue | {
910
+ eq?: TValue | undefined;
911
+ in?: readonly TValue[] | undefined;
912
+ isNull?: true | undefined;
913
+ gt?: TValue | undefined;
914
+ gte?: TValue | undefined;
915
+ lt?: TValue | undefined;
916
+ lte?: TValue | undefined;
917
+ };
918
+ type GroupByHaving<TTableConfig extends TableRelationalConfig, TBy> = Simplify$1<{ [K in GroupBySelectedFields<TBy>]?: GroupByHavingValue<AggregateFieldValue<TTableConfig, Extract<K, AggregateScalarFieldName<TTableConfig>>>> } & {
919
+ _count?: GroupByHavingValue<number> | ({
920
+ _all?: GroupByHavingValue<number> | undefined;
921
+ } & { [K in AggregateScalarFieldName<TTableConfig>]?: GroupByHavingValue<number> | undefined }) | undefined;
922
+ _sum?: { [K in AggregateNumericFieldName<TTableConfig>]?: GroupByHavingValue<number | null> | undefined } | undefined;
923
+ _avg?: { [K in AggregateNumericFieldName<TTableConfig>]?: GroupByHavingValue<number | null> | undefined } | undefined;
924
+ _min?: { [K in AggregateScalarFieldName<TTableConfig>]?: GroupByHavingValue<AggregateFieldValue<TTableConfig, K> | null> | undefined } | undefined;
925
+ _max?: { [K in AggregateScalarFieldName<TTableConfig>]?: GroupByHavingValue<AggregateFieldValue<TTableConfig, K> | null> | undefined } | undefined;
926
+ AND?: GroupByHaving<TTableConfig, TBy>[] | undefined;
927
+ }>;
928
+ type GroupByConfig<_TSchema extends TablesRelationalConfig = TablesRelationalConfig, TTableConfig extends TableRelationalConfig = TableRelationalConfig> = {
929
+ by: GroupByByInput<TTableConfig>;
930
+ where?: AggregateNoScanWhereArg<TTableConfig> | undefined;
931
+ orderBy?: GroupByOrderBy<TTableConfig, GroupByByInput<TTableConfig>> | undefined;
932
+ skip?: number | undefined;
933
+ take?: number | undefined;
934
+ cursor?: Record<string, unknown> | undefined;
935
+ having?: GroupByHaving<TTableConfig, GroupByByInput<TTableConfig>> | undefined;
936
+ _count?: true | ({
937
+ _all?: true | undefined;
938
+ } & { [K in AggregateScalarFieldName<TTableConfig>]?: true | undefined }) | undefined;
939
+ _sum?: { [K in AggregateNumericFieldName<TTableConfig>]?: true | undefined } | undefined;
940
+ _avg?: { [K in AggregateNumericFieldName<TTableConfig>]?: true | undefined } | undefined;
941
+ _min?: { [K in AggregateScalarFieldName<TTableConfig>]?: true | undefined } | undefined;
942
+ _max?: { [K in AggregateScalarFieldName<TTableConfig>]?: true | undefined } | undefined;
943
+ };
944
+ type SelectedTrueKeys<TSelection> = Extract<{ [K in keyof TSelection]-?: TSelection[K] extends true ? K : never }[keyof TSelection], string>;
945
+ type CountSelectResult<TTableConfig extends TableRelationalConfig, TSelect extends Record<string, unknown>> = Simplify$1<(TSelect extends {
946
+ _all: true;
947
+ } ? {
948
+ _all: number;
949
+ } : {}) & { [K in SelectedTrueKeys<TSelect> & AggregateScalarFieldName<TTableConfig>]: number }>;
950
+ type AggregateCountResult<TTableConfig extends TableRelationalConfig, TCount> = TCount extends true ? number : TCount extends Record<string, unknown> ? CountSelectResult<TTableConfig, TCount> : never;
951
+ type AggregateNumericNullableResult<TSelect> = Simplify$1<{ [K in SelectedTrueKeys<NonNullable<TSelect>>]: number | null }>;
952
+ type AggregateComparableResult<TTableConfig extends TableRelationalConfig, TSelect> = Simplify$1<{ [K in SelectedTrueKeys<NonNullable<TSelect>> & AggregateScalarFieldName<TTableConfig>]: AggregateFieldValue<TTableConfig, K> | null }>;
953
+ type CountResult<TTableConfig extends TableRelationalConfig, TConfig extends CountConfig<any, TTableConfig> | undefined> = TConfig extends {
954
+ select: infer TSelect extends Record<string, unknown>;
955
+ } ? CountSelectResult<TTableConfig, TSelect> : number;
956
+ type AggregateResult<TTableConfig extends TableRelationalConfig, TConfig extends AggregateConfig<any, TTableConfig>> = Simplify$1<(TConfig extends {
957
+ _count: infer TCount;
958
+ } ? {
959
+ _count: AggregateCountResult<TTableConfig, TCount>;
960
+ } : {}) & (TConfig extends {
961
+ _sum: infer TSum extends Record<string, unknown>;
962
+ } ? {
963
+ _sum: AggregateNumericNullableResult<TSum>;
964
+ } : {}) & (TConfig extends {
965
+ _avg: infer TAvg extends Record<string, unknown>;
966
+ } ? {
967
+ _avg: AggregateNumericNullableResult<TAvg>;
968
+ } : {}) & (TConfig extends {
969
+ _min: infer TMin extends Record<string, unknown>;
970
+ } ? {
971
+ _min: AggregateComparableResult<TTableConfig, TMin>;
972
+ } : {}) & (TConfig extends {
973
+ _max: infer TMax extends Record<string, unknown>;
974
+ } ? {
975
+ _max: AggregateComparableResult<TTableConfig, TMax>;
976
+ } : {})>;
977
+ type GroupByRowResult<TTableConfig extends TableRelationalConfig, TConfig extends GroupByConfig<any, TTableConfig>> = Simplify$1<GroupByByResult<TTableConfig, TConfig['by']> & (TConfig extends {
978
+ _count: infer TCount;
979
+ } ? {
980
+ _count: AggregateCountResult<TTableConfig, TCount>;
981
+ } : {}) & (TConfig extends {
982
+ _sum: infer TSum extends Record<string, unknown>;
983
+ } ? {
984
+ _sum: AggregateNumericNullableResult<TSum>;
985
+ } : {}) & (TConfig extends {
986
+ _avg: infer TAvg extends Record<string, unknown>;
987
+ } ? {
988
+ _avg: AggregateNumericNullableResult<TAvg>;
989
+ } : {}) & (TConfig extends {
990
+ _min: infer TMin extends Record<string, unknown>;
991
+ } ? {
992
+ _min: AggregateComparableResult<TTableConfig, TMin>;
993
+ } : {}) & (TConfig extends {
994
+ _max: infer TMax extends Record<string, unknown>;
995
+ } ? {
996
+ _max: AggregateComparableResult<TTableConfig, TMax>;
997
+ } : {})>;
998
+ type GroupByResult<TTableConfig extends TableRelationalConfig, TConfig extends GroupByConfig<any, TTableConfig>> = GroupByRowResult<TTableConfig, TConfig>[];
999
+ type PredicateWhereClause<TTableConfig extends TableRelationalConfig> = {
1000
+ readonly __kind: 'predicate';
1001
+ readonly predicate: (row: InferModelFromColumns<TableColumns<TTableConfig>>) => boolean | Promise<boolean>;
1002
+ };
1003
+ type WhereCallback<TTableConfig extends TableRelationalConfig> = (table: TTableConfig['table'], operators: FilterOperators<TTableConfig>) => FilterExpression$1<boolean> | PredicateWhereClause<TTableConfig> | undefined;
1004
+ type PredicateWhereIndexMap<TTableConfig extends TableRelationalConfig> = TTableConfig['table'] extends ConvexTable<any, infer TIndexes, any, any> ? TIndexes : Record<string, GenericIndexFields>;
1005
+ type PredicateWhereIndexName<TTableConfig extends TableRelationalConfig> = Extract<keyof PredicateWhereIndexMap<TTableConfig>, string>;
1006
+ type PredicateWhereNamedIndex<TTableConfig extends TableRelationalConfig, TIndexName extends string> = TIndexName extends PredicateWhereIndexName<TTableConfig> ? PredicateWhereIndexMap<TTableConfig>[TIndexName] extends GenericIndexFields ? PredicateWhereIndexMap<TTableConfig>[TIndexName] : GenericIndexFields : GenericIndexFields;
1007
+ type PredicateWhereIndexConfig<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = [PredicateWhereIndexName<TTableConfig>] extends [never] ? {
1008
+ name: string;
1009
+ range?: (q: IndexRangeBuilder<InferModelFromColumns<TableColumns<TTableConfig>>, GenericIndexFields>) => IndexRange;
1010
+ } : { [TIndexName in PredicateWhereIndexName<TTableConfig>]: {
1011
+ name: TIndexName;
1012
+ range?: (q: IndexRangeBuilder<InferModelFromColumns<TableColumns<TTableConfig>>, PredicateWhereNamedIndex<TTableConfig, TIndexName>>) => IndexRange;
1013
+ } }[PredicateWhereIndexName<TTableConfig>];
1014
+ type SearchIndexMap<TTableConfig extends TableRelationalConfig> = TTableConfig['table'] extends ConvexTable<any, any, infer TSearchIndexes, any> ? TSearchIndexes : Record<string, {
1015
+ searchField: string;
1016
+ filterFields: string;
1017
+ }>;
1018
+ type SearchIndexName<TTableConfig extends TableRelationalConfig> = Extract<keyof SearchIndexMap<TTableConfig>, string>;
1019
+ type SearchIndexConfigByName<TTableConfig extends TableRelationalConfig, TIndexName extends SearchIndexName<TTableConfig>> = SearchIndexMap<TTableConfig>[TIndexName];
1020
+ type SearchFilterFieldNames<TTableConfig extends TableRelationalConfig, TIndexName extends SearchIndexName<TTableConfig>> = SearchIndexConfigByName<TTableConfig, TIndexName> extends {
1021
+ filterFields: infer TFilterFields extends string;
1022
+ } ? TFilterFields : never;
1023
+ type SearchFilterValueForField<TTableConfig extends TableRelationalConfig, TFieldName extends string> = TFieldName extends keyof TableColumns<TTableConfig> ? TableColumns<TTableConfig>[TFieldName] extends ColumnBuilder<any, any, any> ? GetColumnData<TableColumns<TTableConfig>[TFieldName], 'raw'> : never : never;
1024
+ type SearchFiltersForIndex<TTableConfig extends TableRelationalConfig, TIndexName extends SearchIndexName<TTableConfig>> = Partial<{ [K in SearchFilterFieldNames<TTableConfig, TIndexName>]: SearchFilterValueForField<TTableConfig, K> }>;
1025
+ type SearchQueryConfig<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = [SearchIndexName<TTableConfig>] extends [never] ? never : { [TIndexName in SearchIndexName<TTableConfig>]: {
1026
+ index: TIndexName;
1027
+ query: string;
1028
+ filters?: SearchFiltersForIndex<TTableConfig, TIndexName> | undefined;
1029
+ } }[SearchIndexName<TTableConfig>];
1030
+ type SearchWhereFilter<TTableConfig extends TableRelationalConfig> = TableFilter<TTableConfig['table']>;
1031
+ type VectorIndexMap<TTableConfig extends TableRelationalConfig> = TTableConfig['table'] extends ConvexTable<any, any, any, infer TVectorIndexes> ? TVectorIndexes : Record<string, {
1032
+ vectorField: string;
1033
+ dimensions: number;
1034
+ filterFields: string;
1035
+ }>;
1036
+ type VectorIndexName<TTableConfig extends TableRelationalConfig> = Extract<keyof VectorIndexMap<TTableConfig>, string>;
1037
+ type VectorIndexConfigByName<TTableConfig extends TableRelationalConfig, TIndexName extends VectorIndexName<TTableConfig>> = VectorIndexMap<TTableConfig>[TIndexName];
1038
+ type VectorFilterFieldNames<TTableConfig extends TableRelationalConfig, TIndexName extends VectorIndexName<TTableConfig>> = VectorIndexConfigByName<TTableConfig, TIndexName> extends {
1039
+ filterFields: infer TFilterFields extends string;
1040
+ } ? TFilterFields : never;
1041
+ type VectorFilterForIndex<TTableConfig extends TableRelationalConfig, TIndexName extends VectorIndexName<TTableConfig>> = (q: VectorFilterBuilder<InferModelFromColumns<TableColumns<TTableConfig>>, VectorIndexConfigByName<TTableConfig, TIndexName>>) => FilterExpression<boolean>;
1042
+ type VectorQueryConfig<TTableConfig extends TableRelationalConfig = TableRelationalConfig> = [VectorIndexName<TTableConfig>] extends [never] ? never : { [TIndexName in VectorIndexName<TTableConfig>]: {
1043
+ index: TIndexName;
1044
+ vector: number[];
1045
+ limit: number;
1046
+ includeScore?: boolean | undefined;
1047
+ filter?: (VectorFilterFieldNames<TTableConfig, TIndexName> extends never ? never : VectorFilterForIndex<TTableConfig, TIndexName>) | undefined;
1048
+ } }[VectorIndexName<TTableConfig>];
1049
+ type VectorSearchProvider = (tableName: string, indexName: string, query: {
1050
+ vector: number[];
1051
+ limit: number;
1052
+ filter?: ((q: any) => unknown) | undefined;
1053
+ }) => Promise<Array<{
1054
+ _id: GenericId<string> | string;
1055
+ _score: number;
1056
+ }>>;
1057
+ type FullScanOperatorKey = 'arrayContains' | 'arrayContained' | 'arrayOverlaps' | 'ilike' | 'notLike' | 'notIlike' | 'endsWith' | 'contains' | 'RAW';
1058
+ type HasFullScanOperatorKey<T> = Extract<keyof T, FullScanOperatorKey> extends never ? false : true;
1059
+ type DepthPrev = [0, 0, 1, 2, 3, 4, 5, 6, 7, 8];
1060
+ type HasStaticFullScanWhere<TWhere, TDepth extends number = 6> = [TDepth] extends [0] ? false : TWhere extends ((...args: any[]) => any) ? false : TWhere extends string | number | boolean | bigint | null | undefined ? false : TWhere extends readonly (infer TItem)[] ? HasStaticFullScanWhere<TItem, DepthPrev[TDepth]> : TWhere extends object ? HasFullScanOperatorKey<TWhere> extends true ? true : 'NOT' extends keyof TWhere ? true : true extends { [K in keyof TWhere]-?: HasStaticFullScanWhere<TWhere[K], DepthPrev[TDepth]> }[keyof TWhere] ? true : false : false;
1061
+ type ReturnsPredicateClause<TWhere> = TWhere extends ((...args: any[]) => infer TResult) ? Extract<NonNullable<TResult>, PredicateWhereClause<any>> extends never ? false : true : false;
1062
+ type EnforceWithIndexForWhere<TConfig, _TTableConfig extends TableRelationalConfig, THasIndex extends boolean> = THasIndex extends true ? TConfig : TConfig extends {
1063
+ where: infer TWhere;
1064
+ } ? ReturnsPredicateClause<TWhere> extends true ? never : HasStaticFullScanWhere<TWhere> extends true ? never : TConfig : TConfig;
1065
+ type EnforceNoAllowFullScanWhenIndexed<TConfig, THasIndex extends boolean> = THasIndex extends true ? Omit<TConfig, 'allowFullScan'> & {
1066
+ allowFullScan?: never;
1067
+ } : TConfig;
1068
+ type EnforceCursorMaxScan<TConfig> = TConfig extends {
1069
+ cursor: string | null;
1070
+ } ? TConfig extends {
1071
+ where: infer TWhere;
1072
+ } ? HasStaticFullScanWhere<TWhere> extends true ? Omit<TConfig, 'allowFullScan'> & {
1073
+ maxScan: number;
1074
+ allowFullScan?: never;
1075
+ } : TConfig : TConfig : TConfig;
1076
+ type EnforceSearchConstraints<TConfig, TTableConfig extends TableRelationalConfig> = 'search' extends keyof TConfig ? TConfig extends {
1077
+ search: infer TSearch;
1078
+ } ? [TSearch] extends [undefined] ? TConfig : Omit<TConfig, 'where' | 'orderBy' | 'vectorSearch'> & {
1079
+ search: TSearch;
1080
+ where?: SearchWhereFilter<TTableConfig> | undefined;
1081
+ orderBy?: never;
1082
+ vectorSearch?: never;
1083
+ } : TConfig : TConfig;
1084
+ type EnforceVectorSearchConstraints<TConfig, _TTableConfig extends TableRelationalConfig> = 'vectorSearch' extends keyof TConfig ? TConfig extends {
1085
+ vectorSearch: infer TVectorSearch;
1086
+ } ? [TVectorSearch] extends [undefined] ? TConfig : Omit<TConfig, 'search' | 'where' | 'orderBy' | 'cursor' | 'maxScan' | 'offset' | 'limit' | 'allowFullScan'> & {
1087
+ vectorSearch: TVectorSearch;
1088
+ search?: never;
1089
+ where?: never;
1090
+ orderBy?: never;
1091
+ cursor?: never;
1092
+ maxScan?: never;
1093
+ offset?: never;
1094
+ limit?: never;
1095
+ allowFullScan?: never;
1096
+ } : TConfig : TConfig;
1097
+ /**
1098
+ * Filter operators available in where clause
1099
+ * Following Drizzle pattern: accept column builders directly, extract types with GetColumnData
1100
+ *
1101
+ * Operators use 'raw' mode for comparisons (no null union in comparison values)
1102
+ * Runtime wraps builders with column() helper for FilterExpression construction
1103
+ */
1104
+ interface FilterOperators<TTableConfig extends TableRelationalConfig = TableRelationalConfig> {
1105
+ and(...expressions: (FilterExpression$1<boolean> | undefined)[]): FilterExpression$1<boolean> | undefined;
1106
+ arrayContained<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, values: readonly GetColumnData<TBuilder, 'raw'>[]): FilterExpression$1<boolean>;
1107
+ arrayContains<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, values: readonly GetColumnData<TBuilder, 'raw'>[]): FilterExpression$1<boolean>;
1108
+ arrayOverlaps<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, values: readonly GetColumnData<TBuilder, 'raw'>[]): FilterExpression$1<boolean>;
1109
+ between<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, min: GetColumnData<TBuilder, 'raw'>, max: GetColumnData<TBuilder, 'raw'>): FilterExpression$1<boolean>;
1110
+ contains<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, substring: string): FilterExpression$1<boolean>;
1111
+ endsWith<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, suffix: string): FilterExpression$1<boolean>;
1112
+ eq<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, value: GetColumnData<TBuilder, 'raw'>): FilterExpression$1<boolean>;
1113
+ gt<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, value: GetColumnData<TBuilder, 'raw'>): FilterExpression$1<boolean>;
1114
+ gte<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, value: GetColumnData<TBuilder, 'raw'>): FilterExpression$1<boolean>;
1115
+ ilike<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, pattern: string): FilterExpression$1<boolean>;
1116
+ inArray<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, values: readonly GetColumnData<TBuilder, 'raw'>[]): FilterExpression$1<boolean>;
1117
+ isNotNull<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder): FilterExpression$1<boolean>;
1118
+ isNull<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder extends {
1119
+ _: {
1120
+ notNull: true;
1121
+ };
1122
+ } ? never : TBuilder): FilterExpression$1<boolean>;
1123
+ like<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, pattern: string): FilterExpression$1<boolean>;
1124
+ lt<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, value: GetColumnData<TBuilder, 'raw'>): FilterExpression$1<boolean>;
1125
+ lte<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, value: GetColumnData<TBuilder, 'raw'>): FilterExpression$1<boolean>;
1126
+ ne<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, value: GetColumnData<TBuilder, 'raw'>): FilterExpression$1<boolean>;
1127
+ not(expression: FilterExpression$1<boolean>): FilterExpression$1<boolean>;
1128
+ notBetween<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, min: GetColumnData<TBuilder, 'raw'>, max: GetColumnData<TBuilder, 'raw'>): FilterExpression$1<boolean>;
1129
+ notIlike<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, pattern: string): FilterExpression$1<boolean>;
1130
+ notInArray<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, values: readonly GetColumnData<TBuilder, 'raw'>[]): FilterExpression$1<boolean>;
1131
+ notLike<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, pattern: string): FilterExpression$1<boolean>;
1132
+ or(...expressions: (FilterExpression$1<boolean> | undefined)[]): FilterExpression$1<boolean> | undefined;
1133
+ predicate(predicate: (row: InferModelFromColumns<TableColumns<TTableConfig>>) => boolean | Promise<boolean>): PredicateWhereClause<TTableConfig>;
1134
+ startsWith<TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder, prefix: string): FilterExpression$1<boolean>;
1135
+ }
1136
+ /**
1137
+ * Order by clause - represents a single field ordering
1138
+ * Following Drizzle pattern for type-safe ordering
1139
+ *
1140
+ * @template TColumn - Column builder type
1141
+ */
1142
+ interface OrderByClause<TColumn extends ColumnBuilder<any, any, any>> {
1143
+ readonly column: Column<TColumn, string>;
1144
+ readonly direction: 'asc' | 'desc';
1145
+ }
1146
+ /**
1147
+ * Order by input - either a column builder (default ASC)
1148
+ * or an explicit order by clause from asc()/desc().
1149
+ */
1150
+ type OrderByValue<TColumn extends ColumnBuilder<any, any, any> = ColumnBuilder<any, any, any>> = OrderByClause<TColumn> | TColumn;
1151
+ /**
1152
+ * Order direction helpers
1153
+ */
1154
+ interface OrderDirection {
1155
+ asc: <TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder) => OrderByClause<TBuilder>;
1156
+ desc: <TBuilder extends ColumnBuilder<any, any, any>>(field: TBuilder) => OrderByClause<TBuilder>;
1157
+ }
1158
+ type DBQueryConfigOrderByCallback<TTable extends ConvexTable<any>> = (table: TTable, operators: OrderDirection) => ValueOrArray<OrderByValue> | undefined;
1159
+ type DBQueryConfigOrderByObject<TColumns extends Record<string, unknown>> = { [K in keyof TColumns]?: 'asc' | 'desc' | undefined };
1160
+ type DBQueryConfigOrderBy<TTableConfig extends TableRelationalConfig> = DBQueryConfigOrderByCallback<TTableConfig['table']> | DBQueryConfigOrderByObject<TableColumns<TTableConfig>>;
1161
+ /**
1162
+ * Build query result type from configuration
1163
+ * Handles column selection and relation loading
1164
+ *
1165
+ * @template TSchema - Full schema configuration
1166
+ * @template TTableConfig - Configuration for queried table
1167
+ * @template TConfig - Query configuration (true | config object)
1168
+ */
1169
+ /**
1170
+ * Infer selected columns from a raw selection using Drizzle v1 semantics.
1171
+ * - Any `true` => include-only
1172
+ * - All `false` => exclude-only
1173
+ * - Empty / all undefined => no columns
1174
+ */
1175
+ type InferRelationalQueryTableResult<TRawSelection extends Record<string, unknown>, TSelectedFields extends Record<string, unknown> | 'Full' = 'Full'> = TSelectedFields extends 'Full' ? TRawSelection : { [K in Equal<Exclude<TSelectedFields[keyof TSelectedFields & keyof TRawSelection], undefined>, false> extends true ? Exclude<keyof TRawSelection, NonUndefinedKeysOnly$1<TSelectedFields>> : { [K in keyof TSelectedFields]: Equal<TSelectedFields[K], true> extends true ? K : never }[keyof TSelectedFields] & keyof TRawSelection]: TRawSelection[K] };
1176
+ type TableColumns<TTableConfig extends TableRelationalConfig> = TTableConfig['table']['_']['columns'] & SystemFields<TTableConfig['table']['_']['name']> & SystemFieldAliases<TTableConfig['table']['_']['name'], TTableConfig['table']['_']['columns']>;
1177
+ type TablePolymorphicMetadataFromColumn<TColumn, TDiscriminator extends string> = TColumn extends {
1178
+ __polymorphic: infer TMeta;
1179
+ } ? TMeta extends {
1180
+ as: infer TAlias extends string;
1181
+ variants: infer TVariants extends Record<string, Record<string, ColumnBuilderBase>>;
1182
+ } ? {
1183
+ as: TAlias;
1184
+ discriminator: TDiscriminator;
1185
+ variants: TVariants;
1186
+ } : never : never;
1187
+ type TablePolymorphicMetadata<TTableConfig extends TableRelationalConfig> = { [K in Extract<keyof TTableConfig['table']['_']['columns'], string>]: TablePolymorphicMetadataFromColumn<TTableConfig['table']['_']['columns'][K], K> }[Extract<keyof TTableConfig['table']['_']['columns'], string>];
1188
+ type PolymorphicResultFromMetadata<TMetadata> = TMetadata extends {
1189
+ as: infer TAlias extends string;
1190
+ discriminator: infer TDiscriminator extends string;
1191
+ variants: infer TVariants extends Record<string, Record<string, ColumnBuilderBase>>;
1192
+ } ? { [TCase in keyof TVariants & string]: { [K in TDiscriminator]: TCase } & { [K in TAlias]: InferModelFromColumns<TVariants[TCase]> } }[keyof TVariants & string] : {};
1193
+ type TablePolymorphicResult<TTableConfig extends TableRelationalConfig> = [TablePolymorphicMetadata<TTableConfig>] extends [never] ? {} : PolymorphicResultFromMetadata<TablePolymorphicMetadata<TTableConfig>>;
1194
+ type RelationNames<TTableConfig extends TableRelationalConfig> = Extract<keyof TTableConfig['relations'], string>;
1195
+ type OneRelationNames<TTableConfig extends TableRelationalConfig> = { [K in RelationNames<TTableConfig>]: TTableConfig['relations'][K] extends One<any, any> ? K : never }[RelationNames<TTableConfig>];
1196
+ type WithVariantsAutoWithConfig<TTableConfig extends TableRelationalConfig, _TSelection> = { [K in OneRelationNames<TTableConfig>]: true };
1197
+ type SelectedTableResult<TTableConfig extends TableRelationalConfig, TFullSelection extends Record<string, unknown>> = InferRelationalQueryTableResult<InferModelFromColumns<TableColumns<TTableConfig>>, TFullSelection['columns'] extends Record<string, unknown> ? TFullSelection['columns'] : 'Full'>;
1198
+ type TablePolymorphicResultForSelection<TTableConfig extends TableRelationalConfig, TFullSelection extends Record<string, unknown>> = [TablePolymorphicMetadata<TTableConfig>] extends [never] ? {} : TablePolymorphicMetadata<TTableConfig> extends {
1199
+ discriminator: infer TDiscriminator extends string;
1200
+ } ? TDiscriminator extends keyof SelectedTableResult<TTableConfig, TFullSelection> ? PolymorphicResultFromMetadata<TablePolymorphicMetadata<TTableConfig>> : {} : {};
1201
+ type PaginatedResult<T> = {
1202
+ page: T[];
1203
+ continueCursor: string | null;
1204
+ isDone: boolean;
1205
+ pageStatus?: 'SplitRecommended' | 'SplitRequired';
1206
+ splitCursor?: string;
1207
+ };
1208
+ type BuildQueryResult<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, TFullSelection> = Equal<TFullSelection, true> extends true ? Simplify$1<InferModelFromColumns<TableColumns<TTableConfig>> & TablePolymorphicResult<TTableConfig>> : TFullSelection extends Record<string, unknown> ? Simplify$1<SelectedTableResult<TTableConfig, TFullSelection> & (Exclude<TFullSelection['extras'], undefined> extends Record<string, unknown> | ((...args: any[]) => Record<string, unknown>) ? ReturnTypeOrValue<Exclude<TFullSelection['extras'], undefined>> extends infer TExtras extends Record<string, unknown> ? { [K in NonUndefinedKeysOnly$1<TExtras>]: ReturnTypeOrValue<TExtras[K]> } : {} : {}) & (Exclude<TFullSelection['with'], undefined> extends Record<string, unknown> ? BuildRelationResult<TSchema, Exclude<TFullSelection['with'], undefined>, TTableConfig['relations']> : {}) & (TFullSelection['withVariants'] extends true ? BuildRelationResult<TSchema, WithVariantsAutoWithConfig<TTableConfig, TFullSelection>, TTableConfig['relations']> : {}) & TablePolymorphicResultForSelection<TTableConfig, TFullSelection> & (TFullSelection extends {
1209
+ vectorSearch: infer TVectorSearch;
1210
+ } ? [TVectorSearch] extends [undefined] ? {} : {
1211
+ _score?: number;
1212
+ } : {})> : never;
1213
+ /**
1214
+ * Build relation result types from `with` configuration
1215
+ * Maps each included relation to its result type (T | null for one, T[] for many)
1216
+ *
1217
+ * Following Drizzle's exact pattern for type inference
1218
+ *
1219
+ * @template TSchema - Full schema configuration
1220
+ * @template TInclude - Relations to include from `with` config
1221
+ * @template TRelations - Available relations on the table
1222
+ */
1223
+ type BuildRelationResult<TSchema extends TablesRelationalConfig, TInclude extends Record<string, unknown>, TRelations extends RelationsRecord> = { [K in NonUndefinedKeysOnly$1<TInclude> & keyof TRelations]: TRelations[K] extends infer TRel extends Relation<any> ? BuildQueryResult<TSchema, FindTableByDBName<TSchema, TRel['targetTableName']>, Assume<TInclude[K], true | Record<string, unknown>>> extends infer TResult ? TRel extends One<any, any> ? TResult | (Equal<TRel['optional'], true> extends true ? null : TInclude[K] extends Record<string, unknown> ? TInclude[K]['where'] extends Record<string, any> ? null : never : never) : TResult[] : never : never } & (TInclude extends {
1224
+ _count: infer TCountConfig;
1225
+ } ? TCountConfig extends Record<string, unknown> ? {
1226
+ _count: { [K in NonUndefinedKeysOnly$1<TCountConfig> & keyof TRelations]: number };
1227
+ } : {} : {});
1228
+ /**
1229
+ * Extract TypeScript types from column validators
1230
+ * Includes system fields for query results
1231
+ * Following Drizzle pattern: query results always include system fields
1232
+ * Uses GetColumnData in 'query' mode to respect notNull brands
1233
+ *
1234
+ * CRITICAL: No extends constraint to avoid type widening (convex-ents pattern)
1235
+ * CRITICAL: Uses Merge instead of & to preserve NotNull phantom type brands
1236
+ */
1237
+ type InferModelFromColumns<TColumns> = TColumns extends Record<string, ColumnBuilderBase> ? Simplify$1<{ [K in keyof TColumns]: GetColumnData<TColumns[K], 'query'> }> : never;
1238
+ /**
1239
+ * Extract union of all values from an object type
1240
+ * Pattern from Drizzle: drizzle-orm/src/relations.ts:145
1241
+ */
1242
+ type ExtractObjectValues<T> = T[keyof T];
1243
+ /**
1244
+ * Find table configuration by database name
1245
+ * Pattern from Drizzle: drizzle-orm/src/relations.ts:198-208
1246
+ *
1247
+ * Uses mapped type with key remapping to avoid `infer` widening.
1248
+ * The `as` clause filters to only matching keys, then ExtractObjectValues
1249
+ * extracts the single table value without creating unions.
1250
+ */
1251
+ type FindTableByDBName<TSchema extends TablesRelationalConfig, TDBName extends string> = ExtractObjectValues<{ [K in keyof TSchema as TSchema[K]['name'] extends TDBName ? K : never]: TSchema[K] }>;
1252
+ type PipelineFlatMapTargetRow<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, TRelationName extends PipelineRelationName<TTableConfig>> = TTableConfig['relations'][TRelationName] extends infer TRelation extends Relation<any> ? BuildQueryResult<TSchema, FindTableByDBName<TSchema, TRelation['targetTableName']>, true> : never;
1253
+ type PipelineFlatMapOutput<TCurrentRow, TFlatMapConfig, TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = TFlatMapConfig extends {
1254
+ relation: infer TRelationName extends PipelineRelationName<TTableConfig>;
1255
+ } ? TFlatMapConfig extends {
1256
+ includeParent: false;
1257
+ } ? PipelineFlatMapTargetRow<TSchema, TTableConfig, TRelationName> : {
1258
+ parent: TCurrentRow;
1259
+ child: PipelineFlatMapTargetRow<TSchema, TTableConfig, TRelationName>;
1260
+ } : never;
1261
+ type ApplyPipelineStage<TCurrentRow, TStage, TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = TStage extends FindManyPipelineFilterWithStage<any> ? TCurrentRow : TStage extends {
1262
+ map: (...args: any[]) => infer TMapOutput;
1263
+ } ? NonNullable<Awaited<TMapOutput>> : TStage extends FindManyPipelineDistinctStage ? TCurrentRow : TStage extends {
1264
+ flatMap: infer TFlatMapConfig;
1265
+ } ? PipelineFlatMapOutput<TCurrentRow, TFlatMapConfig, TSchema, TTableConfig> : TCurrentRow;
1266
+ /**
1267
+ * Filter object keys to only non-undefined values
1268
+ * Used to filter `with` config to only included relations
1269
+ */
1270
+ type NonUndefinedKeysOnly$1<T> = ExtractObjectValues<{ [K in keyof T as T[K] extends undefined ? never : K]: K }> & keyof T;
1271
+ type TableColumnsForTable<TTable extends ConvexTable<any>> = TTable['_']['columns'] & SystemFields<TTable['_']['name']> & SystemFieldAliases<TTable['_']['name'], TTable['_']['columns']>;
1272
+ type MutationReturningCountSelection = Record<string, true | {
1273
+ where?: Record<string, unknown> | undefined;
1274
+ } | undefined>;
1275
+ type ReturningSelection<TTable extends ConvexTable<any>> = Record<string, TableColumnsForTable<TTable>[keyof TableColumnsForTable<TTable>] | MutationReturningCountSelection>;
1276
+ type ReturningResult<TSelection extends Record<string, unknown>> = Simplify$1<{ [K in keyof TSelection as K extends '_count' ? never : K]: TSelection[K] extends ColumnBuilderBase ? GetColumnData<TSelection[K], 'query'> : never } & (TSelection extends {
1277
+ _count: infer TCount;
1278
+ } ? TCount extends Record<string, unknown> ? {
1279
+ _count: { [K in NonUndefinedKeysOnly$1<TCount> & string]: number };
1280
+ } : {} : {})>;
1281
+ type ReturningAll<TTable extends ConvexTable<any>> = InferSelectModel<TTable>;
1282
+ type MutationReturning = true | Record<string, unknown> | undefined;
1283
+ type MutationResult<TTable extends ConvexTable<any>, TReturning extends MutationReturning> = TReturning extends true ? ReturningAll<TTable>[] : TReturning extends Record<string, ColumnBuilderBase> ? ReturningResult<TReturning>[] : undefined;
1284
+ type MutationPaginateConfig = {
1285
+ cursor: string | null;
1286
+ limit: number;
1287
+ };
1288
+ type MutationRunMode = 'sync' | 'async';
1289
+ type MutationExecuteConfig = {
1290
+ mode?: MutationRunMode;
1291
+ batchSize?: number;
1292
+ delayMs?: number;
1293
+ };
1294
+ type MutationExecutionMode = 'single' | 'paged';
1295
+ type MutationPaginatedResult<TTable extends ConvexTable<any>, TReturning extends MutationReturning> = Simplify$1<{
1296
+ continueCursor: string | null;
1297
+ isDone: boolean;
1298
+ numAffected: number;
1299
+ } & (MutationResult<TTable, TReturning> extends undefined ? {} : {
1300
+ page: MutationResult<TTable, TReturning>;
1301
+ })>;
1302
+ type MutationExecuteResult<TTable extends ConvexTable<any>, TReturning extends MutationReturning, TMode extends MutationExecutionMode> = TMode extends 'paged' ? MutationPaginatedResult<TTable, TReturning> : MutationResult<TTable, TReturning>;
1303
+ type InsertValue<TTable extends ConvexTable<any>> = InferInsertModel<TTable>;
1304
+ type UpdateSetValue<TColumn extends ColumnBuilderBase> = GetColumnData<TColumn, 'query'> | (TColumn['_']['notNull'] extends true ? never : UnsetToken) | undefined;
1305
+ type UpdateSet<TTable extends ConvexTable<any>> = Simplify$1<{ [K in keyof TTable['_']['columns'] & string]?: UpdateSetValue<TTable['_']['columns'][K]> }>;
1306
+ //#endregion
1307
+ //#region src/orm/builders/convex-column-builder.d.ts
1308
+ /**
1309
+ * Convex-specific column builder base class
1310
+ *
1311
+ * All Convex column builders (ConvexTextBuilder, ConvexIntegerBuilder, etc.)
1312
+ * inherit from this class.
1313
+ */
1314
+ declare abstract class ConvexColumnBuilder<T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>, TRuntimeConfig extends object = object> extends ColumnBuilder<T, TRuntimeConfig, {
1315
+ dialect: 'convex';
1316
+ }> {
1317
+ static readonly [entityKind]: string;
1318
+ /**
1319
+ * Build method - compiles builder to Convex validator
1320
+ *
1321
+ * Subclasses implement this to produce the correct validator:
1322
+ * - text() → v.string() or v.optional(v.string())
1323
+ * - integer() → v.number() or v.optional(v.number())
1324
+ * - etc.
1325
+ *
1326
+ * @returns Convex validator for this column
1327
+ */
1328
+ abstract build(): Validator<any, any, any>;
1329
+ }
1330
+ //#endregion
1331
+ //#region src/orm/builders/text.d.ts
1332
+ /**
1333
+ * Initial type for ConvexTextBuilder
1334
+ * Used in factory function return types
1335
+ * Matches Drizzle's pattern with all required properties
1336
+ */
1337
+ type ConvexTextBuilderInitial<TName extends string> = ConvexTextBuilder<{
1338
+ name: TName;
1339
+ dataType: 'string';
1340
+ columnType: 'ConvexText';
1341
+ data: string;
1342
+ driverParam: string;
1343
+ enumValues: undefined;
1344
+ }>;
1345
+ /**
1346
+ * Text column builder class
1347
+ * Compiles to v.string() or v.optional(v.string())
1348
+ */
1349
+ declare class ConvexTextBuilder<T extends ColumnBuilderBaseConfig<'string', 'ConvexText'>> extends ConvexColumnBuilder<T> {
1350
+ static readonly [entityKind]: string;
1351
+ constructor(name: T['name']);
1352
+ /**
1353
+ * Expose Convex validator for schema integration
1354
+ */
1355
+ get convexValidator(): Validator<any, any, any>;
1356
+ /**
1357
+ * Compile to Convex validator
1358
+ * .notNull() → v.string()
1359
+ * nullable → v.optional(v.string())
1360
+ */
1361
+ build(): Validator<any, any, any>;
1362
+ }
1363
+ /**
1364
+ * text() factory function
1365
+ *
1366
+ * Creates a text column builder.
1367
+ * Supports both named and unnamed columns (for later binding).
1368
+ *
1369
+ * @example
1370
+ * text() → unnamed column
1371
+ * text('col_name') → named column
1372
+ */
1373
+ declare function text(): ConvexTextBuilderInitial<''>;
1374
+ declare function text<TName extends string>(name: TName): ConvexTextBuilderInitial<TName>;
1375
+ //#endregion
1376
+ //#region src/orm/constraints.d.ts
1377
+ type ConvexConstraintColumn = ColumnBuilderBase;
1378
+ type ConvexForeignKeyColumns = [ConvexConstraintColumn, ...ConvexConstraintColumn[]];
1379
+ interface ConvexUniqueConstraintConfig {
1380
+ columns: ConvexConstraintColumn[];
1381
+ name?: string;
1382
+ nullsNotDistinct: boolean;
1383
+ }
1384
+ interface ConvexForeignKeyConfig<TColumns extends ConvexForeignKeyColumns = ConvexForeignKeyColumns> {
1385
+ columns: TColumns;
1386
+ foreignColumns: { [K in keyof TColumns]: ConvexConstraintColumn };
1387
+ name?: string;
1388
+ onDelete?: ForeignKeyAction;
1389
+ onUpdate?: ForeignKeyAction;
1390
+ }
1391
+ declare class ConvexUniqueConstraintBuilderOn {
1392
+ private name?;
1393
+ static readonly [entityKind] = "ConvexUniqueConstraintBuilderOn";
1394
+ readonly [entityKind] = "ConvexUniqueConstraintBuilderOn";
1395
+ constructor(name?: string | undefined);
1396
+ on(...columns: [ConvexConstraintColumn, ...ConvexConstraintColumn[]]): ConvexUniqueConstraintBuilder;
1397
+ }
1398
+ declare class ConvexUniqueConstraintBuilder {
1399
+ static readonly [entityKind] = "ConvexUniqueConstraintBuilder";
1400
+ readonly [entityKind] = "ConvexUniqueConstraintBuilder";
1401
+ _: {
1402
+ brand: 'ConvexUniqueConstraintBuilder';
1403
+ };
1404
+ config: ConvexUniqueConstraintConfig;
1405
+ constructor(name: string | undefined, columns: ConvexConstraintColumn[]);
1406
+ nullsNotDistinct(): this;
1407
+ }
1408
+ declare class ConvexForeignKeyBuilder {
1409
+ static readonly [entityKind] = "ConvexForeignKeyBuilder";
1410
+ readonly [entityKind] = "ConvexForeignKeyBuilder";
1411
+ _: {
1412
+ brand: 'ConvexForeignKeyBuilder';
1413
+ };
1414
+ config: ConvexForeignKeyConfig;
1415
+ constructor(config: ConvexForeignKeyConfig);
1416
+ onUpdate(action: ForeignKeyAction): this;
1417
+ onDelete(action: ForeignKeyAction): this;
1418
+ }
1419
+ declare function unique(name?: string): ConvexUniqueConstraintBuilderOn;
1420
+ declare function foreignKey<TColumns extends ConvexForeignKeyColumns>(config: ConvexForeignKeyConfig<TColumns>): ConvexForeignKeyBuilder;
1421
+ interface ConvexCheckConfig {
1422
+ expression: FilterExpression$1<boolean>;
1423
+ name: string;
1424
+ }
1425
+ declare class ConvexCheckBuilder {
1426
+ static readonly [entityKind] = "ConvexCheckBuilder";
1427
+ readonly [entityKind] = "ConvexCheckBuilder";
1428
+ _: {
1429
+ brand: 'ConvexCheckBuilder';
1430
+ };
1431
+ config: ConvexCheckConfig;
1432
+ constructor(name: string, expression: FilterExpression$1<boolean>);
1433
+ }
1434
+ declare function check(name: string, expression: FilterExpression$1<boolean>): ConvexCheckBuilder;
1435
+ //#endregion
1436
+ //#region src/orm/indexes.d.ts
1437
+ type ConvexIndexColumn = ColumnBuilderBase;
1438
+ interface ConvexIndexConfig<TName extends string = string, TColumns extends readonly ConvexIndexColumn[] = ConvexIndexColumn[], TUnique extends boolean = boolean> {
1439
+ columns: TColumns;
1440
+ name: TName;
1441
+ unique: TUnique;
1442
+ where?: unknown;
1443
+ }
1444
+ interface ConvexSearchIndexConfig<TName extends string = string, TSearchField extends ConvexIndexColumn = ConvexIndexColumn, TFilterFields extends readonly ConvexIndexColumn[] = ConvexIndexColumn[]> {
1445
+ filterFields: TFilterFields;
1446
+ name: TName;
1447
+ searchField: TSearchField;
1448
+ staged: boolean;
1449
+ }
1450
+ interface ConvexVectorIndexConfig<TName extends string = string, TVectorField extends ConvexIndexColumn = ConvexIndexColumn, TFilterFields extends readonly ConvexIndexColumn[] = ConvexIndexColumn[]> {
1451
+ dimensions: number;
1452
+ filterFields: TFilterFields;
1453
+ name: TName;
1454
+ staged: boolean;
1455
+ vectorField: TVectorField;
1456
+ }
1457
+ interface ConvexAggregateIndexConfig<TName extends string = string, TColumns extends readonly ConvexIndexColumn[] = ConvexIndexColumn[]> {
1458
+ avgFields: readonly ConvexIndexColumn[];
1459
+ columns: TColumns;
1460
+ countFields: readonly ConvexIndexColumn[];
1461
+ maxFields: readonly ConvexIndexColumn[];
1462
+ minFields: readonly ConvexIndexColumn[];
1463
+ name: TName;
1464
+ sumFields: readonly ConvexIndexColumn[];
1465
+ }
1466
+ interface ConvexRankIndexOrderSpec<TColumn extends ConvexIndexColumn = ConvexIndexColumn> {
1467
+ column: TColumn;
1468
+ direction: 'asc' | 'desc';
1469
+ }
1470
+ type ConvexRankOrderByInput<TColumn extends ConvexIndexColumn> = TColumn | {
1471
+ column: {
1472
+ builder: TColumn;
1473
+ };
1474
+ direction: 'asc' | 'desc';
1475
+ };
1476
+ interface ConvexRankIndexConfig<TName extends string = string, TPartitionColumns extends readonly ConvexIndexColumn[] = ConvexIndexColumn[], TOrderColumns extends readonly ConvexRankIndexOrderSpec[] = readonly ConvexRankIndexOrderSpec[]> {
1477
+ name: TName;
1478
+ orderColumns: TOrderColumns;
1479
+ partitionColumns: TPartitionColumns;
1480
+ sumField?: ConvexIndexColumn;
1481
+ }
1482
+ declare class ConvexIndexBuilderOn<TName extends string = string, TUnique extends boolean = boolean> {
1483
+ private name;
1484
+ private unique;
1485
+ static readonly [entityKind] = "ConvexIndexBuilderOn";
1486
+ readonly [entityKind] = "ConvexIndexBuilderOn";
1487
+ constructor(name: TName, unique: TUnique);
1488
+ on<TColumns extends [ConvexIndexColumn, ...ConvexIndexColumn[]]>(...columns: TColumns): ConvexIndexBuilder<TName, TColumns, TUnique>;
1489
+ }
1490
+ declare class ConvexIndexBuilder<TName extends string = string, TColumns extends readonly [ConvexIndexColumn, ...ConvexIndexColumn[]] = [ConvexIndexColumn, ...ConvexIndexColumn[]], TUnique extends boolean = boolean> {
1491
+ static readonly [entityKind] = "ConvexIndexBuilder";
1492
+ readonly [entityKind] = "ConvexIndexBuilder";
1493
+ _: {
1494
+ brand: 'ConvexIndexBuilder';
1495
+ name: TName;
1496
+ columns: TColumns;
1497
+ unique: TUnique;
1498
+ };
1499
+ config: ConvexIndexConfig<TName, TColumns, TUnique>;
1500
+ constructor(name: TName, columns: TColumns, unique: TUnique);
1501
+ /**
1502
+ * Partial index conditions are not supported in Convex.
1503
+ * This method is kept for Drizzle API parity.
1504
+ */
1505
+ where(condition: unknown): this;
1506
+ }
1507
+ declare class ConvexSearchIndexBuilderOn<TName extends string = string> {
1508
+ private name;
1509
+ static readonly [entityKind] = "ConvexSearchIndexBuilderOn";
1510
+ readonly [entityKind] = "ConvexSearchIndexBuilderOn";
1511
+ constructor(name: TName);
1512
+ on<TSearchField extends ConvexIndexColumn>(searchField: TSearchField): ConvexSearchIndexBuilder<TName, TSearchField>;
1513
+ }
1514
+ declare class ConvexSearchIndexBuilder<TName extends string = string, TSearchField extends ConvexIndexColumn = ConvexIndexColumn, TFilterFields extends readonly ConvexIndexColumn[] = ConvexIndexColumn[]> {
1515
+ static readonly [entityKind] = "ConvexSearchIndexBuilder";
1516
+ readonly [entityKind] = "ConvexSearchIndexBuilder";
1517
+ _: {
1518
+ brand: 'ConvexSearchIndexBuilder';
1519
+ name: TName;
1520
+ searchField: TSearchField;
1521
+ filterFields: TFilterFields;
1522
+ };
1523
+ config: ConvexSearchIndexConfig<TName, TSearchField, TFilterFields>;
1524
+ constructor(name: TName, searchField: TSearchField);
1525
+ filter<TNextFilterFields extends readonly ConvexIndexColumn[]>(...fields: TNextFilterFields): ConvexSearchIndexBuilder<TName, TSearchField, TNextFilterFields>;
1526
+ staged(): this;
1527
+ }
1528
+ type ConvexVectorIndexConfigInternal = Omit<ConvexVectorIndexConfig<string, ConvexIndexColumn, readonly ConvexIndexColumn[]>, 'dimensions'> & {
1529
+ dimensions?: number;
1530
+ };
1531
+ declare class ConvexVectorIndexBuilderOn<TName extends string = string> {
1532
+ private name;
1533
+ static readonly [entityKind] = "ConvexVectorIndexBuilderOn";
1534
+ readonly [entityKind] = "ConvexVectorIndexBuilderOn";
1535
+ constructor(name: TName);
1536
+ on<TVectorField extends ConvexIndexColumn>(vectorField: TVectorField): ConvexVectorIndexBuilder<TName, TVectorField>;
1537
+ }
1538
+ declare class ConvexAggregateIndexBuilderOn<TName extends string = string> {
1539
+ private name;
1540
+ static readonly [entityKind] = "ConvexAggregateIndexBuilderOn";
1541
+ readonly [entityKind] = "ConvexAggregateIndexBuilderOn";
1542
+ constructor(name: TName);
1543
+ on<TColumns extends [ConvexIndexColumn, ...ConvexIndexColumn[]]>(...columns: TColumns): ConvexAggregateIndexBuilder<TName, TColumns>;
1544
+ all(): ConvexAggregateIndexBuilder<TName, []>;
1545
+ }
1546
+ declare class ConvexAggregateIndexBuilder<TName extends string = string, TColumns extends readonly ConvexIndexColumn[] = ConvexIndexColumn[]> {
1547
+ static readonly [entityKind] = "ConvexAggregateIndexBuilder";
1548
+ readonly [entityKind] = "ConvexAggregateIndexBuilder";
1549
+ _: {
1550
+ brand: 'ConvexAggregateIndexBuilder';
1551
+ name: TName;
1552
+ columns: TColumns;
1553
+ };
1554
+ config: ConvexAggregateIndexConfig<TName, TColumns>;
1555
+ constructor(name: TName, columns: TColumns);
1556
+ count(...fields: readonly ConvexIndexColumn[]): this;
1557
+ sum(...fields: readonly ConvexIndexColumn[]): this;
1558
+ avg(...fields: readonly ConvexIndexColumn[]): this;
1559
+ min(...fields: readonly ConvexIndexColumn[]): this;
1560
+ max(...fields: readonly ConvexIndexColumn[]): this;
1561
+ }
1562
+ declare class ConvexRankIndexBuilderOn<TName extends string = string> {
1563
+ private name;
1564
+ static readonly [entityKind] = "ConvexRankIndexBuilderOn";
1565
+ readonly [entityKind] = "ConvexRankIndexBuilderOn";
1566
+ constructor(name: TName);
1567
+ partitionBy<TColumns extends readonly ConvexIndexColumn[]>(...columns: TColumns): ConvexRankIndexBuilder<TName, TColumns, []>;
1568
+ all(): ConvexRankIndexBuilder<TName, [], []>;
1569
+ }
1570
+ declare class ConvexRankIndexBuilder<TName extends string = string, TPartitionColumns extends readonly ConvexIndexColumn[] = ConvexIndexColumn[], TOrderColumns extends readonly ConvexRankIndexOrderSpec[] = readonly ConvexRankIndexOrderSpec[]> {
1571
+ static readonly [entityKind] = "ConvexRankIndexBuilder";
1572
+ readonly [entityKind] = "ConvexRankIndexBuilder";
1573
+ _: {
1574
+ brand: 'ConvexRankIndexBuilder';
1575
+ name: TName;
1576
+ partitionColumns: TPartitionColumns;
1577
+ orderColumns: TOrderColumns;
1578
+ };
1579
+ config: ConvexRankIndexConfig<TName, TPartitionColumns, TOrderColumns>;
1580
+ constructor(name: TName, partitionColumns: TPartitionColumns, orderColumns: TOrderColumns);
1581
+ orderBy<TNextColumns extends readonly ConvexRankIndexOrderSpec[]>(...columns: TNextColumns & readonly ConvexRankOrderByInput<ConvexIndexColumn>[]): ConvexRankIndexBuilder<TName, TPartitionColumns, TNextColumns>;
1582
+ sum(field: ConvexIndexColumn): this;
1583
+ }
1584
+ declare class ConvexVectorIndexBuilder<TName extends string = string, TVectorField extends ConvexIndexColumn = ConvexIndexColumn, TFilterFields extends readonly ConvexIndexColumn[] = ConvexIndexColumn[]> {
1585
+ static readonly [entityKind] = "ConvexVectorIndexBuilder";
1586
+ readonly [entityKind] = "ConvexVectorIndexBuilder";
1587
+ _: {
1588
+ brand: 'ConvexVectorIndexBuilder';
1589
+ name: TName;
1590
+ vectorField: TVectorField;
1591
+ filterFields: TFilterFields;
1592
+ };
1593
+ config: ConvexVectorIndexConfigInternal & {
1594
+ name: TName;
1595
+ vectorField: TVectorField;
1596
+ filterFields: TFilterFields;
1597
+ };
1598
+ constructor(name: TName, vectorField: TVectorField);
1599
+ dimensions(dimensions: number): this;
1600
+ filter<TNextFilterFields extends readonly ConvexIndexColumn[]>(...fields: TNextFilterFields): ConvexVectorIndexBuilder<TName, TVectorField, TNextFilterFields>;
1601
+ staged(): this;
1602
+ }
1603
+ declare function index<TName extends string>(name: TName): ConvexIndexBuilderOn<TName, false>;
1604
+ declare function uniqueIndex<TName extends string>(name: TName): ConvexIndexBuilderOn<TName, true>;
1605
+ declare function searchIndex<TName extends string>(name: TName): ConvexSearchIndexBuilderOn<TName>;
1606
+ declare function vectorIndex<TName extends string>(name: TName): ConvexVectorIndexBuilderOn<TName>;
1607
+ declare function aggregateIndex<TName extends string>(name: TName): ConvexAggregateIndexBuilderOn<TName>;
1608
+ declare function rankIndex<TName extends string>(name: TName): ConvexRankIndexBuilderOn<TName>;
1609
+ //#endregion
1610
+ //#region src/orm/rls/roles.d.ts
1611
+ interface RlsRoleConfig {
1612
+ createDb?: boolean;
1613
+ createRole?: boolean;
1614
+ inherit?: boolean;
1615
+ }
1616
+ declare class RlsRole implements RlsRoleConfig {
1617
+ readonly name: string;
1618
+ static readonly [entityKind]: string;
1619
+ readonly [entityKind]: string;
1620
+ /** @internal */
1621
+ _existing?: boolean;
1622
+ /** @internal */
1623
+ readonly createDb: RlsRoleConfig['createDb'];
1624
+ /** @internal */
1625
+ readonly createRole: RlsRoleConfig['createRole'];
1626
+ /** @internal */
1627
+ readonly inherit: RlsRoleConfig['inherit'];
1628
+ constructor(name: string, config?: RlsRoleConfig);
1629
+ existing(): this;
1630
+ }
1631
+ declare function rlsRole(name: string, config?: RlsRoleConfig): RlsRole;
1632
+ //#endregion
1633
+ //#region src/orm/rls/policies.d.ts
1634
+ type RlsPolicyToOption = 'public' | 'current_role' | 'current_user' | 'session_user' | (string & {}) | RlsRole | RlsPolicyToOption[];
1635
+ type PolicyExpression<TCtx, TTable> = FilterExpression$1<boolean> | ((ctx: TCtx, table: TTable) => FilterExpression$1<boolean> | Promise<FilterExpression$1<boolean>>);
1636
+ interface RlsPolicyConfig<TCtx = any, TTable = ConvexTableWithColumns<any>> {
1637
+ as?: 'permissive' | 'restrictive';
1638
+ for?: 'all' | 'select' | 'insert' | 'update' | 'delete';
1639
+ to?: RlsPolicyToOption;
1640
+ using?: PolicyExpression<TCtx, TTable>;
1641
+ withCheck?: PolicyExpression<TCtx, TTable>;
1642
+ }
1643
+ declare class RlsPolicy<TCtx = any, TTable = ConvexTableWithColumns<any>> implements RlsPolicyConfig<TCtx, TTable> {
1644
+ readonly name: string;
1645
+ static readonly [entityKind]: string;
1646
+ readonly [entityKind]: string;
1647
+ readonly as: RlsPolicyConfig<TCtx, TTable>['as'];
1648
+ readonly for: RlsPolicyConfig<TCtx, TTable>['for'];
1649
+ readonly to: RlsPolicyConfig<TCtx, TTable>['to'];
1650
+ readonly using: RlsPolicyConfig<TCtx, TTable>['using'];
1651
+ readonly withCheck: RlsPolicyConfig<TCtx, TTable>['withCheck'];
1652
+ /** @internal */
1653
+ _linkedTable?: ConvexTable<any>;
1654
+ constructor(name: string, config?: RlsPolicyConfig<TCtx, TTable>);
1655
+ link(table: ConvexTable<any>): this;
1656
+ }
1657
+ declare function rlsPolicy<TCtx = any, TTable = ConvexTableWithColumns<any>>(name: string, config?: RlsPolicyConfig<TCtx, TTable>): RlsPolicy<TCtx, TTable>;
1658
+ //#endregion
1659
+ //#region src/orm/table.d.ts
1660
+ declare const DEFAULT_POLYMORPHIC_ALIAS: "details";
1661
+ type PolymorphicVariantDefinitions = Record<string, Record<string, ColumnBuilderBase>>;
1662
+ type PolymorphicDiscriminatorValue<TVariants extends PolymorphicVariantDefinitions> = Extract<keyof TVariants, string>;
1663
+ type PolymorphicTypeMetadata<TVariants extends PolymorphicVariantDefinitions = PolymorphicVariantDefinitions, TAlias extends string = string> = {
1664
+ as: TAlias;
1665
+ variants: TVariants;
1666
+ };
1667
+ type OverrideColumnMeta<TColumn extends ColumnBuilderBase, TOverrides extends object> = TColumn extends {
1668
+ _: infer TMeta extends object;
1669
+ } ? Omit<TColumn, '_'> & {
1670
+ _: Omit<TMeta, keyof TOverrides> & TOverrides;
1671
+ } : TColumn;
1672
+ type PolymorphicGeneratedColumn<TColumn extends ColumnBuilderBase> = OverrideColumnMeta<TColumn, {
1673
+ hasDefault: false;
1674
+ notNull: false;
1675
+ }>;
1676
+ type PolymorphicDiscriminatorColumn<TVariants extends PolymorphicVariantDefinitions = PolymorphicVariantDefinitions, TAlias extends string = typeof DEFAULT_POLYMORPHIC_ALIAS> = $Type<NotNull<ConvexTextBuilderInitial<''>>, PolymorphicDiscriminatorValue<TVariants>> & {
1677
+ __polymorphic: PolymorphicTypeMetadata<TVariants, TAlias>;
1678
+ };
1679
+ type ExtractPolymorphicVariants<TColumn> = TColumn extends {
1680
+ __polymorphic: infer TMeta;
1681
+ } ? TMeta extends PolymorphicTypeMetadata<infer TVariants extends PolymorphicVariantDefinitions, string> ? TVariants : never : never;
1682
+ type ExtractPolymorphicGeneratedColumns<TColumns> = SimplifyObject<UnionToIntersection$1<{ [K in keyof TColumns]: ExtractPolymorphicVariants<TColumns[K]> extends infer TVariants ? [TVariants] extends [never] ? {} : { [V in keyof TVariants & string]: { [F in keyof TVariants[V] & string]: TVariants[V][F] extends ColumnBuilderBase ? PolymorphicGeneratedColumn<TVariants[V][F]> : never } }[keyof TVariants & string] : {} }[keyof TColumns]>>;
1683
+ type MergeColumnObjects<TLeft, TRight> = { [K in keyof TLeft | keyof TRight]: K extends keyof TRight ? TRight[K] : K extends keyof TLeft ? TLeft[K] : never };
1684
+ type ExpandTableColumns<TColumns> = SimplifyObject<MergeColumnObjects<TColumns, ExtractPolymorphicGeneratedColumns<TColumns>>>;
1685
+ /**
1686
+ * Configuration for a Convex table
1687
+ * Only supports column builders (text(), integer(), etc.)
1688
+ *
1689
+ * CRITICAL: No extends constraint on TColumns to avoid type widening (convex-ents pattern)
1690
+ */
1691
+ interface TableConfig<TName extends string = string, TColumns = any> {
1692
+ columns: TColumns;
1693
+ name: TName;
1694
+ }
1695
+ type ColumnsWithTableName<TColumns, TName extends string> = { [K in keyof TColumns]: TColumns[K] extends ColumnBuilderBase ? ColumnBuilderWithTableName<TColumns[K], TName> & {
1696
+ _: {
1697
+ fieldName: K extends string ? K : never;
1698
+ };
1699
+ } : TColumns[K] };
1700
+ type ColumnsWithSystemFields<TColumns, TName extends string> = ColumnsWithTableName<TColumns, TName> & (TColumns extends Record<string, unknown> ? SystemFieldsWithAliases<TName, TColumns> : SystemFieldsWithAliases<TName>);
1701
+ type DiscriminatorBuilderConfig<TVariants extends PolymorphicVariantDefinitions = PolymorphicVariantDefinitions, TAlias extends string = typeof DEFAULT_POLYMORPHIC_ALIAS> = {
1702
+ as?: TAlias;
1703
+ variants: TVariants;
1704
+ };
1705
+ declare function discriminator<const TVariants extends PolymorphicVariantDefinitions, const TAlias extends string>(config: DiscriminatorBuilderConfig<TVariants, TAlias> & {
1706
+ as: TAlias;
1707
+ }): PolymorphicDiscriminatorColumn<TVariants, TAlias>;
1708
+ declare function discriminator<const TVariants extends PolymorphicVariantDefinitions>(config: DiscriminatorBuilderConfig<TVariants>): PolymorphicDiscriminatorColumn<TVariants, typeof DEFAULT_POLYMORPHIC_ALIAS>;
1709
+ type ConvexTableExtraConfigValue = ConvexIndexBuilder | ConvexAggregateIndexBuilder | ConvexRankIndexBuilder | ConvexSearchIndexBuilder | ConvexVectorIndexBuilder | ConvexForeignKeyBuilder | ConvexCheckBuilder | ConvexUniqueConstraintBuilder | ConvexDeletionBuilder | RlsPolicy;
1710
+ type ConvexTableExtraConfig = Record<string, ConvexTableExtraConfigValue>;
1711
+ type UnionToIntersection$1<T> = (T extends unknown ? (arg: T) => void : never) extends ((arg: infer U) => void) ? U : never;
1712
+ type SimplifyObject<T> = { [K in keyof T]: T[K] };
1713
+ type ExtraConfigValues<TExtraConfig> = TExtraConfig extends readonly (infer TValue)[] ? TValue : TExtraConfig extends Record<string, infer TValue> ? TValue : never;
1714
+ type ColumnNameFromBuilder<TColumn extends ColumnBuilderBase> = TColumn extends {
1715
+ _: {
1716
+ fieldName: infer TFieldName extends string;
1717
+ };
1718
+ } ? TFieldName : never;
1719
+ type IndexFieldTupleFromColumns<TColumns extends readonly [ConvexIndexColumn, ...ConvexIndexColumn[]]> = [...{ [K in keyof TColumns]: TColumns[K] extends ConvexIndexColumn ? ColumnNameFromBuilder<TColumns[K]> : never }, '_creationTime'];
1720
+ type InferDbIndexRecordFromExtraValue<TValue> = TValue extends ConvexIndexBuilder<infer TName extends string, infer TColumns extends readonly [ConvexIndexColumn, ...ConvexIndexColumn[]], boolean> ? Record<TName, IndexFieldTupleFromColumns<TColumns>> : {};
1721
+ type SearchFilterFieldsUnionFromColumns<TColumns extends readonly ConvexIndexColumn[]> = TColumns[number] extends infer TColumn extends ConvexIndexColumn ? ColumnNameFromBuilder<TColumn> : never;
1722
+ type AggregateFieldUnionFromColumns<TColumns extends readonly ConvexIndexColumn[]> = TColumns[number] extends infer TColumn extends ConvexIndexColumn ? ColumnNameFromBuilder<TColumn> : never;
1723
+ type InferSearchIndexRecordFromExtraValue<TValue> = TValue extends ConvexSearchIndexBuilder<infer TName extends string, infer TSearchField extends ConvexIndexColumn, infer TFilterFields extends readonly ConvexIndexColumn[]> ? Record<TName, {
1724
+ searchField: ColumnNameFromBuilder<TSearchField>;
1725
+ filterFields: SearchFilterFieldsUnionFromColumns<TFilterFields>;
1726
+ }> : {};
1727
+ type InferVectorIndexRecordFromExtraValue<TValue> = TValue extends ConvexVectorIndexBuilder<infer TName extends string, infer TVectorField extends ConvexIndexColumn, infer TFilterFields extends readonly ConvexIndexColumn[]> ? Record<TName, {
1728
+ vectorField: ColumnNameFromBuilder<TVectorField>;
1729
+ dimensions: number;
1730
+ filterFields: SearchFilterFieldsUnionFromColumns<TFilterFields>;
1731
+ }> : {};
1732
+ type InferAggregateIndexRecordFromExtraValue<TValue> = TValue extends ConvexAggregateIndexBuilder<infer TName extends string, infer TColumns extends readonly ConvexIndexColumn[]> ? Record<TName, AggregateFieldUnionFromColumns<TColumns>> : {};
1733
+ type InferredDbIndexesFromExtraConfig<TExtraConfig> = UnionToIntersection$1<InferDbIndexRecordFromExtraValue<ExtraConfigValues<Exclude<TExtraConfig, undefined>>>>;
1734
+ type InferredSearchIndexesFromExtraConfig<TExtraConfig> = UnionToIntersection$1<InferSearchIndexRecordFromExtraValue<ExtraConfigValues<Exclude<TExtraConfig, undefined>>>>;
1735
+ type InferredVectorIndexesFromExtraConfig<TExtraConfig> = UnionToIntersection$1<InferVectorIndexRecordFromExtraValue<ExtraConfigValues<Exclude<TExtraConfig, undefined>>>>;
1736
+ type InferredAggregateIndexesFromExtraConfig<TExtraConfig> = UnionToIntersection$1<InferAggregateIndexRecordFromExtraValue<ExtraConfigValues<Exclude<TExtraConfig, undefined>>>>;
1737
+ type NormalizeDbIndexMap<TIndexMap> = { [K in keyof TIndexMap as K extends string ? K : never]: TIndexMap[K] extends string[] ? TIndexMap[K] : never };
1738
+ type NormalizeSearchIndexMap<TIndexMap> = { [K in keyof TIndexMap as K extends string ? K : never]: TIndexMap[K] extends {
1739
+ searchField: infer TSearchField extends string;
1740
+ filterFields: infer TFilterFields extends string;
1741
+ } ? {
1742
+ searchField: TSearchField;
1743
+ filterFields: TFilterFields;
1744
+ } : never };
1745
+ type NormalizeVectorIndexMap<TIndexMap> = { [K in keyof TIndexMap as K extends string ? K : never]: TIndexMap[K] extends {
1746
+ vectorField: infer TVectorField extends string;
1747
+ dimensions: infer TDimensions extends number;
1748
+ filterFields: infer TFilterFields extends string;
1749
+ } ? {
1750
+ vectorField: TVectorField;
1751
+ dimensions: TDimensions;
1752
+ filterFields: TFilterFields;
1753
+ } : never };
1754
+ type NormalizeAggregateIndexMap<TIndexMap> = { [K in keyof TIndexMap as K extends string ? K : never]: TIndexMap[K] extends string ? TIndexMap[K] : never };
1755
+ type InferDbIndexesFromExtraConfig<TExtraConfig> = SimplifyObject<{
1756
+ by_creation_time: ['_creationTime'];
1757
+ } & NormalizeDbIndexMap<InferredDbIndexesFromExtraConfig<TExtraConfig>>>;
1758
+ type InferSearchIndexesFromExtraConfig<TExtraConfig> = SimplifyObject<NormalizeSearchIndexMap<InferredSearchIndexesFromExtraConfig<TExtraConfig>>>;
1759
+ type InferVectorIndexesFromExtraConfig<TExtraConfig> = SimplifyObject<NormalizeVectorIndexMap<InferredVectorIndexesFromExtraConfig<TExtraConfig>>>;
1760
+ type ConvexDeletionConfig = {
1761
+ mode: OrmDeleteMode;
1762
+ delayMs?: number;
1763
+ };
1764
+ type OrmLifecycleOperation = 'insert' | 'update' | 'delete';
1765
+ type OrmLifecycleChangeId<TDoc> = TDoc extends {
1766
+ _id: infer TId;
1767
+ } ? TId : TDoc extends {
1768
+ id: infer TId;
1769
+ } ? TId : unknown;
1770
+ type OrmLifecycleChange<TDoc = Record<string, unknown>, TId = OrmLifecycleChangeId<TDoc>> = {
1771
+ id: TId;
1772
+ } & ({
1773
+ operation: 'insert';
1774
+ oldDoc: null;
1775
+ newDoc: TDoc;
1776
+ } | {
1777
+ operation: 'update';
1778
+ oldDoc: TDoc;
1779
+ newDoc: TDoc;
1780
+ } | {
1781
+ operation: 'delete';
1782
+ oldDoc: TDoc;
1783
+ newDoc: null;
1784
+ });
1785
+ declare class ConvexDeletionBuilder {
1786
+ readonly config: ConvexDeletionConfig;
1787
+ static readonly [entityKind] = "ConvexDeletionBuilder";
1788
+ readonly [entityKind] = "ConvexDeletionBuilder";
1789
+ constructor(config: ConvexDeletionConfig);
1790
+ }
1791
+ declare function deletion(mode: OrmDeleteMode, options?: {
1792
+ delayMs?: number;
1793
+ }): ConvexDeletionBuilder;
1794
+ /**
1795
+ * ConvexTable interface with type branding
1796
+ * Extends TableDefinition for schema compatibility
1797
+ * Adds phantom types for type inference
1798
+ *
1799
+ * Following Drizzle pattern: columns are exposed as table properties
1800
+ * via mapped type for type safety + Object.assign for runtime access
1801
+ */
1802
+ interface ConvexTable<T extends TableConfig, Indexes extends GenericTableIndexes = {}, SearchIndexes extends GenericTableSearchIndexes = {}, VectorIndexes extends GenericTableVectorIndexes = {}, AggregateIndexes extends Record<string, string> = {}> extends TableDefinition<Validator<any, any, any>, Indexes, SearchIndexes, VectorIndexes> {
1803
+ /**
1804
+ * Type brand for generic type extraction
1805
+ * Uses `declare readonly` to avoid runtime overhead
1806
+ */
1807
+ readonly _: {
1808
+ readonly brand: 'ConvexTable';
1809
+ readonly name: T['name'];
1810
+ readonly columns: T['columns'];
1811
+ readonly aggregateIndexes: AggregateIndexes;
1812
+ readonly inferSelect: InferSelectModel<ConvexTable<T>>;
1813
+ readonly inferInsert: InferInsertModel<ConvexTable<T>>;
1814
+ };
1815
+ readonly $inferInsert: InferInsertModel<ConvexTable<T>>;
1816
+ /**
1817
+ * Inferred types for select and insert operations
1818
+ * Following Drizzle's pattern: $inferSelect and $inferInsert properties
1819
+ */
1820
+ readonly $inferSelect: InferSelectModel<ConvexTable<T>>;
1821
+ tableName: T['name'];
1822
+ /**
1823
+ * Convex schema validator
1824
+ */
1825
+ validator: Validator<any, any, any>;
1826
+ /**
1827
+ * Symbol-based metadata storage
1828
+ */
1829
+ [TableName]: T['name'];
1830
+ [Columns]: T['columns'];
1831
+ [Brand]: 'ConvexTable';
1832
+ [RlsPolicies]: RlsPolicy[];
1833
+ [EnableRLS]: boolean;
1834
+ [TableDeleteConfig]?: OrmTableDeleteConfig;
1835
+ [TablePolymorphic]?: readonly TablePolymorphicConfigRuntime[];
1836
+ }
1837
+ /**
1838
+ * ConvexTable with columns as properties
1839
+ * Following Drizzle's PgTableWithColumns pattern
1840
+ * Mapped type makes columns accessible: table.columnName
1841
+ * Includes public system fields (id, createdAt) available on all Convex documents
1842
+ */
1843
+ type ConvexTableWithColumns<T extends TableConfig, Indexes extends GenericTableIndexes = {}, SearchIndexes extends GenericTableSearchIndexes = {}, VectorIndexes extends GenericTableVectorIndexes = {}, AggregateIndexes extends Record<string, string> = {}> = ConvexTable<T, Indexes, SearchIndexes, VectorIndexes, AggregateIndexes> & { [Key in keyof T['columns']]: T['columns'][Key] } & SystemFields<T['name']> & SystemFieldAliases<T['name'], T['columns']>;
1844
+ /**
1845
+ * Create a type-safe Convex table definition
1846
+ *
1847
+ * Uses Drizzle-style column builders:
1848
+ * - text().notNull(), integer(), boolean(), etc.
1849
+ *
1850
+ * @param name - Table name (must be valid Convex table name)
1851
+ * @param columns - Column builders
1852
+ * @returns ConvexTable instance compatible with defineSchema()
1853
+ *
1854
+ * @example
1855
+ * import { convexTable, text, integer } from 'kitcn/orm';
1856
+ *
1857
+ * const users = convexTable('users', {
1858
+ * name: text().notNull(),
1859
+ * email: text().notNull(),
1860
+ * age: integer(),
1861
+ * });
1862
+ *
1863
+ * // Use in schema - works with defineSchema()
1864
+ * export default defineSchema({ users });
1865
+ *
1866
+ * // Extract types
1867
+ * type User = InferSelectModel<typeof users>;
1868
+ * type NewUser = InferInsertModel<typeof users>;
1869
+ *
1870
+ * // Indexes
1871
+ * const usersWithIndex = convexTable('users', { email: text() }, (t) => [
1872
+ * index('by_email').on(t.email),
1873
+ * ]);
1874
+ */
1875
+ type ConvexTableFnInternal = <TName extends string, TColumns, TExtraConfig extends ConvexTableExtraConfigValue[] | ConvexTableExtraConfig | undefined = undefined>(name: TName, columns: TColumns, extraConfig?: (self: ColumnsWithSystemFields<ExpandTableColumns<TColumns>, TName>) => TExtraConfig) => ConvexTableWithColumns<{
1876
+ name: TName;
1877
+ columns: ColumnsWithTableName<ExpandTableColumns<TColumns>, TName>;
1878
+ }, InferDbIndexesFromExtraConfig<TExtraConfig>, InferSearchIndexesFromExtraConfig<TExtraConfig>, InferVectorIndexesFromExtraConfig<TExtraConfig>, NormalizeAggregateIndexMap<InferredAggregateIndexesFromExtraConfig<TExtraConfig>>>;
1879
+ interface ConvexTableFn extends ConvexTableFnInternal {
1880
+ withRLS: ConvexTableFnInternal;
1881
+ }
1882
+ declare const convexTable: ConvexTableFn;
1883
+ //#endregion
1884
+ //#region src/orm/relations.d.ts
1885
+ type SchemaEntry = ConvexTable<any>;
1886
+ type Schema = Record<string, SchemaEntry>;
1887
+ type ExtractSchemaEntries<TTables extends object> = { [K in keyof TTables as TTables[K] extends SchemaEntry ? K extends string ? K : never : never]: Extract<TTables[K], SchemaEntry> };
1888
+ type ExtractTablesFromSchema<TSchema extends object> = TSchema extends SchemaDefinition<infer TTables, boolean> ? ExtractSchemaEntries<TTables> : ExtractSchemaEntries<TSchema>;
1889
+ type IncludeEveryTable<TTables extends Schema> = { [K in keyof TTables]: {} };
1890
+ declare class RelationsBuilderTable<TTableName extends string = string> {
1891
+ static readonly [entityKind]: string;
1892
+ protected readonly _: {
1893
+ readonly name: TTableName;
1894
+ readonly table: SchemaEntry;
1895
+ };
1896
+ constructor(table: SchemaEntry, name: TTableName);
1897
+ }
1898
+ interface RelationsBuilderColumnConfig<TTableName extends string = string> {
1899
+ readonly column: ColumnBuilder<any, any, any>;
1900
+ readonly key: string;
1901
+ readonly tableName: TTableName;
1902
+ readonly through?: RelationsBuilderColumnBase;
1903
+ }
1904
+ interface RelationsBuilderColumnBase<TTableName extends string = string> {
1905
+ _: RelationsBuilderColumnConfig<TTableName>;
1906
+ }
1907
+ declare class RelationsBuilderColumn<TTableName extends string = string> implements RelationsBuilderColumnBase<TTableName> {
1908
+ static readonly [entityKind]: string;
1909
+ readonly _: {
1910
+ readonly tableName: TTableName;
1911
+ readonly column: ColumnBuilder<any, any, any>;
1912
+ readonly key: string;
1913
+ };
1914
+ constructor(column: ColumnBuilder<any, any, any>, tableName: TTableName, key: string);
1915
+ through(column: RelationsBuilderColumn): RelationsBuilderJunctionColumn<TTableName>;
1916
+ }
1917
+ declare class RelationsBuilderJunctionColumn<TTableName extends string = string> implements RelationsBuilderColumnBase<TTableName> {
1918
+ static readonly [entityKind]: string;
1919
+ readonly _: {
1920
+ readonly tableName: TTableName;
1921
+ readonly column: ColumnBuilder<any, any, any>;
1922
+ readonly through: RelationsBuilderColumnBase;
1923
+ readonly key: string;
1924
+ };
1925
+ constructor(column: ColumnBuilder<any, any, any>, tableName: TTableName, key: string, through: RelationsBuilderColumnBase);
1926
+ }
1927
+ interface OneConfig<TTargetTable extends SchemaEntry, TOptional extends boolean> {
1928
+ alias?: string;
1929
+ from?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];
1930
+ optional?: TOptional;
1931
+ to?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];
1932
+ where?: TableFilter<TTargetTable>;
1933
+ }
1934
+ type AnyOneConfig = OneConfig<SchemaEntry, boolean>;
1935
+ interface ManyConfig<TTargetTable extends SchemaEntry> {
1936
+ alias?: string;
1937
+ from?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];
1938
+ to?: RelationsBuilderColumnBase | [RelationsBuilderColumnBase, ...RelationsBuilderColumnBase[]];
1939
+ where?: TableFilter<TTargetTable>;
1940
+ }
1941
+ type AnyManyConfig = ManyConfig<SchemaEntry>;
1942
+ type OneFn<TTargetTable extends SchemaEntry, TTargetTableName extends string> = <TOptional extends boolean = true>(config?: OneConfig<TTargetTable, TOptional>) => One<TTargetTableName, TOptional>;
1943
+ type ManyFn<TTargetTable extends SchemaEntry, TTargetTableName extends string> = (config?: ManyConfig<TTargetTable>) => Many<TTargetTableName>;
1944
+ declare class RelationsHelperStatic<TTables extends Schema> {
1945
+ static readonly [entityKind]: string;
1946
+ constructor(tables: TTables);
1947
+ one: { [K in keyof TTables]: OneFn<TTables[K], K & string> };
1948
+ many: { [K in keyof TTables]: ManyFn<TTables[K], K & string> };
1949
+ }
1950
+ type RelationsBuilderColumns<TTable extends SchemaEntry, TTableName extends string> = { [K in keyof GetTableColumns<TTable>]: RelationsBuilderColumn<TTableName> };
1951
+ type GetTableColumns<TTable extends SchemaEntry> = TTable extends ConvexTable<any> ? TTable['_']['columns'] & SystemFields<TTable['_']['name']> & SystemFieldAliases<TTable['_']['name'], TTable['_']['columns']> : never;
1952
+ type RelationsBuilderTables<TSchema extends Schema> = { [TTableName in keyof TSchema]: RelationsBuilderColumns<TSchema[TTableName], TTableName & string> & RelationsBuilderTable<TTableName & string> };
1953
+ type RelationsBuilder<TSchema extends Schema> = RelationsBuilderTables<TSchema> & RelationsHelperStatic<TSchema>;
1954
+ type RelationsBuilderConfigValue = RelationsRecord | undefined;
1955
+ type RelationsBuilderConfig<TTables extends Schema> = { [TTableName in keyof TTables]?: RelationsBuilderConfigValue };
1956
+ type AnyRelationsBuilderConfig = Record<string, RelationsBuilderConfigValue>;
1957
+ type RelationsRecord = Record<string, AnyRelation>;
1958
+ declare abstract class Relation<TTargetTableName extends string = string> {
1959
+ readonly targetTableName: TTargetTableName;
1960
+ static readonly [entityKind]: string;
1961
+ readonly $brand: 'RelationV2';
1962
+ readonly relationType: 'many' | 'one';
1963
+ fieldName: string;
1964
+ sourceColumns: ColumnBuilder<any, any, any>[];
1965
+ targetColumns: ColumnBuilder<any, any, any>[];
1966
+ alias: string | undefined;
1967
+ where: Record<string, unknown> | undefined;
1968
+ sourceTable: SchemaEntry;
1969
+ targetTable: SchemaEntry;
1970
+ through?: {
1971
+ source: RelationsBuilderColumnBase[];
1972
+ target: RelationsBuilderColumnBase[];
1973
+ };
1974
+ throughTable?: SchemaEntry;
1975
+ isReversed?: boolean;
1976
+ /** @internal */
1977
+ sourceColumnTableNames: string[];
1978
+ /** @internal */
1979
+ targetColumnTableNames: string[];
1980
+ constructor(targetTable: SchemaEntry, targetTableName: TTargetTableName);
1981
+ }
1982
+ type AnyRelation = Relation<string>;
1983
+ declare class One<TTargetTableName extends string, TOptional extends boolean = boolean> extends Relation<TTargetTableName> {
1984
+ static readonly [entityKind]: string;
1985
+ protected $relationBrand: 'OneV2';
1986
+ readonly relationType: "one";
1987
+ readonly optional: TOptional;
1988
+ constructor(tables: Schema, targetTable: SchemaEntry, targetTableName: TTargetTableName, config: AnyOneConfig | undefined);
1989
+ }
1990
+ declare class Many<TTargetTableName extends string> extends Relation<TTargetTableName> {
1991
+ readonly config: AnyManyConfig | undefined;
1992
+ static readonly [entityKind]: string;
1993
+ protected $relationBrand: 'ManyV2';
1994
+ readonly relationType: "many";
1995
+ constructor(tables: Schema, targetTable: SchemaEntry, targetTableName: TTargetTableName, config: AnyManyConfig | undefined);
1996
+ }
1997
+ interface TableRelationalConfig {
1998
+ defaults?: OrmRuntimeDefaults;
1999
+ name: string;
2000
+ polymorphic?: readonly TablePolymorphicConfigRuntime[];
2001
+ relations: RelationsRecord;
2002
+ strict?: boolean;
2003
+ table: SchemaEntry;
2004
+ }
2005
+ type TablesRelationalConfig<SchemaDef extends SchemaDefinition<any, boolean> = SchemaDefinition<any, true>, Tables extends Record<string, TableRelationalConfig> = Record<string, TableRelationalConfig>> = Tables & {
2006
+ [OrmSchemaDefinition]?: SchemaDef;
2007
+ };
2008
+ type RelationsConfigWithSchema<TConfig extends AnyRelationsBuilderConfig, TTables extends Schema> = TablesRelationalConfig<SchemaDefinition<TTables, true>, ExtractTablesWithRelations<TConfig, TTables>>;
2009
+ type RelationsPartsConfigWithSchema<TConfig extends AnyRelationsBuilderConfig, TTables extends Schema> = TablesRelationalConfig<SchemaDefinition<TTables, true>, ExtractTablesWithRelationsParts<TConfig, TTables>>;
2010
+ type Placeholder = {
2011
+ readonly __placeholder?: true;
2012
+ };
2013
+ type SQLWrapper = {
2014
+ readonly __sqlWrapper?: true;
2015
+ };
2016
+ interface SQLOperator {
2017
+ sql: (...args: any[]) => unknown;
2018
+ }
2019
+ interface RelationFieldsFilterInternals<T> {
2020
+ AND?: RelationsFieldFilter<T>[] | undefined;
2021
+ arrayContained?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;
2022
+ arrayContains?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;
2023
+ arrayOverlaps?: (T extends Array<infer E> ? (E | Placeholder)[] : (T | Placeholder)[]) | Placeholder | undefined;
2024
+ between?: [T | Placeholder, T | Placeholder] | Placeholder | undefined;
2025
+ contains?: string | Placeholder | undefined;
2026
+ endsWith?: string | Placeholder | undefined;
2027
+ eq?: T | Placeholder | undefined;
2028
+ gt?: T | Placeholder | undefined;
2029
+ gte?: T | Placeholder | undefined;
2030
+ ilike?: string | Placeholder | undefined;
2031
+ in?: (T | Placeholder)[] | Placeholder | undefined;
2032
+ isNotNull?: true | undefined;
2033
+ isNull?: true | undefined;
2034
+ like?: string | Placeholder | undefined;
2035
+ lt?: T | Placeholder | undefined;
2036
+ lte?: T | Placeholder | undefined;
2037
+ NOT?: RelationsFieldFilter<T> | undefined;
2038
+ ne?: T | Placeholder | undefined;
2039
+ notBetween?: [T | Placeholder, T | Placeholder] | Placeholder | undefined;
2040
+ notIlike?: string | Placeholder | undefined;
2041
+ notIn?: (T | Placeholder)[] | Placeholder | undefined;
2042
+ notLike?: string | Placeholder | undefined;
2043
+ OR?: RelationsFieldFilter<T>[] | undefined;
2044
+ startsWith?: string | Placeholder | undefined;
2045
+ }
2046
+ type RelationsFieldFilter<T = unknown> = RelationFieldsFilterInternals<T> | (unknown extends T ? never : T extends string | number | boolean | bigint | null | undefined ? T : T extends object ? never : T) | Placeholder;
2047
+ interface RelationsFilterCommons<TTable extends TableRelationalConfig = TableRelationalConfig, TSchema extends TablesRelationalConfig = TablesRelationalConfig> {
2048
+ AND?: RelationsFilter<TTable, TSchema>[] | undefined;
2049
+ NOT?: RelationsFilter<TTable, TSchema> | undefined;
2050
+ OR?: RelationsFilter<TTable, TSchema>[] | undefined;
2051
+ RAW?: SQLWrapper | ((table: TTable['table'], operators: SQLOperator) => unknown) | undefined;
2052
+ }
2053
+ type RelationsFilterColumns<TColumns extends Record<string, unknown>> = { [K in keyof TColumns]?: (TColumns[K] extends {
2054
+ _: {
2055
+ data: infer Data;
2056
+ };
2057
+ } ? RelationsFieldFilter<Data> : RelationsFieldFilter<unknown>) | undefined };
2058
+ type FindTargetTableInRelationalConfig<TConfig extends TablesRelationalConfig, TRelation extends AnyRelation> = TConfig[TRelation['targetTableName']];
2059
+ type RelationsFilterRelations<TTable extends TableRelationalConfig, TSchema extends TablesRelationalConfig, TRelations extends RelationsRecord = TTable['relations']> = { [K in keyof TRelations]?: boolean | RelationsFilter<FindTargetTableInRelationalConfig<TSchema, TRelations[K]>, TSchema> | undefined };
2060
+ type RelationsFilter<TTable extends TableRelationalConfig, TSchema extends TablesRelationalConfig, TColumns extends Record<string, unknown> = GetTableColumns<TTable['table']>> = TTable['relations'] extends Record<string, never> ? TableFilter<TTable['table']> : Simplify$1<RelationsFilterColumns<TColumns> & RelationsFilterRelations<TTable, TSchema> & RelationsFilterCommons<TTable, TSchema>>;
2061
+ interface TableFilterCommons<TTable extends SchemaEntry = SchemaEntry, TColumns extends Record<string, unknown> = GetTableColumns<TTable>> {
2062
+ AND?: TableFilter<TTable, TColumns>[] | undefined;
2063
+ NOT?: TableFilter<TTable, TColumns> | undefined;
2064
+ OR?: TableFilter<TTable, TColumns>[] | undefined;
2065
+ RAW?: SQLWrapper | ((table: TTable, operators: SQLOperator) => unknown) | undefined;
2066
+ }
2067
+ type TableFilterColumns<TColumns extends Record<string, unknown>> = { [K in keyof TColumns]?: (TColumns[K] extends {
2068
+ _: {
2069
+ data: infer Data;
2070
+ };
2071
+ } ? RelationsFieldFilter<Data> : RelationsFieldFilter<unknown>) | undefined };
2072
+ type TableFilter<TTable extends SchemaEntry = SchemaEntry, TColumns extends Record<string, unknown> = GetTableColumns<TTable>> = Simplify$1<TableFilterColumns<TColumns> & TableFilterCommons<TTable, TColumns>>;
2073
+ type ExtractTablesWithRelations<TConfig extends AnyRelationsBuilderConfig, TTables extends Schema> = { [K in keyof TTables]: {
2074
+ table: TTables[K];
2075
+ name: K & string;
2076
+ relations: TConfig extends { [CK in K]: Record<string, any> } ? TConfig[K] : {};
2077
+ } };
2078
+ type ExtractTablesWithRelationsParts<TConfig extends AnyRelationsBuilderConfig, TTables extends Schema> = { [K in NonUndefinedKeysOnly<TConfig> & keyof TTables]: {
2079
+ table: TTables[K & string];
2080
+ name: K & string;
2081
+ relations: TConfig[K] extends Record<string, any> ? TConfig[K] : {};
2082
+ } };
2083
+ type NonUndefinedKeysOnly<T> = { [K in keyof T]: T[K] extends undefined ? never : K }[keyof T];
2084
+ /** Builds relational config for every table in schema */
2085
+ declare function defineRelations<TSchema extends object, TTables extends Schema = ExtractTablesFromSchema<TSchema>>(schema: TSchema): RelationsConfigWithSchema<{}, TTables>;
2086
+ /** Builds relational config for every table in schema */
2087
+ declare function defineRelations<TSchema extends object, TConfig extends RelationsBuilderConfig<TTables>, TTables extends Schema = ExtractTablesFromSchema<TSchema>>(schema: TSchema, relations: (helpers: RelationsBuilder<TTables>) => TConfig): RelationsConfigWithSchema<TConfig, TTables>;
2088
+ /** Builds relational config only for tables present in relational config */
2089
+ declare function defineRelationsPart<TSchema extends object, TTables extends Schema = ExtractTablesFromSchema<TSchema>>(schema: TSchema): RelationsPartsConfigWithSchema<IncludeEveryTable<TTables>, TTables>;
2090
+ /** Builds relational config only for tables present in relational config */
2091
+ declare function defineRelationsPart<TSchema extends object, TConfig extends RelationsBuilderConfig<TTables>, TTables extends Schema = ExtractTablesFromSchema<TSchema>>(schema: TSchema, relations: (helpers: RelationsBuilder<TTables>) => TConfig): RelationsPartsConfigWithSchema<TConfig, TTables>;
2092
+ //#endregion
2093
+ //#region src/orm/extractRelationsConfig.d.ts
2094
+ /**
2095
+ * M2-M3 CONTRACT: EdgeMetadata interface
2096
+ * Consumed by query builder for relation traversal
2097
+ */
2098
+ interface EdgeMetadata {
2099
+ /** Alias for disambiguation (v1 rename of relationName) */
2100
+ alias?: string;
2101
+ /** Cardinality: one-to-one/many-to-one or one-to-many */
2102
+ cardinality: 'one' | 'many';
2103
+ /** Relation field name on source */
2104
+ edgeName: string;
2105
+ /** Primary source field name (best-effort) */
2106
+ fieldName: string;
2107
+ /** Index fields for compound indexes */
2108
+ indexFields: string[];
2109
+ /** Index name for efficient lookups */
2110
+ indexName: string;
2111
+ /** Inverse edge if bidirectional relation */
2112
+ inverseEdge?: EdgeMetadata;
2113
+ /** Relation optional (one only) */
2114
+ optional: boolean;
2115
+ /** Source field names (from) */
2116
+ sourceFields: string[];
2117
+ /**
2118
+ * True when the FK columns on the source side are nullable (i.e. the relation
2119
+ * can be absent). Used to avoid rejecting optional/self-referencing relations
2120
+ * as "circular dependencies".
2121
+ */
2122
+ sourceNullable: boolean;
2123
+ /** Source table name (ts name) */
2124
+ sourceTable: string;
2125
+ /** Target field names (to) */
2126
+ targetFields: string[];
2127
+ /** Target table name (ts name) */
2128
+ targetTable: string;
2129
+ /** Many-to-many through info */
2130
+ through?: {
2131
+ table: string;
2132
+ sourceFields: string[];
2133
+ targetFields: string[];
2134
+ };
2135
+ }
2136
+ /**
2137
+ * Extract relations configuration from defineRelations output
2138
+ */
2139
+ declare function extractRelationsConfig(schema: TablesRelationalConfig): EdgeMetadata[];
2140
+ //#endregion
2141
+ //#region src/orm/rls/types.d.ts
2142
+ type RlsMode = 'enforce' | 'skip';
2143
+ type RlsContext = {
2144
+ /**
2145
+ * Optional mode override. Defaults to "enforce".
2146
+ */
2147
+ mode?: RlsMode;
2148
+ /**
2149
+ * Request context passed to policy builders.
2150
+ */
2151
+ ctx?: unknown;
2152
+ /**
2153
+ * Optional role resolver for enforcing policy "to" clauses.
2154
+ */
2155
+ roleResolver?: (ctx: unknown) => string[];
2156
+ };
2157
+ //#endregion
2158
+ //#region src/orm/mutation-utils.d.ts
2159
+ type UniqueIndexDefinition = {
2160
+ name: string;
2161
+ fields: string[];
2162
+ nullsNotDistinct: boolean;
2163
+ };
2164
+ type CheckDefinition = {
2165
+ name: string;
2166
+ expression: FilterExpression$1<boolean>;
2167
+ };
2168
+ type SerializedFieldReference = {
2169
+ fieldName: string;
2170
+ };
2171
+ type SerializedBinaryExpression = {
2172
+ type: 'binary';
2173
+ operator: BinaryExpression['operator'];
2174
+ field: SerializedFieldReference;
2175
+ value: unknown;
2176
+ };
2177
+ type SerializedLogicalExpression = {
2178
+ type: 'logical';
2179
+ operator: LogicalExpression['operator'];
2180
+ operands: SerializedFilterExpression[];
2181
+ };
2182
+ type SerializedUnaryExpression = {
2183
+ type: 'unary';
2184
+ operator: UnaryExpression['operator'];
2185
+ operand: SerializedFilterExpression | SerializedFieldReference;
2186
+ };
2187
+ type SerializedFilterExpression = SerializedBinaryExpression | SerializedLogicalExpression | SerializedUnaryExpression;
2188
+ type ForeignKeyDefinition = {
2189
+ name?: string;
2190
+ columns: string[];
2191
+ foreignColumns: string[];
2192
+ foreignTableName: string;
2193
+ foreignTable?: ConvexTable<any>;
2194
+ onDelete?: ForeignKeyAction;
2195
+ onUpdate?: ForeignKeyAction;
2196
+ };
2197
+ declare function getUniqueIndexes(table: ConvexTable<any>): UniqueIndexDefinition[];
2198
+ declare function getChecks(table: ConvexTable<any>): CheckDefinition[];
2199
+ declare function getForeignKeys(table: ConvexTable<any>): ForeignKeyDefinition[];
2200
+ type DeleteMode = OrmDeleteMode;
2201
+ type CascadeMode = 'hard' | 'soft';
2202
+ //#endregion
2203
+ //#region src/orm/query-promise.d.ts
2204
+ /**
2205
+ * Query Promise - Lazy query execution via Promise interface
2206
+ *
2207
+ * Implements Drizzle's QueryPromise pattern:
2208
+ * - Queries don't execute until awaited or .then() is called
2209
+ * - Implements full Promise interface (then/catch/finally)
2210
+ * - Subclasses provide execute() implementation
2211
+ *
2212
+ * @example
2213
+ * const query = ctx.db.query.users.findMany();
2214
+ * // Query not executed yet
2215
+ * const users = await query; // Now executed
2216
+ */
2217
+ /**
2218
+ * Abstract base class for promise-based query execution
2219
+ *
2220
+ * @template T - The result type returned by the query
2221
+ *
2222
+ * Pattern from Drizzle ORM: query-promise.ts:27-31
2223
+ */
2224
+ declare abstract class QueryPromise<T> implements Promise<T> {
2225
+ /**
2226
+ * Promise tag for debugging and type identification
2227
+ */
2228
+ [Symbol.toStringTag]: string;
2229
+ /**
2230
+ * Promise.then() implementation - delegates to execute()
2231
+ * This enables lazy evaluation: queries only run when awaited
2232
+ */
2233
+ then<TResult1 = T, TResult2 = never>(onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
2234
+ /**
2235
+ * Promise.catch() implementation - delegates to execute()
2236
+ */
2237
+ catch<TResult = never>(onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>;
2238
+ /**
2239
+ * Promise.finally() implementation - delegates to execute()
2240
+ */
2241
+ finally(onFinally?: (() => void) | undefined | null): Promise<T>;
2242
+ /**
2243
+ * Execute the query and return results
2244
+ * Subclasses must implement this method
2245
+ *
2246
+ * @returns Promise resolving to query results
2247
+ */
2248
+ abstract execute(): Promise<T>;
2249
+ }
2250
+ //#endregion
2251
+ //#region src/orm/delete.d.ts
2252
+ type ConvexDeleteWithout<T extends ConvexDeleteBuilder<any, any, any, any>, K extends string> = Omit<T, K>;
2253
+ type ConvexDeleteExecutableThis<TTable extends ConvexTable<any>, TReturning extends MutationReturning, TMode extends MutationExecutionMode> = {
2254
+ _: {
2255
+ table: TTable;
2256
+ returning: TReturning;
2257
+ mode: TMode;
2258
+ result: MutationExecuteResult<TTable, TReturning, TMode>;
2259
+ hasWhereOrAllowFullScan: true;
2260
+ };
2261
+ };
2262
+ declare class ConvexDeleteBuilder<TTable extends ConvexTable<any>, TReturning extends MutationReturning = undefined, TMode extends MutationExecutionMode = 'single', THasWhereOrAllowFullScan extends boolean = false> extends QueryPromise<MutationExecuteResult<TTable, TReturning, TMode>> {
2263
+ private db;
2264
+ private table;
2265
+ readonly _: {
2266
+ readonly table: TTable;
2267
+ readonly returning: TReturning;
2268
+ readonly mode: TMode;
2269
+ readonly result: MutationExecuteResult<TTable, TReturning, TMode>;
2270
+ readonly hasWhereOrAllowFullScan: THasWhereOrAllowFullScan;
2271
+ };
2272
+ private whereExpression?;
2273
+ private returningFields?;
2274
+ private allowFullScanFlag;
2275
+ private deleteModeOverride?;
2276
+ private cascadeMode?;
2277
+ private scheduledDelayMs?;
2278
+ private executionModeOverride?;
2279
+ private paginateConfig?;
2280
+ private _loadReturningCount;
2281
+ constructor(db: GenericDatabaseWriter<any>, table: TTable);
2282
+ where(expression: FilterExpression$1<boolean>): ConvexDeleteBuilder<TTable, TReturning, TMode, true>;
2283
+ returning(): ConvexDeleteWithout<ConvexDeleteBuilder<TTable, true, TMode, THasWhereOrAllowFullScan>, 'returning'>;
2284
+ returning<TSelection extends ReturningSelection<TTable>>(fields: TSelection): ConvexDeleteWithout<ConvexDeleteBuilder<TTable, TSelection, TMode, THasWhereOrAllowFullScan>, 'returning'>;
2285
+ paginate(config: MutationPaginateConfig): ConvexDeleteWithout<ConvexDeleteBuilder<TTable, TReturning, 'paged', THasWhereOrAllowFullScan>, 'paginate'>;
2286
+ allowFullScan(): ConvexDeleteBuilder<TTable, TReturning, TMode, true>;
2287
+ private getIdEquality;
2288
+ soft(): this;
2289
+ hard(): this;
2290
+ scheduled(config: {
2291
+ delayMs: number;
2292
+ }): this;
2293
+ private resolveDeleteModeAndDelay;
2294
+ cascade(config: {
2295
+ mode: CascadeMode;
2296
+ }): this;
2297
+ executeAsync(this: ConvexDeleteExecutableThis<TTable, TReturning, TMode>, ...args: TMode extends 'single' ? [config?: Omit<MutationExecuteConfig, 'mode'>] : [config: never]): Promise<TMode extends 'single' ? MutationExecuteResult<TTable, TReturning, 'single'> : never>;
2298
+ execute(this: ConvexDeleteExecutableThis<TTable, TReturning, TMode>, ...args: TMode extends 'single' ? [config?: MutationExecuteConfig] : [config?: never]): Promise<MutationExecuteResult<TTable, TReturning, TMode>>;
2299
+ }
2300
+ //#endregion
2301
+ //#region src/orm/insert.d.ts
2302
+ type InsertOnConflictDoNothingConfig<_TTable extends ConvexTable<any>> = {
2303
+ target?: ColumnBuilder<any, any, any> | ColumnBuilder<any, any, any>[];
2304
+ where?: FilterExpression$1<boolean>;
2305
+ };
2306
+ type InsertOnConflictDoUpdateConfig<TTable extends ConvexTable<any>> = {
2307
+ target: ColumnBuilder<any, any, any> | ColumnBuilder<any, any, any>[];
2308
+ set: UpdateSet<TTable>;
2309
+ targetWhere?: FilterExpression$1<boolean>;
2310
+ setWhere?: FilterExpression$1<boolean>;
2311
+ };
2312
+ type ConvexInsertWithout<T extends ConvexInsertBuilder<any, any>, K extends string> = Omit<T, K>;
2313
+ declare class ConvexInsertBuilder<TTable extends ConvexTable<any>, TReturning extends MutationReturning = undefined> extends QueryPromise<MutationResult<TTable, TReturning>> {
2314
+ private db;
2315
+ private table;
2316
+ readonly _: {
2317
+ readonly table: TTable;
2318
+ readonly returning: TReturning;
2319
+ readonly result: MutationResult<TTable, TReturning>;
2320
+ };
2321
+ private valuesList;
2322
+ private returningFields?;
2323
+ private conflictConfig?;
2324
+ private allowFullScanFlag;
2325
+ private _loadReturningCount;
2326
+ constructor(db: GenericDatabaseWriter<any>, table: TTable);
2327
+ values(values: InsertValue<TTable> | InsertValue<TTable>[]): this;
2328
+ returning(): ConvexInsertWithout<ConvexInsertBuilder<TTable, true>, 'returning'>;
2329
+ returning<TSelection extends ReturningSelection<TTable>>(fields: TSelection): ConvexInsertWithout<ConvexInsertBuilder<TTable, TSelection>, 'returning'>;
2330
+ allowFullScan(): this;
2331
+ onConflictDoNothing(config?: InsertOnConflictDoNothingConfig<TTable>): ConvexInsertWithout<this, 'onConflictDoNothing' | 'onConflictDoUpdate'>;
2332
+ onConflictDoUpdate(config: InsertOnConflictDoUpdateConfig<TTable>): ConvexInsertWithout<this, 'onConflictDoNothing' | 'onConflictDoUpdate'>;
2333
+ execute(): Promise<MutationResult<TTable, TReturning>>;
2334
+ private resolveReturningRow;
2335
+ private handleConflict;
2336
+ private findConflictRow;
2337
+ private findAnyUniqueConflictRow;
2338
+ }
2339
+ //#endregion
2340
+ //#region src/orm/query.d.ts
2341
+ declare class GelRankQuery<TTableConfig extends TableRelationalConfig = TableRelationalConfig> {
2342
+ private readonly db;
2343
+ private readonly tableConfig;
2344
+ private readonly indexName;
2345
+ private readonly config;
2346
+ private readonly rls?;
2347
+ constructor(db: GenericDatabaseReader<any>, tableConfig: TTableConfig, indexName: string, config?: {
2348
+ where?: Record<string, unknown>;
2349
+ }, rls?: RlsContext | undefined);
2350
+ private _plan;
2351
+ count(): Promise<number>;
2352
+ sum(): Promise<number>;
2353
+ at(offset: number): Promise<{
2354
+ id: string;
2355
+ key: unknown;
2356
+ sumValue: number;
2357
+ } | null>;
2358
+ indexOf(args: {
2359
+ id: string;
2360
+ }): Promise<number>;
2361
+ paginate(args: {
2362
+ cursor?: string | null;
2363
+ limit: number;
2364
+ }): Promise<{
2365
+ continueCursor: string;
2366
+ isDone: boolean;
2367
+ page: Array<{
2368
+ id: string;
2369
+ key: unknown;
2370
+ sumValue: number;
2371
+ }>;
2372
+ }>;
2373
+ min(): Promise<{
2374
+ id: string;
2375
+ key: unknown;
2376
+ sumValue: number;
2377
+ } | null>;
2378
+ max(): Promise<{
2379
+ id: string;
2380
+ key: unknown;
2381
+ sumValue: number;
2382
+ } | null>;
2383
+ random(): Promise<{
2384
+ id: string;
2385
+ key: unknown;
2386
+ sumValue: number;
2387
+ } | null>;
2388
+ }
2389
+ /**
2390
+ * Relational query builder with promise-based execution
2391
+ *
2392
+ * @template TResult - The final result type after execution
2393
+ *
2394
+ * Pattern from Drizzle: gel-core/query-builders/query.ts:32-62
2395
+ */
2396
+ declare class GelRelationalQuery<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, TResult> extends QueryPromise<TResult> {
2397
+ private schema;
2398
+ private tableConfig;
2399
+ private edgeMetadata;
2400
+ private db;
2401
+ private config;
2402
+ private mode;
2403
+ private _allEdges?;
2404
+ private rls?;
2405
+ private relationLoading?;
2406
+ private vectorSearchProvider?;
2407
+ private configuredIndex?;
2408
+ /**
2409
+ * Type brand for result type extraction
2410
+ * Critical for Expect<Equal<>> type tests to work correctly
2411
+ * Following Drizzle pattern: allows TypeScript to infer result type before await
2412
+ */
2413
+ readonly _: {
2414
+ readonly result: TResult;
2415
+ };
2416
+ private allowFullScan;
2417
+ private readonly _countIndexReadinessByKey;
2418
+ private readonly _aggregateIndexReadinessByKey;
2419
+ constructor(schema: TSchema, tableConfig: TTableConfig, edgeMetadata: EdgeMetadata[], db: GenericDatabaseReader<any>, config: DBQueryConfig<'one' | 'many', boolean, TSchema, TTableConfig>, mode: 'many' | 'first' | 'firstOrThrow' | 'count' | 'aggregate' | 'groupBy', _allEdges?: EdgeMetadata[] | undefined, // M6.5 Phase 2: All edges for nested loading
2420
+ rls?: RlsContext | undefined, relationLoading?: {
2421
+ concurrency?: number;
2422
+ } | undefined, vectorSearchProvider?: VectorSearchProvider | undefined, configuredIndex?: PredicateWhereIndexConfig<TTableConfig> | undefined);
2423
+ private _usesSystemCreatedAtAlias;
2424
+ private _assertNoLegacyPublicFieldName;
2425
+ private _normalizePublicFieldName;
2426
+ private _normalizeRelationFieldName;
2427
+ private _toPublicFilterFieldName;
2428
+ private _normalizeComparableValue;
2429
+ private _toPublicRow;
2430
+ private _extractIdOnlyWhere;
2431
+ private _returnSelectedRows;
2432
+ private _applyRlsSelectFilter;
2433
+ private _isColumnBuilder;
2434
+ private _isOrderByClause;
2435
+ private _normalizeOrderByValue;
2436
+ private _normalizeOrderBy;
2437
+ private _orderBySpecs;
2438
+ private _resolveNonPaginatedLimit;
2439
+ private _compareByOrderSpecs;
2440
+ private _getTableConfigByDbName;
2441
+ private _matchLike;
2442
+ /**
2443
+ * Evaluate a filter expression against a fetched row
2444
+ * Used for post-fetch filtering (string operators, etc.)
2445
+ */
2446
+ private _evaluatePostFetchFilter;
2447
+ private _isRecord;
2448
+ private _isPlaceholder;
2449
+ private _isSQLWrapper;
2450
+ private _evaluateFieldFilter;
2451
+ private _evaluateTableFilter;
2452
+ private _evaluateRelationsFilter;
2453
+ private _buildFieldFilterExpression;
2454
+ private _buildFilterExpression;
2455
+ private _mergeWithConfig;
2456
+ private _buildFilterWithConfig;
2457
+ private _stripFilterRelations;
2458
+ private _hasSearchDisallowedRelationFilter;
2459
+ private _searchFilterValuesEqual;
2460
+ private _extractSearchEqFromWhereField;
2461
+ private _mergeSearchFiltersWithWhereEq;
2462
+ private _applyRelationsFilterToRows;
2463
+ private _resolvePolymorphicFinalizeState;
2464
+ private _resolveWithVariantsState;
2465
+ private _assertPolymorphicAliasCollisions;
2466
+ private _synthesizePolymorphicRows;
2467
+ private _finalizeRows;
2468
+ private _getSchemaDefinitionOrThrow;
2469
+ private _applyEqBounds;
2470
+ private _buildTableFilterPredicate;
2471
+ private _assertWhereIndexRequirement;
2472
+ private _isFilterExpressionNode;
2473
+ private _isPredicateWhereClause;
2474
+ private _createFilterOperators;
2475
+ private _resolveWhereCallbackExpression;
2476
+ private _buildBasePipelineStream;
2477
+ private _buildUnionSourceStream;
2478
+ private _applyFlatMapStage;
2479
+ private _applyPipelineStages;
2480
+ private _tryNativeUnfilteredCount;
2481
+ private _executeCountRequiresObjectWhere;
2482
+ private _normalizeAggregateFieldName;
2483
+ private _isEmptyWhere;
2484
+ private _coerceAggregateReturnValue;
2485
+ private _coerceCountSelect;
2486
+ private _coerceCountWindowConfig;
2487
+ private _coerceAggregateWindowConfig;
2488
+ private _applyCountWindowBounds;
2489
+ private _ensureCountIndexReadyOnce;
2490
+ private _ensureAggregateIndexReadyOnce;
2491
+ private _rethrowAggregateCountError;
2492
+ private _executeCountScalar;
2493
+ private _executeCount;
2494
+ private _coerceAggregateFieldSelection;
2495
+ private _coerceAggregateCountSelection;
2496
+ private _coerceAggregateConfig;
2497
+ private _executeAggregate;
2498
+ private _getAggregateCartesianMaxKeys;
2499
+ private _getAggregateWorkBudget;
2500
+ private _serializeGroupByValue;
2501
+ private _pushGroupByConstraint;
2502
+ private _parseGroupByFieldConstraint;
2503
+ private _collectGroupByFieldValues;
2504
+ private _buildGroupByCandidates;
2505
+ private _coerceGroupByByFields;
2506
+ private _isGroupByOrderDirection;
2507
+ private _groupByOrderPathLabel;
2508
+ private _readGroupByPathValue;
2509
+ private _compareGroupByValues;
2510
+ private _compareGroupByRows;
2511
+ private _coerceGroupByOrderSpecs;
2512
+ private _coerceGroupByWindowConfig;
2513
+ private _isGroupByHavingValueOperatorObject;
2514
+ private _matchesGroupByHavingValuePredicate;
2515
+ private _evaluateGroupByHaving;
2516
+ private _coerceGroupByConfig;
2517
+ private _buildAggregateMetricConfig;
2518
+ private _executeGroupBy;
2519
+ /**
2520
+ * Execute the query and return results
2521
+ * Phase 4 implementation with WhereClauseCompiler integration
2522
+ */
2523
+ execute(): Promise<TResult>;
2524
+ /**
2525
+ * Convert query config to Convex query parameters
2526
+ * Phase 4 implementation with WhereClauseCompiler
2527
+ */
2528
+ private _toConvexQuery;
2529
+ private _buildRelationKey;
2530
+ private _buildIndexPredicate;
2531
+ private _buildFilterPredicate;
2532
+ private _queryByFields;
2533
+ private _getColumns;
2534
+ /**
2535
+ * Apply a single filter expression to a Convex query builder
2536
+ * Used for index filters (eq operations)
2537
+ */
2538
+ private _applyFilterToQuery;
2539
+ /**
2540
+ * Convert FilterExpression to Convex filter function
2541
+ * Uses visitor pattern to traverse expression tree
2542
+ */
2543
+ private _toConvexExpression;
2544
+ /**
2545
+ * Get edge metadata for a target table
2546
+ * Helper for recursive relation loading
2547
+ */
2548
+ private _getTargetTableEdges;
2549
+ private _getRelationConcurrency;
2550
+ private _getRelationFanOutKeyCap;
2551
+ private _enforceRelationFanOutKeyCap;
2552
+ private _mapWithConcurrency;
2553
+ /**
2554
+ * Load relations for query results
2555
+ * M6.5 Phase 2 implementation: Recursive relation loading with depth limiting
2556
+ *
2557
+ * @param rows - Array of parent records to load relations for
2558
+ * @param withConfig - Relation configuration object
2559
+ * @param depth - Current recursion depth (default 0)
2560
+ * @param maxDepth - Maximum recursion depth (default 3)
2561
+ * @param targetTableEdges - Edge metadata for nested relations (optional, defaults to this.edgeMetadata)
2562
+ */
2563
+ private _loadRelations;
2564
+ /**
2565
+ * Load a single relation for all rows
2566
+ * Handles both one() and many() cardinality
2567
+ * M6.5 Phase 2: Added support for nested relations
2568
+ */
2569
+ private _loadSingleRelation;
2570
+ private _createRelationCountError;
2571
+ private _remapRelationCountError;
2572
+ private _coerceRelationCountWhere;
2573
+ private _normalizeRelationCountCacheValue;
2574
+ private _getRelationCountParentKey;
2575
+ private _buildRelationCountExecutionKey;
2576
+ private _readIndexedRelationCount;
2577
+ private _countRelationForRow;
2578
+ private _loadRelationCounts;
2579
+ /**
2580
+ * Load one() relation (many-to-one or one-to-one)
2581
+ * Example: posts.author where posts.authorId → users.id
2582
+ * M6.5 Phase 2: Added support for nested relations
2583
+ */
2584
+ private _loadOneRelation;
2585
+ /**
2586
+ * Load many() relation (one-to-many)
2587
+ * Example: users.posts where posts.authorId → users.id
2588
+ *
2589
+ * For many() relations, use the configured from/to fields to match rows.
2590
+ * Supports .through() for many-to-many relations via a junction table.
2591
+ * M6.5 Phase 2: Added support for nested relations
2592
+ * M6.5 Phase 3: Added support for where filters, orderBy, and per-parent limit
2593
+ */
2594
+ private _loadManyRelation;
2595
+ private _applyExtras;
2596
+ /**
2597
+ * Select specific columns from rows
2598
+ * Phase 5 implementation
2599
+ */
2600
+ private _selectColumns;
2601
+ }
2602
+ //#endregion
2603
+ //#region src/orm/query-builder.d.ts
2604
+ type EnforcedConfig<TConfig, TTableConfig extends TableRelationalConfig, THasIndex extends boolean = false> = EnforceVectorSearchConstraints<EnforceSearchConstraints<EnforceCursorMaxScan<EnforceNoAllowFullScanWhenIndexed<EnforceWithIndexForWhere<TConfig, TTableConfig, THasIndex>, THasIndex>>, TTableConfig>, TTableConfig>;
2605
+ type DisallowWithIndexSearchOrVector<THasIndex extends boolean> = THasIndex extends true ? {
2606
+ search?: never;
2607
+ vectorSearch?: never;
2608
+ } : unknown;
2609
+ type KnownKeysOnlyStrict<T, K> = 0 extends 1 & T ? never : KnownKeysOnly<T, K>;
2610
+ type PredicateIndexName<TTableConfig extends TableRelationalConfig> = PredicateWhereIndexConfig<TTableConfig> extends {
2611
+ name: infer TIndexName extends string;
2612
+ } ? TIndexName : string;
2613
+ type PredicateIndexConfigByName<TTableConfig extends TableRelationalConfig, TIndexName extends PredicateIndexName<TTableConfig>> = Extract<PredicateWhereIndexConfig<TTableConfig>, {
2614
+ name: TIndexName;
2615
+ }>;
2616
+ type SearchPaginatedConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<CursorPaginatedConfig<TSchema, TTableConfig>, 'search' | 'vectorSearch' | 'where' | 'orderBy'> & {
2617
+ search: SearchQueryConfig<TTableConfig>;
2618
+ vectorSearch?: never;
2619
+ where?: SearchWhereFilter<TTableConfig> | undefined;
2620
+ orderBy?: never;
2621
+ pipeline?: never;
2622
+ pageByKey?: never;
2623
+ endCursor?: never;
2624
+ };
2625
+ type SearchNonPaginatedConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<NonCursorConfig<TSchema, TTableConfig>, 'search' | 'vectorSearch' | 'where' | 'orderBy'> & {
2626
+ search: SearchQueryConfig<TTableConfig>;
2627
+ vectorSearch?: never;
2628
+ where?: SearchWhereFilter<TTableConfig> | undefined;
2629
+ orderBy?: never;
2630
+ pipeline?: never;
2631
+ pageByKey?: never;
2632
+ endCursor?: never;
2633
+ };
2634
+ type SearchFindFirstConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<DBQueryConfig<'many', true, TSchema, TTableConfig>, 'limit' | 'search' | 'vectorSearch' | 'where' | 'orderBy' | 'cursor' | 'maxScan' | 'pipeline'> & {
2635
+ search: SearchQueryConfig<TTableConfig>;
2636
+ vectorSearch?: never;
2637
+ where?: SearchWhereFilter<TTableConfig> | undefined;
2638
+ orderBy?: never;
2639
+ pipeline?: never;
2640
+ };
2641
+ type VectorNonPaginatedConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<DBQueryConfig<'many', true, TSchema, TTableConfig>, 'vectorSearch' | 'search' | 'where' | 'orderBy' | 'offset' | 'limit' | 'cursor' | 'maxScan' | 'allowFullScan' | 'pipeline'> & {
2642
+ vectorSearch: VectorQueryConfig<TTableConfig>;
2643
+ search?: never;
2644
+ where?: never;
2645
+ orderBy?: never;
2646
+ offset?: never;
2647
+ limit?: never;
2648
+ cursor?: never;
2649
+ maxScan?: never;
2650
+ allowFullScan?: never;
2651
+ pipeline?: never;
2652
+ pageByKey?: never;
2653
+ endCursor?: never;
2654
+ };
2655
+ type FindManyResult<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, TConfig> = TConfig extends {
2656
+ pageByKey: FindManyPageByKeyConfig;
2657
+ } ? KeyPageResult<BuildQueryResult<TSchema, TTableConfig, TConfig>> : TConfig extends {
2658
+ cursor: string | null;
2659
+ } ? PaginatedResult<BuildQueryResult<TSchema, TTableConfig, TConfig>> : BuildQueryResult<TSchema, TTableConfig, TConfig>[];
2660
+ type RelationCountWithConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<DBQueryConfig<'many', true, TSchema, TTableConfig>, 'with'> & {
2661
+ with: NonNullable<DBQueryConfig<'many', true, TSchema, TTableConfig>['with']> & {
2662
+ _count: NonNullable<NonNullable<DBQueryConfig<'many', true, TSchema, TTableConfig>['with']>['_count']>;
2663
+ };
2664
+ };
2665
+ type NonCursorConfigNoRelationCount<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<NonCursorConfigNoSearch<TSchema, TTableConfig>, 'with'> & {
2666
+ with?: Exclude<NonCursorConfigNoSearch<TSchema, TTableConfig>['with'], undefined> extends infer TWith extends Record<string, unknown> ? Omit<TWith, '_count'> & {
2667
+ _count?: never;
2668
+ } : never;
2669
+ };
2670
+ type CursorPaginatedConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<DBQueryConfig<'many', true, TSchema, TTableConfig>, 'cursor' | 'limit' | 'pageByKey' | 'allowFullScan' | 'pipeline'> & {
2671
+ cursor: string | null;
2672
+ limit: number;
2673
+ offset?: never;
2674
+ pageByKey?: never;
2675
+ allowFullScan?: never;
2676
+ pipeline?: never;
2677
+ };
2678
+ type NonCursorConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<DBQueryConfig<'many', true, TSchema, TTableConfig>, 'maxScan' | 'endCursor' | 'pipeline'> & {
2679
+ cursor?: never;
2680
+ maxScan?: never;
2681
+ endCursor?: never;
2682
+ pipeline?: never;
2683
+ };
2684
+ type KeyPageConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<NonCursorConfigNoSearch<TSchema, TTableConfig>, 'pageByKey' | 'cursor' | 'maxScan' | 'endCursor' | 'offset' | 'pipeline'> & {
2685
+ pageByKey: FindManyPageByKeyConfig;
2686
+ cursor?: never;
2687
+ maxScan?: never;
2688
+ endCursor?: never;
2689
+ offset?: never;
2690
+ pipeline?: never;
2691
+ };
2692
+ type CursorPaginatedConfigNoSearch<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<CursorPaginatedConfig<TSchema, TTableConfig>, 'search'> & {
2693
+ search?: undefined;
2694
+ vectorSearch?: undefined;
2695
+ };
2696
+ type NonCursorConfigNoSearch<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<NonCursorConfig<TSchema, TTableConfig>, 'search'> & {
2697
+ search?: undefined;
2698
+ vectorSearch?: undefined;
2699
+ };
2700
+ type FindFirstConfigNoSearch<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<DBQueryConfig<'many', true, TSchema, TTableConfig>, 'limit' | 'search' | 'vectorSearch' | 'cursor' | 'maxScan' | 'endCursor' | 'pipeline' | 'pageByKey'> & {
2701
+ search?: undefined;
2702
+ vectorSearch?: undefined;
2703
+ endCursor?: never;
2704
+ pipeline?: never;
2705
+ pageByKey?: never;
2706
+ };
2707
+ type SelectPipelineBaseConfig<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = Omit<DBQueryConfig<'many', true, TSchema, TTableConfig>, 'cursor' | 'maxScan' | 'endCursor' | 'pageByKey' | 'pipeline' | 'with' | 'extras' | 'columns' | 'search' | 'vectorSearch' | 'offset'> & {
2708
+ cursor?: never;
2709
+ maxScan?: never;
2710
+ endCursor?: never;
2711
+ pageByKey?: never;
2712
+ pipeline?: never;
2713
+ with?: never;
2714
+ extras?: never;
2715
+ columns?: never;
2716
+ search?: never;
2717
+ vectorSearch?: never;
2718
+ offset?: never;
2719
+ };
2720
+ type ComposeFlatMapOutput<TCurrentRow, TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, TRelationName extends Extract<keyof TTableConfig['relations'], string>, TIncludeParent extends boolean | undefined> = ApplyPipelineStage<TCurrentRow, {
2721
+ flatMap: {
2722
+ relation: TRelationName;
2723
+ includeParent: TIncludeParent;
2724
+ };
2725
+ }, TSchema, TTableConfig>;
2726
+ type PaginateConfig = {
2727
+ cursor: string | null;
2728
+ limit: number;
2729
+ endCursor?: string | null;
2730
+ maxScan?: number;
2731
+ };
2732
+ type QueryFactory<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig> = <TResult>(config: DBQueryConfig<'many', true, TSchema, TTableConfig>, mode: 'many' | 'first' | 'firstOrThrow' | 'count' | 'aggregate', configuredIndex?: PredicateWhereIndexConfig<TTableConfig>) => GelRelationalQuery<TSchema, TTableConfig, TResult>;
2733
+ declare class RelationalSelectChain<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, TRow, THasIndex extends boolean = false> extends QueryPromise<TRow[]> {
2734
+ private readonly createQuery;
2735
+ private readonly configuredIndex?;
2736
+ private readonly config;
2737
+ private readonly pipeline;
2738
+ constructor(createQuery: QueryFactory<TSchema, TTableConfig>, config: SelectPipelineBaseConfig<TSchema, TTableConfig>, pipeline?: FindManyPipelineConfig<TSchema, TTableConfig>, configuredIndex?: PredicateWhereIndexConfig<TTableConfig> | undefined);
2739
+ private withConfig;
2740
+ private withPipeline;
2741
+ private appendStage;
2742
+ private asManyConfig;
2743
+ execute(): Promise<TRow[]>;
2744
+ where(where: SelectPipelineBaseConfig<TSchema, TTableConfig>['where']): RelationalSelectChain<TSchema, TTableConfig, TRow>;
2745
+ withIndex<TIndexName extends PredicateIndexName<TTableConfig>>(indexName: TIndexName, range?: PredicateIndexConfigByName<TTableConfig, TIndexName>['range']): RelationalSelectChain<TSchema, TTableConfig, TRow, true>;
2746
+ orderBy(orderBy: SelectPipelineBaseConfig<TSchema, TTableConfig>['orderBy']): RelationalSelectChain<TSchema, TTableConfig, TRow>;
2747
+ limit(limit: number): RelationalSelectChain<TSchema, TTableConfig, TRow>;
2748
+ allowFullScan(this: RelationalSelectChain<TSchema, TTableConfig, TRow, false>, allowFullScan: boolean): RelationalSelectChain<TSchema, TTableConfig, TRow>;
2749
+ map<TOutput>(map: (row: TRow) => TOutput | null | Promise<TOutput | null>): RelationalSelectChain<TSchema, TTableConfig, NonNullable<Awaited<TOutput>>>;
2750
+ filter(filter: (row: TRow) => boolean | Promise<boolean>): RelationalSelectChain<TSchema, TTableConfig, TRow>;
2751
+ distinct(distinct: {
2752
+ fields: string[];
2753
+ }): RelationalSelectChain<TSchema, TTableConfig, TRow>;
2754
+ flatMap<TRelationName extends Extract<keyof TTableConfig['relations'], string>, TIncludeParent extends boolean | undefined = undefined>(relation: TRelationName, options?: Omit<FindManyPipelineFlatMapConfig<TTableConfig, TRelationName>, 'relation'> & {
2755
+ includeParent?: TIncludeParent;
2756
+ }): RelationalSelectChain<TSchema, TTableConfig, ComposeFlatMapOutput<TRow, TSchema, TTableConfig, TRelationName, TIncludeParent>>;
2757
+ union(union: FindManyUnionSource<TTableConfig>[]): RelationalSelectChain<TSchema, TTableConfig, TRow>;
2758
+ interleaveBy(interleaveBy: string[]): RelationalSelectChain<TSchema, TTableConfig, TRow>;
2759
+ paginate(config: PaginateConfig): GelRelationalQuery<TSchema, TTableConfig, PaginatedResult<TRow>>;
2760
+ pageByKey(pageByKey: FindManyPageByKeyConfig): GelRelationalQuery<TSchema, TTableConfig, KeyPageResult<TRow>>;
2761
+ first(): GelRelationalQuery<TSchema, TTableConfig, TRow | null>;
2762
+ firstOrThrow(): GelRelationalQuery<TSchema, TTableConfig, TRow>;
2763
+ }
2764
+ /**
2765
+ * Query builder for a specific table
2766
+ *
2767
+ * Uses HKT (Higher-Kinded Type) pattern to prevent type widening.
2768
+ * The readonly `_` interface anchors the result type, preventing TypeScript
2769
+ * from re-evaluating TSchema[K] as a union of all tables.
2770
+ *
2771
+ * Pattern from Drizzle ORM:
2772
+ * drizzle-orm/src/pg-core/query-builders/select.ts:167-179
2773
+ *
2774
+ * @template TSchema - Full schema configuration
2775
+ * @template TTableConfig - Configuration for this specific table
2776
+ */
2777
+ declare class RelationalQueryBuilder<TSchema extends TablesRelationalConfig, TTableConfig extends TableRelationalConfig, THasIndex extends boolean = false> {
2778
+ private schema;
2779
+ private tableConfig;
2780
+ private edgeMetadata;
2781
+ private db;
2782
+ private allEdges?;
2783
+ private rls?;
2784
+ private relationLoading?;
2785
+ private vectorSearch?;
2786
+ private queryIndex?;
2787
+ /**
2788
+ * Type anchor for HKT pattern
2789
+ * Stores base result type in immutable property to prevent TypeScript from
2790
+ * widening types during mapped type evaluation. Methods construct their
2791
+ * return types (array, single, paginated) from this base type.
2792
+ */
2793
+ readonly _: {
2794
+ readonly schema: TSchema;
2795
+ readonly tableConfig: TTableConfig;
2796
+ readonly baseResult: BuildQueryResult<TSchema, TTableConfig, true>;
2797
+ };
2798
+ constructor(schema: TSchema, tableConfig: TTableConfig, edgeMetadata: EdgeMetadata[], db: GenericDatabaseReader<any>, allEdges?: EdgeMetadata[] | undefined, // M6.5 Phase 2: All edges for nested loading
2799
+ rls?: RlsContext | undefined, relationLoading?: {
2800
+ concurrency?: number;
2801
+ } | undefined, vectorSearch?: VectorSearchProvider | undefined, queryIndex?: PredicateWhereIndexConfig<TTableConfig> | undefined);
2802
+ private createQuery;
2803
+ select(): RelationalSelectChain<TSchema, TTableConfig, BuildQueryResult<TSchema, TTableConfig, true>, THasIndex>;
2804
+ withIndex<TIndexName extends PredicateIndexName<TTableConfig>>(indexName: TIndexName, range?: PredicateIndexConfigByName<TTableConfig, TIndexName>['range']): RelationalQueryBuilder<TSchema, TTableConfig, true>;
2805
+ count(): GelRelationalQuery<TSchema, TTableConfig, number>;
2806
+ count<TConfig extends CountConfig<TSchema, TTableConfig>>(config: KnownKeysOnly<TConfig, CountConfig<TSchema, TTableConfig>>): GelRelationalQuery<TSchema, TTableConfig, CountResult<TTableConfig, TConfig>>;
2807
+ aggregate<TConfig extends AggregateConfig<TSchema, TTableConfig>>(config: KnownKeysOnly<TConfig, AggregateConfig<TSchema, TTableConfig>>): GelRelationalQuery<TSchema, TTableConfig, AggregateResult<TTableConfig, TConfig>>;
2808
+ groupBy<TConfig extends GroupByConfig<TSchema, TTableConfig>>(config: KnownKeysOnly<TConfig, GroupByConfig<TSchema, TTableConfig>>): GelRelationalQuery<TSchema, TTableConfig, GroupByResult<TTableConfig, TConfig>>;
2809
+ rank(indexName: string, config?: {
2810
+ where?: Record<string, unknown>;
2811
+ }): GelRankQuery<TTableConfig>;
2812
+ /**
2813
+ * Find many rows matching the query configuration
2814
+ *
2815
+ * @template TConfig - Query configuration type
2816
+ * @param config - Optional query configuration (columns, with, where, orderBy, limit, offset)
2817
+ * @returns Query promise that resolves to array of results
2818
+ *
2819
+ * @example
2820
+ * const users = await ctx.db.query.users.findMany({
2821
+ * columns: { id: true, name: true },
2822
+ * with: { posts: { limit: 5 } },
2823
+ * where: { name: 'Alice' },
2824
+ * limit: 10
2825
+ * });
2826
+ */
2827
+ findMany(config: RelationCountWithConfig<TSchema, TTableConfig> & EnforcedConfig<RelationCountWithConfig<TSchema, TTableConfig>, TTableConfig, THasIndex> & DisallowWithIndexSearchOrVector<THasIndex>): GelRelationalQuery<TSchema, TTableConfig, FindManyResult<TSchema, TTableConfig, RelationCountWithConfig<TSchema, TTableConfig>>>;
2828
+ findMany<TConfig extends SearchPaginatedConfig<TSchema, TTableConfig>>(config: KnownKeysOnlyStrict<TConfig, SearchPaginatedConfig<TSchema, TTableConfig>> & DisallowWithIndexSearchOrVector<THasIndex>): GelRelationalQuery<TSchema, TTableConfig, PaginatedResult<BuildQueryResult<TSchema, TTableConfig, TConfig>>>;
2829
+ findMany<TConfig extends SearchNonPaginatedConfig<TSchema, TTableConfig>>(config: KnownKeysOnlyStrict<TConfig, SearchNonPaginatedConfig<TSchema, TTableConfig>> & DisallowWithIndexSearchOrVector<THasIndex>): GelRelationalQuery<TSchema, TTableConfig, BuildQueryResult<TSchema, TTableConfig, TConfig>[]>;
2830
+ findMany<TConfig extends VectorNonPaginatedConfig<TSchema, TTableConfig>>(config: KnownKeysOnlyStrict<TConfig, VectorNonPaginatedConfig<TSchema, TTableConfig>> & DisallowWithIndexSearchOrVector<THasIndex>): GelRelationalQuery<TSchema, TTableConfig, BuildQueryResult<TSchema, TTableConfig, TConfig>[]>;
2831
+ findMany<TConfig extends CursorPaginatedConfigNoSearch<TSchema, TTableConfig>>(config: KnownKeysOnlyStrict<TConfig, CursorPaginatedConfigNoSearch<TSchema, TTableConfig>> & EnforcedConfig<TConfig, TTableConfig, THasIndex>): GelRelationalQuery<TSchema, TTableConfig, PaginatedResult<BuildQueryResult<TSchema, TTableConfig, TConfig>>>;
2832
+ findMany<TConfig extends NonCursorConfigNoRelationCount<TSchema, TTableConfig>>(config?: KnownKeysOnly<TConfig, NonCursorConfigNoSearch<TSchema, TTableConfig>> & EnforcedConfig<TConfig, TTableConfig, THasIndex>): GelRelationalQuery<TSchema, TTableConfig, FindManyResult<TSchema, TTableConfig, TConfig>>;
2833
+ findMany<TConfig extends KeyPageConfig<TSchema, TTableConfig>>(config: KnownKeysOnlyStrict<TConfig, KeyPageConfig<TSchema, TTableConfig>> & EnforcedConfig<TConfig, TTableConfig, THasIndex>): GelRelationalQuery<TSchema, TTableConfig, KeyPageResult<BuildQueryResult<TSchema, TTableConfig, TConfig>>>;
2834
+ /**
2835
+ * Find first row matching the query configuration
2836
+ * Automatically applies limit: 1
2837
+ *
2838
+ * @template TConfig - Query configuration type (without limit)
2839
+ * @param config - Optional query configuration (columns, with, where, orderBy, offset)
2840
+ * @returns Query promise that resolves to single result or null
2841
+ *
2842
+ * @example
2843
+ * const user = await ctx.db.query.users.findFirst({
2844
+ * where: { email: 'alice@example.com' },
2845
+ * with: { profile: true }
2846
+ * });
2847
+ */
2848
+ findFirst<TConfig extends SearchFindFirstConfig<TSchema, TTableConfig>>(config: KnownKeysOnlyStrict<TConfig, SearchFindFirstConfig<TSchema, TTableConfig>> & DisallowWithIndexSearchOrVector<THasIndex>): GelRelationalQuery<TSchema, TTableConfig, BuildQueryResult<TSchema, TTableConfig, TConfig> | null>;
2849
+ findFirst<TConfig extends FindFirstConfigNoSearch<TSchema, TTableConfig>>(config?: KnownKeysOnlyStrict<TConfig, FindFirstConfigNoSearch<TSchema, TTableConfig>> & EnforcedConfig<TConfig, TTableConfig, THasIndex>): GelRelationalQuery<TSchema, TTableConfig, BuildQueryResult<TSchema, TTableConfig, TConfig> | null>;
2850
+ /**
2851
+ * Find first row matching the query configuration, or throw if none exists.
2852
+ *
2853
+ * This is the ergonomic companion to `findFirst()` (Prisma-style),
2854
+ * useful when callers expect a row to exist.
2855
+ */
2856
+ findFirstOrThrow<TConfig extends SearchFindFirstConfig<TSchema, TTableConfig>>(config: KnownKeysOnlyStrict<TConfig, SearchFindFirstConfig<TSchema, TTableConfig>> & DisallowWithIndexSearchOrVector<THasIndex>): GelRelationalQuery<TSchema, TTableConfig, BuildQueryResult<TSchema, TTableConfig, TConfig>>;
2857
+ findFirstOrThrow<TConfig extends FindFirstConfigNoSearch<TSchema, TTableConfig>>(config?: KnownKeysOnlyStrict<TConfig, FindFirstConfigNoSearch<TSchema, TTableConfig>> & EnforcedConfig<TConfig, TTableConfig, THasIndex>): GelRelationalQuery<TSchema, TTableConfig, BuildQueryResult<TSchema, TTableConfig, TConfig>>;
2858
+ }
2859
+ //#endregion
2860
+ //#region src/orm/update.d.ts
2861
+ type ConvexUpdateWithout<T extends ConvexUpdateBuilder<any, any, any, any>, K extends string> = Omit<T, K>;
2862
+ type ConvexUpdateExecutableThis<TTable extends ConvexTable<any>, TReturning extends MutationReturning, TMode extends MutationExecutionMode> = {
2863
+ _: {
2864
+ table: TTable;
2865
+ returning: TReturning;
2866
+ mode: TMode;
2867
+ result: MutationExecuteResult<TTable, TReturning, TMode>;
2868
+ hasWhereOrAllowFullScan: true;
2869
+ };
2870
+ };
2871
+ declare class ConvexUpdateBuilder<TTable extends ConvexTable<any>, TReturning extends MutationReturning = undefined, TMode extends MutationExecutionMode = 'single', THasWhereOrAllowFullScan extends boolean = false> extends QueryPromise<MutationExecuteResult<TTable, TReturning, TMode>> {
2872
+ private db;
2873
+ private table;
2874
+ readonly _: {
2875
+ readonly table: TTable;
2876
+ readonly returning: TReturning;
2877
+ readonly mode: TMode;
2878
+ readonly result: MutationExecuteResult<TTable, TReturning, TMode>;
2879
+ readonly hasWhereOrAllowFullScan: THasWhereOrAllowFullScan;
2880
+ };
2881
+ private setValues?;
2882
+ private whereExpression?;
2883
+ private returningFields?;
2884
+ private allowFullScanFlag;
2885
+ private paginateConfig?;
2886
+ private executionModeOverride?;
2887
+ private _loadReturningCount;
2888
+ constructor(db: GenericDatabaseWriter<any>, table: TTable);
2889
+ set(values: UpdateSet<TTable>): this;
2890
+ where(expression: FilterExpression$1<boolean>): ConvexUpdateBuilder<TTable, TReturning, TMode, true>;
2891
+ returning(): ConvexUpdateWithout<ConvexUpdateBuilder<TTable, true, TMode, THasWhereOrAllowFullScan>, 'returning'>;
2892
+ returning<TSelection extends ReturningSelection<TTable>>(fields: TSelection): ConvexUpdateWithout<ConvexUpdateBuilder<TTable, TSelection, TMode, THasWhereOrAllowFullScan>, 'returning'>;
2893
+ paginate(config: MutationPaginateConfig): ConvexUpdateWithout<ConvexUpdateBuilder<TTable, TReturning, 'paged', THasWhereOrAllowFullScan>, 'paginate'>;
2894
+ allowFullScan(): ConvexUpdateBuilder<TTable, TReturning, TMode, true>;
2895
+ private getIdEquality;
2896
+ executeAsync(this: ConvexUpdateExecutableThis<TTable, TReturning, TMode>, ...args: TMode extends 'single' ? [config?: Omit<MutationExecuteConfig, 'mode'>] : [config: never]): Promise<TMode extends 'single' ? MutationExecuteResult<TTable, TReturning, 'single'> : never>;
2897
+ execute(this: ConvexUpdateExecutableThis<TTable, TReturning, TMode>, ...args: TMode extends 'single' ? [config?: MutationExecuteConfig] : [config?: never]): Promise<MutationExecuteResult<TTable, TReturning, TMode>>;
2898
+ }
2899
+ //#endregion
2900
+ //#region src/orm/database.d.ts
2901
+ /**
2902
+ * Database with query builder API
2903
+ *
2904
+ * @template TSchema - Schema configuration with tables and relations
2905
+ *
2906
+ * Following Drizzle's pattern: Validate schema BEFORE mapped type to prevent type widening.
2907
+ * The conditional check outside the mapped type prevents distributive conditional behavior
2908
+ * that causes TSchema[K] to widen to a union of all table types.
2909
+ *
2910
+ * Pattern from: drizzle-orm/src/pg-core/db.ts lines 50-54
2911
+ * Key insight: TSchema[K] must be captured at mapping time, not evaluated in conditionals later.
2912
+ */
2913
+ type DatabaseWithQuery<TSchema extends TablesRelationalConfig> = Pick<GenericDatabaseReader<any>, 'system'> & {
2914
+ withoutTriggers<TResult>(callback: (orm: DatabaseWithQuery<TSchema>) => Promise<TResult>): Promise<TResult>;
2915
+ query: TSchema extends Record<string, never> ? {
2916
+ error: 'Schema is empty - did you forget to add tables?';
2917
+ } : { [K in keyof TSchema]: RelationalQueryBuilder<TSchema, TSchema[K]> };
2918
+ };
2919
+ type DatabaseWithMutations<TSchema extends TablesRelationalConfig> = DatabaseWithQuery<TSchema> & {
2920
+ withoutTriggers<TResult>(callback: (orm: DatabaseWithMutations<TSchema>) => Promise<TResult>): Promise<TResult>;
2921
+ insert<TTable extends ConvexTable<any>>(table: TTable): ConvexInsertBuilder<TTable>;
2922
+ update<TTable extends ConvexTable<any>>(table: TTable): ConvexUpdateBuilder<TTable>;
2923
+ delete<TTable extends ConvexTable<any>>(table: TTable): ConvexDeleteBuilder<TTable>;
2924
+ };
2925
+ type OrmReader<TSchema extends TablesRelationalConfig> = DatabaseWithQuery<TSchema> & {
2926
+ skipRules: DatabaseWithQuery<TSchema>;
2927
+ };
2928
+ type OrmWriter<TSchema extends TablesRelationalConfig> = DatabaseWithMutations<TSchema> & {
2929
+ skipRules: DatabaseWithMutations<TSchema>;
2930
+ };
2931
+ type CreateDatabaseOptions = {
2932
+ scheduler?: Scheduler;
2933
+ scheduledDelete?: SchedulableFunctionReference;
2934
+ scheduledMutationBatch?: SchedulableFunctionReference;
2935
+ vectorSearch?: VectorSearchProvider;
2936
+ rls?: RlsContext;
2937
+ relationLoading?: {
2938
+ concurrency?: number;
2939
+ };
2940
+ };
2941
+ //#endregion
2942
+ //#region src/orm/migrations/definitions.d.ts
2943
+ type MigrationDirection = 'up' | 'down';
2944
+ type MigrationRunStatus = 'pending' | 'running' | 'completed' | 'failed' | 'canceled' | 'dry_run' | 'noop';
2945
+ type MigrationWriteMode = 'safe_bypass' | 'normal';
2946
+ type MigrationSchemaInput = TablesRelationalConfig | object;
2947
+ type ResolveMigrationSchema<TSchema extends MigrationSchemaInput> = [TSchema] extends [TablesRelationalConfig] ? TSchema : TSchema extends {
2948
+ [OrmSchemaRelations]?: infer TRelations;
2949
+ } ? Exclude<TRelations, undefined> extends TablesRelationalConfig ? Exclude<TRelations, undefined> : RelationsConfigWithSchema<{}, ExtractTablesFromSchema<TSchema & Record<string, unknown>>> : RelationsConfigWithSchema<{}, ExtractTablesFromSchema<TSchema & Record<string, unknown>>>;
2950
+ type MigrationTableName<TSchema extends MigrationSchemaInput = TablesRelationalConfig> = { [K in keyof ResolveMigrationSchema<TSchema>]-?: ResolveMigrationSchema<TSchema>[K] extends TableRelationalConfig ? ResolveMigrationSchema<TSchema>[K]['name'] : never }[keyof ResolveMigrationSchema<TSchema>] & string;
2951
+ type MigrationTableConfigByName<TSchema extends MigrationSchemaInput, TTableName extends MigrationTableName<TSchema>> = { [K in keyof ResolveMigrationSchema<TSchema>]-?: ResolveMigrationSchema<TSchema>[K] extends TableRelationalConfig ? ResolveMigrationSchema<TSchema>[K]['name'] extends TTableName ? ResolveMigrationSchema<TSchema>[K] : never : never }[keyof ResolveMigrationSchema<TSchema>];
2952
+ type MigrationDoc<TSchema extends MigrationSchemaInput = TablesRelationalConfig, TTableName extends MigrationTableName<TSchema> = MigrationTableName<TSchema>> = MigrationTableConfigByName<TSchema, TTableName> extends TableRelationalConfig ? Partial<InferSelectModel<MigrationTableConfigByName<TSchema, TTableName>['table']>> & Record<string, unknown> : Record<string, unknown>;
2953
+ type MigrationDocContext<TSchema extends MigrationSchemaInput = TablesRelationalConfig> = {
2954
+ db: GenericDatabaseWriter<any>;
2955
+ orm: OrmWriter<ResolveMigrationSchema<TSchema>>;
2956
+ migrationId: string;
2957
+ runId: string;
2958
+ direction: MigrationDirection;
2959
+ dryRun: boolean;
2960
+ writeMode: MigrationWriteMode;
2961
+ };
2962
+ type MigrationMigrateOne<TSchema extends MigrationSchemaInput = TablesRelationalConfig, TTableName extends MigrationTableName<TSchema> = MigrationTableName<TSchema>> = (ctx: MigrationDocContext<TSchema>, doc: MigrationDoc<TSchema, TTableName>) => Promise<unknown> | unknown;
2963
+ type MigrationStepByTable<TSchema extends MigrationSchemaInput = TablesRelationalConfig, TTableName extends MigrationTableName<TSchema> = MigrationTableName<TSchema>> = {
2964
+ table: TTableName;
2965
+ batchSize?: number;
2966
+ writeMode?: MigrationWriteMode;
2967
+ migrateOne: MigrationMigrateOne<TSchema, TTableName>;
2968
+ };
2969
+ type MigrationStep<TSchema extends MigrationSchemaInput = TablesRelationalConfig> = { [TTableName in MigrationTableName<TSchema>]: MigrationStepByTable<TSchema, TTableName> }[MigrationTableName<TSchema>];
2970
+ type MigrationDefinition<TSchema extends MigrationSchemaInput = TablesRelationalConfig> = {
2971
+ id: string;
2972
+ name?: string;
2973
+ description?: string;
2974
+ up: MigrationStep<TSchema>;
2975
+ down?: MigrationStep<TSchema>;
2976
+ checksum?: string;
2977
+ };
2978
+ type MigrationManifestEntry<TSchema extends MigrationSchemaInput = TablesRelationalConfig> = MigrationDefinition<TSchema> & {
2979
+ checksum: string;
2980
+ };
2981
+ type MigrationSet<TSchema extends MigrationSchemaInput = TablesRelationalConfig> = {
2982
+ migrations: readonly MigrationManifestEntry<TSchema>[];
2983
+ ids: readonly string[];
2984
+ byId: Readonly<Record<string, MigrationManifestEntry<TSchema>>>;
2985
+ };
2986
+ type MigrationAppliedState = {
2987
+ applied: boolean;
2988
+ checksum?: string;
2989
+ cursor?: string | null;
2990
+ processed?: number;
2991
+ };
2992
+ type MigrationStateMap = Readonly<Record<string, MigrationAppliedState>>;
2993
+ type MigrationDriftIssue = {
2994
+ kind: 'missing_from_manifest';
2995
+ migrationId: string;
2996
+ message: string;
2997
+ } | {
2998
+ kind: 'checksum_mismatch';
2999
+ migrationId: string;
3000
+ message: string;
3001
+ expectedChecksum: string;
3002
+ actualChecksum: string;
3003
+ };
3004
+ type MigrationPlan<TSchema extends MigrationSchemaInput = TablesRelationalConfig> = {
3005
+ direction: MigrationDirection;
3006
+ migrations: readonly MigrationManifestEntry<TSchema>[];
3007
+ };
3008
+ declare function defineMigration<TSchema extends MigrationSchemaInput = TablesRelationalConfig>(migration: MigrationDefinition<TSchema>): MigrationDefinition<TSchema>;
3009
+ declare function defineMigrationSet<TSchema extends MigrationSchemaInput = TablesRelationalConfig>(migrations: readonly MigrationDefinition<TSchema>[]): MigrationSet<TSchema>;
3010
+ declare function detectMigrationDrift<TSchema extends MigrationSchemaInput = TablesRelationalConfig>(params: {
3011
+ migrationSet: MigrationSet<TSchema>;
3012
+ appliedState: MigrationStateMap;
3013
+ }): MigrationDriftIssue[];
3014
+ declare function buildMigrationPlan<TSchema extends MigrationSchemaInput = TablesRelationalConfig>(params: {
3015
+ direction: MigrationDirection;
3016
+ migrationSet: MigrationSet<TSchema>;
3017
+ appliedState: MigrationStateMap;
3018
+ steps?: number;
3019
+ to?: string;
3020
+ }): MigrationPlan<TSchema>;
3021
+ //#endregion
3022
+ //#region src/orm/migrations/runtime.d.ts
3023
+ type MigrationRunArgs = {
3024
+ direction?: MigrationDirection;
3025
+ steps?: number;
3026
+ to?: string;
3027
+ dryRun?: boolean;
3028
+ allowDrift?: boolean;
3029
+ batchSize?: number;
3030
+ restart?: boolean;
3031
+ };
3032
+ type MigrationRunChunkArgs = {
3033
+ runId: string;
3034
+ batchSize?: number;
3035
+ };
3036
+ type MigrationStatusArgs = {
3037
+ runId?: string;
3038
+ limit?: number;
3039
+ };
3040
+ type MigrationCancelArgs = {
3041
+ runId?: string;
3042
+ };
3043
+ //#endregion
3044
+ //#region src/orm/triggers.d.ts
3045
+ type MaybePromise<T> = T | Promise<T>;
3046
+ type AnyRecord = Record<string, unknown>;
3047
+ type KnownKeys<T> = { [K in keyof T]-?: string extends K ? never : number extends K ? never : symbol extends K ? never : K }[keyof T];
3048
+ type TriggerTableName<TSchema extends TablesRelationalConfig> = { [K in KnownKeys<TSchema>]-?: TSchema[K] extends TableRelationalConfig ? K extends string ? K : never : never }[KnownKeys<TSchema>];
3049
+ type TriggerDoc<TSchema extends TablesRelationalConfig, TTableName extends TriggerTableName<TSchema>> = TSchema[TTableName] extends TableRelationalConfig ? InferSelectModel<TSchema[TTableName]['table']> : never;
3050
+ type TriggerInsertData<TSchema extends TablesRelationalConfig, TTableName extends TriggerTableName<TSchema>> = TSchema[TTableName] extends TableRelationalConfig ? InferInsertModel<TSchema[TTableName]['table']> : never;
3051
+ type TriggerUpdateData<TSchema extends TablesRelationalConfig, TTableName extends TriggerTableName<TSchema>> = Partial<TriggerInsertData<TSchema, TTableName>>;
3052
+ type OrmTriggerContext<TSchema extends TablesRelationalConfig, TExtraCtx extends object = {}> = Omit<TExtraCtx, 'db' | 'innerDb' | 'orm'> & {
3053
+ db: GenericDatabaseWriter<any>;
3054
+ innerDb: GenericDatabaseWriter<any>;
3055
+ orm: OrmWriter<TSchema>;
3056
+ };
3057
+ type TriggerChangeId<TDoc> = TDoc extends {
3058
+ _id: infer TId;
3059
+ } ? TId : TDoc extends {
3060
+ id: infer TId;
3061
+ } ? TId : unknown;
3062
+ type OrmTriggerChange<TDoc = AnyRecord, TId = TriggerChangeId<TDoc>> = OrmLifecycleChange<TDoc, TId>;
3063
+ type OrmBeforeResult<TData extends AnyRecord> = void | false | {
3064
+ data: Partial<TData>;
3065
+ };
3066
+ type OrmBeforeHook<TData extends AnyRecord, TCtx extends object> = (data: TData, ctx: TCtx) => MaybePromise<OrmBeforeResult<TData>>;
3067
+ type OrmAfterHook<TDoc extends AnyRecord, TCtx extends object> = (doc: TDoc, ctx: TCtx) => MaybePromise<void>;
3068
+ type OrmChangeHook<TDoc extends AnyRecord, TCtx extends object> = ((change: OrmTriggerChange<TDoc>, ctx: TCtx) => MaybePromise<void>) | {
3069
+ (): unknown;
3070
+ (change: OrmTriggerChange<TDoc>, ctx: TCtx): MaybePromise<void>;
3071
+ };
3072
+ type OrmTableTriggers<TDoc extends AnyRecord, TInsert extends AnyRecord, TUpdate extends AnyRecord, TCtx extends object> = {
3073
+ create?: {
3074
+ before?: OrmBeforeHook<TInsert, TCtx>;
3075
+ after?: OrmAfterHook<TDoc, TCtx>;
3076
+ };
3077
+ update?: {
3078
+ before?: OrmBeforeHook<TUpdate, TCtx>;
3079
+ after?: OrmAfterHook<TDoc, TCtx>;
3080
+ };
3081
+ delete?: {
3082
+ before?: OrmBeforeHook<TDoc, TCtx>;
3083
+ after?: OrmAfterHook<TDoc, TCtx>;
3084
+ };
3085
+ change?: OrmChangeHook<TDoc, TCtx>;
3086
+ };
3087
+ type OrmTriggers<TSchema extends TablesRelationalConfig, TExtraCtx extends object = {}> = { [TTableName in TriggerTableName<TSchema>]?: OrmTableTriggers<TriggerDoc<TSchema, TTableName>, TriggerInsertData<TSchema, TTableName>, TriggerUpdateData<TSchema, TTableName>, OrmTriggerContext<TSchema, TExtraCtx>> };
3088
+ declare function defineTriggers<TSchema extends TablesRelationalConfig>(schema: TSchema, triggers: OrmTriggers<TSchema>): OrmTriggers<TSchema>;
3089
+ declare function defineTriggers<TSchema extends TablesRelationalConfig, TExtraCtx extends object>(schema: TSchema, triggers: OrmTriggers<TSchema, TExtraCtx>): OrmTriggers<TSchema, TExtraCtx>;
3090
+ //#endregion
3091
+ //#region src/orm/extensions.d.ts
3092
+ type SafeExtensionRelationsConfig<TRelationsConfig extends AnyRelationsBuilderConfig | undefined> = TRelationsConfig extends AnyRelationsBuilderConfig ? TRelationsConfig : {};
3093
+ type SchemaExtensionRelationsAuthoringConfig<TTables extends object> = { [TTableName in keyof ExtractTablesFromSchema<TTables>]?: RelationsBuilderConfigValue };
3094
+ type BivariantCallback<TCallback extends (...args: any[]) => unknown> = {
3095
+ bivarianceHack(...args: Parameters<TCallback>): ReturnType<TCallback>;
3096
+ }['bivarianceHack'];
3097
+ type SchemaExtensionRelationsFactory<TTables extends object, TRelationsConfig extends AnyRelationsBuilderConfig> = (helpers: RelationsBuilder<ExtractTablesFromSchema<TTables>>) => TRelationsConfig;
3098
+ type SchemaExtensionTriggersInput<TTables extends object = {}, TRelationsConfig extends AnyRelationsBuilderConfig | undefined = AnyRelationsBuilderConfig | undefined> = OrmTriggers<RelationsConfigWithSchema<SafeExtensionRelationsConfig<TRelationsConfig>, ExtractTablesFromSchema<TTables>>>;
3099
+ type SchemaExtension<TTables extends object = {}, TRelationsConfig extends AnyRelationsBuilderConfig | undefined = AnyRelationsBuilderConfig | undefined, TTriggers extends SchemaExtensionTriggersInput<TTables, TRelationsConfig> | undefined = SchemaExtensionTriggersInput<TTables, TRelationsConfig> | undefined> = {
3100
+ key: string;
3101
+ tables: TTables;
3102
+ [OrmSchemaExtensionRelations]?: TRelationsConfig extends AnyRelationsBuilderConfig ? BivariantCallback<SchemaExtensionRelationsFactory<TTables, TRelationsConfig>> : undefined;
3103
+ [OrmSchemaExtensionTriggers]?: TTriggers;
3104
+ };
3105
+ type AnySchemaExtension = SchemaExtension<object, AnyRelationsBuilderConfig | undefined, SchemaExtensionTriggersInput<object, AnyRelationsBuilderConfig | undefined> | undefined>;
3106
+ type SchemaExtensionChain<TTables extends object, TRelationsConfig extends AnyRelationsBuilderConfig | undefined, TCanRelations extends boolean, TCanTriggers extends boolean> = SchemaExtension<TTables, TRelationsConfig, SchemaExtensionTriggersInput<TTables, TRelationsConfig> | undefined> & (TCanRelations extends true ? {
3107
+ relations: <const TNextRelationsConfig extends SchemaExtensionRelationsAuthoringConfig<TTables>>(relations: SchemaExtensionRelationsFactory<TTables, TNextRelationsConfig>) => SchemaExtensionChain<TTables, TNextRelationsConfig, false, true>;
3108
+ } : {}) & (TCanTriggers extends true ? {
3109
+ triggers: (triggers: SchemaExtensionTriggersInput<TTables, TRelationsConfig>) => SchemaExtensionChain<TTables, TRelationsConfig, false, false>;
3110
+ } : {});
3111
+ declare function defineSchemaExtension<const TTables extends object>(key: string, tables: TTables): SchemaExtensionChain<TTables, undefined, true, true>;
3112
+ //#endregion
3113
+ //#region src/orm/scheduled-delete.d.ts
3114
+ type ScheduledDeleteArgs = {
3115
+ table: string;
3116
+ id: GenericId<any>;
3117
+ cascadeMode?: CascadeMode;
3118
+ deletionTime?: number;
3119
+ };
3120
+ declare function scheduledDeleteFactory<TSchema extends TablesRelationalConfig>(schema: TSchema, edgeMetadata: EdgeMetadata[], scheduledMutationBatch: SchedulableFunctionReference): (ctx: {
3121
+ db: GenericDatabaseWriter<any>;
3122
+ scheduler: Scheduler;
3123
+ }, args: ScheduledDeleteArgs) => Promise<void>;
3124
+ //#endregion
3125
+ //#region src/orm/scheduled-mutation-batch.d.ts
3126
+ type ScheduledMutationWorkType = 'root-update' | 'root-delete' | 'cascade-delete' | 'cascade-update';
3127
+ type ScheduledMutationBatchArgs = {
3128
+ workType?: ScheduledMutationWorkType;
3129
+ mode?: 'sync' | 'async';
3130
+ operation: 'update' | 'delete';
3131
+ table: string;
3132
+ where?: SerializedFilterExpression;
3133
+ allowFullScan?: boolean;
3134
+ update?: Record<string, unknown>;
3135
+ deleteMode?: DeleteMode;
3136
+ cascadeMode?: CascadeMode;
3137
+ foreignIndexName?: string;
3138
+ foreignSourceColumns?: string[];
3139
+ targetValues?: unknown;
3140
+ newValues?: unknown;
3141
+ foreignAction?: 'cascade' | 'set null' | 'set default' | 'restrict' | 'no action';
3142
+ cursor: string | null;
3143
+ batchSize: number;
3144
+ maxBytesPerBatch?: number;
3145
+ delayMs: number;
3146
+ };
3147
+ declare function scheduledMutationBatchFactory<TSchema extends TablesRelationalConfig>(schema: TSchema, edgeMetadata: EdgeMetadata[], scheduledMutationBatch: SchedulableFunctionReference): (ctx: {
3148
+ db: GenericDatabaseWriter<any>;
3149
+ scheduler: Scheduler;
3150
+ }, args: ScheduledMutationBatchArgs) => Promise<void>;
3151
+ //#endregion
3152
+ //#region src/orm/create-orm.d.ts
3153
+ type OrmFunctions = {
3154
+ scheduledMutationBatch: SchedulableFunctionReference;
3155
+ scheduledDelete: SchedulableFunctionReference;
3156
+ aggregateBackfillChunk?: SchedulableFunctionReference;
3157
+ migrationRunChunk?: SchedulableFunctionReference;
3158
+ resetChunk?: SchedulableFunctionReference;
3159
+ };
3160
+ type CreateOrmOptions = CreateDatabaseOptions;
3161
+ type OrmWriterCtx = {
3162
+ db: GenericDatabaseWriter<any>;
3163
+ scheduler?: Scheduler;
3164
+ vectorSearch?: VectorSearchProvider;
3165
+ };
3166
+ type OrmReaderCtx = {
3167
+ db: GenericDatabaseReader<any>;
3168
+ scheduler?: Scheduler;
3169
+ vectorSearch?: VectorSearchProvider;
3170
+ };
3171
+ type OrmSource = GenericDatabaseReader<any> | GenericDatabaseWriter<any> | OrmReaderCtx | OrmWriterCtx;
3172
+ type OrmSchemaInput = TablesRelationalConfig | object;
3173
+ type ResolveOrmSchema<TSchema extends OrmSchemaInput> = TSchema extends TablesRelationalConfig ? TSchema : TSchema extends {
3174
+ [OrmSchemaRelations]?: infer TRelations;
3175
+ } ? Exclude<TRelations, undefined> extends TablesRelationalConfig ? Exclude<TRelations, undefined> : RelationsConfigWithSchema<{}, ExtractTablesFromSchema<TSchema & Record<string, unknown>>> : RelationsConfigWithSchema<{}, ExtractTablesFromSchema<TSchema & Record<string, unknown>>>;
3176
+ type OrmResult<TSource extends OrmSource, TSchema extends TablesRelationalConfig> = TSource extends GenericDatabaseWriter<any> | OrmWriterCtx ? OrmWriter<TSchema> : OrmReader<TSchema>;
3177
+ type GenericOrm<Ctx extends {
3178
+ db: GenericDatabaseReader<any> | GenericDatabaseWriter<any>;
3179
+ }, TSchema extends TablesRelationalConfig> = Ctx extends {
3180
+ db: GenericDatabaseWriter<any>;
3181
+ } ? OrmWriter<TSchema> : OrmReader<TSchema>;
3182
+ type GenericOrmCtx<Ctx extends {
3183
+ db: GenericDatabaseReader<any> | GenericDatabaseWriter<any>;
3184
+ }, TSchema extends TablesRelationalConfig> = Ctx & {
3185
+ orm: GenericOrm<Ctx, TSchema>;
3186
+ };
3187
+ type CreateOrmConfigBase<TSchema extends OrmSchemaInput> = {
3188
+ schema: TSchema;
3189
+ migrations?: MigrationSet<any>;
3190
+ internalMutation?: typeof internalMutationGeneric;
3191
+ };
3192
+ type CreateOrmConfigWithFunctions<TSchema extends OrmSchemaInput> = CreateOrmConfigBase<TSchema> & {
3193
+ ormFunctions: OrmFunctions;
3194
+ };
3195
+ type CreateOrmConfigWithoutFunctions<TSchema extends OrmSchemaInput> = CreateOrmConfigBase<TSchema> & {
3196
+ ormFunctions?: undefined;
3197
+ };
3198
+ type OrmFactory<TSchema extends TablesRelationalConfig> = <TSource extends OrmSource>(source: TSource, options?: CreateOrmOptions) => OrmResult<TSource, TSchema>;
3199
+ type OrmApiResult = {
3200
+ scheduledMutationBatch: ReturnType<typeof internalMutationGeneric>;
3201
+ scheduledDelete: ReturnType<typeof internalMutationGeneric>;
3202
+ aggregateBackfill: ReturnType<typeof internalMutationGeneric>;
3203
+ aggregateBackfillChunk: ReturnType<typeof internalMutationGeneric>;
3204
+ aggregateBackfillStatus: ReturnType<typeof internalMutationGeneric>;
3205
+ migrationRun: ReturnType<typeof internalMutationGeneric>;
3206
+ migrationRunChunk: ReturnType<typeof internalMutationGeneric>;
3207
+ migrationStatus: ReturnType<typeof internalMutationGeneric>;
3208
+ migrationCancel: ReturnType<typeof internalMutationGeneric>;
3209
+ resetChunk: ReturnType<typeof internalMutationGeneric>;
3210
+ reset: ReturnType<typeof internalActionGeneric>;
3211
+ };
3212
+ type OrmClientBase<TSchema extends TablesRelationalConfig> = {
3213
+ db: OrmFactory<TSchema>;
3214
+ with: <TContext extends OrmReaderCtx | OrmWriterCtx>(ctx: TContext, options?: CreateOrmOptions) => GenericOrmCtx<TContext, TSchema>;
3215
+ };
3216
+ type OrmClientWithApi<TSchema extends TablesRelationalConfig> = OrmClientBase<TSchema> & {
3217
+ api: () => OrmApiResult;
3218
+ };
3219
+ declare function createOrm<TSchema extends OrmSchemaInput>(config: CreateOrmConfigWithoutFunctions<TSchema>): OrmClientBase<ResolveOrmSchema<TSchema>>;
3220
+ declare function createOrm<TSchema extends OrmSchemaInput>(config: CreateOrmConfigWithFunctions<TSchema>): OrmClientWithApi<ResolveOrmSchema<TSchema>>;
3221
+ //#endregion
3222
+ //#region src/orm/aggregate-index/backfill.d.ts
3223
+ type CountBackfillMode = 'resume' | 'rebuild' | 'prune';
3224
+ type CountBackfillKickoffArgs = {
3225
+ tableName?: string;
3226
+ indexName?: string;
3227
+ batchSize?: number;
3228
+ mode?: CountBackfillMode;
3229
+ };
3230
+ type CountBackfillChunkArgs = {
3231
+ tableName?: string;
3232
+ indexName?: string;
3233
+ batchSize?: number;
3234
+ };
3235
+ type CountBackfillStatusArgs = {
3236
+ tableName?: string;
3237
+ indexName?: string;
3238
+ };
3239
+ //#endregion
3240
+ //#region src/orm/builders/bigint.d.ts
3241
+ /**
3242
+ * Initial type for ConvexBigIntBuilder
3243
+ */
3244
+ type ConvexBigIntBuilderInitial<TName extends string> = ConvexBigIntBuilder<{
3245
+ name: TName;
3246
+ dataType: 'bigint';
3247
+ columnType: 'ConvexBigInt';
3248
+ data: bigint;
3249
+ driverParam: bigint;
3250
+ enumValues: undefined;
3251
+ }>;
3252
+ /**
3253
+ * BigInt column builder class
3254
+ * Compiles to v.int64() or v.optional(v.int64())
3255
+ */
3256
+ declare class ConvexBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'ConvexBigInt'>> extends ConvexColumnBuilder<T> {
3257
+ static readonly [entityKind]: string;
3258
+ constructor(name: T['name']);
3259
+ /**
3260
+ * Expose Convex validator for schema integration
3261
+ */
3262
+ get convexValidator(): Validator<any, any, any>;
3263
+ /**
3264
+ * Compile to Convex validator
3265
+ * .notNull() → v.int64()
3266
+ * nullable → v.optional(v.int64())
3267
+ */
3268
+ build(): Validator<any, any, any>;
3269
+ }
3270
+ /**
3271
+ * bigint() factory function
3272
+ *
3273
+ * Creates a bigint column builder (int64 in Convex).
3274
+ * For JavaScript bigint values.
3275
+ *
3276
+ * @example
3277
+ * bigint() → unnamed column
3278
+ * bigint('col_name') → named column
3279
+ */
3280
+ declare function bigint(): ConvexBigIntBuilderInitial<''>;
3281
+ declare function bigint<TName extends string>(name: TName): ConvexBigIntBuilderInitial<TName>;
3282
+ //#endregion
3283
+ //#region src/orm/builders/boolean.d.ts
3284
+ /**
3285
+ * Initial type for ConvexBooleanBuilder
3286
+ */
3287
+ type ConvexBooleanBuilderInitial<TName extends string> = ConvexBooleanBuilder<{
3288
+ name: TName;
3289
+ dataType: 'boolean';
3290
+ columnType: 'ConvexBoolean';
3291
+ data: boolean;
3292
+ driverParam: boolean;
3293
+ enumValues: undefined;
3294
+ }>;
3295
+ /**
3296
+ * Boolean column builder class
3297
+ * Compiles to v.boolean() or v.optional(v.boolean())
3298
+ */
3299
+ declare class ConvexBooleanBuilder<T extends ColumnBuilderBaseConfig<'boolean', 'ConvexBoolean'>> extends ConvexColumnBuilder<T> {
3300
+ static readonly [entityKind]: string;
3301
+ constructor(name: T['name']);
3302
+ /**
3303
+ * Expose Convex validator for schema integration
3304
+ */
3305
+ get convexValidator(): Validator<any, any, any>;
3306
+ /**
3307
+ * Compile to Convex validator
3308
+ * .notNull() → v.boolean()
3309
+ * nullable → v.optional(v.boolean())
3310
+ */
3311
+ build(): Validator<any, any, any>;
3312
+ }
3313
+ /**
3314
+ * boolean() factory function
3315
+ *
3316
+ * Creates a boolean column builder.
3317
+ *
3318
+ * @example
3319
+ * boolean() → unnamed column
3320
+ * boolean('col_name') → named column
3321
+ */
3322
+ declare function boolean(): ConvexBooleanBuilderInitial<''>;
3323
+ declare function boolean<TName extends string>(name: TName): ConvexBooleanBuilderInitial<TName>;
3324
+ //#endregion
3325
+ //#region src/orm/builders/bytes.d.ts
3326
+ type ConvexBytesBuilderInitial<TName extends string> = ConvexBytesBuilder<{
3327
+ name: TName;
3328
+ dataType: 'bytes';
3329
+ columnType: 'ConvexBytes';
3330
+ data: ArrayBuffer;
3331
+ driverParam: ArrayBuffer;
3332
+ enumValues: undefined;
3333
+ }>;
3334
+ declare class ConvexBytesBuilder<T extends ColumnBuilderBaseConfig<'bytes', 'ConvexBytes'>> extends ConvexColumnBuilder<T> {
3335
+ static readonly [entityKind]: string;
3336
+ constructor(name: T['name']);
3337
+ get convexValidator(): Validator<any, any, any>;
3338
+ build(): Validator<any, any, any>;
3339
+ }
3340
+ declare function bytes(): ConvexBytesBuilderInitial<''>;
3341
+ declare function bytes<TName extends string>(name: TName): ConvexBytesBuilderInitial<TName>;
3342
+ //#endregion
3343
+ //#region src/orm/builders/custom.d.ts
3344
+ type AnyValidator = Validator<any, any, any>;
3345
+ type AnyColumnBuilder = ColumnBuilder<any, any, any>;
3346
+ interface NestedShapeInput {
3347
+ [key: string]: NestedInput;
3348
+ }
3349
+ type NestedInput = AnyValidator | AnyColumnBuilder | NestedShapeInput;
3350
+ type InferBuilderNestedValue<TBuilder extends AnyColumnBuilder> = TBuilder['_'] extends {
3351
+ $type: infer TType;
3352
+ } ? TType : TBuilder['_'] extends {
3353
+ data: infer TData;
3354
+ } ? TBuilder['_'] extends {
3355
+ notNull: true;
3356
+ } ? TData : TData | null : never;
3357
+ type InferValidatorNestedValue<TValidator extends AnyValidator> = Exclude<TValidator['type'], undefined>;
3358
+ type InferNestedValue<TInput extends NestedInput> = TInput extends AnyColumnBuilder ? InferBuilderNestedValue<TInput> : TInput extends AnyValidator ? InferValidatorNestedValue<TInput> : TInput extends NestedShapeInput ? InferObjectShape<TInput> : never;
3359
+ type InferObjectShape<TShape extends NestedShapeInput> = { [K in keyof TShape]: InferNestedValue<TShape[K]> };
3360
+ type InferObjectValue<TInput extends NestedInput> = TInput extends AnyColumnBuilder | AnyValidator ? Record<string, InferNestedValue<TInput>> : TInput extends NestedShapeInput ? InferObjectShape<TInput> : never;
3361
+ type ConvexCustomBuilderInitial<TName extends string, TValidator extends AnyValidator> = ConvexCustomBuilder<{
3362
+ name: TName;
3363
+ dataType: 'any';
3364
+ columnType: 'ConvexCustom';
3365
+ data: TValidator['type'];
3366
+ driverParam: TValidator['type'];
3367
+ enumValues: undefined;
3368
+ }, TValidator>;
3369
+ declare class ConvexCustomBuilder<T extends ColumnBuilderBaseConfig<'any', 'ConvexCustom'>, TValidator extends AnyValidator> extends ConvexColumnBuilder<T, {
3370
+ validator: TValidator;
3371
+ }> {
3372
+ static readonly [entityKind]: string;
3373
+ constructor(name: T['name'], validator: TValidator);
3374
+ get convexValidator(): Validator<any, any, any>;
3375
+ build(): Validator<any, any, any>;
3376
+ }
3377
+ declare function custom<TValidator extends AnyValidator>(validator: TValidator): ConvexCustomBuilderInitial<'', TValidator>;
3378
+ declare function custom<TName extends string, TValidator extends AnyValidator>(name: TName, validator: TValidator): ConvexCustomBuilderInitial<TName, TValidator>;
3379
+ /**
3380
+ * Creates an array column from a nested validator or builder.
3381
+ *
3382
+ * Values in nested arrays are always compiled as required validators.
3383
+ */
3384
+ declare function arrayOf<TElement extends NestedInput>(element: TElement): $Type<ConvexCustomBuilderInitial<"", convex_values0.VArray<any[], AnyValidator, "required">>, InferNestedValue<TElement>[]>;
3385
+ /**
3386
+ * Creates a union column from validators/builders without dropping to `v.union(...)`.
3387
+ */
3388
+ declare function unionOf<const TMembers extends readonly [NestedInput, NestedInput, ...NestedInput[]]>(...members: TMembers): $Type<ConvexCustomBuilderInitial<"", convex_values0.VUnion<any, [AnyValidator, AnyValidator, ...AnyValidator[]], "required", any>>, InferNestedValue<TMembers[number]>>;
3389
+ /**
3390
+ * Creates an object column from either:
3391
+ * - a nested shape of validators/builders, or
3392
+ * - a validator/builder describing homogeneous record values
3393
+ *
3394
+ * Fields in nested objects are always compiled as required validators.
3395
+ */
3396
+ declare function objectOf<TInput extends NestedInput>(input: TInput): $Type<ConvexCustomBuilderInitial<"", convex_values0.VRecord<Record<string, any>, convex_values0.VString<string, "required">, AnyValidator, "required", string>>, InferObjectValue<TInput>> | $Type<ConvexCustomBuilderInitial<"", AnyValidator>, InferObjectValue<TInput>>;
3397
+ /**
3398
+ * Convenience wrapper for Convex "JSON" values.
3399
+ *
3400
+ * Note: This is Convex JSON (runtime `v.any()`), not SQL JSON/JSONB.
3401
+ */
3402
+ declare function json<T = Value>(): $Type<ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>>, T>;
3403
+ //#endregion
3404
+ //#region src/orm/builders/date.d.ts
3405
+ type ConvexDateMode = 'string' | 'date';
3406
+ type ConvexDateBuilderConfig<TName extends string, TMode extends ConvexDateMode> = {
3407
+ name: TName;
3408
+ dataType: 'string';
3409
+ columnType: 'ConvexDate';
3410
+ data: TMode extends 'date' ? Date : string;
3411
+ driverParam: string;
3412
+ enumValues: undefined;
3413
+ };
3414
+ type ConvexDateBuilderInitial<TName extends string, TMode extends ConvexDateMode = 'string'> = ConvexDateBuilder<ConvexDateBuilderConfig<TName, TMode>, TMode>;
3415
+ type ConvexDateRuntimeConfig<TMode extends ConvexDateMode> = {
3416
+ mode: TMode;
3417
+ };
3418
+ type ConvexDateBuilderArg<TMode extends ConvexDateMode> = {
3419
+ mode?: TMode;
3420
+ };
3421
+ declare class ConvexDateBuilder<T extends ColumnBuilderBaseConfig<'string', 'ConvexDate'>, TMode extends ConvexDateMode = ConvexDateMode> extends ConvexColumnBuilder<T, ConvexDateRuntimeConfig<TMode>> {
3422
+ static readonly [entityKind]: string;
3423
+ constructor(name: T['name'], mode: TMode);
3424
+ get convexValidator(): Validator<any, any, any>;
3425
+ defaultNow(): HasDefault<this>;
3426
+ build(): Validator<any, any, any>;
3427
+ }
3428
+ declare function date(): ConvexDateBuilderInitial<'', 'string'>;
3429
+ declare function date<TName extends string>(name: TName): ConvexDateBuilderInitial<TName, 'string'>;
3430
+ declare function date<TMode extends ConvexDateMode>(config: ConvexDateBuilderArg<TMode>): ConvexDateBuilderInitial<'', TMode>;
3431
+ declare function date<TName extends string, TMode extends ConvexDateMode>(name: TName, config: ConvexDateBuilderArg<TMode>): ConvexDateBuilderInitial<TName, TMode>;
3432
+ //#endregion
3433
+ //#region src/orm/builders/id.d.ts
3434
+ /**
3435
+ * Initial type for ConvexIdBuilder
3436
+ * Includes table name in type for branded Id
3437
+ */
3438
+ type ConvexIdBuilderInitial<TName extends string, TTableName extends string> = ConvexIdBuilder<{
3439
+ name: TName;
3440
+ dataType: 'string';
3441
+ columnType: 'ConvexId';
3442
+ data: GenericId<TTableName>;
3443
+ driverParam: GenericId<TTableName>;
3444
+ enumValues: undefined;
3445
+ }>;
3446
+ /**
3447
+ * ID column builder class
3448
+ * Compiles to v.id(tableName) or v.optional(v.id(tableName))
3449
+ */
3450
+ declare class ConvexIdBuilder<T extends ColumnBuilderBaseConfig<'string', 'ConvexId'>> extends ConvexColumnBuilder<T> {
3451
+ private tableName;
3452
+ static readonly [entityKind]: string;
3453
+ constructor(name: T['name'], tableName: string);
3454
+ /**
3455
+ * Expose Convex validator for schema integration
3456
+ */
3457
+ get convexValidator(): Validator<any, any, any>;
3458
+ /**
3459
+ * Compile to Convex validator
3460
+ * .notNull() → v.id(tableName)
3461
+ * nullable → v.optional(v.id(tableName))
3462
+ */
3463
+ build(): Validator<any, any, any>;
3464
+ }
3465
+ /**
3466
+ * id() factory function
3467
+ *
3468
+ * Creates an ID reference column builder (foreign key).
3469
+ * Requires table name to generate branded Id type.
3470
+ *
3471
+ * @example
3472
+ * id('users') → unnamed column referencing users table
3473
+ */
3474
+ declare function id<TTableName extends string>(tableName: TTableName): ConvexIdBuilderInitial<'', TTableName>;
3475
+ //#endregion
3476
+ //#region src/orm/builders/number.d.ts
3477
+ /**
3478
+ * Initial type for ConvexNumberBuilder
3479
+ */
3480
+ type ConvexNumberBuilderInitial<TName extends string> = ConvexNumberBuilder<{
3481
+ name: TName;
3482
+ dataType: 'number';
3483
+ columnType: 'ConvexNumber';
3484
+ data: number;
3485
+ driverParam: number;
3486
+ enumValues: undefined;
3487
+ }>;
3488
+ /**
3489
+ * Number column builder class
3490
+ * Compiles to v.number() or v.optional(v.number())
3491
+ */
3492
+ declare class ConvexNumberBuilder<T extends ColumnBuilderBaseConfig<'number', 'ConvexNumber'>> extends ConvexColumnBuilder<T> {
3493
+ static readonly [entityKind]: string;
3494
+ constructor(name: T['name']);
3495
+ /**
3496
+ * Expose Convex validator for schema integration
3497
+ */
3498
+ get convexValidator(): Validator<any, any, any>;
3499
+ /**
3500
+ * Compile to Convex validator
3501
+ * .notNull() → v.number()
3502
+ * nullable → v.optional(v.number())
3503
+ */
3504
+ build(): Validator<any, any, any>;
3505
+ }
3506
+ /**
3507
+ * integer() factory function
3508
+ *
3509
+ * Drizzle-parity numeric builder.
3510
+ * In Convex this maps to v.number() (Float64).
3511
+ *
3512
+ * @example
3513
+ * integer() → unnamed column
3514
+ * integer('col_name') → named column
3515
+ */
3516
+ declare function integer(): ConvexNumberBuilderInitial<''>;
3517
+ declare function integer<TName extends string>(name: TName): ConvexNumberBuilderInitial<TName>;
3518
+ //#endregion
3519
+ //#region src/orm/builders/text-enum.d.ts
3520
+ type EnumValues = readonly [string, ...string[]];
3521
+ type ConvexTextEnumBuilderInitial<TName extends string, TValues extends EnumValues> = ConvexTextEnumBuilder<{
3522
+ name: TName;
3523
+ dataType: 'string';
3524
+ columnType: 'ConvexText';
3525
+ data: TValues[number];
3526
+ driverParam: TValues[number];
3527
+ enumValues: TValues[number][];
3528
+ }>;
3529
+ declare class ConvexTextEnumBuilder<T extends ColumnBuilderBaseConfig<'string', 'ConvexText'>> extends ConvexColumnBuilder<T, {
3530
+ values: string[];
3531
+ }> {
3532
+ static readonly [entityKind]: string;
3533
+ constructor(name: T['name'], values: readonly string[]);
3534
+ private _enumValidator;
3535
+ get convexValidator(): Validator<any, any, any>;
3536
+ build(): Validator<any, any, any>;
3537
+ }
3538
+ declare function textEnum<const TValues extends EnumValues>(values: TValues): ConvexTextEnumBuilderInitial<'', TValues>;
3539
+ //#endregion
3540
+ //#region src/orm/builders/timestamp.d.ts
3541
+ type ConvexTimestampMode = 'date' | 'string';
3542
+ type ConvexTimestampBuilderConfig<TName extends string, TMode extends ConvexTimestampMode> = {
3543
+ name: TName;
3544
+ dataType: 'number';
3545
+ columnType: 'ConvexTimestamp';
3546
+ data: TMode extends 'string' ? string : Date;
3547
+ driverParam: number;
3548
+ enumValues: undefined;
3549
+ };
3550
+ type ConvexTimestampBuilderInitial<TName extends string, TMode extends ConvexTimestampMode = 'date'> = ConvexTimestampBuilder<ConvexTimestampBuilderConfig<TName, TMode>, TMode>;
3551
+ type ConvexTimestampRuntimeConfig<TMode extends ConvexTimestampMode> = {
3552
+ mode: TMode;
3553
+ };
3554
+ type ConvexTimestampBuilderArg<TMode extends ConvexTimestampMode> = {
3555
+ mode?: TMode;
3556
+ };
3557
+ declare class ConvexTimestampBuilder<T extends ColumnBuilderBaseConfig<'number', 'ConvexTimestamp'>, TMode extends ConvexTimestampMode = ConvexTimestampMode> extends ConvexColumnBuilder<T, ConvexTimestampRuntimeConfig<TMode>> {
3558
+ static readonly [entityKind]: string;
3559
+ constructor(name: T['name'], mode: TMode);
3560
+ get convexValidator(): Validator<any, any, any>;
3561
+ defaultNow(): HasDefault<this>;
3562
+ build(): Validator<any, any, any>;
3563
+ }
3564
+ declare function timestamp(): ConvexTimestampBuilderInitial<'', 'date'>;
3565
+ declare function timestamp<TName extends string>(name: TName): ConvexTimestampBuilderInitial<TName, 'date'>;
3566
+ declare function timestamp<TMode extends ConvexTimestampMode>(config: ConvexTimestampBuilderArg<TMode>): ConvexTimestampBuilderInitial<'', TMode>;
3567
+ declare function timestamp<TName extends string, TMode extends ConvexTimestampMode>(name: TName, config: ConvexTimestampBuilderArg<TMode>): ConvexTimestampBuilderInitial<TName, TMode>;
3568
+ //#endregion
3569
+ //#region src/orm/builders/vector.d.ts
3570
+ /**
3571
+ * Initial type for ConvexVectorBuilder
3572
+ */
3573
+ type ConvexVectorBuilderInitial<TName extends string> = ConvexVectorBuilder<{
3574
+ name: TName;
3575
+ dataType: 'vector';
3576
+ columnType: 'ConvexVector';
3577
+ data: number[];
3578
+ driverParam: number[];
3579
+ enumValues: undefined;
3580
+ }>;
3581
+ /**
3582
+ * Vector column builder class
3583
+ * Compiles to v.array(v.float64()) or v.optional(v.array(v.float64()))
3584
+ */
3585
+ declare class ConvexVectorBuilder<T extends ColumnBuilderBaseConfig<'vector', 'ConvexVector'>> extends ConvexColumnBuilder<T, {
3586
+ dimensions: number;
3587
+ }> {
3588
+ static readonly [entityKind]: string;
3589
+ constructor(name: T['name'], dimensions: number);
3590
+ get dimensions(): number;
3591
+ /**
3592
+ * Expose Convex validator for schema integration
3593
+ */
3594
+ get convexValidator(): Validator<any, any, any>;
3595
+ /**
3596
+ * Compile to Convex validator
3597
+ * .notNull() → v.array(v.float64())
3598
+ * nullable → v.optional(v.array(v.float64()))
3599
+ */
3600
+ build(): Validator<any, any, any>;
3601
+ }
3602
+ /**
3603
+ * vector() factory function
3604
+ *
3605
+ * Creates a vector column builder with fixed dimensions.
3606
+ *
3607
+ * @example
3608
+ * vector(1536) → unnamed column
3609
+ * vector('embedding', 1536) → named column
3610
+ */
3611
+ declare function vector(dimensions: number): ConvexVectorBuilderInitial<''>;
3612
+ declare function vector<TName extends string>(name: TName, dimensions: number): ConvexVectorBuilderInitial<TName>;
3613
+ //#endregion
3614
+ //#region src/orm/errors.d.ts
3615
+ declare class OrmNotFoundError extends Error {
3616
+ readonly table?: string | undefined;
3617
+ constructor(message: string, table?: string | undefined);
3618
+ }
3619
+ //#endregion
3620
+ //#region src/orm/index-utils.d.ts
3621
+ type TableAggregateIndex = {
3622
+ name: string;
3623
+ fields: string[];
3624
+ countFields: string[];
3625
+ sumFields: string[];
3626
+ avgFields: string[];
3627
+ minFields: string[];
3628
+ maxFields: string[];
3629
+ };
3630
+ type TableRankIndex = {
3631
+ name: string;
3632
+ partitionFields: string[];
3633
+ orderFields: Array<{
3634
+ field: string;
3635
+ direction: 'asc' | 'desc';
3636
+ }>;
3637
+ sumField?: string;
3638
+ };
3639
+ declare function getIndexes(table: ConvexTable<any>): {
3640
+ name: string;
3641
+ fields: string[];
3642
+ }[];
3643
+ declare function getAggregateIndexes(table: ConvexTable<any>): TableAggregateIndex[];
3644
+ declare function getRankIndexes(table: ConvexTable<any>): TableRankIndex[];
3645
+ //#endregion
3646
+ //#region src/orm/introspection.d.ts
3647
+ declare function getTableColumns<TTable extends ConvexTable<any>>(table: TTable): TTable[typeof Columns] & SystemFields<TTable['_']['name']> & SystemFieldAliases<TTable['_']['name'], TTable[typeof Columns]>;
3648
+ type TableConfigResult<TTable extends ConvexTable<any>> = {
3649
+ name: string;
3650
+ columns: ReturnType<typeof getTableColumns<TTable>>;
3651
+ indexes: ReturnType<typeof getIndexes>;
3652
+ aggregateIndexes: ReturnType<typeof getAggregateIndexes>;
3653
+ rankIndexes: ReturnType<typeof getRankIndexes>;
3654
+ uniqueIndexes: ReturnType<typeof getUniqueIndexes>;
3655
+ foreignKeys: ReturnType<typeof getForeignKeys>;
3656
+ checks: ReturnType<typeof getChecks>;
3657
+ rls: {
3658
+ enabled: boolean;
3659
+ policies: RlsPolicy[];
3660
+ };
3661
+ };
3662
+ declare function getTableConfig<TTable extends ConvexTable<any>>(table: TTable): TableConfigResult<TTable>;
3663
+ //#endregion
3664
+ //#region src/orm/order-by.d.ts
3665
+ /**
3666
+ * Create ascending order clause
3667
+ * Following Drizzle pattern for type-safe ordering
3668
+ *
3669
+ * @example
3670
+ * const posts = await db.query.posts.findMany({
3671
+ * orderBy: asc(posts._creationTime),
3672
+ * });
3673
+ */
3674
+ declare function asc<TBuilder extends ColumnBuilder<any, any, any>>(builder: TBuilder): OrderByClause<TBuilder>;
3675
+ /**
3676
+ * Create descending order clause
3677
+ * Following Drizzle pattern for type-safe ordering
3678
+ *
3679
+ * @example
3680
+ * const posts = await db.query.posts.findMany({
3681
+ * orderBy: desc(posts._creationTime),
3682
+ * });
3683
+ */
3684
+ declare function desc<TBuilder extends ColumnBuilder<any, any, any>>(builder: TBuilder): OrderByClause<TBuilder>;
3685
+ //#endregion
3686
+ //#region src/orm/schema.d.ts
3687
+ type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends ((value: infer I) => void) ? I : never;
3688
+ type Simplify<T> = { [K in keyof T]: T[K] } & {};
3689
+ type ExtensionList = readonly AnySchemaExtension[];
3690
+ type ExtensionTables<TExtension extends AnySchemaExtension> = TExtension extends SchemaExtension<infer TTables extends object, any, any> ? TTables : {};
3691
+ type ExtensionRelationsConfig<TExtension extends AnySchemaExtension> = TExtension extends SchemaExtension<any, infer TRelationsConfig extends AnyRelationsBuilderConfig | undefined, any> ? TRelationsConfig extends AnyRelationsBuilderConfig ? TRelationsConfig : {} : {};
3692
+ type ResolvedSchemaExtensions<TExtensions extends ExtensionList> = readonly [...typeof BUILTIN_SCHEMA_EXTENSIONS, ...TExtensions];
3693
+ type InjectedSchemaFromExtensions<TExtensions extends ExtensionList> = Simplify<UnionToIntersection<ExtensionTables<TExtensions[number]>>>;
3694
+ type SchemaWithExtensions<TSchema extends object, TExtensions extends ExtensionList> = Simplify<TSchema & InjectedSchemaFromExtensions<ResolvedSchemaExtensions<TExtensions>>>;
3695
+ type RelationsConfigFromExtensions<TExtensions extends ExtensionList> = Simplify<UnionToIntersection<ExtensionRelationsConfig<ResolvedSchemaExtensions<TExtensions>[number]>>>;
3696
+ type ResolvedRelationsConfig<TExtensions extends ExtensionList, TRelationsConfig extends AnyRelationsBuilderConfig | undefined> = Simplify<RelationsConfigFromExtensions<TExtensions> & (TRelationsConfig extends AnyRelationsBuilderConfig ? TRelationsConfig : {})>;
3697
+ type SafeRelationsConfig<TExtensions extends ExtensionList, TRelationsConfig extends AnyRelationsBuilderConfig | undefined> = ResolvedRelationsConfig<TExtensions, TRelationsConfig> extends AnyRelationsBuilderConfig ? ResolvedRelationsConfig<TExtensions, TRelationsConfig> : AnyRelationsBuilderConfig;
3698
+ type SchemaRelationsFactory<TSchema extends object, TRelationsConfig extends AnyRelationsBuilderConfig> = (helpers: RelationsBuilder<ExtractTablesFromSchema<TSchema>>) => TRelationsConfig;
3699
+ type SchemaRelations<TSchema extends object, TExtensions extends ExtensionList, TRelationsConfig extends AnyRelationsBuilderConfig | undefined> = RelationsConfigWithSchema<SafeRelationsConfig<TExtensions, TRelationsConfig>, ExtractTablesFromSchema<TSchema>>;
3700
+ type SchemaRelationsAuthoringConfig<TSchema extends object> = { [TTableName in keyof ExtractTablesFromSchema<TSchema>]?: RelationsBuilderConfigValue };
3701
+ type SchemaOptions<StrictTableNameTypes extends boolean> = DefineSchemaOptions<StrictTableNameTypes> & {
3702
+ strict?: boolean;
3703
+ defaults?: OrmRuntimeDefaults;
3704
+ };
3705
+ type SchemaResult<TSchema extends GenericSchema, StrictTableNameTypes extends boolean, TExtensions extends ExtensionList, TRelationsConfig extends AnyRelationsBuilderConfig | undefined> = SchemaDefinition<SchemaWithExtensions<TSchema, TExtensions>, StrictTableNameTypes> & {
3706
+ [OrmSchemaRelations]?: SchemaRelations<SchemaWithExtensions<TSchema, TExtensions>, TExtensions, TRelationsConfig>;
3707
+ [OrmSchemaTriggers]?: OrmTriggers<SchemaRelations<SchemaWithExtensions<TSchema, TExtensions>, TExtensions, TRelationsConfig>>;
3708
+ };
3709
+ type SchemaChain<TSchema extends GenericSchema, StrictTableNameTypes extends boolean, TExtensions extends ExtensionList, TRelationsConfig extends AnyRelationsBuilderConfig | undefined, TCanExtend extends boolean, TCanRelations extends boolean, TCanTriggers extends boolean> = SchemaResult<TSchema, StrictTableNameTypes, TExtensions, TRelationsConfig> & (TCanExtend extends true ? {
3710
+ extend: <const TNewExtensions extends ExtensionList>(...extensions: TNewExtensions) => SchemaChain<TSchema, StrictTableNameTypes, readonly [...TExtensions, ...TNewExtensions], TRelationsConfig, true, true, true>;
3711
+ } : {}) & (TCanRelations extends true ? {
3712
+ relations: <const TNextRelationsConfig extends SchemaRelationsAuthoringConfig<SchemaWithExtensions<TSchema, TExtensions>>>(relations: SchemaRelationsFactory<SchemaWithExtensions<TSchema, TExtensions>, TNextRelationsConfig>) => SchemaChain<TSchema, StrictTableNameTypes, TExtensions, TNextRelationsConfig, false, false, true>;
3713
+ } : {}) & (TCanTriggers extends true ? {
3714
+ triggers: (triggers: OrmTriggers<SchemaRelations<SchemaWithExtensions<TSchema, TExtensions>, TExtensions, TRelationsConfig>>) => SchemaChain<TSchema, StrictTableNameTypes, TExtensions, TRelationsConfig, false, false, false>;
3715
+ } : {});
3716
+ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
3717
+ readonly aggregate_bucket: ConvexTableWithColumns<{
3718
+ name: "aggregate_bucket";
3719
+ columns: {
3720
+ count: ConvexNumberBuilderInitial<""> & {
3721
+ _: {
3722
+ notNull: true;
3723
+ };
3724
+ } & {
3725
+ _: {
3726
+ tableName: "aggregate_bucket";
3727
+ };
3728
+ } & {
3729
+ _: {
3730
+ fieldName: "count";
3731
+ };
3732
+ };
3733
+ tableKey: ConvexTextBuilderInitial<""> & {
3734
+ _: {
3735
+ notNull: true;
3736
+ };
3737
+ } & {
3738
+ _: {
3739
+ tableName: "aggregate_bucket";
3740
+ };
3741
+ } & {
3742
+ _: {
3743
+ fieldName: "tableKey";
3744
+ };
3745
+ };
3746
+ indexName: ConvexTextBuilderInitial<""> & {
3747
+ _: {
3748
+ notNull: true;
3749
+ };
3750
+ } & {
3751
+ _: {
3752
+ tableName: "aggregate_bucket";
3753
+ };
3754
+ } & {
3755
+ _: {
3756
+ fieldName: "indexName";
3757
+ };
3758
+ };
3759
+ updatedAt: ConvexNumberBuilderInitial<""> & {
3760
+ _: {
3761
+ notNull: true;
3762
+ };
3763
+ } & {
3764
+ _: {
3765
+ tableName: "aggregate_bucket";
3766
+ };
3767
+ } & {
3768
+ _: {
3769
+ fieldName: "updatedAt";
3770
+ };
3771
+ };
3772
+ keyHash: ConvexTextBuilderInitial<""> & {
3773
+ _: {
3774
+ notNull: true;
3775
+ };
3776
+ } & {
3777
+ _: {
3778
+ tableName: "aggregate_bucket";
3779
+ };
3780
+ } & {
3781
+ _: {
3782
+ fieldName: "keyHash";
3783
+ };
3784
+ };
3785
+ keyParts: ConvexCustomBuilderInitial<"", convex_values0.VArray<any[], convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required">> & {
3786
+ _: {
3787
+ $type: convex_values0.Value[];
3788
+ };
3789
+ } & {
3790
+ _: {
3791
+ notNull: true;
3792
+ };
3793
+ } & {
3794
+ _: {
3795
+ tableName: "aggregate_bucket";
3796
+ };
3797
+ } & {
3798
+ _: {
3799
+ fieldName: "keyParts";
3800
+ };
3801
+ };
3802
+ sumValues: (NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VRecord<Record<string, any>, convex_values0.VString<string, "required">, convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required", string>>, Record<string, number>>> | NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>>, Record<string, number>>>) & {
3803
+ _: {
3804
+ tableName: "aggregate_bucket";
3805
+ };
3806
+ } & {
3807
+ _: {
3808
+ fieldName: "sumValues";
3809
+ };
3810
+ };
3811
+ nonNullCountValues: (NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VRecord<Record<string, any>, convex_values0.VString<string, "required">, convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required", string>>, Record<string, number>>> | NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>>, Record<string, number>>>) & {
3812
+ _: {
3813
+ tableName: "aggregate_bucket";
3814
+ };
3815
+ } & {
3816
+ _: {
3817
+ fieldName: "nonNullCountValues";
3818
+ };
3819
+ };
3820
+ };
3821
+ }, {
3822
+ by_creation_time: ["_creationTime"];
3823
+ by_table_index_hash: ["tableKey", "indexName", "keyHash", "_creationTime"];
3824
+ by_table_index: ["tableKey", "indexName", "_creationTime"];
3825
+ }, {}, {}, {}>;
3826
+ readonly aggregate_member: ConvexTableWithColumns<{
3827
+ name: "aggregate_member";
3828
+ columns: {
3829
+ kind: ConvexTextBuilderInitial<""> & {
3830
+ _: {
3831
+ notNull: true;
3832
+ };
3833
+ } & {
3834
+ _: {
3835
+ tableName: "aggregate_member";
3836
+ };
3837
+ } & {
3838
+ _: {
3839
+ fieldName: "kind";
3840
+ };
3841
+ };
3842
+ tableKey: ConvexTextBuilderInitial<""> & {
3843
+ _: {
3844
+ notNull: true;
3845
+ };
3846
+ } & {
3847
+ _: {
3848
+ tableName: "aggregate_member";
3849
+ };
3850
+ } & {
3851
+ _: {
3852
+ fieldName: "tableKey";
3853
+ };
3854
+ };
3855
+ indexName: ConvexTextBuilderInitial<""> & {
3856
+ _: {
3857
+ notNull: true;
3858
+ };
3859
+ } & {
3860
+ _: {
3861
+ tableName: "aggregate_member";
3862
+ };
3863
+ } & {
3864
+ _: {
3865
+ fieldName: "indexName";
3866
+ };
3867
+ };
3868
+ updatedAt: ConvexNumberBuilderInitial<""> & {
3869
+ _: {
3870
+ notNull: true;
3871
+ };
3872
+ } & {
3873
+ _: {
3874
+ tableName: "aggregate_member";
3875
+ };
3876
+ } & {
3877
+ _: {
3878
+ fieldName: "updatedAt";
3879
+ };
3880
+ };
3881
+ keyHash: ConvexTextBuilderInitial<""> & {
3882
+ _: {
3883
+ notNull: true;
3884
+ };
3885
+ } & {
3886
+ _: {
3887
+ tableName: "aggregate_member";
3888
+ };
3889
+ } & {
3890
+ _: {
3891
+ fieldName: "keyHash";
3892
+ };
3893
+ };
3894
+ keyParts: ConvexCustomBuilderInitial<"", convex_values0.VArray<any[], convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required">> & {
3895
+ _: {
3896
+ $type: convex_values0.Value[];
3897
+ };
3898
+ } & {
3899
+ _: {
3900
+ notNull: true;
3901
+ };
3902
+ } & {
3903
+ _: {
3904
+ tableName: "aggregate_member";
3905
+ };
3906
+ } & {
3907
+ _: {
3908
+ fieldName: "keyParts";
3909
+ };
3910
+ };
3911
+ sumValues: (NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VRecord<Record<string, any>, convex_values0.VString<string, "required">, convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required", string>>, Record<string, number>>> | NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>>, Record<string, number>>>) & {
3912
+ _: {
3913
+ tableName: "aggregate_member";
3914
+ };
3915
+ } & {
3916
+ _: {
3917
+ fieldName: "sumValues";
3918
+ };
3919
+ };
3920
+ nonNullCountValues: (NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VRecord<Record<string, any>, convex_values0.VString<string, "required">, convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required", string>>, Record<string, number>>> | NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>>, Record<string, number>>>) & {
3921
+ _: {
3922
+ tableName: "aggregate_member";
3923
+ };
3924
+ } & {
3925
+ _: {
3926
+ fieldName: "nonNullCountValues";
3927
+ };
3928
+ };
3929
+ docId: ConvexTextBuilderInitial<""> & {
3930
+ _: {
3931
+ notNull: true;
3932
+ };
3933
+ } & {
3934
+ _: {
3935
+ tableName: "aggregate_member";
3936
+ };
3937
+ } & {
3938
+ _: {
3939
+ fieldName: "docId";
3940
+ };
3941
+ };
3942
+ extremaValues: (NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VRecord<Record<string, any>, convex_values0.VString<string, "required">, convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required", string>>, Record<string, convex_values0.Value>>> | NotNull<$Type<ConvexCustomBuilderInitial<"", convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>>, Record<string, convex_values0.Value>>>) & {
3943
+ _: {
3944
+ tableName: "aggregate_member";
3945
+ };
3946
+ } & {
3947
+ _: {
3948
+ fieldName: "extremaValues";
3949
+ };
3950
+ };
3951
+ rankNamespace: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
3952
+ _: {
3953
+ $type: convex_values0.Value;
3954
+ };
3955
+ } & {
3956
+ _: {
3957
+ tableName: "aggregate_member";
3958
+ };
3959
+ } & {
3960
+ _: {
3961
+ fieldName: "rankNamespace";
3962
+ };
3963
+ };
3964
+ rankKey: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
3965
+ _: {
3966
+ $type: convex_values0.Value;
3967
+ };
3968
+ } & {
3969
+ _: {
3970
+ tableName: "aggregate_member";
3971
+ };
3972
+ } & {
3973
+ _: {
3974
+ fieldName: "rankKey";
3975
+ };
3976
+ };
3977
+ rankSumValue: ConvexNumberBuilderInitial<""> & {
3978
+ _: {
3979
+ tableName: "aggregate_member";
3980
+ };
3981
+ } & {
3982
+ _: {
3983
+ fieldName: "rankSumValue";
3984
+ };
3985
+ };
3986
+ };
3987
+ }, {
3988
+ by_creation_time: ["_creationTime"];
3989
+ by_kind_table_index_doc: ["kind", "tableKey", "indexName", "docId", "_creationTime"];
3990
+ by_kind_table_index: ["kind", "tableKey", "indexName", "_creationTime"];
3991
+ }, {}, {}, {}>;
3992
+ readonly aggregate_extrema: ConvexTableWithColumns<{
3993
+ name: "aggregate_extrema";
3994
+ columns: {
3995
+ value: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
3996
+ _: {
3997
+ $type: convex_values0.Value;
3998
+ };
3999
+ } & {
4000
+ _: {
4001
+ notNull: true;
4002
+ };
4003
+ } & {
4004
+ _: {
4005
+ tableName: "aggregate_extrema";
4006
+ };
4007
+ } & {
4008
+ _: {
4009
+ fieldName: "value";
4010
+ };
4011
+ };
4012
+ count: ConvexNumberBuilderInitial<""> & {
4013
+ _: {
4014
+ notNull: true;
4015
+ };
4016
+ } & {
4017
+ _: {
4018
+ tableName: "aggregate_extrema";
4019
+ };
4020
+ } & {
4021
+ _: {
4022
+ fieldName: "count";
4023
+ };
4024
+ };
4025
+ tableKey: ConvexTextBuilderInitial<""> & {
4026
+ _: {
4027
+ notNull: true;
4028
+ };
4029
+ } & {
4030
+ _: {
4031
+ tableName: "aggregate_extrema";
4032
+ };
4033
+ } & {
4034
+ _: {
4035
+ fieldName: "tableKey";
4036
+ };
4037
+ };
4038
+ indexName: ConvexTextBuilderInitial<""> & {
4039
+ _: {
4040
+ notNull: true;
4041
+ };
4042
+ } & {
4043
+ _: {
4044
+ tableName: "aggregate_extrema";
4045
+ };
4046
+ } & {
4047
+ _: {
4048
+ fieldName: "indexName";
4049
+ };
4050
+ };
4051
+ updatedAt: ConvexNumberBuilderInitial<""> & {
4052
+ _: {
4053
+ notNull: true;
4054
+ };
4055
+ } & {
4056
+ _: {
4057
+ tableName: "aggregate_extrema";
4058
+ };
4059
+ } & {
4060
+ _: {
4061
+ fieldName: "updatedAt";
4062
+ };
4063
+ };
4064
+ keyHash: ConvexTextBuilderInitial<""> & {
4065
+ _: {
4066
+ notNull: true;
4067
+ };
4068
+ } & {
4069
+ _: {
4070
+ tableName: "aggregate_extrema";
4071
+ };
4072
+ } & {
4073
+ _: {
4074
+ fieldName: "keyHash";
4075
+ };
4076
+ };
4077
+ fieldName: ConvexTextBuilderInitial<""> & {
4078
+ _: {
4079
+ notNull: true;
4080
+ };
4081
+ } & {
4082
+ _: {
4083
+ tableName: "aggregate_extrema";
4084
+ };
4085
+ } & {
4086
+ _: {
4087
+ fieldName: "fieldName";
4088
+ };
4089
+ };
4090
+ valueHash: ConvexTextBuilderInitial<""> & {
4091
+ _: {
4092
+ notNull: true;
4093
+ };
4094
+ } & {
4095
+ _: {
4096
+ tableName: "aggregate_extrema";
4097
+ };
4098
+ } & {
4099
+ _: {
4100
+ fieldName: "valueHash";
4101
+ };
4102
+ };
4103
+ sortKey: ConvexTextBuilderInitial<""> & {
4104
+ _: {
4105
+ notNull: true;
4106
+ };
4107
+ } & {
4108
+ _: {
4109
+ tableName: "aggregate_extrema";
4110
+ };
4111
+ } & {
4112
+ _: {
4113
+ fieldName: "sortKey";
4114
+ };
4115
+ };
4116
+ };
4117
+ }, {
4118
+ by_creation_time: ["_creationTime"];
4119
+ by_table_index: ["tableKey", "indexName", "_creationTime"];
4120
+ by_table_index_hash_field_value: ["tableKey", "indexName", "keyHash", "fieldName", "valueHash", "_creationTime"];
4121
+ by_table_index_hash_field_sort: ["tableKey", "indexName", "keyHash", "fieldName", "sortKey", "_creationTime"];
4122
+ }, {}, {}, {}>;
4123
+ readonly aggregate_rank_tree: ConvexTableWithColumns<{
4124
+ name: "aggregate_rank_tree";
4125
+ columns: {
4126
+ aggregateName: ConvexTextBuilderInitial<""> & {
4127
+ _: {
4128
+ notNull: true;
4129
+ };
4130
+ } & {
4131
+ _: {
4132
+ tableName: "aggregate_rank_tree";
4133
+ };
4134
+ } & {
4135
+ _: {
4136
+ fieldName: "aggregateName";
4137
+ };
4138
+ };
4139
+ maxNodeSize: ConvexNumberBuilderInitial<""> & {
4140
+ _: {
4141
+ notNull: true;
4142
+ };
4143
+ } & {
4144
+ _: {
4145
+ tableName: "aggregate_rank_tree";
4146
+ };
4147
+ } & {
4148
+ _: {
4149
+ fieldName: "maxNodeSize";
4150
+ };
4151
+ };
4152
+ namespace: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
4153
+ _: {
4154
+ $type: convex_values0.Value;
4155
+ };
4156
+ } & {
4157
+ _: {
4158
+ tableName: "aggregate_rank_tree";
4159
+ };
4160
+ } & {
4161
+ _: {
4162
+ fieldName: "namespace";
4163
+ };
4164
+ };
4165
+ root: ConvexIdBuilderInitial<"", "aggregate_rank_node"> & {
4166
+ _: {
4167
+ notNull: true;
4168
+ };
4169
+ } & {
4170
+ _: {
4171
+ tableName: "aggregate_rank_tree";
4172
+ };
4173
+ } & {
4174
+ _: {
4175
+ fieldName: "root";
4176
+ };
4177
+ };
4178
+ };
4179
+ }, {
4180
+ by_creation_time: ["_creationTime"];
4181
+ by_namespace: ["namespace", "_creationTime"];
4182
+ by_aggregate_name: ["aggregateName", "_creationTime"];
4183
+ }, {}, {}, {}>;
4184
+ readonly aggregate_rank_node: ConvexTableWithColumns<{
4185
+ name: "aggregate_rank_node";
4186
+ columns: {
4187
+ aggregate: ($Type<ConvexCustomBuilderInitial<"", convex_values0.VRecord<Record<string, any>, convex_values0.VString<string, "required">, convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required", string>>, {
4188
+ count: number;
4189
+ sum: number;
4190
+ }> | $Type<ConvexCustomBuilderInitial<"", convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>>, {
4191
+ count: number;
4192
+ sum: number;
4193
+ }>) & {
4194
+ _: {
4195
+ tableName: "aggregate_rank_node";
4196
+ };
4197
+ } & {
4198
+ _: {
4199
+ fieldName: "aggregate";
4200
+ };
4201
+ };
4202
+ items: ConvexCustomBuilderInitial<"", convex_values0.VArray<any[], convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required">> & {
4203
+ _: {
4204
+ $type: {
4205
+ k: convex_values0.Value;
4206
+ v: convex_values0.Value;
4207
+ s: number;
4208
+ }[];
4209
+ };
4210
+ } & {
4211
+ _: {
4212
+ notNull: true;
4213
+ };
4214
+ } & {
4215
+ _: {
4216
+ tableName: "aggregate_rank_node";
4217
+ };
4218
+ } & {
4219
+ _: {
4220
+ fieldName: "items";
4221
+ };
4222
+ };
4223
+ subtrees: ConvexCustomBuilderInitial<"", convex_values0.VArray<any[], convex_values0.VId<any, any> | convex_values0.VString<any, any> | convex_values0.VFloat64<any, any> | convex_values0.VInt64<any, any> | convex_values0.VBoolean<any, any> | convex_values0.VNull<any, any> | convex_values0.VAny<any, any, string> | convex_values0.VLiteral<any, any> | convex_values0.VBytes<any, any> | convex_values0.VObject<any, Record<string, convex_values0.Validator<any, convex_values0.OptionalProperty, any>>, any, any> | convex_values0.VArray<any, convex_values0.Validator<any, "required", any>, any> | convex_values0.VRecord<any, convex_values0.Validator<string, "required", any>, convex_values0.Validator<any, "required", any>, any, any> | convex_values0.VUnion<any, convex_values0.Validator<any, "required", any>[], any, any>, "required">> & {
4224
+ _: {
4225
+ $type: string[];
4226
+ };
4227
+ } & {
4228
+ _: {
4229
+ notNull: true;
4230
+ };
4231
+ } & {
4232
+ _: {
4233
+ tableName: "aggregate_rank_node";
4234
+ };
4235
+ } & {
4236
+ _: {
4237
+ fieldName: "subtrees";
4238
+ };
4239
+ };
4240
+ };
4241
+ }, {
4242
+ by_creation_time: ["_creationTime"];
4243
+ }, {}, {}, {}>;
4244
+ readonly aggregate_state: ConvexTableWithColumns<{
4245
+ name: "aggregate_state";
4246
+ columns: {
4247
+ kind: ConvexTextBuilderInitial<""> & {
4248
+ _: {
4249
+ notNull: true;
4250
+ };
4251
+ } & {
4252
+ _: {
4253
+ tableName: "aggregate_state";
4254
+ };
4255
+ } & {
4256
+ _: {
4257
+ fieldName: "kind";
4258
+ };
4259
+ };
4260
+ cursor: ConvexTextBuilderInitial<""> & {
4261
+ _: {
4262
+ tableName: "aggregate_state";
4263
+ };
4264
+ } & {
4265
+ _: {
4266
+ fieldName: "cursor";
4267
+ };
4268
+ };
4269
+ tableKey: ConvexTextBuilderInitial<""> & {
4270
+ _: {
4271
+ notNull: true;
4272
+ };
4273
+ } & {
4274
+ _: {
4275
+ tableName: "aggregate_state";
4276
+ };
4277
+ } & {
4278
+ _: {
4279
+ fieldName: "tableKey";
4280
+ };
4281
+ };
4282
+ indexName: ConvexTextBuilderInitial<""> & {
4283
+ _: {
4284
+ notNull: true;
4285
+ };
4286
+ } & {
4287
+ _: {
4288
+ tableName: "aggregate_state";
4289
+ };
4290
+ } & {
4291
+ _: {
4292
+ fieldName: "indexName";
4293
+ };
4294
+ };
4295
+ keyDefinitionHash: ConvexTextBuilderInitial<""> & {
4296
+ _: {
4297
+ notNull: true;
4298
+ };
4299
+ } & {
4300
+ _: {
4301
+ tableName: "aggregate_state";
4302
+ };
4303
+ } & {
4304
+ _: {
4305
+ fieldName: "keyDefinitionHash";
4306
+ };
4307
+ };
4308
+ metricDefinitionHash: ConvexTextBuilderInitial<""> & {
4309
+ _: {
4310
+ notNull: true;
4311
+ };
4312
+ } & {
4313
+ _: {
4314
+ tableName: "aggregate_state";
4315
+ };
4316
+ } & {
4317
+ _: {
4318
+ fieldName: "metricDefinitionHash";
4319
+ };
4320
+ };
4321
+ status: ConvexTextBuilderInitial<""> & {
4322
+ _: {
4323
+ notNull: true;
4324
+ };
4325
+ } & {
4326
+ _: {
4327
+ tableName: "aggregate_state";
4328
+ };
4329
+ } & {
4330
+ _: {
4331
+ fieldName: "status";
4332
+ };
4333
+ };
4334
+ processed: ConvexNumberBuilderInitial<""> & {
4335
+ _: {
4336
+ notNull: true;
4337
+ };
4338
+ } & {
4339
+ _: {
4340
+ tableName: "aggregate_state";
4341
+ };
4342
+ } & {
4343
+ _: {
4344
+ fieldName: "processed";
4345
+ };
4346
+ };
4347
+ startedAt: ConvexNumberBuilderInitial<""> & {
4348
+ _: {
4349
+ notNull: true;
4350
+ };
4351
+ } & {
4352
+ _: {
4353
+ tableName: "aggregate_state";
4354
+ };
4355
+ } & {
4356
+ _: {
4357
+ fieldName: "startedAt";
4358
+ };
4359
+ };
4360
+ updatedAt: ConvexNumberBuilderInitial<""> & {
4361
+ _: {
4362
+ notNull: true;
4363
+ };
4364
+ } & {
4365
+ _: {
4366
+ tableName: "aggregate_state";
4367
+ };
4368
+ } & {
4369
+ _: {
4370
+ fieldName: "updatedAt";
4371
+ };
4372
+ };
4373
+ completedAt: ConvexNumberBuilderInitial<""> & {
4374
+ _: {
4375
+ tableName: "aggregate_state";
4376
+ };
4377
+ } & {
4378
+ _: {
4379
+ fieldName: "completedAt";
4380
+ };
4381
+ };
4382
+ lastError: ConvexTextBuilderInitial<""> & {
4383
+ _: {
4384
+ tableName: "aggregate_state";
4385
+ };
4386
+ } & {
4387
+ _: {
4388
+ fieldName: "lastError";
4389
+ };
4390
+ };
4391
+ };
4392
+ }, {
4393
+ by_creation_time: ["_creationTime"];
4394
+ by_kind_table_index: ["kind", "tableKey", "indexName", "_creationTime"];
4395
+ by_kind_status: ["kind", "status", "_creationTime"];
4396
+ }, {}, {}, {}>;
4397
+ }>, SchemaExtension<{
4398
+ readonly migration_state: ConvexTableWithColumns<{
4399
+ name: "migration_state";
4400
+ columns: {
4401
+ cursor: ConvexTextBuilderInitial<""> & {
4402
+ _: {
4403
+ tableName: "migration_state";
4404
+ };
4405
+ } & {
4406
+ _: {
4407
+ fieldName: "cursor";
4408
+ };
4409
+ };
4410
+ direction: ConvexTextBuilderInitial<""> & {
4411
+ _: {
4412
+ tableName: "migration_state";
4413
+ };
4414
+ } & {
4415
+ _: {
4416
+ fieldName: "direction";
4417
+ };
4418
+ };
4419
+ status: ConvexTextBuilderInitial<""> & {
4420
+ _: {
4421
+ notNull: true;
4422
+ };
4423
+ } & {
4424
+ _: {
4425
+ tableName: "migration_state";
4426
+ };
4427
+ } & {
4428
+ _: {
4429
+ fieldName: "status";
4430
+ };
4431
+ };
4432
+ processed: ConvexNumberBuilderInitial<""> & {
4433
+ _: {
4434
+ notNull: true;
4435
+ };
4436
+ } & {
4437
+ _: {
4438
+ tableName: "migration_state";
4439
+ };
4440
+ } & {
4441
+ _: {
4442
+ fieldName: "processed";
4443
+ };
4444
+ };
4445
+ startedAt: ConvexNumberBuilderInitial<""> & {
4446
+ _: {
4447
+ tableName: "migration_state";
4448
+ };
4449
+ } & {
4450
+ _: {
4451
+ fieldName: "startedAt";
4452
+ };
4453
+ };
4454
+ updatedAt: ConvexNumberBuilderInitial<""> & {
4455
+ _: {
4456
+ notNull: true;
4457
+ };
4458
+ } & {
4459
+ _: {
4460
+ tableName: "migration_state";
4461
+ };
4462
+ } & {
4463
+ _: {
4464
+ fieldName: "updatedAt";
4465
+ };
4466
+ };
4467
+ completedAt: ConvexNumberBuilderInitial<""> & {
4468
+ _: {
4469
+ tableName: "migration_state";
4470
+ };
4471
+ } & {
4472
+ _: {
4473
+ fieldName: "completedAt";
4474
+ };
4475
+ };
4476
+ lastError: ConvexTextBuilderInitial<""> & {
4477
+ _: {
4478
+ tableName: "migration_state";
4479
+ };
4480
+ } & {
4481
+ _: {
4482
+ fieldName: "lastError";
4483
+ };
4484
+ };
4485
+ migrationId: ConvexTextBuilderInitial<""> & {
4486
+ _: {
4487
+ notNull: true;
4488
+ };
4489
+ } & {
4490
+ _: {
4491
+ tableName: "migration_state";
4492
+ };
4493
+ } & {
4494
+ _: {
4495
+ fieldName: "migrationId";
4496
+ };
4497
+ };
4498
+ checksum: ConvexTextBuilderInitial<""> & {
4499
+ _: {
4500
+ notNull: true;
4501
+ };
4502
+ } & {
4503
+ _: {
4504
+ tableName: "migration_state";
4505
+ };
4506
+ } & {
4507
+ _: {
4508
+ fieldName: "checksum";
4509
+ };
4510
+ };
4511
+ applied: ConvexBooleanBuilderInitial<""> & {
4512
+ _: {
4513
+ notNull: true;
4514
+ };
4515
+ } & {
4516
+ _: {
4517
+ tableName: "migration_state";
4518
+ };
4519
+ } & {
4520
+ _: {
4521
+ fieldName: "applied";
4522
+ };
4523
+ };
4524
+ runId: ConvexTextBuilderInitial<""> & {
4525
+ _: {
4526
+ tableName: "migration_state";
4527
+ };
4528
+ } & {
4529
+ _: {
4530
+ fieldName: "runId";
4531
+ };
4532
+ };
4533
+ writeMode: ConvexTextBuilderInitial<""> & {
4534
+ _: {
4535
+ notNull: true;
4536
+ };
4537
+ } & {
4538
+ _: {
4539
+ tableName: "migration_state";
4540
+ };
4541
+ } & {
4542
+ _: {
4543
+ fieldName: "writeMode";
4544
+ };
4545
+ };
4546
+ };
4547
+ }, {
4548
+ by_creation_time: ["_creationTime"];
4549
+ by_migration_id: ["migrationId", "_creationTime"];
4550
+ by_status: ["status", "_creationTime"];
4551
+ }, {}, {}, {}>;
4552
+ readonly migration_run: ConvexTableWithColumns<{
4553
+ name: "migration_run";
4554
+ columns: {
4555
+ direction: ConvexTextBuilderInitial<""> & {
4556
+ _: {
4557
+ notNull: true;
4558
+ };
4559
+ } & {
4560
+ _: {
4561
+ tableName: "migration_run";
4562
+ };
4563
+ } & {
4564
+ _: {
4565
+ fieldName: "direction";
4566
+ };
4567
+ };
4568
+ status: ConvexTextBuilderInitial<""> & {
4569
+ _: {
4570
+ notNull: true;
4571
+ };
4572
+ } & {
4573
+ _: {
4574
+ tableName: "migration_run";
4575
+ };
4576
+ } & {
4577
+ _: {
4578
+ fieldName: "status";
4579
+ };
4580
+ };
4581
+ startedAt: ConvexNumberBuilderInitial<""> & {
4582
+ _: {
4583
+ notNull: true;
4584
+ };
4585
+ } & {
4586
+ _: {
4587
+ tableName: "migration_run";
4588
+ };
4589
+ } & {
4590
+ _: {
4591
+ fieldName: "startedAt";
4592
+ };
4593
+ };
4594
+ updatedAt: ConvexNumberBuilderInitial<""> & {
4595
+ _: {
4596
+ notNull: true;
4597
+ };
4598
+ } & {
4599
+ _: {
4600
+ tableName: "migration_run";
4601
+ };
4602
+ } & {
4603
+ _: {
4604
+ fieldName: "updatedAt";
4605
+ };
4606
+ };
4607
+ completedAt: ConvexNumberBuilderInitial<""> & {
4608
+ _: {
4609
+ tableName: "migration_run";
4610
+ };
4611
+ } & {
4612
+ _: {
4613
+ fieldName: "completedAt";
4614
+ };
4615
+ };
4616
+ lastError: ConvexTextBuilderInitial<""> & {
4617
+ _: {
4618
+ tableName: "migration_run";
4619
+ };
4620
+ } & {
4621
+ _: {
4622
+ fieldName: "lastError";
4623
+ };
4624
+ };
4625
+ runId: ConvexTextBuilderInitial<""> & {
4626
+ _: {
4627
+ notNull: true;
4628
+ };
4629
+ } & {
4630
+ _: {
4631
+ tableName: "migration_run";
4632
+ };
4633
+ } & {
4634
+ _: {
4635
+ fieldName: "runId";
4636
+ };
4637
+ };
4638
+ dryRun: ConvexBooleanBuilderInitial<""> & {
4639
+ _: {
4640
+ notNull: true;
4641
+ };
4642
+ } & {
4643
+ _: {
4644
+ tableName: "migration_run";
4645
+ };
4646
+ } & {
4647
+ _: {
4648
+ fieldName: "dryRun";
4649
+ };
4650
+ };
4651
+ allowDrift: ConvexBooleanBuilderInitial<""> & {
4652
+ _: {
4653
+ notNull: true;
4654
+ };
4655
+ } & {
4656
+ _: {
4657
+ tableName: "migration_run";
4658
+ };
4659
+ } & {
4660
+ _: {
4661
+ fieldName: "allowDrift";
4662
+ };
4663
+ };
4664
+ migrationIds: ConvexCustomBuilderInitial<"", convex_values0.VArray<string[], convex_values0.VString<string, "required">, "required">> & {
4665
+ _: {
4666
+ notNull: true;
4667
+ };
4668
+ } & {
4669
+ _: {
4670
+ tableName: "migration_run";
4671
+ };
4672
+ } & {
4673
+ _: {
4674
+ fieldName: "migrationIds";
4675
+ };
4676
+ };
4677
+ currentIndex: ConvexNumberBuilderInitial<""> & {
4678
+ _: {
4679
+ notNull: true;
4680
+ };
4681
+ } & {
4682
+ _: {
4683
+ tableName: "migration_run";
4684
+ };
4685
+ } & {
4686
+ _: {
4687
+ fieldName: "currentIndex";
4688
+ };
4689
+ };
4690
+ cancelRequested: ConvexBooleanBuilderInitial<""> & {
4691
+ _: {
4692
+ notNull: true;
4693
+ };
4694
+ } & {
4695
+ _: {
4696
+ tableName: "migration_run";
4697
+ };
4698
+ } & {
4699
+ _: {
4700
+ fieldName: "cancelRequested";
4701
+ };
4702
+ };
4703
+ };
4704
+ }, {
4705
+ by_creation_time: ["_creationTime"];
4706
+ by_status: ["status", "_creationTime"];
4707
+ by_run_id: ["runId", "_creationTime"];
4708
+ }, {}, {}, {}>;
4709
+ }>];
4710
+ declare function defineSchema$1<TSchema extends GenericSchema, StrictTableNameTypes extends boolean = true>(schema: TSchema, options?: SchemaOptions<StrictTableNameTypes>): SchemaChain<TSchema, StrictTableNameTypes, readonly [], undefined, true, true, true>;
4711
+ declare function getSchemaRelations<TSchema extends object>(schema: TSchema): TSchema extends {
4712
+ [OrmSchemaRelations]?: infer TRelations;
4713
+ } ? TRelations : undefined;
4714
+ declare function getSchemaRelations(schema: unknown): TablesRelationalConfig | undefined;
4715
+ declare function requireSchemaRelations<TSchema extends object>(schema: TSchema): Exclude<TSchema extends {
4716
+ [OrmSchemaRelations]?: infer TRelations;
4717
+ } ? TRelations : never, undefined>;
4718
+ declare function requireSchemaRelations(schema: unknown): TablesRelationalConfig;
4719
+ declare function getSchemaTriggers<TSchema extends object>(schema: TSchema): TSchema extends {
4720
+ [OrmSchemaTriggers]?: infer TTriggers;
4721
+ } ? TTriggers : undefined;
4722
+ declare function getSchemaTriggers(schema: unknown): OrmTriggers<TablesRelationalConfig> | undefined;
4723
+ //#endregion
4724
+ //#region src/orm/where-clause-compiler.d.ts
4725
+ /**
4726
+ * Result of compiling a where clause
4727
+ * Contains index selection and filter expressions
4728
+ */
4729
+ interface WhereClauseResult {
4730
+ /** Filters that can use the index (eq/range on indexed fields) */
4731
+ indexFilters: FilterExpression$1<boolean>[];
4732
+ /** Filters applied after index scan (gt, lt, and, or, not) */
4733
+ postFilters: FilterExpression$1<boolean>[];
4734
+ /** Multi-probe filter groups for OR/inArray index union plans */
4735
+ probeFilters: FilterExpression$1<boolean>[][];
4736
+ /** Selected index for query optimization (null if no suitable index) */
4737
+ selectedIndex: IndexLike | null;
4738
+ /** Planning strategy used for index compilation */
4739
+ strategy: IndexStrategy;
4740
+ }
4741
+ type IndexStrategy = 'none' | 'singleIndex' | 'rangeIndex' | 'multiProbe';
4742
+ /**
4743
+ * Compiles FilterExpression trees into optimized Convex queries
4744
+ *
4745
+ * Algorithm:
4746
+ * 1. Extract field references from expression tree
4747
+ * 2. Score available indexes by field match quality
4748
+ * 3. Select best index (exact > prefix > partial)
4749
+ * 4. Split filters into index-compatible vs post-filters
4750
+ */
4751
+ interface IndexLike {
4752
+ indexFields: string[];
4753
+ indexName: string;
4754
+ }
4755
+ //#endregion
4756
+ export { GenericOrmCtx as $, unique as $n, endsWith as $r, ManyConfig as $t, ConvexDateMode as A, ConvexRankIndexBuilder as An, ReturningResult as Ar, MigrationManifestEntry as At, ConvexBytesBuilderInitial as B, rankIndex as Bn, OrmSchemaRelations as Br, defineMigration as Bt, ConvexNumberBuilderInitial as C, ColumnBuilderWithTableName as Ci, RlsRole as Cn, MutationReturning as Cr, MigrationStatusArgs as Ct, id as D, IsPrimaryKey as Di, ConvexAggregateIndexBuilderOn as Dn, PaginatedResult as Dr, MigrationDoc as Dt, ConvexIdBuilderInitial as E, HasDefault as Ei, ConvexAggregateIndexBuilder as En, OrderDirection as Er, MigrationDirection as Et, custom as F, ConvexVectorIndexBuilder as Fn, unsetToken as Fr, MigrationStateMap as Ft, ConvexBigIntBuilder as G, ConvexCheckConfig as Gn, ExpressionVisitor as Gr, OrmReader as Gt, ConvexBooleanBuilder as H, uniqueIndex as Hn, TableName as Hr, detectMigrationDrift as Ht, json as I, ConvexVectorIndexBuilderOn as In, Brand as Ir, MigrationStep as It, CountBackfillChunkArgs as J, ConvexUniqueConstraintBuilder as Jn, LogicalExpression as Jr, RlsMode as Jt, ConvexBigIntBuilderInitial as K, ConvexForeignKeyBuilder as Kn, FieldReference as Kr, OrmWriter as Kt, objectOf as L, ConvexVectorIndexConfig as Ln, Columns as Lr, MigrationTableName as Lt, ConvexCustomBuilder as M, ConvexSearchIndexBuilder as Mn, UpdateSet as Mr, MigrationPlan as Mt, ConvexCustomBuilderInitial as N, ConvexSearchIndexBuilderOn as Nn, VectorQueryConfig as Nr, MigrationRunStatus as Nt, ConvexDateBuilder as O, IsUnique as Oi, ConvexIndexBuilder as On, PredicateWhereIndexConfig as Or, MigrationDocContext as Ot, arrayOf as P, ConvexSearchIndexConfig as Pn, VectorSearchProvider as Pr, MigrationSet as Pt, GenericOrm as Q, foreignKey as Qn, contains as Qr, ExtractTablesWithRelations as Qt, unionOf as R, aggregateIndex as Rn, OrmSchemaExtensionTables as Rr, MigrationWriteMode as Rt, ConvexNumberBuilder as S, ColumnBuilderTypeConfig as Si, rlsPolicy as Sn, MutationResult as Sr, MigrationRunChunkArgs as St, ConvexIdBuilder as T, DrizzleEntity as Ti, rlsRole as Tn, OrderByClause as Tr, MigrationDefinition as Tt, ConvexBooleanBuilderInitial as U, vectorIndex as Un, SystemFields as Ur, DatabaseWithMutations as Ut, bytes as V, searchIndex as Vn, OrmSchemaTriggers as Vr, defineMigrationSet as Vt, boolean as W, ConvexCheckBuilder as Wn, BinaryExpression as Wr, DatabaseWithQuery as Wt, CountBackfillStatusArgs as X, ConvexUniqueConstraintConfig as Xn, and as Xr, extractRelationsConfig as Xt, CountBackfillKickoffArgs as Y, ConvexUniqueConstraintBuilderOn as Yn, UnaryExpression as Yr, EdgeMetadata as Yt, CreateOrmOptions as Z, check as Zn, between as Zr, ExtractTablesFromSchema as Zt, ConvexTimestampMode as _, startsWith as _i, deletion as _n, MutationExecuteConfig as _r, OrmTriggerContext as _t, requireSchemaRelations as a, inArray as ai, TablesRelationalConfig as an, AggregateResult as ar, OrmWriterCtx as at, ConvexTextEnumBuilderInitial as b, ColumnBuilderBaseConfig as bi, RlsPolicyConfig as bn, MutationPaginateConfig as br, MigrationCancelArgs as bt, TableConfigResult as c, isNull as ci, ConvexDeletionBuilder as cn, CountConfig as cr, ScheduledMutationBatchArgs as ct, OrmNotFoundError as d, lte as di, ConvexTableWithColumns as dn, FilterOperators as dr, scheduledDeleteFactory as dt, eq as ei, OneConfig as en, ConvexTextBuilder as er, OrmApiResult as et, ConvexVectorBuilder as f, ne as fi, DiscriminatorBuilderConfig as fn, GetColumnData as fr, SchemaExtension as ft, ConvexTimestampBuilderInitial as g, or as gi, convexTable as gn, InsertValue as gr, OrmTriggerChange as gt, ConvexTimestampBuilder as h, notInArray as hi, TableConfig as hn, InferSelectModel as hr, OrmTableTriggers as ht, getSchemaTriggers as i, ilike as ii, TableRelationalConfig as in, AggregateFieldValue as ir, OrmReaderCtx as it, date as j, ConvexRankIndexBuilderOn as jn, ReturningSelection as jr, MigrationMigrateOne as jt, ConvexDateBuilderInitial as k, NotNull as ki, ConvexIndexBuilderOn as kn, ReturningAll as kr, MigrationDriftIssue as kt, getTableColumns as l, like as li, ConvexDeletionConfig as ln, CountResult as lr, scheduledMutationBatchFactory as lt, vector as m, notBetween as mi, OrmLifecycleOperation as mn, InferModelFromColumns as mr, OrmBeforeResult as mt, defineSchema$1 as n, gt as ni, RelationsBuilderColumnBase as nn, text as nr, OrmClientWithApi as nt, asc as o, isFieldReference as oi, defineRelations as on, BuildQueryResult as or, ResolveOrmSchema as ot, ConvexVectorBuilderInitial as p, not as pi, OrmLifecycleChange as pn, InferInsertModel as pr, defineSchemaExtension as pt, bigint as q, ConvexForeignKeyConfig as qn, FilterExpression$1 as qr, RlsContext as qt, getSchemaRelations as r, gte as ri, RelationsBuilderColumnConfig as rn, AggregateConfig as rr, OrmFunctions as rt, desc as s, isNotNull as si, defineRelationsPart as sn, BuildRelationResult as sr, createOrm as st, WhereClauseResult as t, fieldRef as ti, RelationsBuilder as tn, ConvexTextBuilderInitial as tr, OrmClientBase as tt, getTableConfig as u, lt as ui, ConvexTable as un, DBQueryConfig as ur, ScheduledDeleteArgs as ut, timestamp as v, AnyColumn as vi, discriminator as vn, MutationExecuteResult as vr, OrmTriggers as vt, integer as w, ColumnDataType as wi, RlsRoleConfig as wn, MutationRunMode as wr, MigrationAppliedState as wt, textEnum as x, ColumnBuilderRuntimeConfig as xi, RlsPolicyToOption as xn, MutationPaginatedResult as xr, MigrationRunArgs as xt, ConvexTextEnumBuilder as y, ColumnBuilder as yi, RlsPolicy as yn, MutationExecutionMode as yr, defineTriggers as yt, ConvexBytesBuilder as z, index as zn, OrmSchemaExtensions as zr, buildMigrationPlan as zt };