Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/sixty-monkeys-open.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@data-client/normalizr': minor
'@data-client/react': minor
'@data-client/core': minor
---

state.entityMeta -> state.entitiesMeta
8 changes: 4 additions & 4 deletions __tests__/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ export function mockEventHandlers() {
export function createEntityMeta(
entities: Record<string, Record<string, any>>,
) {
const entityMeta: any = {};
const entitiesMeta: any = {};
for (const k in entities) {
entityMeta[k] = {};
entitiesMeta[k] = {};
for (const pk in entities[k]) {
entityMeta[k][pk] = { date: 0, expiresAt: 0 };
entitiesMeta[k][pk] = { date: 0, expiresAt: 0 };
}
}
return entityMeta;
return entitiesMeta;
}
2 changes: 1 addition & 1 deletion docs/core/api/DataProvider.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export interface State<T> {
readonly errorPolicy?: 'hard' | 'soft' | undefined;
};
};
readonly entityMeta: {
readonly entitiesMeta: {
readonly [entityKey: string]: {
readonly [pk: string]: {
readonly date: number;
Expand Down
2 changes: 1 addition & 1 deletion docs/core/api/types.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ interface State<T> {
readonly errorPolicy?: 'hard' | 'soft' | undefined;
};
};
readonly entityMeta: {
readonly entitiesMeta: {
readonly [entityKey: string]: {
readonly [pk: string]: {
readonly date: number;
Expand Down
2 changes: 1 addition & 1 deletion docs/rest/api/schema.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ Now, `normalizedData` will create a single serializable source of truth for all
},
// contents excluded for brevity
indexes,
entityMeta,
entitiesMeta,
}
```

Expand Down
2 changes: 1 addition & 1 deletion examples/normalizr-relationships/output.json
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
"1",
"2"
],
"entityMeta": {
"entitiesMeta": {
"User": {
"123": {
"expiresAt": null,
Expand Down
2 changes: 1 addition & 1 deletion packages/core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ function useSuspense(endpoint, ...args)
cacheResults,
state.indexes,
state.entities,
state.entityMeta,
state.entitiesMeta,
meta,
key,
]);
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/controller/Controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,7 @@ export default class Controller<
// note: isInvalid can only be true if shouldQuery is true
if (isInvalid) expiresAt = 1;
// fallback to entity expiry time
else expiresAt = entityExpiresAt(paths, state.entityMeta);
else expiresAt = entityExpiresAt(paths, state.entitiesMeta);
}

return {
Expand Down Expand Up @@ -664,7 +664,7 @@ export default class Controller<
// earliest expiry dictates age
function entityExpiresAt(
paths: EntityPath[],
entityMeta: {
entitiesMeta: {
readonly [entityKey: string]: {
readonly [pk: string]: {
readonly date: number;
Expand All @@ -676,7 +676,7 @@ function entityExpiresAt(
) {
let expiresAt = Infinity;
for (const { pk, key } of paths) {
const entityExpiry = entityMeta[key]?.[pk]?.expiresAt;
const entityExpiry = entitiesMeta[key]?.[pk]?.expiresAt;
// expiresAt will always resolve to false with any comparison
if (entityExpiry < expiresAt) expiresAt = entityExpiry;
}
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/controller/__tests__/Controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ describe('Controller', () => {
endpoints: {
[fetchKey]: result,
},
entityMeta: createEntityMeta(entities),
entitiesMeta: createEntityMeta(entities),
meta: {
[fetchKey]: {
date: Date.now(),
Expand Down Expand Up @@ -85,7 +85,7 @@ describe('Controller', () => {
endpoints: {
[fetchKey]: result,
},
entityMeta: createEntityMeta(entities),
entitiesMeta: createEntityMeta(entities),
meta: {
[fetchKey]: {
date: 0,
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/controller/__tests__/getResponse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ describe('Controller.getResponse()', () => {
const state = {
...initialState,
entities,
entityMeta: {
entitiesMeta: {
Tacos: {
1: { date: 1000000, expiresAt: 1100000, fetchedAt: 1000000 },
2: { date: 2000000, expiresAt: 2100000, fetchedAt: 2000000 },
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/state/GCPolicy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ export class GCPolicy implements GCInterface {
if (
!this.entityCount.get(path.key)?.has(path.pk) &&
this.expiresAt(
state.entityMeta[path.key]?.[path.pk] ?? {
state.entitiesMeta[path.key]?.[path.pk] ?? {
fetchedAt: 0,
date: 0,
expiresAt: 0,
Expand Down
12 changes: 6 additions & 6 deletions packages/core/src/state/__tests__/GCPolicy.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ describe('GCPolicy', () => {
expiresAt: 0,
},
},
entityMeta: {
entitiesMeta: {
testEntity: {
'1': {
date: 0,
Expand Down Expand Up @@ -90,7 +90,7 @@ describe('GCPolicy', () => {
expiresAt: 0,
},
},
entityMeta: {
entitiesMeta: {
testEntity: {
'1': {
date: 0,
Expand Down Expand Up @@ -127,7 +127,7 @@ describe('GCPolicy', () => {
const paths: EntityPath[] = [{ key: 'testEntity', pk: '1' }];
const state = {
meta: {},
entityMeta: {},
entitiesMeta: {},
};
(controller.getState as jest.Mock).mockReturnValue(state);

Expand Down Expand Up @@ -163,7 +163,7 @@ describe('GCPolicy', () => {
expiresAt: futureTime,
},
},
entityMeta: {
entitiesMeta: {
testEntity: {
'1': {
date: futureTime - 100,
Expand Down Expand Up @@ -196,7 +196,7 @@ describe('GCPolicy', () => {
expiresAt: 0,
},
},
entityMeta: {
entitiesMeta: {
testEntity: {
'1': {
date: 0,
Expand Down Expand Up @@ -233,7 +233,7 @@ describe('GCPolicy', () => {
expiresAt: futureTime,
},
},
entityMeta: {
entitiesMeta: {
testEntity: {
'1': {
date: futureTime - 100,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ exports[`reducer should set error in meta for "set" 1`] = `
{
"endpoints": {},
"entities": {},
"entityMeta": {},
"entitiesMeta": {},
"indexes": {},
"lastReset": 0,
"meta": {
Expand Down Expand Up @@ -34,7 +34,7 @@ exports[`reducer singles should update state correctly 1`] = `
},
},
},
"entityMeta": {
"entitiesMeta": {
"Article": {
"20": {
"date": 5000000000,
Expand Down
18 changes: 10 additions & 8 deletions packages/core/src/state/__tests__/reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,10 @@ describe('reducer', () => {
expect(nextEntity.content).not.toBe(undefined);

expect(
nextState.entityMeta[Article.key][`${Article.pk(action.response)}`],
nextState.entitiesMeta[Article.key][`${Article.pk(action.response)}`],
).toBeDefined();
expect(
nextState.entityMeta[Article.key][`${Article.pk(action.response)}`]
nextState.entitiesMeta[Article.key][`${Article.pk(action.response)}`]
.date,
).toBe(action.meta.date);
});
Expand All @@ -102,7 +102,7 @@ describe('reducer', () => {
},
};
const getMeta = (state: any): { expiresAt: number } =>
state.entityMeta[Article.key][`${Article.pk(action.response)}`];
state.entitiesMeta[Article.key][`${Article.pk(action.response)}`];
const prevMeta = getMeta(newState);
expect(prevMeta).toBeDefined();
const nextState = reducer(newState, localAction);
Expand All @@ -123,7 +123,7 @@ describe('reducer', () => {
},
};
const getMeta = (state: any): { date: number } =>
state.entityMeta[Article.key][`${Article.pk(action.response)}`];
state.entitiesMeta[Article.key][`${Article.pk(action.response)}`];
const getEntity = (state: any): Article =>
state.entities[Article.key][`${Article.pk(action.response)}`];
const prevEntity = getEntity(newState);
Expand Down Expand Up @@ -182,7 +182,9 @@ describe('reducer', () => {
},
};
const getMeta = (state: any): { date: number; expiresAt: number } =>
state.entityMeta[ExpiresSoon.key][`${ExpiresSoon.pk(action.response)}`];
state.entitiesMeta[ExpiresSoon.key][
`${ExpiresSoon.pk(action.response)}`
];
const getEntity = (state: any): ExpiresSoon =>
state.entities[ExpiresSoon.key][`${ExpiresSoon.pk(action.response)}`];

Expand Down Expand Up @@ -259,7 +261,7 @@ describe('reducer', () => {
[id]: { id, counter: 5 },
},
},
entityMeta: {
entitiesMeta: {
[Counter.key]: {
[id]: { date: 0, fetchedAt: 0, expiresAt: 0 },
},
Expand Down Expand Up @@ -688,7 +690,7 @@ describe('reducer', () => {
},
'5': undefined,
},
entityMeta: {
entitiesMeta: {
[Article.key]: {
'10': { date: 0, expiresAt: 10000, fetchedAt: 0 },
'20': { date: 0, expiresAt: 10000, fetchedAt: 0 },
Expand Down Expand Up @@ -726,7 +728,7 @@ describe('reducer', () => {
const newState = reducer(iniState, action);
expect(newState).toBe(iniState);
expect(Object.keys(newState.entities[Article.key] ?? {}).length).toBe(2);
expect(Object.keys(newState.entityMeta[Article.key] ?? {}).length).toBe(
expect(Object.keys(newState.entitiesMeta[Article.key] ?? {}).length).toBe(
2,
);
expect(Object.keys(newState.endpoints).length).toBe(0);
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/state/reducer/createReducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export default function createReducer(controller: Controller): ReducerType {
// inline deletes are fine as these should have 0 refcounts
action.entities.forEach(({ key, pk }) => {
delete (state as any).entities[key]?.[pk];
delete (state as any).entityMeta[key]?.[pk];
delete (state as any).entitiesMeta[key]?.[pk];
});
action.endpoints.forEach(fetchKey => {
delete (state as any).endpoints[fetchKey];
Expand Down Expand Up @@ -69,7 +69,7 @@ export const initialState: State<unknown> = {
endpoints: {},
indexes: {},
meta: {},
entityMeta: {},
entitiesMeta: {},
optimistic: [],
lastReset: 0,
};
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/state/reducer/setReducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export function setReducer(
value = action.value;
}
try {
const { entities, indexes, entityMeta } = normalize(
const { entities, indexes, entitiesMeta } = normalize(
action.schema,
value,
action.args,
Expand All @@ -29,7 +29,7 @@ export function setReducer(
endpoints: state.endpoints,
indexes,
meta: state.meta,
entityMeta,
entitiesMeta,
optimistic: state.optimistic,
lastReset: state.lastReset,
};
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/state/reducer/setResponseReducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export function setResponseReducer(
} else {
response = action.response;
}
const { result, entities, indexes, entityMeta } = normalize(
const { result, entities, indexes, entitiesMeta } = normalize(
action.endpoint.schema,
response,
action.args,
Expand Down Expand Up @@ -80,7 +80,7 @@ export function setResponseReducer(
prevExpiresAt: state.meta[action.key]?.expiresAt,
},
},
entityMeta,
entitiesMeta,
optimistic: filterOptimistic(state, action),
lastReset: state.lastReset,
};
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export interface State<T> {
readonly errorPolicy?: 'hard' | 'soft' | undefined;
};
};
readonly entityMeta: {
readonly entitiesMeta: {
readonly [entityKey: string]: {
readonly [pk: string]: {
readonly fetchedAt: number;
Expand Down
2 changes: 1 addition & 1 deletion packages/endpoint/src/normal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ export type NormalizedSchema<E, R> = {
entities: E;
result: R;
indexes: NormalizedIndex;
entityMeta: {
entitiesMeta: {
readonly [entityKey: string]: {
readonly [pk: string]: {
readonly date: number;
Expand Down
4 changes: 2 additions & 2 deletions packages/endpoint/src/schemas/__tests__/Collection.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ describe(`${schema.Collection.name} normalization`, () => {
},
},
},
entityMeta: {
entitiesMeta: {
[User.schema.todos.key]: {
'{"userId":"1"}': {
date: 1557831718135,
Expand Down Expand Up @@ -456,7 +456,7 @@ describe(`${schema.Collection.name} denormalization`, () => {
},
},
},
entityMeta: {
entitiesMeta: {
[userTodos.key]: {
'{"userId":"1"}': {
date: 1557831718135,
Expand Down
6 changes: 3 additions & 3 deletions packages/endpoint/src/schemas/__tests__/Entity.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,15 +95,15 @@ describe(`${Entity.name} normalization`, () => {
}
}

const { entities, entityMeta } = normalize(MyEntity, {
const { entities, entitiesMeta } = normalize(MyEntity, {
id: '1',
title: 'hi',
});
const secondEntities = normalize(
MyEntity,
{ id: '1', title: 'second' },
[],
{ entities, entityMeta, indexes: {} },
{ entities, entitiesMeta, indexes: {} },
).entities;
expect(entities.MyEntity['1']).toBeDefined();
expect(entities.MyEntity['1']).toBe(secondEntities.MyEntity['1']);
Expand Down Expand Up @@ -184,7 +184,7 @@ describe(`${Entity.name} normalization`, () => {
},
},
},
"entityMeta": {
"entitiesMeta": {
"MyEntity": {
"bob": {
"date": 1557831718135,
Expand Down
Loading