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 +48 -30
- package/esm/defaults.js +6 -0
- package/esm/identifiers/index.js +4 -0
- package/esm/model/index.js +2 -3
- package/esm/store/cache.js +11 -5
- package/esm/store/instance.js +30 -21
- package/package.json +1 -1
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
|
-
|
|
801
|
-
if (!cacheIdentify.field(value)) {
|
|
808
|
+
function collect(pName, v) {
|
|
802
809
|
if (onGot) {
|
|
803
|
-
onGot(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 :
|
|
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
|
};
|
package/esm/defaults.js
ADDED
package/esm/identifiers/index.js
CHANGED
|
@@ -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,
|
package/esm/model/index.js
CHANGED
|
@@ -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 :
|
|
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
|
};
|
package/esm/store/cache.js
CHANGED
|
@@ -16,17 +16,22 @@ const cacheIdentify = {
|
|
|
16
16
|
}
|
|
17
17
|
};
|
|
18
18
|
function wrapToField(cache, propertyName, value, onGot) {
|
|
19
|
-
|
|
20
|
-
if (!cacheIdentify.field(value)) {
|
|
19
|
+
function collect(pName, v) {
|
|
21
20
|
if (onGot) {
|
|
22
|
-
onGot(
|
|
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
|
-
|
|
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) {
|
package/esm/store/instance.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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)();
|