kitcn 0.27.1 → 0.27.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # kitcn
2
2
 
3
+ ## 0.27.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#398](https://github.com/udecode/kitcn/pull/398) [`71158af`](https://github.com/udecode/kitcn/commit/71158af254e97942d382c9b87f736466fb2fbdbd) Thanks [@MikeyZhang75](https://github.com/MikeyZhang75)! - ## Patches
8
+
9
+ - Fix `aggregateBackfill` cutting an in-progress clear short when the same run
10
+ also sees a changed metric definition. A `CLEARING` index now finishes draining
11
+ before it moves to `BUILDING`, which is what `resume` already documented, and
12
+ it applies to `aggregateIndex` and `rankIndex` alike. Previously a metric or
13
+ sum change landing while `kitcn aggregate rebuild` was still draining could
14
+ abandon the rebuild halfway and still report `READY`, leaving `count()`,
15
+ `aggregate()` and `rank()` answering from state no document backs.
16
+ - Refuse to advance an index out of `CLEARING` while any of its stored state
17
+ survives. The backfill now fails loudly instead of rebuilding on top of a
18
+ half-drained index and serving numbers that are quietly wrong.
19
+
20
+ ## 0.27.2
21
+
22
+ ### Patch Changes
23
+
24
+ - [#397](https://github.com/udecode/kitcn/pull/397) [`c90f821`](https://github.com/udecode/kitcn/commit/c90f821e9d416303147b93cc3a1b14a5ccff1fed) Thanks [@MikeyZhang75](https://github.com/MikeyZhang75)! - ## Patches
25
+
26
+ - Fix organization permission checks returning a false "not a member" once an
27
+ organization grows past ~200 members. The generated auth schema now indexes
28
+ the composite lookups the organization plugin actually issues:
29
+ `member` by `organizationId` + `userId` and by `organizationId` + `role`,
30
+ `teamMember` by `teamId` + `userId`, `invitation` by
31
+ `organizationId` + `status` and by `email` + `organizationId` + `status`, and
32
+ `organizationRole` by `organizationId` + `role`. Every index that was emitted
33
+ before is still emitted, so this is additive — rerun
34
+ `npx kitcn add auth --schema --yes` to pick the new ones up.
35
+
36
+ - Fix `findOne` reporting "not found" when the scan budget ran out before
37
+ reaching a matching row. Single-document reads now page until they match a row
38
+ or exhaust the query, so an unindexed lookup is slow and warns rather than
39
+ silently wrong. Watch for `Querying without an index on table "..."` in your
40
+ logs and add the index it names.
41
+
3
42
  ## 0.27.1
4
43
 
5
44
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  import { Bn as ConvexTextBuilderInitial, Xt as ConvexTableWithColumns } from "../capabilities-CLCYgRdY.js";
2
- import { C as ConvexNumberBuilderInitial, E as ConvexIdBuilderInitial, N as ConvexCustomBuilderInitial } from "../where-clause-compiler-CErbOMvj.js";
2
+ import { C as ConvexNumberBuilderInitial, E as ConvexIdBuilderInitial, N as ConvexCustomBuilderInitial } from "../where-clause-compiler-DAPEBp1y.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-BEc4d98x.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-D4mw0d-V.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-BEc4d98x.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-D4mw0d-V.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";
@@ -111,32 +111,32 @@ type AdapterPaginationOptions = PaginationOptions & {
111
111
  };
112
112
  declare const adapterWhereValidator: convex_values0.VObject<{
113
113
  mode?: "sensitive" | "insensitive" | undefined;
114
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
114
115
  connector?: "AND" | "OR" | undefined;
115
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
116
116
  value: string | number | boolean | string[] | number[] | null;
117
117
  field: string;
118
118
  }, {
119
119
  connector: convex_values0.VUnion<"AND" | "OR" | undefined, [convex_values0.VLiteral<"AND", "required">, convex_values0.VLiteral<"OR", "required">], "optional", never>;
120
120
  field: convex_values0.VString<string, "required">;
121
121
  mode: convex_values0.VUnion<"sensitive" | "insensitive" | undefined, [convex_values0.VLiteral<"sensitive", "required">, convex_values0.VLiteral<"insensitive", "required">], "optional", never>;
122
- 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>;
122
+ operator: convex_values0.VUnion<"eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "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>;
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
- }, "required", "mode" | "value" | "connector" | "field" | "operator">;
124
+ }, "required", "mode" | "value" | "operator" | "field" | "connector">;
125
125
  declare const adapterArgsValidator: convex_values0.VObject<{
126
+ limit?: number | undefined;
127
+ offset?: number | undefined;
126
128
  select?: string[] | undefined;
129
+ sortBy?: {
130
+ direction: "asc" | "desc";
131
+ field: string;
132
+ } | undefined;
127
133
  where?: {
128
134
  mode?: "sensitive" | "insensitive" | undefined;
135
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
129
136
  connector?: "AND" | "OR" | undefined;
130
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
131
137
  value: string | number | boolean | string[] | number[] | null;
132
138
  field: string;
133
139
  }[] | undefined;
134
- limit?: number | undefined;
135
- offset?: number | undefined;
136
- sortBy?: {
137
- field: string;
138
- direction: "asc" | "desc";
139
- } | undefined;
140
140
  model: string;
141
141
  }, {
142
142
  limit: convex_values0.VFloat64<number | undefined, "optional">;
@@ -144,32 +144,32 @@ declare const adapterArgsValidator: convex_values0.VObject<{
144
144
  offset: convex_values0.VFloat64<number | undefined, "optional">;
145
145
  select: convex_values0.VArray<string[] | undefined, convex_values0.VString<string, "required">, "optional">;
146
146
  sortBy: convex_values0.VObject<{
147
- field: string;
148
147
  direction: "asc" | "desc";
148
+ field: string;
149
149
  } | undefined, {
150
150
  direction: convex_values0.VUnion<"asc" | "desc", [convex_values0.VLiteral<"asc", "required">, convex_values0.VLiteral<"desc", "required">], "required", never>;
151
151
  field: convex_values0.VString<string, "required">;
152
- }, "optional", "field" | "direction">;
152
+ }, "optional", "direction" | "field">;
153
153
  where: convex_values0.VArray<{
154
154
  mode?: "sensitive" | "insensitive" | undefined;
155
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
155
156
  connector?: "AND" | "OR" | undefined;
156
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
157
157
  value: string | number | boolean | string[] | number[] | null;
158
158
  field: string;
159
159
  }[] | undefined, convex_values0.VObject<{
160
160
  mode?: "sensitive" | "insensitive" | undefined;
161
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
161
162
  connector?: "AND" | "OR" | undefined;
162
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
163
163
  value: string | number | boolean | string[] | number[] | null;
164
164
  field: string;
165
165
  }, {
166
166
  connector: convex_values0.VUnion<"AND" | "OR" | undefined, [convex_values0.VLiteral<"AND", "required">, convex_values0.VLiteral<"OR", "required">], "optional", never>;
167
167
  field: convex_values0.VString<string, "required">;
168
168
  mode: convex_values0.VUnion<"sensitive" | "insensitive" | undefined, [convex_values0.VLiteral<"sensitive", "required">, convex_values0.VLiteral<"insensitive", "required">], "optional", never>;
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>;
169
+ operator: convex_values0.VUnion<"eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "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
- }, "required", "mode" | "value" | "connector" | "field" | "operator">, "optional">;
172
- }, "required", "model" | "select" | "where" | "limit" | "offset" | "sortBy" | "sortBy.field" | "sortBy.direction">;
171
+ }, "required", "mode" | "value" | "operator" | "field" | "connector">, "optional">;
172
+ }, "required", "limit" | "model" | "offset" | "select" | "sortBy" | "where" | "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;
@@ -298,13 +298,22 @@ const paginate = async (ctx, schema, betterAuthSchema, args) => {
298
298
  page: result.page.map((doc) => selectFields(doc, args.select))
299
299
  };
300
300
  };
301
- const listOne = async (ctx, schema, betterAuthSchema, args) => (await paginate(ctx, schema, betterAuthSchema, {
302
- ...args,
303
- paginationOpts: {
304
- cursor: null,
305
- numItems: 1
301
+ const listOne = async (ctx, schema, betterAuthSchema, args) => {
302
+ let cursor = null;
303
+ for (;;) {
304
+ const result = await paginate(ctx, schema, betterAuthSchema, {
305
+ ...args,
306
+ paginationOpts: {
307
+ cursor,
308
+ numItems: 1
309
+ }
310
+ });
311
+ if (result.page.length > 0) return result.page[0];
312
+ if (result.isDone) return null;
313
+ if (result.continueCursor === cursor) throw new Error(`Pagination made no forward progress reading one ${args.model}`);
314
+ cursor = result.continueCursor;
306
315
  }
307
- })).page[0];
316
+ };
308
317
 
309
318
  //#endregion
310
319
  //#region src/auth/create-api.ts
@@ -899,13 +908,13 @@ const ORM_SCHEMA_OPTIONS = Symbol.for("kitcn:OrmSchemaOptions");
899
908
  const hasOrmSchemaMetadata = (schema) => !!schema && typeof schema === "object" && ORM_SCHEMA_OPTIONS in schema;
900
909
  const createAuthSchema = async ({ file, schema, tables }) => {
901
910
  if (hasOrmSchemaMetadata(schema)) {
902
- const { createSchemaOrm } = await import("../create-schema-orm-Bu2JCiBS.js");
911
+ const { createSchemaOrm } = await import("../create-schema-orm-C3y6GLwQ.js");
903
912
  return createSchemaOrm({
904
913
  file,
905
914
  tables
906
915
  });
907
916
  }
908
- const { createSchema } = await import("../create-schema-BRFjdgRr.js");
917
+ const { createSchema } = await import("../create-schema-DqhLA_UF.js");
909
918
  return createSchema({
910
919
  file,
911
920
  tables
package/dist/cli.mjs CHANGED
@@ -5669,11 +5669,28 @@ const indexFields = {
5669
5669
  ["accountId", "providerId"],
5670
5670
  ["providerId", "userId"]
5671
5671
  ],
5672
+ invitation: [
5673
+ "email",
5674
+ [
5675
+ "email",
5676
+ "organizationId",
5677
+ "status"
5678
+ ],
5679
+ "organizationId",
5680
+ ["organizationId", "status"]
5681
+ ],
5682
+ member: [
5683
+ "organizationId",
5684
+ ["organizationId", "role"],
5685
+ ["organizationId", "userId"]
5686
+ ],
5672
5687
  oauthConsent: [["clientId", "userId"]],
5688
+ organizationRole: ["organizationId", ["organizationId", "role"]],
5673
5689
  passkey: ["credentialID"],
5674
5690
  ratelimit: ["key"],
5675
5691
  rateLimit: ["key"],
5676
5692
  session: ["expiresAt", ["expiresAt", "userId"]],
5693
+ teamMember: ["teamId", ["teamId", "userId"]],
5677
5694
  user: [["email", "name"], "name"],
5678
5695
  verification: ["expiresAt", "identifier"]
5679
5696
  };
@@ -5,11 +5,28 @@ const indexFields = {
5
5
  ["accountId", "providerId"],
6
6
  ["providerId", "userId"]
7
7
  ],
8
+ invitation: [
9
+ "email",
10
+ [
11
+ "email",
12
+ "organizationId",
13
+ "status"
14
+ ],
15
+ "organizationId",
16
+ ["organizationId", "status"]
17
+ ],
18
+ member: [
19
+ "organizationId",
20
+ ["organizationId", "role"],
21
+ ["organizationId", "userId"]
22
+ ],
8
23
  oauthConsent: [["clientId", "userId"]],
24
+ organizationRole: ["organizationId", ["organizationId", "role"]],
9
25
  passkey: ["credentialID"],
10
26
  ratelimit: ["key"],
11
27
  rateLimit: ["key"],
12
28
  session: ["expiresAt", ["expiresAt", "userId"]],
29
+ teamMember: ["teamId", ["teamId", "userId"]],
13
30
  user: [["email", "name"], "name"],
14
31
  verification: ["expiresAt", "identifier"]
15
32
  };
@@ -1,4 +1,4 @@
1
- import { augmentBetterAuthTables, indexFields } from "./create-schema-BRFjdgRr.js";
1
+ import { augmentBetterAuthTables, indexFields } from "./create-schema-DqhLA_UF.js";
2
2
 
3
3
  //#region src/auth/create-schema-orm.ts
4
4
  const specialFields = (tables) => Object.fromEntries(Object.entries(tables).map(([key, table]) => {
@@ -183,8 +183,8 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
183
183
  deleteMany: convex_server0.RegisteredMutation<"internal", {
184
184
  input: {
185
185
  where?: {
186
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
186
187
  connector?: "AND" | "OR" | undefined;
187
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
188
188
  value: string | number | boolean | string[] | number[] | null;
189
189
  field: string;
190
190
  }[] | undefined;
@@ -212,8 +212,8 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
212
212
  deleteOne: convex_server0.RegisteredMutation<"internal", {
213
213
  input: {
214
214
  where?: {
215
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
215
216
  connector?: "AND" | "OR" | undefined;
216
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
217
217
  value: string | number | boolean | string[] | number[] | null;
218
218
  field: string;
219
219
  }[] | undefined;
@@ -225,20 +225,19 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
225
225
  }, Promise<Record<string, unknown> | undefined>>;
226
226
  findMany: convex_server0.RegisteredQuery<"internal", {
227
227
  join?: any;
228
+ limit?: number | undefined;
229
+ offset?: number | undefined;
230
+ sortBy?: {
231
+ direction: "asc" | "desc";
232
+ field: string;
233
+ } | undefined;
228
234
  where?: {
229
235
  mode?: "sensitive" | "insensitive" | undefined;
236
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
230
237
  connector?: "AND" | "OR" | undefined;
231
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
232
238
  value: string | number | boolean | string[] | number[] | null;
233
239
  field: string;
234
240
  }[] | undefined;
235
- limit?: number | undefined;
236
- offset?: number | undefined;
237
- sortBy?: {
238
- field: string;
239
- direction: "asc" | "desc";
240
- } | undefined;
241
- model: string;
242
241
  paginationOpts: {
243
242
  id?: number;
244
243
  endCursor?: string | null;
@@ -247,14 +246,15 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
247
246
  numItems: number;
248
247
  cursor: string | null;
249
248
  };
249
+ model: string;
250
250
  }, Promise<PaginationResult<convex_server0.GenericDocument>>>;
251
251
  findOne: convex_server0.RegisteredQuery<"internal", {
252
252
  join?: any;
253
253
  select?: string[] | undefined;
254
254
  where?: {
255
255
  mode?: "sensitive" | "insensitive" | undefined;
256
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
256
257
  connector?: "AND" | "OR" | undefined;
257
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
258
258
  value: string | number | boolean | string[] | number[] | null;
259
259
  field: string;
260
260
  }[] | undefined;
@@ -265,8 +265,8 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
265
265
  updateMany: convex_server0.RegisteredMutation<"internal", {
266
266
  input: {
267
267
  where?: {
268
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
268
269
  connector?: "AND" | "OR" | undefined;
269
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
270
270
  value: string | number | boolean | string[] | number[] | null;
271
271
  field: string;
272
272
  }[] | undefined;
@@ -300,8 +300,8 @@ declare const createApi: <Schema extends SchemaDefinition<any, any>, DataModel e
300
300
  updateOne: convex_server0.RegisteredMutation<"internal", {
301
301
  input: {
302
302
  where?: {
303
+ operator?: "eq" | "ne" | "lt" | "lte" | "gt" | "gte" | "in" | "not_in" | "contains" | "starts_with" | "ends_with" | undefined;
303
304
  connector?: "AND" | "OR" | undefined;
304
- operator?: "lt" | "lte" | "gt" | "gte" | "eq" | "in" | "not_in" | "ne" | "contains" | "starts_with" | "ends_with" | undefined;
305
305
  value: string | number | boolean | string[] | number[] | null;
306
306
  field: string;
307
307
  }[] | undefined;
@@ -1,6 +1,6 @@
1
1
  import { t as DirectAggregate } from "../../runtime-CcOvOf4K.js";
2
2
  import { a as Columns } from "../../table-CX2lnX7e.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";
3
+ import { Ct as usesSystemCreatedAtAlias, St as PUBLIC_CREATED_AT_FIELD, Z as normalizeTemporalComparableValue, a as AGGREGATE_STATE_TABLE, c as getAggregateIndexDefinitions, d as COUNT_ERROR, dt as mapWithConcurrency, i as AGGREGATE_RANK_TREE_TABLE, l as getRankIndexDefinitions, m as createError, n as AGGREGATE_EXTREMA_TABLE, r as AGGREGATE_MEMBER_TABLE, s as rankAggregateName, t as AGGREGATE_BUCKET_TABLE, u as AGGREGATE_ERROR, xt as INTERNAL_CREATION_TIME_FIELD } from "../../schema-C5WWEqsj.js";
4
4
 
5
5
  //#region src/orm/aggregate-index/runtime.ts
6
6
  const UNDEFINED_SENTINEL = "__kitcnUndefined";
@@ -1256,6 +1256,18 @@ const assertAggregateIndexesWritable = async (db, tableName, metricIndexNames, r
1256
1256
  const indexType = blockingState.kind === AGGREGATE_STATE_KIND_RANK ? "rankIndex" : "aggregateIndex";
1257
1257
  throw createError(blockingState.kind === AGGREGATE_STATE_KIND_RANK ? "RANK_INDEX_BUILDING" : AGGREGATE_ERROR.INDEX_BUILDING, `${indexType} '${tableName}.${blockingState.indexName}' is CLEARING. Retry the write after aggregateBackfill reaches BUILDING or READY.`);
1258
1258
  };
1259
+ /**
1260
+ * Read-only mirror of the emptiness checks the clear chunks drive to
1261
+ * completion. `clearCountIndexChunk` and `clearRankIndexChunk` report `done`
1262
+ * from the same conditions, so this is what "the clear finished" means without
1263
+ * writing anything.
1264
+ */
1265
+ const isIndexStateDrained = async (db, kind, tableName, indexName) => {
1266
+ if (await db.query(AGGREGATE_MEMBER_TABLE).withIndex("by_kind_table_index", (q) => q.eq("kind", kind).eq("tableKey", tableName).eq("indexName", indexName)).first()) return false;
1267
+ if (kind === AGGREGATE_STATE_KIND_RANK) return await db.query(AGGREGATE_RANK_TREE_TABLE).withIndex("by_aggregate_name", (q) => q.eq("aggregateName", rankAggregateName(tableName, indexName))).first() === null;
1268
+ const [bucket, extrema] = await Promise.all([db.query(AGGREGATE_BUCKET_TABLE).withIndex("by_table_index", (q) => q.eq("tableKey", tableName).eq("indexName", indexName)).first(), db.query(AGGREGATE_EXTREMA_TABLE).withIndex("by_table_index", (q) => q.eq("tableKey", tableName).eq("indexName", indexName)).first()]);
1269
+ return bucket === null && extrema === null;
1270
+ };
1259
1271
  const setCountState = async (db, nextState, kind = AGGREGATE_STATE_KIND_METRIC) => {
1260
1272
  const existing = await getCountState(db, nextState.tableName, nextState.indexName, kind);
1261
1273
  const payload = {
@@ -1276,6 +1288,10 @@ const setCountState = async (db, nextState, kind = AGGREGATE_STATE_KIND_METRIC)
1276
1288
  await db.insert(AGGREGATE_STATE_TABLE, payload);
1277
1289
  return;
1278
1290
  }
1291
+ if (existing.status === COUNT_STATUS_CLEARING && payload.status !== COUNT_STATUS_CLEARING && !await isIndexStateDrained(db, kind, nextState.tableName, nextState.indexName)) {
1292
+ const indexType = kind === AGGREGATE_STATE_KIND_RANK ? "rankIndex" : "aggregateIndex";
1293
+ throw new Error(`${indexType} '${nextState.tableName}.${nextState.indexName}' is CLEARING with stored state left; refusing to move it to ${payload.status}. Finish the clear before advancing the index.`);
1294
+ }
1279
1295
  await db.patch(AGGREGATE_STATE_TABLE, existing._id, payload);
1280
1296
  };
1281
1297
  const setCountStateError = async (db, tableName, indexName, error, kind = AGGREGATE_STATE_KIND_METRIC) => {
@@ -1377,7 +1393,6 @@ const RANK_ERROR = {
1377
1393
  RLS_UNSUPPORTED: "RANK_RLS_UNSUPPORTED"
1378
1394
  };
1379
1395
  const createRankError = (code, message) => /* @__PURE__ */ new Error(`${code}: ${message}`);
1380
- const rankAggregateName = (tableName, indexName) => `${tableName}.${indexName}`;
1381
1396
  const rankAggregate = (tableName, indexName) => new DirectAggregate({ name: rankAggregateName(tableName, indexName) });
1382
1397
  const toRankValue = (value) => {
1383
1398
  if (value === null || value === void 0) return null;
@@ -1905,10 +1920,11 @@ function createCountBackfillHandlers(schema, getChunkRef) {
1905
1920
  skippedReady += 1;
1906
1921
  continue;
1907
1922
  }
1923
+ const cleared = existing.status === COUNT_STATUS_CLEARING ? await drainIndexClear(ctx, target.kind, target.tableName, target.indexName, batchSize, clearBudget) : true;
1908
1924
  await setCountState(ctx.db, {
1909
1925
  ...nextStateBase,
1910
1926
  kind: stateKind,
1911
- status: COUNT_STATUS_BUILDING,
1927
+ status: cleared ? COUNT_STATUS_BUILDING : COUNT_STATUS_CLEARING,
1912
1928
  cursor: null,
1913
1929
  processed: 0,
1914
1930
  startedAt: now,
@@ -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-CLCYgRdY.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-CErbOMvj.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-DAPEBp1y.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 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";
7
+ import { $ as resolveOrmRuntimeDefaults, A as enforceUniqueIndexes, B as getMutationAsyncDelayMs, C as collectPrimaryIdLookupRows, Ct as usesSystemCreatedAtAlias, D as enforceCheckConstraints, E as encodeUndefinedDeep, F as evaluateFilter, G as getTableDeleteConfig, H as getMutationExecutionMode, I as extractPrimaryIdLookup, J as hardDeleteRow, K as getTableName, L as getChecks, M as ensureNonNullValues, N as ensureNullableColumns, O as enforceForeignKeys, P as evaluateCheckConstraintTriState, Q as patchReferencingRows, R as getColumnName$1, S as collectMutationRowsBounded, St as PUBLIC_CREATED_AT_FIELD, T as deserializeFilterExpression, U as getOrmContext, V as getMutationCollectionLimits, W as getTableColumns$2, X as normalizeDateFieldsForWrite, Y as hydrateDateFieldsForRead, Z as normalizeTemporalComparableValue, _ as applyDefaults, _t as getIndexes, at as toConvexFilter, b as buildForeignKeyGraph, bt as CREATED_AT_MIGRATION_MESSAGE, c as getAggregateIndexDefinitions, ct as compileConvexFilter, d as COUNT_ERROR, dt as mapWithConcurrency, et as selectReturningRowWithHydration, f as createAggregateError, ft as findIndexForColumns, g as ensureCountAllowedForRls, gt as getAggregateIndexes, h as ensureAggregateAllowedForRls, ht as findVectorIndexByName, it as takeRowsWithinByteBudget, j as ensureDefaultColumns, k as enforcePolymorphicWrite, l as getRankIndexDefinitions, lt as convexAnd, mt as findSearchIndexByName, nt as softDeleteRow, o as aggregateExtension, ot as hasLifecycleHooks, p as createCountError, pt as findRelationIndex, q as getUniqueIndexes, rt as splitReturningSelection, st as markLifecycleHookedTables, tt as serializeFilterExpression, u as AGGREGATE_ERROR, ut as isConvexEnforceableFilter, v as applyIncomingForeignKeyActionsOnDelete, vt as getRankIndexes, w as decodeUndefinedDeep, x as canUsePrimaryIdLookupCursor, xt as INTERNAL_CREATION_TIME_FIELD, y as applyIncomingForeignKeyActionsOnUpdate, yt as resolveIndexOrderPushdown, z as getForeignKeys } from "../schema-C5WWEqsj.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";
@@ -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-CLCYgRdY.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-CErbOMvj.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-DAPEBp1y.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 };
@@ -1394,6 +1394,12 @@ const AGGREGATE_EXTREMA_TABLE = "aggregate_extrema";
1394
1394
  const AGGREGATE_RANK_TREE_TABLE = "aggregate_rank_tree";
1395
1395
  const AGGREGATE_RANK_NODE_TABLE = "aggregate_rank_node";
1396
1396
  const AGGREGATE_STATE_TABLE = "aggregate_state";
1397
+ /**
1398
+ * Partition key a rank index's btree rows are stored under. Lives next to the
1399
+ * table names because it is how `AGGREGATE_RANK_TREE_TABLE` is addressed, and
1400
+ * both the rank runtime and the state machine have to agree on it.
1401
+ */
1402
+ const rankAggregateName = (tableName, indexName) => `${tableName}.${indexName}`;
1397
1403
  const countBucketTable = convexTable(AGGREGATE_BUCKET_TABLE, {
1398
1404
  tableKey: text().notNull(),
1399
1405
  indexName: text().notNull(),
@@ -1483,4 +1489,4 @@ function aggregateExtension() {
1483
1489
  }
1484
1490
 
1485
1491
  //#endregion
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 };
1492
+ export { resolveOrmRuntimeDefaults as $, enforceUniqueIndexes as A, getMutationAsyncDelayMs as B, collectPrimaryIdLookupRows as C, usesSystemCreatedAtAlias as Ct, enforceCheckConstraints as D, encodeUndefinedDeep as E, evaluateFilter as F, getTableDeleteConfig as G, getMutationExecutionMode as H, extractPrimaryIdLookup as I, hardDeleteRow as J, getTableName as K, getChecks as L, ensureNonNullValues as M, ensureNullableColumns as N, enforceForeignKeys as O, evaluateCheckConstraintTriState as P, patchReferencingRows as Q, getColumnName as R, collectMutationRowsBounded as S, PUBLIC_CREATED_AT_FIELD as St, deserializeFilterExpression as T, getOrmContext as U, getMutationCollectionLimits as V, getTableColumns as W, normalizeDateFieldsForWrite as X, hydrateDateFieldsForRead as Y, normalizeTemporalComparableValue as Z, applyDefaults as _, getIndexes as _t, AGGREGATE_STATE_TABLE as a, toConvexFilter as at, buildForeignKeyGraph as b, CREATED_AT_MIGRATION_MESSAGE as bt, getAggregateIndexDefinitions as c, compileConvexFilter as ct, COUNT_ERROR as d, mapWithConcurrency as dt, selectReturningRowWithHydration as et, createAggregateError as f, findIndexForColumns as ft, ensureCountAllowedForRls as g, getAggregateIndexes as gt, ensureAggregateAllowedForRls as h, findVectorIndexByName as ht, AGGREGATE_RANK_TREE_TABLE as i, takeRowsWithinByteBudget as it, ensureDefaultColumns as j, enforcePolymorphicWrite as k, getRankIndexDefinitions as l, convexAnd as lt, createError as m, findSearchIndexByName as mt, AGGREGATE_EXTREMA_TABLE as n, softDeleteRow as nt, aggregateExtension as o, hasLifecycleHooks as ot, createCountError as p, findRelationIndex as pt, getUniqueIndexes as q, AGGREGATE_MEMBER_TABLE as r, splitReturningSelection as rt, rankAggregateName as s, markLifecycleHookedTables as st, AGGREGATE_BUCKET_TABLE as t, serializeFilterExpression as tt, AGGREGATE_ERROR as u, isConvexEnforceableFilter as ut, applyIncomingForeignKeyActionsOnDelete as v, getRankIndexes as vt, decodeUndefinedDeep as w, canUsePrimaryIdLookupCursor as x, INTERNAL_CREATION_TIME_FIELD as xt, applyIncomingForeignKeyActionsOnUpdate as y, resolveIndexOrderPushdown as yt, getForeignKeys as z };
@@ -102,25 +102,20 @@ declare const migrationStorageTables: {
102
102
  fieldName: "status";
103
103
  };
104
104
  };
105
- cursor: ConvexTextBuilderInitial<""> & {
105
+ migrationId: ConvexTextBuilderInitial<""> & {
106
106
  _: {
107
- tableName: "migration_state";
107
+ notNull: true;
108
108
  };
109
109
  } & {
110
- _: {
111
- fieldName: "cursor";
112
- };
113
- };
114
- direction: ConvexTextBuilderInitial<""> & {
115
110
  _: {
116
111
  tableName: "migration_state";
117
112
  };
118
113
  } & {
119
114
  _: {
120
- fieldName: "direction";
115
+ fieldName: "migrationId";
121
116
  };
122
117
  };
123
- migrationId: ConvexTextBuilderInitial<""> & {
118
+ checksum: ConvexTextBuilderInitial<""> & {
124
119
  _: {
125
120
  notNull: true;
126
121
  };
@@ -130,10 +125,10 @@ declare const migrationStorageTables: {
130
125
  };
131
126
  } & {
132
127
  _: {
133
- fieldName: "migrationId";
128
+ fieldName: "checksum";
134
129
  };
135
130
  };
136
- checksum: ConvexTextBuilderInitial<""> & {
131
+ applied: ConvexBooleanBuilderInitial<""> & {
137
132
  _: {
138
133
  notNull: true;
139
134
  };
@@ -143,29 +138,34 @@ declare const migrationStorageTables: {
143
138
  };
144
139
  } & {
145
140
  _: {
146
- fieldName: "checksum";
141
+ fieldName: "applied";
147
142
  };
148
143
  };
149
- applied: ConvexBooleanBuilderInitial<""> & {
144
+ direction: ConvexTextBuilderInitial<""> & {
150
145
  _: {
151
- notNull: true;
146
+ tableName: "migration_state";
152
147
  };
153
148
  } & {
149
+ _: {
150
+ fieldName: "direction";
151
+ };
152
+ };
153
+ runId: ConvexTextBuilderInitial<""> & {
154
154
  _: {
155
155
  tableName: "migration_state";
156
156
  };
157
157
  } & {
158
158
  _: {
159
- fieldName: "applied";
159
+ fieldName: "runId";
160
160
  };
161
161
  };
162
- runId: ConvexTextBuilderInitial<""> & {
162
+ cursor: ConvexTextBuilderInitial<""> & {
163
163
  _: {
164
164
  tableName: "migration_state";
165
165
  };
166
166
  } & {
167
167
  _: {
168
- fieldName: "runId";
168
+ fieldName: "cursor";
169
169
  };
170
170
  };
171
171
  processed: ConvexNumberBuilderInitial<""> & {
@@ -1034,7 +1034,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1034
1034
  fieldName: "count";
1035
1035
  };
1036
1036
  };
1037
- tableKey: ConvexTextBuilderInitial<""> & {
1037
+ indexName: ConvexTextBuilderInitial<""> & {
1038
1038
  _: {
1039
1039
  notNull: true;
1040
1040
  };
@@ -1044,10 +1044,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1044
1044
  };
1045
1045
  } & {
1046
1046
  _: {
1047
- fieldName: "tableKey";
1047
+ fieldName: "indexName";
1048
1048
  };
1049
1049
  };
1050
- indexName: ConvexTextBuilderInitial<""> & {
1050
+ tableKey: ConvexTextBuilderInitial<""> & {
1051
1051
  _: {
1052
1052
  notNull: true;
1053
1053
  };
@@ -1057,7 +1057,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1057
1057
  };
1058
1058
  } & {
1059
1059
  _: {
1060
- fieldName: "indexName";
1060
+ fieldName: "tableKey";
1061
1061
  };
1062
1062
  };
1063
1063
  keyHash: ConvexTextBuilderInitial<""> & {
@@ -1133,7 +1133,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1133
1133
  readonly aggregate_member: ConvexTableWithColumns<{
1134
1134
  name: "aggregate_member";
1135
1135
  columns: {
1136
- kind: ConvexTextBuilderInitial<""> & {
1136
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1137
1137
  _: {
1138
1138
  notNull: true;
1139
1139
  };
@@ -1143,10 +1143,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1143
1143
  };
1144
1144
  } & {
1145
1145
  _: {
1146
- fieldName: "kind";
1146
+ fieldName: "updatedAt";
1147
1147
  };
1148
1148
  };
1149
- updatedAt: ConvexNumberBuilderInitial<""> & {
1149
+ kind: ConvexTextBuilderInitial<""> & {
1150
1150
  _: {
1151
1151
  notNull: true;
1152
1152
  };
@@ -1156,10 +1156,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1156
1156
  };
1157
1157
  } & {
1158
1158
  _: {
1159
- fieldName: "updatedAt";
1159
+ fieldName: "kind";
1160
1160
  };
1161
1161
  };
1162
- tableKey: ConvexTextBuilderInitial<""> & {
1162
+ indexName: ConvexTextBuilderInitial<""> & {
1163
1163
  _: {
1164
1164
  notNull: true;
1165
1165
  };
@@ -1169,10 +1169,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1169
1169
  };
1170
1170
  } & {
1171
1171
  _: {
1172
- fieldName: "tableKey";
1172
+ fieldName: "indexName";
1173
1173
  };
1174
1174
  };
1175
- indexName: ConvexTextBuilderInitial<""> & {
1175
+ tableKey: ConvexTextBuilderInitial<""> & {
1176
1176
  _: {
1177
1177
  notNull: true;
1178
1178
  };
@@ -1182,7 +1182,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1182
1182
  };
1183
1183
  } & {
1184
1184
  _: {
1185
- fieldName: "indexName";
1185
+ fieldName: "tableKey";
1186
1186
  };
1187
1187
  };
1188
1188
  keyHash: ConvexTextBuilderInitial<""> & {
@@ -1323,11 +1323,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1323
1323
  readonly aggregate_extrema: ConvexTableWithColumns<{
1324
1324
  name: "aggregate_extrema";
1325
1325
  columns: {
1326
- value: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
1327
- _: {
1328
- $type: convex_values0.Value;
1329
- };
1330
- } & {
1326
+ updatedAt: ConvexNumberBuilderInitial<""> & {
1331
1327
  _: {
1332
1328
  notNull: true;
1333
1329
  };
@@ -1337,10 +1333,14 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1337
1333
  };
1338
1334
  } & {
1339
1335
  _: {
1340
- fieldName: "value";
1336
+ fieldName: "updatedAt";
1341
1337
  };
1342
1338
  };
1343
- updatedAt: ConvexNumberBuilderInitial<""> & {
1339
+ value: ConvexCustomBuilderInitial<"", convex_values0.VAny<any, "required", string>> & {
1340
+ _: {
1341
+ $type: convex_values0.Value;
1342
+ };
1343
+ } & {
1344
1344
  _: {
1345
1345
  notNull: true;
1346
1346
  };
@@ -1350,7 +1350,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1350
1350
  };
1351
1351
  } & {
1352
1352
  _: {
1353
- fieldName: "updatedAt";
1353
+ fieldName: "value";
1354
1354
  };
1355
1355
  };
1356
1356
  count: ConvexNumberBuilderInitial<""> & {
@@ -1366,7 +1366,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1366
1366
  fieldName: "count";
1367
1367
  };
1368
1368
  };
1369
- tableKey: ConvexTextBuilderInitial<""> & {
1369
+ indexName: ConvexTextBuilderInitial<""> & {
1370
1370
  _: {
1371
1371
  notNull: true;
1372
1372
  };
@@ -1376,10 +1376,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1376
1376
  };
1377
1377
  } & {
1378
1378
  _: {
1379
- fieldName: "tableKey";
1379
+ fieldName: "indexName";
1380
1380
  };
1381
1381
  };
1382
- indexName: ConvexTextBuilderInitial<""> & {
1382
+ tableKey: ConvexTextBuilderInitial<""> & {
1383
1383
  _: {
1384
1384
  notNull: true;
1385
1385
  };
@@ -1389,7 +1389,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1389
1389
  };
1390
1390
  } & {
1391
1391
  _: {
1392
- fieldName: "indexName";
1392
+ fieldName: "tableKey";
1393
1393
  };
1394
1394
  };
1395
1395
  keyHash: ConvexTextBuilderInitial<""> & {
@@ -1589,19 +1589,6 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1589
1589
  fieldName: "status";
1590
1590
  };
1591
1591
  };
1592
- kind: ConvexTextBuilderInitial<""> & {
1593
- _: {
1594
- notNull: true;
1595
- };
1596
- } & {
1597
- _: {
1598
- tableName: "aggregate_state";
1599
- };
1600
- } & {
1601
- _: {
1602
- fieldName: "kind";
1603
- };
1604
- };
1605
1592
  cursor: ConvexTextBuilderInitial<""> & {
1606
1593
  _: {
1607
1594
  tableName: "aggregate_state";
@@ -1668,7 +1655,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1668
1655
  fieldName: "lastError";
1669
1656
  };
1670
1657
  };
1671
- tableKey: ConvexTextBuilderInitial<""> & {
1658
+ kind: ConvexTextBuilderInitial<""> & {
1672
1659
  _: {
1673
1660
  notNull: true;
1674
1661
  };
@@ -1678,7 +1665,7 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1678
1665
  };
1679
1666
  } & {
1680
1667
  _: {
1681
- fieldName: "tableKey";
1668
+ fieldName: "kind";
1682
1669
  };
1683
1670
  };
1684
1671
  indexName: ConvexTextBuilderInitial<""> & {
@@ -1720,6 +1707,19 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1720
1707
  fieldName: "metricDefinitionHash";
1721
1708
  };
1722
1709
  };
1710
+ tableKey: ConvexTextBuilderInitial<""> & {
1711
+ _: {
1712
+ notNull: true;
1713
+ };
1714
+ } & {
1715
+ _: {
1716
+ tableName: "aggregate_state";
1717
+ };
1718
+ } & {
1719
+ _: {
1720
+ fieldName: "tableKey";
1721
+ };
1722
+ };
1723
1723
  };
1724
1724
  }, {
1725
1725
  by_creation_time: ["_creationTime"];
@@ -1744,25 +1744,20 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1744
1744
  fieldName: "status";
1745
1745
  };
1746
1746
  };
1747
- cursor: ConvexTextBuilderInitial<""> & {
1747
+ migrationId: ConvexTextBuilderInitial<""> & {
1748
1748
  _: {
1749
- tableName: "migration_state";
1749
+ notNull: true;
1750
1750
  };
1751
1751
  } & {
1752
- _: {
1753
- fieldName: "cursor";
1754
- };
1755
- };
1756
- direction: ConvexTextBuilderInitial<""> & {
1757
1752
  _: {
1758
1753
  tableName: "migration_state";
1759
1754
  };
1760
1755
  } & {
1761
1756
  _: {
1762
- fieldName: "direction";
1757
+ fieldName: "migrationId";
1763
1758
  };
1764
1759
  };
1765
- migrationId: ConvexTextBuilderInitial<""> & {
1760
+ checksum: ConvexTextBuilderInitial<""> & {
1766
1761
  _: {
1767
1762
  notNull: true;
1768
1763
  };
@@ -1772,10 +1767,10 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1772
1767
  };
1773
1768
  } & {
1774
1769
  _: {
1775
- fieldName: "migrationId";
1770
+ fieldName: "checksum";
1776
1771
  };
1777
1772
  };
1778
- checksum: ConvexTextBuilderInitial<""> & {
1773
+ applied: ConvexBooleanBuilderInitial<""> & {
1779
1774
  _: {
1780
1775
  notNull: true;
1781
1776
  };
@@ -1785,29 +1780,34 @@ declare const BUILTIN_SCHEMA_EXTENSIONS: readonly [SchemaExtension<{
1785
1780
  };
1786
1781
  } & {
1787
1782
  _: {
1788
- fieldName: "checksum";
1783
+ fieldName: "applied";
1789
1784
  };
1790
1785
  };
1791
- applied: ConvexBooleanBuilderInitial<""> & {
1786
+ direction: ConvexTextBuilderInitial<""> & {
1792
1787
  _: {
1793
- notNull: true;
1788
+ tableName: "migration_state";
1794
1789
  };
1795
1790
  } & {
1791
+ _: {
1792
+ fieldName: "direction";
1793
+ };
1794
+ };
1795
+ runId: ConvexTextBuilderInitial<""> & {
1796
1796
  _: {
1797
1797
  tableName: "migration_state";
1798
1798
  };
1799
1799
  } & {
1800
1800
  _: {
1801
- fieldName: "applied";
1801
+ fieldName: "runId";
1802
1802
  };
1803
1803
  };
1804
- runId: ConvexTextBuilderInitial<""> & {
1804
+ cursor: ConvexTextBuilderInitial<""> & {
1805
1805
  _: {
1806
1806
  tableName: "migration_state";
1807
1807
  };
1808
1808
  } & {
1809
1809
  _: {
1810
- fieldName: "runId";
1810
+ fieldName: "cursor";
1811
1811
  };
1812
1812
  };
1813
1813
  processed: ConvexNumberBuilderInitial<""> & {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitcn",
3
- "version": "0.27.1",
3
+ "version": "0.27.3",
4
4
  "description": "kitcn - React Query integration and CLI tools for Convex",
5
5
  "keywords": [
6
6
  "convex",
@@ -110,6 +110,7 @@ export const member = convexTable(
110
110
  },
111
111
  (t) => [
112
112
  index("userId").on(t.userId),
113
+ index("organizationId").on(t.organizationId),
113
114
  index("organizationId_userId").on(t.organizationId, t.userId),
114
115
  index("organizationId_role").on(t.organizationId, t.role),
115
116
  // Backs `member.count({ where: { organizationId } })` for seat limits.
@@ -131,6 +132,7 @@ export const invitation = convexTable(
131
132
  (t) => [
132
133
  index("email").on(t.email),
133
134
  index("status").on(t.status),
135
+ index("organizationId").on(t.organizationId),
134
136
  index("email_organizationId_status").on(
135
137
  t.email,
136
138
  t.organizationId,
@@ -178,7 +180,11 @@ export const teamMember = convexTable(
178
180
  userId: id("user").notNull(),
179
181
  createdAt: timestamp(),
180
182
  },
181
- (t) => [index("teamId").on(t.teamId), index("userId").on(t.userId)]
183
+ (t) => [
184
+ index("teamId").on(t.teamId),
185
+ index("userId").on(t.userId),
186
+ index("teamId_userId").on(t.teamId, t.userId),
187
+ ]
182
188
  );
183
189
  ```
184
190