UNPKG

@proofkit/fmodata

Version:
59 lines (58 loc) 3.29 kB
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 {};