convex-ents 0.7.1 → 0.7.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.
@@ -96,7 +96,6 @@ interface PromiseTable<EntsDataModel extends GenericEntsDataModel, Table extends
96
96
  }
97
97
  interface PromiseOrderedQueryBase<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
98
98
  filter(predicate: (q: FilterBuilder<NamedTableInfo<EntsDataModel, Table>>) => ExpressionOrValue<boolean>): this;
99
- paginate(paginationOpts: PaginationOptions): PromisePaginationResult<EntsDataModel, Table>;
100
99
  docs(): Promise<DocumentByName<EntsDataModel, Table>[]>;
101
100
  }
102
101
  interface PromiseOrderedQuery<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]>, PromiseOrderedQueryBase<EntsDataModel, Table> {
@@ -122,6 +121,10 @@ interface PromiseEntsOrNull<EntsDataModel extends GenericEntsDataModel, Table ex
122
121
  map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): PromiseArrayOrNull<TOutput>;
123
122
  docs(): Promise<DocumentByName<EntsDataModel, Table>[] | null>;
124
123
  }
124
+ interface PromiseEntsWriterOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[] | null> {
125
+ map<TOutput>(callbackFn: (value: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): PromiseArrayOrNull<TOutput>;
126
+ docs(): Promise<DocumentByName<EntsDataModel, Table>[] | null>;
127
+ }
125
128
  interface PromiseEnts<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]> {
126
129
  map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): PromiseArray<TOutput>;
127
130
  docs(): Promise<DocumentByName<EntsDataModel, Table>[]>;
@@ -136,6 +139,14 @@ interface PromiseEdgeEntsOrNull<EntsDataModel extends GenericEntsDataModel, Tabl
136
139
  */
137
140
  has(id: GenericId<Table>): Promise<boolean | null>;
138
141
  }
142
+ interface PromiseEdgeEntsWriterOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEntsWriterOrNull<EntsDataModel, Table> {
143
+ /**
144
+ * Returns whether there is an ent with given ID on the other side
145
+ * the edge. Returns null if chained to a null result.
146
+ * @param id The ID of the ent on the other end of the edge
147
+ */
148
+ has(id: GenericId<Table>): Promise<boolean | null>;
149
+ }
139
150
  interface PromiseEdgeEnts<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEnts<EntsDataModel, Table> {
140
151
  /**
141
152
  * Returns whether there is an ent with given ID on the other side
@@ -144,6 +155,14 @@ interface PromiseEdgeEnts<EntsDataModel extends GenericEntsDataModel, Table exte
144
155
  */
145
156
  has(id: GenericId<Table>): Promise<boolean>;
146
157
  }
158
+ interface PromiseEdgeEntsWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEntsWriter<EntsDataModel, Table> {
159
+ /**
160
+ * Returns whether there is an ent with given ID on the other side
161
+ * the edge.
162
+ * @param id The ID of the ent on the other end of the edge
163
+ */
164
+ has(id: GenericId<Table>): Promise<boolean>;
165
+ }
147
166
  interface PromiseEntOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel> | null> {
148
167
  edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrNull<EntsDataModel, Table, Edge>;
149
168
  doc(): Promise<DocumentByName<EntsDataModel, Table> | null>;
@@ -192,13 +211,15 @@ type GenericEnt<EntsDataModel extends GenericEntsDataModel, Table extends TableN
192
211
  type PromiseEdge<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>, Edge extends keyof EntsDataModel[Table]["edges"]> = EntsDataModel[Table]["edges"][Edge]["cardinality"] extends "multiple" ? EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEdgeEnts<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseQuery<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEntOrNull<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseEnt<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]>;
193
212
  type PromiseEdgeOrThrow<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>, Edge extends keyof EntsDataModel[Table]["edges"]> = EntsDataModel[Table]["edges"][Edge]["cardinality"] extends "multiple" ? EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEdgeEnts<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseQuery<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEnt<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseEnt<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]>;
194
213
  type PromiseEdgeOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>, Edge extends keyof EntsDataModel[Table]["edges"]> = EntsDataModel[Table]["edges"][Edge]["cardinality"] extends "multiple" ? EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEdgeEntsOrNull<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseQueryOrNull<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseEntOrNull<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]>;
214
+ type PromiseEdgeWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>, Edge extends keyof EntsDataModel[Table]["edges"]> = EntsDataModel[Table]["edges"][Edge]["cardinality"] extends "multiple" ? EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEdgeEntsWriter<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseQueryWriter<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEntOrNull<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseEntWriter<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]>;
215
+ type PromiseEdgeWriterOrThrow<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>, Edge extends keyof EntsDataModel[Table]["edges"]> = EntsDataModel[Table]["edges"][Edge]["cardinality"] extends "multiple" ? EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEdgeEntsWriter<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseQueryWriter<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : EntsDataModel[Table]["edges"][Edge]["type"] extends "ref" ? PromiseEntWriter<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]> : PromiseEntWriter<EntsDataModel, EntsDataModel[Table]["edges"][Edge]["to"]>;
195
216
  interface PromiseOrderedQueryWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]>, PromiseOrderedQueryBase<EntsDataModel, Table> {
196
217
  paginate(paginationOpts: PaginationOptions): PromisePaginationResultWriter<EntsDataModel, Table>;
197
218
  map<TOutput>(callbackFn: (value: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): PromiseArray<TOutput>;
198
219
  take(n: number): PromiseEntsWriter<EntsDataModel, Table>;
199
- first(): PromiseEntWriterOrNull<EntsDataModel, Table>;
220
+ first(): PromiseEntOrNull<EntsDataModel, Table>;
200
221
  firstX(): PromiseEntWriter<EntsDataModel, Table>;
201
- unique(): PromiseEntWriterOrNull<EntsDataModel, Table>;
222
+ unique(): PromiseEntOrNull<EntsDataModel, Table>;
202
223
  uniqueX(): PromiseEntWriter<EntsDataModel, Table>;
203
224
  }
204
225
  interface PromiseQueryWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseOrderedQueryWriter<EntsDataModel, Table> {
@@ -213,8 +234,8 @@ interface PromisePaginationResultWriter<EntsDataModel extends GenericEntsDataMod
213
234
  map<TOutput>(callbackFn: (value: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): Promise<PaginationResult<TOutput>>;
214
235
  }
215
236
  interface PromiseTableWriter<Table extends TableNamesInDataModel<EntsDataModel>, EntsDataModel extends GenericEntsDataModel> extends PromiseQueryWriter<EntsDataModel, Table>, PromiseTableBase<EntsDataModel, Table> {
216
- get<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, ...values: IndexFieldTypesForEq<EntsDataModel, Table, Indexes[Index]>): PromiseEntWriterOrNull<EntsDataModel, Table>;
217
- get(id: GenericId<Table>): PromiseEntWriterOrNull<EntsDataModel, Table>;
237
+ get<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, ...values: IndexFieldTypesForEq<EntsDataModel, Table, Indexes[Index]>): PromiseEntOrNull<EntsDataModel, Table>;
238
+ get(id: GenericId<Table>): PromiseEntOrNull<EntsDataModel, Table>;
218
239
  /**
219
240
  * Fetch a unique document from the DB using given index, throw if it doesn't exist.
220
241
  */
@@ -260,13 +281,9 @@ interface PromiseTableWriter<Table extends TableNamesInDataModel<EntsDataModel>,
260
281
  */
261
282
  insertMany(values: Expand<WithoutSystemFields<WithEdgeInserts<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>[]): Promise<GenericId<Table>[]>;
262
283
  }
263
- interface PromiseEntWriterOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel> | null> {
264
- edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrNull<EntsDataModel, Table, Edge>;
265
- doc(): Promise<DocumentByName<EntsDataModel, Table> | null>;
266
- }
267
284
  interface PromiseEntWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>> {
268
- edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdge<EntsDataModel, Table, Edge>;
269
- edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrThrow<EntsDataModel, Table, Edge>;
285
+ edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeWriter<EntsDataModel, Table, Edge>;
286
+ edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeWriterOrThrow<EntsDataModel, Table, Edge>;
270
287
  doc(): Promise<DocumentByName<EntsDataModel, Table>>;
271
288
  /**
272
289
  * Patch this existing document, shallow merging it with the given partial
@@ -278,14 +295,14 @@ interface PromiseEntWriter<EntsDataModel extends GenericEntsDataModel, Table ext
278
295
  * @param value - The partial {@link GenericDocument} to merge into this document. If this new value
279
296
  * specifies system fields like `_id`, they must match the document's existing field values.
280
297
  */
281
- patch(value: Partial<Expand<WithEdgePatches<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>): Promise<PromiseEntId<EntsDataModel, Table>>;
298
+ patch(value: Partial<Expand<WithEdgePatches<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>): PromiseEntId<EntsDataModel, Table>;
282
299
  /**
283
300
  * Replace the value of an existing document, overwriting its old value.
284
301
  *
285
302
  * @param value - The new {@link GenericDocument} for the document. This value can omit the system fields,
286
303
  * and the database will preserve them in.
287
304
  */
288
- replace(value: Expand<WithOptionalSystemFields<WithEdges<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>): Promise<PromiseEntId<EntsDataModel, Table>>;
305
+ replace(value: Expand<WithOptionalSystemFields<WithEdges<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>): PromiseEntId<EntsDataModel, Table>;
289
306
  /**
290
307
  * Delete this existing document.
291
308
  *
@@ -293,7 +310,10 @@ interface PromiseEntWriter<EntsDataModel extends GenericEntsDataModel, Table ext
293
310
  */
294
311
  delete(): Promise<GenericId<Table>>;
295
312
  }
296
- declare class EntWriterInstance<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends EntInstance<EntsDataModel, Table> {
313
+ declare class EntWriterInstance<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
314
+ edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeWriter<EntsDataModel, Table, Edge>;
315
+ edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeWriterOrThrow<EntsDataModel, Table, Edge>;
316
+ doc(): DocumentByName<EntsDataModel, Table>;
297
317
  /**
298
318
  * Patch this existing document, shallow merging it with the given partial
299
319
  * document.
@@ -378,4 +398,4 @@ declare function getWriteRule(entDefinitions: GenericEntsDataModel, table: strin
378
398
  declare function getEdgeDefinitions<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>>(entDefinitions: EntsDataModel, table: Table): Record<keyof EntsDataModel[Table]["edges"], EdgeConfig>;
379
399
  declare function getDeletionConfig<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>>(entDefinitions: EntsDataModel, table: Table): DeletionConfig | undefined;
380
400
 
381
- export { type PromiseEdgeOrThrow as A, type PromiseOrderedQueryWriter as B, type PromiseQueryWriter as C, type PromiseEntsWriter as D, type EdgeChanges as E, type PromisePaginationResultWriter as F, type GenericEnt as G, type PromiseTableWriter as H, type PromiseEntWriterOrNull as I, type PromiseEntWriter as J, type GenericEntWriter as K, type PromiseEntId as L, type EntQueryCtx as M, type EntMutationCtx as N, type DocRetriever as O, type PromiseOrderedQueryOrNull as P, addEntRules as Q, getReadRule as R, getWriteRule as S, getEdgeDefinitions as T, getDeletionConfig as U, WriterImplBase as W, type WithEdgeInserts as a, type WithEdges as b, type WithEdgePatches as c, type PromiseQueryOrNull as d, type PromiseTableBase as e, type PromiseTable as f, type PromiseOrderedQueryBase as g, type PromiseOrderedQuery as h, type PromiseQuery as i, type PromisePaginationResultOrNull as j, type PromisePaginationResult as k, type PromiseEntsOrNull as l, type PromiseEnts as m, type PromiseEntsOrNulls as n, type PromiseEdgeEntsOrNull as o, type PromiseEdgeEnts as p, type PromiseEntOrNull as q, type PromiseEnt as r, type PromiseArrayOrNull as s, type PromiseArray as t, entWrapper as u, entsTableFactory as v, type EntsTable as w, type EntsTableWriter as x, type Ent as y, type PromiseEdge as z };
401
+ export { type EntsTableWriter as A, type Ent as B, type PromiseEdge as C, type PromiseEdgeOrThrow as D, type EdgeChanges as E, type PromiseEdgeWriter as F, type GenericEnt as G, type PromiseEdgeWriterOrThrow as H, type PromiseOrderedQueryWriter as I, type PromiseQueryWriter as J, type PromiseEntsWriter as K, type PromisePaginationResultWriter as L, type PromiseTableWriter as M, type PromiseEntWriter as N, type GenericEntWriter as O, type PromiseOrderedQueryOrNull as P, type PromiseEntId as Q, type EntQueryCtx as R, type EntMutationCtx as S, type DocRetriever as T, addEntRules as U, getReadRule as V, WriterImplBase as W, getWriteRule as X, getEdgeDefinitions as Y, getDeletionConfig as Z, type WithEdgeInserts as a, type WithEdges as b, type WithEdgePatches as c, type PromiseQueryOrNull as d, type PromiseTableBase as e, type PromiseTable as f, type PromiseOrderedQueryBase as g, type PromiseOrderedQuery as h, type PromiseQuery as i, type PromisePaginationResultOrNull as j, type PromisePaginationResult as k, type PromiseEntsOrNull as l, type PromiseEntsWriterOrNull as m, type PromiseEnts as n, type PromiseEntsOrNulls as o, type PromiseEdgeEntsOrNull as p, type PromiseEdgeEntsWriterOrNull as q, type PromiseEdgeEnts as r, type PromiseEdgeEntsWriter as s, type PromiseEntOrNull as t, type PromiseEnt as u, type PromiseArrayOrNull as v, type PromiseArray as w, entWrapper as x, entsTableFactory as y, type EntsTable as z };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { EntDefinition, defineEnt, defineEntFromTable, defineEntSchema, getEntDefinitions } from './schema.js';
2
- export { G as GenericEnt, K as GenericEntWriter, p as PromiseEdgeEnts, o as PromiseEdgeEntsOrNull, r as PromiseEnt, L as PromiseEntId, q as PromiseEntOrNull, J as PromiseEntWriter, I as PromiseEntWriterOrNull, m as PromiseEnts, l as PromiseEntsOrNull, n as PromiseEntsOrNulls, D as PromiseEntsWriter, h as PromiseOrderedQuery, g as PromiseOrderedQueryBase, P as PromiseOrderedQueryOrNull, B as PromiseOrderedQueryWriter, i as PromiseQuery, d as PromiseQueryOrNull, C as PromiseQueryWriter, f as PromiseTable, e as PromiseTableBase, H as PromiseTableWriter, Q as addEntRules, v as entsTableFactory } from './index-Yi-8Q5Zu.js';
2
+ export { G as GenericEnt, O as GenericEntWriter, r as PromiseEdgeEnts, p as PromiseEdgeEntsOrNull, u as PromiseEnt, Q as PromiseEntId, t as PromiseEntOrNull, N as PromiseEntWriter, n as PromiseEnts, l as PromiseEntsOrNull, o as PromiseEntsOrNulls, K as PromiseEntsWriter, h as PromiseOrderedQuery, g as PromiseOrderedQueryBase, P as PromiseOrderedQueryOrNull, I as PromiseOrderedQueryWriter, i as PromiseQuery, d as PromiseQueryOrNull, J as PromiseQueryWriter, f as PromiseTable, e as PromiseTableBase, M as PromiseTableWriter, U as addEntRules, y as entsTableFactory } from './index-vd8irkPR.js';
3
3
  export { scheduledDeleteFactory } from './deletion.js';
4
4
  import 'convex/server';
5
5
  import 'convex/values';
package/dist/index.js CHANGED
@@ -367,16 +367,23 @@ var EntDefinitionImpl = class {
367
367
  };
368
368
  function getEntDefinitions(schema) {
369
369
  const tables = schema.tables;
370
- return Object.keys(tables).reduce(
371
- (acc, tableName) => ({
372
- ...acc,
373
- [tableName]: {
374
- defaults: tables[tableName].defaults,
375
- edges: tables[tableName].edgeConfigs,
376
- fields: tables[tableName].fieldConfigs,
377
- deletionConfig: tables[tableName].deletionConfig
378
- }
379
- }),
370
+ return Object.entries(tables).reduce(
371
+ (acc, [tableName, table]) => {
372
+ acc[tableName] = {
373
+ indexes: table.indexes.reduce(
374
+ (acc2, { indexDescriptor, fields }) => {
375
+ acc2[indexDescriptor] = fields;
376
+ return acc2;
377
+ },
378
+ {}
379
+ ),
380
+ defaults: table.defaults,
381
+ edges: table.edgeConfigs,
382
+ fields: table.fieldConfigs,
383
+ deletionConfig: table.deletionConfig
384
+ };
385
+ return acc;
386
+ },
380
387
  {}
381
388
  );
382
389
  }
@@ -932,11 +939,22 @@ var PromiseTableImpl = class extends PromiseQueryOrNullImpl {
932
939
  }
933
940
  };
934
941
  } : async () => {
935
- const [indexName, value] = args;
936
- const doc = await this.ctx.db.query(this.table).withIndex(indexName, (q) => q.eq(indexName, value)).unique();
942
+ const [indexName, ...values] = args;
943
+ const fieldNames = getIndexFields(
944
+ this.entDefinitions,
945
+ this.table,
946
+ indexName
947
+ );
948
+ const doc = await this.ctx.db.query(this.table).withIndex(
949
+ indexName,
950
+ (q) => values.reduce((q2, value, i) => q2.eq(fieldNames[i], value), q)
951
+ ).unique();
937
952
  if (throwIfNull && doc === null) {
938
953
  throw new Error(
939
- `Table "${this.table}" does not contain document with field "${indexName}" = \`${value}\``
954
+ `Table "${this.table}" does not contain document with field${values.reduce(
955
+ (message, value, i) => `${message} "${fieldNames[i]}" = \`${value}\``,
956
+ ""
957
+ )}`
940
958
  );
941
959
  }
942
960
  return loadedRetriever(doc);
@@ -1141,7 +1159,7 @@ var PromiseEdgeOrNullImpl = class extends PromiseEntsOrNullImpl {
1141
1159
  return (docs?.length ?? 0) > 0;
1142
1160
  }
1143
1161
  };
1144
- var PromiseEntOrNullImpl = class _PromiseEntOrNullImpl extends Promise {
1162
+ var PromiseEntOrNullImpl = class extends Promise {
1145
1163
  constructor(ctx, entDefinitions, table, retrieve, throwIfNull) {
1146
1164
  super(() => {
1147
1165
  });
@@ -1234,7 +1252,7 @@ var PromiseEntOrNullImpl = class _PromiseEntOrNullImpl extends Promise {
1234
1252
  }
1235
1253
  );
1236
1254
  }
1237
- return new _PromiseEntOrNullImpl(
1255
+ return new PromiseEntWriterImpl(
1238
1256
  this.ctx,
1239
1257
  this.entDefinitions,
1240
1258
  edgeDefinition.to,
@@ -1578,7 +1596,7 @@ var PromiseEntIdImpl = class extends Promise {
1578
1596
  this.retrieve = retrieve;
1579
1597
  }
1580
1598
  get() {
1581
- return new PromiseEntOrNullImpl(
1599
+ return new PromiseEntWriterImpl(
1582
1600
  this.ctx,
1583
1601
  this.entDefinitions,
1584
1602
  this.table,
@@ -1629,6 +1647,9 @@ async function filterByReadRule(ctx, entDefinitions, table, docs, throwIfNull) {
1629
1647
  );
1630
1648
  return docs.filter((_, i) => decisions[i]);
1631
1649
  }
1650
+ function getIndexFields(entDefinitions, table, index) {
1651
+ return entDefinitions[table].indexes[index];
1652
+ }
1632
1653
  function getReadRule(entDefinitions, table) {
1633
1654
  return entDefinitions.rules?.[table]?.read;
1634
1655
  }