convex-ents 0.10.0 → 0.11.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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/actions.ts","../src/shared.ts"],"sourcesContent":["import {\n DocumentByName,\n ExpressionOrValue,\n FieldTypeFromFieldPath,\n FilterBuilder,\n FunctionReference,\n GenericActionCtx,\n GenericDataModel,\n GenericDocument,\n IndexNames,\n IndexRange,\n IndexRangeBuilder,\n NamedIndex,\n NamedSearchIndex,\n NamedTableInfo,\n PaginationOptions,\n PaginationResult,\n SearchFilter,\n SearchFilterBuilder,\n SearchIndexNames,\n TableNamesInDataModel,\n WithOptionalSystemFields,\n WithoutSystemFields,\n makeFunctionReference,\n} from \"convex/server\";\nimport { GenericId, JSONValue, NumericValue, Value } from \"convex/values\";\nimport { Ent, EntsTable, EntsTableWriter } from \"./functions\";\nimport { Expand, GenericEdgeConfig, GenericEntsDataModel } from \"./schema\";\nimport {\n EntsSystemDataModel,\n IndexFieldTypesForEq,\n PromiseEdgeResult,\n getEdgeDefinitions,\n} from \"./shared\";\nimport { WithEdgeInserts, WithEdgePatches, WithEdges } from \"./writer\";\n\nexport interface EntActionCtx<DataModel extends GenericDataModel> {\n runQuery: GenericActionCtx<DataModel>[\"runQuery\"];\n runMutation: GenericActionCtx<DataModel>[\"runMutation\"];\n vectorSearch: GenericActionCtx<DataModel>[\"vectorSearch\"];\n}\n\nexport type ActionReadFuncRef = FunctionReference<\n \"query\",\n \"internal\",\n {\n read: SerializedRead;\n },\n any\n>;\n\nexport type ActionWriteFuncRef = FunctionReference<\n \"mutation\",\n \"internal\",\n {\n write: SerializedWrite;\n },\n any\n>;\n\ntype SerializedRead = (\n | { table: [string, string?, ReadonlyArray<SerializedRangeExpression>?] }\n | { search: [string, ReadonlyArray<SerializedSearchFilter>] }\n | { order: [\"asc\" | \"desc\", string?] }\n | { normalizeId: string }\n | { normalizeIdX: string }\n | { get: any[] }\n | { getX: any[] }\n | { getMany: any[] }\n | { getManyX: any[] }\n | { filter: JSONValue }\n | { take: number }\n | { paginate: PaginationOptions }\n | { first: true }\n | { firstX: true }\n | { unique: true }\n | { uniqueX: true }\n | { edge: string }\n | { edgeX: string }\n | { has: GenericId<any> }\n)[];\n\ntype SerializedWrite = (\n | SerializedRead[number]\n | { insert: WithoutSystemFields<WithEdgeInserts<GenericDocument, any>> }\n | { insertMany: WithoutSystemFields<WithEdgeInserts<GenericDocument, any>>[] }\n | { patch: Partial<WithEdgePatches<GenericDocument, any>> }\n | { replace: WithOptionalSystemFields<WithEdges<GenericDocument, any>> }\n | { delete: true }\n)[];\n\ntype SerializedRangeExpression = {\n type: \"Eq\" | \"Gt\" | \"Gte\" | \"Lt\" | \"Lte\";\n fieldPath: string;\n value: JSONValue;\n};\n\nexport async function entsActionReadFactory(\n ctx: {\n table: EntsTable<any>;\n },\n args_: {\n [key: string]: unknown;\n },\n) {\n const { read } = args_ as { read: SerializedRead };\n let result: any;\n for (const call of read) {\n result = addMethodCall(ctx as any, call, result);\n }\n return await result;\n}\n\nexport async function entsActionWriteFactory(\n ctx: {\n table: EntsTableWriter<any>;\n },\n args_: {\n [key: string]: unknown;\n },\n) {\n const { write } = args_ as { write: SerializedWrite };\n let result: any;\n for (const call of write) {\n result = addMethodCall(ctx as any, call, result);\n }\n return await result;\n}\n\nfunction addMethodCall(\n ctx: {\n table: EntsTableWriter<any>;\n },\n call: SerializedWrite[number],\n result: any,\n) {\n if (\"table\" in call) {\n const [table, indexName, indexRange] = call.table;\n return ctx.table(table, indexName!, deserializeIndexRange(indexRange));\n } else if (\"search\" in call) {\n const [indexName, filters] = call.search;\n return result.search(indexName, deserializeSearchFilter(filters));\n } else if (\"normalizeId\" in call) {\n return result.normalizeId(call.normalizeId);\n } else if (\"normalizeIdX\" in call) {\n return result.normalizeIdX(call.normalizeIdX);\n } else if (\"get\" in call) {\n return result.get(...call.get);\n } else if (\"getX\" in call) {\n return result.getX(...call.getX);\n } else if (\"getMany\" in call) {\n return result.getMany(...call.getMany);\n } else if (\"getManyX\" in call) {\n return result.getManyX(...call.getManyX);\n } else if (\"filter\" in call) {\n return result.filter(deserializeFilterPredicate(call.filter));\n } else if (\"order\" in call) {\n return result.order(...call.order);\n } else if (\"take\" in call) {\n return result.take(call.take);\n } else if (\"paginate\" in call) {\n return result.paginate(call.paginate);\n } else if (\"first\" in call) {\n return result.first();\n } else if (\"firstX\" in call) {\n return result.firstX();\n } else if (\"unique\" in call) {\n return result.unique();\n } else if (\"uniqueX\" in call) {\n return result.uniqueX();\n } else if (\"edge\" in call) {\n return result.edge(call.edge);\n } else if (\"edgeX\" in call) {\n return result.edge(call.edgeX);\n } else if (\"has\" in call) {\n return result.has(call.has);\n } else if (\"insert\" in call) {\n return result.insert(call.insert);\n } else if (\"insertMany\" in call) {\n return result.insertMany(call.insertMany);\n } else if (\"patch\" in call) {\n return result.patch(call.patch);\n } else if (\"replace\" in call) {\n return result.replace(call.replace);\n } else if (\"delete\" in call) {\n return result.delete();\n } else {\n call satisfies never;\n }\n}\n\nexport type EntsTableAction<EntsDataModel extends GenericEntsDataModel> = {\n <\n Table extends TableNamesInDataModel<EntsDataModel>,\n IndexName extends IndexNames<NamedTableInfo<EntsDataModel, Table>>,\n >(\n table: Table,\n indexName: IndexName,\n indexRange?: (\n q: IndexRangeBuilder<\n DocumentByName<EntsDataModel, Table>,\n NamedIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>\n >,\n ) => IndexRange,\n ): PromiseTableAction<Table, EntsDataModel>;\n <Table extends TableNamesInDataModel<EntsDataModel>>(\n table: Table,\n ): PromiseTableAction<Table, EntsDataModel>;\n\n // TODO: Allow only reads\n system: EntsTableAction<EntsSystemDataModel>;\n};\n\nexport interface PromiseTableAction<\n Table extends TableNamesInDataModel<EntsDataModel>,\n EntsDataModel extends GenericEntsDataModel,\n> extends PromiseQueryAction<EntsDataModel, Table> {\n /**\n * If given a valid ID for the given table, returns it, or returns null if the ID\n * is from a different table or is not a valid ID.\n *\n * This does not guarantee that the ID exists (i.e. `table(\"foo\").get(id)` may return `null`).\n */\n normalizeId(id: string): Promise<GenericId<Table> | null>;\n\n /**\n * If given a valid ID for the given table, returns it, or throws if the ID\n * is from a different table or is not a valid ID.\n *\n * This does not guarantee that the ID exists (i.e. `table(\"foo\").get(id)` may return `null`).\n */\n normalizeIdX(id: string): Promise<GenericId<Table>>;\n\n get<\n Indexes extends EntsDataModel[Table][\"indexes\"],\n Index extends keyof Indexes,\n >(\n indexName: Index,\n ...values: IndexFieldTypesForEq<EntsDataModel, Table, Indexes[Index]>\n ): PromiseEntActionOrNull<EntsDataModel, Table>;\n get(id: GenericId<Table>): PromiseEntActionOrNull<EntsDataModel, Table>;\n /**\n * Fetch a unique document from the DB using given index, throw if it doesn't exist.\n */\n getX<\n Indexes extends EntsDataModel[Table][\"indexes\"],\n Index extends keyof Indexes,\n >(\n indexName: Index,\n ...values: IndexFieldTypesForEq<EntsDataModel, Table, Indexes[Index]>\n ): PromiseEntAction<EntsDataModel, Table>;\n /**\n * Fetch a document from the DB for a given ID, throw if it doesn't exist.\n */\n getX(id: GenericId<Table>): PromiseEntAction<EntsDataModel, Table>;\n\n getMany<\n Indexes extends EntsDataModel[Table][\"indexes\"],\n Index extends keyof Indexes,\n >(\n indexName: Index,\n values: FieldTypeFromFieldPath<\n DocumentByName<EntsDataModel, Table>,\n Indexes[Index][0]\n >[],\n ): PromiseEntsActionOrNulls<EntsDataModel, Table>;\n getMany(\n ids: GenericId<Table>[],\n ): PromiseEntsActionOrNulls<EntsDataModel, Table>;\n getManyX<\n Indexes extends EntsDataModel[Table][\"indexes\"],\n Index extends keyof Indexes,\n >(\n indexName: Index,\n values: FieldTypeFromFieldPath<\n DocumentByName<EntsDataModel, Table>,\n Indexes[Index][0]\n >[],\n ): PromiseEntsAction<EntsDataModel, Table>;\n getManyX(ids: GenericId<Table>[]): PromiseEntsAction<EntsDataModel, Table>;\n\n /**\n * Query by running a full text search against a search index.\n *\n * Search queries must always search for some text within the index's\n * `searchField`. This query can optionally add equality filters for any\n * `filterFields` specified in the index.\n *\n * Documents will be returned in relevance order based on how well they\n * match the search text.\n *\n * To learn about full text search, see [Indexes](https://docs.convex.dev/text-search).\n *\n * @param indexName - The name of the search index to query.\n * @param searchFilter - A search filter expression constructed with the\n * supplied {@link SearchFilterBuilder}. This defines the full text search to run\n * along with equality filtering to run within the search index.\n * @returns - A query that searches for matching documents, returning them\n * in relevancy order.\n */\n search<\n IndexName extends SearchIndexNames<NamedTableInfo<EntsDataModel, Table>>,\n >(\n indexName: IndexName,\n searchFilter: (\n q: SearchFilterBuilder<\n DocumentByName<EntsDataModel, Table>,\n NamedSearchIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>\n >,\n ) => SearchFilter,\n ): PromiseOrderedQueryAction<EntsDataModel, Table>;\n /**\n * Insert a new document into a table.\n *\n * @param table - The name of the table to insert a new document into.\n * @param value - The {@link Value} to insert into the given table.\n * @returns - {@link GenericId} of the new document.\n */\n insert(\n value: Expand<\n WithoutSystemFields<\n WithEdgeInserts<\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel[Table][\"edges\"]\n >\n >\n >,\n ): PromiseEntIdAction<EntsDataModel, Table>;\n /**\n * Insert new documents into a table.\n *\n * @param table - The name of the table to insert a new document into.\n * @param value - The {@link Value} to insert into the given table.\n * @returns - {@link GenericId} of the new document.\n */\n // TODO: Chain methods to get the written documents?\n insertMany(\n values: Expand<\n WithoutSystemFields<\n WithEdgeInserts<\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel[Table][\"edges\"]\n >\n >\n >[],\n ): Promise<GenericId<Table>[]>;\n}\n\nexport interface PromiseEntIdAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<GenericId<Table>> {\n get(): Promise<DocumentByName<EntsDataModel, Table>>;\n}\n\nexport interface PromiseEntActionOrNull<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<DocumentByName<EntsDataModel, Table> | null> {\n edge<Edge extends keyof EntsDataModel[Table][\"edges\"]>(\n edge: Edge,\n ): PromiseEdgeActionOrNull<EntsDataModel, Table, Edge>;\n}\n\nexport interface PromiseEntAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<DocumentByName<EntsDataModel, Table>> {\n edge<Edge extends keyof EntsDataModel[Table][\"edges\"]>(\n edge: Edge,\n ): PromiseEdgeAction<EntsDataModel, Table, Edge>;\n /**\n * Patch this existing document, shallow merging it with the given partial\n * document.\n *\n * New fields are added. Existing fields are overwritten. Fields set to\n * `undefined` are removed.\n *\n * @param value - The partial {@link GenericDocument} to merge into this document. If this new value\n * specifies system fields like `_id`, they must match the document's existing field values.\n */\n patch(\n value: Partial<\n Expand<\n WithEdgePatches<\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel[Table][\"edges\"]\n >\n >\n >,\n ): PromiseEntIdAction<EntsDataModel, Table>;\n\n /**\n * Replace the value of an existing document, overwriting its old value.\n *\n * @param value - The new {@link GenericDocument} for the document. This value can omit the system fields,\n * and the database will preserve them in.\n */\n replace(\n value: Expand<\n WithOptionalSystemFields<\n WithEdges<\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel[Table][\"edges\"]\n >\n >\n >,\n ): PromiseEntIdAction<EntsDataModel, Table>;\n\n /**\n * Delete this existing document.\n *\n * @param id - The {@link GenericId} of the document to remove.\n */\n delete(): Promise<GenericId<Table>>;\n}\n\nexport interface PromiseEntsActionOrNulls<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<(DocumentByName<EntsDataModel, Table> | null)[]> {}\n\nexport interface PromiseEntsActionOrNull<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<DocumentByName<EntsDataModel, Table>[] | null> {}\n\nexport interface PromiseEntsAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<DocumentByName<EntsDataModel, Table>[]> {}\n\nexport type PromiseEdgeAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n Edge extends keyof EntsDataModel[Table][\"edges\"],\n Config extends GenericEdgeConfig = EntsDataModel[Table][\"edges\"][Edge],\n ToTable extends\n TableNamesInDataModel<EntsDataModel> = EntsDataModel[Table][\"edges\"][Edge][\"to\"],\n> = PromiseEdgeResult<\n Config,\n PromiseEdgeEntsAction<EntsDataModel, ToTable>,\n PromiseQueryAction<EntsDataModel, ToTable>,\n PromiseEntActionOrNull<EntsDataModel, ToTable>,\n PromiseEntAction<EntsDataModel, ToTable>\n>;\n\nexport type PromiseEdgeActionOrThrow<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n Edge extends keyof EntsDataModel[Table][\"edges\"],\n Config extends GenericEdgeConfig = EntsDataModel[Table][\"edges\"][Edge],\n ToTable extends\n TableNamesInDataModel<EntsDataModel> = EntsDataModel[Table][\"edges\"][Edge][\"to\"],\n> = PromiseEdgeResult<\n Config,\n PromiseEdgeEntsAction<EntsDataModel, ToTable>,\n PromiseQueryAction<EntsDataModel, ToTable>,\n PromiseEntAction<EntsDataModel, ToTable>,\n PromiseEntAction<EntsDataModel, ToTable>\n>;\n\nexport type PromiseEdgeActionOrNull<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n Edge extends keyof EntsDataModel[Table][\"edges\"],\n Config extends GenericEdgeConfig = EntsDataModel[Table][\"edges\"][Edge],\n ToTable extends\n TableNamesInDataModel<EntsDataModel> = EntsDataModel[Table][\"edges\"][Edge][\"to\"],\n> = PromiseEdgeResult<\n Config,\n PromiseEdgeEntsActionOrNull<EntsDataModel, ToTable>,\n PromiseQueryActionOrNull<EntsDataModel, ToTable>,\n PromiseEntActionOrNull<EntsDataModel, ToTable>,\n PromiseEntActionOrNull<EntsDataModel, ToTable>\n>;\n\nexport interface PromiseEdgeOrderedEntsActionOrNull<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends PromiseEntsActionOrNull<EntsDataModel, Table> {\n /**\n * Paginate the ents on the other end of the edge.\n * Results are ordered by edge's `_creationTime`.\n */\n paginate(\n paginationOpts: PaginationOptions,\n ): PromisePaginationResultActionOrNull<EntsDataModel, Table>;\n\n /**\n * Take the first `n` ents on the other end of the edge\n * ordered by edge's `_creationTime`.\n */\n take(n: number): PromiseEntsActionOrNull<EntsDataModel, Table>;\n\n /**\n * Returns the first ent on the other end of the edge\n * ordered by edge's `_creationTime`, or `null`.\n */\n first(): PromiseEntActionOrNull<EntsDataModel, Table>;\n\n /**\n * Returns the only ent on the other end of the edge,\n * `null` if there are none, or throws if there are more than one.\n */\n unique(): PromiseEntActionOrNull<EntsDataModel, Table>;\n}\n\nexport interface PromiseEdgeEntsActionOrNull<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends PromiseEdgeOrderedEntsActionOrNull<EntsDataModel, Table> {\n /**\n * Returns whether there is an ent with given ID on the other side\n * the edge. Returns null if chained to a null result.\n * @param id The ID of the ent on the other end of the edge\n */\n has(id: GenericId<Table>): Promise<boolean | null>;\n\n /**\n * Query the ents on the other end of the edge\n * ordered by edge's `_creationTime`.\n */\n order(\n order: \"asc\" | \"desc\",\n indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>,\n ): PromiseEdgeOrderedEntsActionOrNull<EntsDataModel, Table>;\n}\n\nexport interface PromiseEdgeOrderedEntsAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends PromiseEntsAction<EntsDataModel, Table> {\n /**\n * Paginate the ents on the other end of the edge.\n * Results are ordered by edge's `_creationTime`.\n */\n paginate(\n paginationOpts: PaginationOptions,\n ): PromisePaginationResultAction<EntsDataModel, Table>;\n\n /**\n * Take the first `n` ents on the other end of the edge\n * ordered by edge's `_creationTime`.\n */\n take(n: number): PromiseEntsAction<EntsDataModel, Table>;\n\n /**\n * Returns the first ent on the other end of the edge\n * ordered by edge's `_creationTime`, or `null`.\n */\n first(): PromiseEntActionOrNull<EntsDataModel, Table>;\n\n /**\n * Returns the first ent on the other end of the edge\n * ordered by edge's `_creationTime`, or throws if there\n * are no ents on the other end of the edge.\n */\n firstX(): PromiseEntAction<EntsDataModel, Table>;\n\n /**\n * Returns the only ent on the other end of the edge,\n * `null` if there are none, or throws if there are more than one.\n */\n unique(): PromiseEntActionOrNull<EntsDataModel, Table>;\n\n /**\n * Returns the only ent on the other end of the edge,\n * or throws if there are none or more than one.\n */\n uniqueX(): PromiseEntAction<EntsDataModel, Table>;\n}\n\nexport interface PromiseEdgeEntsAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends PromiseEdgeOrderedEntsAction<EntsDataModel, Table> {\n /**\n * Returns whether there is an ent with given ID on the other side\n * the edge.\n * @param id The ID of the ent on the other end of the edge\n */\n has(id: GenericId<Table>): Promise<boolean>;\n\n /**\n * Query the ents on the other end of the edge\n * ordered by edge's `_creationTime`.\n */\n order(\n order: \"asc\" | \"desc\",\n indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>,\n ): PromiseEdgeOrderedEntsAction<EntsDataModel, Table>;\n}\n\nexport interface PromiseOrderedQueryAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<DocumentByName<EntsDataModel, Table>[]> {\n filter(\n predicate: (\n q: FilterBuilder<NamedTableInfo<EntsDataModel, Table>>,\n ) => ExpressionOrValue<boolean>,\n ): this;\n paginate(\n paginationOpts: PaginationOptions,\n ): PromisePaginationResultAction<EntsDataModel, Table>;\n take(n: number): PromiseEntsAction<EntsDataModel, Table>;\n first(): PromiseEntActionOrNull<EntsDataModel, Table>;\n firstX(): PromiseEntAction<EntsDataModel, Table>;\n unique(): PromiseEntActionOrNull<EntsDataModel, Table>;\n uniqueX(): PromiseEntAction<EntsDataModel, Table>;\n}\n\nexport interface PromiseQueryAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends PromiseOrderedQueryAction<EntsDataModel, Table> {\n order(\n order: \"asc\" | \"desc\",\n indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>,\n ): PromiseOrderedQueryAction<EntsDataModel, Table>;\n}\n\nexport interface PromisePaginationResultActionOrNull<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<PaginationResult<\n DocumentByName<EntsDataModel, Table>\n > | null> {}\n\nexport interface PromisePaginationResultAction<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<PaginationResult<DocumentByName<EntsDataModel, Table>>> {}\n\nexport interface PromiseOrderedQueryActionOrNull<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<DocumentByName<EntsDataModel, Table>[] | null> {\n filter(\n predicate: (\n q: FilterBuilder<NamedTableInfo<EntsDataModel, Table>>,\n ) => ExpressionOrValue<boolean>,\n ): this;\n paginate(\n paginationOpts: PaginationOptions,\n ): PromisePaginationResultActionOrNull<EntsDataModel, Table>;\n take(n: number): PromiseEntsActionOrNull<EntsDataModel, Table>;\n first(): PromiseEntActionOrNull<EntsDataModel, Table>;\n unique(): PromiseEntActionOrNull<EntsDataModel, Table>;\n}\n\nexport interface PromiseQueryActionOrNull<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends PromiseOrderedQueryActionOrNull<EntsDataModel, Table> {\n // TODO: The index variant should not be allowed if\n // this query already used an index\n order(\n order: \"asc\" | \"desc\",\n indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>,\n ): PromiseOrderedQueryActionOrNull<EntsDataModel, Table>;\n}\n\nclass PromiseQueryActionOrNullImpl<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n >\n extends Promise<DocumentByName<EntsDataModel, Table>[] | null>\n implements PromiseQueryActionOrNull<EntsDataModel, Table>\n{\n constructor(\n protected ctx: EntActionCtx<EntsDataModel>,\n protected entDefinitions: EntsDataModel,\n protected table: Table,\n protected read: SerializedRead,\n ) {\n super(() => {});\n }\n\n filter(\n predicate: (\n q: FilterBuilder<NamedTableInfo<EntsDataModel, Table>>,\n ) => ExpressionOrValue<boolean>,\n ): any {\n return new PromiseQueryActionOrNullImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n this.read.concat({ filter: serializeFilterPredicate(predicate) }),\n );\n }\n\n order(\n order: \"asc\" | \"desc\",\n indexName?: IndexNames<NamedTableInfo<EntsDataModel, Table>>,\n ): any {\n return new PromiseQueryActionOrNullImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n this.read.concat({\n order: [\n order,\n ...(indexName === undefined\n ? ([] as const)\n : ([indexName as string | undefined] as const)),\n ],\n }),\n );\n }\n\n paginate(paginationOpts: PaginationOptions) {\n return new PromisePaginationResultActionOrNullImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n this.read.concat({ paginate: paginationOpts }),\n );\n }\n\n async take(n: number) {\n return await runRead(this.ctx, this.read.concat({ take: n }));\n }\n\n first() {\n return new PromiseEntActionImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n this.read.concat({ first: true }),\n ) as any;\n }\n\n firstX() {\n return new PromiseEntActionImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n this.read.concat({ firstX: true }),\n ) as any;\n }\n\n unique() {\n return new PromiseEntActionImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n this.read.concat({ unique: true }),\n ) as any;\n }\n\n uniqueX() {\n return new PromiseEntActionImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n this.read.concat({ uniqueX: true }),\n ) as any;\n }\n\n then<\n TResult1 = DocumentByName<EntsDataModel, Table>[] | null,\n TResult2 = never,\n >(\n onfulfilled?:\n | ((\n value: DocumentByName<EntsDataModel, Table>[] | null,\n ) => TResult1 | PromiseLike<TResult1>)\n | undefined\n | null,\n onrejected?:\n | ((reason: any) => TResult2 | PromiseLike<TResult2>)\n | undefined\n | null,\n ): Promise<TResult1 | TResult2> {\n const docs = runRead(this.ctx, this.read);\n return docs.then(onfulfilled, onrejected);\n }\n}\n\nclass PromiseEdgeActionOrNullImpl<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends PromiseQueryActionOrNullImpl<EntsDataModel, Table> {\n async has(targetId: GenericId<Table>) {\n return runRead(this.ctx, this.read.concat({ has: targetId }));\n }\n}\n\nexport class PromiseTableActionImpl<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends PromiseQueryActionOrNullImpl<EntsDataModel, Table> {\n constructor(\n ctx: EntActionCtx<EntsDataModel>,\n entDefinitions: EntsDataModel,\n table: Table,\n ) {\n super(ctx, entDefinitions, table, [{ table: [table] }]);\n }\n\n get(...args: any[]) {\n return new PromiseEntActionImpl(\n this.ctx as any,\n this.entDefinitions,\n this.table,\n this.read.concat({ get: args }),\n );\n }\n\n getX(...args: any[]) {\n return new PromiseEntActionImpl(\n this.ctx as any,\n this.entDefinitions,\n this.table,\n this.read.concat({ getX: args }),\n );\n }\n\n async getMany(...args: any[]) {\n return await runRead(this.ctx, this.read.concat({ getMany: args }));\n }\n\n async getManyX(...args: any[]) {\n return await runRead(this.ctx, this.read.concat({ getManyX: args }));\n }\n\n async normalizeId(id: string): Promise<GenericId<Table> | null> {\n return await runRead(this.ctx, this.read.concat({ normalizeId: id }));\n }\n\n async normalizeIdX(id: string): Promise<GenericId<Table>> {\n return await runRead(this.ctx, this.read.concat({ normalizeIdX: id }));\n }\n\n withIndex(\n indexName: IndexNames<NamedTableInfo<EntsDataModel, Table>>,\n indexRange?: (\n q: IndexRangeBuilder<\n DocumentByName<EntsDataModel, Table>,\n NamedIndex<NamedTableInfo<EntsDataModel, Table>, typeof indexName>\n >,\n ) => IndexRange,\n ) {\n return new PromiseQueryActionOrNullImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n [\n {\n table: [\n this.table,\n indexName as string | undefined,\n serializeIndexRange(indexRange),\n ],\n },\n ],\n );\n }\n\n search<\n IndexName extends SearchIndexNames<NamedTableInfo<EntsDataModel, Table>>,\n >(\n indexName: IndexName,\n searchFilter: (\n q: SearchFilterBuilder<\n DocumentByName<EntsDataModel, Table>,\n NamedSearchIndex<NamedTableInfo<EntsDataModel, Table>, IndexName>\n >,\n ) => SearchFilter,\n ) {\n return new PromiseQueryActionOrNullImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n this.read.concat({\n search: [indexName as string, serializeSearchFilter(searchFilter)],\n }),\n );\n }\n\n insert(\n value: WithoutSystemFields<\n WithEdgeInserts<\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel[Table][\"edges\"]\n >\n >,\n ) {\n return new PromiseEntIdActionImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n (this.read as SerializedWrite).concat({ insert: value }),\n );\n }\n\n // TODO: fluent API\n async insertMany(\n values: WithoutSystemFields<\n WithEdgeInserts<\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel[Table][\"edges\"]\n >\n >[],\n ) {\n return await runWrite(\n this.ctx,\n (this.read as SerializedWrite).concat({ insertMany: values }),\n );\n }\n}\n\nclass PromisePaginationResultActionOrNullImpl<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n >\n extends Promise<PaginationResult<DocumentByName<EntsDataModel, Table>> | null>\n implements PromisePaginationResultActionOrNull<EntsDataModel, Table>\n{\n constructor(\n private ctx: EntActionCtx<EntsDataModel>,\n private entDefinitions: EntsDataModel,\n private table: Table,\n private read: SerializedRead,\n ) {\n super(() => {});\n }\n\n then<\n TResult1 = DocumentByName<EntsDataModel, Table>[] | null,\n TResult2 = never,\n >(\n onfulfilled?:\n | ((\n value: PaginationResult<DocumentByName<EntsDataModel, Table>> | null,\n ) => TResult1 | PromiseLike<TResult1>)\n | undefined\n | null,\n onrejected?:\n | ((reason: any) => TResult2 | PromiseLike<TResult2>)\n | undefined\n | null,\n ): Promise<TResult1 | TResult2> {\n return runRead(this.ctx, this.read).then(onfulfilled, onrejected);\n }\n}\n\nclass PromiseEntActionImpl<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n> extends Promise<DocumentByName<EntsDataModel, Table> | null> {\n constructor(\n protected ctx: EntActionCtx<EntsDataModel>,\n protected entDefinitions: EntsDataModel,\n protected table: Table,\n protected read: SerializedRead,\n ) {\n super(() => {});\n }\n\n then<\n TResult1 = Ent<\n Table,\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel\n > | null,\n TResult2 = never,\n >(\n onfulfilled?:\n | ((\n value: Ent<\n Table,\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel\n > | null,\n ) => TResult1 | PromiseLike<TResult1>)\n | undefined\n | null,\n onrejected?:\n | ((reason: any) => TResult2 | PromiseLike<TResult2>)\n | undefined\n | null,\n ): Promise<TResult1 | TResult2> {\n return runRead(this.ctx, this.read).then(onfulfilled, onrejected);\n }\n\n edge<Edge extends keyof EntsDataModel[Table][\"edges\"]>(edge: Edge) {\n return this.edgeImpl(edge);\n }\n\n edgeX<Edge extends keyof EntsDataModel[Table][\"edges\"]>(edge: Edge) {\n return this.edgeImpl(edge, true);\n }\n\n edgeImpl<Edge extends keyof EntsDataModel[Table][\"edges\"]>(\n edge: Edge,\n throwIfNull = false,\n ) {\n const edgeDefinition = getEdgeDefinitions(this.entDefinitions, this.table)[\n edge\n ];\n const read = throwIfNull\n ? { edgeX: edge as string }\n : { edge: edge as string };\n\n if (edgeDefinition.cardinality === \"multiple\") {\n if (edgeDefinition.type === \"ref\") {\n return new PromiseEdgeActionOrNullImpl(\n this.ctx,\n this.entDefinitions,\n edgeDefinition.to,\n this.read.concat(read),\n ) as any;\n }\n return new PromiseQueryActionOrNullImpl(\n this.ctx,\n this.entDefinitions,\n edgeDefinition.to,\n this.read.concat(read),\n ) as any;\n }\n\n return new PromiseEntActionImpl(\n this.ctx as any,\n this.entDefinitions,\n edgeDefinition.to,\n this.read.concat(read),\n ) as any;\n }\n\n patch(\n value: Partial<\n WithEdgePatches<\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel[Table][\"edges\"]\n >\n >,\n ) {\n return new PromiseEntIdActionImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n (this.read as SerializedWrite).concat({ patch: value }),\n );\n }\n\n replace(\n value: WithOptionalSystemFields<\n WithEdges<\n DocumentByName<EntsDataModel, Table>,\n EntsDataModel[Table][\"edges\"]\n >\n >,\n ) {\n return new PromiseEntIdActionImpl(\n this.ctx,\n this.entDefinitions,\n this.table,\n (this.read as SerializedWrite).concat({ replace: value }),\n );\n }\n\n async delete() {\n return await runWrite(\n this.ctx,\n (this.read as SerializedWrite).concat({ delete: true }),\n );\n }\n}\n\nclass PromiseEntIdActionImpl<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n >\n extends Promise<GenericId<Table>>\n implements PromiseEntIdAction<EntsDataModel, Table>\n{\n constructor(\n private ctx: EntActionCtx<EntsDataModel>,\n private entDefinitions: EntsDataModel,\n private table: Table,\n private write: SerializedWrite,\n ) {\n super(() => {});\n }\n\n async get() {\n return await runWrite(this.ctx, this.write.concat({ get: [] }));\n }\n\n then<TResult1 = GenericId<Table>, TResult2 = never>(\n onfulfilled?:\n | ((value: GenericId<Table>) => TResult1 | PromiseLike<TResult1>)\n | undefined\n | null,\n onrejected?:\n | ((reason: any) => TResult2 | PromiseLike<TResult2>)\n | undefined\n | null,\n ): Promise<TResult1 | TResult2> {\n return runWrite(this.ctx, this.write).then(onfulfilled, onrejected);\n }\n}\n\nasync function runRead(ctx: EntActionCtx<any>, read: SerializedRead) {\n const readRef =\n (ctx as any)?.actionRead ??\n (makeFunctionReference(\"functions:read\") as unknown as ActionReadFuncRef);\n return await ctx.runQuery(readRef, { read });\n}\n\nasync function runWrite(ctx: EntActionCtx<any>, write: SerializedWrite) {\n const writeRef =\n (ctx as any)?.actionRead ??\n (makeFunctionReference(\"functions:write\") as unknown as ActionWriteFuncRef);\n return await ctx.runMutation(writeRef, { write });\n}\n\nclass IndexRangeBuilderImpl {\n private constructor(\n public rangeExpressions: ReadonlyArray<SerializedRangeExpression>,\n ) {}\n\n static new(): IndexRangeBuilderImpl {\n return new IndexRangeBuilderImpl([]);\n }\n\n eq(fieldName: string, value: Value) {\n return new IndexRangeBuilderImpl(\n this.rangeExpressions.concat({\n type: \"Eq\",\n fieldPath: fieldName,\n value: value === undefined ? \"$undefined\" : (value as any),\n }),\n );\n }\n\n gt(fieldName: string, value: Value) {\n return new IndexRangeBuilderImpl(\n this.rangeExpressions.concat({\n type: \"Gt\",\n fieldPath: fieldName,\n value: value as any,\n }),\n );\n }\n gte(fieldName: string, value: Value) {\n return new IndexRangeBuilderImpl(\n this.rangeExpressions.concat({\n type: \"Gte\",\n fieldPath: fieldName,\n value: value as any,\n }),\n );\n }\n lt(fieldName: string, value: Value) {\n return new IndexRangeBuilderImpl(\n this.rangeExpressions.concat({\n type: \"Lt\",\n fieldPath: fieldName,\n value: value as any,\n }),\n );\n }\n lte(fieldName: string, value: Value) {\n return new IndexRangeBuilderImpl(\n this.rangeExpressions.concat({\n type: \"Lte\",\n fieldPath: fieldName,\n value: value as any,\n }),\n );\n }\n}\n\nfunction serializeIndexRange(\n indexRange?: (q: IndexRangeBuilder<any, any>) => IndexRange,\n): Readonly<SerializedRangeExpression[]> | undefined {\n if (indexRange === undefined) {\n return undefined;\n }\n return (\n indexRange?.(\n IndexRangeBuilderImpl.new() as any,\n ) as unknown as IndexRangeBuilderImpl\n ).rangeExpressions;\n}\n\nfunction deserializeIndexRange(\n rangeExpressions: Readonly<SerializedRangeExpression[]> | undefined,\n) {\n if (rangeExpressions === undefined) {\n return undefined;\n }\n return (q: any) => {\n for (const range of rangeExpressions) {\n switch (range.type) {\n case \"Eq\":\n q = q.eq(\n range.fieldPath,\n range.value === \"$undefined\" ? undefined : range.value,\n );\n break;\n case \"Gt\":\n q = q.gt(range.fieldPath, range.value);\n break;\n case \"Gte\":\n q = q.gte(range.fieldPath, range.value);\n break;\n case \"Lt\":\n q = q.lt(range.fieldPath, range.value);\n break;\n case \"Lte\":\n q = q.lte(range.fieldPath, range.value);\n break;\n }\n }\n return q;\n };\n}\n\nfunction serializeFilterPredicate(\n predicate: (q: FilterBuilder<any>) => ExpressionOrValue<boolean>,\n) {\n return serializeExpression(predicate(filterBuilderImpl as any));\n}\n\nfunction deserializeFilterPredicate(predicate: JSONValue) {\n return (q: any) => deserializeFilterExpression(q, predicate);\n}\n\nconst binaryOps = [\n \"eq\",\n \"neq\",\n \"lt\",\n \"lte\",\n \"gt\",\n \"gte\",\n \"add\",\n \"sub\",\n \"mul\",\n \"div\",\n \"mod\",\n \"and\",\n \"or\",\n] as const;\n\nfunction deserializeFilterExpression(\n q: FilterBuilder<any>,\n expression: any,\n): ExpressionOrValue<any> {\n if (\"field\" in expression) {\n const fieldPath = expression[\"field\"];\n return q.field(fieldPath);\n }\n if (\"literal\" in expression) {\n const literal = expression[\"literal\"];\n return literal === \"$undefined\" ? undefined : literal;\n }\n if (\"neg\" in expression) {\n return q.neg(deserializeFilterExpression(q, expression[\"neg\"]));\n }\n if (\"not\" in expression) {\n return q.not(deserializeFilterExpression(q, expression[\"not\"]));\n }\n for (const op of binaryOps) {\n if (op in expression) {\n const [l, r] = expression[op];\n return (q[op] as any)(\n deserializeFilterExpression(q, l),\n deserializeFilterExpression(q, r),\n );\n }\n }\n throw new Error(\n \"Expected a valid filter expression, got \" + JSON.stringify(expression),\n );\n}\n\nconst filterBuilderImpl = {\n // Comparisons /////////////////////////////////////////////////////////////\n\n eq<T extends Value | undefined>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n eq: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n neq<T extends Value | undefined>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n neq: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n lt<T extends Value>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n lt: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n lte<T extends Value>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n lte: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n gt<T extends Value>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n gt: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n gte<T extends Value>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n gte: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n // Arithmetic //////////////////////////////////////////////////////////////\n\n add<T extends NumericValue>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n add: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n sub<T extends NumericValue>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n sub: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n mul<T extends NumericValue>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n mul: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n div<T extends NumericValue>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n div: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n mod<T extends NumericValue>(\n l: ExpressionOrValue<T>,\n r: ExpressionOrValue<T>,\n ): FilterExpression {\n return new FilterExpression({\n mod: [serializeExpression(l), serializeExpression(r)],\n });\n },\n\n neg<T extends NumericValue>(x: ExpressionOrValue<T>): FilterExpression {\n return new FilterExpression({ neg: serializeExpression(x) });\n },\n\n // Logic ///////////////////////////////////////////////////////////////////\n\n and(...exprs: Array<ExpressionOrValue<boolean>>): FilterExpression {\n return new FilterExpression({ and: exprs.map(serializeExpression) });\n },\n\n or(...exprs: Array<ExpressionOrValue<boolean>>): FilterExpression {\n return new FilterExpression({ or: exprs.map(serializeExpression) });\n },\n\n not(x: ExpressionOrValue<boolean>): FilterExpression {\n return new FilterExpression({ not: serializeExpression(x) });\n },\n\n // Other ///////////////////////////////////////////////////////////////////\n field(fieldPath: string): FilterExpression {\n return new FilterExpression({ field: fieldPath });\n },\n};\n\nexport function serializeExpression(\n expr: ExpressionOrValue<Value | undefined>,\n): JSONValue {\n if (expr instanceof FilterExpression) {\n return expr.serialize();\n } else {\n return {\n literal: expr === undefined ? \"$undefined\" : (expr as any),\n };\n }\n}\n\nclass FilterExpression {\n private inner: JSONValue;\n constructor(inner: JSONValue) {\n this.inner = inner;\n }\n\n serialize(): JSONValue {\n return this.inner;\n }\n}\n\nfunction serializeSearchFilter(\n searchFilter: (q: SearchFilterBuilder<any, any>) => SearchFilter,\n) {\n return (\n searchFilter(\n SearchFilterBuilderImpl.new() as any,\n ) as unknown as SearchFilterBuilderImpl\n ).export();\n}\n\nfunction deserializeSearchFilter(\n filters: ReadonlyArray<SerializedSearchFilter>,\n) {\n return (q: any) => {\n for (const filter of filters) {\n switch (filter.type) {\n case \"Search\":\n q = q.search(filter.fieldPath, filter.value);\n break;\n case \"Eq\":\n q = q.eq(\n filter.fieldPath,\n filter.value === \"$undefined\" ? undefined : filter.value,\n );\n break;\n }\n }\n return q;\n };\n}\n\nexport type SerializedSearchFilter =\n | {\n type: \"Search\";\n fieldPath: string;\n value: string;\n }\n | {\n type: \"Eq\";\n fieldPath: string;\n value: Value;\n };\n\nclass SearchFilterBuilderImpl {\n private constructor(public filters: ReadonlyArray<SerializedSearchFilter>) {}\n\n static new(): SearchFilterBuilderImpl {\n return new SearchFilterBuilderImpl([]);\n }\n\n search(fieldName: string, query: string) {\n return new SearchFilterBuilderImpl(\n this.filters.concat({\n type: \"Search\",\n fieldPath: fieldName,\n value: query,\n }),\n );\n }\n\n eq<FieldName extends string>(\n fieldName: FieldName,\n value: FieldTypeFromFieldPath<GenericDocument, FieldName>,\n ) {\n return new SearchFilterBuilderImpl(\n this.filters.concat({\n type: \"Eq\",\n fieldPath: fieldName,\n value: value === undefined ? \"$undefiend\" : value,\n }),\n );\n }\n\n export() {\n return this.filters;\n }\n}\n","import {\n DocumentByName,\n FieldTypeFromFieldPath,\n SystemDataModel,\n TableNamesInDataModel,\n} from \"convex/server\";\nimport { EdgeConfig, GenericEdgeConfig, GenericEntsDataModel } from \"./schema\";\n\nexport type EntsSystemDataModel = {\n [key in keyof SystemDataModel]: SystemDataModel[key] & {\n edges: Record<string, never>;\n };\n};\n\nexport type PromiseEdgeResult<\n EdgeConfig extends GenericEdgeConfig,\n MultipleRef,\n MultipleField,\n SingleRef,\n SingleField,\n> = EdgeConfig[\"cardinality\"] extends \"multiple\"\n ? EdgeConfig[\"type\"] extends \"ref\"\n ? MultipleRef\n : MultipleField\n : EdgeConfig[\"type\"] extends \"ref\"\n ? SingleRef\n : SingleField;\n\nexport type IndexFieldTypesForEq<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n T extends string[],\n> = Pop<{\n [K in keyof T]: FieldTypeFromFieldPath<\n DocumentByName<EntsDataModel, Table>,\n T[K]\n >;\n}>;\n\ntype Pop<T extends any[]> = T extends [...infer Rest, infer _Last]\n ? Rest\n : never;\n\nexport function getEdgeDefinitions<\n EntsDataModel extends GenericEntsDataModel,\n Table extends TableNamesInDataModel<EntsDataModel>,\n>(entDefinitions: EntsDataModel, table: Table) {\n return entDefinitions[table].edges as Record<\n keyof EntsDataModel[Table][\"edges\"],\n EdgeConfig\n >;\n}\n"],"mappings":"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","names":[]}