@expo/entity-cache-adapter-local-memory 0.25.1 → 0.25.2
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/GenericLocalMemoryCacher.js +6 -4
- package/build/GenericLocalMemoryCacher.js.map +1 -1
- package/build/__tests__/GenericLocalMemoryCacher-test.d.ts +1 -0
- package/build/__tests__/GenericLocalMemoryCacher-test.js +33 -0
- package/build/__tests__/GenericLocalMemoryCacher-test.js.map +1 -0
- package/build/__tests__/LocalMemoryCacheAdapter-test.js +6 -24
- package/build/__tests__/LocalMemoryCacheAdapter-test.js.map +1 -1
- package/package.json +2 -2
- package/src/GenericLocalMemoryCacher.ts +5 -3
- package/src/__tests__/GenericLocalMemoryCacher-test.ts +30 -0
- package/src/__tests__/LocalMemoryCacheAdapter-test.ts +6 -24
|
@@ -14,12 +14,13 @@ class GenericLocalMemoryCacher {
|
|
|
14
14
|
this.localMemoryCache = localMemoryCache;
|
|
15
15
|
}
|
|
16
16
|
static createLRUCache(options = {}) {
|
|
17
|
-
var _a, _b;
|
|
17
|
+
var _a, _b, _c;
|
|
18
18
|
const DEFAULT_LRU_CACHE_MAX_AGE_SECONDS = 10;
|
|
19
19
|
const DEFAULT_LRU_CACHE_SIZE = 10000;
|
|
20
20
|
const maxAgeSeconds = (_a = options.ttlSeconds) !== null && _a !== void 0 ? _a : DEFAULT_LRU_CACHE_MAX_AGE_SECONDS;
|
|
21
21
|
const lruCacheOptions = {
|
|
22
22
|
max: (_b = options.maxSize) !== null && _b !== void 0 ? _b : DEFAULT_LRU_CACHE_SIZE,
|
|
23
|
+
maxSize: (_c = options.maxSize) !== null && _c !== void 0 ? _c : DEFAULT_LRU_CACHE_SIZE,
|
|
23
24
|
sizeCalculation: (value) => value === exports.DOES_NOT_EXIST_LOCAL_MEMORY_CACHE ? 0 : 1,
|
|
24
25
|
ttl: maxAgeSeconds * 1000, // convert to ms
|
|
25
26
|
};
|
|
@@ -27,8 +28,9 @@ class GenericLocalMemoryCacher {
|
|
|
27
28
|
}
|
|
28
29
|
static createNoOpCache() {
|
|
29
30
|
return new lru_cache_1.default({
|
|
30
|
-
max:
|
|
31
|
-
|
|
31
|
+
max: 1,
|
|
32
|
+
maxSize: 1,
|
|
33
|
+
sizeCalculation: () => 10, // make all things larger than max size
|
|
32
34
|
});
|
|
33
35
|
}
|
|
34
36
|
async loadManyAsync(keys) {
|
|
@@ -66,7 +68,7 @@ class GenericLocalMemoryCacher {
|
|
|
66
68
|
}
|
|
67
69
|
async invalidateManyAsync(keys) {
|
|
68
70
|
for (const key of keys) {
|
|
69
|
-
this.localMemoryCache.
|
|
71
|
+
this.localMemoryCache.delete(key);
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
makeCacheKey(parts) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericLocalMemoryCacher.js","sourceRoot":"","sources":["../src/GenericLocalMemoryCacher.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAkF;AAClF,0DAAiC;AAEjC,+EAA+E;AAC/E,qEAAqE;AACxD,QAAA,iCAAiC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AA0ExE,MAAqB,wBAAwB;IAC3C,YAA6B,gBAA2C;QAA3C,qBAAgB,GAAhB,gBAAgB,CAA2B;IAAG,CAAC;IAE5E,MAAM,CAAC,cAAc,CACnB,UAAqD,EAAE;;QAEvD,MAAM,iCAAiC,GAAG,EAAE,CAAC;QAC7C,MAAM,sBAAsB,GAAG,KAAK,CAAC;QACrC,MAAM,aAAa,GAAG,MAAA,OAAO,CAAC,UAAU,mCAAI,iCAAiC,CAAC;QAC9E,MAAM,eAAe,GAAuC;YAC1D,GAAG,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,sBAAsB;YAC9C,eAAe,EAAE,CAAC,KAAqC,EAAE,EAAE,CACzD,KAAK,KAAK,yCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,GAAG,EAAE,aAAa,GAAG,IAAI,EAAE,gBAAgB;SAC5C,CAAC;QACF,OAAO,IAAI,mBAAQ,CAAyC,eAAsB,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,CAAC,eAAe;QACpB,OAAO,IAAI,mBAAQ,CAAyC;YAC1D,GAAG,EAAE,CAAC;YACN,
|
|
1
|
+
{"version":3,"file":"GenericLocalMemoryCacher.js","sourceRoot":"","sources":["../src/GenericLocalMemoryCacher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const GenericLocalMemoryCacher_1 = __importDefault(require("../GenericLocalMemoryCacher"));
|
|
7
|
+
describe(GenericLocalMemoryCacher_1.default, () => {
|
|
8
|
+
describe(GenericLocalMemoryCacher_1.default.createLRUCache, () => {
|
|
9
|
+
it('creates a cache with default options', () => {
|
|
10
|
+
const cache = GenericLocalMemoryCacher_1.default.createLRUCache();
|
|
11
|
+
expect(cache.max).toBe(10000);
|
|
12
|
+
expect(cache.maxSize).toBe(10000);
|
|
13
|
+
expect(cache.ttl).toBe(10000);
|
|
14
|
+
});
|
|
15
|
+
it('respects specified options', () => {
|
|
16
|
+
const cache = GenericLocalMemoryCacher_1.default.createLRUCache({
|
|
17
|
+
ttlSeconds: 3,
|
|
18
|
+
maxSize: 10,
|
|
19
|
+
});
|
|
20
|
+
expect(cache.max).toBe(10);
|
|
21
|
+
expect(cache.maxSize).toBe(10);
|
|
22
|
+
expect(cache.ttl).toBe(3000);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe(GenericLocalMemoryCacher_1.default.createNoOpCache, () => {
|
|
26
|
+
it('creates a no-op cache', () => {
|
|
27
|
+
const cache = GenericLocalMemoryCacher_1.default.createNoOpCache();
|
|
28
|
+
cache.set('a', { hello: 'world' });
|
|
29
|
+
expect(cache.get('a')).toBeUndefined();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=GenericLocalMemoryCacher-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenericLocalMemoryCacher-test.js","sourceRoot":"","sources":["../../src/__tests__/GenericLocalMemoryCacher-test.ts"],"names":[],"mappings":";;;;;AAAA,2FAAmE;AAEnE,QAAQ,CAAC,kCAAwB,EAAE,GAAG,EAAE;IACtC,QAAQ,CAAC,kCAAwB,CAAC,cAAc,EAAE,GAAG,EAAE;QACrD,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,KAAK,GAAG,kCAAwB,CAAC,cAAc,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,KAAK,GAAG,kCAAwB,CAAC,cAAc,CAAC;gBACpD,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,EAAE;aACZ,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAwB,CAAC,eAAe,EAAE,GAAG,EAAE;QACtD,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,KAAK,GAAG,kCAAwB,CAAC,eAAe,EAAsB,CAAC;YAC7E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -37,10 +37,7 @@ const entityConfiguration = new entity_1.EntityConfiguration({
|
|
|
37
37
|
describe(LocalMemoryCacheAdapter_1.default, () => {
|
|
38
38
|
describe('loadManyAsync', () => {
|
|
39
39
|
it('returns appropriate cache results', async () => {
|
|
40
|
-
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, GenericLocalMemoryCacher_1.default.createLRUCache(
|
|
41
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
42
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
43
|
-
}));
|
|
40
|
+
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, GenericLocalMemoryCacher_1.default.createLRUCache());
|
|
44
41
|
const cacheHits = new Map([['test-id-1', { id: 'test-id-1' }]]);
|
|
45
42
|
await cacheAdapter.cacheManyAsync('id', cacheHits);
|
|
46
43
|
await cacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
|
|
@@ -58,20 +55,14 @@ describe(LocalMemoryCacheAdapter_1.default, () => {
|
|
|
58
55
|
expect(results.size).toBe(3);
|
|
59
56
|
});
|
|
60
57
|
it('returns empty map when passed empty array of fieldValues', async () => {
|
|
61
|
-
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, GenericLocalMemoryCacher_1.default.createLRUCache(
|
|
62
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
63
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
64
|
-
}));
|
|
58
|
+
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, GenericLocalMemoryCacher_1.default.createLRUCache());
|
|
65
59
|
const results = await cacheAdapter.loadManyAsync('id', []);
|
|
66
60
|
expect(results).toEqual(new Map());
|
|
67
61
|
});
|
|
68
62
|
});
|
|
69
63
|
describe('cacheManyAsync', () => {
|
|
70
64
|
it('correctly caches all objects', async () => {
|
|
71
|
-
const localMemoryCache = GenericLocalMemoryCacher_1.default.createLRUCache({
|
|
72
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
73
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
74
|
-
});
|
|
65
|
+
const localMemoryCache = GenericLocalMemoryCacher_1.default.createLRUCache({});
|
|
75
66
|
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, localMemoryCache);
|
|
76
67
|
await cacheAdapter.cacheManyAsync('id', new Map([['test-id-1', { id: 'test-id-1' }]]));
|
|
77
68
|
const cacheKey = cacheAdapter['makeCacheKey']('id', 'test-id-1');
|
|
@@ -82,10 +73,7 @@ describe(LocalMemoryCacheAdapter_1.default, () => {
|
|
|
82
73
|
});
|
|
83
74
|
describe('cacheDBMissesAsync', () => {
|
|
84
75
|
it('correctly caches misses', async () => {
|
|
85
|
-
const localMemoryCache = GenericLocalMemoryCacher_1.default.createLRUCache({
|
|
86
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
87
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
88
|
-
});
|
|
76
|
+
const localMemoryCache = GenericLocalMemoryCacher_1.default.createLRUCache({});
|
|
89
77
|
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, localMemoryCache);
|
|
90
78
|
await cacheAdapter.cacheDBMissesAsync('id', ['test-id-1']);
|
|
91
79
|
const cacheKey = cacheAdapter['makeCacheKey']('id', 'test-id-1');
|
|
@@ -94,10 +82,7 @@ describe(LocalMemoryCacheAdapter_1.default, () => {
|
|
|
94
82
|
});
|
|
95
83
|
describe('invalidateManyAsync', () => {
|
|
96
84
|
it('invalidates correctly', async () => {
|
|
97
|
-
const localMemoryCache = GenericLocalMemoryCacher_1.default.createLRUCache({
|
|
98
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
99
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
100
|
-
});
|
|
85
|
+
const localMemoryCache = GenericLocalMemoryCacher_1.default.createLRUCache({});
|
|
101
86
|
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, localMemoryCache);
|
|
102
87
|
await cacheAdapter.cacheManyAsync('id', new Map([['test-id-1', { id: 'test-id-1' }]]));
|
|
103
88
|
await cacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
|
|
@@ -107,10 +92,7 @@ describe(LocalMemoryCacheAdapter_1.default, () => {
|
|
|
107
92
|
expect(results.get('test-id-2')).toMatchObject({ status: entity_1.CacheStatus.MISS });
|
|
108
93
|
});
|
|
109
94
|
it('returns when passed empty array of fieldValues', async () => {
|
|
110
|
-
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, GenericLocalMemoryCacher_1.default.createLRUCache({
|
|
111
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
112
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
113
|
-
}));
|
|
95
|
+
const cacheAdapter = new LocalMemoryCacheAdapter_1.default(entityConfiguration, GenericLocalMemoryCacher_1.default.createLRUCache({}));
|
|
114
96
|
await cacheAdapter.invalidateManyAsync('id', []);
|
|
115
97
|
});
|
|
116
98
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalMemoryCacheAdapter-test.js","sourceRoot":"","sources":["../../src/__tests__/LocalMemoryCacheAdapter-test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2E;AAE3E,wFAEqC;AACrC,yFAAiE;AAMjE,MAAM,mBAAmB,GAAG,IAAI,4BAAmB,CAAa;IAC9D,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE;QACN,EAAE,EAAE,IAAI,kBAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACrD;IACD,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,cAAc;CACnC,CAAC,CAAC;AAEH,QAAQ,CAAC,iCAAuB,EAAE,GAAG,EAAE;IACrC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,YAAY,GAAG,IAAI,iCAAuB,CAC9C,mBAAmB,EACnB,kCAAwB,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"LocalMemoryCacheAdapter-test.js","sourceRoot":"","sources":["../../src/__tests__/LocalMemoryCacheAdapter-test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/entity-cache-adapter-local-memory",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.2",
|
|
4
4
|
"description": "Cross-request local memory cache adapter for @expo/entity",
|
|
5
5
|
"files": [
|
|
6
6
|
"build",
|
|
@@ -33,6 +33,6 @@
|
|
|
33
33
|
"lru-cache": "^7.3.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@expo/entity": "^0.25.
|
|
36
|
+
"@expo/entity": "^0.25.2"
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -88,6 +88,7 @@ export default class GenericLocalMemoryCacher<TFields> implements IEntityGeneric
|
|
|
88
88
|
const maxAgeSeconds = options.ttlSeconds ?? DEFAULT_LRU_CACHE_MAX_AGE_SECONDS;
|
|
89
89
|
const lruCacheOptions: LRUCacheOptionsV7<string, TFields> = {
|
|
90
90
|
max: options.maxSize ?? DEFAULT_LRU_CACHE_SIZE,
|
|
91
|
+
maxSize: options.maxSize ?? DEFAULT_LRU_CACHE_SIZE,
|
|
91
92
|
sizeCalculation: (value: LocalMemoryCacheValue<TFields>) =>
|
|
92
93
|
value === DOES_NOT_EXIST_LOCAL_MEMORY_CACHE ? 0 : 1,
|
|
93
94
|
ttl: maxAgeSeconds * 1000, // convert to ms
|
|
@@ -97,8 +98,9 @@ export default class GenericLocalMemoryCacher<TFields> implements IEntityGeneric
|
|
|
97
98
|
|
|
98
99
|
static createNoOpCache<TFields>(): LocalMemoryCache<TFields> {
|
|
99
100
|
return new LRUCache<string, LocalMemoryCacheValue<TFields>>({
|
|
100
|
-
max:
|
|
101
|
-
|
|
101
|
+
max: 1,
|
|
102
|
+
maxSize: 1,
|
|
103
|
+
sizeCalculation: () => 10, // make all things larger than max size
|
|
102
104
|
});
|
|
103
105
|
}
|
|
104
106
|
|
|
@@ -140,7 +142,7 @@ export default class GenericLocalMemoryCacher<TFields> implements IEntityGeneric
|
|
|
140
142
|
|
|
141
143
|
public async invalidateManyAsync(keys: readonly string[]): Promise<void> {
|
|
142
144
|
for (const key of keys) {
|
|
143
|
-
this.localMemoryCache.
|
|
145
|
+
this.localMemoryCache.delete(key);
|
|
144
146
|
}
|
|
145
147
|
}
|
|
146
148
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import GenericLocalMemoryCacher from '../GenericLocalMemoryCacher';
|
|
2
|
+
|
|
3
|
+
describe(GenericLocalMemoryCacher, () => {
|
|
4
|
+
describe(GenericLocalMemoryCacher.createLRUCache, () => {
|
|
5
|
+
it('creates a cache with default options', () => {
|
|
6
|
+
const cache = GenericLocalMemoryCacher.createLRUCache();
|
|
7
|
+
expect(cache.max).toBe(10000);
|
|
8
|
+
expect(cache.maxSize).toBe(10000);
|
|
9
|
+
expect(cache.ttl).toBe(10000);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('respects specified options', () => {
|
|
13
|
+
const cache = GenericLocalMemoryCacher.createLRUCache({
|
|
14
|
+
ttlSeconds: 3,
|
|
15
|
+
maxSize: 10,
|
|
16
|
+
});
|
|
17
|
+
expect(cache.max).toBe(10);
|
|
18
|
+
expect(cache.maxSize).toBe(10);
|
|
19
|
+
expect(cache.ttl).toBe(3000);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
describe(GenericLocalMemoryCacher.createNoOpCache, () => {
|
|
24
|
+
it('creates a no-op cache', () => {
|
|
25
|
+
const cache = GenericLocalMemoryCacher.createNoOpCache<{ hello: 'world' }>();
|
|
26
|
+
cache.set('a', { hello: 'world' });
|
|
27
|
+
expect(cache.get('a')).toBeUndefined();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -24,10 +24,7 @@ describe(LocalMemoryCacheAdapter, () => {
|
|
|
24
24
|
it('returns appropriate cache results', async () => {
|
|
25
25
|
const cacheAdapter = new LocalMemoryCacheAdapter(
|
|
26
26
|
entityConfiguration,
|
|
27
|
-
GenericLocalMemoryCacher.createLRUCache(
|
|
28
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
29
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
30
|
-
})
|
|
27
|
+
GenericLocalMemoryCacher.createLRUCache()
|
|
31
28
|
);
|
|
32
29
|
|
|
33
30
|
const cacheHits = new Map<string, Readonly<BlahFields>>([['test-id-1', { id: 'test-id-1' }]]);
|
|
@@ -52,10 +49,7 @@ describe(LocalMemoryCacheAdapter, () => {
|
|
|
52
49
|
it('returns empty map when passed empty array of fieldValues', async () => {
|
|
53
50
|
const cacheAdapter = new LocalMemoryCacheAdapter(
|
|
54
51
|
entityConfiguration,
|
|
55
|
-
GenericLocalMemoryCacher.createLRUCache(
|
|
56
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
57
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
58
|
-
})
|
|
52
|
+
GenericLocalMemoryCacher.createLRUCache()
|
|
59
53
|
);
|
|
60
54
|
const results = await cacheAdapter.loadManyAsync('id', []);
|
|
61
55
|
expect(results).toEqual(new Map());
|
|
@@ -64,10 +58,7 @@ describe(LocalMemoryCacheAdapter, () => {
|
|
|
64
58
|
|
|
65
59
|
describe('cacheManyAsync', () => {
|
|
66
60
|
it('correctly caches all objects', async () => {
|
|
67
|
-
const localMemoryCache = GenericLocalMemoryCacher.createLRUCache<BlahFields>({
|
|
68
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
69
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
70
|
-
});
|
|
61
|
+
const localMemoryCache = GenericLocalMemoryCacher.createLRUCache<BlahFields>({});
|
|
71
62
|
|
|
72
63
|
const cacheAdapter = new LocalMemoryCacheAdapter(entityConfiguration, localMemoryCache);
|
|
73
64
|
await cacheAdapter.cacheManyAsync('id', new Map([['test-id-1', { id: 'test-id-1' }]]));
|
|
@@ -81,10 +72,7 @@ describe(LocalMemoryCacheAdapter, () => {
|
|
|
81
72
|
|
|
82
73
|
describe('cacheDBMissesAsync', () => {
|
|
83
74
|
it('correctly caches misses', async () => {
|
|
84
|
-
const localMemoryCache = GenericLocalMemoryCacher.createLRUCache<BlahFields>({
|
|
85
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
86
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
87
|
-
});
|
|
75
|
+
const localMemoryCache = GenericLocalMemoryCacher.createLRUCache<BlahFields>({});
|
|
88
76
|
|
|
89
77
|
const cacheAdapter = new LocalMemoryCacheAdapter(entityConfiguration, localMemoryCache);
|
|
90
78
|
await cacheAdapter.cacheDBMissesAsync('id', ['test-id-1']);
|
|
@@ -96,10 +84,7 @@ describe(LocalMemoryCacheAdapter, () => {
|
|
|
96
84
|
|
|
97
85
|
describe('invalidateManyAsync', () => {
|
|
98
86
|
it('invalidates correctly', async () => {
|
|
99
|
-
const localMemoryCache = GenericLocalMemoryCacher.createLRUCache<BlahFields>({
|
|
100
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
101
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
102
|
-
});
|
|
87
|
+
const localMemoryCache = GenericLocalMemoryCacher.createLRUCache<BlahFields>({});
|
|
103
88
|
|
|
104
89
|
const cacheAdapter = new LocalMemoryCacheAdapter(entityConfiguration, localMemoryCache);
|
|
105
90
|
await cacheAdapter.cacheManyAsync('id', new Map([['test-id-1', { id: 'test-id-1' }]]));
|
|
@@ -114,10 +99,7 @@ describe(LocalMemoryCacheAdapter, () => {
|
|
|
114
99
|
it('returns when passed empty array of fieldValues', async () => {
|
|
115
100
|
const cacheAdapter = new LocalMemoryCacheAdapter(
|
|
116
101
|
entityConfiguration,
|
|
117
|
-
GenericLocalMemoryCacher.createLRUCache<BlahFields>({
|
|
118
|
-
maxSize: Number.MAX_SAFE_INTEGER,
|
|
119
|
-
ttlSeconds: Number.MAX_SAFE_INTEGER,
|
|
120
|
-
})
|
|
102
|
+
GenericLocalMemoryCacher.createLRUCache<BlahFields>({})
|
|
121
103
|
);
|
|
122
104
|
await cacheAdapter.invalidateManyAsync('id', []);
|
|
123
105
|
});
|