@expo/entity-secondary-cache-local-memory 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.
@@ -7,6 +7,6 @@ import { LocalMemoryCache } from '@expo/entity-cache-adapter-local-memory';
7
7
  *
8
8
  * TLoadParams must be JSON stringifyable.
9
9
  */
10
- export default class LocalMemorySecondaryEntityCache<TFields extends Record<string, any>, TLoadParams> extends GenericSecondaryEntityCache<TFields, TLoadParams> {
11
- constructor(entityConfiguration: EntityConfiguration<TFields>, localMemoryCache: LocalMemoryCache<TFields>);
10
+ export default class LocalMemorySecondaryEntityCache<TFields extends Record<string, any>, TIDField extends keyof TFields, TLoadParams> extends GenericSecondaryEntityCache<TFields, TIDField, TLoadParams> {
11
+ constructor(entityConfiguration: EntityConfiguration<TFields, TIDField>, localMemoryCache: LocalMemoryCache<TFields>);
12
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LocalMemorySecondaryEntityCache.js","sourceRoot":"","sources":["../src/LocalMemorySecondaryEntityCache.ts"],"names":[],"mappings":";;AAAA,yCAAgF;AAChF,+FAGiD;AAEjD;;;;;;GAMG;AACH,MAAqB,+BAGnB,SAAQ,oCAAiD;IACzD,YACE,mBAAiD,EACjD,gBAA2C;QAE3C,KAAK,CAAC,IAAI,4DAAwB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CACpF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACvB,CAAC;IACJ,CAAC;CACF;AAZD,kDAYC"}
1
+ {"version":3,"file":"LocalMemorySecondaryEntityCache.js","sourceRoot":"","sources":["../src/LocalMemorySecondaryEntityCache.ts"],"names":[],"mappings":";;AAAA,yCAAgF;AAChF,+FAGiD;AAEjD;;;;;;GAMG;AACH,MAAqB,+BAInB,SAAQ,oCAA2D;IACnE,YACE,mBAA2D,EAC3D,gBAA2C;QAE3C,KAAK,CAAC,IAAI,4DAAwB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CACpF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACvB,CAAC;IACJ,CAAC;CACF;AAbD,kDAaC"}
@@ -0,0 +1 @@
1
+ {"root":["../src/localmemorysecondaryentitycache.ts","../src/index.ts"],"version":"5.8.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/entity-secondary-cache-local-memory",
3
- "version": "0.41.0",
3
+ "version": "0.43.0",
4
4
  "description": "Local memory secondary cache for @expo/entity",
5
5
  "files": [
6
6
  "build",
@@ -10,6 +10,7 @@
10
10
  "types": "build/index.d.ts",
11
11
  "scripts": {
12
12
  "tsc": "tsc",
13
+ "build": "tsc -b tsconfig.build.json",
13
14
  "clean": "rm -rf build coverage coverage-integration",
14
15
  "lint": "eslint src",
15
16
  "lint-fix": "eslint src --fix",
@@ -27,11 +28,11 @@
27
28
  "author": "Expo",
28
29
  "license": "MIT",
29
30
  "dependencies": {
30
- "@expo/entity": "^0.41.0",
31
- "@expo/entity-cache-adapter-local-memory": "^0.41.0"
31
+ "@expo/entity": "^0.43.0",
32
+ "@expo/entity-cache-adapter-local-memory": "^0.43.0"
32
33
  },
33
34
  "devDependencies": {
34
- "@types/jest": "^29.5.12",
35
+ "@types/jest": "^29.5.14",
35
36
  "@types/node": "^20.14.1",
36
37
  "ctix": "^2.7.0",
37
38
  "eslint": "^8.57.1",
@@ -41,9 +42,9 @@
41
42
  "nullthrows": "^1.1.1",
42
43
  "prettier": "^3.3.3",
43
44
  "prettier-plugin-organize-imports": "^4.1.0",
44
- "ts-jest": "^29.2.5",
45
+ "ts-jest": "^29.3.1",
45
46
  "ts-mockito": "^2.6.1",
46
- "typescript": "^5.7.3"
47
+ "typescript": "^5.8.3"
47
48
  },
48
- "gitHead": "ee4be736a9a0ba580e9af0194e07c9cd36b1c599"
49
+ "gitHead": "618383027dc76b9250f22d163321ec25e2af0115"
49
50
  }
@@ -13,10 +13,11 @@ import {
13
13
  */
14
14
  export default class LocalMemorySecondaryEntityCache<
15
15
  TFields extends Record<string, any>,
16
+ TIDField extends keyof TFields,
16
17
  TLoadParams,
17
- > extends GenericSecondaryEntityCache<TFields, TLoadParams> {
18
+ > extends GenericSecondaryEntityCache<TFields, TIDField, TLoadParams> {
18
19
  constructor(
19
- entityConfiguration: EntityConfiguration<TFields>,
20
+ entityConfiguration: EntityConfiguration<TFields, TIDField>,
20
21
  localMemoryCache: LocalMemoryCache<TFields>,
21
22
  ) {
22
23
  super(new GenericLocalMemoryCacher(entityConfiguration, localMemoryCache), (params) =>
@@ -5,20 +5,19 @@ import {
5
5
  NoOpEntityMetricsAdapter,
6
6
  IEntityMetricsAdapter,
7
7
  EntityCompanionProvider,
8
- StubQueryContextProvider,
9
- StubDatabaseAdapterProvider,
10
8
  AlwaysAllowPrivacyPolicyRule,
11
9
  EntityPrivacyPolicy,
12
- UUIDField,
13
10
  StringField,
14
11
  EntityConfiguration,
15
12
  EntityCompanionDefinition,
16
13
  Entity,
14
+ UUIDField,
17
15
  } from '@expo/entity';
18
16
  import {
19
17
  GenericLocalMemoryCacher,
20
18
  LocalMemoryCacheAdapterProvider,
21
19
  } from '@expo/entity-cache-adapter-local-memory';
20
+ import { StubQueryContextProvider, StubDatabaseAdapterProvider } from '@expo/entity-testing-utils';
22
21
  import nullthrows from 'nullthrows';
23
22
 
24
23
  import LocalMemorySecondaryEntityCache from '../LocalMemorySecondaryEntityCache';
@@ -30,12 +29,12 @@ export type LocalMemoryTestEntityFields = {
30
29
 
31
30
  export default class LocalMemoryTestEntity extends Entity<
32
31
  LocalMemoryTestEntityFields,
33
- string,
32
+ 'id',
34
33
  ViewerContext
35
34
  > {
36
35
  static defineCompanionDefinition(): EntityCompanionDefinition<
37
36
  LocalMemoryTestEntityFields,
38
- string,
37
+ 'id',
39
38
  ViewerContext,
40
39
  LocalMemoryTestEntity,
41
40
  LocalMemoryTestEntityPrivacyPolicy
@@ -50,14 +49,14 @@ export default class LocalMemoryTestEntity extends Entity<
50
49
 
51
50
  export class LocalMemoryTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
52
51
  LocalMemoryTestEntityFields,
53
- string,
52
+ 'id',
54
53
  ViewerContext,
55
54
  LocalMemoryTestEntity
56
55
  > {
57
56
  protected override readonly createRules = [
58
57
  new AlwaysAllowPrivacyPolicyRule<
59
58
  LocalMemoryTestEntityFields,
60
- string,
59
+ 'id',
61
60
  ViewerContext,
62
61
  LocalMemoryTestEntity
63
62
  >(),
@@ -65,7 +64,7 @@ export class LocalMemoryTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
65
64
  protected override readonly readRules = [
66
65
  new AlwaysAllowPrivacyPolicyRule<
67
66
  LocalMemoryTestEntityFields,
68
- string,
67
+ 'id',
69
68
  ViewerContext,
70
69
  LocalMemoryTestEntity
71
70
  >(),
@@ -73,7 +72,7 @@ export class LocalMemoryTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
73
72
  protected override readonly updateRules = [
74
73
  new AlwaysAllowPrivacyPolicyRule<
75
74
  LocalMemoryTestEntityFields,
76
- string,
75
+ 'id',
77
76
  ViewerContext,
78
77
  LocalMemoryTestEntity
79
78
  >(),
@@ -81,28 +80,31 @@ export class LocalMemoryTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
81
80
  protected override readonly deleteRules = [
82
81
  new AlwaysAllowPrivacyPolicyRule<
83
82
  LocalMemoryTestEntityFields,
84
- string,
83
+ 'id',
85
84
  ViewerContext,
86
85
  LocalMemoryTestEntity
87
86
  >(),
88
87
  ];
89
88
  }
90
89
 
91
- export const localMemoryTestEntityConfiguration =
92
- new EntityConfiguration<LocalMemoryTestEntityFields>({
93
- idField: 'id',
94
- tableName: 'local_memory_test_entities',
95
- schema: {
96
- id: new UUIDField({
97
- columnName: 'id',
98
- }),
99
- name: new StringField({
100
- columnName: 'name',
101
- }),
102
- },
103
- databaseAdapterFlavor: 'postgres',
104
- cacheAdapterFlavor: 'local-memory',
105
- });
90
+ export const localMemoryTestEntityConfiguration = new EntityConfiguration<
91
+ LocalMemoryTestEntityFields,
92
+ 'id'
93
+ >({
94
+ idField: 'id',
95
+ tableName: 'local_memory_test_entities',
96
+ schema: {
97
+ id: new UUIDField({
98
+ columnName: 'id',
99
+ cache: false,
100
+ }),
101
+ name: new StringField({
102
+ columnName: 'name',
103
+ }),
104
+ },
105
+ databaseAdapterFlavor: 'postgres',
106
+ cacheAdapterFlavor: 'local-memory',
107
+ });
106
108
 
107
109
  const queryContextProvider = new StubQueryContextProvider();
108
110
 
@@ -140,7 +142,7 @@ const FAKE_ID = 'fake';
140
142
  class TestSecondaryLocalMemoryCacheLoader extends EntitySecondaryCacheLoader<
141
143
  TestLoadParams,
142
144
  LocalMemoryTestEntityFields,
143
- string,
145
+ 'id',
144
146
  TestViewerContext,
145
147
  LocalMemoryTestEntity,
146
148
  LocalMemoryTestEntityPrivacyPolicy
@@ -1,16 +0,0 @@
1
- import { ViewerContext, IEntityMetricsAdapter, EntityCompanionProvider, AlwaysAllowPrivacyPolicyRule, EntityPrivacyPolicy, EntityConfiguration, EntityCompanionDefinition, Entity } from '@expo/entity';
2
- export type LocalMemoryTestEntityFields = {
3
- id: string;
4
- name: string;
5
- };
6
- export default class LocalMemoryTestEntity extends Entity<LocalMemoryTestEntityFields, string, ViewerContext> {
7
- static defineCompanionDefinition(): EntityCompanionDefinition<LocalMemoryTestEntityFields, string, ViewerContext, LocalMemoryTestEntity, LocalMemoryTestEntityPrivacyPolicy>;
8
- }
9
- export declare class LocalMemoryTestEntityPrivacyPolicy extends EntityPrivacyPolicy<LocalMemoryTestEntityFields, string, ViewerContext, LocalMemoryTestEntity> {
10
- protected readonly createRules: AlwaysAllowPrivacyPolicyRule<LocalMemoryTestEntityFields, string, ViewerContext, LocalMemoryTestEntity, keyof LocalMemoryTestEntityFields>[];
11
- protected readonly readRules: AlwaysAllowPrivacyPolicyRule<LocalMemoryTestEntityFields, string, ViewerContext, LocalMemoryTestEntity, keyof LocalMemoryTestEntityFields>[];
12
- protected readonly updateRules: AlwaysAllowPrivacyPolicyRule<LocalMemoryTestEntityFields, string, ViewerContext, LocalMemoryTestEntity, keyof LocalMemoryTestEntityFields>[];
13
- protected readonly deleteRules: AlwaysAllowPrivacyPolicyRule<LocalMemoryTestEntityFields, string, ViewerContext, LocalMemoryTestEntity, keyof LocalMemoryTestEntityFields>[];
14
- }
15
- export declare const localMemoryTestEntityConfiguration: EntityConfiguration<LocalMemoryTestEntityFields>;
16
- export declare const createTestEntityCompanionProvider: (metricsAdapter?: IEntityMetricsAdapter) => EntityCompanionProvider;
@@ -1,118 +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.createTestEntityCompanionProvider = exports.localMemoryTestEntityConfiguration = exports.LocalMemoryTestEntityPrivacyPolicy = void 0;
7
- const entity_1 = require("@expo/entity");
8
- const entity_cache_adapter_local_memory_1 = require("@expo/entity-cache-adapter-local-memory");
9
- const nullthrows_1 = __importDefault(require("nullthrows"));
10
- const LocalMemorySecondaryEntityCache_1 = __importDefault(require("../LocalMemorySecondaryEntityCache"));
11
- class LocalMemoryTestEntity extends entity_1.Entity {
12
- static defineCompanionDefinition() {
13
- return {
14
- entityClass: LocalMemoryTestEntity,
15
- entityConfiguration: exports.localMemoryTestEntityConfiguration,
16
- privacyPolicyClass: LocalMemoryTestEntityPrivacyPolicy,
17
- };
18
- }
19
- }
20
- exports.default = LocalMemoryTestEntity;
21
- class LocalMemoryTestEntityPrivacyPolicy extends entity_1.EntityPrivacyPolicy {
22
- createRules = [
23
- new entity_1.AlwaysAllowPrivacyPolicyRule(),
24
- ];
25
- readRules = [
26
- new entity_1.AlwaysAllowPrivacyPolicyRule(),
27
- ];
28
- updateRules = [
29
- new entity_1.AlwaysAllowPrivacyPolicyRule(),
30
- ];
31
- deleteRules = [
32
- new entity_1.AlwaysAllowPrivacyPolicyRule(),
33
- ];
34
- }
35
- exports.LocalMemoryTestEntityPrivacyPolicy = LocalMemoryTestEntityPrivacyPolicy;
36
- exports.localMemoryTestEntityConfiguration = new entity_1.EntityConfiguration({
37
- idField: 'id',
38
- tableName: 'local_memory_test_entities',
39
- schema: {
40
- id: new entity_1.UUIDField({
41
- columnName: 'id',
42
- }),
43
- name: new entity_1.StringField({
44
- columnName: 'name',
45
- }),
46
- },
47
- databaseAdapterFlavor: 'postgres',
48
- cacheAdapterFlavor: 'local-memory',
49
- });
50
- const queryContextProvider = new entity_1.StubQueryContextProvider();
51
- const createTestEntityCompanionProvider = (metricsAdapter = new entity_1.NoOpEntityMetricsAdapter()) => {
52
- return new entity_1.EntityCompanionProvider(metricsAdapter, new Map([
53
- [
54
- 'postgres',
55
- {
56
- adapterProvider: new entity_1.StubDatabaseAdapterProvider(),
57
- queryContextProvider,
58
- },
59
- ],
60
- ]), new Map([
61
- [
62
- 'local-memory',
63
- {
64
- cacheAdapterProvider: entity_cache_adapter_local_memory_1.LocalMemoryCacheAdapterProvider.createProviderWithOptions(),
65
- },
66
- ],
67
- ]));
68
- };
69
- exports.createTestEntityCompanionProvider = createTestEntityCompanionProvider;
70
- class TestViewerContext extends entity_1.ViewerContext {
71
- }
72
- const FAKE_ID = 'fake';
73
- class TestSecondaryLocalMemoryCacheLoader extends entity_1.EntitySecondaryCacheLoader {
74
- databaseLoadCount = 0;
75
- async fetchObjectsFromDatabaseAsync(loadParamsArray) {
76
- this.databaseLoadCount += loadParamsArray.length;
77
- const emptyMap = new Map(loadParamsArray.map((p) => [p, null]));
78
- return await (0, entity_1.mapMapAsync)(emptyMap, async (_value, loadParams) => {
79
- if (loadParams.id === FAKE_ID) {
80
- return null;
81
- }
82
- return (0, nullthrows_1.default)((await this.entityLoader.loadManyByFieldEqualityConjunctionAsync([
83
- { fieldName: 'id', fieldValue: loadParams.id },
84
- ]))[0])
85
- .enforceValue()
86
- .getAllFields();
87
- });
88
- }
89
- }
90
- describe(LocalMemorySecondaryEntityCache_1.default, () => {
91
- it('Loads through secondary loader, caches, and invalidates', async () => {
92
- const viewerContext = new TestViewerContext((0, exports.createTestEntityCompanionProvider)());
93
- const createdEntity = await LocalMemoryTestEntity.creator(viewerContext)
94
- .setField('name', 'wat')
95
- .createAsync();
96
- const secondaryCacheLoader = new TestSecondaryLocalMemoryCacheLoader(new LocalMemorySecondaryEntityCache_1.default(exports.localMemoryTestEntityConfiguration, entity_cache_adapter_local_memory_1.GenericLocalMemoryCacher.createLRUCache({})), LocalMemoryTestEntity.loaderWithAuthorizationResults(viewerContext));
97
- const loadParams = { id: createdEntity.getID() };
98
- const results = await secondaryCacheLoader.loadManyAsync([loadParams]);
99
- expect((0, nullthrows_1.default)(results.get(loadParams)).enforceValue().getID()).toEqual(createdEntity.getID());
100
- expect(secondaryCacheLoader.databaseLoadCount).toEqual(1);
101
- const results2 = await secondaryCacheLoader.loadManyAsync([loadParams]);
102
- expect((0, nullthrows_1.default)(results2.get(loadParams)).enforceValue().getID()).toEqual(createdEntity.getID());
103
- expect(secondaryCacheLoader.databaseLoadCount).toEqual(1);
104
- await secondaryCacheLoader.invalidateManyAsync([loadParams]);
105
- const results3 = await secondaryCacheLoader.loadManyAsync([loadParams]);
106
- expect((0, nullthrows_1.default)(results3.get(loadParams)).enforceValue().getID()).toEqual(createdEntity.getID());
107
- expect(secondaryCacheLoader.databaseLoadCount).toEqual(2);
108
- });
109
- it('correctly handles uncached and unfetchable load params', async () => {
110
- const viewerContext = new TestViewerContext((0, exports.createTestEntityCompanionProvider)());
111
- const secondaryCacheLoader = new TestSecondaryLocalMemoryCacheLoader(new LocalMemorySecondaryEntityCache_1.default(exports.localMemoryTestEntityConfiguration, entity_cache_adapter_local_memory_1.GenericLocalMemoryCacher.createLRUCache({})), LocalMemoryTestEntity.loaderWithAuthorizationResults(viewerContext));
112
- const loadParams = { id: FAKE_ID };
113
- const results = await secondaryCacheLoader.loadManyAsync([loadParams]);
114
- expect(results.size).toBe(1);
115
- expect(results.get(loadParams)).toBe(null);
116
- });
117
- });
118
- //# sourceMappingURL=LocalMemorySecondaryEntityCache-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LocalMemorySecondaryEntityCache-test.js","sourceRoot":"","sources":["../../src/__tests__/LocalMemorySecondaryEntityCache-test.ts"],"names":[],"mappings":"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"}