@tspro/ts-utils-lib 1.1.0 → 1.3.0
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/CHANGELOG.md +8 -0
- package/dist/index.d.mts +119 -72
- package/dist/index.d.ts +119 -72
- package/dist/index.js +130 -30
- package/dist/index.mjs +130 -30
- package/package.json +12 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* TsUtilsLib v1.0
|
|
1
|
+
/* TsUtilsLib v1.3.0 | (c) 2023 PahkaSoft | Licensed under the MIT License */
|
|
2
2
|
"use strict";
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -29,26 +29,27 @@ __export(index_exports, {
|
|
|
29
29
|
LRUCache: () => LRUCache,
|
|
30
30
|
SmallIntCache: () => SmallIntCache,
|
|
31
31
|
Stack: () => Stack,
|
|
32
|
-
Utils: () =>
|
|
32
|
+
Utils: () => utils_exports,
|
|
33
33
|
Vec2: () => Vec2
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(index_exports);
|
|
36
36
|
|
|
37
|
-
// src/
|
|
38
|
-
var
|
|
39
|
-
__export(
|
|
40
|
-
Arr: () =>
|
|
37
|
+
// src/utils/index.ts
|
|
38
|
+
var utils_exports = {};
|
|
39
|
+
__export(utils_exports, {
|
|
40
|
+
Arr: () => arr_exports,
|
|
41
41
|
Dom: () => dom_exports,
|
|
42
42
|
Enum: () => enum_exports,
|
|
43
|
+
Is: () => is_exports,
|
|
43
44
|
Map: () => map_exports,
|
|
44
45
|
Math: () => math_exports,
|
|
45
|
-
Obj: () =>
|
|
46
|
-
Str: () =>
|
|
46
|
+
Obj: () => obj_exports,
|
|
47
|
+
Str: () => str_exports
|
|
47
48
|
});
|
|
48
49
|
|
|
49
|
-
// src/
|
|
50
|
-
var
|
|
51
|
-
__export(
|
|
50
|
+
// src/utils/arr/index.ts
|
|
51
|
+
var arr_exports = {};
|
|
52
|
+
__export(arr_exports, {
|
|
52
53
|
arrayContains: () => arrayContains,
|
|
53
54
|
chunckArray: () => chunckArray,
|
|
54
55
|
duplicate: () => duplicate,
|
|
@@ -63,7 +64,7 @@ __export(array_exports, {
|
|
|
63
64
|
toArray: () => toArray
|
|
64
65
|
});
|
|
65
66
|
|
|
66
|
-
// src/math/index.ts
|
|
67
|
+
// src/utils/math/index.ts
|
|
67
68
|
var math_exports = {};
|
|
68
69
|
__export(math_exports, {
|
|
69
70
|
calcNormal: () => calcNormal,
|
|
@@ -181,7 +182,7 @@ function sum(arr) {
|
|
|
181
182
|
return arr.reduce((prev, cur) => cur + prev, 0);
|
|
182
183
|
}
|
|
183
184
|
|
|
184
|
-
// src/
|
|
185
|
+
// src/utils/arr/index.ts
|
|
185
186
|
function isArray(a) {
|
|
186
187
|
return !!a && Object.prototype.toString.call(a) === "[object Array]";
|
|
187
188
|
}
|
|
@@ -247,7 +248,7 @@ function chunckArray(arr, chunckSize) {
|
|
|
247
248
|
return result;
|
|
248
249
|
}
|
|
249
250
|
|
|
250
|
-
// src/dom/index.ts
|
|
251
|
+
// src/utils/dom/index.ts
|
|
251
252
|
var dom_exports = {};
|
|
252
253
|
__export(dom_exports, {
|
|
253
254
|
addClass: () => addClass,
|
|
@@ -271,6 +272,15 @@ __export(dom_exports, {
|
|
|
271
272
|
styleLayoutChanged: () => styleLayoutChanged
|
|
272
273
|
});
|
|
273
274
|
|
|
275
|
+
// src/utils/enum/index.ts
|
|
276
|
+
var enum_exports = {};
|
|
277
|
+
__export(enum_exports, {
|
|
278
|
+
getEnumValues: () => getEnumValues
|
|
279
|
+
});
|
|
280
|
+
function getEnumValues(e) {
|
|
281
|
+
return Object.keys(e).filter((key) => Number.isNaN(Number(key))).map((key) => e[key]);
|
|
282
|
+
}
|
|
283
|
+
|
|
274
284
|
// src/modules/assert.ts
|
|
275
285
|
var Assert;
|
|
276
286
|
((Assert2) => {
|
|
@@ -294,6 +304,12 @@ var Assert;
|
|
|
294
304
|
}
|
|
295
305
|
}
|
|
296
306
|
Assert2.assert = assert;
|
|
307
|
+
function assertEnum(value, enumObj, name = "value") {
|
|
308
|
+
if (!getEnumValues(enumObj).some((v) => v === value)) {
|
|
309
|
+
throw new TypeError(`Invalid ${name} enum value: ${value}`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
Assert2.assertEnum = assertEnum;
|
|
297
313
|
function interrupt(userMsg) {
|
|
298
314
|
throwError(userMsg ?? "Interrupted!");
|
|
299
315
|
}
|
|
@@ -516,7 +532,7 @@ var Device;
|
|
|
516
532
|
Device2.toPx = toPx2;
|
|
517
533
|
})(Device || (Device = {}));
|
|
518
534
|
|
|
519
|
-
// src/dom/index.ts
|
|
535
|
+
// src/utils/dom/index.ts
|
|
520
536
|
function toPx(value) {
|
|
521
537
|
return value === void 0 ? void 0 : Device.toPx(value);
|
|
522
538
|
}
|
|
@@ -684,16 +700,100 @@ function getCanvasTextWidth(text, font) {
|
|
|
684
700
|
return ctx.measureText(text).width;
|
|
685
701
|
}
|
|
686
702
|
|
|
687
|
-
// src/
|
|
688
|
-
var
|
|
689
|
-
__export(
|
|
690
|
-
|
|
703
|
+
// src/utils/is/index.ts
|
|
704
|
+
var is_exports = {};
|
|
705
|
+
__export(is_exports, {
|
|
706
|
+
isArray: () => isArray2,
|
|
707
|
+
isArrayOrUndefined: () => isArrayOrUndefined,
|
|
708
|
+
isBoolean: () => isBoolean,
|
|
709
|
+
isBooleanOrUndefined: () => isBooleanOrUndefined,
|
|
710
|
+
isEnumValue: () => isEnumValue,
|
|
711
|
+
isEnumValueOrUndefined: () => isEnumValueOrUndefined,
|
|
712
|
+
isFunction: () => isFunction,
|
|
713
|
+
isFunctionOrUndefined: () => isFunctionOrUndefined,
|
|
714
|
+
isInteger: () => isInteger2,
|
|
715
|
+
isIntegerEq: () => isIntegerEq,
|
|
716
|
+
isIntegerGt: () => isIntegerGt,
|
|
717
|
+
isIntegerGte: () => isIntegerGte,
|
|
718
|
+
isIntegerLt: () => isIntegerLt,
|
|
719
|
+
isIntegerLte: () => isIntegerLte,
|
|
720
|
+
isNull: () => isNull,
|
|
721
|
+
isNumber: () => isNumber,
|
|
722
|
+
isNumberOrUndefined: () => isNumberOrUndefined,
|
|
723
|
+
isObject: () => isObject,
|
|
724
|
+
isObjectOrUndefined: () => isObjectOrUndefined,
|
|
725
|
+
isString: () => isString,
|
|
726
|
+
isStringOrUndefined: () => isStringOrUndefined,
|
|
727
|
+
isUndefined: () => isUndefined
|
|
691
728
|
});
|
|
692
|
-
function
|
|
693
|
-
return
|
|
729
|
+
function isUndefined(value) {
|
|
730
|
+
return value === void 0;
|
|
731
|
+
}
|
|
732
|
+
function isNull(value) {
|
|
733
|
+
return value === null;
|
|
734
|
+
}
|
|
735
|
+
function isObject(value) {
|
|
736
|
+
return typeof value === "object" && value !== null && !isArray2(value);
|
|
737
|
+
}
|
|
738
|
+
function isObjectOrUndefined(value) {
|
|
739
|
+
return value === void 0 || isObject(value);
|
|
740
|
+
}
|
|
741
|
+
function isArray2(a) {
|
|
742
|
+
return !!a && Object.prototype.toString.call(a) === "[object Array]";
|
|
743
|
+
}
|
|
744
|
+
function isArrayOrUndefined(value) {
|
|
745
|
+
return value === void 0 || isArray2(value);
|
|
746
|
+
}
|
|
747
|
+
function isString(value) {
|
|
748
|
+
return typeof value === "string";
|
|
749
|
+
}
|
|
750
|
+
function isStringOrUndefined(value) {
|
|
751
|
+
return value === void 0 || typeof value === "string";
|
|
752
|
+
}
|
|
753
|
+
function isBoolean(value) {
|
|
754
|
+
return typeof value === "boolean";
|
|
755
|
+
}
|
|
756
|
+
function isBooleanOrUndefined(value) {
|
|
757
|
+
return value === void 0 || typeof value === "boolean";
|
|
758
|
+
}
|
|
759
|
+
function isFunction(value) {
|
|
760
|
+
return typeof value === "function";
|
|
761
|
+
}
|
|
762
|
+
function isFunctionOrUndefined(value) {
|
|
763
|
+
return value === void 0 || typeof value === "function";
|
|
764
|
+
}
|
|
765
|
+
function isNumber(value) {
|
|
766
|
+
return typeof value === "number";
|
|
767
|
+
}
|
|
768
|
+
function isNumberOrUndefined(value) {
|
|
769
|
+
return value === void 0 || typeof value === "number";
|
|
770
|
+
}
|
|
771
|
+
function isEnumValue(value, enumObj, name = "value") {
|
|
772
|
+
return getEnumValues(enumObj).some((v) => v === value);
|
|
773
|
+
}
|
|
774
|
+
function isEnumValueOrUndefined(value, enumObj, name = "value") {
|
|
775
|
+
return value === void 0 || getEnumValues(enumObj).some((v) => v === value);
|
|
776
|
+
}
|
|
777
|
+
function isInteger2(n) {
|
|
778
|
+
return typeof n === "number" && isFinite(n) && n === Math.trunc(n);
|
|
779
|
+
}
|
|
780
|
+
function isIntegerEq(value, compareTo) {
|
|
781
|
+
return isInteger2(value) && value === compareTo;
|
|
782
|
+
}
|
|
783
|
+
function isIntegerGt(value, compareTo) {
|
|
784
|
+
return isInteger2(value) && value > compareTo;
|
|
785
|
+
}
|
|
786
|
+
function isIntegerGte(value, compareTo) {
|
|
787
|
+
return isInteger2(value) && value >= compareTo;
|
|
788
|
+
}
|
|
789
|
+
function isIntegerLt(value, compareTo) {
|
|
790
|
+
return isInteger2(value) && value < compareTo;
|
|
791
|
+
}
|
|
792
|
+
function isIntegerLte(value, compareTo) {
|
|
793
|
+
return isInteger2(value) && value <= compareTo;
|
|
694
794
|
}
|
|
695
795
|
|
|
696
|
-
// src/map/index.ts
|
|
796
|
+
// src/utils/map/index.ts
|
|
697
797
|
var map_exports = {};
|
|
698
798
|
__export(map_exports, {
|
|
699
799
|
getMapKeys: () => getMapKeys
|
|
@@ -704,18 +804,18 @@ function getMapKeys(map) {
|
|
|
704
804
|
return keys;
|
|
705
805
|
}
|
|
706
806
|
|
|
707
|
-
// src/
|
|
708
|
-
var
|
|
709
|
-
__export(
|
|
710
|
-
isObject: () =>
|
|
807
|
+
// src/utils/obj/index.ts
|
|
808
|
+
var obj_exports = {};
|
|
809
|
+
__export(obj_exports, {
|
|
810
|
+
isObject: () => isObject2
|
|
711
811
|
});
|
|
712
|
-
function
|
|
812
|
+
function isObject2(value) {
|
|
713
813
|
return typeof value === "object" && value !== null && !isArray(value);
|
|
714
814
|
}
|
|
715
815
|
|
|
716
|
-
// src/
|
|
717
|
-
var
|
|
718
|
-
__export(
|
|
816
|
+
// src/utils/str/index.ts
|
|
817
|
+
var str_exports = {};
|
|
818
|
+
__export(str_exports, {
|
|
719
819
|
chunkString: () => chunkString,
|
|
720
820
|
insertAt: () => insertAt,
|
|
721
821
|
makeSentenceFromPascal: () => makeSentenceFromPascal,
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* TsUtilsLib v1.0
|
|
1
|
+
/* TsUtilsLib v1.3.0 | (c) 2023 PahkaSoft | Licensed under the MIT License */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __export = (target, all) => {
|
|
@@ -7,21 +7,22 @@ var __export = (target, all) => {
|
|
|
7
7
|
};
|
|
8
8
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
9
9
|
|
|
10
|
-
// src/
|
|
11
|
-
var
|
|
12
|
-
__export(
|
|
13
|
-
Arr: () =>
|
|
10
|
+
// src/utils/index.ts
|
|
11
|
+
var utils_exports = {};
|
|
12
|
+
__export(utils_exports, {
|
|
13
|
+
Arr: () => arr_exports,
|
|
14
14
|
Dom: () => dom_exports,
|
|
15
15
|
Enum: () => enum_exports,
|
|
16
|
+
Is: () => is_exports,
|
|
16
17
|
Map: () => map_exports,
|
|
17
18
|
Math: () => math_exports,
|
|
18
|
-
Obj: () =>
|
|
19
|
-
Str: () =>
|
|
19
|
+
Obj: () => obj_exports,
|
|
20
|
+
Str: () => str_exports
|
|
20
21
|
});
|
|
21
22
|
|
|
22
|
-
// src/
|
|
23
|
-
var
|
|
24
|
-
__export(
|
|
23
|
+
// src/utils/arr/index.ts
|
|
24
|
+
var arr_exports = {};
|
|
25
|
+
__export(arr_exports, {
|
|
25
26
|
arrayContains: () => arrayContains,
|
|
26
27
|
chunckArray: () => chunckArray,
|
|
27
28
|
duplicate: () => duplicate,
|
|
@@ -36,7 +37,7 @@ __export(array_exports, {
|
|
|
36
37
|
toArray: () => toArray
|
|
37
38
|
});
|
|
38
39
|
|
|
39
|
-
// src/math/index.ts
|
|
40
|
+
// src/utils/math/index.ts
|
|
40
41
|
var math_exports = {};
|
|
41
42
|
__export(math_exports, {
|
|
42
43
|
calcNormal: () => calcNormal,
|
|
@@ -154,7 +155,7 @@ function sum(arr) {
|
|
|
154
155
|
return arr.reduce((prev, cur) => cur + prev, 0);
|
|
155
156
|
}
|
|
156
157
|
|
|
157
|
-
// src/
|
|
158
|
+
// src/utils/arr/index.ts
|
|
158
159
|
function isArray(a) {
|
|
159
160
|
return !!a && Object.prototype.toString.call(a) === "[object Array]";
|
|
160
161
|
}
|
|
@@ -220,7 +221,7 @@ function chunckArray(arr, chunckSize) {
|
|
|
220
221
|
return result;
|
|
221
222
|
}
|
|
222
223
|
|
|
223
|
-
// src/dom/index.ts
|
|
224
|
+
// src/utils/dom/index.ts
|
|
224
225
|
var dom_exports = {};
|
|
225
226
|
__export(dom_exports, {
|
|
226
227
|
addClass: () => addClass,
|
|
@@ -244,6 +245,15 @@ __export(dom_exports, {
|
|
|
244
245
|
styleLayoutChanged: () => styleLayoutChanged
|
|
245
246
|
});
|
|
246
247
|
|
|
248
|
+
// src/utils/enum/index.ts
|
|
249
|
+
var enum_exports = {};
|
|
250
|
+
__export(enum_exports, {
|
|
251
|
+
getEnumValues: () => getEnumValues
|
|
252
|
+
});
|
|
253
|
+
function getEnumValues(e) {
|
|
254
|
+
return Object.keys(e).filter((key) => Number.isNaN(Number(key))).map((key) => e[key]);
|
|
255
|
+
}
|
|
256
|
+
|
|
247
257
|
// src/modules/assert.ts
|
|
248
258
|
var Assert;
|
|
249
259
|
((Assert2) => {
|
|
@@ -267,6 +277,12 @@ var Assert;
|
|
|
267
277
|
}
|
|
268
278
|
}
|
|
269
279
|
Assert2.assert = assert;
|
|
280
|
+
function assertEnum(value, enumObj, name = "value") {
|
|
281
|
+
if (!getEnumValues(enumObj).some((v) => v === value)) {
|
|
282
|
+
throw new TypeError(`Invalid ${name} enum value: ${value}`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
Assert2.assertEnum = assertEnum;
|
|
270
286
|
function interrupt(userMsg) {
|
|
271
287
|
throwError(userMsg ?? "Interrupted!");
|
|
272
288
|
}
|
|
@@ -489,7 +505,7 @@ var Device;
|
|
|
489
505
|
Device2.toPx = toPx2;
|
|
490
506
|
})(Device || (Device = {}));
|
|
491
507
|
|
|
492
|
-
// src/dom/index.ts
|
|
508
|
+
// src/utils/dom/index.ts
|
|
493
509
|
function toPx(value) {
|
|
494
510
|
return value === void 0 ? void 0 : Device.toPx(value);
|
|
495
511
|
}
|
|
@@ -657,16 +673,100 @@ function getCanvasTextWidth(text, font) {
|
|
|
657
673
|
return ctx.measureText(text).width;
|
|
658
674
|
}
|
|
659
675
|
|
|
660
|
-
// src/
|
|
661
|
-
var
|
|
662
|
-
__export(
|
|
663
|
-
|
|
676
|
+
// src/utils/is/index.ts
|
|
677
|
+
var is_exports = {};
|
|
678
|
+
__export(is_exports, {
|
|
679
|
+
isArray: () => isArray2,
|
|
680
|
+
isArrayOrUndefined: () => isArrayOrUndefined,
|
|
681
|
+
isBoolean: () => isBoolean,
|
|
682
|
+
isBooleanOrUndefined: () => isBooleanOrUndefined,
|
|
683
|
+
isEnumValue: () => isEnumValue,
|
|
684
|
+
isEnumValueOrUndefined: () => isEnumValueOrUndefined,
|
|
685
|
+
isFunction: () => isFunction,
|
|
686
|
+
isFunctionOrUndefined: () => isFunctionOrUndefined,
|
|
687
|
+
isInteger: () => isInteger2,
|
|
688
|
+
isIntegerEq: () => isIntegerEq,
|
|
689
|
+
isIntegerGt: () => isIntegerGt,
|
|
690
|
+
isIntegerGte: () => isIntegerGte,
|
|
691
|
+
isIntegerLt: () => isIntegerLt,
|
|
692
|
+
isIntegerLte: () => isIntegerLte,
|
|
693
|
+
isNull: () => isNull,
|
|
694
|
+
isNumber: () => isNumber,
|
|
695
|
+
isNumberOrUndefined: () => isNumberOrUndefined,
|
|
696
|
+
isObject: () => isObject,
|
|
697
|
+
isObjectOrUndefined: () => isObjectOrUndefined,
|
|
698
|
+
isString: () => isString,
|
|
699
|
+
isStringOrUndefined: () => isStringOrUndefined,
|
|
700
|
+
isUndefined: () => isUndefined
|
|
664
701
|
});
|
|
665
|
-
function
|
|
666
|
-
return
|
|
702
|
+
function isUndefined(value) {
|
|
703
|
+
return value === void 0;
|
|
704
|
+
}
|
|
705
|
+
function isNull(value) {
|
|
706
|
+
return value === null;
|
|
707
|
+
}
|
|
708
|
+
function isObject(value) {
|
|
709
|
+
return typeof value === "object" && value !== null && !isArray2(value);
|
|
710
|
+
}
|
|
711
|
+
function isObjectOrUndefined(value) {
|
|
712
|
+
return value === void 0 || isObject(value);
|
|
713
|
+
}
|
|
714
|
+
function isArray2(a) {
|
|
715
|
+
return !!a && Object.prototype.toString.call(a) === "[object Array]";
|
|
716
|
+
}
|
|
717
|
+
function isArrayOrUndefined(value) {
|
|
718
|
+
return value === void 0 || isArray2(value);
|
|
719
|
+
}
|
|
720
|
+
function isString(value) {
|
|
721
|
+
return typeof value === "string";
|
|
722
|
+
}
|
|
723
|
+
function isStringOrUndefined(value) {
|
|
724
|
+
return value === void 0 || typeof value === "string";
|
|
725
|
+
}
|
|
726
|
+
function isBoolean(value) {
|
|
727
|
+
return typeof value === "boolean";
|
|
728
|
+
}
|
|
729
|
+
function isBooleanOrUndefined(value) {
|
|
730
|
+
return value === void 0 || typeof value === "boolean";
|
|
731
|
+
}
|
|
732
|
+
function isFunction(value) {
|
|
733
|
+
return typeof value === "function";
|
|
734
|
+
}
|
|
735
|
+
function isFunctionOrUndefined(value) {
|
|
736
|
+
return value === void 0 || typeof value === "function";
|
|
737
|
+
}
|
|
738
|
+
function isNumber(value) {
|
|
739
|
+
return typeof value === "number";
|
|
740
|
+
}
|
|
741
|
+
function isNumberOrUndefined(value) {
|
|
742
|
+
return value === void 0 || typeof value === "number";
|
|
743
|
+
}
|
|
744
|
+
function isEnumValue(value, enumObj, name = "value") {
|
|
745
|
+
return getEnumValues(enumObj).some((v) => v === value);
|
|
746
|
+
}
|
|
747
|
+
function isEnumValueOrUndefined(value, enumObj, name = "value") {
|
|
748
|
+
return value === void 0 || getEnumValues(enumObj).some((v) => v === value);
|
|
749
|
+
}
|
|
750
|
+
function isInteger2(n) {
|
|
751
|
+
return typeof n === "number" && isFinite(n) && n === Math.trunc(n);
|
|
752
|
+
}
|
|
753
|
+
function isIntegerEq(value, compareTo) {
|
|
754
|
+
return isInteger2(value) && value === compareTo;
|
|
755
|
+
}
|
|
756
|
+
function isIntegerGt(value, compareTo) {
|
|
757
|
+
return isInteger2(value) && value > compareTo;
|
|
758
|
+
}
|
|
759
|
+
function isIntegerGte(value, compareTo) {
|
|
760
|
+
return isInteger2(value) && value >= compareTo;
|
|
761
|
+
}
|
|
762
|
+
function isIntegerLt(value, compareTo) {
|
|
763
|
+
return isInteger2(value) && value < compareTo;
|
|
764
|
+
}
|
|
765
|
+
function isIntegerLte(value, compareTo) {
|
|
766
|
+
return isInteger2(value) && value <= compareTo;
|
|
667
767
|
}
|
|
668
768
|
|
|
669
|
-
// src/map/index.ts
|
|
769
|
+
// src/utils/map/index.ts
|
|
670
770
|
var map_exports = {};
|
|
671
771
|
__export(map_exports, {
|
|
672
772
|
getMapKeys: () => getMapKeys
|
|
@@ -677,18 +777,18 @@ function getMapKeys(map) {
|
|
|
677
777
|
return keys;
|
|
678
778
|
}
|
|
679
779
|
|
|
680
|
-
// src/
|
|
681
|
-
var
|
|
682
|
-
__export(
|
|
683
|
-
isObject: () =>
|
|
780
|
+
// src/utils/obj/index.ts
|
|
781
|
+
var obj_exports = {};
|
|
782
|
+
__export(obj_exports, {
|
|
783
|
+
isObject: () => isObject2
|
|
684
784
|
});
|
|
685
|
-
function
|
|
785
|
+
function isObject2(value) {
|
|
686
786
|
return typeof value === "object" && value !== null && !isArray(value);
|
|
687
787
|
}
|
|
688
788
|
|
|
689
|
-
// src/
|
|
690
|
-
var
|
|
691
|
-
__export(
|
|
789
|
+
// src/utils/str/index.ts
|
|
790
|
+
var str_exports = {};
|
|
791
|
+
__export(str_exports, {
|
|
692
792
|
chunkString: () => chunkString,
|
|
693
793
|
insertAt: () => insertAt,
|
|
694
794
|
makeSentenceFromPascal: () => makeSentenceFromPascal,
|
|
@@ -1064,7 +1164,7 @@ export {
|
|
|
1064
1164
|
LRUCache,
|
|
1065
1165
|
SmallIntCache,
|
|
1066
1166
|
Stack,
|
|
1067
|
-
|
|
1167
|
+
utils_exports as Utils,
|
|
1068
1168
|
Vec2
|
|
1069
1169
|
};
|
|
1070
1170
|
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tspro/ts-utils-lib",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"author": "PahkaSoft",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -30,6 +30,16 @@
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
|
+
"files": [
|
|
34
|
+
"CHANGELOG.md",
|
|
35
|
+
"LICENSE",
|
|
36
|
+
"README.md",
|
|
37
|
+
"dist/**/*.js",
|
|
38
|
+
"dist/**/*.mjs",
|
|
39
|
+
"dist/**/*.d.ts",
|
|
40
|
+
"dist/**/*.d.mts",
|
|
41
|
+
"package.json"
|
|
42
|
+
],
|
|
33
43
|
"devDependencies": {
|
|
34
44
|
"@types/jasmine": "^5.1.8",
|
|
35
45
|
"benchmark": "^2.1.4",
|
|
@@ -42,6 +52,7 @@
|
|
|
42
52
|
"npm-watch": "^0.13.0",
|
|
43
53
|
"ts-loader": "^9.5.2",
|
|
44
54
|
"tsup": "^8.5.0",
|
|
55
|
+
"typedoc": "^0.28.7",
|
|
45
56
|
"typescript": "latest",
|
|
46
57
|
"webpack": "^5.100.0"
|
|
47
58
|
},
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/export-utils.ts","../src/array/index.ts","../src/math/index.ts","../src/dom/index.ts","../src/modules/assert.ts","../src/modules/device.ts","../src/enum/index.ts","../src/map/index.ts","../src/object/index.ts","../src/string/index.ts","../src/modules/cookies.ts","../src/core/stack.ts","../src/core/vec2.ts","../src/core/LRU-cache.ts","../src/core/small-int-cache.ts"],"sourcesContent":["export * as Utils from \"./export-utils\";\r\n\r\nexport * from \"./modules\";\r\nexport * from \"./core\";\r\n","export * as Arr from \"./array\";\r\nexport * as Dom from \"./dom\";\r\nexport * as Enum from \"./enum\";\r\nexport * as Map from \"./map\";\r\nexport * as Math from \"./math\";\r\nexport * as Obj from \"./object\";\r\nexport * as Str from \"./string\";\r\n","import { isInteger } from \"../math\";\r\n\r\nexport function isArray<T>(a: T[] | unknown): a is T[] {\r\n return !!a && Object.prototype.toString.call(a) === \"[object Array]\";\r\n}\r\n\r\nexport function toArray<T>(a: T | T[]): Array<T> {\r\n return isArray(a) ? a : [a];\r\n}\r\n\r\nexport function duplicate<T>(a: T[] | undefined) {\r\n return a === undefined ? a : a.slice();\r\n}\r\n\r\nexport function removeDuplicates<T>(a: T[]): T[] {\r\n return a.filter((item, pos, arr) => arr.indexOf(item) === pos);\r\n}\r\n\r\nexport function removeDuplicatesCmp<T>(arr: ReadonlyArray<T>, cmp: (t1: T, t2: T) => boolean): T[] {\r\n return arr.filter((t1, index, self) => index === self.findIndex(t2 => cmp(t1, t2)));\r\n}\r\n\r\nexport function fillArray<T>(fillValue: T, fillCount: number): T[] {\r\n if (!isInteger(fillCount) || fillCount < 0) {\r\n throw new Error(\"fillArray: Invalid fillCount = \" + fillCount);\r\n }\r\n return new Array<T>(fillCount).fill(fillValue);\r\n}\r\n\r\nexport function mapSequenceArray<T>(len: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(len) || len < 0) {\r\n throw new Error(\"mapSequenceArray: Invalid len = \" + len);\r\n }\r\n let arr: T[] = new Array(len);\r\n for (let i = 0; i < len; i++) { arr[i] = fn(i); }\r\n return arr;\r\n}\r\n\r\nexport function getSequenceArray(len: number): number[] {\r\n return mapSequenceArray(len, i => i);\r\n}\r\n\r\nexport function mapRangeArray<T>(start: number, end: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(start)) {\r\n throw new Error(\"mapRangeArray: Invalid start = \" + end);\r\n }\r\n if (!isInteger(end)) {\r\n throw new Error(\"mapRangeArray: Invalid end = \" + end);\r\n }\r\n let len = Math.abs(end - start) + 1;\r\n let arr: T[] = new Array(len);\r\n for (let i = 0, s = start, inc = Math.sign(end - start); i < len; s += inc, i++) { arr[i] = fn(s); }\r\n return arr;\r\n}\r\n\r\nexport function getRangeArray(start: number, end: number): number[] {\r\n return mapRangeArray(start, end, i => i);\r\n}\r\n\r\nexport function arrayContains<T extends unknown>(arg: T[], item: T): boolean {\r\n return arg.indexOf(item) >= 0;\r\n}\r\n\r\nexport function chunckArray<A>(arr: ReadonlyArray<A>, chunckSize: number): A[][] {\r\n if (!isInteger(chunckSize) || chunckSize < 1) {\r\n throw new Error(\"chunckArray: Invalid chunckSize = \" + chunckSize);\r\n }\r\n let result: A[][] = [];\r\n for (let i = 0; i < arr.length; i += chunckSize) {\r\n result.push(arr.slice(i, i + chunckSize));\r\n }\r\n return result;\r\n}\r\n","\r\nexport function isInteger(n: unknown): n is number {\r\n return typeof n === \"number\" && isFinite(n) && n === Math.trunc(n);\r\n}\r\n\r\nexport function linearToDecibels(linearVolume: number): number {\r\n if (!isFinite(linearVolume)) {\r\n throw new Error(\"linearToDecibel: Invalid linearVolume = \" + linearVolume);\r\n }\r\n else if (linearVolume <= 0) {\r\n return -Infinity;\r\n }\r\n else {\r\n return 20 * Math.log10(linearVolume);\r\n }\r\n}\r\n\r\nexport function mod(m: number, n: number) {\r\n return ((m % n) + n) % n;\r\n}\r\n\r\n/**\r\n * Convert number to roman number.\r\n * https://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter\r\n */\r\nexport function romanize(n: number) {\r\n if (!isInteger(n) || n < 0) {\r\n throw new Error(\"romanize: Invalid n = \" + n);\r\n }\r\n\r\n var digits = String(+n).split(\"\");\r\n var key = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\r\n \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\r\n \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\r\n var roman = \"\", i = 3;\r\n while (i--) roman = (key[+digits.pop()! + (i * 10)] || \"\") + roman;\r\n return Array(+digits.join(\"\") + 1).join(\"M\") + roman;\r\n}\r\n\r\nexport function toOrdinalNumber(n: number) {\r\n if (!isInteger(n)) {\r\n throw new Error(\"toOrdinalNumber: Invalid n = \" + n);\r\n }\r\n\r\n const nStr = n.toString();\r\n const lastDigit = Number(nStr.charAt(nStr.length - 1));\r\n\r\n if (n === 1 || n >= 20 && lastDigit === 1) {\r\n return nStr + \"st\";\r\n }\r\n else if (n === 2 || n >= 20 && lastDigit === 2) {\r\n return nStr + \"nd\";\r\n }\r\n else if (n === 3 || n >= 20 && lastDigit === 3) {\r\n return nStr + \"rd\";\r\n }\r\n else {\r\n return nStr + \"th\";\r\n }\r\n}\r\n\r\nexport function interpolateCoord(startX: number, startY: number, endX: number, endY: number, t: number) {\r\n return {\r\n x: startX + (endX - startX) * t,\r\n y: startY + (endY - startY) * t\r\n }\r\n}\r\n\r\nexport function interpolateY(startX: number, startY: number, endX: number, endY: number, x: number) {\r\n let t = (x - startX) / (endX - startX);\r\n return startY + (endY - startY) * t;\r\n}\r\n\r\nexport function clamp(num: number, min: number, max: number) {\r\n return Math.min(Math.max(num, min), max);\r\n}\r\n\r\nexport function calcNormal(x1: number, y1: number, x2: number, y2: number) {\r\n let dx = x2 - x1;\r\n let dy = y2 - y1;\r\n\r\n let nx = -dy;\r\n let ny = dx;\r\n\r\n let len = Math.sqrt(nx * nx + ny * ny);\r\n\r\n if (len > 0) {\r\n nx /= len;\r\n ny /= len;\r\n }\r\n else {\r\n nx = 0;\r\n ny = 1;\r\n }\r\n\r\n return { nx, ny }\r\n}\r\n\r\nexport function sum(arr: number[]): number {\r\n return arr.reduce((prev, cur) => cur + prev, 0);\r\n}\r\n\r\n","import { Device } from \"../modules/device\";\r\n\r\nexport interface CSSProperties {\r\n // Declare necessary css properties\r\n //[key: string]: string | number;\r\n padding?: string | number;\r\n paddingLeft?: string | number;\r\n paddingRight?: string | number;\r\n paddingTop?: string | number;\r\n paddingBottom?: string | number;\r\n left?: string | number;\r\n right?: string | number;\r\n top?: string | number;\r\n bottom?: string | number;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nfunction toPx(value: string | number | undefined): number | undefined {\r\n return value === undefined ? undefined : Device.toPx(value);\r\n}\r\n\r\nexport function hasClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return false;\r\n }\r\n else if (el.classList) {\r\n return el.classList.contains(className);\r\n }\r\n else {\r\n return !!el.className.match(new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\"));\r\n }\r\n}\r\n\r\nexport function addClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.add(className)\r\n }\r\n else if (!hasClass(el, className)) {\r\n el.className += \" \" + className;\r\n }\r\n}\r\n\r\nexport function removeClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.remove(className)\r\n }\r\n else if (hasClass(el, className)) {\r\n var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\r\n el.className = el.className.replace(reg, \" \");\r\n }\r\n}\r\n\r\nexport function setOffset(el: HTMLElement, left: number, top: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n}\r\n\r\nexport function getOffset(el: HTMLElement): { left: number, top: number } {\r\n let box = el.getBoundingClientRect();\r\n let docElem = document.documentElement;\r\n return {\r\n top: box.top + window.pageYOffset - docElem.clientTop,\r\n left: box.left + window.pageXOffset - docElem.clientLeft\r\n }\r\n}\r\n\r\nexport function getWidth(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerWidth;\r\n }\r\n else {\r\n let w = parseFloat(getComputedStyle(el, null).width.replace(\"px\", \"\"));\r\n return isNaN(w) ? 0 : w;\r\n }\r\n}\r\n\r\nexport function setWidth(el: HTMLElement, val: number) {\r\n el.style.width = val + 'px';\r\n}\r\n\r\nexport function getHeight(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerHeight;\r\n }\r\n else {\r\n let h = parseFloat(getComputedStyle(el, null).height.replace(\"px\", \"\"));\r\n return isNaN(h) ? 0 : h;\r\n }\r\n}\r\n\r\nexport function setHeight(el: HTMLElement, val: number) {\r\n el.style.height = val + \"px\";\r\n}\r\n\r\nexport function appendTo(el: HTMLElement | SVGElement, to: HTMLElement | SVGElement) {\r\n to.appendChild(el);\r\n}\r\n\r\nexport function removeFromParent(el: HTMLElement | SVGElement) {\r\n el.remove();\r\n}\r\n\r\nexport function setVisibility(el: HTMLElement | SVGElement, visible: boolean) {\r\n el.style.display = visible ? \"block\" : \"none\";\r\n}\r\n\r\nexport function setRect(el: HTMLElement, left: number, top: number, width: number, height: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n el.style.width = width + unit;\r\n el.style.height = height + unit;\r\n}\r\n\r\nexport function getButton(btn: HTMLElement | string): HTMLButtonElement | undefined {\r\n let el = typeof btn === \"string\" ? document.getElementById(btn) : btn;\r\n return el instanceof HTMLButtonElement ? el : undefined;\r\n}\r\n\r\nexport function getCanvas(canvas: HTMLElement | string): HTMLCanvasElement | undefined {\r\n let el = typeof canvas === \"string\" ? document.getElementById(canvas) : canvas;\r\n return el instanceof HTMLCanvasElement ? el : undefined;\r\n}\r\n\r\nexport function getPadding(style?: CSSProperties): { top: number, right: number, bottom: number, left: number } {\r\n if (!style) {\r\n return { top: 0, right: 0, bottom: 0, left: 0 };\r\n }\r\n\r\n let top = toPx(style.paddingTop);\r\n let right = toPx(style.paddingRight);\r\n let bottom = toPx(style.paddingBottom);\r\n let left = toPx(style.paddingLeft);\r\n\r\n let padding = (style.padding ?? \"\").toString().split(\" \").filter(s => s.length > 0);\r\n\r\n switch (padding.length) {\r\n case 0:\r\n break;\r\n case 1:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[0]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[0]);\r\n break;\r\n case 2:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 3:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 4:\r\n default:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[3]);\r\n break;\r\n }\r\n\r\n top ??= 0;\r\n right ??= 0;\r\n bottom ??= 0;\r\n left ??= 0;\r\n\r\n return { top, right, bottom, left };\r\n}\r\n\r\nexport function getDimension(style?: CSSProperties) {\r\n let left = toPx(style?.left);\r\n let right = toPx(style?.right);\r\n let top = toPx(style?.top);\r\n let bottom = toPx(style?.bottom);\r\n let width = toPx(style?.width);\r\n let height = toPx(style?.height);\r\n\r\n if (width === undefined && left !== undefined && right !== undefined) {\r\n width = right - left;\r\n }\r\n\r\n if (height === undefined && top !== undefined && bottom !== undefined) {\r\n height = bottom - top;\r\n }\r\n\r\n return { left, top, width, height }\r\n}\r\n\r\nexport function styleLayoutChanged(style1?: CSSProperties, style2?: CSSProperties) {\r\n if (!style1 && !style2) {\r\n return false;\r\n }\r\n else if (!style1 || !style2) {\r\n return true;\r\n }\r\n else {\r\n return style1.left !== style2.left || style1.top !== style2.top ||\r\n style1.right !== style2.right || style1.bottom !== style2.bottom ||\r\n style1.width !== style2.width || style1.height !== style2.height;\r\n }\r\n}\r\n\r\nlet canvas: HTMLCanvasElement | undefined;\r\n\r\nexport function getCanvasTextWidth(text: string, font: string) {\r\n canvas ??= document.createElement(\"canvas\");\r\n\r\n let ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n return 0;\r\n }\r\n\r\n ctx.font = font;\r\n\r\n return ctx.measureText(text).width;\r\n}\r\n","export namespace Assert {\r\n\r\n export type ErrorConstructor = new (msg: string) => Error;\r\n\r\n let errorConstructor: ErrorConstructor = Error;\r\n\r\n export function setErrorClass(ec?: ErrorConstructor) {\r\n errorConstructor = ec ?? Error;\r\n }\r\n\r\n function throwError(errorMsg: string, userMsg?: string): never {\r\n throw new errorConstructor(\"Assertion Error: \" + errorMsg + (userMsg ? \" \" + userMsg : \"\"));\r\n }\r\n\r\n function is_int(a: unknown): a is number {\r\n return typeof a === \"number\" && isFinite(a) && a === Math.trunc(a);\r\n }\r\n\r\n function is_number(a: unknown): a is number {\r\n return typeof a === \"number\";\r\n }\r\n\r\n export function assert<T>(a: T, userMsg?: string) {\r\n if (!a) {\r\n throwError(userMsg ?? \"Assertion failed!\");\r\n }\r\n }\r\n\r\n export function interrupt(userMsg?: string): never {\r\n throwError(userMsg ?? \"Interrupted!\");\r\n }\r\n\r\n export function int(a: unknown, userMsg?: string): number {\r\n if (!is_int(a)) {\r\n throwError(`Expected ${a} to be integer.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function eq<T>(a: T, b: T, userMsg?: string): T {\r\n if (a !== b) {\r\n throwError(`Expected ${a} to equal ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_eq(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a === b)) {\r\n throwError(`Expected ${a} to be integer equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_lt(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a < b)) {\r\n throwError(`Expected ${a} to be integer less than ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_lte(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a <= b)) {\r\n throwError(`Expected ${a} to be integer less than or equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_gt(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a > b)) {\r\n throwError(`Expected ${a} to be integer greater than ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_gte(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a >= b)) {\r\n throwError(`Expected ${a} to be integer greater than or equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_between(a: unknown, min: unknown, max: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(min) && is_number(max) && a >= min && a <= max)) {\r\n throwError(`Expected ${a} to be integer between ${min} and ${max}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function odd(a: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && a % 2 === 1)) {\r\n throwError(`Expected ${a} to be odd number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function even(a: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && a % 2 === 0)) {\r\n throwError(`Expected ${a} to be even number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function in_group<T>(a: T, group: ReadonlyArray<T>, userMsg?: string): T {\r\n if (!(group.some(e => e === a))) {\r\n let strGroup = group.map(v => String(v)).join(\", \");\r\n throwError(`Expected ${a} to be in group [${strGroup}].`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function finite(a: unknown, userMsg?: string): number {\r\n if (!(is_number(a) && isFinite(a))) {\r\n throwError(`Expected ${a} to be finite number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function array_id<T>(arr: Readonly<T[]>, id: unknown, userMsg?: string): number {\r\n if (!(is_int(id) && id >= 0 && id < arr.length)) {\r\n throwError(`Expected ${id} to be array index in bounds [0..${arr.length - 1}].`, userMsg);\r\n }\r\n return id;\r\n }\r\n\r\n export function array_elem<T>(arr: Readonly<T[]>, id: number, userMsg?: string): T {\r\n return arr[array_id(arr, id, userMsg)];\r\n }\r\n\r\n export function require<T>(arg: T, userMsg?: string): NonNullable<T> {\r\n if (arg === undefined) {\r\n throwError(\"Required value is undefined.\", userMsg);\r\n }\r\n else {\r\n return arg!;\r\n }\r\n }\r\n}\r\n","import { Assert } from \"./assert\";\r\n\r\nexport namespace Device {\r\n function getDPI(): number {\r\n let el = document.createElement(\"div\");\r\n el.style.width = \"1in\";\r\n document.body.appendChild(el);\r\n let dpi = el.offsetWidth;\r\n el.remove();\r\n return dpi || 96;\r\n }\r\n\r\n function getScrollBarWidth(): number {\r\n try {\r\n let outer = document.createElement(\"div\");\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"100px\";\r\n //outer.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\r\n\r\n document.body.appendChild(outer);\r\n\r\n let widthNoScroll = outer.offsetWidth;\r\n // force scrollbars\r\n outer.style.overflow = \"scroll\";\r\n\r\n // add innerdiv\r\n let inner = document.createElement(\"div\");\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n let widthWithScroll = inner.offsetWidth;\r\n\r\n // remove divs\r\n if (outer.parentNode) {\r\n outer.parentNode.removeChild(outer);\r\n }\r\n\r\n return widthNoScroll - widthWithScroll;\r\n }\r\n catch (e) {\r\n return 0;\r\n }\r\n }\r\n\r\n function getSystemFontSize(): number {\r\n let tmpDiv = document.createElement(\"div\");\r\n tmpDiv.style.cssText = \"display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em\";\r\n tmpDiv.appendChild(document.createTextNode(\"M\"));\r\n document.body.appendChild(tmpDiv);\r\n let fontsize = tmpDiv.offsetHeight;\r\n document.body.removeChild(tmpDiv);\r\n return fontsize;\r\n }\r\n\r\n function getIsTouchDevice(): boolean {\r\n // Modified from: https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n\r\n if (\"ontouchstart\" in window || \"DocumentTouch\" in window || \"createTouch\" in document && \"createTouchList\" in document) {\r\n return true;\r\n }\r\n\r\n // include the \"heartz\" as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n\r\n var prefixes = \" -webkit- -moz- -o- -ms- \".split(\" \");\r\n var mq = function (query: string) {\r\n return window.matchMedia(query).matches;\r\n }\r\n var query = [\"(\", prefixes.join(\"touch-enabled),(\"), \"heartz\", \")\"].join(\"\");\r\n return mq(query);\r\n }\r\n\r\n function getIsMobileDevice() {\r\n let a = navigator.userAgent || navigator.vendor || (<any>window).opera;\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)));\r\n }\r\n\r\n function getHostAddress(): string {\r\n return location.protocol + \"//\" + location.host;\r\n }\r\n\r\n type UnitType = \"mm\" | \"cm\" | \"in\" | \"inch\" | \"px\" | \"em\";\r\n const UnitRegExp = /^(mm|cm|in|inch|px|em)$/;\r\n const ValueUnitRegExp = /^([0-9\\\\.]+)(.*)$/;\r\n\r\n export const DPI = getDPI();\r\n export const PxPerMm = DPI / 25.4;\r\n export const ScrollbarWidth = getScrollBarWidth();\r\n export const FontSize = getSystemFontSize();\r\n export const IsTouchDevice = getIsTouchDevice();\r\n export const IsMobileDevice = getIsMobileDevice();\r\n export const HostAddress = getHostAddress();\r\n\r\n export function pxToMm(px: number): number {\r\n return px / PxPerMm;\r\n }\r\n\r\n export function mmToPx(mm: number): number {\r\n return mm * PxPerMm;\r\n }\r\n\r\n export function toPx(input: string | number): number {\r\n if (typeof input === \"number\") {\r\n return input;\r\n }\r\n\r\n let value: number = NaN;\r\n let unit: UnitType | undefined = undefined;\r\n\r\n let match = input.toString().match(ValueUnitRegExp);\r\n\r\n if (match && match[1]) {\r\n value = parseFloat(match[1]);\r\n\r\n let unitStr = match[2] ? match[2].toLowerCase() : \"undefined\";\r\n let unitStrOk = UnitRegExp.test(unitStr);\r\n\r\n unit = unitStrOk ? unitStr as UnitType : undefined;\r\n if (!unit) {\r\n console.log(\"Unknown unit '\" + unitStr + \"' => using 'px'.\");\r\n }\r\n }\r\n else {\r\n value = parseFloat(input);\r\n }\r\n\r\n Assert.finite(value, \"value in function toPx\");\r\n\r\n switch (unit) {\r\n case \"mm\":\r\n return mmToPx(value);\r\n case \"cm\":\r\n return mmToPx(value) * 10;\r\n case \"in\":\r\n case \"inch\":\r\n return mmToPx(value) * 25.4;\r\n case \"em\":\r\n return Device.FontSize * value;\r\n default:\r\n case \"px\":\r\n return value;\r\n }\r\n }\r\n}\r\n","\r\nexport type EnumObject = { [key: string]: string | number; }\r\nexport type EnumValue<E extends EnumObject> = E extends { [key: string]: string | infer V; } ? V : never;\r\n\r\nexport function getEnumValues<E extends EnumObject>(e: E): Array<EnumValue<E>> {\r\n return Object.keys(e).filter(key => Number.isNaN(Number(key))).map(key => e[key] as EnumValue<E>);\r\n}\r\n","\r\nexport function getMapKeys<K, V>(map: Map<K, V>): K[] {\r\n let keys: K[] = [];\r\n map.forEach((value: V, key: K) => keys.push(key));\r\n return keys;\r\n}\r\n","import { isArray } from \"../array\";\r\n\r\nexport function isObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === \"object\" && value !== null && !isArray(value);\r\n}\r\n","import { isInteger } from \"../math\";\r\n\r\n/**\r\n * toCharArray(\"abc\") => [\"a\", \"b\", \"c\"].\r\n * @param str \r\n */\r\nexport function toCharArray(str: string): string[] {\r\n return str.split(\"\");\r\n}\r\n\r\n/**\r\n * repeat(\"abc\", 3) => \"abcabcabc\".\r\n * repeat(\"abc\", 0) => \"\".\r\n * @param repeatString \r\n * @param repeatCount \r\n */\r\nexport function repeatString(repeatString: string, repeatCount: number): string {\r\n if (!isInteger(repeatCount) || repeatCount < 0) {\r\n throw new Error(\"repeatStr: Invalid repeatCount = \" + repeatCount);\r\n }\r\n\r\n return new Array(repeatCount + 1).join(repeatString);\r\n}\r\n\r\n/**\r\n * \"abcdefgh\":chunkSize = 3 => [\"abc\", \"def\", \"gh\"]\r\n * @param str \r\n * @param chunkSize\r\n */\r\nexport function chunkString(str: string, chunkSize: number): string[] {\r\n if (!isInteger(chunkSize) || chunkSize < 1) {\r\n throw new Error(\"chunckString: Invalid chuckSize = \" + chunkSize);\r\n }\r\n let result: string[] = [];\r\n for (let i = 0; i < str.length; i += chunkSize) {\r\n result.push(str.slice(i, i + chunkSize));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Replaces part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n * @param insert \r\n */\r\nexport function replaceAt(str: string, pos: number, removeCount: number, insert: string) {\r\n if (!isInteger(removeCount) || removeCount < 0) {\r\n throw new Error(\"replaceAt: Invalid removeCount = \" + removeCount);\r\n }\r\n else if (!isInteger(pos) || pos < 0 || pos + removeCount > str.length) {\r\n throw new Error(\"replaceAt: Invalid pos = \" + pos + \", removeCount = \" + removeCount + \", str.length = \" + str.length);\r\n }\r\n else {\r\n return str.substring(0, pos) + insert + str.substring(pos + removeCount);\r\n }\r\n}\r\n\r\n/**\r\n * Insert string to another.\r\n * @param str \r\n * @param pos \r\n * @param insertStr \r\n */\r\nexport function insertAt(str: string, pos: number, insertStr: string) {\r\n return replaceAt(str, pos, 0, insertStr);\r\n}\r\n\r\n/**\r\n * Remove part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n */\r\nexport function removeAt(str: string, pos: number, removeCount: number) {\r\n return replaceAt(str, pos, removeCount, \"\");\r\n}\r\n\r\n/**\r\n * \"UndeclaredVariable\" => \"Undeclared variable\"\r\n * @param PascalString \r\n */\r\nexport function makeSentenceFromPascal(PascalString: string) {\r\n if (PascalString === \"\") {\r\n return \"\";\r\n }\r\n let word = PascalString.charAt(0);\r\n let sentence = \"\";\r\n\r\n const addWord = () => {\r\n if (word !== \"\") {\r\n if (sentence === \"\") {\r\n sentence += word.charAt(0).toUpperCase() + word.substring(1);\r\n }\r\n else {\r\n sentence += \" \" + word;\r\n }\r\n word = \"\";\r\n }\r\n }\r\n\r\n const isLetterAndCapital = (c: string) => {\r\n return c.toUpperCase() !== c.toLowerCase() && c === c.toUpperCase();\r\n }\r\n\r\n for (let i = 1; i < PascalString.length; i++) {\r\n let c = PascalString.charAt(i);\r\n if (isLetterAndCapital(c)) {\r\n addWord();\r\n }\r\n word += c.toLowerCase();\r\n }\r\n\r\n addWord();\r\n\r\n return sentence;\r\n}\r\n","export namespace Cookies {\r\n\r\n const ConsentCookieName = \"ConsentCookie\";\r\n\r\n enum ConsentState {\r\n Accept = \"accept\",\r\n Decline = \"decline\"\r\n }\r\n\r\n let _consent: ConsentState | undefined;\r\n let _expires: Date | undefined;\r\n\r\n let str = _read(ConsentCookieName);\r\n _consent = (str === ConsentState.Accept || str === ConsentState.Decline) ? str : undefined;\r\n\r\n export function setExpireDays(days: number) {\r\n _expires = new Date();\r\n _expires.setDate(_expires.getDate() + days);\r\n }\r\n\r\n export function isConsentPending() {\r\n return _consent === undefined;\r\n }\r\n\r\n export function accept() {\r\n _consent = ConsentState.Accept;\r\n _save(ConsentCookieName, _consent);\r\n }\r\n\r\n export function decline() {\r\n _consent = ConsentState.Decline;\r\n _save(ConsentCookieName, _consent);\r\n }\r\n\r\n function _getList(): string[] {\r\n let s = document.cookie;\r\n return s.split(\";\").map(c => c.trim());\r\n }\r\n\r\n function _save<T extends string | number | boolean>(name: string, value: T): T {\r\n let cookie = name + \"=\" + value.toString() + \";sameSite=Lax;\";\r\n\r\n if (_expires) {\r\n cookie += \"expires=\" + _expires.toUTCString() + \";\";\r\n }\r\n\r\n document.cookie = cookie;\r\n\r\n return value;\r\n }\r\n\r\n function _read(name: string, defaultValue?: string): string | undefined {\r\n let str = _getList().find(c => c.startsWith(name + \"=\"));\r\n return str === undefined ? defaultValue : str.substring(name.length + 1);\r\n }\r\n\r\n function _erase(name: string) {\r\n document.cookie = name + \"=;\" + \"expires=Thu, 01 Jan 1970 00:00:00 UTC;\";\r\n }\r\n\r\n export function save<T extends string | number | boolean>(name: string, value: T): T {\r\n if (_consent === ConsentState.Accept) {\r\n _save(name, value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n export function read(name: string, defaultValue: string): string {\r\n if (_consent === ConsentState.Accept) {\r\n return _read(name, defaultValue) || defaultValue;\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function readInt(name: string, defaultValue: number): number {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : parseInt(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function readBool(name: string, defaultValue: boolean): boolean {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : (/true|1/i).test(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function erase(name: string) {\r\n if (_consent === ConsentState.Accept || name === ConsentCookieName) {\r\n _erase(name);\r\n }\r\n }\r\n\r\n export function eraseAll() {\r\n document.cookie.split(';').forEach(c => erase(c.trim().split('=')[0]));\r\n }\r\n}\r\n","import { Assert } from \"../modules/assert\";\r\n\r\nexport class Stack<T> {\r\n private readonly list: T[] = [];\r\n\r\n push(e: T) {\r\n this.list.push(e);\r\n return e;\r\n }\r\n\r\n pop(): T {\r\n Assert.int_gt(this.list.length, 0);\r\n return this.list.pop()!;\r\n }\r\n\r\n top() {\r\n return Assert.array_elem(this.list, this.list.length - 1, \"Stack is empty!\");\r\n }\r\n\r\n toArray() {\r\n return this.list;\r\n }\r\n\r\n get length() {\r\n return this.list.length;\r\n }\r\n\r\n clear() {\r\n this.list.length = 0;\r\n }\r\n}\r\n","export class Vec2 {\r\n readonly x: number;\r\n readonly y: number;\r\n\r\n constructor(x?: number, y?: number) {\r\n this.x = x ?? 0;\r\n this.y = y ?? 0;\r\n }\r\n\r\n length() {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n\r\n add(a: Vec2) {\r\n return new Vec2(this.x + a.x, this.y + a.y);\r\n }\r\n\r\n sub(a: Vec2) {\r\n return new Vec2(this.x - a.x, this.y - a.y);\r\n }\r\n\r\n mul(a: number) {\r\n return new Vec2(this.x * a, this.y * a);\r\n }\r\n\r\n div(a: number) {\r\n return new Vec2(this.x / a, this.y / a);\r\n }\r\n}\r\n","/**\r\n * LRUCache class: Least Recently Used cache with a fixed capacity\r\n * \r\n * Provided by ChatGPT.\r\n */\r\nexport class LRUCache<K extends string, V> {\r\n private cache: Record<K, V>; // Stores the actual key-value pairs\r\n private next: Record<K, K>; // Linked list: points to the next newer key\r\n private prev: Record<K, K>; // Linked list: points to the previous older key\r\n private head: K | null; // The least recently used key (oldest)\r\n private tail: K | null; // The most recently used key (newest)\r\n private capacity: number; // Maximum number of items allowed\r\n private size: number; // Current number of items\r\n private maxKeyLength: number; // Maximum key length.\r\n\r\n constructor(maxSize: number, maxKeyLength: number = Infinity) {\r\n this.cache = Object.create(null);\r\n this.next = Object.create(null);\r\n this.prev = Object.create(null);\r\n this.head = null;\r\n this.tail = null;\r\n this.capacity = maxSize;\r\n this.size = 0;\r\n this.maxKeyLength = maxKeyLength;\r\n }\r\n\r\n // Retrieves a value from the cache\r\n get(key: K): V | undefined {\r\n if (key.length > this.maxKeyLength) return undefined;\r\n\r\n if (this.cache[key] !== undefined) {\r\n this.touch(key); // Mark as recently used\r\n return this.cache[key];\r\n }\r\n return undefined; // Key not found\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (key.length > this.maxKeyLength) {\r\n // Skip caching for keys that are too large\r\n return;\r\n }\r\n\r\n if (this.cache[key] !== undefined) {\r\n // Update value and mark as recently used\r\n this.cache[key] = value;\r\n this.touch(key);\r\n return;\r\n }\r\n\r\n // If cache is full, evict the least recently used item\r\n if (this.size >= this.capacity) {\r\n this.evict();\r\n }\r\n\r\n // Add new entry to the cache and to the tail (most recent)\r\n this.cache[key] = value;\r\n this.addToTail(key);\r\n this.size++;\r\n }\r\n\r\n // Marks a key as most recently used\r\n private touch(key: K): void {\r\n if (this.tail === key) return; // Already the most recently used\r\n\r\n this.removeKey(key); // Remove from current position\r\n this.addToTail(key); // Re-add at the tail\r\n }\r\n\r\n // Evicts the least recently used item (at the head)\r\n private evict(): void {\r\n if (this.head !== null) {\r\n const oldestKey = this.head;\r\n this.removeKey(oldestKey); // Remove from the linked list\r\n delete this.cache[oldestKey]; // Remove from cache storage\r\n this.size--;\r\n }\r\n }\r\n\r\n // Removes a key from the linked list\r\n private removeKey(key: K): void {\r\n const prevKey = this.prev[key];\r\n const nextKey = this.next[key];\r\n\r\n if (prevKey !== undefined) {\r\n this.next[prevKey] = nextKey;\r\n }\r\n else {\r\n // If no previous key, this was the head\r\n this.head = nextKey ?? null;\r\n }\r\n\r\n if (nextKey !== undefined) {\r\n this.prev[nextKey] = prevKey;\r\n }\r\n else {\r\n // If no next key, this was the tail\r\n this.tail = prevKey ?? null;\r\n }\r\n\r\n // Clean up links\r\n delete this.prev[key];\r\n delete this.next[key];\r\n }\r\n\r\n // Adds a key to the tail (most recently used position)\r\n private addToTail(key: K): void {\r\n if (this.tail !== null) {\r\n // Link the current tail to the new key\r\n this.next[this.tail] = key;\r\n this.prev[key] = this.tail;\r\n }\r\n else {\r\n // If the cache was empty, set as head\r\n this.head = key;\r\n }\r\n this.tail = key; // Always set as new tail\r\n }\r\n}\r\n","import { isInteger } from \"../math\";\r\n\r\n/**\r\n * A cache-like structure optimized for small-range integer keys, including negatives.\r\n *\r\n * Internally implemented using two sparse arrays: one for non-negative keys,\r\n * and one for negative keys (stored by index `-key - 1`).\r\n *\r\n * @remarks\r\n * - Fast access for small integer keys.\r\n * - Not suitable for large or sparse key ranges — memory usage may grow significantly.\r\n * - Supports `get`, `set`, `delete`, `has` and `clear`\r\n *\r\n * @example\r\n * ```ts\r\n * const cache = new SmallIntCache<string>();\r\n * cache.set(-2, 'A');\r\n * cache.set(3, 'B');\r\n * console.log(cache.get(-2)); // 'A'\r\n * ```\r\n */\r\nexport class SmallIntCache<V> {\r\n private pos: V[]; // for keys >= 0\r\n private neg: V[]; // for keys < 0\r\n\r\n constructor() {\r\n this.pos = [];\r\n this.neg = [];\r\n }\r\n\r\n set(key: number, value: V): void {\r\n if (!isInteger(key)) {\r\n throw new Error(\"Key must be an integer\");\r\n }\r\n else if (key >= 0) {\r\n this.pos[key] = value;\r\n }\r\n else {\r\n this.neg[-key - 1] = value; // e.g., key = -1 => index = 0\r\n }\r\n }\r\n\r\n get(key: number): V | undefined {\r\n if (!isInteger(key)) {\r\n throw new Error(\"Key must be an integer\");\r\n }\r\n else if (key >= 0) {\r\n return this.pos[key];\r\n }\r\n else {\r\n return this.neg[-key - 1];\r\n }\r\n }\r\n\r\n has(key: number): boolean {\r\n if (!isInteger(key)) {\r\n return false;\r\n }\r\n else if (key >= 0) {\r\n return key in this.pos;\r\n }\r\n else {\r\n return (-key - 1) in this.neg;\r\n }\r\n }\r\n\r\n delete(key: number): void {\r\n if (!isInteger(key)) {\r\n return;\r\n }\r\n else if (key >= 0) {\r\n delete this.pos[key];\r\n }\r\n else {\r\n delete this.neg[-key - 1];\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.pos = [];\r\n this.neg = [];\r\n }\r\n}\r\n"],"mappings":"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","names":["Assert","require","Device","query","toPx","canvas","repeatString","Cookies","ConsentState","str"]}
|