@expo/entity-secondary-cache-redis 0.39.0 → 0.40.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__/RedisSecondaryEntityCache-integration-test.js +25 -14
- package/build/__integration-tests__/RedisSecondaryEntityCache-integration-test.js.map +1 -1
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.js +2 -1
- package/build/testfixtures/createRedisIntegrationTestEntityCompanionProvider.js.map +1 -1
- package/package.json +20 -10
- package/src/__integration-tests__/RedisSecondaryEntityCache-integration-test.ts +10 -9
- package/src/testfixtures/createRedisIntegrationTestEntityCompanionProvider.ts +3 -1
|
@@ -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
|
};
|
|
@@ -45,11 +55,11 @@ class TestSecondaryRedisCacheLoader extends entity_1.EntitySecondaryCacheLoader
|
|
|
45
55
|
if (loadParams.id === FAKE_ID) {
|
|
46
56
|
return null;
|
|
47
57
|
}
|
|
48
|
-
return (0, nullthrows_1.default)((await this.entityLoader
|
|
49
|
-
.enforcing()
|
|
50
|
-
.loadManyByFieldEqualityConjunctionAsync([
|
|
58
|
+
return (0, nullthrows_1.default)((await this.entityLoader.loadManyByFieldEqualityConjunctionAsync([
|
|
51
59
|
{ fieldName: 'id', fieldValue: loadParams.id },
|
|
52
|
-
]))[0])
|
|
60
|
+
]))[0])
|
|
61
|
+
.enforceValue()
|
|
62
|
+
.getAllFields();
|
|
53
63
|
});
|
|
54
64
|
}
|
|
55
65
|
}
|
|
@@ -76,9 +86,10 @@ describe(RedisSecondaryEntityCache_1.default, () => {
|
|
|
76
86
|
it('Loads through secondary loader, caches, and invalidates', async () => {
|
|
77
87
|
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
78
88
|
const createdEntity = await RedisTestEntity_1.default.creator(viewerContext)
|
|
89
|
+
.enforcing()
|
|
79
90
|
.setField('name', 'wat')
|
|
80
|
-
.
|
|
81
|
-
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(new RedisSecondaryEntityCache_1.default(RedisTestEntity_1.redisTestEntityConfiguration, genericRedisCacheContext, (loadParams) => `test-key-${loadParams.id}`), RedisTestEntity_1.default.loader(viewerContext));
|
|
91
|
+
.createAsync();
|
|
92
|
+
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(new RedisSecondaryEntityCache_1.default(RedisTestEntity_1.redisTestEntityConfiguration, genericRedisCacheContext, (loadParams) => `test-key-${loadParams.id}`), RedisTestEntity_1.default.loader(viewerContext).withAuthorizationResults());
|
|
82
93
|
const loadParams = { id: createdEntity.getID() };
|
|
83
94
|
const results = await secondaryCacheLoader.loadManyAsync([loadParams]);
|
|
84
95
|
expect((0, nullthrows_1.default)(results.get(loadParams)).enforceValue().getID()).toEqual(createdEntity.getID());
|
|
@@ -93,7 +104,7 @@ describe(RedisSecondaryEntityCache_1.default, () => {
|
|
|
93
104
|
});
|
|
94
105
|
it('correctly handles uncached and unfetchable load params', async () => {
|
|
95
106
|
const viewerContext = new TestViewerContext((0, createRedisIntegrationTestEntityCompanionProvider_1.createRedisIntegrationTestEntityCompanionProvider)(genericRedisCacheContext));
|
|
96
|
-
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(new RedisSecondaryEntityCache_1.default(RedisTestEntity_1.redisTestEntityConfiguration, genericRedisCacheContext, (loadParams) => `test-key-${loadParams.id}`), RedisTestEntity_1.default.loader(viewerContext));
|
|
107
|
+
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(new RedisSecondaryEntityCache_1.default(RedisTestEntity_1.redisTestEntityConfiguration, genericRedisCacheContext, (loadParams) => `test-key-${loadParams.id}`), RedisTestEntity_1.default.loader(viewerContext).withAuthorizationResults());
|
|
97
108
|
const loadParams = { id: FAKE_ID };
|
|
98
109
|
const results = await secondaryCacheLoader.loadManyAsync([loadParams]);
|
|
99
110
|
expect(results.size).toBe(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisSecondaryEntityCache-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/RedisSecondaryEntityCache-integration-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RedisSecondaryEntityCache-integration-test.js","sourceRoot":"","sources":["../../src/__integration-tests__/RedisSecondaryEntityCache-integration-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createRedisIntegrationTestEntityCompanionProvider = void 0;
|
|
4
4
|
const entity_1 = require("@expo/entity");
|
|
5
5
|
const entity_cache_adapter_redis_1 = require("@expo/entity-cache-adapter-redis");
|
|
6
|
+
const queryContextProvider = new entity_1.StubQueryContextProvider();
|
|
6
7
|
const createRedisIntegrationTestEntityCompanionProvider = (genericRedisCacheContext, metricsAdapter = new entity_1.NoOpEntityMetricsAdapter()) => {
|
|
7
8
|
return new entity_1.EntityCompanionProvider(metricsAdapter, new Map([
|
|
8
9
|
[
|
|
9
10
|
'postgres',
|
|
10
11
|
{
|
|
11
12
|
adapterProvider: new entity_1.StubDatabaseAdapterProvider(),
|
|
12
|
-
queryContextProvider
|
|
13
|
+
queryContextProvider,
|
|
13
14
|
},
|
|
14
15
|
],
|
|
15
16
|
]), new Map([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRedisIntegrationTestEntityCompanionProvider.js","sourceRoot":"","sources":["../../src/testfixtures/createRedisIntegrationTestEntityCompanionProvider.ts"],"names":[],"mappings":";;;AAAA,yCAMsB;AACtB,iFAG0C;
|
|
1
|
+
{"version":3,"file":"createRedisIntegrationTestEntityCompanionProvider.js","sourceRoot":"","sources":["../../src/testfixtures/createRedisIntegrationTestEntityCompanionProvider.ts"],"names":[],"mappings":";;;AAAA,yCAMsB;AACtB,iFAG0C;AAE1C,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,EAAE,IAAI,oCAA2B,EAAE;gBAClD,oBAAoB;aACrB;SACF;KACF,CAAC,EACF,IAAI,GAAG,CAAC;QACN;YACE,OAAO;YACP;gBACE,oBAAoB,EAAE,IAAI,sDAAyB,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-secondary-cache-redis",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.0",
|
|
4
4
|
"description": "Redis secondary cache for @expo/entity",
|
|
5
5
|
"files": [
|
|
6
6
|
"build",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"test": "jest --rootDir . --config ../../resources/jest.config.js --passWithNoTests",
|
|
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-secondary-cache-redis'"
|
|
20
20
|
},
|
|
21
21
|
"engines": {
|
|
22
22
|
"node": ">=16"
|
|
@@ -26,15 +26,25 @@
|
|
|
26
26
|
],
|
|
27
27
|
"author": "Expo",
|
|
28
28
|
"license": "MIT",
|
|
29
|
-
"
|
|
30
|
-
"@expo/entity": "
|
|
31
|
-
"@expo/entity-cache-adapter-redis": "
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@expo/entity": "^0.40.0",
|
|
31
|
+
"@expo/entity-cache-adapter-redis": "^0.40.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@
|
|
35
|
-
"@
|
|
36
|
-
"
|
|
37
|
-
"
|
|
34
|
+
"@types/jest": "^29.5.12",
|
|
35
|
+
"@types/node": "^20.14.1",
|
|
36
|
+
"ctix": "^2.7.0",
|
|
37
|
+
"eslint": "^8.57.1",
|
|
38
|
+
"eslint-config-universe": "^14.0.0",
|
|
39
|
+
"eslint-plugin-tsdoc": "^0.3.0",
|
|
40
|
+
"ioredis": "^5.4.1",
|
|
41
|
+
"jest": "^29.7.0",
|
|
42
|
+
"nullthrows": "^1.1.1",
|
|
43
|
+
"prettier": "^3.3.3",
|
|
44
|
+
"prettier-plugin-organize-imports": "^4.1.0",
|
|
45
|
+
"ts-jest": "^29.2.5",
|
|
46
|
+
"ts-mockito": "^2.6.1",
|
|
47
|
+
"typescript": "^5.7.3"
|
|
38
48
|
},
|
|
39
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "74c396255c8177a87cf80da2608072f5989dd519"
|
|
40
50
|
}
|
|
@@ -40,13 +40,13 @@ class TestSecondaryRedisCacheLoader extends EntitySecondaryCacheLoader<
|
|
|
40
40
|
}
|
|
41
41
|
return nullthrows(
|
|
42
42
|
(
|
|
43
|
-
await this.entityLoader
|
|
44
|
-
.
|
|
45
|
-
|
|
46
|
-
{ fieldName: 'id', fieldValue: loadParams.id },
|
|
47
|
-
])
|
|
43
|
+
await this.entityLoader.loadManyByFieldEqualityConjunctionAsync([
|
|
44
|
+
{ fieldName: 'id', fieldValue: loadParams.id },
|
|
45
|
+
])
|
|
48
46
|
)[0],
|
|
49
|
-
)
|
|
47
|
+
)
|
|
48
|
+
.enforceValue()
|
|
49
|
+
.getAllFields();
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -80,8 +80,9 @@ describe(RedisSecondaryEntityCache, () => {
|
|
|
80
80
|
);
|
|
81
81
|
|
|
82
82
|
const createdEntity = await RedisTestEntity.creator(viewerContext)
|
|
83
|
+
.enforcing()
|
|
83
84
|
.setField('name', 'wat')
|
|
84
|
-
.
|
|
85
|
+
.createAsync();
|
|
85
86
|
|
|
86
87
|
const secondaryCacheLoader = new TestSecondaryRedisCacheLoader(
|
|
87
88
|
new RedisSecondaryEntityCache(
|
|
@@ -89,7 +90,7 @@ describe(RedisSecondaryEntityCache, () => {
|
|
|
89
90
|
genericRedisCacheContext,
|
|
90
91
|
(loadParams) => `test-key-${loadParams.id}`,
|
|
91
92
|
),
|
|
92
|
-
RedisTestEntity.loader(viewerContext),
|
|
93
|
+
RedisTestEntity.loader(viewerContext).withAuthorizationResults(),
|
|
93
94
|
);
|
|
94
95
|
|
|
95
96
|
const loadParams = { id: createdEntity.getID() };
|
|
@@ -128,7 +129,7 @@ describe(RedisSecondaryEntityCache, () => {
|
|
|
128
129
|
genericRedisCacheContext,
|
|
129
130
|
(loadParams) => `test-key-${loadParams.id}`,
|
|
130
131
|
),
|
|
131
|
-
RedisTestEntity.loader(viewerContext),
|
|
132
|
+
RedisTestEntity.loader(viewerContext).withAuthorizationResults(),
|
|
132
133
|
);
|
|
133
134
|
|
|
134
135
|
const loadParams = { id: FAKE_ID };
|
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
RedisCacheAdapterProvider,
|
|
11
11
|
} from '@expo/entity-cache-adapter-redis';
|
|
12
12
|
|
|
13
|
+
const queryContextProvider = new StubQueryContextProvider();
|
|
14
|
+
|
|
13
15
|
export const createRedisIntegrationTestEntityCompanionProvider = (
|
|
14
16
|
genericRedisCacheContext: GenericRedisCacheContext,
|
|
15
17
|
metricsAdapter: IEntityMetricsAdapter = new NoOpEntityMetricsAdapter(),
|
|
@@ -21,7 +23,7 @@ export const createRedisIntegrationTestEntityCompanionProvider = (
|
|
|
21
23
|
'postgres',
|
|
22
24
|
{
|
|
23
25
|
adapterProvider: new StubDatabaseAdapterProvider(),
|
|
24
|
-
queryContextProvider
|
|
26
|
+
queryContextProvider,
|
|
25
27
|
},
|
|
26
28
|
],
|
|
27
29
|
]),
|