@orbit/memory
Version:
Orbit source for managing in-memory records.
116 lines (115 loc) • 7.15 kB
TypeScript
import { DefaultRequestOptions, FullRequestOptions, FullResponse, RequestOptions, Resettable, ResponseHints } from '@orbit/data';
import { RecordCacheUpdateDetails } from '@orbit/record-cache';
import { RecordOperation, RecordOperationResult, RecordQuery, RecordQueryable, RecordQueryBuilder, RecordQueryExpressionResult, RecordQueryResult, RecordSource, RecordSourceQueryOptions, RecordSourceSettings, RecordSyncable, RecordTransform, RecordTransformBuilder, RecordTransformResult, RecordUpdatable } from '@orbit/records';
import { Dict } from '@orbit/utils';
import { MemoryCache, MemoryCacheClass, MemoryCacheSettings } from './memory-cache';
export interface MemorySourceSettings<QO extends RequestOptions = RecordSourceQueryOptions, TO extends RequestOptions = RequestOptions, QB = RecordQueryBuilder, TB = RecordTransformBuilder, QRD = unknown, TRD extends RecordCacheUpdateDetails = RecordCacheUpdateDetails> extends RecordSourceSettings<QO, TO, QB, TB> {
base?: MemorySource<QO, TO, QB, TB, QRD, TRD>;
cacheClass?: MemoryCacheClass<QO, TO, QB, TB, QRD, TRD>;
cacheSettings?: Partial<MemoryCacheSettings<QO, TO, QB, TB, QRD, TRD>>;
}
export interface MemorySourceMergeOptions {
coalesce?: boolean;
/**
* @deprecated since v0.17
*/
sinceTransformId?: string;
/**
* @deprecated since v0.17, include transform options alongside merge options instead
*/
transformOptions?: RequestOptions;
}
export interface MemorySource<QO extends RequestOptions = RecordSourceQueryOptions, TO extends RequestOptions = RequestOptions, QB = RecordQueryBuilder, TB = RecordTransformBuilder, QRD = unknown, TRD extends RecordCacheUpdateDetails = RecordCacheUpdateDetails> extends RecordSource<QO, TO, QB, TB>, RecordSyncable, RecordQueryable<QRD, QB, QO>, RecordUpdatable<TRD, TB, TO> {
}
export declare class MemorySource<QO extends RequestOptions = RecordSourceQueryOptions, TO extends RequestOptions = RequestOptions, QB = RecordQueryBuilder, TB = RecordTransformBuilder, QRD = unknown, TRD extends RecordCacheUpdateDetails = RecordCacheUpdateDetails> extends RecordSource<QO, TO, QB, TB> implements RecordSyncable, RecordQueryable<QRD, QB, QO>, RecordUpdatable<TRD, TB, TO>, Resettable {
protected _cache: MemoryCache<QO, TO, QB, TB, QRD, TRD>;
protected _base?: MemorySource<QO, TO, QB, TB, QRD, TRD>;
protected _forkPoint?: string;
protected _transforms: Dict<RecordTransform>;
protected _transformInverses: Dict<RecordOperation[]>;
constructor(settings: MemorySourceSettings<QO, TO, QB, TB, QRD, TRD>);
get cache(): MemoryCache<QO, TO, QB, TB, QRD, TRD>;
get base(): MemorySource<QO, TO, QB, TB, QRD, TRD> | undefined;
get forkPoint(): string | undefined;
upgrade(): Promise<void>;
_sync(transform: RecordTransform): Promise<void>;
_update(transform: RecordTransform, hints?: ResponseHints<RecordTransformResult, TRD>): Promise<FullResponse<RecordTransformResult, TRD, RecordOperation>>;
_query(query: RecordQuery, hints?: ResponseHints<RecordQueryResult, QRD>): Promise<FullResponse<RecordQueryResult, QRD, RecordOperation>>;
/**
* Create a clone, or "fork", from a "base" source.
*
* The forked source will have the same `schema` and `keyMap` as its base source.
* The forked source's cache will start with the same immutable document as
* the base source. Its contents and log will evolve independently.
*
* @returns The forked source.
*/
fork(settings?: Partial<MemorySourceSettings<QO, TO, QB, TB, QRD, TRD>>): MemorySource<QO, TO, QB, TB, QRD, TRD>;
/**
* Merge transforms from a forked source back into a base source.
*
* By default, all of the operations from all of the transforms in the forked
* source's history will be reduced into a single transform. A subset of
* operations can be selected by specifying the `sinceTransformId` option.
*
* The `coalesce` option controls whether operations are coalesced into a
* minimal equivalent set before being reduced into a transform.
*
* @param forkedSource - The source to merge.
* @param options - Merge options
* @returns The result of calling `update()` with the forked transforms.
*/
merge<RequestData extends RecordTransformResult = RecordTransformResult>(forkedSource: MemorySource<QO, TO, QB, TB, QRD, TRD>, options?: DefaultRequestOptions<TO> & MemorySourceMergeOptions): Promise<RequestData>;
merge<RequestData extends RecordTransformResult = RecordTransformResult>(forkedSource: MemorySource<QO, TO, QB, TB, QRD, TRD>, options: FullRequestOptions<TO> & MemorySourceMergeOptions): Promise<FullResponse<RequestData, TRD, RecordOperation>>;
/**
* Rebase works similarly to a git rebase:
*
* After a source is forked, there is a parent- and a child-source. Both may
* be updated with transforms. When `childSource.rebase()` is called, the
* child source's state will be reset to match the current state of its
* parent, and then any locally made transforms will be replayed on the child
* source.
*/
rebase(): void;
/**
* Reset the source's cache and transform log to its initial state, which will
* be either empty or a matching its `base`, if it has one.
*/
reset(): Promise<void>;
/**
* Rolls back the source to a particular `transformId`.
*
* `relativePosition` can be a positive or negative integer used to specify a
* position relative to `transformId`.
*/
rollback(transformId: string, relativePosition?: number): Promise<void>;
/**
* Returns all logged transforms since a particular `transformId`.
*/
getTransformsSince(transformId: string): RecordTransform[];
/**
* @deprecated since v0.17, call `getTransformsSince` instead
*/
transformsSince(transformId: string): RecordTransform[];
/**
* Returns all logged transforms.
*/
getAllTransforms(): RecordTransform[];
/**
* @deprecated since v0.17, call `getAllTransforms` instead
*/
allTransforms(): RecordTransform[];
getTransform(transformId: string): RecordTransform;
getInverseOperations(transformId: string): RecordOperation[];
get defaultQueryOptions(): DefaultRequestOptions<QO> | undefined;
set defaultQueryOptions(options: DefaultRequestOptions<QO> | undefined);
get defaultTransformOptions(): DefaultRequestOptions<TO> | undefined;
set defaultTransformOptions(options: DefaultRequestOptions<TO> | undefined);
protected _retrieveQueryExpressionResult(result: RecordQueryExpressionResult): RecordQueryExpressionResult;
protected _retrieveOperationResult(result: RecordOperationResult): RecordOperationResult;
protected _applyTransform(transform: RecordTransform): RecordTransformResult;
protected _clearTransformFromHistory(transformId: string): void;
protected _logCleared(): void;
protected _logTruncated(transformId: string, relativePosition: number, removed: string[]): void;
protected _logRolledback(transformId: string, relativePosition: number, removed: string[]): void;
}