as-model 0.2.4 → 0.2.6

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/dist/index.js CHANGED
@@ -176,6 +176,9 @@ function modelStoreIdentifier() {
176
176
  function tokenIdentifier() {
177
177
  return true;
178
178
  }
179
+ function modelFieldIdentifier() {
180
+ return true;
181
+ }
179
182
 
180
183
  // src/validation/index.ts
181
184
  var noStateAModelKey = "no-state-a-model-key";
@@ -779,6 +782,11 @@ function createUpdater(model2, middleWare) {
779
782
  return updater;
780
783
  }
781
784
 
785
+ // src/defaults.ts
786
+ function defaultSelector(i) {
787
+ return i();
788
+ }
789
+
782
790
  // src/store/cache.ts
783
791
  var cacheIdentify = {
784
792
  field: function field(d) {
@@ -797,17 +805,22 @@ var cacheIdentify = {
797
805
  }
798
806
  };
799
807
  function wrapToField(cache, propertyName, value, onGot) {
800
- var cacheFields = cache.cacheFields;
801
- if (!cacheIdentify.field(value)) {
808
+ function collect(pName, v) {
802
809
  if (onGot) {
803
- onGot(propertyName, value);
810
+ onGot(pName, v);
804
811
  }
812
+ }
813
+ var cacheFields = cache.cacheFields;
814
+ if (!cacheIdentify.field(value)) {
815
+ collect(propertyName, value);
805
816
  return value;
806
817
  }
807
818
  var field2 = value;
808
819
  var cachedField = cacheFields[propertyName];
809
- if (cachedField) {
810
- return cachedField.getter;
820
+ if (cachedField && (field2.deps && shallowEqual(cachedField.deps, field2.deps) || !field2.deps && cachedField.value === field2.value)) {
821
+ var cacheFieldGetter = cachedField.getter;
822
+ collect(propertyName, cacheFieldGetter);
823
+ return cacheFieldGetter;
811
824
  }
812
825
  var getter = {
813
826
  get: function get() {
@@ -841,6 +854,7 @@ function wrapToField(cache, propertyName, value, onGot) {
841
854
  value: field2.value,
842
855
  deps: field2.deps
843
856
  };
857
+ collect(propertyName, getter);
844
858
  return getter;
845
859
  }
846
860
  function wrapToActionMethod(cache, methodName) {
@@ -982,6 +996,7 @@ function wrapToField2(updater, propertyName, value, onGot) {
982
996
  return cacheFieldGetter;
983
997
  }
984
998
  var getter = {
999
+ identifier: modelFieldIdentifier,
985
1000
  get: function get() {
986
1001
  var currentField = updater.instance[propertyName];
987
1002
  if (!cacheIdentify.field(currentField)) {
@@ -1024,31 +1039,36 @@ function extractInstance(updater, wrapper, cache, opts) {
1024
1039
  }
1025
1040
  onGet(key, value);
1026
1041
  };
1027
- var instance = updater.instance;
1028
- if ((typeof instance === "undefined" ? "undefined" : _type_of(instance)) !== "object" || !instance) {
1029
- throw new Error("The instance should be an object or array.");
1030
- }
1031
- var properties = Object.getOwnPropertyNames(instance);
1032
- var proxiedInstance = createProxy(instance, {
1033
- get: function get(target, p) {
1034
- var value = target[p];
1035
- if (typeof value === "function" && properties.indexOf(p) >= 0) {
1036
- var actionMethod = wrapToActionMethod2(updater, p);
1037
- Object.assign(actionMethod, value);
1038
- return actionMethod;
1039
- }
1040
- return wrapToField2(updater, p, value);
1041
- },
1042
- set: function set() {
1043
- return false;
1044
- }
1045
- });
1046
1042
  function generateInstance() {
1047
- return proxiedInstance;
1043
+ var instance = updater.instance;
1044
+ if ((typeof instance === "undefined" ? "undefined" : _type_of(instance)) !== "object" || !instance) {
1045
+ throw new Error("The instance should be an object or array.");
1046
+ }
1047
+ var properties = Object.getOwnPropertyNames(instance);
1048
+ return createProxy(instance, {
1049
+ get: function get(target, p) {
1050
+ var value = target[p];
1051
+ if (typeof value === "function" && properties.indexOf(p) >= 0) {
1052
+ var actionMethod = wrapToActionMethod2(updater, p);
1053
+ Object.assign(actionMethod, value);
1054
+ return actionMethod;
1055
+ }
1056
+ return wrapToField2(updater, p, value);
1057
+ },
1058
+ set: function set() {
1059
+ return false;
1060
+ }
1061
+ });
1048
1062
  }
1049
- if (wrapper == null) {
1063
+ var proxiedInstance = generateInstance();
1064
+ if (wrapper == null || wrapper === defaultSelector) {
1050
1065
  return proxiedInstance;
1051
1066
  }
1067
+ if (wrapper === defaultSelector) {
1068
+ return cacheProperties(_object_spread_props(_object_spread({}, cache), {
1069
+ target: proxiedInstance
1070
+ }), handleGetter)();
1071
+ }
1052
1072
  var wrapped = wrapper(generateInstance);
1053
1073
  if ((typeof wrapped === "undefined" ? "undefined" : _type_of(wrapped)) === "object" && wrapped != null) {
1054
1074
  return cacheProperties(_object_spread_props(_object_spread({}, cache), {
@@ -1206,7 +1226,7 @@ function createPrimaryKey(modelFn) {
1206
1226
  var ifModelUsage = isModelUsage(modelFn);
1207
1227
  var model2 = ifModelKey ? modelFn.source : modelFn;
1208
1228
  var _config_wrapper;
1209
- var wrapper = (_config_wrapper = config2.wrapper) !== null && _config_wrapper !== void 0 ? _config_wrapper : ifModelKey || ifModelUsage ? modelFn.wrapper : function defaultSelector(i) {
1229
+ var wrapper = (_config_wrapper = config2.wrapper) !== null && _config_wrapper !== void 0 ? _config_wrapper : ifModelKey || ifModelUsage ? modelFn.wrapper : function defaultSelector2(i) {
1210
1230
  return i();
1211
1231
  };
1212
1232
  var wrapModel = function wrapModel2(state) {
@@ -1399,9 +1419,7 @@ function createStores(modelKeys) {
1399
1419
  // src/model/index.ts
1400
1420
  function configModel(config2) {
1401
1421
  var model2 = function model3(modelFn, wrapper) {
1402
- var currentSelector = wrapper !== null && wrapper !== void 0 ? wrapper : function defaultSelector(i) {
1403
- return i();
1404
- };
1422
+ var currentSelector = wrapper !== null && wrapper !== void 0 ? wrapper : defaultSelector;
1405
1423
  var modelWrapper = function modelWrapper2(state) {
1406
1424
  return modelFn(state);
1407
1425
  };
@@ -0,0 +1,6 @@
1
+ function defaultSelector(i) {
2
+ return i();
3
+ }
4
+ export {
5
+ defaultSelector
6
+ };
@@ -10,7 +10,11 @@ function modelStoreIdentifier() {
10
10
  function tokenIdentifier() {
11
11
  return true;
12
12
  }
13
+ function modelFieldIdentifier() {
14
+ return true;
15
+ }
13
16
  export {
17
+ modelFieldIdentifier,
14
18
  modelKeyIdentifier,
15
19
  modelStoreIdentifier,
16
20
  modelUsageIdentifier,
@@ -20,11 +20,10 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
20
  import { createStore, createField, createMethod } from "../store";
21
21
  import { createKey } from "../key";
22
22
  import { modelUsageIdentifier } from "../identifiers";
23
+ import { defaultSelector } from "../defaults";
23
24
  function configModel(config) {
24
25
  const model = function model2(modelFn, wrapper) {
25
- const currentSelector = wrapper != null ? wrapper : function defaultSelector(i) {
26
- return i();
27
- };
26
+ const currentSelector = wrapper != null ? wrapper : defaultSelector;
28
27
  const modelWrapper = function modelWrapper2(state) {
29
28
  return modelFn(state);
30
29
  };
@@ -16,17 +16,22 @@ const cacheIdentify = {
16
16
  }
17
17
  };
18
18
  function wrapToField(cache, propertyName, value, onGot) {
19
- const { cacheFields } = cache;
20
- if (!cacheIdentify.field(value)) {
19
+ function collect(pName, v) {
21
20
  if (onGot) {
22
- onGot(propertyName, value);
21
+ onGot(pName, v);
23
22
  }
23
+ }
24
+ const { cacheFields } = cache;
25
+ if (!cacheIdentify.field(value)) {
26
+ collect(propertyName, value);
24
27
  return value;
25
28
  }
26
29
  const field = value;
27
30
  const cachedField = cacheFields[propertyName];
28
- if (cachedField) {
29
- return cachedField.getter;
31
+ if (cachedField && (field.deps && shallowEqual(cachedField.deps, field.deps) || !field.deps && cachedField.value === field.value)) {
32
+ const cacheFieldGetter = cachedField.getter;
33
+ collect(propertyName, cacheFieldGetter);
34
+ return cacheFieldGetter;
30
35
  }
31
36
  const getter = {
32
37
  get() {
@@ -56,6 +61,7 @@ function wrapToField(cache, propertyName, value, onGot) {
56
61
  }
57
62
  };
58
63
  cacheFields[propertyName] = { getter, value: field.value, deps: field.deps };
64
+ collect(propertyName, getter);
59
65
  return getter;
60
66
  }
61
67
  function wrapToActionMethod(cache, methodName) {
@@ -18,6 +18,8 @@ var __spreadValues = (a, b) => {
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
20
  import { createProxy, shallowEqual } from "../tools";
21
+ import { defaultSelector } from "../defaults";
22
+ import { modelFieldIdentifier } from "../identifiers";
21
23
  import { cacheIdentify, cacheProperties } from "./cache";
22
24
  function createField(callback, deps) {
23
25
  const currentDeps = function computeDeps() {
@@ -101,6 +103,7 @@ function wrapToField(updater, propertyName, value, onGot) {
101
103
  return cacheFieldGetter;
102
104
  }
103
105
  const getter = {
106
+ identifier: modelFieldIdentifier,
104
107
  get() {
105
108
  const currentField = updater.instance[propertyName];
106
109
  if (!cacheIdentify.field(currentField)) {
@@ -139,31 +142,37 @@ function extractInstance(updater, wrapper, cache, opts) {
139
142
  }
140
143
  onGet(key, value);
141
144
  };
142
- const { instance } = updater;
143
- if (typeof instance !== "object" || !instance) {
144
- throw new Error("The instance should be an object or array.");
145
- }
146
- const properties = Object.getOwnPropertyNames(instance);
147
- const proxiedInstance = createProxy(instance, {
148
- get(target, p) {
149
- const value = target[p];
150
- if (typeof value === "function" && properties.indexOf(p) >= 0) {
151
- const actionMethod = wrapToActionMethod(updater, p);
152
- Object.assign(actionMethod, value);
153
- return actionMethod;
154
- }
155
- return wrapToField(updater, p, value);
156
- },
157
- set() {
158
- return false;
159
- }
160
- });
161
145
  function generateInstance() {
162
- return proxiedInstance;
146
+ const { instance } = updater;
147
+ if (typeof instance !== "object" || !instance) {
148
+ throw new Error("The instance should be an object or array.");
149
+ }
150
+ const properties = Object.getOwnPropertyNames(instance);
151
+ return createProxy(instance, {
152
+ get(target, p) {
153
+ const value = target[p];
154
+ if (typeof value === "function" && properties.indexOf(p) >= 0) {
155
+ const actionMethod = wrapToActionMethod(updater, p);
156
+ Object.assign(actionMethod, value);
157
+ return actionMethod;
158
+ }
159
+ return wrapToField(updater, p, value);
160
+ },
161
+ set() {
162
+ return false;
163
+ }
164
+ });
163
165
  }
164
- if (wrapper == null) {
166
+ const proxiedInstance = generateInstance();
167
+ if (wrapper == null || wrapper === defaultSelector) {
165
168
  return proxiedInstance;
166
169
  }
170
+ if (wrapper === defaultSelector) {
171
+ return cacheProperties(
172
+ __spreadProps(__spreadValues({}, cache), { target: proxiedInstance }),
173
+ handleGetter
174
+ )();
175
+ }
167
176
  const wrapped = wrapper(generateInstance);
168
177
  if (typeof wrapped === "object" && wrapped != null) {
169
178
  return cacheProperties(__spreadProps(__spreadValues({}, cache), { target: wrapped }), handleGetter)();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "as-model",
4
- "version": "0.2.4",
4
+ "version": "0.2.6",
5
5
  "description": "This is a model state management tool",
6
6
  "license": "MIT",
7
7
  "author": "Jimmy.Harding",