convex-ents 0.2.0 → 0.3.0

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.
@@ -0,0 +1,368 @@
1
+ import { GenericEntsDataModel, GenericEdgeConfig, Expand, EdgeConfig, DeletionConfig } from './schema.js';
2
+ import * as convex_values from 'convex/values';
3
+ import { GenericId } from 'convex/values';
4
+ import { TableNamesInDataModel, GenericDocument, DocumentByName, FilterBuilder, NamedTableInfo, ExpressionOrValue, PaginationOptions, IndexNames, FieldTypeFromFieldPath, SearchIndexNames, SearchFilterBuilder, NamedSearchIndex, SearchFilter, PaginationResult, IndexRangeBuilder, NamedIndex, IndexRange, WithoutSystemFields, WithOptionalSystemFields, GenericDataModel, GenericDatabaseReader, GenericDatabaseWriter, Scheduler } from 'convex/server';
5
+ import { ScheduledDeleteFuncRef } from './deletion.js';
6
+
7
+ declare class WriterImplBase<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
8
+ protected ctx: EntMutationCtx<EntsDataModel>;
9
+ protected entDefinitions: EntsDataModel;
10
+ protected table: Table;
11
+ constructor(ctx: EntMutationCtx<EntsDataModel>, entDefinitions: EntsDataModel, table: Table);
12
+ deleteId(id: GenericId<any>, behavior: "default" | "soft" | "hard"): Promise<GenericId<any>>;
13
+ deletedIdIn(id: GenericId<any>, table: string, cascadingSoft: boolean): Promise<void>;
14
+ writeEdges(docId: GenericId<any>, changes: EdgeChanges, deleteSoftly?: boolean): Promise<void>;
15
+ checkUniqueness(value: Partial<GenericDocument>, id?: GenericId<any>): Promise<void>;
16
+ fieldsOnly(value: Partial<WithEdgePatches<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>): GenericDocument;
17
+ checkReadAndWriteRule(operation: "create" | "update" | "delete", id: GenericId<Table> | undefined, value: Partial<GenericDocument> | undefined): Promise<void>;
18
+ }
19
+ type WithEdgeInserts<Document extends GenericDocument, Edges extends Record<string, GenericEdgeConfig>> = Document & {
20
+ [key in keyof Edges as Edges[key]["cardinality"] extends "single" ? Edges[key]["type"] extends "field" ? never : key : key]?: Edges[key]["cardinality"] extends "single" ? GenericId<Edges[key]["to"]> : GenericId<Edges[key]["to"]>[];
21
+ };
22
+ type WithEdges<Document extends GenericDocument, Edges extends Record<string, GenericEdgeConfig>> = Document & {
23
+ [key in keyof Edges as Edges[key]["cardinality"] extends "multiple" ? Edges[key]["type"] extends "ref" ? key : never : never]?: GenericId<Edges[key]["to"]>[];
24
+ };
25
+ type WithEdgePatches<Document extends GenericDocument, Edges extends Record<string, GenericEdgeConfig>> = Document & {
26
+ [key in keyof Edges as Edges[key]["cardinality"] extends "multiple" ? Edges[key]["type"] extends "ref" ? key : never : never]?: {
27
+ add?: GenericId<Edges[key]["to"]>[];
28
+ remove?: GenericId<Edges[key]["to"]>[];
29
+ };
30
+ };
31
+ type EdgeChanges = Record<string, {
32
+ add?: GenericId<any>[];
33
+ remove?: GenericId<any>[];
34
+ removeEdges?: GenericId<any>[];
35
+ }>;
36
+
37
+ interface PromiseOrderedQueryOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[] | null> {
38
+ filter(predicate: (q: FilterBuilder<NamedTableInfo<EntsDataModel, Table>>) => ExpressionOrValue<boolean>): this;
39
+ map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): PromiseArrayOrNull<TOutput>;
40
+ paginate(paginationOpts: PaginationOptions): PromisePaginationResultOrNull<EntsDataModel, Table>;
41
+ take(n: number): PromiseEntsOrNull<EntsDataModel, Table>;
42
+ first(): PromiseEntOrNull<EntsDataModel, Table>;
43
+ unique(): PromiseEntOrNull<EntsDataModel, Table>;
44
+ docs(): Promise<DocumentByName<EntsDataModel, Table>[] | null>;
45
+ }
46
+ interface PromiseQueryOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseOrderedQueryOrNull<EntsDataModel, Table> {
47
+ order(order: "asc" | "desc", indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>): PromiseOrderedQueryOrNull<EntsDataModel, Table>;
48
+ }
49
+ interface PromiseTableBase<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
50
+ getMany<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, values: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>[]): PromiseEntsOrNulls<EntsDataModel, Table>;
51
+ getMany(ids: GenericId<Table>[]): PromiseEntsOrNulls<EntsDataModel, Table>;
52
+ getManyX<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, values: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>[]): PromiseEnts<EntsDataModel, Table>;
53
+ getManyX(ids: GenericId<Table>[]): PromiseEnts<EntsDataModel, Table>;
54
+ /**
55
+ * Returns the string ID format for the ID in a given table, or null if the ID
56
+ * is from a different table or is not a valid ID.
57
+ *
58
+ * This does not guarantee that the ID exists (i.e. `table("foo").get(id)` may return `null`).
59
+ *
60
+ * @param tableName - The name of the table.
61
+ * @param id - The ID string.
62
+ */
63
+ normalizeId(id: string): GenericId<Table> | null;
64
+ }
65
+ interface PromiseTable<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseQuery<EntsDataModel, Table>, PromiseTableBase<EntsDataModel, Table> {
66
+ get<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, value0: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>): PromiseEntOrNull<EntsDataModel, Table>;
67
+ get(id: GenericId<Table>): PromiseEntOrNull<EntsDataModel, Table>;
68
+ /**
69
+ * Fetch a document from the DB using given index, throw if it doesn't exist.
70
+ */
71
+ getX<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, value0: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>): PromiseEnt<EntsDataModel, Table>;
72
+ /**
73
+ * Fetch a document from the DB for a given ID, throw if it doesn't exist.
74
+ */
75
+ getX(id: GenericId<Table>): PromiseEnt<EntsDataModel, Table>;
76
+ /**
77
+ * Query by running a full text search against a search index.
78
+ *
79
+ * Search queries must always search for some text within the index's
80
+ * `searchField`. This query can optionally add equality filters for any
81
+ * `filterFields` specified in the index.
82
+ *
83
+ * Documents will be returned in relevance order based on how well they
84
+ * match the search text.
85
+ *
86
+ * To learn about full text search, see [Indexes](https://docs.convex.dev/text-search).
87
+ *
88
+ * @param indexName - The name of the search index to query.
89
+ * @param searchFilter - A search filter expression constructed with the
90
+ * supplied {@link SearchFilterBuilder}. This defines the full text search to run
91
+ * along with equality filtering to run within the search index.
92
+ * @returns - A query that searches for matching documents, returning them
93
+ * in relevancy order.
94
+ */
95
+ search<IndexName extends SearchIndexNames<NamedTableInfo<EntsDataModel, Table>>>(indexName: IndexName, searchFilter: (q: SearchFilterBuilder<DocumentByName<EntsDataModel, Table>, NamedSearchIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>>) => SearchFilter): PromiseOrderedQuery<EntsDataModel, Table>;
96
+ }
97
+ interface PromiseOrderedQueryBase<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
98
+ filter(predicate: (q: FilterBuilder<NamedTableInfo<EntsDataModel, Table>>) => ExpressionOrValue<boolean>): this;
99
+ paginate(paginationOpts: PaginationOptions): PromisePaginationResult<EntsDataModel, Table>;
100
+ docs(): Promise<DocumentByName<EntsDataModel, Table>[]>;
101
+ }
102
+ interface PromiseOrderedQuery<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]>, PromiseOrderedQueryBase<EntsDataModel, Table> {
103
+ map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): PromiseArray<TOutput>;
104
+ take(n: number): PromiseEnts<EntsDataModel, Table>;
105
+ first(): PromiseEntOrNull<EntsDataModel, Table>;
106
+ firstX(): PromiseEnt<EntsDataModel, Table>;
107
+ unique(): PromiseEntOrNull<EntsDataModel, Table>;
108
+ uniqueX(): PromiseEnt<EntsDataModel, Table>;
109
+ }
110
+ interface PromiseQuery<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseOrderedQuery<EntsDataModel, Table> {
111
+ order(order: "asc" | "desc", indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>): PromiseOrderedQuery<EntsDataModel, Table>;
112
+ }
113
+ interface PromisePaginationResultOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<PaginationResult<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>> | null> {
114
+ docs(): Promise<PaginationResult<DocumentByName<EntsDataModel, Table>> | null>;
115
+ map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): Promise<PaginationResult<TOutput> | null>;
116
+ }
117
+ interface PromisePaginationResult<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<PaginationResult<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>>> {
118
+ docs(): Promise<PaginationResult<DocumentByName<EntsDataModel, Table>>>;
119
+ map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): Promise<PaginationResult<TOutput>>;
120
+ }
121
+ interface PromiseEntsOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[] | null> {
122
+ 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
+ docs(): Promise<DocumentByName<EntsDataModel, Table>[] | null>;
124
+ }
125
+ interface PromiseEnts<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]> {
126
+ 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
+ docs(): Promise<DocumentByName<EntsDataModel, Table>[]>;
128
+ }
129
+ interface PromiseEntsOrNulls<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<(Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel> | null)[]> {
130
+ }
131
+ interface PromiseEdgeEntsOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEntsOrNull<EntsDataModel, Table> {
132
+ /**
133
+ * Returns whether there is an ent with given ID on the other side
134
+ * the edge. Returns null if chained to a null result.
135
+ * @param id The ID of the ent on the other end of the edge
136
+ */
137
+ has(id: GenericId<Table>): Promise<boolean | null>;
138
+ }
139
+ interface PromiseEdgeEnts<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEnts<EntsDataModel, Table> {
140
+ /**
141
+ * Returns whether there is an ent with given ID on the other side
142
+ * the edge.
143
+ * @param id The ID of the ent on the other end of the edge
144
+ */
145
+ has(id: GenericId<Table>): Promise<boolean>;
146
+ }
147
+ interface PromiseEntOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel> | null> {
148
+ edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrNull<EntsDataModel, Table, Edge>;
149
+ doc(): Promise<DocumentByName<EntsDataModel, Table> | null>;
150
+ }
151
+ interface PromiseEnt<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>> {
152
+ edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdge<EntsDataModel, Table, Edge>;
153
+ edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrThrow<EntsDataModel, Table, Edge>;
154
+ doc(): Promise<DocumentByName<EntsDataModel, Table>>;
155
+ }
156
+ interface PromiseArrayOrNull<T> extends Promise<T[] | null> {
157
+ filter<S extends T>(predicate: (value: T, index: number, array: T[] | null) => value is S): Promise<S[] | null>;
158
+ filter(predicate: (value: T, index: number, array: T[] | null) => unknown): Promise<T[] | null>;
159
+ }
160
+ interface PromiseArray<T> extends Promise<T[]> {
161
+ filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S): Promise<S[]>;
162
+ filter(predicate: (value: T, index: number, array: T[]) => unknown): Promise<T[]>;
163
+ }
164
+ declare function entWrapper<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>>(fields: DocumentByName<EntsDataModel, Table>, ctx: EntQueryCtx<EntsDataModel>, entDefinitions: EntsDataModel, table: Table): Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
165
+ declare function entsTableFactory<Ctx extends EntQueryCtx<any>, EntsDataModel extends GenericEntsDataModel>(ctx: Ctx, entDefinitions: EntsDataModel, options?: {
166
+ scheduledDelete: ScheduledDeleteFuncRef;
167
+ }): Ctx extends EntMutationCtx<any> ? EntsTableWriter<EntsDataModel> : EntsTable<EntsDataModel>;
168
+ type EntsTable<EntsDataModel extends GenericEntsDataModel> = {
169
+ <Table extends TableNamesInDataModel<EntsDataModel>, IndexName extends IndexNames<NamedTableInfo<EntsDataModel, Table>>>(table: Table, indexName: IndexName, indexRange?: (q: IndexRangeBuilder<DocumentByName<EntsDataModel, Table>, NamedIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>>) => IndexRange): PromiseQuery<EntsDataModel, Table>;
170
+ <Table extends TableNamesInDataModel<EntsDataModel>>(table: Table): PromiseTable<EntsDataModel, Table>;
171
+ };
172
+ type EntsTableWriter<EntsDataModel extends GenericEntsDataModel> = {
173
+ <Table extends TableNamesInDataModel<EntsDataModel>, IndexName extends IndexNames<NamedTableInfo<EntsDataModel, Table>>>(table: Table, indexName: IndexName, indexRange?: (q: IndexRangeBuilder<DocumentByName<EntsDataModel, Table>, NamedIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>>) => IndexRange): PromiseTableWriter<Table, EntsDataModel>;
174
+ <Table extends TableNamesInDataModel<EntsDataModel>>(table: Table): PromiseTableWriter<Table, EntsDataModel>;
175
+ };
176
+ declare class EntInstance<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
177
+ edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdge<EntsDataModel, Table, Edge>;
178
+ edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrThrow<EntsDataModel, Table, Edge>;
179
+ doc(): DocumentByName<EntsDataModel, Table>;
180
+ }
181
+ type Ent<Table extends TableNamesInDataModel<EntsDataModel>, Doc extends DocumentByName<EntsDataModel, Table>, EntsDataModel extends GenericEntsDataModel> = Doc & EntInstance<EntsDataModel, Table>;
182
+ type GenericEnt<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> = Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
183
+ 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"]>;
184
+ 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"]>;
185
+ 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"]>;
186
+ interface PromiseOrderedQueryWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]>, PromiseOrderedQueryBase<EntsDataModel, Table> {
187
+ paginate(paginationOpts: PaginationOptions): PromisePaginationResultWriter<EntsDataModel, Table>;
188
+ map<TOutput>(callbackFn: (value: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): PromiseArray<TOutput>;
189
+ take(n: number): PromiseEntsWriter<EntsDataModel, Table>;
190
+ first(): PromiseEntWriterOrNull<EntsDataModel, Table>;
191
+ firstX(): PromiseEntWriter<EntsDataModel, Table>;
192
+ unique(): PromiseEntWriterOrNull<EntsDataModel, Table>;
193
+ uniqueX(): PromiseEntWriter<EntsDataModel, Table>;
194
+ }
195
+ interface PromiseQueryWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseOrderedQueryWriter<EntsDataModel, Table> {
196
+ order(order: "asc" | "desc", indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>): PromiseOrderedQueryWriter<EntsDataModel, Table>;
197
+ }
198
+ interface PromiseEntsWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEnts<EntsDataModel, Table> {
199
+ firstX(): PromiseEntWriter<EntsDataModel, Table>;
200
+ uniqueX(): PromiseEntWriter<EntsDataModel, Table>;
201
+ }
202
+ interface PromisePaginationResultWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<PaginationResult<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>>> {
203
+ docs(): Promise<PaginationResult<DocumentByName<EntsDataModel, Table>>>;
204
+ 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>>;
205
+ }
206
+ interface PromiseTableWriter<Table extends TableNamesInDataModel<EntsDataModel>, EntsDataModel extends GenericEntsDataModel> extends PromiseQueryWriter<EntsDataModel, Table>, PromiseTableBase<EntsDataModel, Table> {
207
+ get<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, value0: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>): PromiseEntWriterOrNull<EntsDataModel, Table>;
208
+ get(id: GenericId<Table>): PromiseEntWriterOrNull<EntsDataModel, Table>;
209
+ /**
210
+ * Fetch a document from the DB using given index, throw if it doesn't exist.
211
+ */
212
+ getX<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, value0: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>): PromiseEnt<EntsDataModel, Table>;
213
+ /**
214
+ * Fetch a document from the DB for a given ID, throw if it doesn't exist.
215
+ */
216
+ getX(id: GenericId<Table>): PromiseEntWriter<EntsDataModel, Table>;
217
+ /**
218
+ * Query by running a full text search against a search index.
219
+ *
220
+ * Search queries must always search for some text within the index's
221
+ * `searchField`. This query can optionally add equality filters for any
222
+ * `filterFields` specified in the index.
223
+ *
224
+ * Documents will be returned in relevance order based on how well they
225
+ * match the search text.
226
+ *
227
+ * To learn about full text search, see [Indexes](https://docs.convex.dev/text-search).
228
+ *
229
+ * @param indexName - The name of the search index to query.
230
+ * @param searchFilter - A search filter expression constructed with the
231
+ * supplied {@link SearchFilterBuilder}. This defines the full text search to run
232
+ * along with equality filtering to run within the search index.
233
+ * @returns - A query that searches for matching documents, returning them
234
+ * in relevancy order.
235
+ */
236
+ search<IndexName extends SearchIndexNames<NamedTableInfo<EntsDataModel, Table>>>(indexName: IndexName, searchFilter: (q: SearchFilterBuilder<DocumentByName<EntsDataModel, Table>, NamedSearchIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>>) => SearchFilter): PromiseOrderedQueryWriter<EntsDataModel, Table>;
237
+ /**
238
+ * Insert a new document into a table.
239
+ *
240
+ * @param table - The name of the table to insert a new document into.
241
+ * @param value - The {@link Value} to insert into the given table.
242
+ * @returns - {@link GenericId} of the new document.
243
+ */
244
+ insert(value: Expand<WithoutSystemFields<WithEdgeInserts<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>): PromiseEntId<EntsDataModel, Table>;
245
+ /**
246
+ * Insert new documents into a table.
247
+ *
248
+ * @param table - The name of the table to insert a new document into.
249
+ * @param value - The {@link Value} to insert into the given table.
250
+ * @returns - {@link GenericId} of the new document.
251
+ */
252
+ insertMany(values: Expand<WithoutSystemFields<WithEdgeInserts<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>[]): Promise<GenericId<Table>[]>;
253
+ }
254
+ interface PromiseEntWriterOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel> | null> {
255
+ edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrNull<EntsDataModel, Table, Edge>;
256
+ doc(): Promise<DocumentByName<EntsDataModel, Table> | null>;
257
+ }
258
+ interface PromiseEntWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>> {
259
+ edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdge<EntsDataModel, Table, Edge>;
260
+ edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrThrow<EntsDataModel, Table, Edge>;
261
+ doc(): Promise<DocumentByName<EntsDataModel, Table>>;
262
+ /**
263
+ * Patch this existing document, shallow merging it with the given partial
264
+ * document.
265
+ *
266
+ * New fields are added. Existing fields are overwritten. Fields set to
267
+ * `undefined` are removed.
268
+ *
269
+ * @param value - The partial {@link GenericDocument} to merge into this document. If this new value
270
+ * specifies system fields like `_id`, they must match the document's existing field values.
271
+ */
272
+ patch(value: Partial<Expand<WithEdgePatches<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>): Promise<PromiseEntId<EntsDataModel, Table>>;
273
+ /**
274
+ * Replace the value of an existing document, overwriting its old value.
275
+ *
276
+ * @param value - The new {@link GenericDocument} for the document. This value can omit the system fields,
277
+ * and the database will preserve them in.
278
+ */
279
+ replace(value: Expand<WithOptionalSystemFields<WithEdges<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>>): Promise<PromiseEntId<EntsDataModel, Table>>;
280
+ /**
281
+ * Delete this existing document.
282
+ *
283
+ * @param id - The {@link GenericId} of the document to remove.
284
+ */
285
+ delete(): Promise<GenericId<Table>>;
286
+ }
287
+ declare class EntWriterInstance<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends EntInstance<EntsDataModel, Table> {
288
+ /**
289
+ * Patch this existing document, shallow merging it with the given partial
290
+ * document.
291
+ *
292
+ * New fields are added. Existing fields are overwritten. Fields set to
293
+ * `undefined` are removed.
294
+ *
295
+ * @param value - The partial {@link GenericDocument} to merge into this document. If this new value
296
+ * specifies system fields like `_id`, they must match the document's existing field values.
297
+ */
298
+ patch(value: Partial<WithEdgePatches<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>): PromiseEntId<EntsDataModel, Table>;
299
+ /**
300
+ * Replace the value of this existing document, overwriting its old value.
301
+ *
302
+ * @param value - The new {@link GenericDocument} for the document. This value can omit the system fields,
303
+ * and the database will preserve them in.
304
+ */
305
+ replace(value: WithOptionalSystemFields<WithEdges<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>): PromiseEntId<EntsDataModel, Table>;
306
+ /**
307
+ * Delete this existing document.
308
+ *
309
+ * @param id - The {@link GenericId} of the document to remove.
310
+ */
311
+ delete(): Promise<GenericId<Table>>;
312
+ }
313
+ type EntWriter<Table extends TableNamesInDataModel<EntsDataModel>, Doc extends DocumentByName<EntsDataModel, Table>, EntsDataModel extends GenericEntsDataModel> = Doc & EntWriterInstance<EntsDataModel, Table>;
314
+ type GenericEntWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> = EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
315
+ interface PromiseEntId<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<GenericId<Table>> {
316
+ get(): PromiseEntWriter<EntsDataModel, Table>;
317
+ }
318
+ interface EntQueryCtx<DataModel extends GenericDataModel> {
319
+ db: GenericDatabaseReader<DataModel>;
320
+ }
321
+ interface EntMutationCtx<DataModel extends GenericDataModel> extends EntQueryCtx<DataModel> {
322
+ db: GenericDatabaseWriter<DataModel>;
323
+ scheduler: Scheduler;
324
+ }
325
+ type DocRetriever<ID, Doc> = () => Promise<{
326
+ id: ID;
327
+ doc: () => Promise<Doc>;
328
+ }>;
329
+ declare function addEntRules<EntsDataModel extends GenericEntsDataModel>(entDefinitions: EntsDataModel, rules: {
330
+ [Table in keyof EntsDataModel]?: Table extends TableNamesInDataModel<EntsDataModel> ? {
331
+ read?: (ent: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>) => Promise<boolean>;
332
+ write?: (args: {
333
+ operation: "create";
334
+ ent: undefined;
335
+ value: WithoutSystemFields<DocumentByName<EntsDataModel, Table>>;
336
+ } | {
337
+ operation: "update";
338
+ ent: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
339
+ value: Partial<WithoutSystemFields<DocumentByName<EntsDataModel, Table>>>;
340
+ } | {
341
+ operation: "delete";
342
+ ent: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
343
+ value: undefined;
344
+ }) => Promise<boolean>;
345
+ } : never;
346
+ }): EntsDataModel;
347
+ declare function getReadRule(entDefinitions: GenericEntsDataModel, table: string): ((doc: GenericDocument) => Promise<boolean>) | undefined;
348
+ declare function getWriteRule(entDefinitions: GenericEntsDataModel, table: string): ((args: {
349
+ operation: "create";
350
+ ent: undefined;
351
+ value: {
352
+ [x: string]: convex_values.Value;
353
+ };
354
+ } | {
355
+ operation: "update";
356
+ ent: Ent<any, GenericDocument, any>;
357
+ value: Partial<{
358
+ [x: string]: convex_values.Value;
359
+ }>;
360
+ } | {
361
+ operation: "delete";
362
+ ent: Ent<any, GenericDocument, any>;
363
+ value: undefined;
364
+ }) => Promise<boolean>) | undefined;
365
+ declare function getEdgeDefinitions<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>>(entDefinitions: EntsDataModel, table: Table): Record<keyof EntsDataModel[Table]["edges"], EdgeConfig>;
366
+ declare function getDeletionConfig<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>>(entDefinitions: EntsDataModel, table: Table): DeletionConfig | undefined;
367
+
368
+ export { type PromiseQueryWriter as A, type PromiseEntsWriter as B, type PromisePaginationResultWriter as C, type PromiseTableWriter as D, type EdgeChanges as E, type PromiseEntWriterOrNull as F, type GenericEnt as G, type PromiseEntWriter as H, type GenericEntWriter as I, type PromiseEntId as J, type EntQueryCtx as K, type EntMutationCtx as L, type DocRetriever as M, addEntRules as N, getReadRule as O, type PromiseOrderedQueryOrNull as P, getWriteRule as Q, getEdgeDefinitions as R, getDeletionConfig as S, 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 Ent as w, type PromiseEdge as x, type PromiseEdgeOrThrow as y, type PromiseOrderedQueryWriter as z };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { EntDefinition, defineEnt, defineEntSchema, getEntDefinitions } from './schema.js';
2
- export { GenericEnt, GenericEntWriter, PromiseEdgeEnts, PromiseEdgeEntsOrNull, PromiseEnt, PromiseEntId, PromiseEntOrNull, PromiseEntWriter, PromiseEntWriterOrNull, PromiseEnts, PromiseEntsOrNull, PromiseEntsOrNulls, PromiseEntsWriter, PromiseOrderedQuery, PromiseOrderedQueryBase, PromiseOrderedQueryOrNull, PromiseOrderedQueryWriter, PromiseQuery, PromiseQueryOrNull, PromiseQueryWriter, PromiseTable, PromiseTableBase, PromiseTableWriter, addEntRules, entsTableFactory } from './functions.js';
2
+ export { G as GenericEnt, I as GenericEntWriter, p as PromiseEdgeEnts, o as PromiseEdgeEntsOrNull, r as PromiseEnt, J as PromiseEntId, q as PromiseEntOrNull, H as PromiseEntWriter, F as PromiseEntWriterOrNull, m as PromiseEnts, l as PromiseEntsOrNull, n as PromiseEntsOrNulls, B as PromiseEntsWriter, h as PromiseOrderedQuery, g as PromiseOrderedQueryBase, P as PromiseOrderedQueryOrNull, z as PromiseOrderedQueryWriter, i as PromiseQuery, d as PromiseQueryOrNull, A as PromiseQueryWriter, f as PromiseTable, e as PromiseTableBase, D as PromiseTableWriter, N as addEntRules, v as entsTableFactory } from './index--8O_7LM9.js';
3
+ export { scheduledDeleteFactory } from './deletion.js';
3
4
  import 'convex/server';
4
5
  import 'convex/values';
5
- import './writer.js';