@ember-data/record-data
Version:
Provides the default resource cache (RecordData) implementation for ember-data
84 lines (72 loc) • 2.66 kB
text/typescript
import type {
CollectionResourceRelationship,
SingleResourceRelationship,
} from '@ember-data/types/q/ember-data-json-api';
import type { StableRecordIdentifier } from '@ember-data/types/q/identifier';
export interface Operation {
op: string;
}
export interface UpdateRelationshipOperation {
op: 'updateRelationship';
record: StableRecordIdentifier;
field: string;
value: SingleResourceRelationship | CollectionResourceRelationship;
}
export interface DeleteRecordOperation {
op: 'deleteRecord';
record: StableRecordIdentifier;
isNew: boolean;
}
export interface UnknownOperation {
op: 'never';
record: StableRecordIdentifier;
field: string;
}
export interface AddToRelatedRecordsOperation {
op: 'addToRelatedRecords';
record: StableRecordIdentifier;
field: string; // "relationship" propertyName
value: StableRecordIdentifier | StableRecordIdentifier[]; // related record
index?: number; // the index to insert at
}
export interface RemoveFromRelatedRecordsOperation {
op: 'removeFromRelatedRecords';
record: StableRecordIdentifier;
field: string; // "relationship" propertyName
value: StableRecordIdentifier | StableRecordIdentifier[]; // related record
index?: number; // optional the index at which we're expected to start the removal
}
export interface ReplaceRelatedRecordOperation {
op: 'replaceRelatedRecord';
record: StableRecordIdentifier;
field: string;
value: StableRecordIdentifier | null; // never null if field is a collection
prior?: StableRecordIdentifier; // if field is a collection, the value we are swapping with
index?: number; // if field is a collection, the index at which we are replacing a value
}
export interface SortRelatedRecords {
op: 'sortRelatedRecords';
record: StableRecordIdentifier;
field: string;
value: StableRecordIdentifier[];
}
export interface ReplaceRelatedRecordsOperation {
op: 'replaceRelatedRecords';
record: StableRecordIdentifier;
field: string;
value: StableRecordIdentifier[]; // the records to add. If no prior/index specified all existing should be removed
prior?: StableRecordIdentifier[]; // if this is a "splice" the records we expect to be removed
index?: number; // if this is a "splice" the index to start from
}
export type RemoteRelationshipOperation =
| UpdateRelationshipOperation
| ReplaceRelatedRecordOperation
| ReplaceRelatedRecordsOperation
| DeleteRecordOperation
| SortRelatedRecords;
export type LocalRelationshipOperation =
| ReplaceRelatedRecordsOperation
| ReplaceRelatedRecordOperation
| RemoveFromRelatedRecordsOperation
| AddToRelatedRecordsOperation
| SortRelatedRecords;