@zajno/common 2.8.3 → 2.8.5
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/cjs/lazy/promise.js +30 -11
- package/cjs/lazy/promise.js.map +1 -1
- package/cjs/math/object/math.composite.js +39 -22
- package/cjs/math/object/math.composite.js.map +1 -1
- package/cjs/math/object/math.js +50 -8
- package/cjs/math/object/math.js.map +1 -1
- package/cjs/math/object/ops.composite.js +8 -8
- package/cjs/math/object/ops.composite.js.map +1 -1
- package/esm/lazy/promise.js +30 -11
- package/esm/lazy/promise.js.map +1 -1
- package/esm/math/object/math.composite.js +39 -22
- package/esm/math/object/math.composite.js.map +1 -1
- package/esm/math/object/math.js +50 -8
- package/esm/math/object/math.js.map +1 -1
- package/esm/math/object/ops.composite.js +8 -8
- package/esm/math/object/ops.composite.js.map +1 -1
- package/package.json +1 -1
- package/types/lazy/promise.d.ts +7 -2
- package/types/math/object/math.composite.d.ts +9 -4
- package/types/math/object/math.d.ts +8 -1
- package/types/math/object/ops.composite.d.ts +2 -2
- package/types/math/object/types.d.ts +4 -1
package/cjs/lazy/promise.js
CHANGED
|
@@ -11,7 +11,9 @@ class LazyPromise {
|
|
|
11
11
|
_factory;
|
|
12
12
|
_initial;
|
|
13
13
|
_instance;
|
|
14
|
-
|
|
14
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
15
|
+
_state = null;
|
|
16
|
+
_isAsyncStateChange = false;
|
|
15
17
|
_promise;
|
|
16
18
|
_expireTracker;
|
|
17
19
|
// Track the active factory promise to determine "latest wins"
|
|
@@ -23,8 +25,9 @@ class LazyPromise {
|
|
|
23
25
|
this._initial = initial;
|
|
24
26
|
this._instance = initial; // as ILazyValue<T, TInitial>;
|
|
25
27
|
}
|
|
26
|
-
|
|
27
|
-
get
|
|
28
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
29
|
+
get isLoading() { return this._state; }
|
|
30
|
+
get hasValue() { return this._state === false; }
|
|
28
31
|
get error() { return this._error; }
|
|
29
32
|
get promise() {
|
|
30
33
|
this.ensureInstanceLoading();
|
|
@@ -43,6 +46,10 @@ class LazyPromise {
|
|
|
43
46
|
this._expireTracker = tracker;
|
|
44
47
|
return this;
|
|
45
48
|
}
|
|
49
|
+
withAsyncStateChange(enabled) {
|
|
50
|
+
this._isAsyncStateChange = enabled;
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
46
53
|
/**
|
|
47
54
|
* Extends this instance with additional functionality via in-place mutation.
|
|
48
55
|
*
|
|
@@ -101,7 +108,7 @@ class LazyPromise {
|
|
|
101
108
|
* @returns The value that was set
|
|
102
109
|
*/
|
|
103
110
|
setInstance(res) {
|
|
104
|
-
this.
|
|
111
|
+
this.updateState(false);
|
|
105
112
|
this.clearError(); // clear error on successful set
|
|
106
113
|
// refresh promise so it won't keep old callbacks
|
|
107
114
|
// + make sure it's resolved with the freshest value
|
|
@@ -127,7 +134,7 @@ class LazyPromise {
|
|
|
127
134
|
return this._promise;
|
|
128
135
|
}
|
|
129
136
|
reset() {
|
|
130
|
-
this.
|
|
137
|
+
this.updateState(null);
|
|
131
138
|
this.clearError();
|
|
132
139
|
const wasDisposed = (0, disposer_js_1.tryDispose)(this._instance);
|
|
133
140
|
this._instance = this._initial;
|
|
@@ -147,21 +154,30 @@ class LazyPromise {
|
|
|
147
154
|
this.reset();
|
|
148
155
|
}
|
|
149
156
|
ensureInstanceLoading() {
|
|
157
|
+
let nextState;
|
|
150
158
|
if (this.isLoading === false && this._instance !== undefined && this._expireTracker?.isExpired) {
|
|
151
159
|
// do not reset the instance, just make sure it will be reloaded
|
|
152
|
-
|
|
160
|
+
nextState = null;
|
|
153
161
|
}
|
|
154
|
-
if (this.
|
|
155
|
-
|
|
162
|
+
if (this._state === null || nextState === null) {
|
|
163
|
+
nextState = true;
|
|
156
164
|
this.startLoading(false);
|
|
157
165
|
}
|
|
166
|
+
if (nextState !== undefined) {
|
|
167
|
+
if (this._isAsyncStateChange) {
|
|
168
|
+
setImmediate(() => { this.updateState(nextState); });
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
this.updateState(nextState);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
158
174
|
}
|
|
159
175
|
startLoading(refreshing) {
|
|
160
176
|
if (!refreshing && this._activeFactoryPromise) {
|
|
161
177
|
// Case when refreshing already is happening - we have an active promise
|
|
162
178
|
return;
|
|
163
179
|
}
|
|
164
|
-
const factoryPromise = this._factory(refreshing)
|
|
180
|
+
const factoryPromise = Promise.resolve(this._factory(refreshing))
|
|
165
181
|
.then(res => {
|
|
166
182
|
if (!this._activeFactoryPromise) {
|
|
167
183
|
// this promise was abandoned: was superseded or reset called
|
|
@@ -169,7 +185,7 @@ class LazyPromise {
|
|
|
169
185
|
}
|
|
170
186
|
if (this._activeFactoryPromise === factoryPromise) {
|
|
171
187
|
// case: during the promise `setInstance` was called manually
|
|
172
|
-
if (!refreshing && !this.
|
|
188
|
+
if (!refreshing && !this._state && this._instance !== undefined) {
|
|
173
189
|
return this._instance;
|
|
174
190
|
}
|
|
175
191
|
this.setInstance(res);
|
|
@@ -195,7 +211,7 @@ class LazyPromise {
|
|
|
195
211
|
}
|
|
196
212
|
}
|
|
197
213
|
onRejected(e) {
|
|
198
|
-
this.
|
|
214
|
+
this.updateState(false);
|
|
199
215
|
// Keep the current instance on error (don't reset to initial)
|
|
200
216
|
// This allows retaining the last successful value
|
|
201
217
|
const currentInstance = this._instance !== undefined ? this._instance : this._initial;
|
|
@@ -204,6 +220,9 @@ class LazyPromise {
|
|
|
204
220
|
this.setError(e);
|
|
205
221
|
return currentInstance;
|
|
206
222
|
}
|
|
223
|
+
updateState(isLoading) {
|
|
224
|
+
this._state = isLoading;
|
|
225
|
+
}
|
|
207
226
|
setError(err) {
|
|
208
227
|
this._error = this.parseError(err);
|
|
209
228
|
}
|
package/cjs/lazy/promise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":";;;AAAA,0DAAwE;AAKxE;;;;GAIG;AACH,MAAa,WAAW;IAEZ,QAAQ,CAAiB;IAChB,QAAQ,CAAW;IAE5B,SAAS,CAAe;
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,67 +4,84 @@ exports.CompositeObjectMath = void 0;
|
|
|
4
4
|
const helpers_js_1 = require("./helpers.js");
|
|
5
5
|
const ops_composite_js_1 = require("./ops.composite.js");
|
|
6
6
|
class CompositeObjectMath extends ops_composite_js_1.CompositeObjectOps {
|
|
7
|
-
|
|
7
|
+
innerMath;
|
|
8
|
+
returnInfinityOnDivByEmpty = false;
|
|
8
9
|
constructor(innerMath) {
|
|
9
10
|
super(innerMath);
|
|
10
|
-
this.
|
|
11
|
+
this.innerMath = Object.entries(innerMath)
|
|
11
12
|
.map(pair => ({
|
|
12
13
|
key: pair[0],
|
|
13
14
|
ops: pair[1],
|
|
14
15
|
}));
|
|
15
16
|
}
|
|
17
|
+
useInfinityOnDivByEmpty(enable) {
|
|
18
|
+
this.returnInfinityOnDivByEmpty = enable;
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
16
21
|
contains(base, target) {
|
|
17
|
-
if (!base
|
|
22
|
+
if (!base) {
|
|
18
23
|
return false;
|
|
19
24
|
}
|
|
20
|
-
|
|
25
|
+
if (!target) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return this.innerMath.every(pair => {
|
|
21
29
|
const baseVal = (0, helpers_js_1._getInnerValue)(base, pair.key);
|
|
22
30
|
const targetVal = (0, helpers_js_1._getInnerValue)(target, pair.key);
|
|
23
31
|
return pair.ops.contains(baseVal, targetVal);
|
|
24
32
|
});
|
|
25
33
|
}
|
|
26
34
|
inverse(o) {
|
|
27
|
-
return (0, helpers_js_1.doOps)(this.
|
|
35
|
+
return (0, helpers_js_1.doOps)(this.innerMath, o, (ops, val) => ops.inverse(val));
|
|
28
36
|
}
|
|
29
37
|
abs(o, options) {
|
|
30
|
-
|
|
38
|
+
if (!o) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
return (0, helpers_js_1.doOps)(this.innerMath, o, (ops, val) => ops.abs(val, options));
|
|
31
42
|
}
|
|
32
43
|
round(o, options) {
|
|
33
|
-
|
|
44
|
+
if (!o) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return (0, helpers_js_1.doOps)(this.innerMath, o, (ops, val) => ops.round(val, options));
|
|
34
48
|
}
|
|
35
49
|
add(o1, o2) {
|
|
36
|
-
|
|
37
|
-
return this.getEmpty();
|
|
38
|
-
}
|
|
39
|
-
return (0, helpers_js_1.doOps)(this._math, o1, (ops, val, key) => ops.add(val, (0, helpers_js_1._getInnerValue)(o2, key)));
|
|
50
|
+
return (0, helpers_js_1.doOps)(this.innerMath, o1, (ops, val, key) => ops.add(val, (0, helpers_js_1._getInnerValue)(o2, key)));
|
|
40
51
|
}
|
|
41
52
|
subtract(base, amount) {
|
|
42
|
-
return (0, helpers_js_1.doOps)(this.
|
|
53
|
+
return (0, helpers_js_1.doOps)(this.innerMath, base, (ops, val, key) => ops.subtract(val, (0, helpers_js_1._getInnerValue)(amount, key)));
|
|
43
54
|
}
|
|
44
55
|
multiply(o1, o2) {
|
|
45
|
-
return (0, helpers_js_1.doOps)(this.
|
|
56
|
+
return (0, helpers_js_1.doOps)(this.innerMath, o1, (ops, val, key) => ops.multiply(val, (0, helpers_js_1._getInnerValue)(o2, key)));
|
|
46
57
|
}
|
|
47
58
|
div(o1, o2) {
|
|
48
59
|
if (this.isEmpty(o1)) {
|
|
49
|
-
return 0;
|
|
60
|
+
return typeof o2 === 'number' ? this.getEmpty() : 0;
|
|
61
|
+
}
|
|
62
|
+
// Scalar division - divide each child by the scalar
|
|
63
|
+
if (typeof o2 === 'number') {
|
|
64
|
+
if (o2 === 0) {
|
|
65
|
+
return this.getEmpty(); // Division by zero returns empty
|
|
66
|
+
}
|
|
67
|
+
return (0, helpers_js_1.doOps)(this.innerMath, o1, (ops, val) => ops.div(val, o2));
|
|
50
68
|
}
|
|
51
69
|
const checkRight = (val, getIsEmpty) => {
|
|
52
|
-
return
|
|
70
|
+
return getIsEmpty(val);
|
|
53
71
|
};
|
|
54
72
|
if (checkRight(o2, v => this.isEmpty(v))) {
|
|
55
|
-
return Number.POSITIVE_INFINITY;
|
|
73
|
+
return this.returnInfinityOnDivByEmpty ? Number.POSITIVE_INFINITY : 0;
|
|
56
74
|
}
|
|
57
|
-
const results = this.
|
|
75
|
+
const results = this.innerMath.map(pair => {
|
|
58
76
|
const left = (0, helpers_js_1._getInnerValue)(o1, pair.key);
|
|
59
|
-
if (pair.ops.isEmpty(left)) {
|
|
60
|
-
return 0;
|
|
61
|
-
}
|
|
62
77
|
const right = (0, helpers_js_1._getInnerValue)(o2, pair.key);
|
|
78
|
+
// Skip this field if right side is empty (can't divide by empty)
|
|
63
79
|
if (checkRight(right, v => pair.ops.isEmpty(v))) {
|
|
64
|
-
return
|
|
80
|
+
return null; // Mark as no valid division
|
|
65
81
|
}
|
|
82
|
+
// Perform division - if left is empty/zero, result will be 0
|
|
66
83
|
return pair.ops.div(left, right);
|
|
67
|
-
}).filter(
|
|
84
|
+
}).filter((val) => val !== null); // Filter out null markers, keep zeros
|
|
68
85
|
return results.length ? Math.min(...results) : 0;
|
|
69
86
|
}
|
|
70
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.composite.js","sourceRoot":"","sources":["../../../../src/math/object/math.composite.ts"],"names":[],"mappings":";;;AAEA,6CAAqD;AACrD,yDAAwD;AAIxD,MAAa,mBAAyC,SAAQ,qCAAqB;
|
|
1
|
+
{"version":3,"file":"math.composite.js","sourceRoot":"","sources":["../../../../src/math/object/math.composite.ts"],"names":[],"mappings":"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"}
|
package/cjs/math/object/math.js
CHANGED
|
@@ -5,6 +5,16 @@ const helpers_js_1 = require("./helpers.js");
|
|
|
5
5
|
const ops_js_1 = require("./ops.js");
|
|
6
6
|
const DELETE = 'delete';
|
|
7
7
|
class ObjectMath extends ops_js_1.ObjectOps {
|
|
8
|
+
returnInfinityOnDivByEmpty = false;
|
|
9
|
+
divisionMethod = 'floor';
|
|
10
|
+
useInfinityOnDivByEmpty(enable) {
|
|
11
|
+
this.returnInfinityOnDivByEmpty = enable;
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
useDivisionMethod(method) {
|
|
15
|
+
this.divisionMethod = method;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
8
18
|
getTotal(o) {
|
|
9
19
|
let sum = 0;
|
|
10
20
|
if (o) {
|
|
@@ -27,31 +37,46 @@ class ObjectMath extends ops_js_1.ObjectOps {
|
|
|
27
37
|
}
|
|
28
38
|
div(o1, o2) {
|
|
29
39
|
if (!o1 || !o2) {
|
|
30
|
-
return 0;
|
|
40
|
+
return this.returnInfinityOnDivByEmpty ? Number.POSITIVE_INFINITY : 0;
|
|
31
41
|
}
|
|
32
42
|
if (typeof o2 === 'number') {
|
|
33
43
|
const res = {};
|
|
34
44
|
Object.keys(o1).forEach(key => {
|
|
35
45
|
const kk = key;
|
|
36
46
|
const ov = o1[kk];
|
|
37
|
-
res[kk] =
|
|
47
|
+
res[kk] = this.getDivisionResult(ov, o2);
|
|
38
48
|
});
|
|
39
49
|
return res;
|
|
40
50
|
}
|
|
41
51
|
let min = null;
|
|
52
|
+
let hasValidDivisor = false;
|
|
42
53
|
Object.keys(o2).forEach(key => {
|
|
43
54
|
const kk = key;
|
|
44
|
-
const
|
|
45
|
-
if (!
|
|
46
|
-
return;
|
|
55
|
+
const divisor = o2[kk];
|
|
56
|
+
if (!divisor) {
|
|
57
|
+
return; // Skip zero divisors
|
|
58
|
+
}
|
|
59
|
+
// Only consider keys that exist in both objects
|
|
60
|
+
const dividend = o1[kk];
|
|
61
|
+
if (dividend === undefined) {
|
|
62
|
+
return; // Skip keys that don't exist in dividend
|
|
47
63
|
}
|
|
48
|
-
|
|
49
|
-
const c =
|
|
64
|
+
hasValidDivisor = true;
|
|
65
|
+
const c = this.getDivisionResult(dividend, divisor);
|
|
50
66
|
if (min == null || c < min) {
|
|
51
67
|
min = c;
|
|
52
68
|
}
|
|
53
69
|
});
|
|
54
|
-
|
|
70
|
+
// If no valid divisors found, treat as division by empty/zero
|
|
71
|
+
if (!hasValidDivisor) {
|
|
72
|
+
return this.returnInfinityOnDivByEmpty ? Number.POSITIVE_INFINITY : 0;
|
|
73
|
+
}
|
|
74
|
+
const result = min ?? 0;
|
|
75
|
+
// Return Infinity only if configured to do so
|
|
76
|
+
if (!Number.isFinite(result) && !this.returnInfinityOnDivByEmpty) {
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
55
80
|
}
|
|
56
81
|
process(o, processor) {
|
|
57
82
|
if (!o) {
|
|
@@ -119,6 +144,23 @@ class ObjectMath extends ops_js_1.ObjectOps {
|
|
|
119
144
|
multiply(c1, c2) {
|
|
120
145
|
return this.calc(c1, c2, (n1, n2) => (n1 || 0) * (n2 || 0));
|
|
121
146
|
}
|
|
147
|
+
getDivisionResult(dividend, divisor) {
|
|
148
|
+
let result = dividend / divisor;
|
|
149
|
+
switch (this.divisionMethod) {
|
|
150
|
+
case 'floor':
|
|
151
|
+
result = Math.floor(result);
|
|
152
|
+
break;
|
|
153
|
+
case 'ceil':
|
|
154
|
+
result = Math.ceil(result);
|
|
155
|
+
break;
|
|
156
|
+
case 'round':
|
|
157
|
+
result = Math.round(result);
|
|
158
|
+
break;
|
|
159
|
+
default:
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
122
164
|
}
|
|
123
165
|
exports.ObjectMath = ObjectMath;
|
|
124
166
|
//# sourceMappingURL=math.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../../src/math/object/math.ts"],"names":[],"mappings":";;;AAEA,6CAAyC;AACzC,qCAAqC;AAKrC,MAAM,MAAM,GAAgB,QAAQ,CAAC;AAErC,MAAa,UAA6B,SAAQ,kBAAY;
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../../src/math/object/math.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ exports.CompositeObjectOps = void 0;
|
|
|
4
4
|
const helpers_js_1 = require("./helpers.js");
|
|
5
5
|
class CompositeObjectOps {
|
|
6
6
|
Empty;
|
|
7
|
-
|
|
7
|
+
innerOps;
|
|
8
8
|
constructor(innerOps) {
|
|
9
|
-
this.
|
|
9
|
+
this.innerOps = Object.entries(innerOps)
|
|
10
10
|
.map(pair => {
|
|
11
11
|
const result = {
|
|
12
12
|
key: pair[0],
|
|
@@ -17,16 +17,16 @@ class CompositeObjectOps {
|
|
|
17
17
|
this.Empty = this.getEmpty();
|
|
18
18
|
}
|
|
19
19
|
isEmpty(o) {
|
|
20
|
-
return !o || this.
|
|
20
|
+
return !o || this.innerOps.every(op => op.ops.isEmpty((0, helpers_js_1._getInnerValue)(o, op.key)));
|
|
21
21
|
}
|
|
22
22
|
getEmpty() {
|
|
23
|
-
return (0, helpers_js_1.doOps)(this.
|
|
23
|
+
return (0, helpers_js_1.doOps)(this.innerOps, null, ops => ops.getEmpty());
|
|
24
24
|
}
|
|
25
25
|
clone(o) {
|
|
26
|
-
return (0, helpers_js_1.doOps)(this.
|
|
26
|
+
return (0, helpers_js_1.doOps)(this.innerOps, o);
|
|
27
27
|
}
|
|
28
28
|
isValid(o) {
|
|
29
|
-
return o != null && this.
|
|
29
|
+
return o != null && this.innerOps.every(op => op.ops.isValid((0, helpers_js_1._getInnerValue)(o, op.key)));
|
|
30
30
|
}
|
|
31
31
|
isEquals(a, b) {
|
|
32
32
|
if (!a && !b) {
|
|
@@ -35,10 +35,10 @@ class CompositeObjectOps {
|
|
|
35
35
|
if (!a || !b) {
|
|
36
36
|
return false;
|
|
37
37
|
}
|
|
38
|
-
return this.
|
|
38
|
+
return this.innerOps.every(pair => pair.ops.isEquals((0, helpers_js_1._getInnerValue)(a, pair.key), (0, helpers_js_1._getInnerValue)(b, pair.key)));
|
|
39
39
|
}
|
|
40
40
|
assign(to, other) {
|
|
41
|
-
this.
|
|
41
|
+
this.innerOps.forEach(pair => {
|
|
42
42
|
const val = (0, helpers_js_1._getInnerValue)(other, pair.key);
|
|
43
43
|
if (val !== undefined) {
|
|
44
44
|
to[pair.key] = val;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops.composite.js","sourceRoot":"","sources":["../../../../src/math/object/ops.composite.ts"],"names":[],"mappings":";;;AAGA,6CAAqD;AAErD,MAAa,kBAAkB;IAClB,KAAK,CAAc;
|
|
1
|
+
{"version":3,"file":"ops.composite.js","sourceRoot":"","sources":["../../../../src/math/object/ops.composite.ts"],"names":[],"mappings":";;;AAGA,6CAAqD;AAErD,MAAa,kBAAkB;IAClB,KAAK,CAAc;IAET,QAAQ,CAAe;IAE1C,YAAY,QAAwB;QAEhC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;aACnC,GAAG,CAAC,IAAI,CAAC,EAAE;YACR,MAAM,MAAM,GAAe;gBACvB,GAAG,EAAE,IAAI,CAAC,CAAC,CAAS;gBACpB,GAAG,EAAE,IAAI,CAAC,CAAC,CAAwB;aACtC,CAAC;YACF,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;QAEP,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,CAA4B;QAChC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAA,2BAAc,EAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,QAAQ;QACJ,OAAO,IAAA,kBAAK,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,CAA4B;QAC9B,OAAO,IAAA,kBAAK,EAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,CAA4B;QAChC,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAA,2BAAc,EAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,QAAQ,CAAC,CAA4B,EAAE,CAA4B;QAC/D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAChD,IAAA,2BAAc,EAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAC3B,IAAA,2BAAc,EAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAC9B,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAK,EAAE,KAAgC;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,GAAG,GAAG,IAAA,2BAAc,EAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACvB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAxDD,gDAwDC"}
|
package/esm/lazy/promise.js
CHANGED
|
@@ -8,7 +8,9 @@ export class LazyPromise {
|
|
|
8
8
|
_factory;
|
|
9
9
|
_initial;
|
|
10
10
|
_instance;
|
|
11
|
-
|
|
11
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
12
|
+
_state = null;
|
|
13
|
+
_isAsyncStateChange = false;
|
|
12
14
|
_promise;
|
|
13
15
|
_expireTracker;
|
|
14
16
|
// Track the active factory promise to determine "latest wins"
|
|
@@ -20,8 +22,9 @@ export class LazyPromise {
|
|
|
20
22
|
this._initial = initial;
|
|
21
23
|
this._instance = initial; // as ILazyValue<T, TInitial>;
|
|
22
24
|
}
|
|
23
|
-
|
|
24
|
-
get
|
|
25
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
26
|
+
get isLoading() { return this._state; }
|
|
27
|
+
get hasValue() { return this._state === false; }
|
|
25
28
|
get error() { return this._error; }
|
|
26
29
|
get promise() {
|
|
27
30
|
this.ensureInstanceLoading();
|
|
@@ -40,6 +43,10 @@ export class LazyPromise {
|
|
|
40
43
|
this._expireTracker = tracker;
|
|
41
44
|
return this;
|
|
42
45
|
}
|
|
46
|
+
withAsyncStateChange(enabled) {
|
|
47
|
+
this._isAsyncStateChange = enabled;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
43
50
|
/**
|
|
44
51
|
* Extends this instance with additional functionality via in-place mutation.
|
|
45
52
|
*
|
|
@@ -98,7 +105,7 @@ export class LazyPromise {
|
|
|
98
105
|
* @returns The value that was set
|
|
99
106
|
*/
|
|
100
107
|
setInstance(res) {
|
|
101
|
-
this.
|
|
108
|
+
this.updateState(false);
|
|
102
109
|
this.clearError(); // clear error on successful set
|
|
103
110
|
// refresh promise so it won't keep old callbacks
|
|
104
111
|
// + make sure it's resolved with the freshest value
|
|
@@ -124,7 +131,7 @@ export class LazyPromise {
|
|
|
124
131
|
return this._promise;
|
|
125
132
|
}
|
|
126
133
|
reset() {
|
|
127
|
-
this.
|
|
134
|
+
this.updateState(null);
|
|
128
135
|
this.clearError();
|
|
129
136
|
const wasDisposed = tryDispose(this._instance);
|
|
130
137
|
this._instance = this._initial;
|
|
@@ -144,21 +151,30 @@ export class LazyPromise {
|
|
|
144
151
|
this.reset();
|
|
145
152
|
}
|
|
146
153
|
ensureInstanceLoading() {
|
|
154
|
+
let nextState;
|
|
147
155
|
if (this.isLoading === false && this._instance !== undefined && this._expireTracker?.isExpired) {
|
|
148
156
|
// do not reset the instance, just make sure it will be reloaded
|
|
149
|
-
|
|
157
|
+
nextState = null;
|
|
150
158
|
}
|
|
151
|
-
if (this.
|
|
152
|
-
|
|
159
|
+
if (this._state === null || nextState === null) {
|
|
160
|
+
nextState = true;
|
|
153
161
|
this.startLoading(false);
|
|
154
162
|
}
|
|
163
|
+
if (nextState !== undefined) {
|
|
164
|
+
if (this._isAsyncStateChange) {
|
|
165
|
+
setImmediate(() => { this.updateState(nextState); });
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.updateState(nextState);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
155
171
|
}
|
|
156
172
|
startLoading(refreshing) {
|
|
157
173
|
if (!refreshing && this._activeFactoryPromise) {
|
|
158
174
|
// Case when refreshing already is happening - we have an active promise
|
|
159
175
|
return;
|
|
160
176
|
}
|
|
161
|
-
const factoryPromise = this._factory(refreshing)
|
|
177
|
+
const factoryPromise = Promise.resolve(this._factory(refreshing))
|
|
162
178
|
.then(res => {
|
|
163
179
|
if (!this._activeFactoryPromise) {
|
|
164
180
|
// this promise was abandoned: was superseded or reset called
|
|
@@ -166,7 +182,7 @@ export class LazyPromise {
|
|
|
166
182
|
}
|
|
167
183
|
if (this._activeFactoryPromise === factoryPromise) {
|
|
168
184
|
// case: during the promise `setInstance` was called manually
|
|
169
|
-
if (!refreshing && !this.
|
|
185
|
+
if (!refreshing && !this._state && this._instance !== undefined) {
|
|
170
186
|
return this._instance;
|
|
171
187
|
}
|
|
172
188
|
this.setInstance(res);
|
|
@@ -192,7 +208,7 @@ export class LazyPromise {
|
|
|
192
208
|
}
|
|
193
209
|
}
|
|
194
210
|
onRejected(e) {
|
|
195
|
-
this.
|
|
211
|
+
this.updateState(false);
|
|
196
212
|
// Keep the current instance on error (don't reset to initial)
|
|
197
213
|
// This allows retaining the last successful value
|
|
198
214
|
const currentInstance = this._instance !== undefined ? this._instance : this._initial;
|
|
@@ -201,6 +217,9 @@ export class LazyPromise {
|
|
|
201
217
|
this.setError(e);
|
|
202
218
|
return currentInstance;
|
|
203
219
|
}
|
|
220
|
+
updateState(isLoading) {
|
|
221
|
+
this._state = isLoading;
|
|
222
|
+
}
|
|
204
223
|
setError(err) {
|
|
205
224
|
this._error = this.parseError(err);
|
|
206
225
|
}
|
package/esm/lazy/promise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAC;AAKxE;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAEZ,QAAQ,CAAiB;IAChB,QAAQ,CAAW;IAE5B,SAAS,CAAe;
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +1,84 @@
|
|
|
1
1
|
import { _getInnerValue, doOps } from './helpers.js';
|
|
2
2
|
import { CompositeObjectOps } from './ops.composite.js';
|
|
3
3
|
export class CompositeObjectMath extends CompositeObjectOps {
|
|
4
|
-
|
|
4
|
+
innerMath;
|
|
5
|
+
returnInfinityOnDivByEmpty = false;
|
|
5
6
|
constructor(innerMath) {
|
|
6
7
|
super(innerMath);
|
|
7
|
-
this.
|
|
8
|
+
this.innerMath = Object.entries(innerMath)
|
|
8
9
|
.map(pair => ({
|
|
9
10
|
key: pair[0],
|
|
10
11
|
ops: pair[1],
|
|
11
12
|
}));
|
|
12
13
|
}
|
|
14
|
+
useInfinityOnDivByEmpty(enable) {
|
|
15
|
+
this.returnInfinityOnDivByEmpty = enable;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
13
18
|
contains(base, target) {
|
|
14
|
-
if (!base
|
|
19
|
+
if (!base) {
|
|
15
20
|
return false;
|
|
16
21
|
}
|
|
17
|
-
|
|
22
|
+
if (!target) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
return this.innerMath.every(pair => {
|
|
18
26
|
const baseVal = _getInnerValue(base, pair.key);
|
|
19
27
|
const targetVal = _getInnerValue(target, pair.key);
|
|
20
28
|
return pair.ops.contains(baseVal, targetVal);
|
|
21
29
|
});
|
|
22
30
|
}
|
|
23
31
|
inverse(o) {
|
|
24
|
-
return doOps(this.
|
|
32
|
+
return doOps(this.innerMath, o, (ops, val) => ops.inverse(val));
|
|
25
33
|
}
|
|
26
34
|
abs(o, options) {
|
|
27
|
-
|
|
35
|
+
if (!o) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return doOps(this.innerMath, o, (ops, val) => ops.abs(val, options));
|
|
28
39
|
}
|
|
29
40
|
round(o, options) {
|
|
30
|
-
|
|
41
|
+
if (!o) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return doOps(this.innerMath, o, (ops, val) => ops.round(val, options));
|
|
31
45
|
}
|
|
32
46
|
add(o1, o2) {
|
|
33
|
-
|
|
34
|
-
return this.getEmpty();
|
|
35
|
-
}
|
|
36
|
-
return doOps(this._math, o1, (ops, val, key) => ops.add(val, _getInnerValue(o2, key)));
|
|
47
|
+
return doOps(this.innerMath, o1, (ops, val, key) => ops.add(val, _getInnerValue(o2, key)));
|
|
37
48
|
}
|
|
38
49
|
subtract(base, amount) {
|
|
39
|
-
return doOps(this.
|
|
50
|
+
return doOps(this.innerMath, base, (ops, val, key) => ops.subtract(val, _getInnerValue(amount, key)));
|
|
40
51
|
}
|
|
41
52
|
multiply(o1, o2) {
|
|
42
|
-
return doOps(this.
|
|
53
|
+
return doOps(this.innerMath, o1, (ops, val, key) => ops.multiply(val, _getInnerValue(o2, key)));
|
|
43
54
|
}
|
|
44
55
|
div(o1, o2) {
|
|
45
56
|
if (this.isEmpty(o1)) {
|
|
46
|
-
return 0;
|
|
57
|
+
return typeof o2 === 'number' ? this.getEmpty() : 0;
|
|
58
|
+
}
|
|
59
|
+
// Scalar division - divide each child by the scalar
|
|
60
|
+
if (typeof o2 === 'number') {
|
|
61
|
+
if (o2 === 0) {
|
|
62
|
+
return this.getEmpty(); // Division by zero returns empty
|
|
63
|
+
}
|
|
64
|
+
return doOps(this.innerMath, o1, (ops, val) => ops.div(val, o2));
|
|
47
65
|
}
|
|
48
66
|
const checkRight = (val, getIsEmpty) => {
|
|
49
|
-
return
|
|
67
|
+
return getIsEmpty(val);
|
|
50
68
|
};
|
|
51
69
|
if (checkRight(o2, v => this.isEmpty(v))) {
|
|
52
|
-
return Number.POSITIVE_INFINITY;
|
|
70
|
+
return this.returnInfinityOnDivByEmpty ? Number.POSITIVE_INFINITY : 0;
|
|
53
71
|
}
|
|
54
|
-
const results = this.
|
|
72
|
+
const results = this.innerMath.map(pair => {
|
|
55
73
|
const left = _getInnerValue(o1, pair.key);
|
|
56
|
-
if (pair.ops.isEmpty(left)) {
|
|
57
|
-
return 0;
|
|
58
|
-
}
|
|
59
74
|
const right = _getInnerValue(o2, pair.key);
|
|
75
|
+
// Skip this field if right side is empty (can't divide by empty)
|
|
60
76
|
if (checkRight(right, v => pair.ops.isEmpty(v))) {
|
|
61
|
-
return
|
|
77
|
+
return null; // Mark as no valid division
|
|
62
78
|
}
|
|
79
|
+
// Perform division - if left is empty/zero, result will be 0
|
|
63
80
|
return pair.ops.div(left, right);
|
|
64
|
-
}).filter(
|
|
81
|
+
}).filter((val) => val !== null); // Filter out null markers, keep zeros
|
|
65
82
|
return results.length ? Math.min(...results) : 0;
|
|
66
83
|
}
|
|
67
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.composite.js","sourceRoot":"","sources":["../../../../src/math/object/math.composite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxD,MAAM,OAAO,mBAAyC,SAAQ,kBAAqB;
|
|
1
|
+
{"version":3,"file":"math.composite.js","sourceRoot":"","sources":["../../../../src/math/object/math.composite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxD,MAAM,OAAO,mBAAyC,SAAQ,kBAAqB;IAC5D,SAAS,CAAgB;IACpC,0BAA0B,GAAG,KAAK,CAAC;IAE3C,YAAY,SAA0B;QAClC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;aACrC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACV,GAAG,EAAE,IAAI,CAAC,CAAC,CAAqB;YAChC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAqC;SACnD,CAAC,CAAC,CAAC;IACZ,CAAC;IAED,uBAAuB,CAAC,MAAe;QACnC,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,IAA+B,EAAE,MAAiC;QACvE,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,CAAC,CAA4B;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAID,GAAG,CAAC,CAA4B,EAAE,OAAoB;QAClD,IAAI,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACzE,CAAC;IAID,KAAK,CAAC,CAA4B,EAAE,OAAsB;QACtD,IAAI,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,GAAG,CAAC,EAA6B,EAAE,EAA6B;QAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,QAAQ,CAAC,IAA+B,EAAE,MAA0C;QAChF,OAAO,KAAK,CACR,IAAI,CAAC,SAAS,EACd,IAAI,EACJ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAC3B,GAAG,EACH,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAC9B,CACJ,CAAC;IACN,CAAC;IAED,QAAQ,CAAC,EAA6B,EAAE,EAAsC;QAC1E,OAAO,KAAK,CACR,IAAI,CAAC,SAAS,EACd,EAAE,EACF,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAC3B,GAAG,EACH,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAC1B,CACJ,CAAC;IACN,CAAC;IAID,GAAG,CAAC,EAA6B,EAAE,EAAsC;QACrE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,OAAO,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,oDAAoD;QACpD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,iCAAiC;YAC7D,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAe,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,UAAU,GAAG,CAAsB,GAAgB,EAAE,UAAuC,EAAE,EAAE;YAClG,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACtC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAE3C,iEAAiE;YACjE,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,OAAO,IAAI,CAAC,CAAC,4BAA4B;YAC7C,CAAC;YAED,6DAA6D;YAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,sCAAsC;QAEvF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;CACJ"}
|
package/esm/math/object/math.js
CHANGED
|
@@ -2,6 +2,16 @@ import { _getValue } from './helpers.js';
|
|
|
2
2
|
import { ObjectOps } from './ops.js';
|
|
3
3
|
const DELETE = 'delete';
|
|
4
4
|
export class ObjectMath extends ObjectOps {
|
|
5
|
+
returnInfinityOnDivByEmpty = false;
|
|
6
|
+
divisionMethod = 'floor';
|
|
7
|
+
useInfinityOnDivByEmpty(enable) {
|
|
8
|
+
this.returnInfinityOnDivByEmpty = enable;
|
|
9
|
+
return this;
|
|
10
|
+
}
|
|
11
|
+
useDivisionMethod(method) {
|
|
12
|
+
this.divisionMethod = method;
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
5
15
|
getTotal(o) {
|
|
6
16
|
let sum = 0;
|
|
7
17
|
if (o) {
|
|
@@ -24,31 +34,46 @@ export class ObjectMath extends ObjectOps {
|
|
|
24
34
|
}
|
|
25
35
|
div(o1, o2) {
|
|
26
36
|
if (!o1 || !o2) {
|
|
27
|
-
return 0;
|
|
37
|
+
return this.returnInfinityOnDivByEmpty ? Number.POSITIVE_INFINITY : 0;
|
|
28
38
|
}
|
|
29
39
|
if (typeof o2 === 'number') {
|
|
30
40
|
const res = {};
|
|
31
41
|
Object.keys(o1).forEach(key => {
|
|
32
42
|
const kk = key;
|
|
33
43
|
const ov = o1[kk];
|
|
34
|
-
res[kk] =
|
|
44
|
+
res[kk] = this.getDivisionResult(ov, o2);
|
|
35
45
|
});
|
|
36
46
|
return res;
|
|
37
47
|
}
|
|
38
48
|
let min = null;
|
|
49
|
+
let hasValidDivisor = false;
|
|
39
50
|
Object.keys(o2).forEach(key => {
|
|
40
51
|
const kk = key;
|
|
41
|
-
const
|
|
42
|
-
if (!
|
|
43
|
-
return;
|
|
52
|
+
const divisor = o2[kk];
|
|
53
|
+
if (!divisor) {
|
|
54
|
+
return; // Skip zero divisors
|
|
55
|
+
}
|
|
56
|
+
// Only consider keys that exist in both objects
|
|
57
|
+
const dividend = o1[kk];
|
|
58
|
+
if (dividend === undefined) {
|
|
59
|
+
return; // Skip keys that don't exist in dividend
|
|
44
60
|
}
|
|
45
|
-
|
|
46
|
-
const c =
|
|
61
|
+
hasValidDivisor = true;
|
|
62
|
+
const c = this.getDivisionResult(dividend, divisor);
|
|
47
63
|
if (min == null || c < min) {
|
|
48
64
|
min = c;
|
|
49
65
|
}
|
|
50
66
|
});
|
|
51
|
-
|
|
67
|
+
// If no valid divisors found, treat as division by empty/zero
|
|
68
|
+
if (!hasValidDivisor) {
|
|
69
|
+
return this.returnInfinityOnDivByEmpty ? Number.POSITIVE_INFINITY : 0;
|
|
70
|
+
}
|
|
71
|
+
const result = min ?? 0;
|
|
72
|
+
// Return Infinity only if configured to do so
|
|
73
|
+
if (!Number.isFinite(result) && !this.returnInfinityOnDivByEmpty) {
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
52
77
|
}
|
|
53
78
|
process(o, processor) {
|
|
54
79
|
if (!o) {
|
|
@@ -116,5 +141,22 @@ export class ObjectMath extends ObjectOps {
|
|
|
116
141
|
multiply(c1, c2) {
|
|
117
142
|
return this.calc(c1, c2, (n1, n2) => (n1 || 0) * (n2 || 0));
|
|
118
143
|
}
|
|
144
|
+
getDivisionResult(dividend, divisor) {
|
|
145
|
+
let result = dividend / divisor;
|
|
146
|
+
switch (this.divisionMethod) {
|
|
147
|
+
case 'floor':
|
|
148
|
+
result = Math.floor(result);
|
|
149
|
+
break;
|
|
150
|
+
case 'ceil':
|
|
151
|
+
result = Math.ceil(result);
|
|
152
|
+
break;
|
|
153
|
+
case 'round':
|
|
154
|
+
result = Math.round(result);
|
|
155
|
+
break;
|
|
156
|
+
default:
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
119
161
|
}
|
|
120
162
|
//# sourceMappingURL=math.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../../src/math/object/math.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC,MAAM,MAAM,GAAgB,QAAQ,CAAC;AAErC,MAAM,OAAO,UAA6B,SAAQ,SAAY;
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../../src/math/object/math.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { _getInnerValue, doOps } from './helpers.js';
|
|
2
2
|
export class CompositeObjectOps {
|
|
3
3
|
Empty;
|
|
4
|
-
|
|
4
|
+
innerOps;
|
|
5
5
|
constructor(innerOps) {
|
|
6
|
-
this.
|
|
6
|
+
this.innerOps = Object.entries(innerOps)
|
|
7
7
|
.map(pair => {
|
|
8
8
|
const result = {
|
|
9
9
|
key: pair[0],
|
|
@@ -14,16 +14,16 @@ export class CompositeObjectOps {
|
|
|
14
14
|
this.Empty = this.getEmpty();
|
|
15
15
|
}
|
|
16
16
|
isEmpty(o) {
|
|
17
|
-
return !o || this.
|
|
17
|
+
return !o || this.innerOps.every(op => op.ops.isEmpty(_getInnerValue(o, op.key)));
|
|
18
18
|
}
|
|
19
19
|
getEmpty() {
|
|
20
|
-
return doOps(this.
|
|
20
|
+
return doOps(this.innerOps, null, ops => ops.getEmpty());
|
|
21
21
|
}
|
|
22
22
|
clone(o) {
|
|
23
|
-
return doOps(this.
|
|
23
|
+
return doOps(this.innerOps, o);
|
|
24
24
|
}
|
|
25
25
|
isValid(o) {
|
|
26
|
-
return o != null && this.
|
|
26
|
+
return o != null && this.innerOps.every(op => op.ops.isValid(_getInnerValue(o, op.key)));
|
|
27
27
|
}
|
|
28
28
|
isEquals(a, b) {
|
|
29
29
|
if (!a && !b) {
|
|
@@ -32,10 +32,10 @@ export class CompositeObjectOps {
|
|
|
32
32
|
if (!a || !b) {
|
|
33
33
|
return false;
|
|
34
34
|
}
|
|
35
|
-
return this.
|
|
35
|
+
return this.innerOps.every(pair => pair.ops.isEquals(_getInnerValue(a, pair.key), _getInnerValue(b, pair.key)));
|
|
36
36
|
}
|
|
37
37
|
assign(to, other) {
|
|
38
|
-
this.
|
|
38
|
+
this.innerOps.forEach(pair => {
|
|
39
39
|
const val = _getInnerValue(other, pair.key);
|
|
40
40
|
if (val !== undefined) {
|
|
41
41
|
to[pair.key] = val;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops.composite.js","sourceRoot":"","sources":["../../../../src/math/object/ops.composite.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,kBAAkB;IAClB,KAAK,CAAc;
|
|
1
|
+
{"version":3,"file":"ops.composite.js","sourceRoot":"","sources":["../../../../src/math/object/ops.composite.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,kBAAkB;IAClB,KAAK,CAAc;IAET,QAAQ,CAAe;IAE1C,YAAY,QAAwB;QAEhC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;aACnC,GAAG,CAAC,IAAI,CAAC,EAAE;YACR,MAAM,MAAM,GAAe;gBACvB,GAAG,EAAE,IAAI,CAAC,CAAC,CAAS;gBACpB,GAAG,EAAE,IAAI,CAAC,CAAC,CAAwB;aACtC,CAAC;YACF,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;QAEP,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,CAA4B;QAChC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,QAAQ;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,CAA4B;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,CAA4B;QAChC,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,QAAQ,CAAC,CAA4B,EAAE,CAA4B;QAC/D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAChD,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAC3B,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAC9B,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAK,EAAE,KAAgC;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACvB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|
package/package.json
CHANGED
package/types/lazy/promise.d.ts
CHANGED
|
@@ -11,13 +11,16 @@ export declare class LazyPromise<T, TInitial extends T | undefined = undefined>
|
|
|
11
11
|
private _factory;
|
|
12
12
|
private readonly _initial;
|
|
13
13
|
private _instance;
|
|
14
|
-
|
|
14
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
15
|
+
private _state;
|
|
16
|
+
private _isAsyncStateChange;
|
|
15
17
|
private _promise;
|
|
16
18
|
private _expireTracker;
|
|
17
19
|
private _activeFactoryPromise;
|
|
18
20
|
private _error;
|
|
19
21
|
private _ownDisposer?;
|
|
20
22
|
constructor(factory: LazyFactory<T>, initial?: TInitial);
|
|
23
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
21
24
|
get isLoading(): boolean | null;
|
|
22
25
|
get hasValue(): boolean;
|
|
23
26
|
get error(): string | null;
|
|
@@ -27,6 +30,7 @@ export declare class LazyPromise<T, TInitial extends T | undefined = undefined>
|
|
|
27
30
|
get currentValue(): T | TInitial;
|
|
28
31
|
/** Configures automatic cache expiration using an expire tracker. */
|
|
29
32
|
withExpire(tracker: IExpireTracker | undefined): this;
|
|
33
|
+
withAsyncStateChange(enabled: boolean): this;
|
|
30
34
|
/**
|
|
31
35
|
* Extends this instance with additional functionality via in-place mutation.
|
|
32
36
|
*
|
|
@@ -76,9 +80,10 @@ export declare class LazyPromise<T, TInitial extends T | undefined = undefined>
|
|
|
76
80
|
refresh(): Promise<T>;
|
|
77
81
|
reset(): void;
|
|
78
82
|
dispose(): void;
|
|
79
|
-
|
|
83
|
+
private ensureInstanceLoading;
|
|
80
84
|
private startLoading;
|
|
81
85
|
protected onRejected(e: unknown): T | TInitial;
|
|
86
|
+
protected updateState(isLoading: boolean | null): void;
|
|
82
87
|
protected setError(err: unknown): void;
|
|
83
88
|
protected clearError(): void;
|
|
84
89
|
protected parseError(err: unknown): string;
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import type { AnyObject, Nullable } from '../../types/index.js';
|
|
2
2
|
import type { DeepReadonly } from '../../types/deep.js';
|
|
3
3
|
import { CompositeObjectOps } from './ops.composite.js';
|
|
4
|
-
import type { AbsOptions, IObjectMath, MathPairsMap, RoundOptions } from './types.js';
|
|
4
|
+
import type { AbsOptions, IObjectMath, MathPair, MathPairsMap, RoundOptions } from './types.js';
|
|
5
5
|
export declare class CompositeObjectMath<T extends AnyObject> extends CompositeObjectOps<T> implements IObjectMath<T> {
|
|
6
|
-
|
|
6
|
+
protected readonly innerMath: MathPair<T>[];
|
|
7
|
+
private returnInfinityOnDivByEmpty;
|
|
7
8
|
constructor(innerMath: MathPairsMap<T>);
|
|
9
|
+
useInfinityOnDivByEmpty(enable: boolean): this;
|
|
8
10
|
contains(base: Nullable<DeepReadonly<T>>, target: Nullable<DeepReadonly<T>>): boolean;
|
|
9
11
|
inverse(o: Nullable<DeepReadonly<T>>): T;
|
|
12
|
+
abs(o: DeepReadonly<T>, options?: AbsOptions): T;
|
|
10
13
|
abs(o: Nullable<DeepReadonly<T>>, options?: AbsOptions): T | null;
|
|
11
|
-
round(o:
|
|
14
|
+
round(o: DeepReadonly<T>, options?: RoundOptions): T;
|
|
15
|
+
round(o: Nullable<DeepReadonly<T>>, options?: RoundOptions): T | null;
|
|
12
16
|
add(o1: Nullable<DeepReadonly<T>>, o2: Nullable<DeepReadonly<T>>): T;
|
|
13
17
|
subtract(base: Nullable<DeepReadonly<T>>, amount: number | Nullable<DeepReadonly<T>>): T;
|
|
14
18
|
multiply(o1: Nullable<DeepReadonly<T>>, o2: number | Nullable<DeepReadonly<T>>): T;
|
|
15
|
-
div(o1: Nullable<DeepReadonly<T>>, o2: Nullable<number
|
|
19
|
+
div(o1: Nullable<DeepReadonly<T>>, o2: Nullable<number>): T;
|
|
20
|
+
div(o1: Nullable<DeepReadonly<T>>, o2: Nullable<DeepReadonly<T>>): number;
|
|
16
21
|
}
|
|
@@ -1,18 +1,25 @@
|
|
|
1
|
-
import type { Nullable } from '../../types/index.js';
|
|
2
1
|
import type { DeepReadonly, DeepReadonlyPartial } from '../../types/deep.js';
|
|
2
|
+
import type { Nullable } from '../../types/index.js';
|
|
3
3
|
import { ObjectOps } from './ops.js';
|
|
4
4
|
import type { AbsOptions, DELETE_TYPE, IObjectMath, NumKey, RoundOptions } from './types.js';
|
|
5
5
|
export declare class ObjectMath<T extends object> extends ObjectOps<T> implements IObjectMath<T> {
|
|
6
|
+
private returnInfinityOnDivByEmpty;
|
|
7
|
+
private divisionMethod;
|
|
8
|
+
useInfinityOnDivByEmpty(enable: boolean): this;
|
|
9
|
+
useDivisionMethod(method: RoundOptions | null): this;
|
|
6
10
|
getTotal(o: Nullable<DeepReadonlyPartial<T>>): number;
|
|
7
11
|
contains(base: Nullable<DeepReadonly<T>>, target: Nullable<DeepReadonly<T>>): boolean;
|
|
8
12
|
inverse(o: Nullable<DeepReadonly<T>>): T;
|
|
9
13
|
div(o1: Nullable<DeepReadonly<T>>, o2: Nullable<number>): T;
|
|
10
14
|
div(o1: Nullable<DeepReadonly<T>>, o2: Nullable<DeepReadonly<T>>): number;
|
|
11
15
|
process(o: Nullable<DeepReadonly<T>>, processor: (val: number, key: NumKey<T>) => number | DELETE_TYPE): T | null;
|
|
16
|
+
abs(c: DeepReadonly<T>, stripNegatives?: AbsOptions): T;
|
|
12
17
|
abs(c: Nullable<DeepReadonly<T>>, stripNegatives?: AbsOptions): T | null;
|
|
18
|
+
round(c: DeepReadonly<T>, method?: RoundOptions): T;
|
|
13
19
|
round(c: Nullable<DeepReadonly<T>>, method?: RoundOptions): T | null;
|
|
14
20
|
calc(c1: Nullable<DeepReadonly<T>>, c2: Nullable<DeepReadonly<T> | number>, operator: (n: number, n2: number) => number): T;
|
|
15
21
|
add(c1: Nullable<DeepReadonly<T>>, c2: Nullable<DeepReadonly<T> | number>): T;
|
|
16
22
|
subtract(base: Nullable<DeepReadonly<T>>, amount: Nullable<DeepReadonly<T> | number>): T;
|
|
17
23
|
multiply(c1: Nullable<DeepReadonly<T>>, c2: Nullable<DeepReadonly<T> | number>): T;
|
|
24
|
+
protected getDivisionResult(dividend: number, divisor: number): number;
|
|
18
25
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { AnyObject, Nullable } from '../../types/index.js';
|
|
2
2
|
import type { DeepReadonly } from '../../types/deep.js';
|
|
3
|
-
import type { IObjectOps, OpsPairsMap } from './types.js';
|
|
3
|
+
import type { IObjectOps, OpsPair, OpsPairsMap } from './types.js';
|
|
4
4
|
export declare class CompositeObjectOps<T extends AnyObject> implements IObjectOps<T> {
|
|
5
5
|
readonly Empty: Readonly<T>;
|
|
6
|
-
|
|
6
|
+
protected readonly innerOps: OpsPair<T>[];
|
|
7
7
|
constructor(innerOps: OpsPairsMap<T>);
|
|
8
8
|
isEmpty(o: Nullable<DeepReadonly<T>>): boolean;
|
|
9
9
|
getEmpty(): T;
|
|
@@ -15,12 +15,15 @@ export interface IObjectOps<T extends AnyObject> {
|
|
|
15
15
|
export interface IObjectMath<T extends AnyObject> extends IObjectOps<T> {
|
|
16
16
|
contains(base: Nullable<DeepReadonly<T>>, target: Nullable<DeepReadonly<T>>): boolean;
|
|
17
17
|
inverse(o: Nullable<DeepReadonly<T>>): T;
|
|
18
|
+
abs(o: DeepReadonly<T>, options?: AbsOptions): T;
|
|
18
19
|
abs(o: Nullable<DeepReadonly<T>>, options?: AbsOptions): T | null;
|
|
20
|
+
round(o: DeepReadonly<T>, options?: RoundOptions): T;
|
|
19
21
|
round(o: Nullable<DeepReadonly<T>>, options?: RoundOptions): T | null;
|
|
20
22
|
add(o1: Nullable<DeepReadonly<T>>, o2: Nullable<DeepReadonly<T>>): T;
|
|
21
23
|
subtract(base: Nullable<DeepReadonly<T>>, amount: Nullable<DeepReadonly<T> | number>): T;
|
|
22
24
|
multiply(o1: Nullable<DeepReadonly<T>>, o2: Nullable<DeepReadonly<T> | number>): T;
|
|
23
|
-
div(o1: Nullable<DeepReadonly<T>>, o2: Nullable<
|
|
25
|
+
div(o1: Nullable<DeepReadonly<T>>, o2: Nullable<number>): T;
|
|
26
|
+
div(o1: Nullable<DeepReadonly<T>>, o2: Nullable<DeepReadonly<T>>): number;
|
|
24
27
|
}
|
|
25
28
|
export type BasePair<T extends AnyObject, TKey extends string & keyof T = string & keyof T, TOps extends IObjectOps<T[TKey]> = IObjectOps<T[TKey]>> = {
|
|
26
29
|
key: TKey;
|