@expo/entity 0.26.0 → 0.26.1

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.
@@ -1,15 +1,17 @@
1
1
  import EntityCacheAdapter from './EntityCacheAdapter';
2
2
  import EntityConfiguration from './EntityConfiguration';
3
3
  import { CacheLoadResult } from './internal/ReadThroughEntityCache';
4
+ /**
5
+ * A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
6
+ */
4
7
  export default class ComposedEntityCacheAdapter<TFields> extends EntityCacheAdapter<TFields> {
5
8
  private readonly cacheAdapters;
6
9
  /**
7
- * A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
8
- *
9
10
  * @param entityConfiguration - configuration for entity being loaded
10
11
  * @param cacheAdapters - list of cache adapters to compose in order of precedence.
11
12
  * Earlier cache adapters are read from first and written to (including invalidations) last.
12
13
  * Typically, caches closer to the application should be ordered before caches closer to the database.
14
+ * A lower layer cache is closer to the database, while a higher layer cache is closer to the application.
13
15
  */
14
16
  constructor(entityConfiguration: EntityConfiguration<TFields>, cacheAdapters: EntityCacheAdapter<TFields>[]);
15
17
  loadManyAsync<N extends keyof TFields>(fieldName: N, fieldValues: readonly NonNullable<TFields[N]>[]): Promise<ReadonlyMap<NonNullable<TFields[N]>, CacheLoadResult<TFields>>>;
@@ -6,14 +6,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const nullthrows_1 = __importDefault(require("nullthrows"));
7
7
  const EntityCacheAdapter_1 = __importDefault(require("./EntityCacheAdapter"));
8
8
  const ReadThroughEntityCache_1 = require("./internal/ReadThroughEntityCache");
9
+ /**
10
+ * A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
11
+ */
9
12
  class ComposedEntityCacheAdapter extends EntityCacheAdapter_1.default {
10
13
  /**
11
- * A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
12
- *
13
14
  * @param entityConfiguration - configuration for entity being loaded
14
15
  * @param cacheAdapters - list of cache adapters to compose in order of precedence.
15
16
  * Earlier cache adapters are read from first and written to (including invalidations) last.
16
17
  * Typically, caches closer to the application should be ordered before caches closer to the database.
18
+ * A lower layer cache is closer to the database, while a higher layer cache is closer to the application.
17
19
  */
18
20
  constructor(entityConfiguration, cacheAdapters) {
19
21
  super(entityConfiguration);
@@ -21,8 +23,10 @@ class ComposedEntityCacheAdapter extends EntityCacheAdapter_1.default {
21
23
  }
22
24
  async loadManyAsync(fieldName, fieldValues) {
23
25
  const retMap = new Map();
26
+ const fulfilledFieldValuesByCacheIndex = Array.from({ length: this.cacheAdapters.length }, () => []);
24
27
  let unfulfilledFieldValues = fieldValues;
25
- for (const cacheAdapter of this.cacheAdapters) {
28
+ for (let i = 0; i < this.cacheAdapters.length; i++) {
29
+ const cacheAdapter = (0, nullthrows_1.default)(this.cacheAdapters[i]);
26
30
  const cacheResultsFromAdapter = await cacheAdapter.loadManyAsync(fieldName, unfulfilledFieldValues);
27
31
  const newUnfulfilledFieldValues = [];
28
32
  for (const [fieldValue, cacheResult] of cacheResultsFromAdapter) {
@@ -31,9 +35,41 @@ class ComposedEntityCacheAdapter extends EntityCacheAdapter_1.default {
31
35
  }
32
36
  else {
33
37
  retMap.set(fieldValue, cacheResult);
38
+ (0, nullthrows_1.default)(fulfilledFieldValuesByCacheIndex[i]).push(fieldValue);
34
39
  }
35
40
  }
36
41
  unfulfilledFieldValues = newUnfulfilledFieldValues;
42
+ if (unfulfilledFieldValues.length === 0) {
43
+ break;
44
+ }
45
+ }
46
+ // Recache values from lower layers that were not found in higher layers
47
+ // Write to lower layers first
48
+ for (let i = this.cacheAdapters.length - 1; i >= 0; i--) {
49
+ const cacheAdapter = (0, nullthrows_1.default)(this.cacheAdapters[i]);
50
+ const hitsToCache = new Map();
51
+ const negativesToCache = [];
52
+ // Loop over all lower layer caches to collect hits and misses
53
+ for (let j = i + 1; j < this.cacheAdapters.length; j++) {
54
+ const fulfilledFieldValues = (0, nullthrows_1.default)(fulfilledFieldValuesByCacheIndex[j]);
55
+ fulfilledFieldValues.forEach((fieldValue) => {
56
+ const cacheResult = (0, nullthrows_1.default)(retMap.get(fieldValue));
57
+ if (cacheResult.status === ReadThroughEntityCache_1.CacheStatus.HIT) {
58
+ hitsToCache.set(fieldValue, cacheResult.item);
59
+ }
60
+ else if (cacheResult.status === ReadThroughEntityCache_1.CacheStatus.NEGATIVE) {
61
+ negativesToCache.push(fieldValue);
62
+ }
63
+ });
64
+ }
65
+ const promises = [];
66
+ if (hitsToCache.size > 0) {
67
+ promises.push(cacheAdapter.cacheManyAsync(fieldName, hitsToCache));
68
+ }
69
+ if (negativesToCache.length > 0) {
70
+ promises.push(cacheAdapter.cacheDBMissesAsync(fieldName, negativesToCache));
71
+ }
72
+ await Promise.all(promises);
37
73
  }
38
74
  for (const fieldValue of unfulfilledFieldValues) {
39
75
  retMap.set(fieldValue, { status: ReadThroughEntityCache_1.CacheStatus.MISS });
@@ -1 +1 @@
1
- {"version":3,"file":"ComposedEntityCacheAdapter.js","sourceRoot":"","sources":["../src/ComposedEntityCacheAdapter.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAEpC,8EAAsD;AAEtD,8EAAiF;AAEjF,MAAqB,0BAAoC,SAAQ,4BAA2B;IAC1F;;;;;;;OAOG;IACH,YACE,mBAAiD,EAChC,aAA4C;QAE7D,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAFV,kBAAa,GAAb,aAAa,CAA+B;IAG/D,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,SAAY,EACZ,WAA+C;QAE/C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqD,CAAC;QAE5E,IAAI,sBAAsB,GAAG,WAAW,CAAC;QACzC,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;YAC7C,MAAM,uBAAuB,GAAG,MAAM,YAAY,CAAC,aAAa,CAC9D,SAAS,EACT,sBAAsB,CACvB,CAAC;YAEF,MAAM,yBAAyB,GAAG,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,uBAAuB,EAAE;gBAC/D,IAAI,WAAW,CAAC,MAAM,KAAK,oCAAW,CAAC,IAAI,EAAE;oBAC3C,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC5C;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;iBACrC;aACF;YACD,sBAAsB,GAAG,yBAAyB,CAAC;SACpD;QAED,KAAK,MAAM,UAAU,IAAI,sBAAsB,EAAE;YAC/C,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,oCAAW,CAAC,IAAI,EAAE,CAAC,CAAC;SACtD;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,SAAY,EACZ,SAAkE;QAElE,8BAA8B;QAC9B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,YAAY,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SACzD;IACH,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAC7B,SAAY,EACZ,WAA+C;QAE/C,8BAA8B;QAC9B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,YAAY,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,YAAY,CAAC,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;SAC/D;IACH,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC9B,SAAY,EACZ,WAA+C;QAE/C,iCAAiC;QACjC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,YAAY,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,YAAY,CAAC,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;SAChE;IACH,CAAC;CACF;AA/ED,6CA+EC"}
1
+ {"version":3,"file":"ComposedEntityCacheAdapter.js","sourceRoot":"","sources":["../src/ComposedEntityCacheAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { ISecondaryEntityCache } from './EntitySecondaryCacheLoader';
2
+ /**
3
+ * A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
4
+ */
2
5
  export default class ComposedSecondaryEntityCache<TLoadParams, TFields> implements ISecondaryEntityCache<TFields, TLoadParams> {
3
6
  private readonly secondaryEntityCaches;
4
7
  /**
5
- * A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
6
- *
7
8
  * @param secondaryEntityCaches - list of caches to compose in order of precedence.
8
9
  * Earlier caches are read from first and written to (including invalidations) last.
9
10
  * Typically, caches closer to the application should be ordered before caches closer to the database.
@@ -4,10 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const nullthrows_1 = __importDefault(require("nullthrows"));
7
+ /**
8
+ * A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
9
+ */
7
10
  class ComposedSecondaryEntityCache {
8
11
  /**
9
- * A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
10
- *
11
12
  * @param secondaryEntityCaches - list of caches to compose in order of precedence.
12
13
  * Earlier caches are read from first and written to (including invalidations) last.
13
14
  * Typically, caches closer to the application should be ordered before caches closer to the database.
@@ -1 +1 @@
1
- {"version":3,"file":"ComposedSecondaryEntityCache.js","sourceRoot":"","sources":["../src/ComposedSecondaryEntityCache.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAIpC,MAAqB,4BAA4B;IAG/C;;;;;;OAMG;IACH,YACmB,qBAAoE;QAApE,0BAAqB,GAArB,qBAAqB,CAA+C;IACpF,CAAC;IAEJ,KAAK,CAAC,oBAAoB,CACxB,eAAiD,EACjD,OAE0E;QAE1E,OAAO,MAAM,4BAA4B,CAAC,+BAA+B,CACvE,IAAI,CAAC,qBAAqB,EAC1B,eAAe,EACf,OAAO,CACR,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAClD,qBAAoE,EACpE,eAAiD,EACjD,OAE0E;QAE1E,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,OAAO,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;SACvC;QAED,MAAM,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,GAAG,qBAAqB,CAAC;QAE1D,OAAO,MAAM,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC,oBAAoB,CACtD,eAAe,EACf,CAAC,sBAAsB,EAAE,EAAE,CACzB,4BAA4B,CAAC,+BAA+B,CAC1D,UAAU,EACV,sBAAsB,EACtB,OAAO,CACR,CACJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,eAAiD;QACzE,gCAAgC;QAChC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/D,MAAM,oBAAoB,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;SACjE;IACH,CAAC;CACF;AA1DD,+CA0DC"}
1
+ {"version":3,"file":"ComposedSecondaryEntityCache.js","sourceRoot":"","sources":["../src/ComposedSecondaryEntityCache.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAIpC;;GAEG;AACH,MAAqB,4BAA4B;IAG/C;;;;OAIG;IACH,YACmB,qBAAoE;QAApE,0BAAqB,GAArB,qBAAqB,CAA+C;IACpF,CAAC;IAEJ,KAAK,CAAC,oBAAoB,CACxB,eAAiD,EACjD,OAE0E;QAE1E,OAAO,MAAM,4BAA4B,CAAC,+BAA+B,CACvE,IAAI,CAAC,qBAAqB,EAC1B,eAAe,EACf,OAAO,CACR,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAClD,qBAAoE,EACpE,eAAiD,EACjD,OAE0E;QAE1E,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,OAAO,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;SACvC;QAED,MAAM,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,GAAG,qBAAqB,CAAC;QAE1D,OAAO,MAAM,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC,oBAAoB,CACtD,eAAe,EACf,CAAC,sBAAsB,EAAE,EAAE,CACzB,4BAA4B,CAAC,+BAA+B,CAC1D,UAAU,EACV,sBAAsB,EACtB,OAAO,CACR,CACJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,eAAiD;QACzE,gCAAgC;QAChC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/D,MAAM,oBAAoB,GAAG,IAAA,oBAAU,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;SACjE;IACH,CAAC;CACF;AAxDD,+CAwDC"}
@@ -4,6 +4,11 @@ import EntityPrivacyPolicy from './EntityPrivacyPolicy';
4
4
  import { EntityQueryContext } from './EntityQueryContext';
5
5
  import ReadonlyEntity from './ReadonlyEntity';
6
6
  import ViewerContext from './ViewerContext';
7
+ /**
8
+ * An association loader is a set of convenience methods for loading entities
9
+ * associated with an entity. In relational databases, these entities are often referenced
10
+ * by foreign keys.
11
+ */
7
12
  export default class EntityAssociationLoader<TFields, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields> {
8
13
  private readonly entity;
9
14
  constructor(entity: TEntity);
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const results_1 = require("@expo/results");
4
+ /**
5
+ * An association loader is a set of convenience methods for loading entities
6
+ * associated with an entity. In relational databases, these entities are often referenced
7
+ * by foreign keys.
8
+ */
4
9
  class EntityAssociationLoader {
5
10
  constructor(entity) {
6
11
  this.entity = entity;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityAssociationLoader.js","sourceRoot":"","sources":["../src/EntityAssociationLoader.ts"],"names":[],"mappings":";;AAAA,2CAA+C;AAQ/C,MAAqB,uBAAuB;IAO1C,YAA6B,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;IAEhD;;;;;;OAMG;IACH,KAAK,CAAC,yBAAyB,CAmB7B,gCAAmD,EACnD,qBAOC,EACD,eAAmC,IAAI,CAAC,MAAM;SAC3C,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,qBAAqB,CAAC;SAC7D,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAIpB,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;QAClF,IAAI,CAAC,kBAAkB,EAAE;YACvB,OAAO,IAAA,gBAAM,EAAC,IAAI,CAEjB,CAAC;SACH;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,qBAAqB,CAAC;aAC7D,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzD,OAAO,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,kBAA8C,CAAC,CAEjF,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,+BAA+B,CAkBnC,qBAOC,EACD,qCAA+F,EAC/F,eAAmC,IAAI,CAAC,MAAM;SAC3C,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,qBAAqB,CAAC;SAC7D,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,qBAAqB,CAAC;aAC7D,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,MAAM,MAAM,CAAC,4BAA4B,CAC9C,qCAAqC,EACrC,MAAa,CACd,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,wCAAwC,CAkB5C,gCAAsE,EACtE,qBAOC,EACD,6BAAuF,EACvF,eAAmC,IAAI,CAAC,MAAM;SAC3C,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,qBAAqB,CAAC;SAC7D,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAEpB,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;QACpF,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,IAAI,CAAC;SACb;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,qBAAqB,CAAC;aAC7D,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,MAAM,MAAM,CAAC,wBAAwB,CAC1C,6BAA6B,EAC7B,oBAA2B,CAC5B,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,8CAA8C,CAkBlD,gCAAsE,EACtE,qBAOC,EACD,6BAAuF,EACvF,eAAmC,IAAI,CAAC,MAAM;SAC3C,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,qBAAqB,CAAC;SAC7D,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAEpB,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;QACpF,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,EAAE,CAAC;SACX;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,qBAAqB,CAAC;aAC7D,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,MAAM,MAAM,CAAC,4BAA4B,CAC9C,6BAA6B,EAC7B,oBAA2B,CAC5B,CAAC;IACJ,CAAC;IAkLD,KAAK,CAAC,gCAAgC,CACpC,cAA+F,EAC/F,YAAiC;QAEjC,IAAI,aAAa,GAAuC,IAAI,CAAC,MAAM,CAAC;QACpE,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;YAC1C,MAAM,EACJ,qBAAqB,EACrB,gCAAgC,EAChC,6BAA6B,GAC9B,GAAG,aAAa,CAAC;YAClB,IAAI,sBAAyE,CAAC;YAC9E,IAAI,6BAA6B,EAAE;gBACjC,sBAAsB,GAAG,MAAM,aAAa;qBACzC,iBAAiB,EAAE;qBACnB,wCAAwC,CACvC,gCAAgC,EAChC,qBAAqB,EACrB,6BAA6B,EAC7B,YAAY,CACb,CAAC;aACL;iBAAM;gBACL,MAAM,2BAA2B,GAAG,MAAM,aAAa;qBACpD,iBAAiB,EAAE;qBACnB,yBAAyB,CACxB,gCAAgC,EAChC,qBAAqB,EACrB,YAAY,CACb,CAAC;gBAEJ,IAAI,2BAA2B,CAAC,EAAE,IAAI,2BAA2B,CAAC,KAAK,KAAK,IAAI,EAAE;oBAChF,sBAAsB,GAAG,IAAI,CAAC;iBAC/B;qBAAM;oBACL,sBAAsB,GAAG,2BAA2B,CAAC;iBACtD;aACF;YAED,IAAI,CAAC,sBAAsB,EAAE;gBAC3B,OAAO,IAAI,CAAC;aACb;YAED,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE;gBAC9B,OAAO,IAAA,gBAAM,EAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;aAC9C;YACD,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC;SAC9C;QACD,OAAO,IAAA,gBAAM,EAAC,aAAa,CAAC,CAAC;IAC/B,CAAC;CACF;AA/cD,0CA+cC"}
1
+ {"version":3,"file":"EntityAssociationLoader.js","sourceRoot":"","sources":["../src/EntityAssociationLoader.ts"],"names":[],"mappings":"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"}
@@ -119,10 +119,10 @@ describe(ComposedEntityCacheAdapter_1.default, () => {
119
119
  expect(results.size).toBe(3);
120
120
  });
121
121
  it('returns fallback adapter results primary is empty', async () => {
122
- const { primaryCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
122
+ const { fallbackCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
123
123
  const cacheHits = new Map([['test-id-1', { id: 'test-id-1' }]]);
124
- await primaryCacheAdapter.cacheManyAsync('id', cacheHits);
125
- await primaryCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
124
+ await fallbackCacheAdapter.cacheManyAsync('id', cacheHits);
125
+ await fallbackCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
126
126
  const results = await cacheAdapter.loadManyAsync('id', [
127
127
  'test-id-1',
128
128
  'test-id-2',
@@ -136,6 +136,39 @@ describe(ComposedEntityCacheAdapter_1.default, () => {
136
136
  expect(results.get('test-id-3')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.MISS });
137
137
  expect(results.size).toBe(3);
138
138
  });
139
+ it('populates primary adapter with fallback adapter results', async () => {
140
+ const { primaryCacheAdapter, fallbackCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
141
+ const cacheHits = new Map([['test-id-1', { id: 'test-id-1' }]]);
142
+ await fallbackCacheAdapter.cacheManyAsync('id', cacheHits);
143
+ await fallbackCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
144
+ // should populate primary cache with fallback cache results
145
+ await cacheAdapter.loadManyAsync('id', ['test-id-1', 'test-id-2', 'test-id-3']);
146
+ const primaryResults = await primaryCacheAdapter.loadManyAsync('id', [
147
+ 'test-id-1',
148
+ 'test-id-2',
149
+ 'test-id-3',
150
+ ]);
151
+ expect(primaryResults.get('test-id-1')).toMatchObject({
152
+ status: ReadThroughEntityCache_1.CacheStatus.HIT,
153
+ item: { id: 'test-id-1' },
154
+ });
155
+ expect(primaryResults.get('test-id-2')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.NEGATIVE });
156
+ expect(primaryResults.get('test-id-3')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.MISS });
157
+ expect(primaryResults.size).toBe(3);
158
+ // ensure that populating the primary cache doesn't change the output
159
+ const composedResults = await cacheAdapter.loadManyAsync('id', [
160
+ 'test-id-1',
161
+ 'test-id-2',
162
+ 'test-id-3',
163
+ ]);
164
+ expect(composedResults.get('test-id-1')).toMatchObject({
165
+ status: ReadThroughEntityCache_1.CacheStatus.HIT,
166
+ item: { id: 'test-id-1' },
167
+ });
168
+ expect(composedResults.get('test-id-2')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.NEGATIVE });
169
+ expect(composedResults.get('test-id-3')).toMatchObject({ status: ReadThroughEntityCache_1.CacheStatus.MISS });
170
+ expect(composedResults.size).toBe(3);
171
+ });
139
172
  it('returns empty map when passed empty array of fieldValues', async () => {
140
173
  const { cacheAdapter } = makeTestCacheAdapters();
141
174
  const results = await cacheAdapter.loadManyAsync('id', []);
@@ -1 +1 @@
1
- {"version":3,"file":"ComposedCacheAdapter-test.js","sourceRoot":"","sources":["../../src/__tests__/ComposedCacheAdapter-test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComposedCacheAdapter-test.js","sourceRoot":"","sources":["../../src/__tests__/ComposedCacheAdapter-test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/entity",
3
- "version": "0.26.0",
3
+ "version": "0.26.1",
4
4
  "description": "A privacy-first data model",
5
5
  "files": [
6
6
  "build",
@@ -4,14 +4,16 @@ import EntityCacheAdapter from './EntityCacheAdapter';
4
4
  import EntityConfiguration from './EntityConfiguration';
5
5
  import { CacheStatus, CacheLoadResult } from './internal/ReadThroughEntityCache';
6
6
 
7
+ /**
8
+ * A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
9
+ */
7
10
  export default class ComposedEntityCacheAdapter<TFields> extends EntityCacheAdapter<TFields> {
8
11
  /**
9
- * A {@link EntityCacheAdapter} that composes other {@link EntityCacheAdapter} instances.
10
- *
11
12
  * @param entityConfiguration - configuration for entity being loaded
12
13
  * @param cacheAdapters - list of cache adapters to compose in order of precedence.
13
14
  * Earlier cache adapters are read from first and written to (including invalidations) last.
14
15
  * Typically, caches closer to the application should be ordered before caches closer to the database.
16
+ * A lower layer cache is closer to the database, while a higher layer cache is closer to the application.
15
17
  */
16
18
  constructor(
17
19
  entityConfiguration: EntityConfiguration<TFields>,
@@ -25,9 +27,14 @@ export default class ComposedEntityCacheAdapter<TFields> extends EntityCacheAdap
25
27
  fieldValues: readonly NonNullable<TFields[N]>[]
26
28
  ): Promise<ReadonlyMap<NonNullable<TFields[N]>, CacheLoadResult<TFields>>> {
27
29
  const retMap = new Map<NonNullable<TFields[N]>, CacheLoadResult<TFields>>();
30
+ const fulfilledFieldValuesByCacheIndex: NonNullable<TFields[N]>[][] = Array.from(
31
+ { length: this.cacheAdapters.length },
32
+ () => []
33
+ );
28
34
 
29
35
  let unfulfilledFieldValues = fieldValues;
30
- for (const cacheAdapter of this.cacheAdapters) {
36
+ for (let i = 0; i < this.cacheAdapters.length; i++) {
37
+ const cacheAdapter = nullthrows(this.cacheAdapters[i]);
31
38
  const cacheResultsFromAdapter = await cacheAdapter.loadManyAsync(
32
39
  fieldName,
33
40
  unfulfilledFieldValues
@@ -39,9 +46,43 @@ export default class ComposedEntityCacheAdapter<TFields> extends EntityCacheAdap
39
46
  newUnfulfilledFieldValues.push(fieldValue);
40
47
  } else {
41
48
  retMap.set(fieldValue, cacheResult);
49
+ nullthrows(fulfilledFieldValuesByCacheIndex[i]).push(fieldValue);
42
50
  }
43
51
  }
44
52
  unfulfilledFieldValues = newUnfulfilledFieldValues;
53
+ if (unfulfilledFieldValues.length === 0) {
54
+ break;
55
+ }
56
+ }
57
+
58
+ // Recache values from lower layers that were not found in higher layers
59
+ // Write to lower layers first
60
+ for (let i = this.cacheAdapters.length - 1; i >= 0; i--) {
61
+ const cacheAdapter = nullthrows(this.cacheAdapters[i]);
62
+ const hitsToCache = new Map<NonNullable<TFields[N]>, Readonly<TFields>>();
63
+ const negativesToCache: NonNullable<TFields[N]>[] = [];
64
+
65
+ // Loop over all lower layer caches to collect hits and misses
66
+ for (let j = i + 1; j < this.cacheAdapters.length; j++) {
67
+ const fulfilledFieldValues = nullthrows(fulfilledFieldValuesByCacheIndex[j]);
68
+ fulfilledFieldValues.forEach((fieldValue) => {
69
+ const cacheResult = nullthrows(retMap.get(fieldValue));
70
+ if (cacheResult.status === CacheStatus.HIT) {
71
+ hitsToCache.set(fieldValue, cacheResult.item);
72
+ } else if (cacheResult.status === CacheStatus.NEGATIVE) {
73
+ negativesToCache.push(fieldValue);
74
+ }
75
+ });
76
+ }
77
+
78
+ const promises = [];
79
+ if (hitsToCache.size > 0) {
80
+ promises.push(cacheAdapter.cacheManyAsync(fieldName, hitsToCache));
81
+ }
82
+ if (negativesToCache.length > 0) {
83
+ promises.push(cacheAdapter.cacheDBMissesAsync(fieldName, negativesToCache));
84
+ }
85
+ await Promise.all(promises);
45
86
  }
46
87
 
47
88
  for (const fieldValue of unfulfilledFieldValues) {
@@ -2,12 +2,13 @@ import nullthrows from 'nullthrows';
2
2
 
3
3
  import { ISecondaryEntityCache } from './EntitySecondaryCacheLoader';
4
4
 
5
+ /**
6
+ * A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
7
+ */
5
8
  export default class ComposedSecondaryEntityCache<TLoadParams, TFields>
6
9
  implements ISecondaryEntityCache<TFields, TLoadParams>
7
10
  {
8
11
  /**
9
- * A {@link ISecondaryEntityCache} that composes other {@link ISecondaryEntityCache} instances.
10
- *
11
12
  * @param secondaryEntityCaches - list of caches to compose in order of precedence.
12
13
  * Earlier caches are read from first and written to (including invalidations) last.
13
14
  * Typically, caches closer to the application should be ordered before caches closer to the database.
@@ -6,6 +6,11 @@ import { EntityQueryContext } from './EntityQueryContext';
6
6
  import ReadonlyEntity from './ReadonlyEntity';
7
7
  import ViewerContext from './ViewerContext';
8
8
 
9
+ /**
10
+ * An association loader is a set of convenience methods for loading entities
11
+ * associated with an entity. In relational databases, these entities are often referenced
12
+ * by foreign keys.
13
+ */
9
14
  export default class EntityAssociationLoader<
10
15
  TFields,
11
16
  TID extends NonNullable<TFields[TSelectedFields]>,
@@ -162,11 +162,11 @@ describe(ComposedEntityCacheAdapter, () => {
162
162
  });
163
163
 
164
164
  it('returns fallback adapter results primary is empty', async () => {
165
- const { primaryCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
165
+ const { fallbackCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
166
166
 
167
167
  const cacheHits = new Map<string, Readonly<BlahFields>>([['test-id-1', { id: 'test-id-1' }]]);
168
- await primaryCacheAdapter.cacheManyAsync('id', cacheHits);
169
- await primaryCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
168
+ await fallbackCacheAdapter.cacheManyAsync('id', cacheHits);
169
+ await fallbackCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
170
170
 
171
171
  const results = await cacheAdapter.loadManyAsync('id', [
172
172
  'test-id-1',
@@ -183,6 +183,45 @@ describe(ComposedEntityCacheAdapter, () => {
183
183
  expect(results.size).toBe(3);
184
184
  });
185
185
 
186
+ it('populates primary adapter with fallback adapter results', async () => {
187
+ const { primaryCacheAdapter, fallbackCacheAdapter, cacheAdapter } = makeTestCacheAdapters();
188
+
189
+ const cacheHits = new Map<string, Readonly<BlahFields>>([['test-id-1', { id: 'test-id-1' }]]);
190
+ await fallbackCacheAdapter.cacheManyAsync('id', cacheHits);
191
+ await fallbackCacheAdapter.cacheDBMissesAsync('id', ['test-id-2']);
192
+
193
+ // should populate primary cache with fallback cache results
194
+ await cacheAdapter.loadManyAsync('id', ['test-id-1', 'test-id-2', 'test-id-3']);
195
+
196
+ const primaryResults = await primaryCacheAdapter.loadManyAsync('id', [
197
+ 'test-id-1',
198
+ 'test-id-2',
199
+ 'test-id-3',
200
+ ]);
201
+
202
+ expect(primaryResults.get('test-id-1')).toMatchObject({
203
+ status: CacheStatus.HIT,
204
+ item: { id: 'test-id-1' },
205
+ });
206
+ expect(primaryResults.get('test-id-2')).toMatchObject({ status: CacheStatus.NEGATIVE });
207
+ expect(primaryResults.get('test-id-3')).toMatchObject({ status: CacheStatus.MISS });
208
+ expect(primaryResults.size).toBe(3);
209
+
210
+ // ensure that populating the primary cache doesn't change the output
211
+ const composedResults = await cacheAdapter.loadManyAsync('id', [
212
+ 'test-id-1',
213
+ 'test-id-2',
214
+ 'test-id-3',
215
+ ]);
216
+ expect(composedResults.get('test-id-1')).toMatchObject({
217
+ status: CacheStatus.HIT,
218
+ item: { id: 'test-id-1' },
219
+ });
220
+ expect(composedResults.get('test-id-2')).toMatchObject({ status: CacheStatus.NEGATIVE });
221
+ expect(composedResults.get('test-id-3')).toMatchObject({ status: CacheStatus.MISS });
222
+ expect(composedResults.size).toBe(3);
223
+ });
224
+
186
225
  it('returns empty map when passed empty array of fieldValues', async () => {
187
226
  const { cacheAdapter } = makeTestCacheAdapters();
188
227
  const results = await cacheAdapter.loadManyAsync('id', []);