joist-core 2.3.0-next.13 → 2.3.0-next.14

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.
@@ -8,19 +8,24 @@ import { PropertyT } from "./hasProperty";
8
8
  * a `ReactiveField`, but when the value needs to be calculated from SQL because
9
9
  * it would be too expensive to calculate in-memory.
10
10
  *
11
- * The `fn` lambda will be called when any data referred to by either the `paramHint` or
12
- * `dbHint` reactive hints have changed, but only the `paramHint`'s data will be pulled
13
- * into memory.
11
+ * Its hint is split in two: the `loadHint` names data that is both reacted-to *and*
12
+ * loaded into memory (and passed to `fn`), while the `reactiveHint` names data that is
13
+ * only reacted-to (its changes recompute the value) but is left in the database rather
14
+ * than pulled into memory. The `fn` lambda re-runs when data referred to by either hint
15
+ * changes, but only the `loadHint`'s data is populated.
14
16
  */
15
- export declare function hasAsyncReactiveField<T extends Entity, const H1 extends ReactiveHint<T>, const H2 extends ReactiveHint<T>, V>(paramHint: H1, dbHint: H2, fn: (entity: Reacted<T, H1>) => Promise<V>): ReactiveField<T, V>;
17
+ export declare function hasAsyncReactiveField<T extends Entity, const H1 extends ReactiveHint<T>, const H2 extends ReactiveHint<T>, V>(loadHint: H1, reactiveHint: H2, fn: (entity: Reacted<T, H1>) => Promise<V>): ReactiveField<T, V>;
16
18
  export declare class AsyncReactiveFieldImpl<T extends Entity, H1 extends ReactiveHint<T>, H2 extends ReactiveHint<T>, V> extends AbstractPropertyImpl<T> implements ReactiveField<T, V> {
17
19
  #private;
18
20
  fieldName: keyof T & string;
19
- paramHint: H1;
20
- dbHint: H2;
21
21
  private fn;
22
- constructor(entity: T, fieldName: keyof T & string, paramHint: H1, dbHint: H2, fn: (entity: Reacted<T, H1>) => Promise<V>);
23
- /** Our combined param + db reactivity hint, so that we react to changes within both. */
22
+ constructor(entity: T, fieldName: keyof T & string, loadHint: H1, reactiveHint: H2, fn: (entity: Reacted<T, H1>) => Promise<V>);
23
+ /**
24
+ * Our combined load + reactive-only hint, so that we react to changes within both.
25
+ *
26
+ * The `loadHint` half is populated into memory (and passed to `fn`); the `reactiveHint`
27
+ * half only triggers recalculation, so its data stays in the database.
28
+ */
24
29
  get reactiveHint(): ReactiveHint<any>;
25
30
  load(opts?: {
26
31
  forceReload?: boolean;
@@ -17,41 +17,44 @@ const hasProperty_1 = require("./hasProperty");
17
17
  * a `ReactiveField`, but when the value needs to be calculated from SQL because
18
18
  * it would be too expensive to calculate in-memory.
19
19
  *
20
- * The `fn` lambda will be called when any data referred to by either the `paramHint` or
21
- * `dbHint` reactive hints have changed, but only the `paramHint`'s data will be pulled
22
- * into memory.
20
+ * Its hint is split in two: the `loadHint` names data that is both reacted-to *and*
21
+ * loaded into memory (and passed to `fn`), while the `reactiveHint` names data that is
22
+ * only reacted-to (its changes recompute the value) but is left in the database rather
23
+ * than pulled into memory. The `fn` lambda re-runs when data referred to by either hint
24
+ * changes, but only the `loadHint`'s data is populated.
23
25
  */
24
- function hasAsyncReactiveField(paramHint, dbHint, fn) {
26
+ function hasAsyncReactiveField(loadHint, reactiveHint, fn) {
25
27
  return (0, newEntity_1.lazyField)((entity, fieldName) => {
26
- return new AsyncReactiveFieldImpl(entity, fieldName, paramHint, dbHint, fn);
28
+ return new AsyncReactiveFieldImpl(entity, fieldName, loadHint, reactiveHint, fn);
27
29
  });
28
30
  }
29
31
  class AsyncReactiveFieldImpl extends AbstractPropertyImpl_1.AbstractPropertyImpl {
30
32
  fieldName;
31
- paramHint;
32
- dbHint;
33
33
  fn;
34
- #paramHint;
35
- #dbHint;
34
+ #loadHint;
35
+ #reactiveHint;
36
36
  #loadPromise;
37
37
  #loaded;
38
38
  #useFactoryValue = false;
39
- constructor(entity, fieldName, paramHint, dbHint, fn) {
39
+ constructor(entity, fieldName, loadHint, reactiveHint, fn) {
40
40
  super(entity);
41
41
  this.fieldName = fieldName;
42
- this.paramHint = paramHint;
43
- this.dbHint = dbHint;
44
42
  this.fn = fn;
45
- this.#paramHint = paramHint;
46
- this.#dbHint = dbHint;
43
+ this.#loadHint = loadHint;
44
+ this.#reactiveHint = reactiveHint;
47
45
  this.#loaded = false;
48
46
  }
49
- /** Our combined param + db reactivity hint, so that we react to changes within both. */
47
+ /**
48
+ * Our combined load + reactive-only hint, so that we react to changes within both.
49
+ *
50
+ * The `loadHint` half is populated into memory (and passed to `fn`); the `reactiveHint`
51
+ * half only triggers recalculation, so its data stays in the database.
52
+ */
50
53
  get reactiveHint() {
51
54
  // We do this in a getter (instead of the constructor) b/c it might be a little expensive,
52
55
  // and I'm pretty sure this is only called on boot, when hooking up the reactivity.
53
- const hint = (0, index_1.deepNormalizeHint)(this.#paramHint);
54
- (0, utils_1.mergeNormalizedHints)(hint, (0, index_1.deepNormalizeHint)(this.#dbHint));
56
+ const hint = (0, index_1.deepNormalizeHint)(this.#loadHint);
57
+ (0, utils_1.mergeNormalizedHints)(hint, (0, index_1.deepNormalizeHint)(this.#reactiveHint));
55
58
  return hint;
56
59
  }
57
60
  load(opts) {
@@ -103,9 +106,9 @@ class AsyncReactiveFieldImpl extends AbstractPropertyImpl_1.AbstractPropertyImpl
103
106
  return hintLoaded;
104
107
  }
105
108
  get loadHint() {
106
- // Only convert the paramHint, so we don't pull the dbHint-referenced data into memory
109
+ // Only convert the loadHint, so we don't pull the reactiveHint-referenced data into memory
107
110
  const meta = (0, EntityMetadata_1.getMetadata)(this.entity);
108
- return (meta.config.__data.cachedReactiveLoadHints[this.fieldName] ??= (0, reactiveHints_1.convertToLoadHint)(meta, this.#paramHint));
111
+ return (meta.config.__data.cachedReactiveLoadHints[this.fieldName] ??= (0, reactiveHints_1.convertToLoadHint)(meta, this.#loadHint));
109
112
  }
110
113
  setFactoryValue(newValue) {
111
114
  this.#useFactoryValue = true;
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncReactiveField.js","sourceRoot":"","sources":["../../src/relations/AsyncReactiveField.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AsyncReactiveField.js","sourceRoot":"","sources":["../../src/relations/AsyncReactiveField.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.3.0-next.13",
3
+ "version": "2.3.0-next.14",
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.3.0-next.13"
23
+ "joist-utils": "2.3.0-next.14"
24
24
  },
25
25
  "dependencies": {
26
26
  "ansis": "^4.3.1",