kitcn 0.25.3 → 0.25.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { Bn as ConvexTextBuilderInitial, Xt as ConvexTableWithColumns } from "../capabilities-DtDfpdcH.js";
2
- import { C as ConvexNumberBuilderInitial, E as ConvexIdBuilderInitial, N as ConvexCustomBuilderInitial } from "../where-clause-compiler-Bke7ULoY.js";
2
+ import { C as ConvexNumberBuilderInitial, E as ConvexIdBuilderInitial, N as ConvexCustomBuilderInitial } from "../where-clause-compiler-CCMtAIdx.js";
3
3
  import * as convex_values0 from "convex/values";
4
4
  import { GenericId, Infer, Value } from "convex/values";
5
5
  import { DocumentByName, GenericDataModel, GenericDatabaseReader, GenericDatabaseWriter, TableNamesInDataModel } from "convex/server";
@@ -1,2 +1,2 @@
1
- import { S as defineAuth, _ as GenericAuthBeforeResult, b as GenericAuthTriggerHandlers, g as BetterAuthOptionsWithoutDatabase, i as getGeneratedAuthDisabledReason, n as GeneratedAuthDisabledReasonKind, r as createDisabledAuthRuntime, t as AuthRuntime, v as GenericAuthDefinition, x as GenericAuthTriggers, y as GenericAuthTriggerChange } from "../../generated-contract-disabled-SzH57bhp.js";
1
+ import { S as defineAuth, _ as GenericAuthBeforeResult, b as GenericAuthTriggerHandlers, g as BetterAuthOptionsWithoutDatabase, i as getGeneratedAuthDisabledReason, n as GeneratedAuthDisabledReasonKind, r as createDisabledAuthRuntime, t as AuthRuntime, v as GenericAuthDefinition, x as GenericAuthTriggers, y as GenericAuthTriggerChange } from "../../generated-contract-disabled-DwYwySy3.js";
2
2
  export { type AuthRuntime, BetterAuthOptionsWithoutDatabase, type GeneratedAuthDisabledReasonKind, GenericAuthBeforeResult, GenericAuthDefinition, GenericAuthTriggerChange, GenericAuthTriggerHandlers, GenericAuthTriggers, createDisabledAuthRuntime, defineAuth, getGeneratedAuthDisabledReason };
@@ -1,7 +1,7 @@
1
1
  import { a as QueryCtxWithPreferredOrmQueryTable, n as LookupByIdResultByCtx, t as DocByCtx } from "../query-context-DJONf8X5.js";
2
2
  import { t as GetAuth } from "../types-Bf3XQex5.js";
3
3
  import { t as GenericCtx } from "../context-utils-DwZ3Cam1.js";
4
- import { S as defineAuth, _ as GenericAuthBeforeResult, a as AuthFunctions, b as GenericAuthTriggerHandlers, c as createApi, d as deleteOneHandler, f as findManyHandler, g as BetterAuthOptionsWithoutDatabase, h as updateOneHandler, i as getGeneratedAuthDisabledReason, l as createHandler, m as updateManyHandler, n as GeneratedAuthDisabledReasonKind, o as Triggers, p as findOneHandler, r as createDisabledAuthRuntime, s as createClient, t as AuthRuntime, u as deleteManyHandler, v as GenericAuthDefinition, x as GenericAuthTriggers, y as GenericAuthTriggerChange } from "../generated-contract-disabled-SzH57bhp.js";
4
+ import { S as defineAuth, _ as GenericAuthBeforeResult, a as AuthFunctions, b as GenericAuthTriggerHandlers, c as createApi, d as deleteOneHandler, f as findManyHandler, g as BetterAuthOptionsWithoutDatabase, h as updateOneHandler, i as getGeneratedAuthDisabledReason, l as createHandler, m as updateManyHandler, n as GeneratedAuthDisabledReasonKind, o as Triggers, p as findOneHandler, r as createDisabledAuthRuntime, s as createClient, t as AuthRuntime, u as deleteManyHandler, v as GenericAuthDefinition, x as GenericAuthTriggers, y as GenericAuthTriggerChange } from "../generated-contract-disabled-DwYwySy3.js";
5
5
  import * as convex_values0 from "convex/values";
6
6
  import { Infer } from "convex/values";
7
7
  import { AuthConfig, DocumentByName, GenericDataModel, GenericMutationCtx, GenericQueryCtx, GenericSchema, PaginationOptions, PaginationResult, SchemaDefinition, TableNamesInDataModel } from "convex/server";
@@ -123,6 +123,7 @@ declare const adapterWhereValidator: convex_values0.VObject<{
123
123
  value: convex_values0.VUnion<string | number | boolean | string[] | number[] | null, [convex_values0.VString<string, "required">, convex_values0.VFloat64<number, "required">, convex_values0.VBoolean<boolean, "required">, convex_values0.VArray<string[], convex_values0.VString<string, "required">, "required">, convex_values0.VArray<number[], convex_values0.VFloat64<number, "required">, "required">, convex_values0.VNull<null, "required">], "required", never>;
124
124
  }, "required", "mode" | "value" | "connector" | "field" | "operator">;
125
125
  declare const adapterArgsValidator: convex_values0.VObject<{
126
+ limit?: number | undefined;
126
127
  select?: string[] | undefined;
127
128
  where?: {
128
129
  mode?: "sensitive" | "insensitive" | undefined;
@@ -131,7 +132,6 @@ declare const adapterArgsValidator: convex_values0.VObject<{
131
132
  value: string | number | boolean | string[] | number[] | null;
132
133
  field: string;
133
134
  }[] | undefined;
134
- limit?: number | undefined;
135
135
  offset?: number | undefined;
136
136
  sortBy?: {
137
137
  direction: "asc" | "desc";
@@ -169,7 +169,7 @@ declare const adapterArgsValidator: convex_values0.VObject<{
169
169
  operator: convex_values0.VUnion<"lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined, [convex_values0.VLiteral<"lt", "required">, convex_values0.VLiteral<"lte", "required">, convex_values0.VLiteral<"gt", "required">, convex_values0.VLiteral<"gte", "required">, convex_values0.VLiteral<"eq", "required">, convex_values0.VLiteral<"in", "required">, convex_values0.VLiteral<"not_in", "required">, convex_values0.VLiteral<"ne", "required">, convex_values0.VLiteral<"contains", "required">, convex_values0.VLiteral<"starts_with", "required">, convex_values0.VLiteral<"ends_with", "required">], "optional", never>;
170
170
  value: convex_values0.VUnion<string | number | boolean | string[] | number[] | null, [convex_values0.VString<string, "required">, convex_values0.VFloat64<number, "required">, convex_values0.VBoolean<boolean, "required">, convex_values0.VArray<string[], convex_values0.VString<string, "required">, "required">, convex_values0.VArray<number[], convex_values0.VFloat64<number, "required">, "required">, convex_values0.VNull<null, "required">], "required", never>;
171
171
  }, "required", "mode" | "value" | "connector" | "field" | "operator">, "optional">;
172
- }, "required", "model" | "select" | "where" | "limit" | "offset" | "sortBy" | "sortBy.direction" | "sortBy.field">;
172
+ }, "required", "limit" | "model" | "select" | "where" | "offset" | "sortBy" | "sortBy.direction" | "sortBy.field">;
173
173
  declare const hasUniqueFields: (betterAuthSchema: BetterAuthDBSchema, model: string, input: Record<string, any>) => boolean;
174
174
  declare const checkUniqueFields: <Schema extends SchemaDefinition<any, any>>(ctx: GenericQueryCtx<GenericDataModel>, schema: Schema, betterAuthSchema: BetterAuthDBSchema, table: string, input: Record<string, any>, doc?: Record<string, any>) => Promise<void>;
175
175
  declare const selectFields: <T extends TableNamesInDataModel<GenericDataModel>, D extends DocumentByName<GenericDataModel, T>>(doc: D | null, select?: string[]) => D | null;
@@ -224,6 +224,7 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
224
224
  };
225
225
  }, Promise<Record<string, unknown> | undefined>>;
226
226
  findMany: convex_server0.RegisteredQuery<"internal", {
227
+ limit?: number | undefined;
227
228
  join?: any;
228
229
  where?: {
229
230
  mode?: "sensitive" | "insensitive" | undefined;
@@ -232,7 +233,6 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
232
233
  value: string | number | boolean | string[] | number[] | null;
233
234
  field: string;
234
235
  }[] | undefined;
235
- limit?: number | undefined;
236
236
  offset?: number | undefined;
237
237
  sortBy?: {
238
238
  direction: "asc" | "desc";
@@ -1,6 +1,6 @@
1
1
  import { t as DirectAggregate } from "../../runtime-BdqTbgKh.js";
2
2
  import { a as Columns } from "../../table-CX2lnX7e.js";
3
- import { Y as normalizeTemporalComparableValue, _t as PUBLIC_CREATED_AT_FIELD, c as AGGREGATE_ERROR, f as createError, gt as INTERNAL_CREATION_TIME_FIELD, i as AGGREGATE_STATE_TABLE, l as COUNT_ERROR, n as AGGREGATE_EXTREMA_TABLE, o as getAggregateIndexDefinitions, ot as mapWithConcurrency, r as AGGREGATE_MEMBER_TABLE, s as getRankIndexDefinitions, t as AGGREGATE_BUCKET_TABLE, vt as usesSystemCreatedAtAlias } from "../../schema-D8sVYuYO.js";
3
+ import { Y as normalizeTemporalComparableValue, bt as PUBLIC_CREATED_AT_FIELD, c as AGGREGATE_ERROR, f as createError, i as AGGREGATE_STATE_TABLE, l as COUNT_ERROR, lt as mapWithConcurrency, n as AGGREGATE_EXTREMA_TABLE, o as getAggregateIndexDefinitions, r as AGGREGATE_MEMBER_TABLE, s as getRankIndexDefinitions, t as AGGREGATE_BUCKET_TABLE, xt as usesSystemCreatedAtAlias, yt as INTERNAL_CREATION_TIME_FIELD } from "../../schema-e0wbZ_Ax.js";
4
4
 
5
5
  //#region src/orm/aggregate-index/runtime.ts
6
6
  const UNDEFINED_SENTINEL = "__kitcnUndefined";
@@ -1,5 +1,5 @@
1
1
  import { $n as BinaryExpression, $t as OrmLifecycleOperation, A as DatabaseWithMutations, An as ConvexCheckConfig, Ar as AnyColumn, At as VectorQueryConfig, B as RlsContext, Bn as ConvexTextBuilderInitial, Br as IsUnique, Bt as RelationsBuilderColumnConfig, C as MigrationTableName, Cn as aggregateIndex, Cr as notBetween, Ct as OrderDirection, D as defineMigrationSet, Dn as uniqueIndex, Dt as ReturningResult, E as defineMigration, En as searchIndex, Er as startsWith, Et as ReturningAll, Fn as ConvexUniqueConstraintConfig, Fr as ColumnBuilderWithTableName, Ft as ExtractTablesWithRelations, Gt as defineRelations, H as EdgeMetadata, In as check, Ir as ColumnDataType, It as ManyConfig, Jt as ConvexDeletionConfig, Kt as defineRelationsPart, Ln as foreignKey, Lr as DrizzleEntity, Lt as OneConfig, M as OrmReader$1, Mn as ConvexForeignKeyConfig, Mr as ColumnBuilderBaseConfig, Mt as unsetToken, N as OrmWriter$1, Nn as ConvexUniqueConstraintBuilder, Nr as ColumnBuilderRuntimeConfig, O as detectMigrationDrift, On as vectorIndex, Or as SystemFields, Ot as ReturningSelection, Pn as ConvexUniqueConstraintBuilderOn, Pr as ColumnBuilderTypeConfig, Pt as ExtractTablesFromSchema, Qn as TableName, Qt as OrmLifecycleChange, Rn as unique, Rr as HasDefault, Rt as RelationsBuilder, S as MigrationStep, Sn as ConvexVectorIndexConfig, Sr as not, St as OrderByClause, T as buildMigrationPlan, Tn as rankIndex, Tr as or, Tt as PredicateWhereIndexConfig, U as extractRelationsConfig, Un as Brand, Ut as TableRelationalConfig, V as RlsMode, Vn as text, Vr as NotNull, Wn as Columns, Wt as TablesRelationalConfig, Xn as OrmSchemaRelations, Xt as ConvexTableWithColumns, Yn as OrmSchemaExtensions, Yt as ConvexTable, Zn as OrmSchemaTriggers, Zt as DiscriminatorBuilderConfig, _ as MigrationMigrateOne, _n as ConvexSearchIndexBuilder, _r as isNull, _t as MutationPaginateConfig, an as RlsPolicyConfig, ar as and, at as CountConfig, b as MigrationSet, bn as ConvexVectorIndexBuilder, br as lte, bt as MutationReturning, cn as RlsRole, cr as endsWith, ct as FilterOperators, d as MigrationDefinition, dn as ConvexAggregateIndexBuilder, dr as gt, dt as InferModelFromColumns, en as TableConfig, er as ExpressionVisitor, et as AggregateConfig, f as MigrationDirection, fn as ConvexAggregateIndexBuilderOn, fr as gte, ft as InferSelectModel, g as MigrationManifestEntry, gn as ConvexRankIndexBuilderOn, gr as isNotNull, gt as MutationExecutionMode, h as MigrationDriftIssue, hn as ConvexRankIndexBuilder, hr as isFieldReference, ht as MutationExecuteResult, i as OrmMigrationCapability, in as RlsPolicy, ir as UnaryExpression, it as BuildRelationResult, j as DatabaseWithQuery, jn as ConvexForeignKeyBuilder, jr as ColumnBuilder, jt as VectorSearchProvider, kn as ConvexCheckBuilder, kt as UpdateSet, ln as RlsRoleConfig, lr as eq, lt as GetColumnData, m as MigrationDocContext, mn as ConvexIndexBuilderOn, mr as inArray, mt as MutationExecuteConfig, n as OrmCapabilities, nn as deletion, nr as FilterExpression, nt as AggregateResult, on as RlsPolicyToOption, or as between, ot as CountResult, p as MigrationDoc, pn as ConvexIndexBuilder, pr as ilike, pt as InsertValue, qn as OrmSchemaExtensionTables, qt as ConvexDeletionBuilder, r as OrmCapability, rn as discriminator, rr as LogicalExpression, rt as BuildQueryResult, sn as rlsPolicy, sr as contains, st as DBQueryConfig, t as OrmAggregateCapability, tn as convexTable, tr as FieldReference, tt as AggregateFieldValue, u as MigrationAppliedState, un as rlsRole, ur as fieldRef, ut as InferInsertModel, v as MigrationPlan, vn as ConvexSearchIndexBuilderOn, vr as like, vt as MutationPaginatedResult, w as MigrationWriteMode, wn as index, wr as notInArray, wt as PaginatedResult, x as MigrationStateMap, xn as ConvexVectorIndexBuilderOn, xr as ne, xt as MutationRunMode, y as MigrationRunStatus, yn as ConvexSearchIndexConfig, yr as lt, yt as MutationResult, zn as ConvexTextBuilder, zr as IsPrimaryKey, zt as RelationsBuilderColumnBase } from "../capabilities-DtDfpdcH.js";
2
- import { $ as OrmClientWithApi$1, A as ConvexDateMode, B as ConvexBytesBuilderInitial, C as ConvexNumberBuilderInitial, D as id, E as ConvexIdBuilderInitial, F as custom, G as ConvexBigIntBuilder, H as ConvexBooleanBuilder, I as json, J as CreateOrmOptions, K as ConvexBigIntBuilderInitial, L as objectOf, M as ConvexCustomBuilder, N as ConvexCustomBuilderInitial, O as ConvexDateBuilder, P as arrayOf, Q as OrmClientBase$1, R as unionOf, S as ConvexNumberBuilder, St as defineTriggers, T as ConvexIdBuilder, U as ConvexBooleanBuilderInitial, V as bytes, W as boolean, X as GenericOrmCtx$1, Y as GenericOrm$1, Z as OrmApiResult, _ as ConvexTimestampMode, _t as OrmBeforeResult, a as requireSchemaRelations, at as ScheduledMutationBatchArgs, b as ConvexTextEnumBuilderInitial, bt as OrmTriggerContext, c as TableConfigResult, ct as scheduledDeleteFactory, d as OrmNotFoundError, et as OrmFunctions, f as ConvexVectorBuilder, g as ConvexTimestampBuilderInitial, gt as defineSchemaExtension, h as ConvexTimestampBuilder, ht as SchemaExtension, i as getSchemaTriggers, it as createOrm, j as date, k as ConvexDateBuilderInitial, l as getTableColumns, m as vector, n as defineSchema, nt as OrmWriterCtx, o as asc, ot as scheduledMutationBatchFactory, p as ConvexVectorBuilderInitial, q as bigint, r as getSchemaRelations, rt as ResolveOrmSchema, s as desc, st as ScheduledDeleteArgs, t as WhereClauseResult, tt as OrmReaderCtx, u as getTableConfig, v as timestamp, vt as OrmTableTriggers, w as integer, x as textEnum, xt as OrmTriggers, y as ConvexTextEnumBuilder, yt as OrmTriggerChange, z as ConvexBytesBuilder } from "../where-clause-compiler-Bke7ULoY.js";
2
+ import { $ as OrmClientWithApi$1, A as ConvexDateMode, B as ConvexBytesBuilderInitial, C as ConvexNumberBuilderInitial, D as id, E as ConvexIdBuilderInitial, F as custom, G as ConvexBigIntBuilder, H as ConvexBooleanBuilder, I as json, J as CreateOrmOptions, K as ConvexBigIntBuilderInitial, L as objectOf, M as ConvexCustomBuilder, N as ConvexCustomBuilderInitial, O as ConvexDateBuilder, P as arrayOf, Q as OrmClientBase$1, R as unionOf, S as ConvexNumberBuilder, St as defineTriggers, T as ConvexIdBuilder, U as ConvexBooleanBuilderInitial, V as bytes, W as boolean, X as GenericOrmCtx$1, Y as GenericOrm$1, Z as OrmApiResult, _ as ConvexTimestampMode, _t as OrmBeforeResult, a as requireSchemaRelations, at as ScheduledMutationBatchArgs, b as ConvexTextEnumBuilderInitial, bt as OrmTriggerContext, c as TableConfigResult, ct as scheduledDeleteFactory, d as OrmNotFoundError, et as OrmFunctions, f as ConvexVectorBuilder, g as ConvexTimestampBuilderInitial, gt as defineSchemaExtension, h as ConvexTimestampBuilder, ht as SchemaExtension, i as getSchemaTriggers, it as createOrm, j as date, k as ConvexDateBuilderInitial, l as getTableColumns, m as vector, n as defineSchema, nt as OrmWriterCtx, o as asc, ot as scheduledMutationBatchFactory, p as ConvexVectorBuilderInitial, q as bigint, r as getSchemaRelations, rt as ResolveOrmSchema, s as desc, st as ScheduledDeleteArgs, t as WhereClauseResult, tt as OrmReaderCtx, u as getTableConfig, v as timestamp, vt as OrmTableTriggers, w as integer, x as textEnum, xt as OrmTriggers, y as ConvexTextEnumBuilder, yt as OrmTriggerChange, z as ConvexBytesBuilder } from "../where-clause-compiler-CCMtAIdx.js";
3
3
  import { i as pretendRequired, n as deprecated, r as pretend } from "../validators-wOIjhkfN.js";
4
4
  import { a as QueryCtxWithPreferredOrmQueryTable, i as QueryCtxWithOrmQueryTable, n as LookupByIdResultByCtx, o as getByIdWithOrmQueryFallback, r as QueryCtxWithOptionalOrmQueryTable, t as DocByCtx } from "../query-context-DJONf8X5.js";
5
5
  import { DefineSchemaOptions, GenericDatabaseReader, GenericDatabaseWriter, GenericSchema, SchemaDefinition } from "convex/server";
package/dist/orm/index.js CHANGED
@@ -4,7 +4,7 @@ import { a as pretendRequired, i as pretend, n as deprecated } from "../validato
4
4
  import { t as id } from "../id-CuSfWa5q.js";
5
5
  import { A as or, C as matchLikePattern, D as notIlike, E as notBetween, O as notInArray, S as lte, T as not, _ as isFieldReference, a as between, b as like, c as endsWith, d as filterValueInList, f as filterValuesEqual, g as inArray, h as ilike, i as arrayOverlaps, j as startsWith, k as notLike, l as eq, m as gte, n as arrayContained, o as column, p as gt, r as arrayContains, s as contains, t as and, u as fieldRef, v as isNotNull, w as ne, x as lt, y as isNull } from "../filter-expression-Dydt8wS0.js";
6
6
  import { a as indexKeyWithinBounds, c as streamIndexRange, i as getIndexFields, l as isUnsetToken, n as EmptyStream, o as mergedStream, r as QueryStream, s as stream, t as getByIdWithOrmQueryFallback, u as unsetToken } from "../query-context-DOm5Xm3H.js";
7
- import { $ as serializeFilterExpression, A as ensureNonNullValues, B as getMutationExecutionMode, C as deserializeFilterExpression, D as enforcePolymorphicWrite, E as enforceForeignKeys, F as getChecks, G as getUniqueIndexes, H as getTableColumns$2, I as getColumnName$1, J as normalizeDateFieldsForWrite, K as hardDeleteRow, L as getForeignKeys, M as evaluateCheckConstraintTriState, N as evaluateFilter, O as enforceUniqueIndexes, P as extractPrimaryIdLookup, Q as selectReturningRowWithHydration, R as getMutationAsyncDelayMs, S as decodeUndefinedDeep, T as enforceCheckConstraints, U as getTableDeleteConfig, V as getOrmContext, W as getTableName, X as patchReferencingRows, Y as normalizeTemporalComparableValue, Z as resolveOrmRuntimeDefaults, _ as applyIncomingForeignKeyActionsOnUpdate, _t as PUBLIC_CREATED_AT_FIELD, a as aggregateExtension, at as markLifecycleHookedTables, b as collectMutationRowsBounded, c as AGGREGATE_ERROR, ct as findRelationIndex, d as createCountError, dt as getAggregateIndexes, et as softDeleteRow, ft as getIndexes, g as applyIncomingForeignKeyActionsOnDelete, gt as INTERNAL_CREATION_TIME_FIELD, h as applyDefaults, ht as CREATED_AT_MIGRATION_MESSAGE, it as hasLifecycleHooks, j as ensureNullableColumns, k as ensureDefaultColumns, l as COUNT_ERROR, lt as findSearchIndexByName, m as ensureCountAllowedForRls, mt as resolveIndexOrderPushdown, nt as takeRowsWithinByteBudget, o as getAggregateIndexDefinitions, ot as mapWithConcurrency, p as ensureAggregateAllowedForRls, pt as getRankIndexes, q as hydrateDateFieldsForRead, rt as toConvexFilter, s as getRankIndexDefinitions, st as findIndexForColumns, tt as splitReturningSelection, u as createAggregateError, ut as findVectorIndexByName, v as buildForeignKeyGraph, vt as usesSystemCreatedAtAlias, w as encodeUndefinedDeep, x as collectPrimaryIdLookupRows, y as canUsePrimaryIdLookupCursor, z as getMutationCollectionLimits } from "../schema-D8sVYuYO.js";
7
+ import { $ as serializeFilterExpression, A as ensureNonNullValues, B as getMutationExecutionMode, C as deserializeFilterExpression, D as enforcePolymorphicWrite, E as enforceForeignKeys, F as getChecks, G as getUniqueIndexes, H as getTableColumns$2, I as getColumnName$1, J as normalizeDateFieldsForWrite, K as hardDeleteRow, L as getForeignKeys, M as evaluateCheckConstraintTriState, N as evaluateFilter, O as enforceUniqueIndexes, P as extractPrimaryIdLookup, Q as selectReturningRowWithHydration, R as getMutationAsyncDelayMs, S as decodeUndefinedDeep, T as enforceCheckConstraints, U as getTableDeleteConfig, V as getOrmContext, W as getTableName, X as patchReferencingRows, Y as normalizeTemporalComparableValue, Z as resolveOrmRuntimeDefaults, _ as applyIncomingForeignKeyActionsOnUpdate, _t as resolveIndexOrderPushdown, a as aggregateExtension, at as markLifecycleHookedTables, b as collectMutationRowsBounded, bt as PUBLIC_CREATED_AT_FIELD, c as AGGREGATE_ERROR, ct as isConvexEnforceableFilter, d as createCountError, dt as findRelationIndex, et as softDeleteRow, ft as findSearchIndexByName, g as applyIncomingForeignKeyActionsOnDelete, gt as getRankIndexes, h as applyDefaults, ht as getIndexes, it as hasLifecycleHooks, j as ensureNullableColumns, k as ensureDefaultColumns, l as COUNT_ERROR, lt as mapWithConcurrency, m as ensureCountAllowedForRls, mt as getAggregateIndexes, nt as takeRowsWithinByteBudget, o as getAggregateIndexDefinitions, ot as compileConvexFilter, p as ensureAggregateAllowedForRls, pt as findVectorIndexByName, q as hydrateDateFieldsForRead, rt as toConvexFilter, s as getRankIndexDefinitions, st as convexAnd, tt as splitReturningSelection, u as createAggregateError, ut as findIndexForColumns, v as buildForeignKeyGraph, vt as CREATED_AT_MIGRATION_MESSAGE, w as encodeUndefinedDeep, x as collectPrimaryIdLookupRows, xt as usesSystemCreatedAtAlias, y as canUsePrimaryIdLookupCursor, yt as INTERNAL_CREATION_TIME_FIELD, z as getMutationCollectionLimits } from "../schema-e0wbZ_Ax.js";
8
8
  import { t as defineSchemaExtension } from "../extensions-Blzsyekm.js";
9
9
  import { compareValues, v } from "convex/values";
10
10
  import { defineSchema as defineSchema$1, internalActionGeneric, internalMutationGeneric } from "convex/server";
@@ -1270,24 +1270,6 @@ var WhereClauseCompiler = class {
1270
1270
 
1271
1271
  //#endregion
1272
1272
  //#region src/orm/query.ts
1273
- /**
1274
- * Operators that Convex's `.filter()` cannot express, so `_toConvexExpression`
1275
- * compiles them to a `() => true` placeholder and `_evaluatePostFetchFilter`
1276
- * applies the real predicate in JavaScript after the rows are read.
1277
- * Keep in sync with the string/array cases in `_toConvexExpression`.
1278
- */
1279
- const POST_FETCH_ONLY_OPERATORS = new Set([
1280
- "like",
1281
- "ilike",
1282
- "notLike",
1283
- "notIlike",
1284
- "startsWith",
1285
- "endsWith",
1286
- "contains",
1287
- "arrayContains",
1288
- "arrayContained",
1289
- "arrayOverlaps"
1290
- ]);
1291
1273
  const DEFAULT_RELATION_FAN_OUT_MAX_KEYS = 1e3;
1292
1274
  /**
1293
1275
  * How many child rows the bounded relation stream filters at a time. Batching
@@ -1743,14 +1725,7 @@ var GelRelationalQuery = class GelRelationalQuery extends QueryPromise {
1743
1725
  * expression before relying on it.
1744
1726
  */
1745
1727
  _isConvexEnforceableFilter(filter) {
1746
- if (filter.type === "binary") return !POST_FETCH_ONLY_OPERATORS.has(filter.operator);
1747
- if (filter.type === "unary") {
1748
- const [operand] = filter.operands;
1749
- if (isFieldReference(operand)) return true;
1750
- return this._isConvexEnforceableFilter(operand);
1751
- }
1752
- if (filter.type === "logical") return filter.operands.every((operand) => this._isConvexEnforceableFilter(operand));
1753
- return true;
1728
+ return isConvexEnforceableFilter(filter);
1754
1729
  }
1755
1730
  /**
1756
1731
  * Evaluate a filter expression against a fetched row
@@ -4098,14 +4073,7 @@ var GelRelationalQuery = class GelRelationalQuery extends QueryPromise {
4098
4073
  return indexQuery;
4099
4074
  });
4100
4075
  if (probeBound !== void 0 && probeOrderDirection) probeQuery = probeQuery.order(probeOrderDirection);
4101
- if (convexProbeFilters.length > 0) probeQuery = probeQuery.filter((q) => {
4102
- let result = null;
4103
- for (const filter of convexProbeFilters) {
4104
- const expr = this._toConvexExpression(filter)(q);
4105
- result = result ? q.and(result, expr) : expr;
4106
- }
4107
- return result ?? q;
4108
- });
4076
+ if (convexProbeFilters.length > 0) probeQuery = probeQuery.filter((q) => convexAnd(q, convexProbeFilters.map((filter) => this._toConvexExpression(filter)(q))));
4109
4077
  return probeBound === void 0 ? await probeQuery.collect() : await probeQuery.take(probeBound);
4110
4078
  }));
4111
4079
  let rows = Array.from(new Map(probeRows.flat().map((row) => [String(row._id), row])).values());
@@ -4220,14 +4188,7 @@ var GelRelationalQuery = class GelRelationalQuery extends QueryPromise {
4220
4188
  splitCursor: paginationResult.splitCursor
4221
4189
  };
4222
4190
  }
4223
- if (convexPostFilters.length > 0) query = query.filter((q) => {
4224
- let result = null;
4225
- for (const filter of convexPostFilters) {
4226
- const expr = this._toConvexExpression(filter)(q);
4227
- result = result ? q.and(result, expr) : expr;
4228
- }
4229
- return result ?? q;
4230
- });
4191
+ if (convexPostFilters.length > 0) query = query.filter((q) => convexAnd(q, convexPostFilters.map((filter) => this._toConvexExpression(filter)(q))));
4231
4192
  if (queryConfig.order && primaryOrder) {
4232
4193
  if (needsPostFetchSortForPrimary) {
4233
4194
  if (strict) throw new Error(`Pagination: Field '${primaryOrder.field}' has no index. Add an index or disable strict.`);
@@ -4252,14 +4213,7 @@ var GelRelationalQuery = class GelRelationalQuery extends QueryPromise {
4252
4213
  const convexPostFilters = queryConfig.postFilters.filter((filter) => this._isConvexEnforceableFilter(filter));
4253
4214
  const hasResidualPostFilter = convexPostFilters.length !== queryConfig.postFilters.length;
4254
4215
  const hasPostFetchMembership = this._hasSearchDisallowedRelationFilter(whereFilter, this.tableConfig) || this.rls?.mode !== "skip" && isRlsEnabled(this.tableConfig.table);
4255
- if (convexPostFilters.length > 0) query = query.filter((q) => {
4256
- let result = null;
4257
- for (const filter of convexPostFilters) {
4258
- const expr = this._toConvexExpression(filter)(q);
4259
- result = result ? q.and(result, expr) : expr;
4260
- }
4261
- return result ?? q;
4262
- });
4216
+ if (convexPostFilters.length > 0) query = query.filter((q) => convexAnd(q, convexPostFilters.map((filter) => this._toConvexExpression(filter)(q))));
4263
4217
  const offset = config.offset ?? 0;
4264
4218
  if (typeof offset !== "number") throw new Error("Only numeric offset is supported in kitcn ORM.");
4265
4219
  const limit = this._resolveNonPaginatedLimit(config);
@@ -4375,9 +4329,7 @@ var GelRelationalQuery = class GelRelationalQuery extends QueryPromise {
4375
4329
  return builder;
4376
4330
  }
4377
4331
  _buildFilterPredicate(q, fields, values) {
4378
- let expression = q.eq(q.field(fields[0]), values[0]);
4379
- for (let i = 1; i < fields.length; i += 1) expression = q.and(expression, q.eq(q.field(fields[i]), values[i]));
4380
- return expression;
4332
+ return convexAnd(q, fields.map((field, index) => q.eq(q.field(field), values[index])));
4381
4333
  }
4382
4334
  _queryByFields(query, fields, values, indexName) {
4383
4335
  if (indexName) return query.withIndex(indexName, (q) => this._buildIndexPredicate(q, fields, values));
@@ -4421,79 +4373,10 @@ var GelRelationalQuery = class GelRelationalQuery extends QueryPromise {
4421
4373
  * Uses visitor pattern to traverse expression tree
4422
4374
  */
4423
4375
  _toConvexExpression(expression) {
4424
- const visitor = {
4425
- visitBinary: (expr) => {
4426
- const [field, value] = expr.operands;
4427
- if (!isFieldReference(field)) throw new Error("Binary expression must have FieldReference as first operand");
4428
- const fieldName = field.fieldName;
4429
- const normalizedValue = this._normalizeComparableValue(fieldName, value);
4430
- switch (expr.operator) {
4431
- case "eq": return (q) => q.eq(q.field(fieldName), normalizedValue);
4432
- case "ne": return (q) => q.neq(q.field(fieldName), normalizedValue);
4433
- case "gt": return (q) => q.gt(q.field(fieldName), normalizedValue);
4434
- case "gte": return (q) => q.gte(q.field(fieldName), normalizedValue);
4435
- case "lt": return (q) => q.lt(q.field(fieldName), normalizedValue);
4436
- case "lte": return (q) => q.lte(q.field(fieldName), normalizedValue);
4437
- case "inArray": {
4438
- const values = normalizedValue;
4439
- return (q) => {
4440
- if (values.length === 0) return q.eq(q.field("_id"), "__better_convex_never__");
4441
- return values.map((v) => q.eq(q.field(fieldName), v)).reduce((acc, cond) => q.or(acc, cond));
4442
- };
4443
- }
4444
- case "notInArray": {
4445
- const values = normalizedValue;
4446
- return (q) => {
4447
- return values.map((v) => q.neq(q.field(fieldName), v)).reduce((acc, cond) => q.and(acc, cond));
4448
- };
4449
- }
4450
- case "like":
4451
- case "ilike":
4452
- case "notLike":
4453
- case "notIlike":
4454
- case "startsWith":
4455
- case "endsWith":
4456
- case "contains":
4457
- case "arrayContains":
4458
- case "arrayContained":
4459
- case "arrayOverlaps": return () => true;
4460
- default: throw new Error(`Unsupported binary operator: ${expr.operator}`);
4461
- }
4462
- },
4463
- visitLogical: (expr) => {
4464
- const operandFns = expr.operands.map((op) => op.accept(visitor));
4465
- if (expr.operator === "and") return (q) => {
4466
- let result = operandFns[0](q);
4467
- for (let i = 1; i < operandFns.length; i++) result = q.and(result, operandFns[i](q));
4468
- return result;
4469
- };
4470
- if (expr.operator === "or") return (q) => {
4471
- let result = operandFns[0](q);
4472
- for (let i = 1; i < operandFns.length; i++) result = q.or(result, operandFns[i](q));
4473
- return result;
4474
- };
4475
- throw new Error(`Unsupported logical operator: ${expr.operator}`);
4476
- },
4477
- visitUnary: (expr) => {
4478
- const operand = expr.operands[0];
4479
- if (expr.operator === "not") {
4480
- const operandFn = operand.accept(visitor);
4481
- return (q) => q.not(operandFn(q));
4482
- }
4483
- if (expr.operator === "isNull") {
4484
- if (!isFieldReference(operand)) throw new Error("isNull must operate on a field reference");
4485
- const fieldName = operand.fieldName;
4486
- return (q) => q.or(q.eq(q.field(fieldName), null), q.eq(q.field(fieldName), void 0));
4487
- }
4488
- if (expr.operator === "isNotNull") {
4489
- if (!isFieldReference(operand)) throw new Error("isNotNull must operate on a field reference");
4490
- const fieldName = operand.fieldName;
4491
- return (q) => q.and(q.neq(q.field(fieldName), null), q.neq(q.field(fieldName), void 0));
4492
- }
4493
- throw new Error(`Unsupported unary operator: ${expr.operator}`);
4494
- }
4495
- };
4496
- return expression.accept(visitor);
4376
+ return compileConvexFilter(expression, {
4377
+ normalizeValue: (fieldName, value) => this._normalizeComparableValue(fieldName, value),
4378
+ nullMatchesUndefined: true
4379
+ });
4497
4380
  }
4498
4381
  /**
4499
4382
  * Get edge metadata for a target table
@@ -5755,14 +5638,7 @@ var ConvexInsertBuilder = class extends QueryPromise {
5755
5638
  else {
5756
5639
  if (!allowFullScan) throw new Error("onConflict requires allowFullScan: true when no index is available.");
5757
5640
  if (strict) console.warn("onConflict running without index (allowFullScan: true).");
5758
- query = query.filter((q) => {
5759
- let expr = q.eq(q.field(filterValuePairs[0][0]), filterValuePairs[0][1]);
5760
- for (let i = 1; i < filterValuePairs.length; i++) {
5761
- const [field, fieldValue] = filterValuePairs[i];
5762
- expr = q.and(expr, q.eq(q.field(field), fieldValue));
5763
- }
5764
- return expr;
5765
- });
5641
+ query = query.filter((q) => convexAnd(q, filterValuePairs.map(([field, fieldValue]) => q.eq(q.field(field), fieldValue))));
5766
5642
  }
5767
5643
  const row = await query.first();
5768
5644
  return row ? row : null;
@@ -1,3 +1,3 @@
1
1
  import { C as MigrationTableName, D as defineMigrationSet, E as defineMigration, O as detectMigrationDrift, S as MigrationStep, T as buildMigrationPlan, _ as MigrationMigrateOne, a as MigrationCancelArgs, b as MigrationSet, c as MigrationStatusArgs, d as MigrationDefinition, f as MigrationDirection, g as MigrationManifestEntry, h as MigrationDriftIssue, l as createMigrationHandlers, m as MigrationDocContext, o as MigrationRunArgs, p as MigrationDoc, s as MigrationRunChunkArgs, u as MigrationAppliedState, v as MigrationPlan, w as MigrationWriteMode, x as MigrationStateMap, y as MigrationRunStatus } from "../../capabilities-DtDfpdcH.js";
2
- import { Ct as migrationCapability, dt as MIGRATION_STORAGE_TABLE_NAMES, ft as injectMigrationStorageTables, lt as MIGRATION_RUN_TABLE, mt as migrationStorageTables, pt as migrationExtension, ut as MIGRATION_STATE_TABLE } from "../../where-clause-compiler-Bke7ULoY.js";
2
+ import { Ct as migrationCapability, dt as MIGRATION_STORAGE_TABLE_NAMES, ft as injectMigrationStorageTables, lt as MIGRATION_RUN_TABLE, mt as migrationStorageTables, pt as migrationExtension, ut as MIGRATION_STATE_TABLE } from "../../where-clause-compiler-CCMtAIdx.js";
3
3
  export { MIGRATION_RUN_TABLE, MIGRATION_STATE_TABLE, MIGRATION_STORAGE_TABLE_NAMES, type MigrationAppliedState, type MigrationCancelArgs, type MigrationDefinition, type MigrationDirection, type MigrationDoc, type MigrationDocContext, type MigrationDriftIssue, type MigrationManifestEntry, type MigrationMigrateOne, type MigrationPlan, type MigrationRunArgs, type MigrationRunChunkArgs, type MigrationRunStatus, type MigrationSet, type MigrationStateMap, type MigrationStatusArgs, type MigrationStep, type MigrationTableName, type MigrationWriteMode, buildMigrationPlan, createMigrationHandlers, defineMigration, defineMigrationSet, detectMigrationDrift, injectMigrationStorageTables, migrationCapability, migrationExtension, migrationStorageTables };
@@ -125,6 +125,138 @@ async function mapWithConcurrency(items, limit, worker) {
125
125
  return results;
126
126
  }
127
127
 
128
+ //#endregion
129
+ //#region src/orm/convex-filter-compiler.ts
130
+ /**
131
+ * Operators Convex's `.filter()` cannot express, so they compile to a
132
+ * `() => true` placeholder and the real predicate runs in JavaScript after the
133
+ * rows are read. Callers that push a compiled expression into Convex must
134
+ * first check `isConvexEnforceableFilter`: a `true` placeholder makes a
135
+ * downstream `take()` spend its budget on unfiltered rows, and a surrounding
136
+ * `NOT` turns it into `q.not(true)`, which matches nothing.
137
+ */
138
+ const POST_FETCH_ONLY_OPERATORS = new Set([
139
+ "like",
140
+ "ilike",
141
+ "notLike",
142
+ "notIlike",
143
+ "startsWith",
144
+ "endsWith",
145
+ "contains",
146
+ "arrayContains",
147
+ "arrayContained",
148
+ "arrayOverlaps"
149
+ ]);
150
+ /**
151
+ * Compared against `_id`, which is a Convex id and can never equal a plain
152
+ * string, so `eq` against it is unsatisfiable. Convex's expression grammar has
153
+ * no literal boolean, so this is how `in []` says "match nothing".
154
+ */
155
+ const NEVER_MATCH_SENTINEL = "__better_convex_never__";
156
+ /**
157
+ * Convex's `q.or` / `q.and` are variadic — `or(...exprs)` serializes to a flat
158
+ * `{ $or: [...] }` (see `convex/src/server/impl/filter_builder_impl.ts`).
159
+ * Folding them pairwise instead nests one `$or` per operand, so the serialized
160
+ * filter's JSON depth grows as `2N + 1` and the backend rejects the whole query
161
+ * with `Received invalid json: recursion limit exceeded` once the list passes a
162
+ * few dozen entries. Always combine in one variadic call.
163
+ */
164
+ function convexOr(q, expressions) {
165
+ return expressions.length === 1 ? expressions[0] : q.or(...expressions);
166
+ }
167
+ /** Flat `$and` counterpart of {@link convexOr}. */
168
+ function convexAnd(q, expressions) {
169
+ return expressions.length === 1 ? expressions[0] : q.and(...expressions);
170
+ }
171
+ /**
172
+ * Whether Convex can carry the whole expression in `.filter()`, or some part of
173
+ * it compiles to a `() => true` placeholder that only JavaScript can enforce.
174
+ */
175
+ function isConvexEnforceableFilter(filter) {
176
+ if (filter.type === "binary") return !POST_FETCH_ONLY_OPERATORS.has(filter.operator);
177
+ if (filter.type === "unary") {
178
+ const [operand] = filter.operands;
179
+ if (isFieldReference(operand)) return true;
180
+ return isConvexEnforceableFilter(operand);
181
+ }
182
+ if (filter.type === "logical") return filter.operands.every((operand) => isConvexEnforceableFilter(operand));
183
+ return true;
184
+ }
185
+ /**
186
+ * Compile a filter expression to a Convex `.filter()` callback.
187
+ *
188
+ * @param expression - Filter expression tree
189
+ * @param options - Per-lane semantics; see {@link ConvexFilterCompilerOptions}
190
+ */
191
+ function compileConvexFilter(expression, options = {}) {
192
+ const { normalizeValue, nullMatchesUndefined = false } = options;
193
+ const visitor = {
194
+ visitBinary: (expr) => {
195
+ const [field, value] = expr.operands;
196
+ if (!isFieldReference(field)) throw new Error("Binary expression must have FieldReference as first operand");
197
+ const fieldName = field.fieldName;
198
+ const normalizedValue = normalizeValue ? normalizeValue(fieldName, value) : value;
199
+ switch (expr.operator) {
200
+ case "eq": return (q) => q.eq(q.field(fieldName), normalizedValue);
201
+ case "ne": return (q) => q.neq(q.field(fieldName), normalizedValue);
202
+ case "gt": return (q) => q.gt(q.field(fieldName), normalizedValue);
203
+ case "gte": return (q) => q.gte(q.field(fieldName), normalizedValue);
204
+ case "lt": return (q) => q.lt(q.field(fieldName), normalizedValue);
205
+ case "lte": return (q) => q.lte(q.field(fieldName), normalizedValue);
206
+ case "inArray": {
207
+ const values = normalizedValue;
208
+ return (q) => {
209
+ if (values.length === 0) return q.eq(q.field("_id"), NEVER_MATCH_SENTINEL);
210
+ return convexOr(q, values.map((v) => q.eq(q.field(fieldName), v)));
211
+ };
212
+ }
213
+ case "notInArray": {
214
+ const values = normalizedValue;
215
+ return (q) => convexAnd(q, values.map((v) => q.neq(q.field(fieldName), v)));
216
+ }
217
+ case "like":
218
+ case "ilike":
219
+ case "notLike":
220
+ case "notIlike":
221
+ case "startsWith":
222
+ case "endsWith":
223
+ case "contains":
224
+ case "arrayContains":
225
+ case "arrayContained":
226
+ case "arrayOverlaps": return () => true;
227
+ default: throw new Error(`Unsupported binary operator: ${expr.operator}`);
228
+ }
229
+ },
230
+ visitLogical: (expr) => {
231
+ const operandFns = expr.operands.map((op) => op.accept(visitor));
232
+ if (expr.operator === "and") return (q) => convexAnd(q, operandFns.map((fn) => fn(q)));
233
+ if (expr.operator === "or") return (q) => convexOr(q, operandFns.map((fn) => fn(q)));
234
+ throw new Error(`Unsupported logical operator: ${expr.operator}`);
235
+ },
236
+ visitUnary: (expr) => {
237
+ const operand = expr.operands[0];
238
+ if (expr.operator === "not") {
239
+ const operandFn = operand.accept(visitor);
240
+ return (q) => q.not(operandFn(q));
241
+ }
242
+ if (expr.operator === "isNull") {
243
+ if (!isFieldReference(operand)) throw new Error("isNull must operate on a field reference");
244
+ const fieldName = operand.fieldName;
245
+ if (!nullMatchesUndefined) return (q) => q.eq(q.field(fieldName), null);
246
+ return (q) => q.or(q.eq(q.field(fieldName), null), q.eq(q.field(fieldName), void 0));
247
+ }
248
+ if (expr.operator === "isNotNull") {
249
+ if (!isFieldReference(operand)) throw new Error("isNotNull must operate on a field reference");
250
+ const fieldName = operand.fieldName;
251
+ if (!nullMatchesUndefined) return (q) => q.neq(q.field(fieldName), null);
252
+ return (q) => q.and(q.neq(q.field(fieldName), null), q.neq(q.field(fieldName), void 0));
253
+ }
254
+ throw new Error(`Unsupported unary operator: ${expr.operator}`);
255
+ }
256
+ };
257
+ return expression.accept(visitor);
258
+ }
259
+
128
260
  //#endregion
129
261
  //#region src/orm/write-fanout.ts
130
262
  /**
@@ -385,7 +517,9 @@ const deserializeFilterExpression = (expression) => {
385
517
  }
386
518
  if (expression.type === "logical") {
387
519
  const logical = expression;
388
- return createLogicalExpression(logical.operator, logical.operands.map((operand) => deserializeFilterExpression(operand)).filter((operand) => !!operand));
520
+ const operands = logical.operands.map((operand) => deserializeFilterExpression(operand)).filter((operand) => !!operand);
521
+ if (operands.length === 0) throw new Error("Serialized logical expression requires at least one operand.");
522
+ return createLogicalExpression(logical.operator, operands);
389
523
  }
390
524
  const unary = expression;
391
525
  const operand = unary.operand;
@@ -754,9 +888,7 @@ function buildIndexPredicate(q, columns, values) {
754
888
  return builder;
755
889
  }
756
890
  function buildFilterPredicate(q, columns, values) {
757
- let expr = q.eq(q.field(columns[0]), values[0]);
758
- for (let i = 1; i < columns.length; i++) expr = q.and(expr, q.eq(q.field(columns[i]), values[i]));
759
- return expr;
891
+ return convexAnd(q, columns.map((column, index) => q.eq(q.field(column), values[index])));
760
892
  }
761
893
  function ensureNullableColumns(table, columns, context) {
762
894
  for (const columnName of columns) {
@@ -1197,78 +1329,7 @@ function enforceCheckConstraints(table, candidate) {
1197
1329
  for (const check of checks) if (evaluateCheckConstraintTriState(candidate, check.expression) === false) throw new Error(`Check constraint '${check.name}' violation on '${tableName}'.`);
1198
1330
  }
1199
1331
  function toConvexFilter(expression) {
1200
- const visitor = {
1201
- visitBinary: (expr) => {
1202
- const [field, value] = expr.operands;
1203
- if (!isFieldReference(field)) throw new Error("Binary expression must have FieldReference as first operand");
1204
- const fieldName = field.fieldName;
1205
- switch (expr.operator) {
1206
- case "eq": return (q) => q.eq(q.field(fieldName), value);
1207
- case "ne": return (q) => q.neq(q.field(fieldName), value);
1208
- case "gt": return (q) => q.gt(q.field(fieldName), value);
1209
- case "gte": return (q) => q.gte(q.field(fieldName), value);
1210
- case "lt": return (q) => q.lt(q.field(fieldName), value);
1211
- case "lte": return (q) => q.lte(q.field(fieldName), value);
1212
- case "inArray": {
1213
- const values = value;
1214
- return (q) => {
1215
- if (values.length === 0) return q.eq(q.field("_id"), "__better_convex_never__");
1216
- return values.map((v) => q.eq(q.field(fieldName), v)).reduce((acc, cond) => q.or(acc, cond));
1217
- };
1218
- }
1219
- case "notInArray": {
1220
- const values = value;
1221
- return (q) => {
1222
- return values.map((v) => q.neq(q.field(fieldName), v)).reduce((acc, cond) => q.and(acc, cond));
1223
- };
1224
- }
1225
- case "like":
1226
- case "ilike":
1227
- case "notLike":
1228
- case "notIlike":
1229
- case "startsWith":
1230
- case "endsWith":
1231
- case "contains":
1232
- case "arrayContains":
1233
- case "arrayContained":
1234
- case "arrayOverlaps": return () => true;
1235
- default: throw new Error(`Unsupported binary operator: ${expr.operator}`);
1236
- }
1237
- },
1238
- visitLogical: (expr) => {
1239
- const operandFns = expr.operands.map((op) => op.accept(visitor));
1240
- if (expr.operator === "and") return (q) => {
1241
- let result = operandFns[0](q);
1242
- for (let i = 1; i < operandFns.length; i++) result = q.and(result, operandFns[i](q));
1243
- return result;
1244
- };
1245
- if (expr.operator === "or") return (q) => {
1246
- let result = operandFns[0](q);
1247
- for (let i = 1; i < operandFns.length; i++) result = q.or(result, operandFns[i](q));
1248
- return result;
1249
- };
1250
- throw new Error(`Unsupported logical operator: ${expr.operator}`);
1251
- },
1252
- visitUnary: (expr) => {
1253
- const operand = expr.operands[0];
1254
- if (expr.operator === "not") {
1255
- const operandFn = operand.accept(visitor);
1256
- return (q) => q.not(operandFn(q));
1257
- }
1258
- if (expr.operator === "isNull") {
1259
- if (!isFieldReference(operand)) throw new Error("isNull must operate on a field reference");
1260
- const fieldName = operand.fieldName;
1261
- return (q) => q.eq(q.field(fieldName), null);
1262
- }
1263
- if (expr.operator === "isNotNull") {
1264
- if (!isFieldReference(operand)) throw new Error("isNotNull must operate on a field reference");
1265
- const fieldName = operand.fieldName;
1266
- return (q) => q.neq(q.field(fieldName), null);
1267
- }
1268
- throw new Error(`Unsupported unary operator: ${expr.operator}`);
1269
- }
1270
- };
1271
- return expression.accept(visitor);
1332
+ return compileConvexFilter(expression);
1272
1333
  }
1273
1334
 
1274
1335
  //#endregion
@@ -1422,4 +1483,4 @@ function aggregateExtension() {
1422
1483
  }
1423
1484
 
1424
1485
  //#endregion
1425
- export { serializeFilterExpression as $, ensureNonNullValues as A, getMutationExecutionMode as B, deserializeFilterExpression as C, enforcePolymorphicWrite as D, enforceForeignKeys as E, getChecks as F, getUniqueIndexes as G, getTableColumns as H, getColumnName as I, normalizeDateFieldsForWrite as J, hardDeleteRow as K, getForeignKeys as L, evaluateCheckConstraintTriState as M, evaluateFilter as N, enforceUniqueIndexes as O, extractPrimaryIdLookup as P, selectReturningRowWithHydration as Q, getMutationAsyncDelayMs as R, decodeUndefinedDeep as S, enforceCheckConstraints as T, getTableDeleteConfig as U, getOrmContext as V, getTableName as W, patchReferencingRows as X, normalizeTemporalComparableValue as Y, resolveOrmRuntimeDefaults as Z, applyIncomingForeignKeyActionsOnUpdate as _, PUBLIC_CREATED_AT_FIELD as _t, aggregateExtension as a, markLifecycleHookedTables as at, collectMutationRowsBounded as b, AGGREGATE_ERROR as c, findRelationIndex as ct, createCountError as d, getAggregateIndexes as dt, softDeleteRow as et, createError as f, getIndexes as ft, applyIncomingForeignKeyActionsOnDelete as g, INTERNAL_CREATION_TIME_FIELD as gt, applyDefaults as h, CREATED_AT_MIGRATION_MESSAGE as ht, AGGREGATE_STATE_TABLE as i, hasLifecycleHooks as it, ensureNullableColumns as j, ensureDefaultColumns as k, COUNT_ERROR as l, findSearchIndexByName as lt, ensureCountAllowedForRls as m, resolveIndexOrderPushdown as mt, AGGREGATE_EXTREMA_TABLE as n, takeRowsWithinByteBudget as nt, getAggregateIndexDefinitions as o, mapWithConcurrency as ot, ensureAggregateAllowedForRls as p, getRankIndexes as pt, hydrateDateFieldsForRead as q, AGGREGATE_MEMBER_TABLE as r, toConvexFilter as rt, getRankIndexDefinitions as s, findIndexForColumns as st, AGGREGATE_BUCKET_TABLE as t, splitReturningSelection as tt, createAggregateError as u, findVectorIndexByName as ut, buildForeignKeyGraph as v, usesSystemCreatedAtAlias as vt, encodeUndefinedDeep as w, collectPrimaryIdLookupRows as x, canUsePrimaryIdLookupCursor as y, getMutationCollectionLimits as z };
1486
+ export { serializeFilterExpression as $, ensureNonNullValues as A, getMutationExecutionMode as B, deserializeFilterExpression as C, enforcePolymorphicWrite as D, enforceForeignKeys as E, getChecks as F, getUniqueIndexes as G, getTableColumns as H, getColumnName as I, normalizeDateFieldsForWrite as J, hardDeleteRow as K, getForeignKeys as L, evaluateCheckConstraintTriState as M, evaluateFilter as N, enforceUniqueIndexes as O, extractPrimaryIdLookup as P, selectReturningRowWithHydration as Q, getMutationAsyncDelayMs as R, decodeUndefinedDeep as S, enforceCheckConstraints as T, getTableDeleteConfig as U, getOrmContext as V, getTableName as W, patchReferencingRows as X, normalizeTemporalComparableValue as Y, resolveOrmRuntimeDefaults as Z, applyIncomingForeignKeyActionsOnUpdate as _, resolveIndexOrderPushdown as _t, aggregateExtension as a, markLifecycleHookedTables as at, collectMutationRowsBounded as b, PUBLIC_CREATED_AT_FIELD as bt, AGGREGATE_ERROR as c, isConvexEnforceableFilter as ct, createCountError as d, findRelationIndex as dt, softDeleteRow as et, createError as f, findSearchIndexByName as ft, applyIncomingForeignKeyActionsOnDelete as g, getRankIndexes as gt, applyDefaults as h, getIndexes as ht, AGGREGATE_STATE_TABLE as i, hasLifecycleHooks as it, ensureNullableColumns as j, ensureDefaultColumns as k, COUNT_ERROR as l, mapWithConcurrency as lt, ensureCountAllowedForRls as m, getAggregateIndexes as mt, AGGREGATE_EXTREMA_TABLE as n, takeRowsWithinByteBudget as nt, getAggregateIndexDefinitions as o, compileConvexFilter as ot, ensureAggregateAllowedForRls as p, findVectorIndexByName as pt, hydrateDateFieldsForRead as q, AGGREGATE_MEMBER_TABLE as r, toConvexFilter as rt, getRankIndexDefinitions as s, convexAnd as st, AGGREGATE_BUCKET_TABLE as t, splitReturningSelection as tt, createAggregateError as u, findIndexForColumns as ut, buildForeignKeyGraph as v, CREATED_AT_MIGRATION_MESSAGE as vt, encodeUndefinedDeep as w, collectPrimaryIdLookupRows as x, usesSystemCreatedAtAlias as xt, canUsePrimaryIdLookupCursor as y, INTERNAL_CREATION_TIME_FIELD as yt, getMutationCollectionLimits as z };
@@ -102,6 +102,15 @@ declare const migrationStorageTables: {
102
102
  fieldName: "status";
103
103
  };
104
104
  };
105
+ cursor: ConvexTextBuilderInitial<""> & {
106
+ _: {
107
+ tableName: "migration_state";
108
+ };
109
+ } & {
110
+ _: {
111
+ fieldName: "cursor";
112
+ };
113
+ };
105
114
  migrationId: ConvexTextBuilderInitial<""> & {
106
115
  _: {
107
116
  notNull: true;
@@ -159,15 +168,6 @@ declare const migrationStorageTables: {
159
168
  fieldName: "runId";
160
169
  };
161
170
  };
162
- cursor: ConvexTextBuilderInitial<""> & {
163
- _: {
164
- tableName: "migration_state";
165
- };
166
- } & {
167
- _: {
168
- fieldName: "cursor";
169
- };
170
- };
171
171
  processed: ConvexNumberBuilderInitial<""> & {
172
172
  _: {
173
173
  notNull: true;
@@ -1008,7 +1008,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1008
1008
  readonly aggregate_bucket: ConvexTableWithColumns<{
1009
1009
  name: "aggregate_bucket";
1010
1010
  columns: {
1011
- updatedAt: ConvexNumberBuilderInitial<""> & {
1011
+ count: ConvexNumberBuilderInitial<""> & {
1012
1012
  _: {
1013
1013
  notNull: true;
1014
1014
  };
@@ -1018,10 +1018,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1018
1018
  };
1019
1019
  } & {
1020
1020
  _: {
1021
- fieldName: "updatedAt";
1021
+ fieldName: "count";
1022
1022
  };
1023
1023
  };
1024
- count: ConvexNumberBuilderInitial<""> & {
1024
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1025
1025
  _: {
1026
1026
  notNull: true;
1027
1027
  };
@@ -1031,7 +1031,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1031
1031
  };
1032
1032
  } & {
1033
1033
  _: {
1034
- fieldName: "count";
1034
+ fieldName: "updatedAt";
1035
1035
  };
1036
1036
  };
1037
1037
  indexName: ConvexTextBuilderInitial<""> & {
@@ -1323,7 +1323,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1323
1323
  readonly aggregate_extrema: ConvexTableWithColumns<{
1324
1324
  name: "aggregate_extrema";
1325
1325
  columns: {
1326
- updatedAt: ConvexNumberBuilderInitial<""> & {
1326
+ count: ConvexNumberBuilderInitial<""> & {
1327
1327
  _: {
1328
1328
  notNull: true;
1329
1329
  };
@@ -1333,14 +1333,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1333
1333
  };
1334
1334
  } & {
1335
1335
  _: {
1336
- fieldName: "updatedAt";
1336
+ fieldName: "count";
1337
1337
  };
1338
1338
  };
1339
- value: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
1340
- _: {
1341
- $type: convex_values0.Value;
1342
- };
1343
- } & {
1339
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1344
1340
  _: {
1345
1341
  notNull: true;
1346
1342
  };
@@ -1350,10 +1346,14 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1350
1346
  };
1351
1347
  } & {
1352
1348
  _: {
1353
- fieldName: "value";
1349
+ fieldName: "updatedAt";
1354
1350
  };
1355
1351
  };
1356
- count: ConvexNumberBuilderInitial<""> & {
1352
+ value: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
1353
+ _: {
1354
+ $type: convex_values0.Value;
1355
+ };
1356
+ } & {
1357
1357
  _: {
1358
1358
  notNull: true;
1359
1359
  };
@@ -1363,7 +1363,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1363
1363
  };
1364
1364
  } & {
1365
1365
  _: {
1366
- fieldName: "count";
1366
+ fieldName: "value";
1367
1367
  };
1368
1368
  };
1369
1369
  indexName: ConvexTextBuilderInitial<""> & {
@@ -1744,6 +1744,15 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1744
1744
  fieldName: "status";
1745
1745
  };
1746
1746
  };
1747
+ cursor: ConvexTextBuilderInitial<""> & {
1748
+ _: {
1749
+ tableName: "migration_state";
1750
+ };
1751
+ } & {
1752
+ _: {
1753
+ fieldName: "cursor";
1754
+ };
1755
+ };
1747
1756
  migrationId: ConvexTextBuilderInitial<""> & {
1748
1757
  _: {
1749
1758
  notNull: true;
@@ -1801,15 +1810,6 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1801
1810
  fieldName: "runId";
1802
1811
  };
1803
1812
  };
1804
- cursor: ConvexTextBuilderInitial<""> & {
1805
- _: {
1806
- tableName: "migration_state";
1807
- };
1808
- } & {
1809
- _: {
1810
- fieldName: "cursor";
1811
- };
1812
- };
1813
1813
  processed: ConvexNumberBuilderInitial<""> & {
1814
1814
  _: {
1815
1815
  notNull: true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitcn",
3
- "version": "0.25.3",
3
+ "version": "0.25.4",
4
4
  "description": "kitcn - React Query integration and CLI tools for Convex",
5
5
  "keywords": [
6
6
  "convex",