@proofkit/fmodata
Version:
FileMaker OData API client
58 lines (57 loc) • 5.17 kB
TypeScript
import { ExecutionContext, InferSchemaType, InsertData, UpdateData } from '../types.js';
import { StandardSchemaV1 } from '@standard-schema/spec';
import { BaseTable } from './base-table.js';
import { TableOccurrence } from './table-occurrence.js';
import { QueryBuilder } from './query-builder.js';
import { RecordBuilder } from './record-builder.js';
import { InsertBuilder } from './insert-builder.js';
import { DeleteBuilder } from './delete-builder.js';
import { UpdateBuilder } from './update-builder.js';
import { Database } from './database.js';
type ExtractNavigationNames<O extends TableOccurrence<any, any, any, any> | undefined> = O extends TableOccurrence<any, any, infer Nav, any> ? Nav extends Record<string, any> ? keyof Nav & string : never : never;
type ExtractSchemaFromOccurrence<O> = O extends TableOccurrence<infer BT, any, any, any> ? BT extends BaseTable<infer S, any, any, any> ? S : never : never;
type ExtractDefaultSelect<O> = O extends TableOccurrence<infer BT, any, any, infer DefSelect> ? BT extends BaseTable<infer S, any, any, any> ? DefSelect extends "all" ? keyof S : DefSelect extends "schema" ? keyof S : DefSelect extends readonly (infer K)[] ? K & keyof S : keyof S : never : never;
type ResolveNavigationItem<T> = T extends () => infer R ? R : T;
type FindNavigationTarget<O extends TableOccurrence<any, any, any, any> | undefined, Name extends string> = O extends TableOccurrence<any, any, infer Nav, any> ? Nav extends Record<string, any> ? Name extends keyof Nav ? ResolveNavigationItem<Nav[Name]> : TableOccurrence<BaseTable<Record<string, StandardSchemaV1>, any, any, any>, any, any, any> : TableOccurrence<BaseTable<Record<string, StandardSchemaV1>, any, any, any>, any, any, any> : TableOccurrence<BaseTable<Record<string, StandardSchemaV1>, any, any, any>, any, any, any>;
export declare class EntitySet<Schema extends Record<string, StandardSchemaV1> = any, Occ extends TableOccurrence<any, any, any, any> | undefined = undefined> {
private occurrence?;
private tableName;
private databaseName;
private context;
private database;
private isNavigateFromEntitySet?;
private navigateRelation?;
private navigateSourceTableName?;
constructor(config: {
occurrence?: Occ;
tableName: string;
databaseName: string;
context: ExecutionContext;
database?: any;
});
static create<OccurrenceSchema extends Record<string, StandardSchemaV1>, Occ extends TableOccurrence<BaseTable<OccurrenceSchema, any, any, any>, any, any, any> | undefined = undefined>(config: {
occurrence?: Occ;
tableName: string;
databaseName: string;
context: ExecutionContext;
database: Database<any>;
}): EntitySet<OccurrenceSchema, Occ>;
list(): QueryBuilder<InferSchemaType<Schema>, Occ extends TableOccurrence<any, any, any, any> ? ExtractDefaultSelect<Occ> : keyof InferSchemaType<Schema>, false, false, Occ>;
get(id: string | number): RecordBuilder<InferSchemaType<Schema>, false, keyof InferSchemaType<Schema>, Occ>;
insert(data: Occ extends TableOccurrence<infer BT, any, any, any> ? BT extends BaseTable<any, any, any, any> ? InsertData<BT> : Partial<InferSchemaType<Schema>> : Partial<InferSchemaType<Schema>>, options: {
returnFullRecord: false;
}): InsertBuilder<InferSchemaType<Schema>, Occ, "minimal">;
insert(data: Occ extends TableOccurrence<infer BT, any, any, any> ? BT extends BaseTable<any, any, any, any> ? InsertData<BT> : Partial<InferSchemaType<Schema>> : Partial<InferSchemaType<Schema>>, options?: {
returnFullRecord?: true;
}): InsertBuilder<InferSchemaType<Schema>, Occ, "representation">;
update(data: Occ extends TableOccurrence<infer BT, any, any, any> ? BT extends BaseTable<any, any, any, any> ? UpdateData<BT> : Partial<InferSchemaType<Schema>> : Partial<InferSchemaType<Schema>>, options: {
returnFullRecord: true;
}): UpdateBuilder<InferSchemaType<Schema>, Occ extends TableOccurrence<infer BT, any, any, any> ? BT extends BaseTable<any, any, any, any> ? BT : BaseTable<Schema, any, any, any> : BaseTable<Schema, any, any, any>, "representation">;
update(data: Occ extends TableOccurrence<infer BT, any, any, any> ? BT extends BaseTable<any, any, any, any> ? UpdateData<BT> : Partial<InferSchemaType<Schema>> : Partial<InferSchemaType<Schema>>, options?: {
returnFullRecord?: false;
}): UpdateBuilder<InferSchemaType<Schema>, Occ extends TableOccurrence<infer BT, any, any, any> ? BT extends BaseTable<any, any, any, any> ? BT : BaseTable<Schema, any, any, any> : BaseTable<Schema, any, any, any>, "minimal">;
delete(): DeleteBuilder<InferSchemaType<Schema>>;
navigate<RelationName extends ExtractNavigationNames<Occ>>(relationName: RelationName): EntitySet<ExtractSchemaFromOccurrence<FindNavigationTarget<Occ, RelationName>> extends Record<string, StandardSchemaV1> ? ExtractSchemaFromOccurrence<FindNavigationTarget<Occ, RelationName>> : Record<string, StandardSchemaV1>, FindNavigationTarget<Occ, RelationName>>;
navigate(relationName: string): EntitySet<Record<string, StandardSchemaV1>, undefined>;
}
export {};