@orbit/records
Version:
A flexible data access and synchronization layer.
86 lines (85 loc) • 3.42 kB
TypeScript
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>;