1import * as InMemoryData from '../store/data';
2import { keyOfField } from '../store/keys';
3import type { FieldArgs } from '../types';
4
5interface PartialFieldInfo {
6 fieldKey: string;
7}
8
9export const invalidateEntity = (
10 entityKey: string,
11 field?: string,
12 args?: FieldArgs
13) => {
14 const fields: PartialFieldInfo[] = field
15 ? [{ fieldKey: keyOfField(field, args) }]
16 : InMemoryData.inspectFields(entityKey);
17
18 for (let i = 0, l = fields.length; i < l; i++) {
19 const { fieldKey } = fields[i];
20 if (InMemoryData.readLink(entityKey, fieldKey) !== undefined) {
21 InMemoryData.writeLink(entityKey, fieldKey, undefined);
22 } else {
23 InMemoryData.writeRecord(entityKey, fieldKey, undefined);
24 }
25 }
26};
27
28export const invalidateType = (
29 typename: string,
30 excludedEntities: string[]
31) => {
32 const types = InMemoryData.getEntitiesForType(typename);
33 for (const entity of types) {
34 if (excludedEntities.includes(entity)) continue;
35 invalidateEntity(entity);
36 }
37};