@proofkit/fmodata
Version:
FileMaker OData API client
67 lines (66 loc) • 2.44 kB
TypeScript
import { FMTable } from '../../orm/table.js';
import { RecordLocator } from '../builders/mutation-helpers.js';
/**
* Configuration for navigation from RecordBuilder or EntitySet
*/
export interface NavigationConfig {
recordLocator?: RecordLocator;
relation: string;
relationEntityId?: string;
sourceTableName: string;
sourceTableEntityId?: string;
baseRelation?: string;
baseRelationEntityId?: string;
basePath?: string;
basePathEntityId?: string;
}
/**
* Builds OData query URLs for different navigation modes.
* Handles:
* - Record navigation: /database/sourceTable('recordId')/relation
* - Entity set navigation: /database/sourceTable/relation
* - Count endpoint: /database/tableId/$count
* - Standard queries: /database/tableId
*/
export declare class QueryUrlBuilder {
private readonly databaseName;
private readonly occurrence;
private readonly useEntityIds;
constructor(databaseName: string, occurrence: FMTable<any, any>, useEntityIds: boolean);
/**
* Builds the full URL for a query request.
*
* @param queryString - The OData query string (e.g., "?$filter=...&$select=...")
* @param options - Options including whether this is a count query, useEntityIds override, and navigation config
*/
build(queryString: string, options: {
isCount?: boolean;
useEntityIds?: boolean;
navigation?: NavigationConfig;
}): string;
/**
* Builds a query string path (without database prefix) for getQueryString().
* Used when the full URL is not needed.
*/
buildPath(queryString: string, options?: {
isCount?: boolean;
useEntityIds?: boolean;
navigation?: NavigationConfig;
}): string;
/**
* Build URL for record operations (single record by ID).
* Used by RecordBuilder to build URLs like /database/table('id').
*
* @param recordLocator - The record locator
* @param queryString - The OData query string (e.g., "?$select=...")
* @param options - Options including operation type and useEntityIds override
*/
buildRecordUrl(recordLocator: RecordLocator, queryString: string, options?: {
operation?: "getSingleField";
operationParam?: string;
useEntityIds?: boolean;
isNavigateFromEntitySet?: boolean;
navigateSourceTableName?: string;
navigateRelation?: string;
}): string;
}