@expo/entity-cache-adapter-redis 0.39.0 → 0.41.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/build/__integration-tests__/BatchedRedisCacheAdapter-integration-test.js +8 -18
- package/build/__integration-tests__/BatchedRedisCacheAdapter-integration-test.js.map +1 -1
- package/build/__integration-tests__/GenericRedisCacher-full-integration-test.js +15 -25
- package/build/__integration-tests__/GenericRedisCacher-full-integration-test.js.map +1 -1
- package/build/__integration-tests__/GenericRedisCacher-integration-test.js +19 -9
- package/build/__integration-tests__/GenericRedisCacher-integration-test.js.map +1 -1
- package/build/__integration-tests__/errors-test.js +1 -1
- package/build/__integration-tests__/errors-test.js.map +1 -1
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.js +2 -1
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.js.map +1 -1
- package/package.json +20 -6
- package/src/__integration-tests__/BatchedRedisCacheAdapter-integration-test.ts +20 -18
- package/src/__integration-tests__/GenericRedisCacher-full-integration-test.ts +26 -25
- package/src/__integration-tests__/GenericRedisCacher-integration-test.ts +2 -2
- package/src/__integration-tests__/errors-test.ts +1 -1
- package/src/testfixtures/createRedisIntegrationTestEntityCompanionProvider.ts +2 -1
|
@@ -78,18 +78,16 @@ describe(GenericRedisCacher_1.default, () => {
|
|
|
78
78
|
const cacheKeyMaker = genericCacher['makeCacheKey'].bind(genericCacher);
|
|
79
79
|
const entity1Created = await RedisTestEntity_1.default.creator(viewerContext)
|
|
80
80
|
.setField('name', 'blah')
|
|
81
|
-
.
|
|
81
|
+
.createAsync();
|
|
82
82
|
// loading an entity should put it in cache. load by multiple requests and multiple fields in same tick to ensure batch works
|
|
83
83
|
mgetSpy.mockClear();
|
|
84
84
|
const viewerContext1 = new entity_1.ViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
85
85
|
const viewerContext2 = new entity_1.ViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
86
86
|
const viewerContext3 = new entity_1.ViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
87
87
|
const [entity1, entity2, entity3] = await Promise.all([
|
|
88
|
-
RedisTestEntity_1.default.loader(viewerContext1).
|
|
89
|
-
RedisTestEntity_1.default.loader(viewerContext2).
|
|
90
|
-
RedisTestEntity_1.default.loader(viewerContext3)
|
|
91
|
-
.enforcing()
|
|
92
|
-
.loadByFieldEqualingAsync('name', entity1Created.getField('name')),
|
|
88
|
+
RedisTestEntity_1.default.loader(viewerContext1).loadByIDAsync(entity1Created.getID()),
|
|
89
|
+
RedisTestEntity_1.default.loader(viewerContext2).loadByIDAsync(entity1Created.getID()),
|
|
90
|
+
RedisTestEntity_1.default.loader(viewerContext3).loadByFieldEqualingAsync('name', entity1Created.getField('name')),
|
|
93
91
|
]);
|
|
94
92
|
expect(mgetSpy).toHaveBeenCalledTimes(1);
|
|
95
93
|
expect(mgetSpy.mock.calls[0]).toHaveLength(2); // should dedupe the first two loads
|
|
@@ -103,28 +101,20 @@ describe(GenericRedisCacher_1.default, () => {
|
|
|
103
101
|
name: 'blah',
|
|
104
102
|
});
|
|
105
103
|
const cacheKeyEntity1NameField = cacheKeyMaker('name', entity1Created.getField('name'));
|
|
106
|
-
await RedisTestEntity_1.default.loader(viewerContext)
|
|
107
|
-
.enforcing()
|
|
108
|
-
.loadByFieldEqualingAsync('name', entity1Created.getField('name'));
|
|
104
|
+
await RedisTestEntity_1.default.loader(viewerContext).loadByFieldEqualingAsync('name', entity1Created.getField('name'));
|
|
109
105
|
await expect(redis.get(cacheKeyEntity1NameField)).resolves.toEqual(cachedJSON);
|
|
110
106
|
// simulate non existent db fetch, should write negative result ('') to cache
|
|
111
107
|
const nonExistentId = (0, uuid_1.v4)();
|
|
112
|
-
const entityNonExistentResult = await RedisTestEntity_1.default.
|
|
113
|
-
.withAuthorizationResults()
|
|
114
|
-
.loadByIDAsync(nonExistentId);
|
|
108
|
+
const entityNonExistentResult = await RedisTestEntity_1.default.loaderWithAuthorizationResults(viewerContext).loadByIDAsync(nonExistentId);
|
|
115
109
|
expect(entityNonExistentResult.ok).toBe(false);
|
|
116
110
|
const cacheKeyNonExistent = cacheKeyMaker('id', nonExistentId);
|
|
117
111
|
const nonExistentCachedValue = await redis.get(cacheKeyNonExistent);
|
|
118
112
|
expect(nonExistentCachedValue).toEqual('');
|
|
119
113
|
// load again through entities framework to ensure it reads negative result
|
|
120
|
-
const entityNonExistentResult2 = await RedisTestEntity_1.default.
|
|
121
|
-
.withAuthorizationResults()
|
|
122
|
-
.loadByIDAsync(nonExistentId);
|
|
114
|
+
const entityNonExistentResult2 = await RedisTestEntity_1.default.loaderWithAuthorizationResults(viewerContext).loadByIDAsync(nonExistentId);
|
|
123
115
|
expect(entityNonExistentResult2.ok).toBe(false);
|
|
124
116
|
// invalidate from cache to ensure it invalidates correctly in both caches
|
|
125
|
-
await RedisTestEntity_1.default.
|
|
126
|
-
.utils()
|
|
127
|
-
.invalidateFieldsAsync(entity1.getAllFields());
|
|
117
|
+
await RedisTestEntity_1.default.loaderUtils(viewerContext).invalidateFieldsAsync(entity1.getAllFields());
|
|
128
118
|
await expect(redis.get(cacheKeyEntity1)).resolves.toBeNull();
|
|
129
119
|
await expect(redis.get(cacheKeyEntity1NameField)).resolves.toBeNull();
|
|
130
120
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedRedisCacheAdapter-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/BatchedRedisCacheAdapter-integration-test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BatchedRedisCacheAdapter-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/BatchedRedisCacheAdapter-integration-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,11 +40,9 @@ describe(GenericRedisCacher_1.default, () => {
|
|
|
40
40
|
const cacheKeyMaker = genericCacher['makeCacheKey'].bind(genericCacher);
|
|
41
41
|
const entity1Created = await RedisTestEntity_1.default.creator(viewerContext)
|
|
42
42
|
.setField('name', 'blah')
|
|
43
|
-
.
|
|
43
|
+
.createAsync();
|
|
44
44
|
// loading an entity should put it in cache
|
|
45
|
-
const entity1 = await RedisTestEntity_1.default.loader(viewerContext)
|
|
46
|
-
.enforcing()
|
|
47
|
-
.loadByIDAsync(entity1Created.getID());
|
|
45
|
+
const entity1 = await RedisTestEntity_1.default.loader(viewerContext).loadByIDAsync(entity1Created.getID());
|
|
48
46
|
const cachedJSON = await genericRedisCacheContext.redisClient.get(cacheKeyMaker('id', entity1.getID()));
|
|
49
47
|
const cachedValue = JSON.parse(cachedJSON);
|
|
50
48
|
expect(cachedValue).toMatchObject({
|
|
@@ -53,50 +51,42 @@ describe(GenericRedisCacher_1.default, () => {
|
|
|
53
51
|
});
|
|
54
52
|
// simulate non existent db fetch, should write negative result ('') to cache
|
|
55
53
|
const nonExistentId = (0, uuid_1.v4)();
|
|
56
|
-
const entityNonExistentResult = await RedisTestEntity_1.default.
|
|
57
|
-
.withAuthorizationResults()
|
|
58
|
-
.loadByIDAsync(nonExistentId);
|
|
54
|
+
const entityNonExistentResult = await RedisTestEntity_1.default.loaderWithAuthorizationResults(viewerContext).loadByIDAsync(nonExistentId);
|
|
59
55
|
expect(entityNonExistentResult.ok).toBe(false);
|
|
60
56
|
const nonExistentCachedValue = await genericRedisCacheContext.redisClient.get(cacheKeyMaker('id', nonExistentId));
|
|
61
57
|
expect(nonExistentCachedValue).toEqual('');
|
|
62
58
|
// load again through entities framework to ensure it reads negative result
|
|
63
|
-
const entityNonExistentResult2 = await RedisTestEntity_1.default.
|
|
64
|
-
.withAuthorizationResults()
|
|
65
|
-
.loadByIDAsync(nonExistentId);
|
|
59
|
+
const entityNonExistentResult2 = await RedisTestEntity_1.default.loaderWithAuthorizationResults(viewerContext).loadByIDAsync(nonExistentId);
|
|
66
60
|
expect(entityNonExistentResult2.ok).toBe(false);
|
|
67
61
|
// invalidate from cache to ensure it invalidates correctly
|
|
68
|
-
await RedisTestEntity_1.default.
|
|
69
|
-
.utils()
|
|
70
|
-
.invalidateFieldsAsync(entity1.getAllFields());
|
|
62
|
+
await RedisTestEntity_1.default.loaderUtils(viewerContext).invalidateFieldsAsync(entity1.getAllFields());
|
|
71
63
|
const cachedValueNull = await genericRedisCacheContext.redisClient.get(cacheKeyMaker('id', entity1.getID()));
|
|
72
64
|
expect(cachedValueNull).toBe(null);
|
|
73
65
|
});
|
|
74
66
|
it('caches and restores date fields', async () => {
|
|
75
67
|
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
76
68
|
const date = new Date();
|
|
77
|
-
const entity1 = await (0, results_1.enforceAsyncResult)(RedisTestEntity_1.default.
|
|
69
|
+
const entity1 = await (0, results_1.enforceAsyncResult)(RedisTestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
|
|
70
|
+
.setField('dateField', date)
|
|
71
|
+
.createAsync());
|
|
78
72
|
expect(entity1.getField('dateField')).toEqual(date);
|
|
79
|
-
const entity2 = await RedisTestEntity_1.default.loader(viewerContext)
|
|
80
|
-
.enforcing()
|
|
81
|
-
.loadByIDAsync(entity1.getID());
|
|
73
|
+
const entity2 = await RedisTestEntity_1.default.loader(viewerContext).loadByIDAsync(entity1.getID());
|
|
82
74
|
expect(entity2.getField('dateField')).toEqual(date);
|
|
83
75
|
// simulate new request
|
|
84
76
|
const vc2 = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
85
|
-
const entity3 = await RedisTestEntity_1.default.loader(vc2).
|
|
77
|
+
const entity3 = await RedisTestEntity_1.default.loader(vc2).loadByIDAsync(entity1.getID());
|
|
86
78
|
expect(entity3.getField('dateField')).toEqual(date);
|
|
87
79
|
});
|
|
88
80
|
it('caches and restores empty string field keys', async () => {
|
|
89
81
|
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
90
|
-
const entity1 = await (0, results_1.enforceAsyncResult)(RedisTestEntity_1.default.
|
|
91
|
-
|
|
92
|
-
.
|
|
93
|
-
|
|
82
|
+
const entity1 = await (0, results_1.enforceAsyncResult)(RedisTestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
|
|
83
|
+
.setField('name', '')
|
|
84
|
+
.createAsync());
|
|
85
|
+
const entity2 = await RedisTestEntity_1.default.loader(viewerContext).loadByFieldEqualingAsync('name', '');
|
|
94
86
|
expect(entity2?.getID()).toEqual(entity1.getID());
|
|
95
87
|
// simulate new request
|
|
96
88
|
const vc2 = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
97
|
-
const entity3 = await RedisTestEntity_1.default.loader(vc2)
|
|
98
|
-
.enforcing()
|
|
99
|
-
.loadByFieldEqualingAsync('name', '');
|
|
89
|
+
const entity3 = await RedisTestEntity_1.default.loader(vc2).loadByFieldEqualingAsync('name', '');
|
|
100
90
|
expect(entity3?.getID()).toEqual(entity1.getID());
|
|
101
91
|
});
|
|
102
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericRedisCacher-full-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/GenericRedisCacher-full-integration-test.ts"],"names":[],"mappings":";;;;;AAAA,yCAA6C;AAC7C,2CAAmD;AACnD,sDAA4B;AAC5B,6BAA0B;AAC1B,+BAAoC;AAEpC,+EAAqF;AACrF,sFAA8D;AAC9D,yIAAsI;AAEtI,MAAM,iBAAkB,SAAQ,sBAAa;CAAG;AAEhD,QAAQ,CAAC,4BAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,wBAAkD,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,wBAAwB,GAAG;YACzB,WAAW,EAAE,IAAI,iBAAK,CAAC,IAAI,SAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrE,SAAS,CAAC,GAAG,KAAe;gBAC1B,MAAM,SAAS,GAAG,GAAG,CAAC;gBACtB,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC,CAChE,CAAC;gBACF,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;YACD,cAAc,EAAE,OAAO;YACvB,kBAAkB,EAAE,KAAK,EAAE,QAAQ;YACnC,kBAAkB,EAAE,GAAG,EAAE,aAAa;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAO,wBAAwB,CAAC,WAAqB,CAAC,OAAO,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,KAAK,IAAI,EAAE;QACjB,wBAAwB,CAAC,WAAqB,CAAC,UAAU,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,aAAa,GAAG,IAAI,iBAAiB,CACzC,IAAA,qGAAiD,EAAC,wBAAwB,CAAC,CAC5E,CAAC;QACF,MAAM,aAAa,GACjB,aAAa,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,yBAAe,CAAC,CAC1E,sBAAsB,CACvB,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAExE,MAAM,cAAc,GAAG,MAAM,yBAAe,CAAC,OAAO,CAAC,aAAa,CAAC;aAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;aACxB,
|
|
1
|
+
{"version":3,"file":"GenericRedisCacher-full-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/GenericRedisCacher-full-integration-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
37
|
};
|
|
@@ -62,7 +72,7 @@ describe(GenericRedisCacher_1.default, () => {
|
|
|
62
72
|
const entity1Created = await RedisTestEntity_1.default.creator(viewerContext)
|
|
63
73
|
.setField('name', 'blah')
|
|
64
74
|
.setField('dateField', date)
|
|
65
|
-
.
|
|
75
|
+
.createAsync();
|
|
66
76
|
const testKey = `test-id-key-${entity1Created.getID()}`;
|
|
67
77
|
const objectMap = new Map([
|
|
68
78
|
[testKey, entity1Created.getAllFields()],
|
|
@@ -97,7 +107,7 @@ describe(GenericRedisCacher_1.default, () => {
|
|
|
97
107
|
const entity1Created = await RedisTestEntity_1.default.creator(viewerContext)
|
|
98
108
|
.setField('name', 'blah')
|
|
99
109
|
.setField('dateField', date)
|
|
100
|
-
.
|
|
110
|
+
.createAsync();
|
|
101
111
|
const testKey = `test-id-key-${entity1Created.getID()}`;
|
|
102
112
|
const objectMap = new Map([
|
|
103
113
|
[testKey, entity1Created.getAllFields()],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericRedisCacher-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/GenericRedisCacher-integration-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GenericRedisCacher-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/GenericRedisCacher-integration-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ describe(GenericRedisCacher_1.default, () => {
|
|
|
33
33
|
it('throws when redis is disconnected', async () => {
|
|
34
34
|
redisClient.disconnect();
|
|
35
35
|
const vc1 = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
36
|
-
await expect(RedisTestEntity_1.default.creator(vc1).setField('name', 'blah').
|
|
36
|
+
await expect(RedisTestEntity_1.default.creator(vc1).setField('name', 'blah').createAsync()).rejects.toThrow(entity_1.EntityCacheAdapterTransientError);
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
39
|
//# sourceMappingURL=errors-test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/errors-test.ts"],"names":[],"mappings":";;;;;AAAA,yCAA+E;AAC/E,sDAA4B;AAC5B,6BAA0B;AAE1B,+EAAqF;AACrF,sFAA8D;AAC9D,yIAAsI;AAEtI,MAAM,iBAAkB,SAAQ,sBAAa;CAAG;AAEhD,QAAQ,CAAC,4BAAkB,EAAE,GAAG,EAAE;IAChC,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,KAAe;gBAC1B,MAAM,SAAS,GAAG,GAAG,CAAC;gBACtB,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC,CAChE,CAAC;gBACF,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;YACD,cAAc,EAAE,OAAO;YACvB,kBAAkB,EAAE,KAAK,EAAE,QAAQ;YACnC,kBAAkB,EAAE,GAAG,EAAE,aAAa;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,WAAW,CAAC,UAAU,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAC/B,IAAA,qGAAiD,EAAC,wBAAwB,CAAC,CAC5E,CAAC;QAEF,MAAM,MAAM,CACV,yBAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"errors-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/errors-test.ts"],"names":[],"mappings":";;;;;AAAA,yCAA+E;AAC/E,sDAA4B;AAC5B,6BAA0B;AAE1B,+EAAqF;AACrF,sFAA8D;AAC9D,yIAAsI;AAEtI,MAAM,iBAAkB,SAAQ,sBAAa;CAAG;AAEhD,QAAQ,CAAC,4BAAkB,EAAE,GAAG,EAAE;IAChC,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,KAAe;gBAC1B,MAAM,SAAS,GAAG,GAAG,CAAC;gBACtB,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,SAAS,EAAE,CAAC,CAChE,CAAC;gBACF,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;YACD,cAAc,EAAE,OAAO;YACvB,kBAAkB,EAAE,KAAK,EAAE,QAAQ;YACnC,kBAAkB,EAAE,GAAG,EAAE,aAAa;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,WAAW,CAAC,UAAU,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAC/B,IAAA,qGAAiD,EAAC,wBAAwB,CAAC,CAC5E,CAAC;QAEF,MAAM,MAAM,CACV,yBAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CACpE,CAAC,OAAO,CAAC,OAAO,CAAC,yCAAgC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -8,13 +8,14 @@ const entity_1 = require("@expo/entity");
|
|
|
8
8
|
const RedisCacheAdapterProvider_1 = __importDefault(require("../RedisCacheAdapterProvider"));
|
|
9
9
|
// share across all in calls in test to simulate postgres
|
|
10
10
|
const adapterProvider = new entity_1.StubDatabaseAdapterProvider();
|
|
11
|
+
const queryContextProvider = new entity_1.StubQueryContextProvider();
|
|
11
12
|
const createRedisIntegrationTestEntityCompanionProvider = (genericRedisCacheContext, metricsAdapter = new entity_1.NoOpEntityMetricsAdapter()) => {
|
|
12
13
|
return new entity_1.EntityCompanionProvider(metricsAdapter, new Map([
|
|
13
14
|
[
|
|
14
15
|
'postgres',
|
|
15
16
|
{
|
|
16
17
|
adapterProvider,
|
|
17
|
-
queryContextProvider
|
|
18
|
+
queryContextProvider,
|
|
18
19
|
},
|
|
19
20
|
],
|
|
20
21
|
]), new Map([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRedisIntegrationTestEntityCompanionProvider.js","sourceRoot":"","sources":["../../src/testfixtures/createRedisIntegrationTestEntityCompanionProvider.ts"],"names":[],"mappings":";;;;;;AAAA,yCAMsB;AAGtB,6FAAqE;AAErE,yDAAyD;AACzD,MAAM,eAAe,GAAG,IAAI,oCAA2B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"createRedisIntegrationTestEntityCompanionProvider.js","sourceRoot":"","sources":["../../src/testfixtures/createRedisIntegrationTestEntityCompanionProvider.ts"],"names":[],"mappings":";;;;;;AAAA,yCAMsB;AAGtB,6FAAqE;AAErE,yDAAyD;AACzD,MAAM,eAAe,GAAG,IAAI,oCAA2B,EAAE,CAAC;AAC1D,MAAM,oBAAoB,GAAG,IAAI,iCAAwB,EAAE,CAAC;AAErD,MAAM,iDAAiD,GAAG,CAC/D,wBAAkD,EAClD,iBAAwC,IAAI,iCAAwB,EAAE,EAC7C,EAAE;IAC3B,OAAO,IAAI,gCAAuB,CAChC,cAAc,EACd,IAAI,GAAG,CAAC;QACN;YACE,UAAU;YACV;gBACE,eAAe;gBACf,oBAAoB;aACrB;SACF;KACF,CAAC,EACF,IAAI,GAAG,CAAC;QACN;YACE,OAAO;YACP;gBACE,oBAAoB,EAAE,IAAI,mCAAyB,CAAC,wBAAwB,CAAC;aAC9E;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAxBW,QAAA,iDAAiD,qDAwB5D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/entity-cache-adapter-redis",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.41.0",
|
|
4
4
|
"description": "Redis cache adapter for @expo/entity",
|
|
5
5
|
"files": [
|
|
6
6
|
"build",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"test": "jest --rootDir . --config ../../resources/jest.config.js",
|
|
17
17
|
"integration": "../../resources/run-with-docker yarn integration-no-setup",
|
|
18
18
|
"integration-no-setup": "jest --config ../../resources/jest-integration.config.js --rootDir . --runInBand --passWithNoTests",
|
|
19
|
-
"
|
|
19
|
+
"ctix": "ctix build --config ../../.ctirc && ../../resources/prepend-barrel.sh '@expo/entity-cache-adapter-redis'"
|
|
20
20
|
},
|
|
21
21
|
"engines": {
|
|
22
22
|
"node": ">=16"
|
|
@@ -26,13 +26,27 @@
|
|
|
26
26
|
],
|
|
27
27
|
"author": "Expo",
|
|
28
28
|
"license": "MIT",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@expo/entity": "^0.41.0"
|
|
31
|
+
},
|
|
29
32
|
"peerDependencies": {
|
|
30
|
-
"@expo/entity": "*",
|
|
31
33
|
"ioredis": ">=5"
|
|
32
34
|
},
|
|
33
35
|
"devDependencies": {
|
|
34
|
-
"@expo/
|
|
35
|
-
"
|
|
36
|
+
"@expo/batcher": "^1.0.0",
|
|
37
|
+
"@types/jest": "^29.5.12",
|
|
38
|
+
"@types/node": "^20.14.1",
|
|
39
|
+
"ctix": "^2.7.0",
|
|
40
|
+
"eslint": "^8.57.1",
|
|
41
|
+
"eslint-config-universe": "^14.0.0",
|
|
42
|
+
"eslint-plugin-tsdoc": "^0.3.0",
|
|
43
|
+
"ioredis": "^5.4.1",
|
|
44
|
+
"jest": "^29.7.0",
|
|
45
|
+
"prettier": "^3.3.3",
|
|
46
|
+
"prettier-plugin-organize-imports": "^4.1.0",
|
|
47
|
+
"ts-jest": "^29.2.5",
|
|
48
|
+
"ts-mockito": "^2.6.1",
|
|
49
|
+
"typescript": "^5.7.3"
|
|
36
50
|
},
|
|
37
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "ee4be736a9a0ba580e9af0194e07c9cd36b1c599"
|
|
38
52
|
}
|
|
@@ -105,7 +105,7 @@ describe(GenericRedisCacher, () => {
|
|
|
105
105
|
|
|
106
106
|
const entity1Created = await RedisTestEntity.creator(viewerContext)
|
|
107
107
|
.setField('name', 'blah')
|
|
108
|
-
.
|
|
108
|
+
.createAsync();
|
|
109
109
|
|
|
110
110
|
// loading an entity should put it in cache. load by multiple requests and multiple fields in same tick to ensure batch works
|
|
111
111
|
mgetSpy.mockClear();
|
|
@@ -119,11 +119,12 @@ describe(GenericRedisCacher, () => {
|
|
|
119
119
|
createRedisIntegrationTestEntityCompanionProvider(genericRedisCacheContext),
|
|
120
120
|
);
|
|
121
121
|
const [entity1, entity2, entity3] = await Promise.all([
|
|
122
|
-
RedisTestEntity.loader(viewerContext1).
|
|
123
|
-
RedisTestEntity.loader(viewerContext2).
|
|
124
|
-
RedisTestEntity.loader(viewerContext3)
|
|
125
|
-
|
|
126
|
-
|
|
122
|
+
RedisTestEntity.loader(viewerContext1).loadByIDAsync(entity1Created.getID()),
|
|
123
|
+
RedisTestEntity.loader(viewerContext2).loadByIDAsync(entity1Created.getID()),
|
|
124
|
+
RedisTestEntity.loader(viewerContext3).loadByFieldEqualingAsync(
|
|
125
|
+
'name',
|
|
126
|
+
entity1Created.getField('name'),
|
|
127
|
+
),
|
|
127
128
|
]);
|
|
128
129
|
|
|
129
130
|
expect(mgetSpy).toHaveBeenCalledTimes(1);
|
|
@@ -140,30 +141,31 @@ describe(GenericRedisCacher, () => {
|
|
|
140
141
|
});
|
|
141
142
|
|
|
142
143
|
const cacheKeyEntity1NameField = cacheKeyMaker('name', entity1Created.getField('name'));
|
|
143
|
-
await RedisTestEntity.loader(viewerContext)
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
await RedisTestEntity.loader(viewerContext).loadByFieldEqualingAsync(
|
|
145
|
+
'name',
|
|
146
|
+
entity1Created.getField('name'),
|
|
147
|
+
);
|
|
146
148
|
await expect(redis.get(cacheKeyEntity1NameField)).resolves.toEqual(cachedJSON);
|
|
147
149
|
|
|
148
150
|
// simulate non existent db fetch, should write negative result ('') to cache
|
|
149
151
|
const nonExistentId = uuidv4();
|
|
150
|
-
const entityNonExistentResult =
|
|
151
|
-
.
|
|
152
|
-
|
|
152
|
+
const entityNonExistentResult =
|
|
153
|
+
await RedisTestEntity.loaderWithAuthorizationResults(viewerContext).loadByIDAsync(
|
|
154
|
+
nonExistentId,
|
|
155
|
+
);
|
|
153
156
|
expect(entityNonExistentResult.ok).toBe(false);
|
|
154
157
|
const cacheKeyNonExistent = cacheKeyMaker('id', nonExistentId);
|
|
155
158
|
const nonExistentCachedValue = await redis.get(cacheKeyNonExistent);
|
|
156
159
|
expect(nonExistentCachedValue).toEqual('');
|
|
157
160
|
// load again through entities framework to ensure it reads negative result
|
|
158
|
-
const entityNonExistentResult2 =
|
|
159
|
-
.
|
|
160
|
-
|
|
161
|
+
const entityNonExistentResult2 =
|
|
162
|
+
await RedisTestEntity.loaderWithAuthorizationResults(viewerContext).loadByIDAsync(
|
|
163
|
+
nonExistentId,
|
|
164
|
+
);
|
|
161
165
|
expect(entityNonExistentResult2.ok).toBe(false);
|
|
162
166
|
|
|
163
167
|
// invalidate from cache to ensure it invalidates correctly in both caches
|
|
164
|
-
await RedisTestEntity.
|
|
165
|
-
.utils()
|
|
166
|
-
.invalidateFieldsAsync(entity1.getAllFields());
|
|
168
|
+
await RedisTestEntity.loaderUtils(viewerContext).invalidateFieldsAsync(entity1.getAllFields());
|
|
167
169
|
await expect(redis.get(cacheKeyEntity1)).resolves.toBeNull();
|
|
168
170
|
await expect(redis.get(cacheKeyEntity1NameField)).resolves.toBeNull();
|
|
169
171
|
});
|
|
@@ -48,12 +48,12 @@ describe(GenericRedisCacher, () => {
|
|
|
48
48
|
|
|
49
49
|
const entity1Created = await RedisTestEntity.creator(viewerContext)
|
|
50
50
|
.setField('name', 'blah')
|
|
51
|
-
.
|
|
51
|
+
.createAsync();
|
|
52
52
|
|
|
53
53
|
// loading an entity should put it in cache
|
|
54
|
-
const entity1 = await RedisTestEntity.loader(viewerContext)
|
|
55
|
-
.
|
|
56
|
-
|
|
54
|
+
const entity1 = await RedisTestEntity.loader(viewerContext).loadByIDAsync(
|
|
55
|
+
entity1Created.getID(),
|
|
56
|
+
);
|
|
57
57
|
|
|
58
58
|
const cachedJSON = await (genericRedisCacheContext.redisClient as Redis).get(
|
|
59
59
|
cacheKeyMaker('id', entity1.getID()),
|
|
@@ -67,9 +67,10 @@ describe(GenericRedisCacher, () => {
|
|
|
67
67
|
// simulate non existent db fetch, should write negative result ('') to cache
|
|
68
68
|
const nonExistentId = uuidv4();
|
|
69
69
|
|
|
70
|
-
const entityNonExistentResult =
|
|
71
|
-
.
|
|
72
|
-
|
|
70
|
+
const entityNonExistentResult =
|
|
71
|
+
await RedisTestEntity.loaderWithAuthorizationResults(viewerContext).loadByIDAsync(
|
|
72
|
+
nonExistentId,
|
|
73
|
+
);
|
|
73
74
|
expect(entityNonExistentResult.ok).toBe(false);
|
|
74
75
|
|
|
75
76
|
const nonExistentCachedValue = await (genericRedisCacheContext.redisClient as Redis).get(
|
|
@@ -78,15 +79,14 @@ describe(GenericRedisCacher, () => {
|
|
|
78
79
|
expect(nonExistentCachedValue).toEqual('');
|
|
79
80
|
|
|
80
81
|
// load again through entities framework to ensure it reads negative result
|
|
81
|
-
const entityNonExistentResult2 =
|
|
82
|
-
.
|
|
83
|
-
|
|
82
|
+
const entityNonExistentResult2 =
|
|
83
|
+
await RedisTestEntity.loaderWithAuthorizationResults(viewerContext).loadByIDAsync(
|
|
84
|
+
nonExistentId,
|
|
85
|
+
);
|
|
84
86
|
expect(entityNonExistentResult2.ok).toBe(false);
|
|
85
87
|
|
|
86
88
|
// invalidate from cache to ensure it invalidates correctly
|
|
87
|
-
await RedisTestEntity.
|
|
88
|
-
.utils()
|
|
89
|
-
.invalidateFieldsAsync(entity1.getAllFields());
|
|
89
|
+
await RedisTestEntity.loaderUtils(viewerContext).invalidateFieldsAsync(entity1.getAllFields());
|
|
90
90
|
const cachedValueNull = await (genericRedisCacheContext.redisClient as Redis).get(
|
|
91
91
|
cacheKeyMaker('id', entity1.getID()),
|
|
92
92
|
);
|
|
@@ -99,20 +99,20 @@ describe(GenericRedisCacher, () => {
|
|
|
99
99
|
);
|
|
100
100
|
const date = new Date();
|
|
101
101
|
const entity1 = await enforceAsyncResult(
|
|
102
|
-
RedisTestEntity.
|
|
102
|
+
RedisTestEntity.creatorWithAuthorizationResults(viewerContext)
|
|
103
|
+
.setField('dateField', date)
|
|
104
|
+
.createAsync(),
|
|
103
105
|
);
|
|
104
106
|
expect(entity1.getField('dateField')).toEqual(date);
|
|
105
107
|
|
|
106
|
-
const entity2 = await RedisTestEntity.loader(viewerContext)
|
|
107
|
-
.enforcing()
|
|
108
|
-
.loadByIDAsync(entity1.getID());
|
|
108
|
+
const entity2 = await RedisTestEntity.loader(viewerContext).loadByIDAsync(entity1.getID());
|
|
109
109
|
expect(entity2.getField('dateField')).toEqual(date);
|
|
110
110
|
|
|
111
111
|
// simulate new request
|
|
112
112
|
const vc2 = new TestViewerContext(
|
|
113
113
|
createRedisIntegrationTestEntityCompanionProvider(genericRedisCacheContext),
|
|
114
114
|
);
|
|
115
|
-
const entity3 = await RedisTestEntity.loader(vc2).
|
|
115
|
+
const entity3 = await RedisTestEntity.loader(vc2).loadByIDAsync(entity1.getID());
|
|
116
116
|
expect(entity3.getField('dateField')).toEqual(date);
|
|
117
117
|
});
|
|
118
118
|
|
|
@@ -121,20 +121,21 @@ describe(GenericRedisCacher, () => {
|
|
|
121
121
|
createRedisIntegrationTestEntityCompanionProvider(genericRedisCacheContext),
|
|
122
122
|
);
|
|
123
123
|
const entity1 = await enforceAsyncResult(
|
|
124
|
-
RedisTestEntity.
|
|
124
|
+
RedisTestEntity.creatorWithAuthorizationResults(viewerContext)
|
|
125
|
+
.setField('name', '')
|
|
126
|
+
.createAsync(),
|
|
127
|
+
);
|
|
128
|
+
const entity2 = await RedisTestEntity.loader(viewerContext).loadByFieldEqualingAsync(
|
|
129
|
+
'name',
|
|
130
|
+
'',
|
|
125
131
|
);
|
|
126
|
-
const entity2 = await RedisTestEntity.loader(viewerContext)
|
|
127
|
-
.enforcing()
|
|
128
|
-
.loadByFieldEqualingAsync('name', '');
|
|
129
132
|
expect(entity2?.getID()).toEqual(entity1.getID());
|
|
130
133
|
|
|
131
134
|
// simulate new request
|
|
132
135
|
const vc2 = new TestViewerContext(
|
|
133
136
|
createRedisIntegrationTestEntityCompanionProvider(genericRedisCacheContext),
|
|
134
137
|
);
|
|
135
|
-
const entity3 = await RedisTestEntity.loader(vc2)
|
|
136
|
-
.enforcing()
|
|
137
|
-
.loadByFieldEqualingAsync('name', '');
|
|
138
|
+
const entity3 = await RedisTestEntity.loader(vc2).loadByFieldEqualingAsync('name', '');
|
|
138
139
|
expect(entity3?.getID()).toEqual(entity1.getID());
|
|
139
140
|
});
|
|
140
141
|
});
|
|
@@ -49,7 +49,7 @@ describe(GenericRedisCacher, () => {
|
|
|
49
49
|
const entity1Created = await RedisTestEntity.creator(viewerContext)
|
|
50
50
|
.setField('name', 'blah')
|
|
51
51
|
.setField('dateField', date)
|
|
52
|
-
.
|
|
52
|
+
.createAsync();
|
|
53
53
|
const testKey = `test-id-key-${entity1Created.getID()}`;
|
|
54
54
|
const objectMap = new Map<string, Readonly<RedisTestEntityFields>>([
|
|
55
55
|
[testKey, entity1Created.getAllFields()],
|
|
@@ -95,7 +95,7 @@ describe(GenericRedisCacher, () => {
|
|
|
95
95
|
const entity1Created = await RedisTestEntity.creator(viewerContext)
|
|
96
96
|
.setField('name', 'blah')
|
|
97
97
|
.setField('dateField', date)
|
|
98
|
-
.
|
|
98
|
+
.createAsync();
|
|
99
99
|
const testKey = `test-id-key-${entity1Created.getID()}`;
|
|
100
100
|
const objectMap = new Map<string, Readonly<RedisTestEntityFields>>([
|
|
101
101
|
[testKey, entity1Created.getAllFields()],
|
|
@@ -40,7 +40,7 @@ describe(GenericRedisCacher, () => {
|
|
|
40
40
|
);
|
|
41
41
|
|
|
42
42
|
await expect(
|
|
43
|
-
RedisTestEntity.creator(vc1).setField('name', 'blah').
|
|
43
|
+
RedisTestEntity.creator(vc1).setField('name', 'blah').createAsync(),
|
|
44
44
|
).rejects.toThrow(EntityCacheAdapterTransientError);
|
|
45
45
|
});
|
|
46
46
|
});
|
|
@@ -11,6 +11,7 @@ import RedisCacheAdapterProvider from '../RedisCacheAdapterProvider';
|
|
|
11
11
|
|
|
12
12
|
// share across all in calls in test to simulate postgres
|
|
13
13
|
const adapterProvider = new StubDatabaseAdapterProvider();
|
|
14
|
+
const queryContextProvider = new StubQueryContextProvider();
|
|
14
15
|
|
|
15
16
|
export const createRedisIntegrationTestEntityCompanionProvider = (
|
|
16
17
|
genericRedisCacheContext: GenericRedisCacheContext,
|
|
@@ -23,7 +24,7 @@ export const createRedisIntegrationTestEntityCompanionProvider = (
|
|
|
23
24
|
'postgres',
|
|
24
25
|
{
|
|
25
26
|
adapterProvider,
|
|
26
|
-
queryContextProvider
|
|
27
|
+
queryContextProvider,
|
|
27
28
|
},
|
|
28
29
|
],
|
|
29
30
|
]),
|