@actdim/utico 1.2.6 → 1.2.7
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/arrayExtensions.es.js +64 -38
- package/dist/arrayExtensions.es.js.map +1 -1
- package/dist/asyncLock.es.js +45 -30
- package/dist/asyncLock.es.js.map +1 -1
- package/dist/cache/cacheContracts.es.js +8 -4
- package/dist/cache/cacheContracts.es.js.map +1 -1
- package/dist/cache/memoryCache.es.js +28 -13
- package/dist/cache/memoryCache.es.js.map +1 -1
- package/dist/cache/persistentCache.es.js +174 -97
- package/dist/cache/persistentCache.es.js.map +1 -1
- package/dist/dataFormats.es.js +4 -4
- package/dist/dataFormats.es.js.map +1 -1
- package/dist/dateTimeDataFormat.es.js +211 -130
- package/dist/dateTimeDataFormat.es.js.map +1 -1
- package/dist/decorators.es.js +15 -11
- package/dist/decorators.es.js.map +1 -1
- package/dist/gfx/canvasUtils.es.js +197 -114
- package/dist/gfx/canvasUtils.es.js.map +1 -1
- package/dist/gfx/color.es.js +134 -68
- package/dist/gfx/color.es.js.map +1 -1
- package/dist/i18n/cultures.es.js +8 -8
- package/dist/i18n/cultures.es.js.map +1 -1
- package/dist/i18n/enUsCulture.es.js +2 -2
- package/dist/i18n/enUsCulture.es.js.map +1 -1
- package/dist/i18n/euCulture.es.js +2 -2
- package/dist/i18n/euCulture.es.js.map +1 -1
- package/dist/i18n/invariantCulture.es.js +2 -2
- package/dist/i18n/invariantCulture.es.js.map +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/math.es.js +14 -8
- package/dist/math.es.js.map +1 -1
- package/dist/metadata.es.js +53 -25
- package/dist/metadata.es.js.map +1 -1
- package/dist/patterns.es.js +5 -3
- package/dist/patterns.es.js.map +1 -1
- package/dist/store/dataStore.es.js +241 -157
- package/dist/store/dataStore.es.js.map +1 -1
- package/dist/store/persistentStore.es.js +23 -17
- package/dist/store/persistentStore.es.js.map +1 -1
- package/dist/store/storeContracts.es.js +7 -3
- package/dist/store/storeContracts.es.js.map +1 -1
- package/dist/store/storeDb.es.js +87 -50
- package/dist/store/storeDb.es.js.map +1 -1
- package/dist/stringCore.es.js +60 -22
- package/dist/stringCore.es.js.map +1 -1
- package/dist/structEvent.es.js +30 -17
- package/dist/structEvent.es.js.map +1 -1
- package/dist/typeCore.es.js +25 -11
- package/dist/typeCore.es.js.map +1 -1
- package/dist/typeUtils.es.js +292 -182
- package/dist/typeUtils.es.js.map +1 -1
- package/dist/utils.es.js +138 -84
- package/dist/utils.es.js.map +1 -1
- package/dist/watchable.es.js +50 -27
- package/dist/watchable.es.js.map +1 -1
- package/package.json +2 -2
package/dist/typeUtils.es.js
CHANGED
|
@@ -1,220 +1,330 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
function keysOf(obj) {
|
|
4
|
+
return Object.keys(obj);
|
|
5
|
+
}
|
|
6
|
+
__name(keysOf, "keysOf");
|
|
7
|
+
function entry(obj, name, caseInsensitive = true) {
|
|
8
|
+
if (!obj || !name) {
|
|
9
|
+
return void 0;
|
|
10
|
+
}
|
|
11
|
+
let nameStr = String(name).trim();
|
|
12
|
+
const keys = keysOf(obj);
|
|
13
|
+
let key;
|
|
14
|
+
if (caseInsensitive) {
|
|
15
|
+
nameStr = nameStr.toLowerCase();
|
|
16
|
+
key = keys.find((k) => String(k).toLowerCase().trim() === nameStr);
|
|
17
|
+
} else {
|
|
18
|
+
key = keys.find((k) => String(k).trim() === nameStr);
|
|
19
|
+
}
|
|
20
|
+
return [key, key == void 0 ? void 0 : obj[key]];
|
|
21
|
+
}
|
|
22
|
+
__name(entry, "entry");
|
|
23
|
+
function satisfies() {
|
|
24
|
+
return (obj) => obj;
|
|
25
|
+
}
|
|
26
|
+
__name(satisfies, "satisfies");
|
|
27
|
+
function strictSatisfies() {
|
|
28
|
+
return (u) => u;
|
|
29
|
+
}
|
|
30
|
+
__name(strictSatisfies, "strictSatisfies");
|
|
31
|
+
const keyOf = /* @__PURE__ */ __name((key, obj) => key, "keyOf");
|
|
32
|
+
function nameOf(f) {
|
|
33
|
+
const p = new Proxy(
|
|
21
34
|
{},
|
|
22
35
|
{
|
|
23
|
-
get: (
|
|
36
|
+
get: /* @__PURE__ */ __name((target, key) => key, "get")
|
|
24
37
|
}
|
|
25
38
|
);
|
|
26
|
-
return
|
|
39
|
+
return f(p);
|
|
27
40
|
}
|
|
28
|
-
|
|
29
|
-
|
|
41
|
+
__name(nameOf, "nameOf");
|
|
42
|
+
function getPropertyPath(expr) {
|
|
43
|
+
return getPropertyPathInternal(expr);
|
|
30
44
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
{},
|
|
36
|
-
{
|
|
37
|
-
get: (o, c) => (e.push(c), n())
|
|
38
|
-
}
|
|
39
|
-
), t(n()), e;
|
|
40
|
-
}
|
|
41
|
-
function J(t) {
|
|
42
|
-
const e = [];
|
|
43
|
-
for (const n of t)
|
|
44
|
-
e.push(`["${n.toString()}"]`);
|
|
45
|
-
return e.join("");
|
|
46
|
-
}
|
|
47
|
-
const O = [String, Number];
|
|
48
|
-
function P(t) {
|
|
49
|
-
return O.indexOf(t) >= 0;
|
|
50
|
-
}
|
|
51
|
-
function M(t) {
|
|
52
|
-
if (P(t))
|
|
53
|
-
return t;
|
|
54
|
-
{
|
|
55
|
-
let e = function(...n) {
|
|
56
|
-
return new t(...n);
|
|
57
|
-
};
|
|
58
|
-
return e.prototype = t.prototype, e;
|
|
45
|
+
__name(getPropertyPath, "getPropertyPath");
|
|
46
|
+
function getPropertyPathInternal(expr, path) {
|
|
47
|
+
if (path == void 0) {
|
|
48
|
+
path = [];
|
|
59
49
|
}
|
|
50
|
+
let createProxy;
|
|
51
|
+
createProxy = /* @__PURE__ */ __name(() => {
|
|
52
|
+
return new Proxy(
|
|
53
|
+
{},
|
|
54
|
+
{
|
|
55
|
+
get: /* @__PURE__ */ __name((target, key) => {
|
|
56
|
+
path.push(key);
|
|
57
|
+
return createProxy();
|
|
58
|
+
}, "get")
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
}, "createProxy");
|
|
62
|
+
expr(createProxy());
|
|
63
|
+
return path;
|
|
60
64
|
}
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
__name(getPropertyPathInternal, "getPropertyPathInternal");
|
|
66
|
+
function combinePropertyPath(path) {
|
|
67
|
+
const builder = [];
|
|
68
|
+
for (const key of path) {
|
|
69
|
+
builder.push(`["${key.toString()}"]`);
|
|
70
|
+
}
|
|
71
|
+
return builder.join("");
|
|
63
72
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
e.push(n);
|
|
69
|
-
return e;
|
|
73
|
+
__name(combinePropertyPath, "combinePropertyPath");
|
|
74
|
+
const nonObjectTypes = [String, Number];
|
|
75
|
+
function isNonObjectType(type) {
|
|
76
|
+
return nonObjectTypes.indexOf(type) >= 0;
|
|
70
77
|
}
|
|
71
|
-
|
|
78
|
+
__name(isNonObjectType, "isNonObjectType");
|
|
79
|
+
function createConstructor(type) {
|
|
80
|
+
if (isNonObjectType(type)) {
|
|
81
|
+
return type;
|
|
82
|
+
} else {
|
|
83
|
+
let createInstance = /* @__PURE__ */ __name(function(...args) {
|
|
84
|
+
return new type(...args);
|
|
85
|
+
}, "createInstance");
|
|
86
|
+
createInstance.prototype = type.prototype;
|
|
87
|
+
return createInstance;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
__name(createConstructor, "createConstructor");
|
|
91
|
+
function typed(ctor) {
|
|
92
|
+
return ctor;
|
|
93
|
+
}
|
|
94
|
+
__name(typed, "typed");
|
|
95
|
+
function getPrototypes(obj) {
|
|
96
|
+
const result = [];
|
|
97
|
+
let prototype;
|
|
98
|
+
while (true) {
|
|
99
|
+
prototype = Object.getPrototypeOf(prototype || obj);
|
|
100
|
+
if (!prototype) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
result.push(prototype);
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
__name(getPrototypes, "getPrototypes");
|
|
108
|
+
function proxify(source) {
|
|
72
109
|
return new Proxy(
|
|
73
110
|
{},
|
|
74
111
|
{
|
|
75
|
-
get:
|
|
76
|
-
|
|
112
|
+
get: /* @__PURE__ */ __name((target, key) => {
|
|
113
|
+
return Reflect.get(source(), key);
|
|
114
|
+
}, "get"),
|
|
115
|
+
set: /* @__PURE__ */ __name((target, key, value) => {
|
|
116
|
+
return Reflect.set(source(), key, value);
|
|
117
|
+
}, "set")
|
|
77
118
|
}
|
|
78
119
|
);
|
|
79
120
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
121
|
+
__name(proxify, "proxify");
|
|
122
|
+
function getEnumValue(enumType, name, defaultValue) {
|
|
123
|
+
let value = name ? enumType[name] : defaultValue;
|
|
124
|
+
if (value == void 0) {
|
|
125
|
+
value = defaultValue;
|
|
126
|
+
}
|
|
127
|
+
return value;
|
|
83
128
|
}
|
|
84
|
-
|
|
85
|
-
|
|
129
|
+
__name(getEnumValue, "getEnumValue");
|
|
130
|
+
function getEnumValues(enumType) {
|
|
131
|
+
return getEnumKeys(enumType).map((x) => enumType[x]);
|
|
86
132
|
}
|
|
87
|
-
|
|
88
|
-
|
|
133
|
+
__name(getEnumValues, "getEnumValues");
|
|
134
|
+
function getEnumKeys(enumType) {
|
|
135
|
+
return Object.keys(enumType).filter((x) => Number.isNaN(Number(x))).map((x) => x);
|
|
89
136
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
137
|
+
__name(getEnumKeys, "getEnumKeys");
|
|
138
|
+
function assignWith(dst, src, callback) {
|
|
139
|
+
const result = dst;
|
|
140
|
+
if (src) {
|
|
141
|
+
for (const key in src) {
|
|
142
|
+
let value = src[key];
|
|
143
|
+
const set = /* @__PURE__ */ __name((v) => {
|
|
144
|
+
Reflect.set(result, key, v);
|
|
145
|
+
}, "set");
|
|
146
|
+
if (callback) {
|
|
147
|
+
callback(key, value, set);
|
|
148
|
+
}
|
|
98
149
|
}
|
|
99
|
-
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
100
152
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
153
|
+
__name(assignWith, "assignWith");
|
|
154
|
+
function update(dst, src, props) {
|
|
155
|
+
const propSet = new Set(props);
|
|
156
|
+
return assignWith(dst, src, (key, value, set) => {
|
|
157
|
+
if (!propSet.size || propSet.has(key)) {
|
|
158
|
+
set(value);
|
|
159
|
+
}
|
|
105
160
|
});
|
|
106
161
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
function H(t) {
|
|
131
|
-
const e = typeof t;
|
|
132
|
-
if (e !== "object")
|
|
133
|
-
throw new Error(`Unsupported object type: ${e}`);
|
|
134
|
-
return t && JSON.parse(JSON.stringify(t));
|
|
135
|
-
}
|
|
136
|
-
const N = Symbol("__lock");
|
|
137
|
-
function U(t, e = !1) {
|
|
138
|
-
return p(t, e);
|
|
139
|
-
}
|
|
140
|
-
function p(t, e = !1, n) {
|
|
141
|
-
if (typeof t != "object" || !t)
|
|
142
|
-
return t;
|
|
143
|
-
let o = !0;
|
|
144
|
-
n || (n = () => o);
|
|
145
|
-
const c = new Proxy(t, {
|
|
146
|
-
get: (i, f, r) => {
|
|
147
|
-
if (Reflect.has(i, f))
|
|
148
|
-
return p(i[f], e, n);
|
|
149
|
-
},
|
|
150
|
-
set: (i, f, r, u) => {
|
|
151
|
-
if (n()) {
|
|
152
|
-
if (e)
|
|
153
|
-
throw new Error("Cannot set the value of read-only property");
|
|
154
|
-
return !0;
|
|
155
|
-
} else
|
|
156
|
-
return Reflect.set(i, f, r);
|
|
162
|
+
__name(update, "update");
|
|
163
|
+
function copy(src, dst, props) {
|
|
164
|
+
return update(dst, src, props);
|
|
165
|
+
}
|
|
166
|
+
__name(copy, "copy");
|
|
167
|
+
function isPlainObject(val) {
|
|
168
|
+
if (val === null || typeof val !== "object") return false;
|
|
169
|
+
const proto = Object.getPrototypeOf(val);
|
|
170
|
+
return proto === Object.prototype || proto === null;
|
|
171
|
+
}
|
|
172
|
+
__name(isPlainObject, "isPlainObject");
|
|
173
|
+
const sort = /* @__PURE__ */ (() => {
|
|
174
|
+
const noKeys = [];
|
|
175
|
+
function sortImpl(obj, keyCompareFn) {
|
|
176
|
+
const keys = obj ? Object.keys(obj) : noKeys;
|
|
177
|
+
if (keyCompareFn) {
|
|
178
|
+
keyCompareFn = /* @__PURE__ */ __name((a, b) => b.localeCompare(a), "keyCompareFn");
|
|
179
|
+
}
|
|
180
|
+
const orderedKeys = keys.sort(keyCompareFn);
|
|
181
|
+
const container = {};
|
|
182
|
+
for (const key of orderedKeys) {
|
|
183
|
+
container[key] = isPlainObject(obj[key]) ? sortImpl(obj[key]) : obj[key];
|
|
157
184
|
}
|
|
185
|
+
return container;
|
|
186
|
+
}
|
|
187
|
+
__name(sortImpl, "sortImpl");
|
|
188
|
+
return sortImpl;
|
|
189
|
+
})();
|
|
190
|
+
const orderedStringify = /* @__PURE__ */ (() => {
|
|
191
|
+
return (obj, keyCompareFn, replacer, space) => {
|
|
192
|
+
return JSON.stringify(sort(obj, keyCompareFn), replacer, space);
|
|
193
|
+
};
|
|
194
|
+
})();
|
|
195
|
+
function jsonEquals(obj1, obj2) {
|
|
196
|
+
return orderedStringify(obj1) === orderedStringify(obj2);
|
|
197
|
+
}
|
|
198
|
+
__name(jsonEquals, "jsonEquals");
|
|
199
|
+
function jsonClone(obj) {
|
|
200
|
+
const type = typeof obj;
|
|
201
|
+
if (type !== "object") {
|
|
202
|
+
throw new Error(`Unsupported object type: ${type}`);
|
|
203
|
+
}
|
|
204
|
+
if (!obj) {
|
|
205
|
+
return obj;
|
|
206
|
+
}
|
|
207
|
+
return JSON.parse(JSON.stringify(obj));
|
|
208
|
+
}
|
|
209
|
+
__name(jsonClone, "jsonClone");
|
|
210
|
+
const $lock = Symbol("__lock");
|
|
211
|
+
function toReadOnly(obj, throwOnSet = false) {
|
|
212
|
+
return toReadOnlyInternal(obj, throwOnSet);
|
|
213
|
+
}
|
|
214
|
+
__name(toReadOnly, "toReadOnly");
|
|
215
|
+
function toReadOnlyInternal(obj, throwOnSet = false, lockTest) {
|
|
216
|
+
if (typeof obj !== "object" || !obj) {
|
|
217
|
+
return obj;
|
|
218
|
+
}
|
|
219
|
+
let locked = true;
|
|
220
|
+
if (!lockTest) {
|
|
221
|
+
lockTest = /* @__PURE__ */ __name(() => locked, "lockTest");
|
|
222
|
+
}
|
|
223
|
+
const result = new Proxy(obj, {
|
|
224
|
+
get: /* @__PURE__ */ __name((target, property, receiver) => {
|
|
225
|
+
if (Reflect.has(target, property)) {
|
|
226
|
+
return toReadOnlyInternal(target[property], throwOnSet, lockTest);
|
|
227
|
+
}
|
|
228
|
+
return void 0;
|
|
229
|
+
}, "get"),
|
|
230
|
+
set: /* @__PURE__ */ __name((target, property, value, receiver) => {
|
|
231
|
+
if (lockTest()) {
|
|
232
|
+
if (throwOnSet) {
|
|
233
|
+
throw new Error("Cannot set the value of read-only property");
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
} else {
|
|
237
|
+
return Reflect.set(target, property, value);
|
|
238
|
+
}
|
|
239
|
+
}, "set")
|
|
158
240
|
});
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
}
|
|
241
|
+
obj[$lock] = (l) => {
|
|
242
|
+
locked = l;
|
|
243
|
+
};
|
|
244
|
+
return result;
|
|
162
245
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
246
|
+
__name(toReadOnlyInternal, "toReadOnlyInternal");
|
|
247
|
+
function createDeepProxy(target, handler) {
|
|
248
|
+
const proxyMap = /* @__PURE__ */ new WeakMap();
|
|
249
|
+
const cache = /* @__PURE__ */ new WeakMap();
|
|
250
|
+
function makeHandler(path) {
|
|
166
251
|
return {
|
|
167
|
-
set(
|
|
168
|
-
|
|
252
|
+
set(target2, propertyKey, value, receiver) {
|
|
253
|
+
if (typeof value === "object") {
|
|
254
|
+
value = proxify2(value, [...path, propertyKey]);
|
|
255
|
+
}
|
|
256
|
+
target2[propertyKey] = value;
|
|
257
|
+
if (handler.set) {
|
|
258
|
+
handler.set(target2, [...path, propertyKey], value, receiver);
|
|
259
|
+
}
|
|
260
|
+
return true;
|
|
169
261
|
},
|
|
170
|
-
deleteProperty(
|
|
171
|
-
if (Reflect.has(
|
|
172
|
-
|
|
173
|
-
let
|
|
174
|
-
|
|
262
|
+
deleteProperty(target2, propertyKey) {
|
|
263
|
+
if (Reflect.has(target2, propertyKey)) {
|
|
264
|
+
unproxy(target2, propertyKey);
|
|
265
|
+
let deleted = Reflect.deleteProperty(target2, propertyKey);
|
|
266
|
+
if (deleted && handler.deleteProperty) {
|
|
267
|
+
handler.deleteProperty(target2, [...path, propertyKey]);
|
|
268
|
+
}
|
|
269
|
+
return deleted;
|
|
175
270
|
}
|
|
176
|
-
return
|
|
271
|
+
return true;
|
|
177
272
|
}
|
|
178
273
|
};
|
|
179
274
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
275
|
+
__name(makeHandler, "makeHandler");
|
|
276
|
+
function unproxy(obj, key) {
|
|
277
|
+
if (proxyMap.has(obj[key])) {
|
|
278
|
+
obj[key] = proxyMap.get(obj[key]);
|
|
279
|
+
proxyMap.delete(obj[key]);
|
|
280
|
+
}
|
|
281
|
+
for (let k of Object.keys(obj[key])) {
|
|
282
|
+
if (typeof obj[key][k] === "object") {
|
|
283
|
+
unproxy(obj[key], k);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
184
286
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
287
|
+
__name(unproxy, "unproxy");
|
|
288
|
+
function proxify2(obj, path) {
|
|
289
|
+
if (cache.has(obj)) return cache.get(obj);
|
|
290
|
+
for (let key of Object.keys(obj)) {
|
|
291
|
+
if (typeof obj[key] === "object") {
|
|
292
|
+
obj[key] = proxify2(obj[key], [...path, key]);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
let p = new Proxy(obj, makeHandler(path));
|
|
296
|
+
proxyMap.set(p, obj);
|
|
297
|
+
cache.set(obj, p);
|
|
298
|
+
return p;
|
|
191
299
|
}
|
|
192
|
-
|
|
300
|
+
__name(proxify2, "proxify2");
|
|
301
|
+
return proxify2(target, []);
|
|
193
302
|
}
|
|
303
|
+
__name(createDeepProxy, "createDeepProxy");
|
|
194
304
|
export {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
305
|
+
assignWith,
|
|
306
|
+
combinePropertyPath,
|
|
307
|
+
copy,
|
|
308
|
+
createConstructor,
|
|
309
|
+
createDeepProxy,
|
|
310
|
+
entry,
|
|
311
|
+
getEnumKeys,
|
|
312
|
+
getEnumValue,
|
|
313
|
+
getEnumValues,
|
|
314
|
+
getPropertyPath,
|
|
315
|
+
getPrototypes,
|
|
316
|
+
isPlainObject,
|
|
317
|
+
jsonClone,
|
|
318
|
+
jsonEquals,
|
|
319
|
+
keyOf,
|
|
320
|
+
keysOf,
|
|
321
|
+
nameOf,
|
|
322
|
+
orderedStringify,
|
|
323
|
+
proxify,
|
|
324
|
+
satisfies,
|
|
325
|
+
strictSatisfies,
|
|
326
|
+
toReadOnly,
|
|
327
|
+
typed,
|
|
328
|
+
update
|
|
219
329
|
};
|
|
220
330
|
//# sourceMappingURL=typeUtils.es.js.map
|
package/dist/typeUtils.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeUtils.es.js","sources":["D:/Src/my/actdim/public/utico/src/typeUtils.ts"],"sourcesContent":null,"names":["keysOf","obj","entry","name","caseInsensitive","nameStr","keys","key","k","satisfies","strictSatisfies","u","keyOf","nameOf","f","p","target","getPropertyPath","expr","getPropertyPathInternal","path","createProxy","combinePropertyPath","builder","nonObjectTypes","isNonObjectType","type","createConstructor","createInstance","args","typed","ctor","getPrototypes","result","prototype","proxify","source","value","getEnumValue","enumType","defaultValue","getEnumValues","getEnumKeys","x","assignWith","dst","src","callback","v","update","props","propSet","set","copy","isPlainObject","val","proto","sort","noKeys","sortImpl","keyCompareFn","a","b","orderedKeys","container","orderedStringify","replacer","space","jsonEquals","obj1","obj2","jsonClone","$lock","toReadOnly","throwOnSet","toReadOnlyInternal","lockTest","locked","property","receiver","l","createDeepProxy","handler","proxyMap","cache","makeHandler","propertyKey","unproxy","deleted"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"typeUtils.es.js","sources":["D:/Src/my/actdim/public/utico/src/typeUtils.ts"],"sourcesContent":["import { CallableConstructor, Constructor, ConstructorClass } from \"./typeCore\";\r\n\r\n// @filename: typeUtils.ts\r\n\r\n// typed version of Object.keys\r\nexport function keysOf<T extends object>(obj: T) {\r\n return Object.keys(obj) as Array<keyof T>;\r\n}\r\n\r\nexport function entry<T extends object, TKey extends keyof T>(obj: T, name: TKey, caseInsensitive = true) {\r\n if (!obj || !name) {\r\n return undefined;\r\n }\r\n // name.toString()\r\n let nameStr = String(name).trim();\r\n const keys = keysOf(obj);\r\n let key: keyof T;\r\n if (caseInsensitive) {\r\n nameStr = nameStr.toLowerCase();\r\n key = keys.find((k) => String(k).toLowerCase().trim() === nameStr);\r\n } else {\r\n key = keys.find((k) => String(k).trim() === nameStr);\r\n }\r\n return [key, key == undefined ? undefined : (obj[key] as T[TKey])] as [TKey, T[TKey]];\r\n}\r\n\r\nexport function satisfies<TShape>() {\r\n return <T extends TShape>(obj: T) => obj;\r\n}\r\n/** check also const strict = <T>() => <U extends T>(u: U & { [K in Exclude<keyof U, keyof T>]: never }) => u;\r\n */\r\nexport function strictSatisfies<T>() {\r\n return <U extends T>(u: U & Record<Exclude<keyof U, keyof T>, never>) => u;\r\n}\r\n\r\nexport const keyOf = <T extends object, TKey extends keyof T = keyof T>(key: TKey, obj?: T) => key;\r\n\r\nexport function nameOf<T extends object>(f: (x: T) => T[keyof T]): keyof T;\r\nexport function nameOf(f: (x: any) => any): keyof any {\r\n const p = new Proxy(\r\n {},\r\n {\r\n get: (target, key) => key\r\n }\r\n );\r\n return f(p);\r\n}\r\n\r\nexport function getPropertyPath<T>(expr: (x: T) => any) {\r\n return getPropertyPathInternal(expr);\r\n}\r\n\r\nfunction getPropertyPathInternal<T>(expr: (x: T) => any, path?: (string | number | symbol)[]) {\r\n if (path == undefined) {\r\n path = [];\r\n }\r\n let createProxy: () => any;\r\n createProxy = () => {\r\n return new Proxy(\r\n {},\r\n {\r\n get: (target, key) => {\r\n path.push(key);\r\n return createProxy();\r\n }\r\n }\r\n );\r\n };\r\n expr(createProxy());\r\n return path;\r\n}\r\n\r\nexport function combinePropertyPath(path?: (string | number | symbol)[]) {\r\n const builder: string[] = [];\r\n for (const key of path) {\r\n builder.push(`[\"${key.toString()}\"]`);\r\n }\r\n return builder.join(\"\");\r\n}\r\n\r\nconst nonObjectTypes: Constructor[] = [String, Number];\r\n\r\n// isNonObjectCtor\r\nfunction isNonObjectType<TConstructor extends Constructor>(type: TConstructor) {\r\n return nonObjectTypes.indexOf(type) >= 0;\r\n}\r\n\r\n// getConstructor\r\nexport function createConstructor<TConstructor extends Constructor>(\r\n type: TConstructor // ctor\r\n): CallableConstructor<TConstructor> {\r\n if (isNonObjectType(type)) {\r\n return type as CallableConstructor<TConstructor>;\r\n } else {\r\n function createInstance(...args: ConstructorParameters<TConstructor>): ConstructorClass<TConstructor> {\r\n // return Reflect.construct(type, args); // works too\r\n return new type(...args);\r\n }\r\n\r\n createInstance.prototype = type.prototype;\r\n return createInstance as CallableConstructor<TConstructor>;\r\n }\r\n}\r\n\r\nexport function typed<TCtor extends Constructor>(ctor: TCtor) {\r\n return ctor as CallableConstructor<TCtor>;\r\n}\r\n\r\nexport function getPrototypes(obj: any) {\r\n const result = [];\r\n let prototype;\r\n while (true) {\r\n prototype = Object.getPrototypeOf(prototype || obj);\r\n if (!prototype) {\r\n break;\r\n }\r\n result.push(prototype);\r\n }\r\n return result;\r\n}\r\n\r\nexport function proxify<T extends object>(source: () => T): T {\r\n return new Proxy(\r\n {},\r\n {\r\n get: (target, key) => {\r\n return Reflect.get(source(), key);\r\n // return source()[key];\r\n },\r\n set: (target, key, value) => {\r\n return Reflect.set(source(), key, value);\r\n // source()[key] = value;\r\n // return true;\r\n }\r\n }\r\n ) as T;\r\n}\r\n\r\nexport function getEnumValue<T>(enumType: T, name: string, defaultValue: T[keyof T]): T[keyof T] {\r\n let value = name ? enumType[name as keyof T] : defaultValue;\r\n if (value == undefined) {\r\n value = defaultValue;\r\n }\r\n return value;\r\n}\r\n\r\nexport function getEnumValues<T extends object, K extends keyof T>(enumType: T): Array<T[K]> {\r\n return getEnumKeys<T, K>(enumType).map((x) => enumType[x]);\r\n}\r\n\r\nexport function getEnumKeys<T extends object, K extends keyof T>(enumType: T): Array<K> {\r\n return Object.keys(enumType)\r\n .filter((x) => Number.isNaN(Number(x)))\r\n .map((x) => x as K);\r\n}\r\n\r\n// conditional assign with value factory\r\nexport function assignWith<T extends object, U extends object>(\r\n dst: T,\r\n src: U,\r\n callback?: (key: keyof U, value: U[keyof U], set: (value: U[keyof U]) => void) => any\r\n): T & Partial<U> {\r\n const result: T & Partial<U> = dst;\r\n if (src) {\r\n for (const key in src) {\r\n let value = src[key];\r\n const set = (v: U[keyof U]) => {\r\n // result[key as PropertyKey] = value;\r\n Reflect.set(result, key, v);\r\n };\r\n if (callback) {\r\n callback(key, value, set);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n// constrained and typed assign\r\nexport function update<T extends object, U extends Partial<T>>(dst: T, src: U, props?: [keyof U]): T & Partial<U> {\r\n const propSet = new Set(props);\r\n\r\n return assignWith(dst, src, (key, value, set) => {\r\n if (!propSet.size || propSet.has(key)) {\r\n set(value);\r\n }\r\n });\r\n\r\n // for (const prop of props) {\r\n // // dst[prop as PropertyKey] = src[prop];\r\n // Reflect.set(dst, prop, src[prop]);\r\n // }\r\n // return dst;\r\n}\r\n\r\nexport function copy<T extends object, U extends object>(src: T, dst: U, props?: [keyof T]): U & Partial<T> {\r\n return update(dst, src, props);\r\n}\r\n\r\n// \"val is Record<string, unknown>\" is better type guard than \"val is object\"\r\n// \"Object.prototype.toString.call(val) !== '[object Object]'\" is not safe\r\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\r\n if (val === null || typeof val !== 'object') return false;\r\n const proto = Object.getPrototypeOf(val);\r\n return proto === Object.prototype || proto === null;\r\n}\r\n\r\nconst sort = (() => {\r\n // It relies on Chrome's and Node's behaviour that the first key assigned to an object is outputted first by JSON.stringify.\r\n const noKeys = []; // emptyKeys\r\n function sortImpl(obj: any, keyCompareFn?: (a: string, b: string) => number) {\r\n const keys = obj ? Object.keys(obj) : noKeys;\r\n // const orderedKeys = desc ? keys.orderByDesc(k => k) : keys.orderBy(k => k);\r\n if (keyCompareFn) {\r\n // array sort method without compare function produces ascending but alphabetical, lexicographic (dictionary) order\r\n keyCompareFn = (a, b) => b.localeCompare(a);\r\n }\r\n const orderedKeys = keys.sort(keyCompareFn);\r\n // result\r\n const container = {}; // sortedObj\r\n for (const key of orderedKeys) {\r\n container[key] = isPlainObject(obj[key]) ? sortImpl(obj[key]) : obj[key];\r\n }\r\n return container;\r\n }\r\n return sortImpl;\r\n})();\r\n\r\n// stableStringify\r\nexport const orderedStringify = (() => {\r\n // https://www.gangofcoders.net/solution/sort-object-properties-and-json-stringify/\r\n // see also: https://www.npmjs.com/package/json-stable-stringify\r\n return (\r\n obj: any,\r\n keyCompareFn?: (a: string, b: string) => number,\r\n replacer?: (this: any, key: string, value: any) => any,\r\n // replacer?: (number | string)[] | null,\r\n space?: string | number\r\n ) => {\r\n return JSON.stringify(sort(obj, keyCompareFn), replacer, space);\r\n };\r\n})();\r\n\r\n// structural comparison helper\r\nexport function jsonEquals<T>(obj1: T, obj2: T) {\r\n // contentEquals\r\n return orderedStringify(obj1) === orderedStringify(obj2);\r\n}\r\n\r\n/** structuredClone alternative */\r\nexport function jsonClone<T extends object>(obj: T): T {\r\n const type = typeof obj;\r\n if (type !== \"object\") {\r\n throw new Error(`Unsupported object type: ${type}`);\r\n }\r\n if (!obj) {\r\n return obj;\r\n }\r\n return JSON.parse(JSON.stringify(obj));\r\n}\r\n\r\n// freeze\r\nconst $lock = Symbol(\"__lock\");\r\n\r\n// IFreezable\r\nexport type ILockable<T = any> = Readonly<T> & { [$lock]?: (locked: boolean) => void };\r\n\r\n// deepFreeze/lock\r\nexport function toReadOnly<T extends object>(obj: T, throwOnSet: boolean = false): ILockable<T> {\r\n return toReadOnlyInternal(obj, throwOnSet);\r\n}\r\n\r\nfunction toReadOnlyInternal<T extends object>(obj: T, throwOnSet: boolean = false, lockTest?: () => boolean): ILockable<T> {\r\n if (typeof obj !== \"object\" || !obj) {\r\n return obj;\r\n }\r\n\r\n let locked = true;\r\n if (!lockTest) {\r\n lockTest = () => locked;\r\n }\r\n\r\n const result = new Proxy(obj, {\r\n get: (target, property, receiver) => {\r\n // property in target\r\n if (Reflect.has(target, property)) {\r\n // Reflect.get(target, property)\r\n return toReadOnlyInternal(target[property], throwOnSet, lockTest);\r\n }\r\n return undefined;\r\n },\r\n set: (target, property, value, receiver) => {\r\n if (lockTest()) {\r\n if (throwOnSet) {\r\n throw new Error(\"Cannot set the value of read-only property\"); // read-only object\r\n }\r\n // return false; // will throw a TypeError exception in strict mode\r\n return true;\r\n } else {\r\n // target[property] = value;\r\n return Reflect.set(target, property, value);\r\n }\r\n }\r\n });\r\n\r\n obj[$lock] = (l: boolean) => {\r\n locked = l;\r\n };\r\n return result as Readonly<T> & { [$lock]: (locked: boolean) => void };\r\n}\r\n\r\nexport type DeepPropertyKey = PropertyKey[];\r\n\r\nexport interface DeepProxyHandler<T extends object> {\r\n // getPrototypeOf?(target: T): object | null;\r\n // setPrototypeOf?(target: T, v: any): boolean;\r\n // isExtensible?(target: T): boolean;\r\n // preventExtensions?(target: T): boolean;\r\n // getOwnPropertyDescriptor?(target: T, p: DeepPropertyKey): PropertyDescriptor | undefined;\r\n // has?(target: T, p: DeepPropertyKey): boolean;\r\n // get?(target: T, p: DeepPropertyKey, receiver: any): any;\r\n set?(target: T, p: DeepPropertyKey, value: any, receiver: any): boolean;\r\n\r\n deleteProperty?(target: T, p: DeepPropertyKey): boolean;\r\n\r\n // defineProperty?(target: T, p: DeepPropertyKey, attributes: PropertyDescriptor): boolean;\r\n // enumerate?(target: T): DeepPropertyKey[];\r\n // ownKeys?(target: T): DeepPropertyKey[];\r\n // apply?(target: T, thisArg: any, argArray?: any): any; // assign\r\n // construct?(target: T, argArray: any, newTarget?: any): object;\r\n}\r\n\r\nexport function createDeepProxy<T extends object>(target: T, handler: DeepProxyHandler<T>) {\r\n const proxyMap = new WeakMap(); // proxy → original\r\n const cache = new WeakMap(); // original → proxy\r\n\r\n function makeHandler(path: DeepPropertyKey) {\r\n return {\r\n set(target: any, propertyKey: PropertyKey, value: any, receiver) {\r\n if (typeof value === \"object\") {\r\n value = proxify(value, [...path, propertyKey]);\r\n }\r\n target[propertyKey] = value;\r\n\r\n if (handler.set) {\r\n handler.set(target, [...path, propertyKey], value, receiver);\r\n }\r\n return true;\r\n },\r\n\r\n deleteProperty(target: any, propertyKey: PropertyKey) {\r\n if (Reflect.has(target, propertyKey)) {\r\n unproxy(target, propertyKey);\r\n let deleted = Reflect.deleteProperty(target, propertyKey);\r\n if (deleted && handler.deleteProperty) {\r\n handler.deleteProperty(target, [...path, propertyKey]);\r\n }\r\n return deleted;\r\n }\r\n return true;\r\n }\r\n };\r\n }\r\n\r\n function unproxy(obj: any, key: PropertyKey) {\r\n if (proxyMap.has(obj[key])) {\r\n // console.log('unproxy',key);\r\n obj[key] = proxyMap.get(obj[key]);\r\n proxyMap.delete(obj[key]);\r\n }\r\n\r\n for (let k of Object.keys(obj[key])) {\r\n if (typeof obj[key][k] === \"object\") {\r\n unproxy(obj[key], k);\r\n }\r\n }\r\n }\r\n\r\n function proxify(obj: any, path: DeepPropertyKey) {\r\n if (cache.has(obj)) return cache.get(obj);\r\n for (let key of Object.keys(obj)) {\r\n if (typeof obj[key] === \"object\") {\r\n obj[key] = proxify(obj[key], [...path, key]);\r\n }\r\n }\r\n let p = new Proxy(obj, makeHandler(path));\r\n proxyMap.set(p, obj);\r\n cache.set(obj, p);\r\n return p;\r\n }\r\n\r\n return proxify(target, []);\r\n}\r\n"],"names":["target","proxify"],"mappings":"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"}
|