@expo/entity-secondary-cache-redis 0.31.0 → 0.32.0
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/README.md +1 -1
- package/build/__integration-tests__/RedisSecondaryEntityCache-integration-test.js +6 -7
- package/build/__integration-tests__/RedisSecondaryEntityCache-integration-test.js.map +1 -1
- package/build/testfixtures/RedisTestEntity.d.ts +2 -2
- package/build/testfixtures/RedisTestEntity.js +6 -7
- package/build/testfixtures/RedisTestEntity.js.map +1 -1
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.d.ts +2 -2
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.js +2 -2
- package/package.json +5 -5
- package/src/__integration-tests__/RedisSecondaryEntityCache-integration-test.ts +7 -8
- package/src/testfixtures/RedisTestEntity.ts +6 -8
- package/src/testfixtures/createRedisIntegrationTestEntityCompanionProvider.ts +3 -3
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(
|
|
13
13
|
new RedisSecondaryEntityCache(
|
|
14
14
|
redisTestEntityConfiguration,
|
|
15
|
-
|
|
15
|
+
genericRedisCacheContext,
|
|
16
16
|
(loadParams) => `${loadParams.id}`
|
|
17
17
|
),
|
|
18
18
|
RedisTestEntity.loader(viewerContext)
|
|
@@ -58,15 +58,14 @@ class TestSecondaryRedisCacheLoader extends entity_1.EntitySecondaryCacheLoader
|
|
|
58
58
|
}
|
|
59
59
|
describe(RedisSecondaryEntityCache_1.default, () => {
|
|
60
60
|
const redisClient = new ioredis_1.default(new url_1.URL(process.env['REDIS_URL']).toString());
|
|
61
|
-
let
|
|
61
|
+
let genericRedisCacheContext;
|
|
62
62
|
beforeAll(() => {
|
|
63
|
-
|
|
63
|
+
genericRedisCacheContext = {
|
|
64
64
|
redisClient,
|
|
65
65
|
makeKeyFn(..._parts) {
|
|
66
66
|
throw new Error('should not be used by this test');
|
|
67
67
|
},
|
|
68
68
|
cacheKeyPrefix: 'test-',
|
|
69
|
-
cacheKeyVersion: 1,
|
|
70
69
|
ttlSecondsPositive: 86400,
|
|
71
70
|
ttlSecondsNegative: 600, // 10 minutes
|
|
72
71
|
};
|
|
@@ -78,11 +77,11 @@ describe(RedisSecondaryEntityCache_1.default, () => {
|
|
|
78
77
|
redisClient.disconnect();
|
|
79
78
|
});
|
|
80
79
|
it('Loads through secondary loader, caches, and invalidates', async () => {
|
|
81
|
-
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(
|
|
80
|
+
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
82
81
|
const createdEntity = await RedisTestEntity_1.default.creator(viewerContext)
|
|
83
82
|
.setField('name', 'wat')
|
|
84
83
|
.enforceCreateAsync();
|
|
85
|
-
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(new RedisSecondaryEntityCache_1.default(RedisTestEntity_1.redisTestEntityConfiguration,
|
|
84
|
+
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(new RedisSecondaryEntityCache_1.default(RedisTestEntity_1.redisTestEntityConfiguration, genericRedisCacheContext, (loadParams) => `test-key-${loadParams.id}`), RedisTestEntity_1.default.loader(viewerContext));
|
|
86
85
|
const loadParams = { id: createdEntity.getID() };
|
|
87
86
|
const results = await secondaryCacheLoader.loadManyAsync([loadParams]);
|
|
88
87
|
expect((0, nullthrows_1.default)(results.get(loadParams)).enforceValue().getID()).toEqual(createdEntity.getID());
|
|
@@ -96,8 +95,8 @@ describe(RedisSecondaryEntityCache_1.default, () => {
|
|
|
96
95
|
expect(secondaryCacheLoader.databaseLoadCount).toEqual(2);
|
|
97
96
|
});
|
|
98
97
|
it('correctly handles uncached and unfetchable load params', async () => {
|
|
99
|
-
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(
|
|
100
|
-
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(new RedisSecondaryEntityCache_1.default(RedisTestEntity_1.redisTestEntityConfiguration,
|
|
98
|
+
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
99
|
+
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(new RedisSecondaryEntityCache_1.default(RedisTestEntity_1.redisTestEntityConfiguration, genericRedisCacheContext, (loadParams) => `test-key-${loadParams.id}`), RedisTestEntity_1.default.loader(viewerContext));
|
|
101
100
|
const loadParams = { id: FAKE_ID };
|
|
102
101
|
const results = await secondaryCacheLoader.loadManyAsync([loadParams]);
|
|
103
102
|
expect(results.size).toBe(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisSecondaryEntityCache-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/RedisSecondaryEntityCache-integration-test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAsF;AAEtF,sDAA4B;AAC5B,4DAAoC;AACpC,6BAA0B;AAE1B,6FAAqE;AACrE,mFAIyC;AACzC,yIAAsI;AAEtI,MAAM,iBAAkB,SAAQ,sBAAa;CAAG;AAIhD,MAAM,OAAO,GAAG,MAAM,CAAC;AAEvB,MAAM,6BAA8B,SAAQ,mCAO3C;IAPD;;QAQS,sBAAiB,GAAG,CAAC,CAAC;IAuB/B,CAAC;IArBW,KAAK,CAAC,6BAA6B,CAC3C,eAAoD;QAEpD,IAAI,CAAC,iBAAiB,IAAI,eAAe,CAAC,MAAM,CAAC;QAEjD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,MAAM,IAAA,oBAAW,EAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;YAC9D,IAAI,UAAU,CAAC,EAAE,KAAK,OAAO,EAAE;gBAC7B,OAAO,IAAI,CAAC;aACb;YACD,OAAO,IAAA,oBAAU,EACf,CACE,MAAM,IAAI,CAAC,YAAY;iBACpB,SAAS,EAAE;iBACX,uCAAuC,CAAC;gBACvC,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE;aAC/C,CAAC,CACL,CAAC,CAAC,CAAC,CACL,CAAC,YAAY,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,QAAQ,CAAC,mCAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,WAAW,GAAG,IAAI,iBAAK,CAAC,IAAI,SAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7E,IAAI,wBAAkD,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,wBAAwB,GAAG;YACzB,WAAW;YACX,SAAS,CAAC,GAAG,MAAgB;gBAC3B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,cAAc,EAAE,OAAO;YACvB,
|
|
1
|
+
{"version":3,"file":"RedisSecondaryEntityCache-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/RedisSecondaryEntityCache-integration-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AlwaysAllowPrivacyPolicyRule, EntityPrivacyPolicy, ViewerContext, EntityConfiguration, EntityCompanionDefinition, Entity } from '@expo/entity';
|
|
2
|
-
export
|
|
2
|
+
export type RedisTestEntityFields = {
|
|
3
3
|
id: string;
|
|
4
4
|
name: string;
|
|
5
5
|
};
|
|
6
6
|
export default class RedisTestEntity extends Entity<RedisTestEntityFields, string, ViewerContext> {
|
|
7
|
-
static
|
|
7
|
+
static defineCompanionDefinition(): EntityCompanionDefinition<RedisTestEntityFields, string, ViewerContext, RedisTestEntity, RedisTestEntityPrivacyPolicy>;
|
|
8
8
|
}
|
|
9
9
|
export declare class RedisTestEntityPrivacyPolicy extends EntityPrivacyPolicy<RedisTestEntityFields, string, ViewerContext, RedisTestEntity> {
|
|
10
10
|
protected readonly createRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity, keyof RedisTestEntityFields>[];
|
|
@@ -3,8 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.redisTestEntityConfiguration = exports.RedisTestEntityPrivacyPolicy = void 0;
|
|
4
4
|
const entity_1 = require("@expo/entity");
|
|
5
5
|
class RedisTestEntity extends entity_1.Entity {
|
|
6
|
-
static
|
|
7
|
-
return
|
|
6
|
+
static defineCompanionDefinition() {
|
|
7
|
+
return {
|
|
8
|
+
entityClass: RedisTestEntity,
|
|
9
|
+
entityConfiguration: exports.redisTestEntityConfiguration,
|
|
10
|
+
privacyPolicyClass: RedisTestEntityPrivacyPolicy,
|
|
11
|
+
};
|
|
8
12
|
}
|
|
9
13
|
}
|
|
10
14
|
exports.default = RedisTestEntity;
|
|
@@ -40,9 +44,4 @@ exports.redisTestEntityConfiguration = new entity_1.EntityConfiguration({
|
|
|
40
44
|
databaseAdapterFlavor: 'postgres',
|
|
41
45
|
cacheAdapterFlavor: 'redis',
|
|
42
46
|
});
|
|
43
|
-
const redisTestEntityCompanionDefinition = new entity_1.EntityCompanionDefinition({
|
|
44
|
-
entityClass: RedisTestEntity,
|
|
45
|
-
entityConfiguration: exports.redisTestEntityConfiguration,
|
|
46
|
-
privacyPolicyClass: RedisTestEntityPrivacyPolicy,
|
|
47
|
-
});
|
|
48
47
|
//# sourceMappingURL=RedisTestEntity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisTestEntity.js","sourceRoot":"","sources":["../../src/testfixtures/RedisTestEntity.ts"],"names":[],"mappings":";;;AAAA,yCASsB;AAOtB,MAAqB,eAAgB,SAAQ,eAAoD;IAC/F,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"RedisTestEntity.js","sourceRoot":"","sources":["../../src/testfixtures/RedisTestEntity.ts"],"names":[],"mappings":";;;AAAA,yCASsB;AAOtB,MAAqB,eAAgB,SAAQ,eAAoD;IAC/F,MAAM,CAAC,yBAAyB;QAO9B,OAAO;YACL,WAAW,EAAE,eAAe;YAC5B,mBAAmB,EAAE,oCAA4B;YACjD,kBAAkB,EAAE,4BAA4B;SACjD,CAAC;IACJ,CAAC;CACF;AAdD,kCAcC;AAED,MAAa,4BAA6B,SAAQ,4BAKjD;IALD;;QAM8B,gBAAW,GAAG;YACxC,IAAI,qCAA4B,EAK7B;SACJ,CAAC;QAC0B,cAAS,GAAG;YACtC,IAAI,qCAA4B,EAK7B;SACJ,CAAC;QAC0B,gBAAW,GAAG;YACxC,IAAI,qCAA4B,EAK7B;SACJ,CAAC;QAC0B,gBAAW,GAAG;YACxC,IAAI,qCAA4B,EAK7B;SACJ,CAAC;IACJ,CAAC;CAAA;AAtCD,oEAsCC;AAEY,QAAA,4BAA4B,GAAG,IAAI,4BAAmB,CAAwB;IACzF,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,qBAAqB;IAChC,MAAM,EAAE;QACN,EAAE,EAAE,IAAI,kBAAS,CAAC;YAChB,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,IAAI,EAAE,IAAI,oBAAW,CAAC;YACpB,UAAU,EAAE,MAAM;SACnB,CAAC;KACH;IACD,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,OAAO;CAC5B,CAAC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { IEntityMetricsAdapter, EntityCompanionProvider } from '@expo/entity';
|
|
2
|
-
import {
|
|
3
|
-
export declare const createRedisIntegrationTestEntityCompanionProvider: (
|
|
2
|
+
import { GenericRedisCacheContext } from '@expo/entity-cache-adapter-redis';
|
|
3
|
+
export declare const createRedisIntegrationTestEntityCompanionProvider: (genericRedisCacheContext: GenericRedisCacheContext, metricsAdapter?: IEntityMetricsAdapter) => EntityCompanionProvider;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createRedisIntegrationTestEntityCompanionProvider = void 0;
|
|
4
4
|
const entity_1 = require("@expo/entity");
|
|
5
5
|
const entity_cache_adapter_redis_1 = require("@expo/entity-cache-adapter-redis");
|
|
6
|
-
const createRedisIntegrationTestEntityCompanionProvider = (
|
|
6
|
+
const createRedisIntegrationTestEntityCompanionProvider = (genericRedisCacheContext, metricsAdapter = new entity_1.NoOpEntityMetricsAdapter()) => {
|
|
7
7
|
return new entity_1.EntityCompanionProvider(metricsAdapter, new Map([
|
|
8
8
|
[
|
|
9
9
|
'postgres',
|
|
@@ -16,7 +16,7 @@ const createRedisIntegrationTestEntityCompanionProvider = (redisCacheAdapterCont
|
|
|
16
16
|
[
|
|
17
17
|
'redis',
|
|
18
18
|
{
|
|
19
|
-
cacheAdapterProvider: new entity_cache_adapter_redis_1.RedisCacheAdapterProvider(
|
|
19
|
+
cacheAdapterProvider: new entity_cache_adapter_redis_1.RedisCacheAdapterProvider(genericRedisCacheContext),
|
|
20
20
|
},
|
|
21
21
|
],
|
|
22
22
|
]));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/entity-secondary-cache-redis",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"description": "Redis secondary cache for @expo/entity",
|
|
5
5
|
"files": [
|
|
6
6
|
"build",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"barrelsby": "barrelsby --directory src --location top --exclude tests__ --singleQuotes --exportDefault --delete"
|
|
20
20
|
},
|
|
21
21
|
"engines": {
|
|
22
|
-
"node": ">=
|
|
22
|
+
"node": ">=16"
|
|
23
23
|
},
|
|
24
24
|
"keywords": [
|
|
25
25
|
"entity"
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"@expo/entity-cache-adapter-redis": "*"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@expo/entity": "^0.
|
|
35
|
-
"@expo/entity-cache-adapter-redis": "^0.
|
|
34
|
+
"@expo/entity": "^0.32.0",
|
|
35
|
+
"@expo/entity-cache-adapter-redis": "^0.32.0",
|
|
36
36
|
"ioredis": "^5.2.5",
|
|
37
37
|
"nullthrows": "^1.1.1"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "d2a4405fa1af673a98e36b9b7c76c0ee7961a23e"
|
|
40
40
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EntitySecondaryCacheLoader, mapMapAsync, ViewerContext } from '@expo/entity';
|
|
2
|
-
import {
|
|
2
|
+
import { GenericRedisCacheContext } from '@expo/entity-cache-adapter-redis';
|
|
3
3
|
import Redis from 'ioredis';
|
|
4
4
|
import nullthrows from 'nullthrows';
|
|
5
5
|
import { URL } from 'url';
|
|
@@ -53,16 +53,15 @@ class TestSecondaryRedisCacheLoader extends EntitySecondaryCacheLoader<
|
|
|
53
53
|
|
|
54
54
|
describe(RedisSecondaryEntityCache, () => {
|
|
55
55
|
const redisClient = new Redis(new URL(process.env['REDIS_URL']!).toString());
|
|
56
|
-
let
|
|
56
|
+
let genericRedisCacheContext: GenericRedisCacheContext;
|
|
57
57
|
|
|
58
58
|
beforeAll(() => {
|
|
59
|
-
|
|
59
|
+
genericRedisCacheContext = {
|
|
60
60
|
redisClient,
|
|
61
61
|
makeKeyFn(..._parts: string[]): string {
|
|
62
62
|
throw new Error('should not be used by this test');
|
|
63
63
|
},
|
|
64
64
|
cacheKeyPrefix: 'test-',
|
|
65
|
-
cacheKeyVersion: 1,
|
|
66
65
|
ttlSecondsPositive: 86400, // 1 day
|
|
67
66
|
ttlSecondsNegative: 600, // 10 minutes
|
|
68
67
|
};
|
|
@@ -77,7 +76,7 @@ describe(RedisSecondaryEntityCache, () => {
|
|
|
77
76
|
|
|
78
77
|
it('Loads through secondary loader, caches, and invalidates', async () => {
|
|
79
78
|
const viewerContext = new TestViewerContext(
|
|
80
|
-
createRedisIntegrationTestEntityCompanionProvider(
|
|
79
|
+
createRedisIntegrationTestEntityCompanionProvider(genericRedisCacheContext)
|
|
81
80
|
);
|
|
82
81
|
|
|
83
82
|
const createdEntity = await RedisTestEntity.creator(viewerContext)
|
|
@@ -87,7 +86,7 @@ describe(RedisSecondaryEntityCache, () => {
|
|
|
87
86
|
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(
|
|
88
87
|
new RedisSecondaryEntityCache(
|
|
89
88
|
redisTestEntityConfiguration,
|
|
90
|
-
|
|
89
|
+
genericRedisCacheContext,
|
|
91
90
|
(loadParams) => `test-key-${loadParams.id}`
|
|
92
91
|
),
|
|
93
92
|
RedisTestEntity.loader(viewerContext)
|
|
@@ -120,13 +119,13 @@ describe(RedisSecondaryEntityCache, () => {
|
|
|
120
119
|
|
|
121
120
|
it('correctly handles uncached and unfetchable load params', async () => {
|
|
122
121
|
const viewerContext = new TestViewerContext(
|
|
123
|
-
createRedisIntegrationTestEntityCompanionProvider(
|
|
122
|
+
createRedisIntegrationTestEntityCompanionProvider(genericRedisCacheContext)
|
|
124
123
|
);
|
|
125
124
|
|
|
126
125
|
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(
|
|
127
126
|
new RedisSecondaryEntityCache(
|
|
128
127
|
redisTestEntityConfiguration,
|
|
129
|
-
|
|
128
|
+
genericRedisCacheContext,
|
|
130
129
|
(loadParams) => `test-key-${loadParams.id}`
|
|
131
130
|
),
|
|
132
131
|
RedisTestEntity.loader(viewerContext)
|
|
@@ -15,14 +15,18 @@ export type RedisTestEntityFields = {
|
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
export default class RedisTestEntity extends Entity<RedisTestEntityFields, string, ViewerContext> {
|
|
18
|
-
static
|
|
18
|
+
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
19
19
|
RedisTestEntityFields,
|
|
20
20
|
string,
|
|
21
21
|
ViewerContext,
|
|
22
22
|
RedisTestEntity,
|
|
23
23
|
RedisTestEntityPrivacyPolicy
|
|
24
24
|
> {
|
|
25
|
-
return
|
|
25
|
+
return {
|
|
26
|
+
entityClass: RedisTestEntity,
|
|
27
|
+
entityConfiguration: redisTestEntityConfiguration,
|
|
28
|
+
privacyPolicyClass: RedisTestEntityPrivacyPolicy,
|
|
29
|
+
};
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
32
|
|
|
@@ -80,9 +84,3 @@ export const redisTestEntityConfiguration = new EntityConfiguration<RedisTestEnt
|
|
|
80
84
|
databaseAdapterFlavor: 'postgres',
|
|
81
85
|
cacheAdapterFlavor: 'redis',
|
|
82
86
|
});
|
|
83
|
-
|
|
84
|
-
const redisTestEntityCompanionDefinition = new EntityCompanionDefinition({
|
|
85
|
-
entityClass: RedisTestEntity,
|
|
86
|
-
entityConfiguration: redisTestEntityConfiguration,
|
|
87
|
-
privacyPolicyClass: RedisTestEntityPrivacyPolicy,
|
|
88
|
-
});
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
StubDatabaseAdapterProvider,
|
|
7
7
|
} from '@expo/entity';
|
|
8
8
|
import {
|
|
9
|
-
|
|
9
|
+
GenericRedisCacheContext,
|
|
10
10
|
RedisCacheAdapterProvider,
|
|
11
11
|
} from '@expo/entity-cache-adapter-redis';
|
|
12
12
|
|
|
13
13
|
export const createRedisIntegrationTestEntityCompanionProvider = (
|
|
14
|
-
|
|
14
|
+
genericRedisCacheContext: GenericRedisCacheContext,
|
|
15
15
|
metricsAdapter: IEntityMetricsAdapter = new NoOpEntityMetricsAdapter()
|
|
16
16
|
): EntityCompanionProvider => {
|
|
17
17
|
return new EntityCompanionProvider(
|
|
@@ -29,7 +29,7 @@ export const createRedisIntegrationTestEntityCompanionProvider = (
|
|
|
29
29
|
[
|
|
30
30
|
'redis',
|
|
31
31
|
{
|
|
32
|
-
cacheAdapterProvider: new RedisCacheAdapterProvider(
|
|
32
|
+
cacheAdapterProvider: new RedisCacheAdapterProvider(genericRedisCacheContext),
|
|
33
33
|
},
|
|
34
34
|
],
|
|
35
35
|
])
|