@expo/entity 0.26.0 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/ComposedEntityCacheAdapter.d.ts +4 -2
- package/build/ComposedEntityCacheAdapter.js +39 -3
- package/build/ComposedEntityCacheAdapter.js.map +1 -1
- package/build/ComposedSecondaryEntityCache.d.ts +3 -2
- package/build/ComposedSecondaryEntityCache.js +3 -2
- package/build/ComposedSecondaryEntityCache.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +5 -0
- package/build/EntityAssociationLoader.js +5 -0
- package/build/EntityAssociationLoader.js.map +1 -1
- package/build/__tests__/ComposedCacheAdapter-test.js +36 -3
- package/build/__tests__/ComposedCacheAdapter-test.js.map +1 -1
- package/package.json +1 -1
- package/src/ComposedEntityCacheAdapter.ts +44 -3
- package/src/ComposedSecondaryEntityCache.ts +3 -2
- package/src/EntityAssociationLoader.ts +5 -0
- package/src/__tests__/ComposedCacheAdapter-test.ts +42 -3
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import EntityCacheAdapter from './EntityCacheAdapter';
|
|
2
2
|
import EntityConfiguration from './EntityConfiguration';
|
|
3
3
|
import { CacheLoadResult } from './internal/ReadThroughEntityCache';
|
|
4
|
+
/**
|
|
5
|
+
* A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
|
|
6
|
+
*/
|
|
4
7
|
export default class ComposedEntityCacheAdapter<TFields> extends EntityCacheAdapter<TFields> {
|
|
5
8
|
private readonly cacheAdapters;
|
|
6
9
|
/**
|
|
7
|
-
* A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
|
|
8
|
-
*
|
|
9
10
|
* @param entityConfiguration - configuration for entity being loaded
|
|
10
11
|
* @param cacheAdapters - list of cache adapters to compose in order of precedence.
|
|
11
12
|
* Earlier cache adapters are read from first and written to (including invalidations) last.
|
|
12
13
|
* Typically, caches closer to the application should be ordered before caches closer to the database.
|
|
14
|
+
* A lower layer cache is closer to the database, while a higher layer cache is closer to the application.
|
|
13
15
|
*/
|
|
14
16
|
constructor(entityConfiguration: EntityConfiguration<TFields>, cacheAdapters: EntityCacheAdapter<TFields>[]);
|
|
15
17
|
loadManyAsync<N extends keyof TFields>(fieldName: N, fieldValues: readonly NonNullable<TFields[N]>[]): Promise<ReadonlyMap<NonNullable<TFields[N]>, CacheLoadResult<TFields>>>;
|
|
@@ -6,14 +6,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const nullthrows_1 = __importDefault(require("nullthrows"));
|
|
7
7
|
const EntityCacheAdapter_1 = __importDefault(require("./EntityCacheAdapter"));
|
|
8
8
|
const ReadThroughEntityCache_1 = require("./internal/ReadThroughEntityCache");
|
|
9
|
+
/**
|
|
10
|
+
* A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
|
|
11
|
+
*/
|
|
9
12
|
class ComposedEntityCacheAdapter extends EntityCacheAdapter_1.default {
|
|
10
13
|
/**
|
|
11
|
-
* A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
|
|
12
|
-
*
|
|
13
14
|
* @param entityConfiguration - configuration for entity being loaded
|
|
14
15
|
* @param cacheAdapters - list of cache adapters to compose in order of precedence.
|
|
15
16
|
* Earlier cache adapters are read from first and written to (including invalidations) last.
|
|
16
17
|
* Typically, caches closer to the application should be ordered before caches closer to the database.
|
|
18
|
+
* A lower layer cache is closer to the database, while a higher layer cache is closer to the application.
|
|
17
19
|
*/
|
|
18
20
|
constructor(entityConfiguration, cacheAdapters) {
|
|
19
21
|
super(entityConfiguration);
|
|
@@ -21,8 +23,10 @@ class ComposedEntityCacheAdapter extends EntityCacheAdapter_1.default {
|
|
|
21
23
|
}
|
|
22
24
|
async loadManyAsync(fieldName, fieldValues) {
|
|
23
25
|
const retMap = new Map();
|
|
26
|
+
const fulfilledFieldValuesByCacheIndex = Array.from({ length: this.cacheAdapters.length }, () => []);
|
|
24
27
|
let unfulfilledFieldValues = fieldValues;
|
|
25
|
-
for (
|
|
28
|
+
for (let i = 0; i < this.cacheAdapters.length; i++) {
|
|
29
|
+
const cacheAdapter = (0, nullthrows_1.default)(this.cacheAdapters[i]);
|
|
26
30
|
const cacheResultsFromAdapter = await cacheAdapter.loadManyAsync(fieldName, unfulfilledFieldValues);
|
|
27
31
|
const newUnfulfilledFieldValues = [];
|
|
28
32
|
for (const [fieldValue, cacheResult] of cacheResultsFromAdapter) {
|
|
@@ -31,9 +35,41 @@ class ComposedEntityCacheAdapter extends EntityCacheAdapter_1.default {
|
|
|
31
35
|
}
|
|
32
36
|
else {
|
|
33
37
|
retMap.set(fieldValue, cacheResult);
|
|
38
|
+
(0, nullthrows_1.default)(fulfilledFieldValuesByCacheIndex[i]).push(fieldValue);
|
|
34
39
|
}
|
|
35
40
|
}
|
|
36
41
|
unfulfilledFieldValues = newUnfulfilledFieldValues;
|
|
42
|
+
if (unfulfilledFieldValues.length === 0) {
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Recache values from lower layers that were not found in higher layers
|
|
47
|
+
// Write to lower layers first
|
|
48
|
+
for (let i = this.cacheAdapters.length - 1; i >= 0; i--) {
|
|
49
|
+
const cacheAdapter = (0, nullthrows_1.default)(this.cacheAdapters[i]);
|
|
50
|
+
const hitsToCache = new Map();
|
|
51
|
+
const negativesToCache = [];
|
|
52
|
+
// Loop over all lower layer caches to collect hits and misses
|
|
53
|
+
for (let j = i + 1; j < this.cacheAdapters.length; j++) {
|
|
54
|
+
const fulfilledFieldValues = (0, nullthrows_1.default)(fulfilledFieldValuesByCacheIndex[j]);
|
|
55
|
+
fulfilledFieldValues.forEach((fieldValue) => {
|
|
56
|
+
const cacheResult = (0, nullthrows_1.default)(retMap.get(fieldValue));
|
|
57
|
+
if (cacheResult.status === ReadThroughEntityCache_1.CacheStatus.HIT) {
|
|
58
|
+
hitsToCache.set(fieldValue, cacheResult.item);
|
|
59
|
+
}
|
|
60
|
+
else if (cacheResult.status === ReadThroughEntityCache_1.CacheStatus.NEGATIVE) {
|
|
61
|
+
negativesToCache.push(fieldValue);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const promises = [];
|
|
66
|
+
if (hitsToCache.size > 0) {
|
|
67
|
+
promises.push(cacheAdapter.cacheManyAsync(fieldName, hitsToCache));
|
|
68
|
+
}
|
|
69
|
+
if (negativesToCache.length > 0) {
|
|
70
|
+
promises.push(cacheAdapter.cacheDBMissesAsync(fieldName, negativesToCache));
|
|
71
|
+
}
|
|
72
|
+
await Promise.all(promises);
|
|
37
73
|
}
|
|
38
74
|
for (const fieldValue of unfulfilledFieldValues) {
|
|
39
75
|
retMap.set(fieldValue, { status: ReadThroughEntityCache_1.CacheStatus.MISS });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposedEntityCacheAdapter.js","sourceRoot":"","sources":["../src/ComposedEntityCacheAdapter.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAEpC,8EAAsD;AAEtD,8EAAiF;AAEjF,MAAqB,0BAAoC,SAAQ,4BAA2B;IAC1F
|
|
1
|
+
{"version":3,"file":"ComposedEntityCacheAdapter.js","sourceRoot":"","sources":["../src/ComposedEntityCacheAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ISecondaryEntityCache } from './EntitySecondaryCacheLoader';
|
|
2
|
+
/**
|
|
3
|
+
* A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
|
|
4
|
+
*/
|
|
2
5
|
export default class ComposedSecondaryEntityCache<TLoadParams, TFields> implements ISecondaryEntityCache<TFields, TLoadParams> {
|
|
3
6
|
private readonly secondaryEntityCaches;
|
|
4
7
|
/**
|
|
5
|
-
* A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
|
|
6
|
-
*
|
|
7
8
|
* @param secondaryEntityCaches - list of caches to compose in order of precedence.
|
|
8
9
|
* Earlier caches are read from first and written to (including invalidations) last.
|
|
9
10
|
* Typically, caches closer to the application should be ordered before caches closer to the database.
|
|
@@ -4,10 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const nullthrows_1 = __importDefault(require("nullthrows"));
|
|
7
|
+
/**
|
|
8
|
+
* A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
|
|
9
|
+
*/
|
|
7
10
|
class ComposedSecondaryEntityCache {
|
|
8
11
|
/**
|
|
9
|
-
* A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
|
|
10
|
-
*
|
|
11
12
|
* @param secondaryEntityCaches - list of caches to compose in order of precedence.
|
|
12
13
|
* Earlier caches are read from first and written to (including invalidations) last.
|
|
13
14
|
* Typically, caches closer to the application should be ordered before caches closer to the database.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposedSecondaryEntityCache.js","sourceRoot":"","sources":["../src/ComposedSecondaryEntityCache.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAIpC,MAAqB,4BAA4B;IAG/C
|
|
1
|
+
{"version":3,"file":"ComposedSecondaryEntityCache.js","sourceRoot":"","sources":["../src/ComposedSecondaryEntityCache.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAIpC;;GAEG;AACH,MAAqB,4BAA4B;IAG/C;;;;OAIG;IACH,YACmB,qBAAoE;QAApE,0BAAqB,GAArB,qBAAqB,CAA+C;IACpF,CAAC;IAEJ,KAAK,CAAC,oBAAoB,CACxB,eAAiD,EACjD,OAE0E;QAE1E,OAAO,MAAM,4BAA4B,CAAC,+BAA+B,CACvE,IAAI,CAAC,qBAAqB,EAC1B,eAAe,EACf,OAAO,CACR,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAClD,qBAAoE,EACpE,eAAiD,EACjD,OAE0E;QAE1E,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,OAAO,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;SACvC;QAED,MAAM,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,GAAG,qBAAqB,CAAC;QAE1D,OAAO,MAAM,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC,oBAAoB,CACtD,eAAe,EACf,CAAC,sBAAsB,EAAE,EAAE,CACzB,4BAA4B,CAAC,+BAA+B,CAC1D,UAAU,EACV,sBAAsB,EACtB,OAAO,CACR,CACJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,eAAiD;QACzE,gCAAgC;QAChC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/D,MAAM,oBAAoB,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;SACjE;IACH,CAAC;CACF;AAxDD,+CAwDC"}
|
|
@@ -4,6 +4,11 @@ import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
|
4
4
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
5
5
|
import ReadonlyEntity from './ReadonlyEntity';
|
|
6
6
|
import ViewerContext from './ViewerContext';
|
|
7
|
+
/**
|
|
8
|
+
* An association loader is a set of convenience methods for loading entities
|
|
9
|
+
* associated with an entity. In relational databases, these entities are often referenced
|
|
10
|
+
* by foreign keys.
|
|
11
|
+
*/
|
|
7
12
|
export default class EntityAssociationLoader<TFields, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields> {
|
|
8
13
|
private readonly entity;
|
|
9
14
|
constructor(entity: TEntity);
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const results_1 = require("@expo/results");
|
|
4
|
+
/**
|
|
5
|
+
* An association loader is a set of convenience methods for loading entities
|
|
6
|
+
* associated with an entity. In relational databases, these entities are often referenced
|
|
7
|
+
* by foreign keys.
|
|
8
|
+
*/
|
|
4
9
|
class EntityAssociationLoader {
|
|
5
10
|
constructor(entity) {
|
|
6
11
|
this.entity = entity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityAssociationLoader.js","sourceRoot":"","sources":["../src/EntityAssociationLoader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityAssociationLoader.js","sourceRoot":"","sources":["../src/EntityAssociationLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -119,10 +119,10 @@ describe(ComposedEntityCacheAdapter_1.default, () => {
|
|
|
119
119
|
expect(results.size).toBe(3);
|
|
120
120
|
});
|
|
121
121
|
it('returns fallback adapter results primary is empty', async () => {
|
|
122
|
-
const {
|
|
122
|
+
const { fallbackCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
|
|
123
123
|
const cacheHits = new Map([['test-id-1', { id: 'test-id-1' }]]);
|
|
124
|
-
await
|
|
125
|
-
await
|
|
124
|
+
await fallbackCacheAdapter.cacheManyAsync('id', cacheHits);
|
|
125
|
+
await fallbackCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
|
|
126
126
|
const results = await cacheAdapter.loadManyAsync('id', [
|
|
127
127
|
'test-id-1',
|
|
128
128
|
'test-id-2',
|
|
@@ -136,6 +136,39 @@ describe(ComposedEntityCacheAdapter_1.default, () => {
|
|
|
136
136
|
expect(results.get('test-id-3')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.MISS });
|
|
137
137
|
expect(results.size).toBe(3);
|
|
138
138
|
});
|
|
139
|
+
it('populates primary adapter with fallback adapter results', async () => {
|
|
140
|
+
const { primaryCacheAdapter, fallbackCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
|
|
141
|
+
const cacheHits = new Map([['test-id-1', { id: 'test-id-1' }]]);
|
|
142
|
+
await fallbackCacheAdapter.cacheManyAsync('id', cacheHits);
|
|
143
|
+
await fallbackCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
|
|
144
|
+
// should populate primary cache with fallback cache results
|
|
145
|
+
await cacheAdapter.loadManyAsync('id', ['test-id-1', 'test-id-2', 'test-id-3']);
|
|
146
|
+
const primaryResults = await primaryCacheAdapter.loadManyAsync('id', [
|
|
147
|
+
'test-id-1',
|
|
148
|
+
'test-id-2',
|
|
149
|
+
'test-id-3',
|
|
150
|
+
]);
|
|
151
|
+
expect(primaryResults.get('test-id-1')).toMatchObject({
|
|
152
|
+
status: ReadThroughEntityCache_1.CacheStatus.HIT,
|
|
153
|
+
item: { id: 'test-id-1' },
|
|
154
|
+
});
|
|
155
|
+
expect(primaryResults.get('test-id-2')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.NEGATIVE });
|
|
156
|
+
expect(primaryResults.get('test-id-3')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.MISS });
|
|
157
|
+
expect(primaryResults.size).toBe(3);
|
|
158
|
+
// ensure that populating the primary cache doesn't change the output
|
|
159
|
+
const composedResults = await cacheAdapter.loadManyAsync('id', [
|
|
160
|
+
'test-id-1',
|
|
161
|
+
'test-id-2',
|
|
162
|
+
'test-id-3',
|
|
163
|
+
]);
|
|
164
|
+
expect(composedResults.get('test-id-1')).toMatchObject({
|
|
165
|
+
status: ReadThroughEntityCache_1.CacheStatus.HIT,
|
|
166
|
+
item: { id: 'test-id-1' },
|
|
167
|
+
});
|
|
168
|
+
expect(composedResults.get('test-id-2')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.NEGATIVE });
|
|
169
|
+
expect(composedResults.get('test-id-3')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.MISS });
|
|
170
|
+
expect(composedResults.size).toBe(3);
|
|
171
|
+
});
|
|
139
172
|
it('returns empty map when passed empty array of fieldValues', async () => {
|
|
140
173
|
const { cacheAdapter } = makeTestCacheAdapters();
|
|
141
174
|
const results = await cacheAdapter.loadManyAsync('id', []);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComposedCacheAdapter-test.js","sourceRoot":"","sources":["../../src/__tests__/ComposedCacheAdapter-test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ComposedCacheAdapter-test.js","sourceRoot":"","sources":["../../src/__tests__/ComposedCacheAdapter-test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,14 +4,16 @@ import EntityCacheAdapter from './EntityCacheAdapter';
|
|
|
4
4
|
import EntityConfiguration from './EntityConfiguration';
|
|
5
5
|
import { CacheStatus, CacheLoadResult } from './internal/ReadThroughEntityCache';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
|
|
9
|
+
*/
|
|
7
10
|
export default class ComposedEntityCacheAdapter<TFields> extends EntityCacheAdapter<TFields> {
|
|
8
11
|
/**
|
|
9
|
-
* A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
|
|
10
|
-
*
|
|
11
12
|
* @param entityConfiguration - configuration for entity being loaded
|
|
12
13
|
* @param cacheAdapters - list of cache adapters to compose in order of precedence.
|
|
13
14
|
* Earlier cache adapters are read from first and written to (including invalidations) last.
|
|
14
15
|
* Typically, caches closer to the application should be ordered before caches closer to the database.
|
|
16
|
+
* A lower layer cache is closer to the database, while a higher layer cache is closer to the application.
|
|
15
17
|
*/
|
|
16
18
|
constructor(
|
|
17
19
|
entityConfiguration: EntityConfiguration<TFields>,
|
|
@@ -25,9 +27,14 @@ export default class ComposedEntityCacheAdapter<TFields> extends EntityCacheAdap
|
|
|
25
27
|
fieldValues: readonly NonNullable<TFields[N]>[]
|
|
26
28
|
): Promise<ReadonlyMap<NonNullable<TFields[N]>, CacheLoadResult<TFields>>> {
|
|
27
29
|
const retMap = new Map<NonNullable<TFields[N]>, CacheLoadResult<TFields>>();
|
|
30
|
+
const fulfilledFieldValuesByCacheIndex: NonNullable<TFields[N]>[][] = Array.from(
|
|
31
|
+
{ length: this.cacheAdapters.length },
|
|
32
|
+
() => []
|
|
33
|
+
);
|
|
28
34
|
|
|
29
35
|
let unfulfilledFieldValues = fieldValues;
|
|
30
|
-
for (
|
|
36
|
+
for (let i = 0; i < this.cacheAdapters.length; i++) {
|
|
37
|
+
const cacheAdapter = nullthrows(this.cacheAdapters[i]);
|
|
31
38
|
const cacheResultsFromAdapter = await cacheAdapter.loadManyAsync(
|
|
32
39
|
fieldName,
|
|
33
40
|
unfulfilledFieldValues
|
|
@@ -39,9 +46,43 @@ export default class ComposedEntityCacheAdapter<TFields> extends EntityCacheAdap
|
|
|
39
46
|
newUnfulfilledFieldValues.push(fieldValue);
|
|
40
47
|
} else {
|
|
41
48
|
retMap.set(fieldValue, cacheResult);
|
|
49
|
+
nullthrows(fulfilledFieldValuesByCacheIndex[i]).push(fieldValue);
|
|
42
50
|
}
|
|
43
51
|
}
|
|
44
52
|
unfulfilledFieldValues = newUnfulfilledFieldValues;
|
|
53
|
+
if (unfulfilledFieldValues.length === 0) {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Recache values from lower layers that were not found in higher layers
|
|
59
|
+
// Write to lower layers first
|
|
60
|
+
for (let i = this.cacheAdapters.length - 1; i >= 0; i--) {
|
|
61
|
+
const cacheAdapter = nullthrows(this.cacheAdapters[i]);
|
|
62
|
+
const hitsToCache = new Map<NonNullable<TFields[N]>, Readonly<TFields>>();
|
|
63
|
+
const negativesToCache: NonNullable<TFields[N]>[] = [];
|
|
64
|
+
|
|
65
|
+
// Loop over all lower layer caches to collect hits and misses
|
|
66
|
+
for (let j = i + 1; j < this.cacheAdapters.length; j++) {
|
|
67
|
+
const fulfilledFieldValues = nullthrows(fulfilledFieldValuesByCacheIndex[j]);
|
|
68
|
+
fulfilledFieldValues.forEach((fieldValue) => {
|
|
69
|
+
const cacheResult = nullthrows(retMap.get(fieldValue));
|
|
70
|
+
if (cacheResult.status === CacheStatus.HIT) {
|
|
71
|
+
hitsToCache.set(fieldValue, cacheResult.item);
|
|
72
|
+
} else if (cacheResult.status === CacheStatus.NEGATIVE) {
|
|
73
|
+
negativesToCache.push(fieldValue);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const promises = [];
|
|
79
|
+
if (hitsToCache.size > 0) {
|
|
80
|
+
promises.push(cacheAdapter.cacheManyAsync(fieldName, hitsToCache));
|
|
81
|
+
}
|
|
82
|
+
if (negativesToCache.length > 0) {
|
|
83
|
+
promises.push(cacheAdapter.cacheDBMissesAsync(fieldName, negativesToCache));
|
|
84
|
+
}
|
|
85
|
+
await Promise.all(promises);
|
|
45
86
|
}
|
|
46
87
|
|
|
47
88
|
for (const fieldValue of unfulfilledFieldValues) {
|
|
@@ -2,12 +2,13 @@ import nullthrows from 'nullthrows';
|
|
|
2
2
|
|
|
3
3
|
import { ISecondaryEntityCache } from './EntitySecondaryCacheLoader';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
|
|
7
|
+
*/
|
|
5
8
|
export default class ComposedSecondaryEntityCache<TLoadParams, TFields>
|
|
6
9
|
implements ISecondaryEntityCache<TFields, TLoadParams>
|
|
7
10
|
{
|
|
8
11
|
/**
|
|
9
|
-
* A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
|
|
10
|
-
*
|
|
11
12
|
* @param secondaryEntityCaches - list of caches to compose in order of precedence.
|
|
12
13
|
* Earlier caches are read from first and written to (including invalidations) last.
|
|
13
14
|
* Typically, caches closer to the application should be ordered before caches closer to the database.
|
|
@@ -6,6 +6,11 @@ import { EntityQueryContext } from './EntityQueryContext';
|
|
|
6
6
|
import ReadonlyEntity from './ReadonlyEntity';
|
|
7
7
|
import ViewerContext from './ViewerContext';
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* An association loader is a set of convenience methods for loading entities
|
|
11
|
+
* associated with an entity. In relational databases, these entities are often referenced
|
|
12
|
+
* by foreign keys.
|
|
13
|
+
*/
|
|
9
14
|
export default class EntityAssociationLoader<
|
|
10
15
|
TFields,
|
|
11
16
|
TID extends NonNullable<TFields[TSelectedFields]>,
|
|
@@ -162,11 +162,11 @@ describe(ComposedEntityCacheAdapter, () => {
|
|
|
162
162
|
});
|
|
163
163
|
|
|
164
164
|
it('returns fallback adapter results primary is empty', async () => {
|
|
165
|
-
const {
|
|
165
|
+
const { fallbackCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
|
|
166
166
|
|
|
167
167
|
const cacheHits = new Map<string, Readonly<BlahFields>>([['test-id-1', { id: 'test-id-1' }]]);
|
|
168
|
-
await
|
|
169
|
-
await
|
|
168
|
+
await fallbackCacheAdapter.cacheManyAsync('id', cacheHits);
|
|
169
|
+
await fallbackCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
|
|
170
170
|
|
|
171
171
|
const results = await cacheAdapter.loadManyAsync('id', [
|
|
172
172
|
'test-id-1',
|
|
@@ -183,6 +183,45 @@ describe(ComposedEntityCacheAdapter, () => {
|
|
|
183
183
|
expect(results.size).toBe(3);
|
|
184
184
|
});
|
|
185
185
|
|
|
186
|
+
it('populates primary adapter with fallback adapter results', async () => {
|
|
187
|
+
const { primaryCacheAdapter, fallbackCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
|
|
188
|
+
|
|
189
|
+
const cacheHits = new Map<string, Readonly<BlahFields>>([['test-id-1', { id: 'test-id-1' }]]);
|
|
190
|
+
await fallbackCacheAdapter.cacheManyAsync('id', cacheHits);
|
|
191
|
+
await fallbackCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
|
|
192
|
+
|
|
193
|
+
// should populate primary cache with fallback cache results
|
|
194
|
+
await cacheAdapter.loadManyAsync('id', ['test-id-1', 'test-id-2', 'test-id-3']);
|
|
195
|
+
|
|
196
|
+
const primaryResults = await primaryCacheAdapter.loadManyAsync('id', [
|
|
197
|
+
'test-id-1',
|
|
198
|
+
'test-id-2',
|
|
199
|
+
'test-id-3',
|
|
200
|
+
]);
|
|
201
|
+
|
|
202
|
+
expect(primaryResults.get('test-id-1')).toMatchObject({
|
|
203
|
+
status: CacheStatus.HIT,
|
|
204
|
+
item: { id: 'test-id-1' },
|
|
205
|
+
});
|
|
206
|
+
expect(primaryResults.get('test-id-2')).toMatchObject({ status: CacheStatus.NEGATIVE });
|
|
207
|
+
expect(primaryResults.get('test-id-3')).toMatchObject({ status: CacheStatus.MISS });
|
|
208
|
+
expect(primaryResults.size).toBe(3);
|
|
209
|
+
|
|
210
|
+
// ensure that populating the primary cache doesn't change the output
|
|
211
|
+
const composedResults = await cacheAdapter.loadManyAsync('id', [
|
|
212
|
+
'test-id-1',
|
|
213
|
+
'test-id-2',
|
|
214
|
+
'test-id-3',
|
|
215
|
+
]);
|
|
216
|
+
expect(composedResults.get('test-id-1')).toMatchObject({
|
|
217
|
+
status: CacheStatus.HIT,
|
|
218
|
+
item: { id: 'test-id-1' },
|
|
219
|
+
});
|
|
220
|
+
expect(composedResults.get('test-id-2')).toMatchObject({ status: CacheStatus.NEGATIVE });
|
|
221
|
+
expect(composedResults.get('test-id-3')).toMatchObject({ status: CacheStatus.MISS });
|
|
222
|
+
expect(composedResults.size).toBe(3);
|
|
223
|
+
});
|
|
224
|
+
|
|
186
225
|
it('returns empty map when passed empty array of fieldValues', async () => {
|
|
187
226
|
const { cacheAdapter } = makeTestCacheAdapters();
|
|
188
227
|
const results = await cacheAdapter.loadManyAsync('id', []);
|