@proofkit/fmodata
Version:
FileMaker OData API client
59 lines (58 loc) • 3.29 kB
TypeScript
import { ExecutionContext, ExecutableBuilder, Result, ODataRecordMetadata, InferSchemaType, ExecuteOptions } from '../types.js';
import { TableOccurrence } from './table-occurrence.js';
import { BaseTable } from './base-table.js';
import { QueryBuilder } from './query-builder.js';
import { FFetchOptions } from '@fetchkit/ffetch';
import { StandardSchemaV1 } from '@standard-schema/spec';
type ExtractSchemaFromOccurrence<O> = O extends TableOccurrence<infer BT, any, any, any> ? BT extends BaseTable<infer S, any, any, any> ? S : never : never;
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 : 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> ? Name extends keyof Nav ? ResolveNavigationItem<Nav[Name]> : never : never;
export declare class RecordBuilder<T extends Record<string, any>, IsSingleField extends boolean = false, FieldKey extends keyof T = keyof T, Occ extends TableOccurrence<any, any, any, any> | undefined = TableOccurrence<any, any, any, any> | undefined> implements ExecutableBuilder<IsSingleField extends true ? T[FieldKey] : T & ODataRecordMetadata> {
private occurrence?;
private tableName;
private databaseName;
private context;
private recordId;
private operation?;
private operationParam?;
private isNavigateFromEntitySet?;
private navigateRelation?;
private navigateSourceTableName?;
private databaseUseEntityIds;
constructor(config: {
occurrence?: Occ;
tableName: string;
databaseName: string;
context: ExecutionContext;
recordId: string | number;
databaseUseEntityIds?: boolean;
});
/**
* Helper to merge database-level useEntityIds with per-request options
*/
private mergeExecuteOptions;
/**
* Gets the table ID (FMTID) if using entity IDs, otherwise returns the table name
* @param useEntityIds - Optional override for entity ID usage
*/
private getTableId;
getSingleField<K extends keyof T>(field: K): RecordBuilder<T, true, K, Occ>;
navigate<RelationName extends ExtractNavigationNames<Occ>>(relationName: RelationName): QueryBuilder<ExtractSchemaFromOccurrence<FindNavigationTarget<Occ, RelationName>> extends Record<string, StandardSchemaV1> ? InferSchemaType<ExtractSchemaFromOccurrence<FindNavigationTarget<Occ, RelationName>>> : Record<string, any>>;
navigate(relationName: string): QueryBuilder<{
ROWID: number;
ROWMODID: number;
[key: string]: any;
}>;
execute(options?: RequestInit & FFetchOptions & {
useEntityIds?: boolean;
}): Promise<Result<IsSingleField extends true ? T[FieldKey] : T & ODataRecordMetadata>>;
getRequestConfig(): {
method: string;
url: string;
body?: any;
};
toRequest(baseUrl: string): Request;
processResponse(response: Response, options?: ExecuteOptions): Promise<Result<IsSingleField extends true ? T[FieldKey] : T & ODataRecordMetadata>>;
}
export {};