joist-core 2.2.0-next.7 → 2.2.0-next.8

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 +1 @@
1
- {"version":3,"file":"IsLoadedCache.d.ts","sourceRoot":"","sources":["../src/IsLoadedCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,IAAI,IAAI,CAAC;CACvB;AAED,qBAAa,aAAa;;IAWxB,+FAA+F;IAC/F,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAOnC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAKxC,yFAAyF;IACzF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAkDvD"}
1
+ {"version":3,"file":"IsLoadedCache.d.ts","sourceRoot":"","sources":["../src/IsLoadedCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,IAAI,IAAI,CAAC;CACvB;AAED,qBAAa,aAAa;;IAaxB,+FAA+F;IAC/F,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IASnC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAKxC,yFAAyF;IACzF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAsDvD"}
@@ -10,27 +10,32 @@ class IsLoadedCache {
10
10
  // A dumb cache for things that are hard selectively invalidate (o2m.get, recursive collections,
11
11
  // and custom references/collections), so any mutation resets these.
12
12
  #naiveCache = new Set();
13
- // Counter to try and fast-path resetIsLoaded
14
- #dirtySets = 0;
13
+ // Counter to skip reactive hint walking when no smart cache sets are populated.
14
+ #smartDirtySets = 0;
15
+ // Counter to fast-path resetIsLoaded when the naive cache is empty.
16
+ #naiveDirtySets = 0;
15
17
  /** Adds a ReactiveField/Relation/Collection to be invalidated when its dependencies change. */
16
18
  add(target) {
17
19
  const meta = (0, EntityMetadata_1.getMetadata)(target.entity);
18
20
  const set = ((this.#smartCache[meta.tagName] ??= {})[target.fieldName] ??= new Set());
19
- if (set.size === 0)
20
- this.#dirtySets++;
21
+ if (set.size === 0) {
22
+ this.#smartDirtySets++;
23
+ }
21
24
  set.add(target);
22
25
  }
23
26
  addNaive(target) {
24
27
  if (this.#naiveCache.size === 0)
25
- this.#dirtySets++;
28
+ this.#naiveDirtySets++;
26
29
  this.#naiveCache.add(target);
27
30
  }
28
31
  /** Resets any in-memory #isLoaded/#isCached caches that depend on `entity.fieldName`. */
29
32
  resetIsLoaded(entity, fieldName) {
30
- if (this.#dirtySets === 0)
33
+ if (this.#smartDirtySets === 0 && this.#naiveDirtySets === 0)
31
34
  return;
32
35
  // Reset caches that we can deterministically find by walking the reactivity hints
33
- this.#resetDownstreamReactables((0, EntityMetadata_1.getMetadata)(entity), fieldName);
36
+ if (this.#smartDirtySets > 0) {
37
+ this.#resetDownstreamReactables((0, EntityMetadata_1.getMetadata)(entity), fieldName);
38
+ }
34
39
  // We could use this to invalidate m2o.get, but it doesn't work for collections
35
40
  // with an orderBy, when the orderBy changes, so for now we use the blunt naiveCache.
36
41
  // const field = meta.allFields[fieldName];
@@ -46,7 +51,7 @@ class IsLoadedCache {
46
51
  for (const target of this.#naiveCache.values())
47
52
  target.resetIsLoaded();
48
53
  this.#naiveCache.clear();
49
- this.#dirtySets--;
54
+ this.#naiveDirtySets--;
50
55
  }
51
56
  }
52
57
  /**
@@ -56,8 +61,12 @@ class IsLoadedCache {
56
61
  */
57
62
  #resetDownstreamReactables(meta, fieldName) {
58
63
  // These are reactables in other entities that are watching/reacting to this entity/fieldName
59
- const reactables = meta.reactablesIncludingReadOnlyByField.get(fieldName) ?? [];
64
+ const reactables = meta.reactablesIncludingReadOnlyByField.get(fieldName);
65
+ if (reactables === undefined)
66
+ return;
60
67
  for (const r of reactables) {
68
+ if (this.#smartDirtySets === 0)
69
+ return;
61
70
  // I.e. we've written to Author.firstName, and this reactable in Book/otherMeta depends on it
62
71
  const otherMeta = (0, EntityMetadata_1.getMetadata)(r.cstr);
63
72
  // Find any cache entries for this cstr + name
@@ -73,7 +82,7 @@ class IsLoadedCache {
73
82
  }
74
83
  }
75
84
  set.clear();
76
- this.#dirtySets--;
85
+ this.#smartDirtySets--;
77
86
  }
78
87
  }
79
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IsLoadedCache.js","sourceRoot":"","sources":["../src/IsLoadedCache.ts"],"names":[],"mappings":";;;AACA,qDAA+D;AAyB/D,MAAa,aAAa;IACxB,yFAAyF;IACzF,oFAAoF;IACpF,cAAc;IACd,WAAW,GAA0D,EAAE,CAAC;IACxE,gGAAgG;IAChG,oEAAoE;IACpE,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,6CAA6C;IAC7C,UAAU,GAAG,CAAC,CAAC;IAEf,+FAA+F;IAC/F,GAAG,CAAC,MAAwB;QAC1B,MAAM,IAAI,GAAG,IAAA,4BAAW,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QACtF,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,MAAwB;QAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,yFAAyF;IACzF,aAAa,CAAC,MAAc,EAAE,SAAiB;QAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO;QAClC,kFAAkF;QAClF,IAAI,CAAC,0BAA0B,CAAC,IAAA,4BAAW,EAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;QAChE,+EAA+E;QAC/E,qFAAqF;QACrF,2CAA2C;QAC3C,8BAA8B;QAC9B,6CAA6C;QAC7C,4EAA4E;QAC5E,eAAe;QACf,wDAAwD;QACxD,mBAAmB;QACnB,MAAM;QACN,IAAI;QACJ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBAAE,MAAM,CAAC,aAAa,EAAE,CAAC;YACvE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,0BAA0B,CAAC,IAAoB,EAAE,SAAiB;QAChE,6FAA6F;QAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,kCAAmC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACjF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,6FAA6F;YAC7F,MAAM,SAAS,GAAG,IAAA,4BAAW,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtC,8CAA8C;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;gBAClB,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;oBACzB,MAAM,CAAC,aAAa,EAAE,CAAC;oBACvB,8EAA8E;oBAC9E,MAAM,SAAS,GAAG,IAAA,4BAAW,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACzD,IAAI,SAAS,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;wBAClD,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;gBACD,GAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA3ED,sCA2EC"}
1
+ {"version":3,"file":"IsLoadedCache.js","sourceRoot":"","sources":["../src/IsLoadedCache.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "joist-core",
3
- "version": "2.2.0-next.7",
3
+ "version": "2.2.0-next.8",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,7 +20,7 @@
20
20
  "build"
21
21
  ],
22
22
  "peerDependencies": {
23
- "joist-utils": "2.2.0-next.7"
23
+ "joist-utils": "2.2.0-next.8"
24
24
  },
25
25
  "dependencies": {
26
26
  "ansis": "^4.3.0",