UNPKG

@orbit/records

Version:

A flexible data access and synchronization layer.

86 lines (85 loc) 3.42 kB
import { QueryTerm } from '@orbit/data'; import { RecordIdentity } from './record'; import { RecordQueryBuilder } from './record-query-builder'; import { AttributeSortSpecifier, FilterSpecifier, FindRecord, FindRecords, FindRelatedRecord, FindRelatedRecords, PageSpecifier, RecordQueryExpression, SetComparisonOperator, SortOrder, SortSpecifier, ValueComparisonOperator } from './record-query-expression'; export interface AttributeSortParam { attribute: string; order?: SortOrder; } export declare type SortParam = SortSpecifier | AttributeSortParam | string; export interface PageParam { offset?: number; limit?: number; } export interface AttributeFilterParam { op?: ValueComparisonOperator; attribute: string; value: any; } export interface RelatedRecordFilterParam<RI = RecordIdentity> { op?: SetComparisonOperator; relation: string; record: RI | RI[] | null; } export interface RelatedRecordsFilterParam<RI = RecordIdentity> { op?: SetComparisonOperator; relation: string; records: RI[]; } export declare type FilterParam<RI = RecordIdentity> = FilterSpecifier | AttributeFilterParam | RelatedRecordFilterParam<RI> | RelatedRecordsFilterParam<RI>; export declare class BaseRecordQueryTerm<QE extends RecordQueryExpression, RT = string, RI = RecordIdentity> extends QueryTerm<QE> { $queryBuilder: RecordQueryBuilder<RT, RI>; constructor(queryBuilder: RecordQueryBuilder<RT, RI>, expression: QE); toQueryExpression(): QE; } /** * A query term representing a single record. */ export declare class FindRecordTerm<RT = string, RI = RecordIdentity> extends BaseRecordQueryTerm<FindRecord, RT, RI> { constructor(queryBuilder: RecordQueryBuilder<RT, RI>, record: RecordIdentity); } export declare class FindRelatedRecordTerm<RT = string, RI = RecordIdentity> extends BaseRecordQueryTerm<FindRelatedRecord, RT, RI> { constructor(queryBuilder: RecordQueryBuilder<RT, RI>, record: RecordIdentity, relationship: string); } export declare class FindRecordsTerm<RT = string, RI = RecordIdentity> extends BaseRecordQueryTerm<FindRecords | FindRelatedRecords, RT, RI> { /** * Applies sorting to a collection query. * * Sort specifiers can be expressed in object form, like: * * ```ts * { attribute: 'name', order: 'descending' } * { attribute: 'name', order: 'ascending' } * ``` * * Or in string form, like: * * ```ts * '-name' // descending order * 'name' // ascending order * ``` */ sort(...params: SortParam[]): this; /** * Applies pagination to a collection query. */ page(param: PageParam): this; /** * Apply a filter expression. * * For example: * * ```ts * oqb * .records('planet') * .filter({ attribute: 'atmosphere', value: true }, * { attribute: 'classification', value: 'terrestrial' }); * ``` */ filter(...params: FilterParam<RI>[]): this; $filterParamToSpecifier(param: FilterParam<RI>): FilterSpecifier; $pageParamToSpecifier(param: PageParam): PageSpecifier; $sortParamToSpecifier(param: SortParam): SortSpecifier; $parseSortParamString(sortSpecifier: string): AttributeSortSpecifier; } export declare type RecordQueryTerm<RT = string, RI = RecordIdentity> = FindRecordTerm<RT, RI> | FindRelatedRecordTerm<RT, RI> | FindRecordsTerm<RT, RI>;