@expo/entity-cache-adapter-redis 0.17.0 → 0.21.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/GenericRedisCacher.js +5 -5
- package/build/GenericRedisCacher.js.map +1 -1
- package/build/RedisCacheAdapter.js +4 -4
- package/build/RedisCacheAdapter.js.map +1 -1
- package/build/RedisCommon.js.map +1 -1
- package/build/__integration-tests__/RedisCacheAdapter-integration-test.js +10 -10
- package/build/__integration-tests__/RedisCacheAdapter-integration-test.js.map +1 -1
- package/build/__integration-tests__/errors-test.js +3 -3
- package/build/__integration-tests__/errors-test.js.map +1 -1
- package/build/__tests__/RedisCacheAdapter-test.js +23 -23
- package/build/__tests__/RedisCacheAdapter-test.js.map +1 -1
- package/build/errors/__tests__/wrapNativeRedisCallAsync-test.d.ts +1 -0
- package/build/errors/__tests__/wrapNativeRedisCallAsync-test.js +42 -0
- package/build/errors/__tests__/wrapNativeRedisCallAsync-test.js.map +1 -0
- package/build/errors/wrapNativeRedisCallAsync.d.ts +1 -0
- package/build/errors/{wrapNativeRedisCall.js → wrapNativeRedisCallAsync.js} +9 -4
- package/build/errors/wrapNativeRedisCallAsync.js.map +1 -0
- package/build/testfixtures/RedisTestEntity.d.ts +4 -4
- package/build/testfixtures/RedisTestEntity.js.map +1 -1
- package/package.json +3 -2
- package/src/GenericRedisCacher.ts +8 -6
- package/src/__integration-tests__/RedisCacheAdapter-integration-test.ts +1 -1
- package/src/__integration-tests__/errors-test.ts +1 -1
- package/src/errors/__tests__/wrapNativeRedisCallAsync-test.ts +39 -0
- package/src/errors/{wrapNativeRedisCall.ts → wrapNativeRedisCallAsync.ts} +8 -2
- package/src/testfixtures/RedisTestEntity.ts +4 -4
- package/CHANGELOG.md +0 -173
- package/build/errors/wrapNativeRedisCall.d.ts +0 -1
- package/build/errors/wrapNativeRedisCall.js.map +0 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ During `EntityCompanionProvider` instantiation:
|
|
|
12
12
|
import Redis from 'ioredis';
|
|
13
13
|
|
|
14
14
|
const redisCacheAdapterContext = {
|
|
15
|
-
redisClient: new Redis(new URL(process.env
|
|
15
|
+
redisClient: new Redis(new URL(process.env['REDIS_URL']!).toString()),
|
|
16
16
|
makeKeyFn(...parts: string[]): string {
|
|
17
17
|
const delimiter = ':';
|
|
18
18
|
const escapedParts = parts.map((part) =>
|
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const entity_1 = require("@expo/entity");
|
|
7
|
-
const
|
|
7
|
+
const wrapNativeRedisCallAsync_1 = __importDefault(require("./errors/wrapNativeRedisCallAsync"));
|
|
8
8
|
// Sentinel value we store in Redis to negatively cache a database miss.
|
|
9
9
|
// The sentinel value is distinct from any (positively) cached value.
|
|
10
10
|
const DOES_NOT_EXIST_REDIS = '';
|
|
@@ -16,7 +16,7 @@ class GenericRedisCacher {
|
|
|
16
16
|
if (keys.length === 0) {
|
|
17
17
|
return new Map();
|
|
18
18
|
}
|
|
19
|
-
const redisResults = await
|
|
19
|
+
const redisResults = await (0, wrapNativeRedisCallAsync_1.default)(() => this.context.redisClient.mget(...keys));
|
|
20
20
|
const results = new Map();
|
|
21
21
|
for (let i = 0; i < keys.length; i++) {
|
|
22
22
|
const key = keys[i];
|
|
@@ -48,7 +48,7 @@ class GenericRedisCacher {
|
|
|
48
48
|
objectMap.forEach((object, key) => {
|
|
49
49
|
redisTransaction = redisTransaction.set(key, JSON.stringify(object), 'EX', this.context.ttlSecondsPositive);
|
|
50
50
|
});
|
|
51
|
-
await
|
|
51
|
+
await (0, wrapNativeRedisCallAsync_1.default)(() => redisTransaction.exec());
|
|
52
52
|
}
|
|
53
53
|
async cacheDBMissesAsync(keys) {
|
|
54
54
|
if (keys.length === 0) {
|
|
@@ -58,13 +58,13 @@ class GenericRedisCacher {
|
|
|
58
58
|
keys.forEach((key) => {
|
|
59
59
|
redisTransaction = redisTransaction.set(key, DOES_NOT_EXIST_REDIS, 'EX', this.context.ttlSecondsNegative);
|
|
60
60
|
});
|
|
61
|
-
await
|
|
61
|
+
await (0, wrapNativeRedisCallAsync_1.default)(() => redisTransaction.exec());
|
|
62
62
|
}
|
|
63
63
|
async invalidateManyAsync(keys) {
|
|
64
64
|
if (keys.length === 0) {
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
|
-
await
|
|
67
|
+
await (0, wrapNativeRedisCallAsync_1.default)(() => this.context.redisClient.del(...keys));
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
exports.default = GenericRedisCacher;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericRedisCacher.js","sourceRoot":"","sources":["../src/GenericRedisCacher.ts"],"names":[],"mappings":";;;;;AAAA,yCAA4D;AAG5D,
|
|
1
|
+
{"version":3,"file":"GenericRedisCacher.js","sourceRoot":"","sources":["../src/GenericRedisCacher.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,14 +23,14 @@ class RedisCacheAdapter extends entity_1.EntityCacheAdapter {
|
|
|
23
23
|
async loadManyAsync(fieldName, fieldValues) {
|
|
24
24
|
const redisCacheKeyToFieldValueMapping = new Map(fieldValues.map((fieldValue) => [this.makeCacheKey(fieldName, fieldValue), fieldValue]));
|
|
25
25
|
const cacheResults = await this.genericRedisCacher.loadManyAsync(Array.from(redisCacheKeyToFieldValueMapping.keys()));
|
|
26
|
-
return entity_1.mapKeys(cacheResults, (redisCacheKey) => {
|
|
26
|
+
return (0, entity_1.mapKeys)(cacheResults, (redisCacheKey) => {
|
|
27
27
|
const fieldValue = redisCacheKeyToFieldValueMapping.get(redisCacheKey);
|
|
28
|
-
invariant_1.default(fieldValue !== undefined, 'Unspecified cache key %s returned from generic Redis cacher', redisCacheKey);
|
|
28
|
+
(0, invariant_1.default)(fieldValue !== undefined, 'Unspecified cache key %s returned from generic Redis cacher', redisCacheKey);
|
|
29
29
|
return fieldValue;
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
async cacheManyAsync(fieldName, objectMap) {
|
|
33
|
-
await this.genericRedisCacher.cacheManyAsync(entity_1.mapKeys(objectMap, (fieldValue) => this.makeCacheKey(fieldName, fieldValue)));
|
|
33
|
+
await this.genericRedisCacher.cacheManyAsync((0, entity_1.mapKeys)(objectMap, (fieldValue) => this.makeCacheKey(fieldName, fieldValue)));
|
|
34
34
|
}
|
|
35
35
|
async cacheDBMissesAsync(fieldName, fieldValues) {
|
|
36
36
|
await this.genericRedisCacher.cacheDBMissesAsync(fieldValues.map((fieldValue) => this.makeCacheKey(fieldName, fieldValue)));
|
|
@@ -40,7 +40,7 @@ class RedisCacheAdapter extends entity_1.EntityCacheAdapter {
|
|
|
40
40
|
}
|
|
41
41
|
makeCacheKey(fieldName, fieldValue) {
|
|
42
42
|
const columnName = this.entityConfiguration.entityToDBFieldsKeyMapping.get(fieldName);
|
|
43
|
-
invariant_1.default(columnName, `database field mapping missing for ${fieldName}`);
|
|
43
|
+
(0, invariant_1.default)(columnName, `database field mapping missing for ${fieldName}`);
|
|
44
44
|
return this.context.makeKeyFn(this.context.cacheKeyPrefix, this.entityConfiguration.tableName, `v2.${this.entityConfiguration.cacheKeyVersion}`, columnName, String(fieldValue));
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisCacheAdapter.js","sourceRoot":"","sources":["../src/RedisCacheAdapter.ts"],"names":[],"mappings":";;;;;AAAA,yCAMsB;AACtB,0DAAkC;AAGlC,8EAAsD;AACtD,+CAAoD;AAuCpD,MAAqB,iBAA2B,SAAQ,2BAA2B;IAEjF,YACE,mBAAiD,EAChC,OAAiC;QAElD,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAFV,YAAO,GAAP,OAAO,CAA0B;QAIlD,IAAI,CAAC,kBAAkB,GAAG,IAAI,4BAAkB,CAAC;YAC/C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SAC/C,CAAC,CAAC;IACL,CAAC;IAEM,sBAAsB;QAC3B,OAAO,iCAAmB,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,SAAY,EACZ,WAA+C;QAE/C,MAAM,gCAAgC,GAAG,IAAI,GAAG,CAC9C,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CACxF,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAC9D,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,CAAC,CACpD,CAAC;QAEF,OAAO,gBAAO,
|
|
1
|
+
{"version":3,"file":"RedisCacheAdapter.js","sourceRoot":"","sources":["../src/RedisCacheAdapter.ts"],"names":[],"mappings":";;;;;AAAA,yCAMsB;AACtB,0DAAkC;AAGlC,8EAAsD;AACtD,+CAAoD;AAuCpD,MAAqB,iBAA2B,SAAQ,2BAA2B;IAEjF,YACE,mBAAiD,EAChC,OAAiC;QAElD,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAFV,YAAO,GAAP,OAAO,CAA0B;QAIlD,IAAI,CAAC,kBAAkB,GAAG,IAAI,4BAAkB,CAAC;YAC/C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SAC/C,CAAC,CAAC;IACL,CAAC;IAEM,sBAAsB;QAC3B,OAAO,iCAAmB,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,SAAY,EACZ,WAA+C;QAE/C,MAAM,gCAAgC,GAAG,IAAI,GAAG,CAC9C,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CACxF,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAC9D,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,CAAC,CACpD,CAAC;QAEF,OAAO,IAAA,gBAAO,EAAC,YAAY,EAAE,CAAC,aAAa,EAAE,EAAE;YAC7C,MAAM,UAAU,GAAG,gCAAgC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACvE,IAAA,mBAAS,EACP,UAAU,KAAK,SAAS,EACxB,6DAA6D,EAC7D,aAAa,CACd,CAAC;YACF,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,SAAY,EACZ,SAAuD;QAEvD,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAC1C,IAAA,gBAAO,EAAC,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAC7E,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAC7B,SAAY,EACZ,WAA+C;QAE/C,MAAM,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAC9C,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAC1E,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC9B,SAAY,EACZ,WAA+C;QAE/C,MAAM,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAC/C,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAC1E,CAAC;IACJ,CAAC;IAEO,YAAY,CAClB,SAAY,EACZ,UAAmC;QAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtF,IAAA,mBAAS,EAAC,UAAU,EAAE,sCAAsC,SAAS,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAC3B,IAAI,CAAC,OAAO,CAAC,cAAc,EAC3B,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAClC,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,EAChD,UAAU,EACV,MAAM,CAAC,UAAU,CAAC,CACnB,CAAC;IACJ,CAAC;CACF;AAlFD,oCAkFC"}
|
package/build/RedisCommon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisCommon.js","sourceRoot":"","sources":["../src/RedisCommon.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAE5B,QAAA,mBAAmB,GAAG,IAAI,GAAG,CAAC;IACzC;QACE,kBAAS,CAAC,IAAI;QACd;YACE;;;;;;;;;;;;;eAaG;YACH,KAAK,EAAE,CAAC,GAAS,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"RedisCommon.js","sourceRoot":"","sources":["../src/RedisCommon.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAE5B,QAAA,mBAAmB,GAAG,IAAI,GAAG,CAAC;IACzC;QACE,kBAAS,CAAC,IAAI;QACd;YACE;;;;;;;;;;;;;eAaG;YACH,KAAK,EAAE,CAAC,GAAS,EAAE,EAAE,WAAC,OAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,EAAE,mCAAI,IAAI,CAAA,EAAA;YAChD,IAAI,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SAChD;KACF;CACF,CAAC,CAAC"}
|
|
@@ -17,7 +17,7 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
17
17
|
let redisCacheAdapterContext;
|
|
18
18
|
beforeAll(() => {
|
|
19
19
|
redisCacheAdapterContext = {
|
|
20
|
-
redisClient: new ioredis_1.default(new url_1.URL(process.env
|
|
20
|
+
redisClient: new ioredis_1.default(new url_1.URL(process.env['REDIS_URL']).toString()),
|
|
21
21
|
makeKeyFn(...parts) {
|
|
22
22
|
const delimiter = ':';
|
|
23
23
|
const escapedParts = parts.map((part) => part.replace('\\', '\\\\').replace(delimiter, `\\${delimiter}`));
|
|
@@ -26,7 +26,7 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
26
26
|
cacheKeyPrefix: 'test-',
|
|
27
27
|
cacheKeyVersion: 1,
|
|
28
28
|
ttlSecondsPositive: 86400,
|
|
29
|
-
ttlSecondsNegative: 600,
|
|
29
|
+
ttlSecondsNegative: 600, // 10 minutes
|
|
30
30
|
};
|
|
31
31
|
});
|
|
32
32
|
beforeEach(async () => {
|
|
@@ -36,7 +36,7 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
36
36
|
redisCacheAdapterContext.redisClient.disconnect();
|
|
37
37
|
});
|
|
38
38
|
it('has correct caching behavior', async () => {
|
|
39
|
-
const viewerContext = new TestViewerContext(createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider(redisCacheAdapterContext));
|
|
39
|
+
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(redisCacheAdapterContext));
|
|
40
40
|
const cacheAdapter = viewerContext.entityCompanionProvider.getCompanionForEntity(RedisTestEntity_1.default, RedisTestEntity_1.default.getCompanionDefinition())['tableDataCoordinator']['cacheAdapter'];
|
|
41
41
|
const cacheKeyMaker = cacheAdapter['makeCacheKey'].bind(cacheAdapter);
|
|
42
42
|
const entity1Created = await RedisTestEntity_1.default.creator(viewerContext)
|
|
@@ -53,7 +53,7 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
53
53
|
name: 'blah',
|
|
54
54
|
});
|
|
55
55
|
// simulate non existent db fetch, should write negative result ('') to cache
|
|
56
|
-
const nonExistentId = uuid_1.v4();
|
|
56
|
+
const nonExistentId = (0, uuid_1.v4)();
|
|
57
57
|
const entityNonExistentResult = await RedisTestEntity_1.default.loader(viewerContext).loadByIDAsync(nonExistentId);
|
|
58
58
|
expect(entityNonExistentResult.ok).toBe(false);
|
|
59
59
|
const nonExistentCachedValue = await redisCacheAdapterContext.redisClient.get(cacheKeyMaker('id', nonExistentId));
|
|
@@ -67,28 +67,28 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
67
67
|
expect(cachedValueNull).toBe(null);
|
|
68
68
|
});
|
|
69
69
|
it('caches and restores date fields', async () => {
|
|
70
|
-
const viewerContext = new TestViewerContext(createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider(redisCacheAdapterContext));
|
|
70
|
+
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(redisCacheAdapterContext));
|
|
71
71
|
const date = new Date();
|
|
72
|
-
const entity1 = await results_1.enforceAsyncResult(RedisTestEntity_1.default.creator(viewerContext).setField('dateField', date).createAsync());
|
|
72
|
+
const entity1 = await (0, results_1.enforceAsyncResult)(RedisTestEntity_1.default.creator(viewerContext).setField('dateField', date).createAsync());
|
|
73
73
|
expect(entity1.getField('dateField')).toEqual(date);
|
|
74
74
|
const entity2 = await RedisTestEntity_1.default.loader(viewerContext)
|
|
75
75
|
.enforcing()
|
|
76
76
|
.loadByIDAsync(entity1.getID());
|
|
77
77
|
expect(entity2.getField('dateField')).toEqual(date);
|
|
78
78
|
// simulate new request
|
|
79
|
-
const vc2 = new TestViewerContext(createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider(redisCacheAdapterContext));
|
|
79
|
+
const vc2 = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(redisCacheAdapterContext));
|
|
80
80
|
const entity3 = await RedisTestEntity_1.default.loader(vc2).enforcing().loadByIDAsync(entity1.getID());
|
|
81
81
|
expect(entity3.getField('dateField')).toEqual(date);
|
|
82
82
|
});
|
|
83
83
|
it('caches and restores empty string field keys', async () => {
|
|
84
|
-
const viewerContext = new TestViewerContext(createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider(redisCacheAdapterContext));
|
|
85
|
-
const entity1 = await results_1.enforceAsyncResult(RedisTestEntity_1.default.creator(viewerContext).setField('name', '').createAsync());
|
|
84
|
+
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(redisCacheAdapterContext));
|
|
85
|
+
const entity1 = await (0, results_1.enforceAsyncResult)(RedisTestEntity_1.default.creator(viewerContext).setField('name', '').createAsync());
|
|
86
86
|
const entity2 = await RedisTestEntity_1.default.loader(viewerContext)
|
|
87
87
|
.enforcing()
|
|
88
88
|
.loadByFieldEqualingAsync('name', '');
|
|
89
89
|
expect(entity2 === null || entity2 === void 0 ? void 0 : entity2.getID()).toEqual(entity1.getID());
|
|
90
90
|
// simulate new request
|
|
91
|
-
const vc2 = new TestViewerContext(createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider(redisCacheAdapterContext));
|
|
91
|
+
const vc2 = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(redisCacheAdapterContext));
|
|
92
92
|
const entity3 = await RedisTestEntity_1.default.loader(vc2)
|
|
93
93
|
.enforcing()
|
|
94
94
|
.loadByFieldEqualingAsync('name', '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisCacheAdapter-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/RedisCacheAdapter-integration-test.ts"],"names":[],"mappings":";;;;;AAAA,yCAA6C;AAC7C,2CAAmD;AACnD,sDAA4B;AAC5B,6BAA0B;AAC1B,+BAAoC;AAEpC,6EAAmF;AACnF,sFAA8D;AAC9D,yIAAsI;AAEtI,MAAM,iBAAkB,SAAQ,sBAAa;CAAG;AAEhD,QAAQ,CAAC,2BAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,wBAAkD,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,wBAAwB,GAAG;YACzB,WAAW,EAAE,IAAI,iBAAK,CAAC,IAAI,SAAG,CAAC,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"RedisCacheAdapter-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/RedisCacheAdapter-integration-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
15
15
|
let redisCacheAdapterContext;
|
|
16
16
|
beforeAll(() => {
|
|
17
17
|
redisCacheAdapterContext = {
|
|
18
|
-
redisClient: new ioredis_1.default(new url_1.URL(process.env
|
|
18
|
+
redisClient: new ioredis_1.default(new url_1.URL(process.env['REDIS_URL']).toString()),
|
|
19
19
|
makeKeyFn(...parts) {
|
|
20
20
|
const delimiter = ':';
|
|
21
21
|
const escapedParts = parts.map((part) => part.replace('\\', '\\\\').replace(delimiter, `\\${delimiter}`));
|
|
@@ -24,7 +24,7 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
24
24
|
cacheKeyPrefix: 'test-',
|
|
25
25
|
cacheKeyVersion: 1,
|
|
26
26
|
ttlSecondsPositive: 86400,
|
|
27
|
-
ttlSecondsNegative: 600,
|
|
27
|
+
ttlSecondsNegative: 600, // 10 minutes
|
|
28
28
|
};
|
|
29
29
|
});
|
|
30
30
|
beforeEach(async () => {
|
|
@@ -32,7 +32,7 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
32
32
|
});
|
|
33
33
|
it('throws when redis is disconnected', async () => {
|
|
34
34
|
redisCacheAdapterContext.redisClient.disconnect();
|
|
35
|
-
const vc1 = new TestViewerContext(createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider(redisCacheAdapterContext));
|
|
35
|
+
const vc1 = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(redisCacheAdapterContext));
|
|
36
36
|
await expect(RedisTestEntity_1.default.creator(vc1).setField('name', 'blah').enforceCreateAsync()).rejects.toThrow(entity_1.EntityCacheAdapterTransientError);
|
|
37
37
|
});
|
|
38
38
|
});
|
|
@@ -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,6EAAmF;AACnF,sFAA8D;AAC9D,yIAAsI;AAEtI,MAAM,iBAAkB,SAAQ,sBAAa;CAAG;AAEhD,QAAQ,CAAC,2BAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,wBAAkD,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,wBAAwB,GAAG;YACzB,WAAW,EAAE,IAAI,iBAAK,CAAC,IAAI,SAAG,CAAC,OAAO,CAAC,GAAG,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,6EAAmF;AACnF,sFAA8D;AAC9D,yIAAsI;AAEtI,MAAM,iBAAkB,SAAQ,sBAAa;CAAG;AAEhD,QAAQ,CAAC,2BAAiB,EAAE,GAAG,EAAE;IAC/B,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,eAAe,EAAE,CAAC;YAClB,kBAAkB,EAAE,KAAK;YACzB,kBAAkB,EAAE,GAAG,EAAE,aAAa;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,wBAAwB,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,wBAAwB,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAElD,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,kBAAkB,EAAE,CAC3E,CAAC,OAAO,CAAC,OAAO,CAAC,yCAAgC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -19,11 +19,11 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
19
19
|
describe('loadManyAsync', () => {
|
|
20
20
|
it('returns appropriate cache results', async () => {
|
|
21
21
|
const redisResults = new Map();
|
|
22
|
-
const mockRedisClient = ts_mockito_1.mock();
|
|
22
|
+
const mockRedisClient = (0, ts_mockito_1.mock)();
|
|
23
23
|
// need to have one anything() for each element of spread, in this case 3
|
|
24
|
-
ts_mockito_1.when(mockRedisClient.mget(ts_mockito_1.anything(), ts_mockito_1.anything(), ts_mockito_1.anything())).thenCall(async (...keys) => keys.map((k) => { var _a; return (_a = redisResults.get(k)) !== null && _a !== void 0 ? _a : null; }));
|
|
24
|
+
(0, ts_mockito_1.when)(mockRedisClient.mget((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenCall(async (...keys) => keys.map((k) => { var _a; return (_a = redisResults.get(k)) !== null && _a !== void 0 ? _a : null; }));
|
|
25
25
|
const cacheAdapter = new RedisCacheAdapter_1.default(entityConfiguration, {
|
|
26
|
-
redisClient: ts_mockito_1.instance(mockRedisClient),
|
|
26
|
+
redisClient: (0, ts_mockito_1.instance)(mockRedisClient),
|
|
27
27
|
makeKeyFn: (...parts) => parts.join(':'),
|
|
28
28
|
cacheKeyVersion: 1,
|
|
29
29
|
cacheKeyPrefix: 'hello-',
|
|
@@ -40,7 +40,7 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
40
40
|
});
|
|
41
41
|
it('returns empty map when passed empty array of fieldValues', async () => {
|
|
42
42
|
const cacheAdapter = new RedisCacheAdapter_1.default(entityConfiguration, {
|
|
43
|
-
redisClient: ts_mockito_1.instance(ts_mockito_1.mock()),
|
|
43
|
+
redisClient: (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()),
|
|
44
44
|
makeKeyFn: (...parts) => parts.join(':'),
|
|
45
45
|
cacheKeyVersion: 1,
|
|
46
46
|
cacheKeyPrefix: 'hello-',
|
|
@@ -54,17 +54,17 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
54
54
|
describe('cacheManyAsync', () => {
|
|
55
55
|
it('correctly caches all objects', async () => {
|
|
56
56
|
const redisResults = new Map();
|
|
57
|
-
const mockPipeline = ts_mockito_1.mock();
|
|
58
|
-
ts_mockito_1.when(mockPipeline.set(ts_mockito_1.anything(), ts_mockito_1.anything(), ts_mockito_1.anything(), ts_mockito_1.anything())).thenCall((key, value, code, ttl) => {
|
|
57
|
+
const mockPipeline = (0, ts_mockito_1.mock)();
|
|
58
|
+
(0, ts_mockito_1.when)(mockPipeline.set((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenCall((key, value, code, ttl) => {
|
|
59
59
|
redisResults.set(key, { value, code, ttl });
|
|
60
60
|
return pipeline;
|
|
61
61
|
});
|
|
62
|
-
ts_mockito_1.when(mockPipeline.exec()).thenResolve({});
|
|
63
|
-
const pipeline = ts_mockito_1.instance(mockPipeline);
|
|
64
|
-
const mockRedisClient = ts_mockito_1.mock();
|
|
65
|
-
ts_mockito_1.when(mockRedisClient.multi()).thenReturn(pipeline);
|
|
62
|
+
(0, ts_mockito_1.when)(mockPipeline.exec()).thenResolve({});
|
|
63
|
+
const pipeline = (0, ts_mockito_1.instance)(mockPipeline);
|
|
64
|
+
const mockRedisClient = (0, ts_mockito_1.mock)();
|
|
65
|
+
(0, ts_mockito_1.when)(mockRedisClient.multi()).thenReturn(pipeline);
|
|
66
66
|
const cacheAdapter = new RedisCacheAdapter_1.default(entityConfiguration, {
|
|
67
|
-
redisClient: ts_mockito_1.instance(mockRedisClient),
|
|
67
|
+
redisClient: (0, ts_mockito_1.instance)(mockRedisClient),
|
|
68
68
|
makeKeyFn: (...parts) => parts.join(':'),
|
|
69
69
|
cacheKeyVersion: 1,
|
|
70
70
|
cacheKeyPrefix: 'hello-',
|
|
@@ -83,17 +83,17 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
83
83
|
describe('cacheDBMissesAsync', () => {
|
|
84
84
|
it('correctly caches misses', async () => {
|
|
85
85
|
const redisResults = new Map();
|
|
86
|
-
const mockPipeline = ts_mockito_1.mock();
|
|
87
|
-
ts_mockito_1.when(mockPipeline.set(ts_mockito_1.anything(), ts_mockito_1.anything(), ts_mockito_1.anything(), ts_mockito_1.anything())).thenCall((key, value, code, ttl) => {
|
|
86
|
+
const mockPipeline = (0, ts_mockito_1.mock)();
|
|
87
|
+
(0, ts_mockito_1.when)(mockPipeline.set((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenCall((key, value, code, ttl) => {
|
|
88
88
|
redisResults.set(key, { value, code, ttl });
|
|
89
89
|
return pipeline;
|
|
90
90
|
});
|
|
91
|
-
ts_mockito_1.when(mockPipeline.exec()).thenResolve({});
|
|
92
|
-
const pipeline = ts_mockito_1.instance(mockPipeline);
|
|
93
|
-
const mockRedisClient = ts_mockito_1.mock();
|
|
94
|
-
ts_mockito_1.when(mockRedisClient.multi()).thenReturn(pipeline);
|
|
91
|
+
(0, ts_mockito_1.when)(mockPipeline.exec()).thenResolve({});
|
|
92
|
+
const pipeline = (0, ts_mockito_1.instance)(mockPipeline);
|
|
93
|
+
const mockRedisClient = (0, ts_mockito_1.mock)();
|
|
94
|
+
(0, ts_mockito_1.when)(mockRedisClient.multi()).thenReturn(pipeline);
|
|
95
95
|
const cacheAdapter = new RedisCacheAdapter_1.default(entityConfiguration, {
|
|
96
|
-
redisClient: ts_mockito_1.instance(mockRedisClient),
|
|
96
|
+
redisClient: (0, ts_mockito_1.instance)(mockRedisClient),
|
|
97
97
|
makeKeyFn: (...parts) => parts.join(':'),
|
|
98
98
|
cacheKeyVersion: 1,
|
|
99
99
|
cacheKeyPrefix: 'hello-',
|
|
@@ -111,10 +111,10 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
111
111
|
});
|
|
112
112
|
describe('invalidateManyAsync', () => {
|
|
113
113
|
it('invalidates correctly', async () => {
|
|
114
|
-
const mockRedisClient = ts_mockito_1.mock();
|
|
115
|
-
ts_mockito_1.when(mockRedisClient.del()).thenResolve(1);
|
|
114
|
+
const mockRedisClient = (0, ts_mockito_1.mock)();
|
|
115
|
+
(0, ts_mockito_1.when)(mockRedisClient.del()).thenResolve(1);
|
|
116
116
|
const cacheAdapter = new RedisCacheAdapter_1.default(entityConfiguration, {
|
|
117
|
-
redisClient: ts_mockito_1.instance(mockRedisClient),
|
|
117
|
+
redisClient: (0, ts_mockito_1.instance)(mockRedisClient),
|
|
118
118
|
makeKeyFn: (...parts) => parts.join(':'),
|
|
119
119
|
cacheKeyVersion: 1,
|
|
120
120
|
cacheKeyPrefix: 'hello-',
|
|
@@ -123,11 +123,11 @@ describe(RedisCacheAdapter_1.default, () => {
|
|
|
123
123
|
});
|
|
124
124
|
await cacheAdapter.invalidateManyAsync('id', ['wat']);
|
|
125
125
|
const cacheKey = cacheAdapter['makeCacheKey']('id', 'wat');
|
|
126
|
-
ts_mockito_1.verify(mockRedisClient.del(cacheKey)).once();
|
|
126
|
+
(0, ts_mockito_1.verify)(mockRedisClient.del(cacheKey)).once();
|
|
127
127
|
});
|
|
128
128
|
it('returns when passed empty array of fieldValues', async () => {
|
|
129
129
|
const cacheAdapter = new RedisCacheAdapter_1.default(entityConfiguration, {
|
|
130
|
-
redisClient: ts_mockito_1.instance(ts_mockito_1.mock()),
|
|
130
|
+
redisClient: (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()),
|
|
131
131
|
makeKeyFn: (...parts) => parts.join(':'),
|
|
132
132
|
cacheKeyVersion: 1,
|
|
133
133
|
cacheKeyPrefix: 'hello-',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisCacheAdapter-test.js","sourceRoot":"","sources":["../../src/__tests__/RedisCacheAdapter-test.ts"],"names":[],"mappings":";;;;;AAAA,yCAA2E;AAE3E,2CAAoE;AAEpE,6EAAqD;AAMrD,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,OAAO;CAC5B,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAAiB,EAAE,GAAG,EAAE;IAC/B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;YAE/B,MAAM,eAAe,GAAG,iBAAI,
|
|
1
|
+
{"version":3,"file":"RedisCacheAdapter-test.js","sourceRoot":"","sources":["../../src/__tests__/RedisCacheAdapter-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
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 entity_1 = require("@expo/entity");
|
|
7
|
+
const wrapNativeRedisCallAsync_1 = __importDefault(require("../wrapNativeRedisCallAsync"));
|
|
8
|
+
describe(wrapNativeRedisCallAsync_1.default, () => {
|
|
9
|
+
it('rethrows literals', async () => {
|
|
10
|
+
const throwingFn = async () => {
|
|
11
|
+
// eslint-disable-next-line no-throw-literal,@typescript-eslint/no-throw-literal
|
|
12
|
+
throw 'hello';
|
|
13
|
+
};
|
|
14
|
+
let capturedThrownThing;
|
|
15
|
+
try {
|
|
16
|
+
await (0, wrapNativeRedisCallAsync_1.default)(throwingFn);
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
capturedThrownThing = e;
|
|
20
|
+
}
|
|
21
|
+
expect(capturedThrownThing).not.toBeInstanceOf(Error);
|
|
22
|
+
expect(capturedThrownThing).toEqual('hello');
|
|
23
|
+
});
|
|
24
|
+
it('wraps errors with stacks', async () => {
|
|
25
|
+
const throwingFn = async () => {
|
|
26
|
+
const e = new Error('hello');
|
|
27
|
+
e.stack = 'world';
|
|
28
|
+
throw e;
|
|
29
|
+
};
|
|
30
|
+
let capturedThrownThing;
|
|
31
|
+
try {
|
|
32
|
+
await (0, wrapNativeRedisCallAsync_1.default)(throwingFn);
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
capturedThrownThing = e;
|
|
36
|
+
}
|
|
37
|
+
expect(capturedThrownThing).toBeInstanceOf(entity_1.EntityCacheAdapterTransientError);
|
|
38
|
+
expect(capturedThrownThing.message).toEqual('hello');
|
|
39
|
+
expect(capturedThrownThing.stack).toEqual('world');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=wrapNativeRedisCallAsync-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapNativeRedisCallAsync-test.js","sourceRoot":"","sources":["../../../src/errors/__tests__/wrapNativeRedisCallAsync-test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAgE;AAEhE,2FAAmE;AAEnE,QAAQ,CAAC,kCAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,UAAU,GAAG,KAAK,IAAmB,EAAE;YAC3C,gFAAgF;YAChF,MAAM,OAAO,CAAC;QAChB,CAAC,CAAC;QAEF,IAAI,mBAAwB,CAAC;QAC7B,IAAI;YACF,MAAM,IAAA,kCAAwB,EAAC,UAAU,CAAC,CAAC;SAC5C;QAAC,OAAO,CAAC,EAAE;YACV,mBAAmB,GAAG,CAAC,CAAC;SACzB;QACD,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,UAAU,GAAG,KAAK,IAAmB,EAAE;YAC3C,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC;YAClB,MAAM,CAAC,CAAC;QACV,CAAC,CAAC;QAEF,IAAI,mBAAwB,CAAC;QAC7B,IAAI;YACF,MAAM,IAAA,kCAAwB,EAAC,UAAU,CAAC,CAAC;SAC5C;QAAC,OAAO,CAAC,EAAE;YACV,mBAAmB,GAAG,CAAC,CAAC;SACzB;QACD,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,CAAC,yCAAgC,CAAC,CAAC;QAC7E,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function wrapNativeRedisCallAsync<T>(fn: () => Promise<T>): Promise<T>;
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const entity_1 = require("@expo/entity");
|
|
4
|
-
async function
|
|
4
|
+
async function wrapNativeRedisCallAsync(fn) {
|
|
5
5
|
try {
|
|
6
6
|
return await fn();
|
|
7
7
|
}
|
|
8
8
|
catch (e) {
|
|
9
|
+
if (!(e instanceof Error)) {
|
|
10
|
+
throw e;
|
|
11
|
+
}
|
|
9
12
|
const error = new entity_1.EntityCacheAdapterTransientError(e.message, e);
|
|
10
|
-
|
|
13
|
+
if (e.stack) {
|
|
14
|
+
error.stack = e.stack;
|
|
15
|
+
}
|
|
11
16
|
throw error;
|
|
12
17
|
}
|
|
13
18
|
}
|
|
14
|
-
exports.default =
|
|
15
|
-
//# sourceMappingURL=
|
|
19
|
+
exports.default = wrapNativeRedisCallAsync;
|
|
20
|
+
//# sourceMappingURL=wrapNativeRedisCallAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapNativeRedisCallAsync.js","sourceRoot":"","sources":["../../src/errors/wrapNativeRedisCallAsync.ts"],"names":[],"mappings":";;AAAA,yCAAgE;AAEjD,KAAK,UAAU,wBAAwB,CAAI,EAAoB;IAC5E,IAAI;QACF,OAAO,MAAM,EAAE,EAAE,CAAC;KACnB;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,EAAE;YACzB,MAAM,CAAC,CAAC;SACT;QAED,MAAM,KAAK,GAAG,IAAI,yCAAgC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,KAAK,EAAE;YACX,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACvB;QACD,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AAdD,2CAcC"}
|
|
@@ -8,9 +8,9 @@ export default class RedisTestEntity extends Entity<RedisTestEntityFields, strin
|
|
|
8
8
|
static getCompanionDefinition(): EntityCompanionDefinition<RedisTestEntityFields, string, ViewerContext, RedisTestEntity, RedisTestEntityPrivacyPolicy>;
|
|
9
9
|
}
|
|
10
10
|
export declare class RedisTestEntityPrivacyPolicy extends EntityPrivacyPolicy<RedisTestEntityFields, string, ViewerContext, RedisTestEntity> {
|
|
11
|
-
protected readonly createRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity,
|
|
12
|
-
protected readonly readRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity,
|
|
13
|
-
protected readonly updateRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity,
|
|
14
|
-
protected readonly deleteRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity,
|
|
11
|
+
protected readonly createRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity, keyof RedisTestEntityFields>[];
|
|
12
|
+
protected readonly readRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity, keyof RedisTestEntityFields>[];
|
|
13
|
+
protected readonly updateRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity, keyof RedisTestEntityFields>[];
|
|
14
|
+
protected readonly deleteRules: AlwaysAllowPrivacyPolicyRule<RedisTestEntityFields, string, ViewerContext, RedisTestEntity, keyof RedisTestEntityFields>[];
|
|
15
15
|
}
|
|
16
16
|
export declare const redisTestEntityConfiguration: EntityConfiguration<RedisTestEntityFields>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisTestEntity.js","sourceRoot":"","sources":["../../src/testfixtures/RedisTestEntity.ts"],"names":[],"mappings":";;;AAAA,yCAUsB;AAQtB,MAAqB,eAAgB,SAAQ,eAAoD;IAC/F,MAAM,CAAC,sBAAsB;QAO3B,OAAO,kCAAkC,CAAC;IAC5C,CAAC;CACF;AAVD,kCAUC;AAED,MAAa,4BAA6B,SAAQ,4BAKjD;IALD;;
|
|
1
|
+
{"version":3,"file":"RedisTestEntity.js","sourceRoot":"","sources":["../../src/testfixtures/RedisTestEntity.ts"],"names":[],"mappings":";;;AAAA,yCAUsB;AAQtB,MAAqB,eAAgB,SAAQ,eAAoD;IAC/F,MAAM,CAAC,sBAAsB;QAO3B,OAAO,kCAAkC,CAAC;IAC5C,CAAC;CACF;AAVD,kCAUC;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;YAChB,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,IAAI,EAAE,IAAI,oBAAW,CAAC;YACpB,UAAU,EAAE,MAAM;YAClB,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,SAAS,EAAE,IAAI,kBAAS,CAAC;YACvB,UAAU,EAAE,YAAY;SACzB,CAAC;KACH;IACD,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,OAAO;CAC5B,CAAC,CAAC;AAEH,MAAM,kCAAkC,GAAG,IAAI,kCAAyB,CAAC;IACvE,WAAW,EAAE,eAAe;IAC5B,mBAAmB,EAAE,oCAA4B;IACjD,kBAAkB,EAAE,4BAA4B;CACjD,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/entity-cache-adapter-redis",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Redis cache adapter for @expo/entity",
|
|
5
5
|
"files": [
|
|
6
6
|
"build",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"tsc": "tsc",
|
|
13
13
|
"clean": "rm -rf build coverage coverage-integration",
|
|
14
14
|
"lint": "eslint src",
|
|
15
|
+
"lint-fix": "eslint src --fix",
|
|
15
16
|
"test": "jest --rootDir . --config ../../resources/jest.config.js",
|
|
16
17
|
"integration": "../../resources/run-with-docker yarn integration-no-setup",
|
|
17
18
|
"integration-no-setup": "jest --config ../../resources/jest-integration.config.js --rootDir . --runInBand --passWithNoTests",
|
|
@@ -32,6 +33,6 @@
|
|
|
32
33
|
"ioredis": "^4.27.3"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@expo/entity": "^0.
|
|
36
|
+
"@expo/entity": "^0.21.0"
|
|
36
37
|
}
|
|
37
38
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CacheLoadResult, CacheStatus } from '@expo/entity';
|
|
2
2
|
import { Redis } from 'ioredis';
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import wrapNativeRedisCallAsync from './errors/wrapNativeRedisCallAsync';
|
|
5
5
|
|
|
6
6
|
// Sentinel value we store in Redis to negatively cache a database miss.
|
|
7
7
|
// The sentinel value is distinct from any (positively) cached value.
|
|
@@ -36,11 +36,13 @@ export default class GenericRedisCacher {
|
|
|
36
36
|
return new Map();
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
const redisResults = await
|
|
39
|
+
const redisResults = await wrapNativeRedisCallAsync(() =>
|
|
40
|
+
this.context.redisClient.mget(...keys)
|
|
41
|
+
);
|
|
40
42
|
|
|
41
43
|
const results = new Map<string, CacheLoadResult>();
|
|
42
44
|
for (let i = 0; i < keys.length; i++) {
|
|
43
|
-
const key = keys[i]
|
|
45
|
+
const key = keys[i]!;
|
|
44
46
|
const redisResult = redisResults[i];
|
|
45
47
|
|
|
46
48
|
if (redisResult === DOES_NOT_EXIST_REDIS) {
|
|
@@ -75,7 +77,7 @@ export default class GenericRedisCacher {
|
|
|
75
77
|
this.context.ttlSecondsPositive
|
|
76
78
|
);
|
|
77
79
|
});
|
|
78
|
-
await
|
|
80
|
+
await wrapNativeRedisCallAsync(() => redisTransaction.exec());
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
public async cacheDBMissesAsync(keys: string[]): Promise<void> {
|
|
@@ -92,7 +94,7 @@ export default class GenericRedisCacher {
|
|
|
92
94
|
this.context.ttlSecondsNegative
|
|
93
95
|
);
|
|
94
96
|
});
|
|
95
|
-
await
|
|
97
|
+
await wrapNativeRedisCallAsync(() => redisTransaction.exec());
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
public async invalidateManyAsync(keys: string[]): Promise<void> {
|
|
@@ -100,6 +102,6 @@ export default class GenericRedisCacher {
|
|
|
100
102
|
return;
|
|
101
103
|
}
|
|
102
104
|
|
|
103
|
-
await
|
|
105
|
+
await wrapNativeRedisCallAsync(() => this.context.redisClient.del(...keys));
|
|
104
106
|
}
|
|
105
107
|
}
|
|
@@ -15,7 +15,7 @@ describe(RedisCacheAdapter, () => {
|
|
|
15
15
|
|
|
16
16
|
beforeAll(() => {
|
|
17
17
|
redisCacheAdapterContext = {
|
|
18
|
-
redisClient: new Redis(new URL(process.env
|
|
18
|
+
redisClient: new Redis(new URL(process.env['REDIS_URL']!).toString()),
|
|
19
19
|
makeKeyFn(...parts: string[]): string {
|
|
20
20
|
const delimiter = ':';
|
|
21
21
|
const escapedParts = parts.map((part) =>
|
|
@@ -13,7 +13,7 @@ describe(RedisCacheAdapter, () => {
|
|
|
13
13
|
|
|
14
14
|
beforeAll(() => {
|
|
15
15
|
redisCacheAdapterContext = {
|
|
16
|
-
redisClient: new Redis(new URL(process.env
|
|
16
|
+
redisClient: new Redis(new URL(process.env['REDIS_URL']!).toString()),
|
|
17
17
|
makeKeyFn(...parts: string[]): string {
|
|
18
18
|
const delimiter = ':';
|
|
19
19
|
const escapedParts = parts.map((part) =>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { EntityCacheAdapterTransientError } from '@expo/entity';
|
|
2
|
+
|
|
3
|
+
import wrapNativeRedisCallAsync from '../wrapNativeRedisCallAsync';
|
|
4
|
+
|
|
5
|
+
describe(wrapNativeRedisCallAsync, () => {
|
|
6
|
+
it('rethrows literals', async () => {
|
|
7
|
+
const throwingFn = async (): Promise<void> => {
|
|
8
|
+
// eslint-disable-next-line no-throw-literal,@typescript-eslint/no-throw-literal
|
|
9
|
+
throw 'hello';
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
let capturedThrownThing: any;
|
|
13
|
+
try {
|
|
14
|
+
await wrapNativeRedisCallAsync(throwingFn);
|
|
15
|
+
} catch (e) {
|
|
16
|
+
capturedThrownThing = e;
|
|
17
|
+
}
|
|
18
|
+
expect(capturedThrownThing).not.toBeInstanceOf(Error);
|
|
19
|
+
expect(capturedThrownThing).toEqual('hello');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('wraps errors with stacks', async () => {
|
|
23
|
+
const throwingFn = async (): Promise<void> => {
|
|
24
|
+
const e = new Error('hello');
|
|
25
|
+
e.stack = 'world';
|
|
26
|
+
throw e;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
let capturedThrownThing: any;
|
|
30
|
+
try {
|
|
31
|
+
await wrapNativeRedisCallAsync(throwingFn);
|
|
32
|
+
} catch (e) {
|
|
33
|
+
capturedThrownThing = e;
|
|
34
|
+
}
|
|
35
|
+
expect(capturedThrownThing).toBeInstanceOf(EntityCacheAdapterTransientError);
|
|
36
|
+
expect(capturedThrownThing.message).toEqual('hello');
|
|
37
|
+
expect(capturedThrownThing.stack).toEqual('world');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { EntityCacheAdapterTransientError } from '@expo/entity';
|
|
2
2
|
|
|
3
|
-
export default async function
|
|
3
|
+
export default async function wrapNativeRedisCallAsync<T>(fn: () => Promise<T>): Promise<T> {
|
|
4
4
|
try {
|
|
5
5
|
return await fn();
|
|
6
6
|
} catch (e) {
|
|
7
|
+
if (!(e instanceof Error)) {
|
|
8
|
+
throw e;
|
|
9
|
+
}
|
|
10
|
+
|
|
7
11
|
const error = new EntityCacheAdapterTransientError(e.message, e);
|
|
8
|
-
|
|
12
|
+
if (e.stack) {
|
|
13
|
+
error.stack = e.stack;
|
|
14
|
+
}
|
|
9
15
|
throw error;
|
|
10
16
|
}
|
|
11
17
|
}
|
|
@@ -34,7 +34,7 @@ export class RedisTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
|
|
|
34
34
|
ViewerContext,
|
|
35
35
|
RedisTestEntity
|
|
36
36
|
> {
|
|
37
|
-
protected readonly createRules = [
|
|
37
|
+
protected override readonly createRules = [
|
|
38
38
|
new AlwaysAllowPrivacyPolicyRule<
|
|
39
39
|
RedisTestEntityFields,
|
|
40
40
|
string,
|
|
@@ -42,7 +42,7 @@ export class RedisTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
|
|
|
42
42
|
RedisTestEntity
|
|
43
43
|
>(),
|
|
44
44
|
];
|
|
45
|
-
protected readonly readRules = [
|
|
45
|
+
protected override readonly readRules = [
|
|
46
46
|
new AlwaysAllowPrivacyPolicyRule<
|
|
47
47
|
RedisTestEntityFields,
|
|
48
48
|
string,
|
|
@@ -50,7 +50,7 @@ export class RedisTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
|
|
|
50
50
|
RedisTestEntity
|
|
51
51
|
>(),
|
|
52
52
|
];
|
|
53
|
-
protected readonly updateRules = [
|
|
53
|
+
protected override readonly updateRules = [
|
|
54
54
|
new AlwaysAllowPrivacyPolicyRule<
|
|
55
55
|
RedisTestEntityFields,
|
|
56
56
|
string,
|
|
@@ -58,7 +58,7 @@ export class RedisTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
|
|
|
58
58
|
RedisTestEntity
|
|
59
59
|
>(),
|
|
60
60
|
];
|
|
61
|
-
protected readonly deleteRules = [
|
|
61
|
+
protected override readonly deleteRules = [
|
|
62
62
|
new AlwaysAllowPrivacyPolicyRule<
|
|
63
63
|
RedisTestEntityFields,
|
|
64
64
|
string,
|
package/CHANGELOG.md
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
# Change Log
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
-
|
|
6
|
-
# [0.17.0](https://github.com/expo/entity/compare/v0.16.0...v0.17.0) (2021-08-16)
|
|
7
|
-
|
|
8
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
# [0.16.0](https://github.com/expo/entity/compare/v0.15.0...v0.16.0) (2021-07-07)
|
|
15
|
-
|
|
16
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# [0.15.0](https://github.com/expo/entity/compare/v0.14.1...v0.15.0) (2021-05-26)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
### Bug Fixes
|
|
26
|
-
|
|
27
|
-
* upgrade ioredis, knex, and pg ([#125](https://github.com/expo/entity/issues/125)) ([7c43edf](https://github.com/expo/entity/commit/7c43edf3de37e8af13e2a99bd44f03f54803d9b9))
|
|
28
|
-
* use column name instead of field name for redis cache key ([#124](https://github.com/expo/entity/issues/124)) ([d78f452](https://github.com/expo/entity/commit/d78f452bb3ac5527069813a03f5b2264375bd8ab))
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
### Features
|
|
32
|
-
|
|
33
|
-
* secondary cache loader ([#123](https://github.com/expo/entity/issues/123)) ([4cba01e](https://github.com/expo/entity/commit/4cba01eb259c87d60b3026ce776e46f781363690))
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
## [0.14.1](https://github.com/expo/entity/compare/v0.14.0...v0.14.1) (2021-03-24)
|
|
40
|
-
|
|
41
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
# [0.14.0](https://github.com/expo/entity/compare/v0.13.0...v0.14.0) (2021-03-24)
|
|
48
|
-
|
|
49
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
# [0.13.0](https://github.com/expo/entity/compare/v0.12.0...v0.13.0) (2021-02-12)
|
|
56
|
-
|
|
57
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
# [0.12.0](https://github.com/expo/entity/compare/v0.11.0...v0.12.0) (2021-01-22)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
### Bug Fixes
|
|
67
|
-
|
|
68
|
-
* remove cache and database adaptor flavor enums ([#109](https://github.com/expo/entity/issues/109)) ([72a77f8](https://github.com/expo/entity/commit/72a77f8b6893a4b76d3b1cce16659bdf3ce473ee))
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
# [0.11.0](https://github.com/expo/entity/compare/v0.10.0...v0.11.0) (2020-12-24)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
### Features
|
|
78
|
-
|
|
79
|
-
* better cache adapter error handling ([#102](https://github.com/expo/entity/issues/102)) ([15546aa](https://github.com/expo/entity/commit/15546aad97734ab9ac67f1c012485f096a0e94f1))
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
# [0.10.0](https://github.com/expo/entity/compare/v0.9.1...v0.10.0) (2020-11-17)
|
|
86
|
-
|
|
87
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
## [0.9.1](https://github.com/expo/entity/compare/v0.9.0...v0.9.1) (2020-11-06)
|
|
94
|
-
|
|
95
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
# [0.9.0](https://github.com/expo/entity/compare/v0.8.1...v0.9.0) (2020-11-05)
|
|
102
|
-
|
|
103
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
## [0.8.1](https://github.com/expo/entity/compare/v0.8.0...v0.8.1) (2020-10-09)
|
|
110
|
-
|
|
111
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
# [0.8.0](https://github.com/expo/entity/compare/v0.7.1...v0.8.0) (2020-10-09)
|
|
118
|
-
|
|
119
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
## [0.7.1](https://github.com/expo/entity/compare/v0.7.0...v0.7.1) (2020-10-01)
|
|
126
|
-
|
|
127
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
# [0.7.0](https://github.com/expo/entity/compare/v0.6.0...v0.7.0) (2020-10-01)
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
### Bug Fixes
|
|
137
|
-
|
|
138
|
-
* upgrade packages ([#78](https://github.com/expo/entity/issues/78)) ([9891e74](https://github.com/expo/entity/commit/9891e7469467a28589f529c8d87b10fc2232d3ff))
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
# [0.6.0](https://github.com/expo/entity/compare/v0.5.2...v0.6.0) (2020-07-23)
|
|
145
|
-
|
|
146
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
## [0.5.2](https://github.com/expo/entity/compare/v0.5.1...v0.5.2) (2020-07-02)
|
|
153
|
-
|
|
154
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
## [0.5.1](https://github.com/expo/entity/compare/v0.5.0...v0.5.1) (2020-07-01)
|
|
161
|
-
|
|
162
|
-
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
# 0.5.0 (2020-07-01)
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
### Features
|
|
172
|
-
|
|
173
|
-
* support entity fields subset of db fields ([#49](https://github.com/expo/entity/issues/49)) ([4e40b2e](https://github.com/expo/entity/commit/4e40b2e521407e521d236978ec3b3b56db3990be))
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function wrapNativeRedisCall<T>(fn: () => Promise<T>): Promise<T>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wrapNativeRedisCall.js","sourceRoot":"","sources":["../../src/errors/wrapNativeRedisCall.ts"],"names":[],"mappings":";;AAAA,yCAAgE;AAEjD,KAAK,UAAU,mBAAmB,CAAI,EAAoB;IACvE,IAAI;QACF,OAAO,MAAM,EAAE,EAAE,CAAC;KACnB;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,KAAK,GAAG,IAAI,yCAAgC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACtB,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AARD,sCAQC"}
|