@expo/entity-cache-adapter-redis 0.41.0 → 0.43.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/GenericRedisCacher.d.ts +26 -4
- package/build/GenericRedisCacher.js +36 -5
- package/build/GenericRedisCacher.js.map +1 -1
- package/build/RedisCacheAdapterProvider.d.ts +1 -1
- package/build/RedisCacheAdapterProvider.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/build/utils/getSurroundingCacheKeyVersionsForInvalidation.d.ts +1 -0
- package/build/utils/getSurroundingCacheKeyVersionsForInvalidation.js +11 -0
- package/build/utils/getSurroundingCacheKeyVersionsForInvalidation.js.map +1 -0
- package/package.json +9 -7
- package/src/GenericRedisCacher.ts +72 -13
- package/src/RedisCacheAdapterProvider.ts +3 -3
- package/src/__integration-tests__/BatchedRedisCacheAdapter-integration-test.ts +29 -11
- package/src/__integration-tests__/GenericRedisCacher-full-integration-test.ts +83 -18
- package/src/__integration-tests__/GenericRedisCacher-integration-test.ts +7 -3
- package/src/__integration-tests__/errors-test.ts +7 -3
- package/src/{testfixtures → __testfixtures__}/RedisTestEntity.ts +13 -29
- package/src/{testfixtures → __testfixtures__}/createRedisIntegrationTestEntityCompanionProvider.ts +1 -2
- package/src/__tests__/GenericRedisCacher-test.ts +68 -12
- package/src/index.ts +1 -0
- package/src/utils/__tests__/getSurroundingCacheKeyVersionsForInvalidation-test.ts +9 -0
- package/src/utils/getSurroundingCacheKeyVersionsForInvalidation.ts +9 -0
- package/build/__integration-tests__/BatchedRedisCacheAdapter-integration-test.d.ts +0 -1
- package/build/__integration-tests__/BatchedRedisCacheAdapter-integration-test.js +0 -122
- package/build/__integration-tests__/BatchedRedisCacheAdapter-integration-test.js.map +0 -1
- package/build/__integration-tests__/GenericRedisCacher-full-integration-test.d.ts +0 -1
- package/build/__integration-tests__/GenericRedisCacher-full-integration-test.js +0 -93
- package/build/__integration-tests__/GenericRedisCacher-full-integration-test.js.map +0 -1
- package/build/__integration-tests__/GenericRedisCacher-integration-test.d.ts +0 -1
- package/build/__integration-tests__/GenericRedisCacher-integration-test.js +0 -122
- package/build/__integration-tests__/GenericRedisCacher-integration-test.js.map +0 -1
- package/build/__integration-tests__/errors-test.d.ts +0 -1
- package/build/__integration-tests__/errors-test.js +0 -39
- package/build/__integration-tests__/errors-test.js.map +0 -1
- package/build/__tests__/GenericRedisCacher-test.d.ts +0 -1
- package/build/__tests__/GenericRedisCacher-test.js +0 -141
- package/build/__tests__/GenericRedisCacher-test.js.map +0 -1
- package/build/errors/__tests__/wrapNativeRedisCallAsync-test.d.ts +0 -1
- package/build/errors/__tests__/wrapNativeRedisCallAsync-test.js +0 -42
- package/build/errors/__tests__/wrapNativeRedisCallAsync-test.js.map +0 -1
- package/build/testfixtures/RedisTestEntity.d.ts +0 -16
- package/build/testfixtures/RedisTestEntity.js +0 -49
- package/build/testfixtures/RedisTestEntity.js.map +0 -1
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.d.ts +0 -3
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.js +0 -31
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.js.map +0 -1
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
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
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const entity_1 = require("@expo/entity");
|
|
40
|
-
const ioredis_1 = __importDefault(require("ioredis"));
|
|
41
|
-
const url_1 = require("url");
|
|
42
|
-
const GenericRedisCacher_1 = __importDefault(require("../GenericRedisCacher"));
|
|
43
|
-
const RedisTestEntity_1 = __importStar(require("../testfixtures/RedisTestEntity"));
|
|
44
|
-
const createRedisIntegrationTestEntityCompanionProvider_1 = require("../testfixtures/createRedisIntegrationTestEntityCompanionProvider");
|
|
45
|
-
class TestViewerContext extends entity_1.ViewerContext {
|
|
46
|
-
}
|
|
47
|
-
describe(GenericRedisCacher_1.default, () => {
|
|
48
|
-
let genericRedisCacheContext;
|
|
49
|
-
beforeAll(() => {
|
|
50
|
-
genericRedisCacheContext = {
|
|
51
|
-
redisClient: new ioredis_1.default(new url_1.URL(process.env['REDIS_URL']).toString()),
|
|
52
|
-
makeKeyFn(...parts) {
|
|
53
|
-
const delimiter = ':';
|
|
54
|
-
const escapedParts = parts.map((part) => part.replace('\\', '\\\\').replace(delimiter, `\\${delimiter}`));
|
|
55
|
-
return escapedParts.join(delimiter);
|
|
56
|
-
},
|
|
57
|
-
cacheKeyPrefix: 'test-',
|
|
58
|
-
ttlSecondsPositive: 86400, // 1 day
|
|
59
|
-
ttlSecondsNegative: 600, // 10 minutes
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
|
-
beforeEach(async () => {
|
|
63
|
-
await genericRedisCacheContext.redisClient.flushdb();
|
|
64
|
-
});
|
|
65
|
-
afterAll(async () => {
|
|
66
|
-
genericRedisCacheContext.redisClient.disconnect();
|
|
67
|
-
});
|
|
68
|
-
it('has correct caching and loading behavior', async () => {
|
|
69
|
-
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
70
|
-
const genericRedisCacher = new GenericRedisCacher_1.default(genericRedisCacheContext, RedisTestEntity_1.redisTestEntityConfiguration);
|
|
71
|
-
const date = new Date();
|
|
72
|
-
const entity1Created = await RedisTestEntity_1.default.creator(viewerContext)
|
|
73
|
-
.setField('name', 'blah')
|
|
74
|
-
.setField('dateField', date)
|
|
75
|
-
.createAsync();
|
|
76
|
-
const testKey = `test-id-key-${entity1Created.getID()}`;
|
|
77
|
-
const objectMap = new Map([
|
|
78
|
-
[testKey, entity1Created.getAllFields()],
|
|
79
|
-
]);
|
|
80
|
-
await genericRedisCacher.cacheManyAsync(objectMap);
|
|
81
|
-
const cachedJSON = await genericRedisCacheContext.redisClient.get(testKey);
|
|
82
|
-
const cachedValue = JSON.parse(cachedJSON);
|
|
83
|
-
expect(cachedValue).toMatchObject({
|
|
84
|
-
id: entity1Created.getID(),
|
|
85
|
-
dateField: date.toISOString(),
|
|
86
|
-
});
|
|
87
|
-
const loadedObjectMap = await genericRedisCacher.loadManyAsync([testKey]);
|
|
88
|
-
const cacheLoadResult = loadedObjectMap.get(testKey);
|
|
89
|
-
expect(cacheLoadResult).toMatchObject({
|
|
90
|
-
status: entity_1.CacheStatus.HIT,
|
|
91
|
-
item: entity1Created.getAllFields(),
|
|
92
|
-
});
|
|
93
|
-
expect(loadedObjectMap.size).toBe(1);
|
|
94
|
-
});
|
|
95
|
-
it('has correct negative caching behaviour', async () => {
|
|
96
|
-
const genericRedisCacher = new GenericRedisCacher_1.default(genericRedisCacheContext, RedisTestEntity_1.redisTestEntityConfiguration);
|
|
97
|
-
const testKey = `test-id-key-non-existent-id`;
|
|
98
|
-
await genericRedisCacher.cacheDBMissesAsync([testKey]);
|
|
99
|
-
const loadedObjectMap = await genericRedisCacher.loadManyAsync([testKey]);
|
|
100
|
-
const cacheLoadResult = loadedObjectMap.get(testKey);
|
|
101
|
-
expect(cacheLoadResult.status).toBe(entity_1.CacheStatus.NEGATIVE);
|
|
102
|
-
});
|
|
103
|
-
it('has correct invalidation behaviour', async () => {
|
|
104
|
-
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
105
|
-
const genericRedisCacher = new GenericRedisCacher_1.default(genericRedisCacheContext, RedisTestEntity_1.redisTestEntityConfiguration);
|
|
106
|
-
const date = new Date();
|
|
107
|
-
const entity1Created = await RedisTestEntity_1.default.creator(viewerContext)
|
|
108
|
-
.setField('name', 'blah')
|
|
109
|
-
.setField('dateField', date)
|
|
110
|
-
.createAsync();
|
|
111
|
-
const testKey = `test-id-key-${entity1Created.getID()}`;
|
|
112
|
-
const objectMap = new Map([
|
|
113
|
-
[testKey, entity1Created.getAllFields()],
|
|
114
|
-
]);
|
|
115
|
-
await genericRedisCacher.cacheManyAsync(objectMap);
|
|
116
|
-
await genericRedisCacher.invalidateManyAsync([testKey]);
|
|
117
|
-
const loadedObjectMap = await genericRedisCacher.loadManyAsync([testKey]);
|
|
118
|
-
const cacheLoadResult = loadedObjectMap.get(testKey);
|
|
119
|
-
expect(cacheLoadResult.status).toBe(entity_1.CacheStatus.MISS);
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
//# sourceMappingURL=GenericRedisCacher-integration-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GenericRedisCacher-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/GenericRedisCacher-integration-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,39 +0,0 @@
|
|
|
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 ioredis_1 = __importDefault(require("ioredis"));
|
|
8
|
-
const url_1 = require("url");
|
|
9
|
-
const GenericRedisCacher_1 = __importDefault(require("../GenericRedisCacher"));
|
|
10
|
-
const RedisTestEntity_1 = __importDefault(require("../testfixtures/RedisTestEntity"));
|
|
11
|
-
const createRedisIntegrationTestEntityCompanionProvider_1 = require("../testfixtures/createRedisIntegrationTestEntityCompanionProvider");
|
|
12
|
-
class TestViewerContext extends entity_1.ViewerContext {
|
|
13
|
-
}
|
|
14
|
-
describe(GenericRedisCacher_1.default, () => {
|
|
15
|
-
const redisClient = new ioredis_1.default(new url_1.URL(process.env['REDIS_URL']).toString());
|
|
16
|
-
let genericRedisCacheContext;
|
|
17
|
-
beforeAll(() => {
|
|
18
|
-
genericRedisCacheContext = {
|
|
19
|
-
redisClient,
|
|
20
|
-
makeKeyFn(...parts) {
|
|
21
|
-
const delimiter = ':';
|
|
22
|
-
const escapedParts = parts.map((part) => part.replace('\\', '\\\\').replace(delimiter, `\\${delimiter}`));
|
|
23
|
-
return escapedParts.join(delimiter);
|
|
24
|
-
},
|
|
25
|
-
cacheKeyPrefix: 'test-',
|
|
26
|
-
ttlSecondsPositive: 86400, // 1 day
|
|
27
|
-
ttlSecondsNegative: 600, // 10 minutes
|
|
28
|
-
};
|
|
29
|
-
});
|
|
30
|
-
beforeEach(async () => {
|
|
31
|
-
await redisClient.flushdb();
|
|
32
|
-
});
|
|
33
|
-
it('throws when redis is disconnected', async () => {
|
|
34
|
-
redisClient.disconnect();
|
|
35
|
-
const vc1 = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
36
|
-
await expect(RedisTestEntity_1.default.creator(vc1).setField('name', 'blah').createAsync()).rejects.toThrow(entity_1.EntityCacheAdapterTransientError);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=errors-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,141 +0,0 @@
|
|
|
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 ts_mockito_1 = require("ts-mockito");
|
|
8
|
-
const GenericRedisCacher_1 = __importDefault(require("../GenericRedisCacher"));
|
|
9
|
-
const entityConfiguration = new entity_1.EntityConfiguration({
|
|
10
|
-
idField: 'id',
|
|
11
|
-
tableName: 'blah',
|
|
12
|
-
schema: {
|
|
13
|
-
id: new entity_1.UUIDField({ columnName: 'id', cache: true }),
|
|
14
|
-
},
|
|
15
|
-
databaseAdapterFlavor: 'postgres',
|
|
16
|
-
cacheAdapterFlavor: 'redis',
|
|
17
|
-
});
|
|
18
|
-
describe(GenericRedisCacher_1.default, () => {
|
|
19
|
-
describe('loadManyAsync', () => {
|
|
20
|
-
it('returns appropriate cache results', async () => {
|
|
21
|
-
const redisResults = new Map();
|
|
22
|
-
const mockRedisClient = (0, ts_mockito_1.mock)();
|
|
23
|
-
// need to have one anything() for each element of spread, in this case 3
|
|
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) => redisResults.get(k) ?? null));
|
|
25
|
-
const genericCacher = new GenericRedisCacher_1.default({
|
|
26
|
-
redisClient: (0, ts_mockito_1.instance)(mockRedisClient),
|
|
27
|
-
makeKeyFn: (...parts) => parts.join(':'),
|
|
28
|
-
cacheKeyPrefix: 'hello-',
|
|
29
|
-
ttlSecondsPositive: 1,
|
|
30
|
-
ttlSecondsNegative: 2,
|
|
31
|
-
}, entityConfiguration);
|
|
32
|
-
const cacheKeyWat = genericCacher['makeCacheKey']('id', 'wat');
|
|
33
|
-
const cacheKeyWho = genericCacher['makeCacheKey']('id', 'who');
|
|
34
|
-
const cacheKeyWhy = genericCacher['makeCacheKey']('id', 'why');
|
|
35
|
-
redisResults.set(cacheKeyWat, JSON.stringify({ id: 'wat' }));
|
|
36
|
-
redisResults.set(cacheKeyWho, '');
|
|
37
|
-
const results = await genericCacher.loadManyAsync([cacheKeyWat, cacheKeyWho, cacheKeyWhy]);
|
|
38
|
-
expect(results.get(cacheKeyWat)).toMatchObject({
|
|
39
|
-
status: entity_1.CacheStatus.HIT,
|
|
40
|
-
item: { id: 'wat' },
|
|
41
|
-
});
|
|
42
|
-
expect(results.get(cacheKeyWho)).toMatchObject({ status: entity_1.CacheStatus.NEGATIVE });
|
|
43
|
-
expect(results.get(cacheKeyWhy)).toMatchObject({ status: entity_1.CacheStatus.MISS });
|
|
44
|
-
expect(results.size).toBe(3);
|
|
45
|
-
});
|
|
46
|
-
it('returns empty map when passed empty array of fieldValues', async () => {
|
|
47
|
-
const genericCacher = new GenericRedisCacher_1.default({
|
|
48
|
-
redisClient: (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()),
|
|
49
|
-
makeKeyFn: (...parts) => parts.join(':'),
|
|
50
|
-
cacheKeyPrefix: 'hello-',
|
|
51
|
-
ttlSecondsPositive: 1,
|
|
52
|
-
ttlSecondsNegative: 2,
|
|
53
|
-
}, entityConfiguration);
|
|
54
|
-
const results = await genericCacher.loadManyAsync([]);
|
|
55
|
-
expect(results).toEqual(new Map());
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
describe('cacheManyAsync', () => {
|
|
59
|
-
it('correctly caches all objects', async () => {
|
|
60
|
-
const redisResults = new Map();
|
|
61
|
-
const mockPipeline = (0, ts_mockito_1.mock)();
|
|
62
|
-
(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) => {
|
|
63
|
-
redisResults.set(key, { value, code, ttl });
|
|
64
|
-
return pipeline;
|
|
65
|
-
});
|
|
66
|
-
(0, ts_mockito_1.when)(mockPipeline.exec()).thenResolve({});
|
|
67
|
-
const pipeline = (0, ts_mockito_1.instance)(mockPipeline);
|
|
68
|
-
const mockRedisClient = (0, ts_mockito_1.mock)();
|
|
69
|
-
(0, ts_mockito_1.when)(mockRedisClient.multi()).thenReturn(pipeline);
|
|
70
|
-
const genericCacher = new GenericRedisCacher_1.default({
|
|
71
|
-
redisClient: (0, ts_mockito_1.instance)(mockRedisClient),
|
|
72
|
-
makeKeyFn: (...parts) => parts.join(':'),
|
|
73
|
-
cacheKeyPrefix: 'hello-',
|
|
74
|
-
ttlSecondsPositive: 1,
|
|
75
|
-
ttlSecondsNegative: 2,
|
|
76
|
-
}, entityConfiguration);
|
|
77
|
-
const cacheKey = genericCacher['makeCacheKey']('id', 'wat');
|
|
78
|
-
await genericCacher.cacheManyAsync(new Map([[cacheKey, { id: 'wat' }]]));
|
|
79
|
-
expect(redisResults.get(cacheKey)).toMatchObject({
|
|
80
|
-
value: JSON.stringify({ id: 'wat' }),
|
|
81
|
-
code: 'EX',
|
|
82
|
-
ttl: 1,
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
describe('cacheDBMissesAsync', () => {
|
|
87
|
-
it('correctly caches misses', async () => {
|
|
88
|
-
const redisResults = new Map();
|
|
89
|
-
const mockPipeline = (0, ts_mockito_1.mock)();
|
|
90
|
-
(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) => {
|
|
91
|
-
redisResults.set(key, { value, code, ttl });
|
|
92
|
-
return pipeline;
|
|
93
|
-
});
|
|
94
|
-
(0, ts_mockito_1.when)(mockPipeline.exec()).thenResolve({});
|
|
95
|
-
const pipeline = (0, ts_mockito_1.instance)(mockPipeline);
|
|
96
|
-
const mockRedisClient = (0, ts_mockito_1.mock)();
|
|
97
|
-
(0, ts_mockito_1.when)(mockRedisClient.multi()).thenReturn(pipeline);
|
|
98
|
-
const genericCacher = new GenericRedisCacher_1.default({
|
|
99
|
-
redisClient: (0, ts_mockito_1.instance)(mockRedisClient),
|
|
100
|
-
makeKeyFn: (...parts) => parts.join(':'),
|
|
101
|
-
cacheKeyPrefix: 'hello-',
|
|
102
|
-
ttlSecondsPositive: 1,
|
|
103
|
-
ttlSecondsNegative: 2,
|
|
104
|
-
}, entityConfiguration);
|
|
105
|
-
const cacheKey = genericCacher['makeCacheKey']('id', 'wat');
|
|
106
|
-
await genericCacher.cacheDBMissesAsync([cacheKey]);
|
|
107
|
-
expect(redisResults.get(cacheKey)).toMatchObject({
|
|
108
|
-
value: '',
|
|
109
|
-
code: 'EX',
|
|
110
|
-
ttl: 2,
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
describe('invalidateManyAsync', () => {
|
|
115
|
-
it('invalidates correctly', async () => {
|
|
116
|
-
const mockRedisClient = (0, ts_mockito_1.mock)();
|
|
117
|
-
(0, ts_mockito_1.when)(mockRedisClient.del()).thenResolve(1);
|
|
118
|
-
const genericCacher = new GenericRedisCacher_1.default({
|
|
119
|
-
redisClient: (0, ts_mockito_1.instance)(mockRedisClient),
|
|
120
|
-
makeKeyFn: (...parts) => parts.join(':'),
|
|
121
|
-
cacheKeyPrefix: 'hello-',
|
|
122
|
-
ttlSecondsPositive: 1,
|
|
123
|
-
ttlSecondsNegative: 2,
|
|
124
|
-
}, entityConfiguration);
|
|
125
|
-
const cacheKey = genericCacher['makeCacheKey']('id', 'wat');
|
|
126
|
-
await genericCacher.invalidateManyAsync([cacheKey]);
|
|
127
|
-
(0, ts_mockito_1.verify)(mockRedisClient.del(cacheKey)).once();
|
|
128
|
-
});
|
|
129
|
-
it('returns when passed empty array of fieldValues', async () => {
|
|
130
|
-
const genericCacher = new GenericRedisCacher_1.default({
|
|
131
|
-
redisClient: (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)()),
|
|
132
|
-
makeKeyFn: (...parts) => parts.join(':'),
|
|
133
|
-
cacheKeyPrefix: 'hello-',
|
|
134
|
-
ttlSecondsPositive: 1,
|
|
135
|
-
ttlSecondsNegative: 2,
|
|
136
|
-
}, entityConfiguration);
|
|
137
|
-
await genericCacher.invalidateManyAsync([]);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
//# sourceMappingURL=GenericRedisCacher-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GenericRedisCacher-test.js","sourceRoot":"","sources":["../../src/__tests__/GenericRedisCacher-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,42 +0,0 @@
|
|
|
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/only-throw-error
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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,CAAC;YACH,MAAM,IAAA,kCAAwB,EAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,mBAAmB,GAAG,CAAC,CAAC;QAC1B,CAAC;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,CAAC;YACH,MAAM,IAAA,kCAAwB,EAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,mBAAmB,GAAG,CAAC,CAAC;QAC1B,CAAC;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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { AlwaysAllowPrivacyPolicyRule, EntityPrivacyPolicy, ViewerContext, EntityConfiguration, EntityCompanionDefinition, Entity } from '@expo/entity';
|
|
2
|
-
export type RedisTestEntityFields = {
|
|
3
|
-
id: string;
|
|
4
|
-
name: string;
|
|
5
|
-
dateField: Date | null;
|
|
6
|
-
};
|
|
7
|
-
export default class RedisTestEntity extends Entity<RedisTestEntityFields, string, ViewerContext> {
|
|
8
|
-
static defineCompanionDefinition(): EntityCompanionDefinition<RedisTestEntityFields, string, ViewerContext, RedisTestEntity, RedisTestEntityPrivacyPolicy>;
|
|
9
|
-
}
|
|
10
|
-
export declare class RedisTestEntityPrivacyPolicy extends EntityPrivacyPolicy<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
|
-
}
|
|
16
|
-
export declare const redisTestEntityConfiguration: EntityConfiguration<RedisTestEntityFields>;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.redisTestEntityConfiguration = exports.RedisTestEntityPrivacyPolicy = void 0;
|
|
4
|
-
const entity_1 = require("@expo/entity");
|
|
5
|
-
class RedisTestEntity extends entity_1.Entity {
|
|
6
|
-
static defineCompanionDefinition() {
|
|
7
|
-
return {
|
|
8
|
-
entityClass: RedisTestEntity,
|
|
9
|
-
entityConfiguration: exports.redisTestEntityConfiguration,
|
|
10
|
-
privacyPolicyClass: RedisTestEntityPrivacyPolicy,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.default = RedisTestEntity;
|
|
15
|
-
class RedisTestEntityPrivacyPolicy extends entity_1.EntityPrivacyPolicy {
|
|
16
|
-
createRules = [
|
|
17
|
-
new entity_1.AlwaysAllowPrivacyPolicyRule(),
|
|
18
|
-
];
|
|
19
|
-
readRules = [
|
|
20
|
-
new entity_1.AlwaysAllowPrivacyPolicyRule(),
|
|
21
|
-
];
|
|
22
|
-
updateRules = [
|
|
23
|
-
new entity_1.AlwaysAllowPrivacyPolicyRule(),
|
|
24
|
-
];
|
|
25
|
-
deleteRules = [
|
|
26
|
-
new entity_1.AlwaysAllowPrivacyPolicyRule(),
|
|
27
|
-
];
|
|
28
|
-
}
|
|
29
|
-
exports.RedisTestEntityPrivacyPolicy = RedisTestEntityPrivacyPolicy;
|
|
30
|
-
exports.redisTestEntityConfiguration = new entity_1.EntityConfiguration({
|
|
31
|
-
idField: 'id',
|
|
32
|
-
tableName: 'redis_test_entities',
|
|
33
|
-
schema: {
|
|
34
|
-
id: new entity_1.UUIDField({
|
|
35
|
-
columnName: 'id',
|
|
36
|
-
cache: true,
|
|
37
|
-
}),
|
|
38
|
-
name: new entity_1.StringField({
|
|
39
|
-
columnName: 'name',
|
|
40
|
-
cache: true,
|
|
41
|
-
}),
|
|
42
|
-
dateField: new entity_1.DateField({
|
|
43
|
-
columnName: 'date_field',
|
|
44
|
-
}),
|
|
45
|
-
},
|
|
46
|
-
databaseAdapterFlavor: 'postgres',
|
|
47
|
-
cacheAdapterFlavor: 'redis',
|
|
48
|
-
});
|
|
49
|
-
//# sourceMappingURL=RedisTestEntity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,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;IAC6B,WAAW,GAAG;QACxC,IAAI,qCAA4B,EAK7B;KACJ,CAAC;IAC0B,SAAS,GAAG;QACtC,IAAI,qCAA4B,EAK7B;KACJ,CAAC;IAC0B,WAAW,GAAG;QACxC,IAAI,qCAA4B,EAK7B;KACJ,CAAC;IAC0B,WAAW,GAAG;QACxC,IAAI,qCAA4B,EAK7B;KACJ,CAAC;CACH;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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { IEntityMetricsAdapter, EntityCompanionProvider } from '@expo/entity';
|
|
2
|
-
import { GenericRedisCacheContext } from '../GenericRedisCacher';
|
|
3
|
-
export declare const createRedisIntegrationTestEntityCompanionProvider: (genericRedisCacheContext: GenericRedisCacheContext, metricsAdapter?: IEntityMetricsAdapter) => EntityCompanionProvider;
|
|
@@ -1,31 +0,0 @@
|
|
|
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
|
-
exports.createRedisIntegrationTestEntityCompanionProvider = void 0;
|
|
7
|
-
const entity_1 = require("@expo/entity");
|
|
8
|
-
const RedisCacheAdapterProvider_1 = __importDefault(require("../RedisCacheAdapterProvider"));
|
|
9
|
-
// share across all in calls in test to simulate postgres
|
|
10
|
-
const adapterProvider = new entity_1.StubDatabaseAdapterProvider();
|
|
11
|
-
const queryContextProvider = new entity_1.StubQueryContextProvider();
|
|
12
|
-
const createRedisIntegrationTestEntityCompanionProvider = (genericRedisCacheContext, metricsAdapter = new entity_1.NoOpEntityMetricsAdapter()) => {
|
|
13
|
-
return new entity_1.EntityCompanionProvider(metricsAdapter, new Map([
|
|
14
|
-
[
|
|
15
|
-
'postgres',
|
|
16
|
-
{
|
|
17
|
-
adapterProvider,
|
|
18
|
-
queryContextProvider,
|
|
19
|
-
},
|
|
20
|
-
],
|
|
21
|
-
]), new Map([
|
|
22
|
-
[
|
|
23
|
-
'redis',
|
|
24
|
-
{
|
|
25
|
-
cacheAdapterProvider: new RedisCacheAdapterProvider_1.default(genericRedisCacheContext),
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
]));
|
|
29
|
-
};
|
|
30
|
-
exports.createRedisIntegrationTestEntityCompanionProvider = createRedisIntegrationTestEntityCompanionProvider;
|
|
31
|
-
//# sourceMappingURL=createRedisIntegrationTestEntityCompanionProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|