convex-ents 0.1.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.
- package/README.md +8 -0
- package/dist/functions.d.ts +303 -0
- package/dist/functions.js +1167 -0
- package/dist/functions.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +1460 -0
- package/dist/index.js.map +1 -0
- package/dist/schema.d.ts +293 -0
- package/dist/schema.js +325 -0
- package/dist/schema.js.map +1 -0
- package/dist/writer.d.ts +30 -0
- package/dist/writer.js +970 -0
- package/dist/writer.js.map +1 -0
- package/package.json +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Convex Ents
|
|
2
|
+
|
|
3
|
+
Convex Ents are an ergonomic layer on top of the Convex built-in ctx.db API for
|
|
4
|
+
reading from and writing to the database. They simplify working with
|
|
5
|
+
relationships between documents, allow specifying unique fields, default values
|
|
6
|
+
and rules (row level security).
|
|
7
|
+
|
|
8
|
+
Check out the docs: https://labs.convex.dev/convex-ents
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { GenericEntsDataModel } from './schema.js';
|
|
2
|
+
import * as convex_values from 'convex/values';
|
|
3
|
+
import { GenericId } from 'convex/values';
|
|
4
|
+
import { TableNamesInDataModel, DocumentByName, FilterBuilder, NamedTableInfo, ExpressionOrValue, PaginationOptions, PaginationResult, IndexNames, FieldTypeFromFieldPath, SearchIndexNames, SearchFilterBuilder, NamedSearchIndex, SearchFilter, GenericDatabaseReader, GenericDatabaseWriter, IndexRangeBuilder, NamedIndex, IndexRange, WithoutSystemFields, WithOptionalSystemFields, GenericDocument } from 'convex/server';
|
|
5
|
+
import { WithEdges, WithEdgePatches } from './writer.js';
|
|
6
|
+
|
|
7
|
+
interface PromiseOrderedQueryOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[] | null> {
|
|
8
|
+
filter(predicate: (q: FilterBuilder<NamedTableInfo<EntsDataModel, Table>>) => ExpressionOrValue<boolean>): this;
|
|
9
|
+
map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): Promise<TOutput[] | null>;
|
|
10
|
+
paginate(paginationOpts: PaginationOptions): Promise<PaginationResult<DocumentByName<EntsDataModel, Table>> | null>;
|
|
11
|
+
take(n: number): PromiseEntsOrNull<EntsDataModel, Table>;
|
|
12
|
+
first(): PromiseEntOrNull<EntsDataModel, Table>;
|
|
13
|
+
unique(): PromiseEntOrNull<EntsDataModel, Table>;
|
|
14
|
+
docs(): Promise<DocumentByName<EntsDataModel, Table>[] | null>;
|
|
15
|
+
}
|
|
16
|
+
interface PromiseQueryOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseOrderedQueryOrNull<EntsDataModel, Table> {
|
|
17
|
+
order(order: "asc" | "desc", indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>): PromiseOrderedQueryOrNull<EntsDataModel, Table>;
|
|
18
|
+
}
|
|
19
|
+
interface PromiseTableBase<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
|
|
20
|
+
getMany<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, values: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>[]): PromiseEntsOrNulls<EntsDataModel, Table>;
|
|
21
|
+
getMany(ids: GenericId<Table>[]): PromiseEntsOrNulls<EntsDataModel, Table>;
|
|
22
|
+
getManyX<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, values: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>[]): PromiseEnts<EntsDataModel, Table>;
|
|
23
|
+
getManyX(ids: GenericId<Table>[]): PromiseEnts<EntsDataModel, Table>;
|
|
24
|
+
/**
|
|
25
|
+
* Returns the string ID format for the ID in a given table, or null if the ID
|
|
26
|
+
* is from a different table or is not a valid ID.
|
|
27
|
+
*
|
|
28
|
+
* This does not guarantee that the ID exists (i.e. `table("foo").get(id)` may return `null`).
|
|
29
|
+
*
|
|
30
|
+
* @param tableName - The name of the table.
|
|
31
|
+
* @param id - The ID string.
|
|
32
|
+
*/
|
|
33
|
+
normalizeId(id: string): GenericId<Table> | null;
|
|
34
|
+
}
|
|
35
|
+
interface PromiseTable<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseQuery<EntsDataModel, Table>, PromiseTableBase<EntsDataModel, Table> {
|
|
36
|
+
get<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, value0: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>): PromiseEntOrNull<EntsDataModel, Table>;
|
|
37
|
+
get(id: GenericId<Table>): PromiseEntOrNull<EntsDataModel, Table>;
|
|
38
|
+
/**
|
|
39
|
+
* Fetch a document from the DB using given index, throw if it doesn't exist.
|
|
40
|
+
*/
|
|
41
|
+
getX<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, value0: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>): PromiseEnt<EntsDataModel, Table>;
|
|
42
|
+
/**
|
|
43
|
+
* Fetch a document from the DB for a given ID, throw if it doesn't exist.
|
|
44
|
+
*/
|
|
45
|
+
getX(id: GenericId<Table>): PromiseEnt<EntsDataModel, Table>;
|
|
46
|
+
/**
|
|
47
|
+
* Query by running a full text search against a search index.
|
|
48
|
+
*
|
|
49
|
+
* Search queries must always search for some text within the index's
|
|
50
|
+
* `searchField`. This query can optionally add equality filters for any
|
|
51
|
+
* `filterFields` specified in the index.
|
|
52
|
+
*
|
|
53
|
+
* Documents will be returned in relevance order based on how well they
|
|
54
|
+
* match the search text.
|
|
55
|
+
*
|
|
56
|
+
* To learn about full text search, see [Indexes](https://docs.convex.dev/text-search).
|
|
57
|
+
*
|
|
58
|
+
* @param indexName - The name of the search index to query.
|
|
59
|
+
* @param searchFilter - A search filter expression constructed with the
|
|
60
|
+
* supplied {@link SearchFilterBuilder}. This defines the full text search to run
|
|
61
|
+
* along with equality filtering to run within the search index.
|
|
62
|
+
* @returns - A query that searches for matching documents, returning them
|
|
63
|
+
* in relevancy order.
|
|
64
|
+
*/
|
|
65
|
+
search<IndexName extends SearchIndexNames<NamedTableInfo<EntsDataModel, Table>>>(indexName: IndexName, searchFilter: (q: SearchFilterBuilder<DocumentByName<EntsDataModel, Table>, NamedSearchIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>>) => SearchFilter): PromiseOrderedQuery<EntsDataModel, Table>;
|
|
66
|
+
}
|
|
67
|
+
interface PromiseOrderedQueryBase<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
|
|
68
|
+
filter(predicate: (q: FilterBuilder<NamedTableInfo<EntsDataModel, Table>>) => ExpressionOrValue<boolean>): this;
|
|
69
|
+
paginate(paginationOpts: PaginationOptions): Promise<PaginationResult<DocumentByName<EntsDataModel, Table>>>;
|
|
70
|
+
first(): PromiseEntOrNull<EntsDataModel, Table>;
|
|
71
|
+
unique(): PromiseEntOrNull<EntsDataModel, Table>;
|
|
72
|
+
docs(): Promise<DocumentByName<EntsDataModel, Table>[]>;
|
|
73
|
+
}
|
|
74
|
+
interface PromiseOrderedQuery<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]>, PromiseOrderedQueryBase<EntsDataModel, Table> {
|
|
75
|
+
map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): Promise<TOutput[]>;
|
|
76
|
+
take(n: number): PromiseEnts<EntsDataModel, Table>;
|
|
77
|
+
firstX(): PromiseEnt<EntsDataModel, Table>;
|
|
78
|
+
uniqueX(): PromiseEnt<EntsDataModel, Table>;
|
|
79
|
+
}
|
|
80
|
+
interface PromiseQuery<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseOrderedQuery<EntsDataModel, Table> {
|
|
81
|
+
order(order: "asc" | "desc", indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>): PromiseOrderedQuery<EntsDataModel, Table>;
|
|
82
|
+
}
|
|
83
|
+
interface PromiseEntsOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[] | null> {
|
|
84
|
+
map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): Promise<TOutput[] | null>;
|
|
85
|
+
docs(): Promise<DocumentByName<EntsDataModel, Table>[] | null>;
|
|
86
|
+
}
|
|
87
|
+
interface PromiseEnts<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]> {
|
|
88
|
+
map<TOutput>(callbackFn: (value: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): Promise<TOutput[]>;
|
|
89
|
+
docs(): Promise<DocumentByName<EntsDataModel, Table>[]>;
|
|
90
|
+
}
|
|
91
|
+
interface PromiseEntsOrNulls<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<(Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel> | null)[]> {
|
|
92
|
+
}
|
|
93
|
+
interface PromiseEdgeEntsOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEntsOrNull<EntsDataModel, Table> {
|
|
94
|
+
/**
|
|
95
|
+
* Returns whether there is an ent with given ID on the other side
|
|
96
|
+
* the edge. Returns null if chained to a null result.
|
|
97
|
+
* @param id The ID of the ent on the other end of the edge
|
|
98
|
+
*/
|
|
99
|
+
has(id: GenericId<Table>): Promise<boolean | null>;
|
|
100
|
+
}
|
|
101
|
+
interface PromiseEdgeEnts<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEnts<EntsDataModel, Table> {
|
|
102
|
+
/**
|
|
103
|
+
* Returns whether there is an ent with given ID on the other side
|
|
104
|
+
* the edge.
|
|
105
|
+
* @param id The ID of the ent on the other end of the edge
|
|
106
|
+
*/
|
|
107
|
+
has(id: GenericId<Table>): Promise<boolean>;
|
|
108
|
+
}
|
|
109
|
+
interface PromiseEntOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel> | null> {
|
|
110
|
+
edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrNull<EntsDataModel, Table, Edge>;
|
|
111
|
+
doc(): Promise<DocumentByName<EntsDataModel, Table> | null>;
|
|
112
|
+
}
|
|
113
|
+
interface PromiseEnt<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>> {
|
|
114
|
+
edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdge<EntsDataModel, Table, Edge>;
|
|
115
|
+
edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrThrow<EntsDataModel, Table, Edge>;
|
|
116
|
+
doc(): Promise<DocumentByName<EntsDataModel, Table>>;
|
|
117
|
+
}
|
|
118
|
+
declare function entWrapper<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>>(fields: DocumentByName<EntsDataModel, Table>, db: GenericDatabaseReader<EntsDataModel>, entDefinitions: EntsDataModel, table: Table): Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
|
|
119
|
+
declare function entsTableFactory<Database extends GenericDatabaseReader<any>, EntsDataModel extends GenericEntsDataModel>(db: Database, entDefinitions: EntsDataModel): Database extends GenericDatabaseWriter<any> ? EntsTableWriter<EntsDataModel> : EntsTable<EntsDataModel>;
|
|
120
|
+
type EntsTable<EntsDataModel extends GenericEntsDataModel> = {
|
|
121
|
+
<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>;
|
|
122
|
+
<Table extends TableNamesInDataModel<EntsDataModel>>(table: Table): PromiseTable<EntsDataModel, Table>;
|
|
123
|
+
};
|
|
124
|
+
type EntsTableWriter<EntsDataModel extends GenericEntsDataModel> = {
|
|
125
|
+
<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): PromiseTable<EntsDataModel, Table>;
|
|
126
|
+
<Table extends TableNamesInDataModel<EntsDataModel>>(table: Table): PromiseTableWriter<Table, EntsDataModel>;
|
|
127
|
+
};
|
|
128
|
+
declare class EntInstance<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> {
|
|
129
|
+
edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdge<EntsDataModel, Table, Edge>;
|
|
130
|
+
edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrThrow<EntsDataModel, Table, Edge>;
|
|
131
|
+
}
|
|
132
|
+
type Ent<Table extends TableNamesInDataModel<EntsDataModel>, Doc extends DocumentByName<EntsDataModel, Table>, EntsDataModel extends GenericEntsDataModel> = Doc & EntInstance<EntsDataModel, Table>;
|
|
133
|
+
type GenericEnt<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> = Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
|
|
134
|
+
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"]>;
|
|
135
|
+
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"]>;
|
|
136
|
+
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"]>;
|
|
137
|
+
interface PromiseOrderedQueryWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]>, PromiseOrderedQueryBase<EntsDataModel, Table> {
|
|
138
|
+
map<TOutput>(callbackFn: (value: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>, index: number, array: EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>[]) => Promise<TOutput> | TOutput): Promise<TOutput[]>;
|
|
139
|
+
take(n: number): PromiseEntsWriter<EntsDataModel, Table>;
|
|
140
|
+
firstX(): PromiseEntWriter<EntsDataModel, Table>;
|
|
141
|
+
uniqueX(): PromiseEntWriter<EntsDataModel, Table>;
|
|
142
|
+
}
|
|
143
|
+
interface PromiseQueryWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseOrderedQueryWriter<EntsDataModel, Table> {
|
|
144
|
+
order(order: "asc" | "desc", indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>): PromiseOrderedQueryWriter<EntsDataModel, Table>;
|
|
145
|
+
}
|
|
146
|
+
interface PromiseEntsWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends PromiseEnts<EntsDataModel, Table> {
|
|
147
|
+
firstX(): PromiseEntWriter<EntsDataModel, Table>;
|
|
148
|
+
uniqueX(): PromiseEntWriter<EntsDataModel, Table>;
|
|
149
|
+
}
|
|
150
|
+
interface PromiseTableWriter<Table extends TableNamesInDataModel<EntsDataModel>, EntsDataModel extends GenericEntsDataModel> extends PromiseQueryWriter<EntsDataModel, Table>, PromiseTableBase<EntsDataModel, Table> {
|
|
151
|
+
get<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, value0: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>): PromiseEntWriterOrNull<EntsDataModel, Table>;
|
|
152
|
+
get(id: GenericId<Table>): PromiseEntWriterOrNull<EntsDataModel, Table>;
|
|
153
|
+
/**
|
|
154
|
+
* Fetch a document from the DB using given index, throw if it doesn't exist.
|
|
155
|
+
*/
|
|
156
|
+
getX<Indexes extends EntsDataModel[Table]["indexes"], Index extends keyof Indexes>(indexName: Index, value0: FieldTypeFromFieldPath<DocumentByName<EntsDataModel, Table>, Indexes[Index][0]>): PromiseEnt<EntsDataModel, Table>;
|
|
157
|
+
/**
|
|
158
|
+
* Fetch a document from the DB for a given ID, throw if it doesn't exist.
|
|
159
|
+
*/
|
|
160
|
+
getX(id: GenericId<Table>): PromiseEntWriter<EntsDataModel, Table>;
|
|
161
|
+
/**
|
|
162
|
+
* Query by running a full text search against a search index.
|
|
163
|
+
*
|
|
164
|
+
* Search queries must always search for some text within the index's
|
|
165
|
+
* `searchField`. This query can optionally add equality filters for any
|
|
166
|
+
* `filterFields` specified in the index.
|
|
167
|
+
*
|
|
168
|
+
* Documents will be returned in relevance order based on how well they
|
|
169
|
+
* match the search text.
|
|
170
|
+
*
|
|
171
|
+
* To learn about full text search, see [Indexes](https://docs.convex.dev/text-search).
|
|
172
|
+
*
|
|
173
|
+
* @param indexName - The name of the search index to query.
|
|
174
|
+
* @param searchFilter - A search filter expression constructed with the
|
|
175
|
+
* supplied {@link SearchFilterBuilder}. This defines the full text search to run
|
|
176
|
+
* along with equality filtering to run within the search index.
|
|
177
|
+
* @returns - A query that searches for matching documents, returning them
|
|
178
|
+
* in relevancy order.
|
|
179
|
+
*/
|
|
180
|
+
search<IndexName extends SearchIndexNames<NamedTableInfo<EntsDataModel, Table>>>(indexName: IndexName, searchFilter: (q: SearchFilterBuilder<DocumentByName<EntsDataModel, Table>, NamedSearchIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>>) => SearchFilter): PromiseOrderedQueryWriter<EntsDataModel, Table>;
|
|
181
|
+
/**
|
|
182
|
+
* Insert a new document into a table.
|
|
183
|
+
*
|
|
184
|
+
* @param table - The name of the table to insert a new document into.
|
|
185
|
+
* @param value - The {@link Value} to insert into the given table.
|
|
186
|
+
* @returns - {@link GenericId} of the new document.
|
|
187
|
+
*/
|
|
188
|
+
insert(value: WithoutSystemFields<WithEdges<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>): PromiseEntId<EntsDataModel, Table>;
|
|
189
|
+
/**
|
|
190
|
+
* Insert new documents into a table.
|
|
191
|
+
*
|
|
192
|
+
* @param table - The name of the table to insert a new document into.
|
|
193
|
+
* @param value - The {@link Value} to insert into the given table.
|
|
194
|
+
* @returns - {@link GenericId} of the new document.
|
|
195
|
+
*/
|
|
196
|
+
insertMany(values: WithoutSystemFields<WithEdges<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>[]): Promise<GenericId<Table>[]>;
|
|
197
|
+
}
|
|
198
|
+
interface PromiseEntWriterOrNull<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel> | null> {
|
|
199
|
+
edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrNull<EntsDataModel, Table, Edge>;
|
|
200
|
+
doc(): Promise<DocumentByName<EntsDataModel, Table> | null>;
|
|
201
|
+
}
|
|
202
|
+
interface PromiseEntWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>> {
|
|
203
|
+
edge<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdge<EntsDataModel, Table, Edge>;
|
|
204
|
+
edgeX<Edge extends keyof EntsDataModel[Table]["edges"]>(edge: Edge): PromiseEdgeOrThrow<EntsDataModel, Table, Edge>;
|
|
205
|
+
doc(): Promise<DocumentByName<EntsDataModel, Table>>;
|
|
206
|
+
/**
|
|
207
|
+
* Patch this existing document, shallow merging it with the given partial
|
|
208
|
+
* document.
|
|
209
|
+
*
|
|
210
|
+
* New fields are added. Existing fields are overwritten. Fields set to
|
|
211
|
+
* `undefined` are removed.
|
|
212
|
+
*
|
|
213
|
+
* @param value - The partial {@link GenericDocument} to merge into this document. If this new value
|
|
214
|
+
* specifies system fields like `_id`, they must match the document's existing field values.
|
|
215
|
+
*/
|
|
216
|
+
patch(value: Partial<WithEdgePatches<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>): Promise<PromiseEntId<EntsDataModel, Table>>;
|
|
217
|
+
/**
|
|
218
|
+
* Replace the value of an existing document, overwriting its old value.
|
|
219
|
+
*
|
|
220
|
+
* @param value - The new {@link GenericDocument} for the document. This value can omit the system fields,
|
|
221
|
+
* and the database will preserve them in.
|
|
222
|
+
*/
|
|
223
|
+
replace(value: WithOptionalSystemFields<WithEdges<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>): Promise<PromiseEntId<EntsDataModel, Table>>;
|
|
224
|
+
/**
|
|
225
|
+
* Delete this existing document.
|
|
226
|
+
*
|
|
227
|
+
* @param id - The {@link GenericId} of the document to remove.
|
|
228
|
+
*/
|
|
229
|
+
delete(): Promise<GenericId<Table>>;
|
|
230
|
+
}
|
|
231
|
+
declare class EntWriterInstance<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends EntInstance<EntsDataModel, Table> {
|
|
232
|
+
/**
|
|
233
|
+
* Patch this existing document, shallow merging it with the given partial
|
|
234
|
+
* document.
|
|
235
|
+
*
|
|
236
|
+
* New fields are added. Existing fields are overwritten. Fields set to
|
|
237
|
+
* `undefined` are removed.
|
|
238
|
+
*
|
|
239
|
+
* @param value - The partial {@link GenericDocument} to merge into this document. If this new value
|
|
240
|
+
* specifies system fields like `_id`, they must match the document's existing field values.
|
|
241
|
+
*/
|
|
242
|
+
patch(value: Partial<WithEdgePatches<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>): PromiseEntId<EntsDataModel, Table>;
|
|
243
|
+
/**
|
|
244
|
+
* Replace the value of this existing document, overwriting its old value.
|
|
245
|
+
*
|
|
246
|
+
* @param value - The new {@link GenericDocument} for the document. This value can omit the system fields,
|
|
247
|
+
* and the database will preserve them in.
|
|
248
|
+
*/
|
|
249
|
+
replace(value: WithOptionalSystemFields<WithEdges<DocumentByName<EntsDataModel, Table>, EntsDataModel[Table]["edges"]>>): PromiseEntId<EntsDataModel, Table>;
|
|
250
|
+
/**
|
|
251
|
+
* Delete this existing document.
|
|
252
|
+
*
|
|
253
|
+
* @param id - The {@link GenericId} of the document to remove.
|
|
254
|
+
*/
|
|
255
|
+
delete(): Promise<GenericId<Table>>;
|
|
256
|
+
}
|
|
257
|
+
type EntWriter<Table extends TableNamesInDataModel<EntsDataModel>, Doc extends DocumentByName<EntsDataModel, Table>, EntsDataModel extends GenericEntsDataModel> = Doc & EntWriterInstance<EntsDataModel, Table>;
|
|
258
|
+
type GenericEntWriter<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> = EntWriter<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
|
|
259
|
+
interface PromiseEntId<EntsDataModel extends GenericEntsDataModel, Table extends TableNamesInDataModel<EntsDataModel>> extends Promise<GenericId<Table>> {
|
|
260
|
+
get(): PromiseEntWriter<EntsDataModel, Table>;
|
|
261
|
+
}
|
|
262
|
+
type DocRetriever<ID, Doc> = () => Promise<{
|
|
263
|
+
id: ID;
|
|
264
|
+
doc: () => Promise<Doc>;
|
|
265
|
+
}>;
|
|
266
|
+
declare function addEntRules<EntsDataModel extends GenericEntsDataModel>(entDefinitions: EntsDataModel, rules: {
|
|
267
|
+
[Table in keyof EntsDataModel]?: Table extends TableNamesInDataModel<EntsDataModel> ? {
|
|
268
|
+
read?: (ent: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>) => Promise<boolean>;
|
|
269
|
+
write?: (args: {
|
|
270
|
+
operation: "create";
|
|
271
|
+
ent: undefined;
|
|
272
|
+
value: WithoutSystemFields<DocumentByName<EntsDataModel, Table>>;
|
|
273
|
+
} | {
|
|
274
|
+
operation: "update";
|
|
275
|
+
ent: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
|
|
276
|
+
value: Partial<WithoutSystemFields<DocumentByName<EntsDataModel, Table>>>;
|
|
277
|
+
} | {
|
|
278
|
+
operation: "delete";
|
|
279
|
+
ent: Ent<Table, DocumentByName<EntsDataModel, Table>, EntsDataModel>;
|
|
280
|
+
value: undefined;
|
|
281
|
+
}) => Promise<boolean>;
|
|
282
|
+
} : never;
|
|
283
|
+
}): EntsDataModel;
|
|
284
|
+
declare function getReadRule(entDefinitions: GenericEntsDataModel, table: string): ((doc: GenericDocument) => Promise<boolean>) | undefined;
|
|
285
|
+
declare function getWriteRule(entDefinitions: GenericEntsDataModel, table: string): ((args: {
|
|
286
|
+
operation: "create";
|
|
287
|
+
ent: undefined;
|
|
288
|
+
value: {
|
|
289
|
+
[x: string]: convex_values.Value;
|
|
290
|
+
};
|
|
291
|
+
} | {
|
|
292
|
+
operation: "update";
|
|
293
|
+
ent: Ent<any, GenericDocument, any>;
|
|
294
|
+
value: Partial<{
|
|
295
|
+
[x: string]: convex_values.Value;
|
|
296
|
+
}>;
|
|
297
|
+
} | {
|
|
298
|
+
operation: "delete";
|
|
299
|
+
ent: Ent<any, GenericDocument, any>;
|
|
300
|
+
value: undefined;
|
|
301
|
+
}) => Promise<boolean>) | undefined;
|
|
302
|
+
|
|
303
|
+
export { type DocRetriever, type Ent, type GenericEnt, type GenericEntWriter, type PromiseEdge, type PromiseEdgeEnts, type PromiseEdgeEntsOrNull, type PromiseEdgeOrThrow, type PromiseEnt, type PromiseEntId, type PromiseEntOrNull, type PromiseEntWriter, type PromiseEntWriterOrNull, type PromiseEnts, type PromiseEntsOrNull, type PromiseEntsOrNulls, type PromiseEntsWriter, type PromiseOrderedQuery, type PromiseOrderedQueryBase, type PromiseOrderedQueryOrNull, type PromiseOrderedQueryWriter, type PromiseQuery, type PromiseQueryOrNull, type PromiseQueryWriter, type PromiseTable, type PromiseTableBase, type PromiseTableWriter, addEntRules, entWrapper, entsTableFactory, getReadRule, getWriteRule };
|