@hrnec06/util 1.4.14
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/README.md +1 -0
- package/dist/cjs/array.d.ts +3 -0
- package/dist/cjs/array.js +27 -0
- package/dist/cjs/array.js.map +1 -0
- package/dist/cjs/general.d.ts +37 -0
- package/dist/cjs/general.js +151 -0
- package/dist/cjs/general.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.js +28 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/AsyncClass.d.ts +13 -0
- package/dist/cjs/lib/AsyncClass.js +37 -0
- package/dist/cjs/lib/AsyncClass.js.map +1 -0
- package/dist/cjs/lib/Listenable.d.ts +21 -0
- package/dist/cjs/lib/Listenable.js +51 -0
- package/dist/cjs/lib/Listenable.js.map +1 -0
- package/dist/cjs/lib/UnitsCalculator.d.ts +27 -0
- package/dist/cjs/lib/UnitsCalculator.js +88 -0
- package/dist/cjs/lib/UnitsCalculator.js.map +1 -0
- package/dist/cjs/math.d.ts +1 -0
- package/dist/cjs/math.js +11 -0
- package/dist/cjs/math.js.map +1 -0
- package/dist/cjs/polyfill.d.ts +1 -0
- package/dist/cjs/polyfill.js +15 -0
- package/dist/cjs/polyfill.js.map +1 -0
- package/dist/cjs/record.d.ts +28 -0
- package/dist/cjs/record.js +166 -0
- package/dist/cjs/record.js.map +1 -0
- package/dist/cjs/string.d.ts +32 -0
- package/dist/cjs/string.js +99 -0
- package/dist/cjs/string.js.map +1 -0
- package/dist/cjs/types.d.ts +36 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/vector.d.ts +17 -0
- package/dist/cjs/vector.js +86 -0
- package/dist/cjs/vector.js.map +1 -0
- package/dist/esm/array.d.ts +3 -0
- package/dist/esm/array.js +22 -0
- package/dist/esm/array.js.map +1 -0
- package/dist/esm/general.d.ts +37 -0
- package/dist/esm/general.js +140 -0
- package/dist/esm/general.js.map +1 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/AsyncClass.d.ts +13 -0
- package/dist/esm/lib/AsyncClass.js +33 -0
- package/dist/esm/lib/AsyncClass.js.map +1 -0
- package/dist/esm/lib/Listenable.d.ts +21 -0
- package/dist/esm/lib/Listenable.js +48 -0
- package/dist/esm/lib/Listenable.js.map +1 -0
- package/dist/esm/lib/UnitsCalculator.d.ts +27 -0
- package/dist/esm/lib/UnitsCalculator.js +86 -0
- package/dist/esm/lib/UnitsCalculator.js.map +1 -0
- package/dist/esm/math.d.ts +1 -0
- package/dist/esm/math.js +8 -0
- package/dist/esm/math.js.map +1 -0
- package/dist/esm/polyfill.d.ts +1 -0
- package/dist/esm/polyfill.js +12 -0
- package/dist/esm/polyfill.js.map +1 -0
- package/dist/esm/record.d.ts +28 -0
- package/dist/esm/record.js +143 -0
- package/dist/esm/record.js.map +1 -0
- package/dist/esm/string.d.ts +32 -0
- package/dist/esm/string.js +88 -0
- package/dist/esm/string.js.map +1 -0
- package/dist/esm/types.d.ts +36 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/vector.d.ts +17 -0
- package/dist/esm/vector.js +68 -0
- package/dist/esm/vector.js.map +1 -0
- package/package.json +72 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Soukromá (velice odbytá) NPM knihovna pro TS utilities.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.arrayUnique = arrayUnique;
|
|
4
|
+
exports.forLoop = forLoop;
|
|
5
|
+
exports.reduce = reduce;
|
|
6
|
+
function arrayUnique(array) {
|
|
7
|
+
const unique = [];
|
|
8
|
+
for (const item of array) {
|
|
9
|
+
if (unique.includes(item))
|
|
10
|
+
continue;
|
|
11
|
+
unique.push(item);
|
|
12
|
+
}
|
|
13
|
+
return unique;
|
|
14
|
+
}
|
|
15
|
+
function forLoop(count, callback) {
|
|
16
|
+
const result = [];
|
|
17
|
+
for (let i = 0; i < count; i++)
|
|
18
|
+
result.push(callback(i));
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
function reduce(values, callback, initialValue) {
|
|
22
|
+
for (let i = 0; i < values.length; i++) {
|
|
23
|
+
initialValue = callback(initialValue, values[i], i);
|
|
24
|
+
}
|
|
25
|
+
return initialValue;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":";;AAAA,kCAQC;AAED,0BAMC;AAED,wBAKC;AAvBD,SAAgB,WAAW,CAAI,KAAU;IACxC,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACxB,SAAS;QACV,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAgB,OAAO,CAAI,KAAa,EAAE,QAA2B;IACpE,MAAM,MAAM,GAAQ,EAAE,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;QAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAgB,MAAM,CAAO,MAAW,EAAE,QAAoD,EAAE,YAAe;IAC9G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,YAAY,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Nullable } from "./types.js";
|
|
2
|
+
export declare function todo(message?: string): never;
|
|
3
|
+
export declare function assert(condition: boolean, error?: string | Error): asserts condition;
|
|
4
|
+
export declare function debounce(delay: number): Promise<void>;
|
|
5
|
+
export declare function countStep(currentValue: number, targetValue: number, step?: number): number;
|
|
6
|
+
export declare function random(min: number, max: number, round?: boolean): number;
|
|
7
|
+
export declare function duration({ milliseconds, seconds, minutes, hours, days }: {
|
|
8
|
+
milliseconds?: number;
|
|
9
|
+
seconds?: number;
|
|
10
|
+
minutes?: number;
|
|
11
|
+
hours?: number;
|
|
12
|
+
days?: number;
|
|
13
|
+
}): number;
|
|
14
|
+
export declare function deepCompare(itemA: unknown, itemB: unknown): boolean;
|
|
15
|
+
interface StackTraceItem {
|
|
16
|
+
name: string;
|
|
17
|
+
path: string;
|
|
18
|
+
line: number;
|
|
19
|
+
position: number;
|
|
20
|
+
}
|
|
21
|
+
interface InvalidStackTrace {
|
|
22
|
+
value: string;
|
|
23
|
+
}
|
|
24
|
+
type StackTraceList = Array<StackTraceItem | InvalidStackTrace>;
|
|
25
|
+
/**
|
|
26
|
+
* Parses error stack trace
|
|
27
|
+
*
|
|
28
|
+
* @deprecated Doesn't work right with fucking tsx or fucking next.js.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getErrorTrace(): StackTraceList;
|
|
31
|
+
export declare function getCaller(lineOffset?: number): Nullable<{
|
|
32
|
+
at: Nullable<string>;
|
|
33
|
+
file: string;
|
|
34
|
+
line: number;
|
|
35
|
+
char: number;
|
|
36
|
+
}>;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.todo = todo;
|
|
4
|
+
exports.assert = assert;
|
|
5
|
+
exports.debounce = debounce;
|
|
6
|
+
exports.countStep = countStep;
|
|
7
|
+
exports.random = random;
|
|
8
|
+
exports.duration = duration;
|
|
9
|
+
exports.deepCompare = deepCompare;
|
|
10
|
+
exports.getErrorTrace = getErrorTrace;
|
|
11
|
+
exports.getCaller = getCaller;
|
|
12
|
+
const record_js_1 = require("./record.js");
|
|
13
|
+
function todo(message) {
|
|
14
|
+
if (!message) {
|
|
15
|
+
const callInfo = getCaller(3);
|
|
16
|
+
if (callInfo) {
|
|
17
|
+
message = callInfo.at ? callInfo.at + '()' : '';
|
|
18
|
+
message += ` at ${callInfo.file} [${callInfo.line}:${callInfo.char}]`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
message = 'TODO' + (message ? ': ' + message : '');
|
|
22
|
+
throw new Error(message);
|
|
23
|
+
}
|
|
24
|
+
function assert(condition, error) {
|
|
25
|
+
if (!condition) {
|
|
26
|
+
if (error instanceof Error)
|
|
27
|
+
throw error;
|
|
28
|
+
if (typeof error === 'string')
|
|
29
|
+
throw new Error(error);
|
|
30
|
+
throw new Error(`Assert condition failed.`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function debounce(delay) {
|
|
34
|
+
return new Promise((resolve) => setTimeout(() => resolve(), delay));
|
|
35
|
+
}
|
|
36
|
+
function countStep(currentValue, targetValue, step = 1) {
|
|
37
|
+
if (targetValue === currentValue)
|
|
38
|
+
return 0;
|
|
39
|
+
step = Math.abs(step);
|
|
40
|
+
const maxDiff = targetValue - currentValue;
|
|
41
|
+
if (currentValue > targetValue)
|
|
42
|
+
return Math.max(-step, (targetValue - currentValue));
|
|
43
|
+
if (currentValue < targetValue)
|
|
44
|
+
return Math.min(step, maxDiff);
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
function random(min, max, round = true) {
|
|
48
|
+
let r = min + Math.random() * (max - min + (round ? 1 : 0));
|
|
49
|
+
if (round)
|
|
50
|
+
return Math.floor(r);
|
|
51
|
+
return r;
|
|
52
|
+
}
|
|
53
|
+
function duration({ milliseconds = 0, seconds = 0, minutes = 0, hours = 0, days = 0 }) {
|
|
54
|
+
return (milliseconds +
|
|
55
|
+
1000 * seconds +
|
|
56
|
+
1000 * 60 * minutes +
|
|
57
|
+
1000 * 60 * 60 * hours +
|
|
58
|
+
1000 * 60 * 60 * 24 * days);
|
|
59
|
+
}
|
|
60
|
+
function deepCompare(itemA, itemB) {
|
|
61
|
+
if (itemA === itemB)
|
|
62
|
+
return true;
|
|
63
|
+
if (typeof itemA !== typeof itemB)
|
|
64
|
+
return false;
|
|
65
|
+
if (typeof itemA !== 'object' || itemA === null || typeof itemB !== 'object' || itemB === null)
|
|
66
|
+
return false;
|
|
67
|
+
// Is array or object
|
|
68
|
+
if (Array.isArray(itemA) && Array.isArray(itemB)) {
|
|
69
|
+
if (itemA.length !== itemB.length)
|
|
70
|
+
return false;
|
|
71
|
+
for (let i = 0; i < itemA.length; i++) {
|
|
72
|
+
if (!deepCompare(itemA[i], itemB[i]))
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Is object (not null) or array
|
|
77
|
+
if (Array.isArray(itemA) || Array.isArray(itemB))
|
|
78
|
+
return false;
|
|
79
|
+
// Is object
|
|
80
|
+
const keysA = (0, record_js_1.keys)(itemA);
|
|
81
|
+
const keysB = (0, record_js_1.keys)(itemB);
|
|
82
|
+
if (keysA.length !== keysB.length)
|
|
83
|
+
return false;
|
|
84
|
+
for (const key of keysA) {
|
|
85
|
+
if (!deepCompare(itemA[key], itemB[key]))
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Parses error stack trace
|
|
92
|
+
*
|
|
93
|
+
* @deprecated Doesn't work right with fucking tsx or fucking next.js.
|
|
94
|
+
*/
|
|
95
|
+
function getErrorTrace() {
|
|
96
|
+
let stack;
|
|
97
|
+
try {
|
|
98
|
+
throw new Error();
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
assert(error instanceof Error, 'Invalid error.');
|
|
102
|
+
stack = error.stack || '';
|
|
103
|
+
}
|
|
104
|
+
const stackList = stack.split("\n");
|
|
105
|
+
const stackTrace = [];
|
|
106
|
+
for (let i = 1; i < stackList.length; i++) {
|
|
107
|
+
const regexp = /^\s+at (.+) \((.+):(\d+):(\d+)\)$/;
|
|
108
|
+
const match = regexp.exec(stackList[i]);
|
|
109
|
+
if (!match) {
|
|
110
|
+
stackTrace.push({
|
|
111
|
+
value: stackList[i]
|
|
112
|
+
});
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const name = match[1];
|
|
116
|
+
const path = match[2];
|
|
117
|
+
const line = parseInt(match[3]);
|
|
118
|
+
const position = parseInt(match[4]);
|
|
119
|
+
const item = {
|
|
120
|
+
name: name,
|
|
121
|
+
path: path,
|
|
122
|
+
line,
|
|
123
|
+
position
|
|
124
|
+
};
|
|
125
|
+
stackTrace.push(item);
|
|
126
|
+
}
|
|
127
|
+
return stackTrace;
|
|
128
|
+
}
|
|
129
|
+
function getCaller(lineOffset = 2) {
|
|
130
|
+
const stack = new Error().stack;
|
|
131
|
+
if (!stack)
|
|
132
|
+
return null;
|
|
133
|
+
const lines = stack.split('\n');
|
|
134
|
+
const caller = lines[lineOffset];
|
|
135
|
+
if (!caller)
|
|
136
|
+
return null;
|
|
137
|
+
const callerParsed = /^\W*at (.+) \((.+):(\d+):(\d+)\)$/.exec(caller);
|
|
138
|
+
if (callerParsed === null)
|
|
139
|
+
return null;
|
|
140
|
+
const at = callerParsed[1] === '<anonymous>' ? null : callerParsed[1];
|
|
141
|
+
const file = callerParsed[2];
|
|
142
|
+
const line = parseInt(callerParsed[3]);
|
|
143
|
+
const char = parseInt(callerParsed[4]);
|
|
144
|
+
return {
|
|
145
|
+
at,
|
|
146
|
+
file,
|
|
147
|
+
line,
|
|
148
|
+
char
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=general.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"general.js","sourceRoot":"","sources":["../../src/general.ts"],"names":[],"mappings":";;AAGA,oBAgBC;AAED,wBAYC;AAED,4BAEC;AAED,8BAeC;AAED,wBAOC;AAED,4BAoBC;AAED,kCAyCC;AAqBD,sCA0CC;AAED,8BA0BC;AA3ND,2CAAmC;AAGnC,SAAgB,IAAI,CAAC,OAAgB;IAEpC,IAAI,CAAC,OAAO,EACZ,CAAC;QACA,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE9B,IAAI,QAAQ,EACZ,CAAC;YACA,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;QACvE,CAAC;IACF,CAAC;IAED,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEnD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,MAAM,CAAC,SAAkB,EAAE,KAAsB;IAEhE,IAAI,CAAC,SAAS,EACd,CAAC;QACA,IAAI,KAAK,YAAY,KAAK;YACzB,MAAM,KAAK,CAAC;QAEb,IAAI,OAAO,KAAK,KAAK,QAAQ;YAC5B,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAExB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC7C,CAAC;AACF,CAAC;AAED,SAAgB,QAAQ,CAAC,KAAa;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAgB,SAAS,CAAC,YAAoB,EAAE,WAAmB,EAAE,OAAe,CAAC;IACpF,IAAI,WAAW,KAAK,YAAY;QAC/B,OAAO,CAAC,CAAC;IAEV,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,WAAW,GAAG,YAAY,CAAC;IAE3C,IAAI,YAAY,GAAG,WAAW;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;IAEtD,IAAI,YAAY,GAAG,WAAW;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhC,OAAO,CAAC,CAAC;AACV,CAAC;AAED,SAAgB,MAAM,CAAC,GAAW,EAAE,GAAW,EAAE,QAAiB,IAAI;IACrE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5D,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,OAAO,CAAC,CAAC;AACV,CAAC;AAED,SAAgB,QAAQ,CAAC,EACxB,YAAY,GAAG,CAAC,EAChB,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,KAAK,GAAG,CAAC,EACT,IAAI,GAAG,CAAC,EAOR;IACA,OAAO,CACN,YAAY;QACZ,IAAI,GAAG,OAAO;QACd,IAAI,GAAG,EAAE,GAAG,OAAO;QACnB,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK;QACtB,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAC1B,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,KAAc,EAAE,KAAc;IACzD,IAAI,KAAK,KAAK,KAAK;QAClB,OAAO,IAAI,CAAC;IAEb,IAAI,OAAO,KAAK,KAAK,OAAO,KAAK;QAChC,OAAO,KAAK,CAAC;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAC7F,OAAO,KAAK,CAAC;IAEd,qBAAqB;IAErB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAChC,OAAO,KAAK,CAAC;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnC,OAAO,KAAK,CAAC;QACf,CAAC;IACF,CAAC;IAED,gCAAgC;IAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/C,OAAO,KAAK,CAAC;IAEd,YAAY;IAEZ,MAAM,KAAK,GAAG,IAAA,gBAAI,EAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAA,gBAAI,EAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAChC,OAAO,KAAK,CAAC;IAEd,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAyB,CAAC,EAAE,KAAK,CAAC,GAAyB,CAAC,CAAC;YACnF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAgBD;;;;GAIG;AACH,SAAgB,aAAa;IAC5B,IAAI,KAAa,CAAC;IAElB,IAAI,CAAC;QACJ,MAAM,IAAI,KAAK,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,YAAY,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAEjD,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAmB,EAAE,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,mCAAmC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,UAAU,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,SAAS,CAAC,CAAC,CAAE;aACpB,CAAC,CAAC;YAEH,SAAS;QACV,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAErC,MAAM,IAAI,GAAmB;YAC5B,IAAI,EAAE,IAAK;YACX,IAAI,EAAE,IAAK;YACX,IAAI;YACJ,QAAQ;SACR,CAAC;QAEF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAgB,SAAS,CAAC,aAAqB,CAAC;IAE/C,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,KAAK;QACT,OAAO,IAAI,CAAC;IAEb,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM;QACV,OAAO,IAAI,CAAC;IAEb,MAAM,YAAY,GAAG,mCAAmC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtE,IAAI,YAAY,KAAK,IAAI;QACxB,OAAO,IAAI,CAAC;IAEb,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvC,OAAO;QACN,EAAE;QACF,IAAI;QACJ,IAAI;QACJ,IAAI;KACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './array.js';
|
|
2
|
+
export * from './general.js';
|
|
3
|
+
export * from './record.js';
|
|
4
|
+
export * from './string.js';
|
|
5
|
+
export * from './vector.js';
|
|
6
|
+
export * from './math.js';
|
|
7
|
+
export * from './polyfill.js';
|
|
8
|
+
export * from './lib/UnitsCalculator.js';
|
|
9
|
+
export * from './lib/Listenable.js';
|
|
10
|
+
export * from './lib/AsyncClass.js';
|
|
11
|
+
export * from './types.js';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./array.js"), exports);
|
|
18
|
+
__exportStar(require("./general.js"), exports);
|
|
19
|
+
__exportStar(require("./record.js"), exports);
|
|
20
|
+
__exportStar(require("./string.js"), exports);
|
|
21
|
+
__exportStar(require("./vector.js"), exports);
|
|
22
|
+
__exportStar(require("./math.js"), exports);
|
|
23
|
+
__exportStar(require("./polyfill.js"), exports);
|
|
24
|
+
__exportStar(require("./lib/UnitsCalculator.js"), exports);
|
|
25
|
+
__exportStar(require("./lib/Listenable.js"), exports);
|
|
26
|
+
__exportStar(require("./lib/AsyncClass.js"), exports);
|
|
27
|
+
__exportStar(require("./types.js"), exports);
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,4CAA0B;AAC1B,gDAA8B;AAE9B,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AAEpC,6CAA2B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Nullable, Promiseable } from '../types.js';
|
|
2
|
+
type AwaiterCallback<T> = (instance: T) => void;
|
|
3
|
+
export declare abstract class AsyncClass<T> {
|
|
4
|
+
private awaiters;
|
|
5
|
+
private instance;
|
|
6
|
+
constructor();
|
|
7
|
+
protected abstract loadInstance(): Promiseable<T>;
|
|
8
|
+
private init;
|
|
9
|
+
getInstance(): Nullable<T>;
|
|
10
|
+
getInstanceAsync(): Promiseable<T>;
|
|
11
|
+
onInstanceLoad(callback: AwaiterCallback<T>): void;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AsyncClass = void 0;
|
|
4
|
+
const polyfill_js_1 = require("../polyfill.js");
|
|
5
|
+
class AsyncClass {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.awaiters = [];
|
|
8
|
+
this.instance = null;
|
|
9
|
+
this.init();
|
|
10
|
+
}
|
|
11
|
+
async init() {
|
|
12
|
+
(0, polyfill_js_1.nextTick)(async () => {
|
|
13
|
+
const result = await this.loadInstance();
|
|
14
|
+
this.instance = result;
|
|
15
|
+
for (const awaiter of this.awaiters)
|
|
16
|
+
awaiter(result);
|
|
17
|
+
this.awaiters = [];
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
getInstance() {
|
|
21
|
+
return this.instance;
|
|
22
|
+
}
|
|
23
|
+
getInstanceAsync() {
|
|
24
|
+
if (this.instance !== null)
|
|
25
|
+
return this.instance;
|
|
26
|
+
return new Promise((resolve) => this.onInstanceLoad((instance) => resolve(instance)));
|
|
27
|
+
}
|
|
28
|
+
onInstanceLoad(callback) {
|
|
29
|
+
if (this.instance !== null) {
|
|
30
|
+
callback(this.instance);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.awaiters.push(callback);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.AsyncClass = AsyncClass;
|
|
37
|
+
//# sourceMappingURL=AsyncClass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncClass.js","sourceRoot":"","sources":["../../../src/lib/AsyncClass.ts"],"names":[],"mappings":";;;AAGA,gDAA0C;AAI1C,MAAsB,UAAU;IAK/B;QAHQ,aAAQ,GAA8B,EAAE,CAAC;QACzC,aAAQ,GAAgB,IAAI,CAAC;QAIpC,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAIO,KAAK,CAAC,IAAI;QAEjB,IAAA,sBAAQ,EAAC,KAAK,IAAI,EAAE;YACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAEzC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;YAEvB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;gBAClC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEjB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,WAAW;QAEjB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAEM,gBAAgB;QAEtB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YACzB,OAAO,IAAI,CAAC,QAAQ,CAAC;QAEtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAEM,cAAc,CAAC,QAA4B;QAEjD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAC1B,CAAC;YACA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACD;AAjDD,gCAiDC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface ListenerMap {
|
|
2
|
+
[key: string]: unknown;
|
|
3
|
+
}
|
|
4
|
+
type GetCallbackValue<R, L extends keyof R> = ParseCallbackValue<R[L]>;
|
|
5
|
+
type ParseCallbackValue<V> = [V] extends [CustomListener<infer A>] ? [...A] : (V extends void ? [] : [value: V]);
|
|
6
|
+
type GetCallback<V extends unknown[]> = V extends null ? () => void : (...value: V) => void;
|
|
7
|
+
declare const __listenerBrand: unique symbol;
|
|
8
|
+
export interface CustomListener<T extends unknown[]> {
|
|
9
|
+
readonly [__listenerBrand]: T;
|
|
10
|
+
}
|
|
11
|
+
export declare abstract class Listenable<R extends ListenerMap> {
|
|
12
|
+
private readonly maxListeners;
|
|
13
|
+
private listeners;
|
|
14
|
+
private listenerCount;
|
|
15
|
+
constructor(maxListeners?: number);
|
|
16
|
+
on<L extends keyof R>(listener: L, callback: GetCallback<GetCallbackValue<R, L>>, once?: boolean): string;
|
|
17
|
+
off(listener: keyof R): boolean;
|
|
18
|
+
off(listener: keyof R, id: string): boolean;
|
|
19
|
+
triggerListener<L extends keyof R>(listener: L, ...value: GetCallbackValue<R, L>): boolean;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Listenable = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
class Listenable {
|
|
6
|
+
constructor(maxListeners = 1000) {
|
|
7
|
+
this.maxListeners = maxListeners;
|
|
8
|
+
this.listeners = {};
|
|
9
|
+
this.listenerCount = 0;
|
|
10
|
+
}
|
|
11
|
+
on(listener, callback, once) {
|
|
12
|
+
if (this.maxListeners < this.listenerCount)
|
|
13
|
+
throw new Error(`Reached maximum of listeners for ${this.constructor.name}. (${this.maxListeners})`);
|
|
14
|
+
if (!this.listeners[listener])
|
|
15
|
+
this.listeners[listener] = {};
|
|
16
|
+
const uuid = (0, uuid_1.v4)();
|
|
17
|
+
const entry = {
|
|
18
|
+
id: uuid,
|
|
19
|
+
once: once === true,
|
|
20
|
+
callback: callback
|
|
21
|
+
};
|
|
22
|
+
this.listeners[listener][uuid] = entry;
|
|
23
|
+
this.listenerCount++;
|
|
24
|
+
return uuid;
|
|
25
|
+
}
|
|
26
|
+
off(listener, id) {
|
|
27
|
+
if (!this.listeners[listener])
|
|
28
|
+
return false;
|
|
29
|
+
let result;
|
|
30
|
+
if (id)
|
|
31
|
+
result = delete this.listeners[listener][id];
|
|
32
|
+
else
|
|
33
|
+
result = delete this.listeners[listener];
|
|
34
|
+
if (result)
|
|
35
|
+
this.listenerCount--;
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
triggerListener(listener, ...value) {
|
|
39
|
+
if (!this.listeners[listener])
|
|
40
|
+
return false;
|
|
41
|
+
for (const key in this.listeners[listener]) {
|
|
42
|
+
const entry = this.listeners[listener][key];
|
|
43
|
+
entry.callback(...value);
|
|
44
|
+
if (entry.once)
|
|
45
|
+
this.off(listener, entry.id);
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.Listenable = Listenable;
|
|
51
|
+
//# sourceMappingURL=Listenable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Listenable.js","sourceRoot":"","sources":["../../../src/lib/Listenable.ts"],"names":[],"mappings":";;;AAAA,+BAAmC;AA8BnC,MAAsB,UAAU;IAI/B,YACkB,eAAuB,IAAI;QAA3B,iBAAY,GAAZ,YAAY,CAAe;QAJrC,cAAS,GAA4D,EAAE,CAAA;QACvE,kBAAa,GAAW,CAAC,CAAC;IAI/B,CAAC;IAEG,EAAE,CAAoB,QAAW,EAAE,QAA6C,EAAE,IAAc;QACtG,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa;YACzC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAEtG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAA,SAAM,GAAE,CAAC;QAEtB,MAAM,KAAK,GAAkB;YAC5B,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,IAAI,KAAK,IAAI;YACnB,QAAQ,EAAE,QAAQ;SAClB,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAEvC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,OAAO,IAAI,CAAC;IACb,CAAC;IAKM,GAAG,CAAC,QAAiB,EAAE,EAAW;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC5B,OAAO,KAAK,CAAC;QAEd,IAAI,MAAe,CAAC;QACpB,IAAI,EAAE;YACL,MAAM,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;;YAE7C,MAAM,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE1C,IAAI,MAAM;YACT,IAAI,CAAC,aAAa,EAAE,CAAC;QAEtB,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,eAAe,CAAoB,QAAW,EAAE,GAAG,KAA6B;QACtF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC5B,OAAO,KAAK,CAAC;QAEd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAE,CAAC;YAE7C,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC;YAEzB,IAAI,KAAK,CAAC,IAAI;gBACb,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AAhED,gCAgEC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
interface UnitFormat {
|
|
2
|
+
short: string;
|
|
3
|
+
full: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class UnitCalculator<const U extends Record<string, number>> {
|
|
6
|
+
private units;
|
|
7
|
+
private format;
|
|
8
|
+
constructor(units: U, format: Record<keyof U, UnitFormat>);
|
|
9
|
+
getUnitFormat(unit: keyof U): UnitFormat;
|
|
10
|
+
convert(value: number, from: keyof U, to: keyof U): number;
|
|
11
|
+
scaleDownValue(value: number, unit: keyof U): {
|
|
12
|
+
value: number;
|
|
13
|
+
format: keyof U;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Format string
|
|
17
|
+
*
|
|
18
|
+
* @placeholder %v - Value
|
|
19
|
+
* @placeholder %V - Rounded value
|
|
20
|
+
* @placeholder %uu - Unit
|
|
21
|
+
* @placeholder %UU - Unit uppercase
|
|
22
|
+
* @placeholder %u - Short unit
|
|
23
|
+
* @placeholder %U . Short unit uppercase
|
|
24
|
+
*/
|
|
25
|
+
formatValue(scaleDown: boolean, format: string, value: number, unit: keyof U, fractionDigits?: number): string;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnitCalculator = void 0;
|
|
4
|
+
const general_js_1 = require("../general.js");
|
|
5
|
+
const record_js_1 = require("../record.js");
|
|
6
|
+
class UnitCalculator {
|
|
7
|
+
constructor(units, format) {
|
|
8
|
+
this.units = units;
|
|
9
|
+
this.format = format;
|
|
10
|
+
}
|
|
11
|
+
getUnitFormat(unit) {
|
|
12
|
+
return this.format[unit];
|
|
13
|
+
}
|
|
14
|
+
convert(value, from, to) {
|
|
15
|
+
const unitKeys = (0, record_js_1.keys)(this.units);
|
|
16
|
+
const unitValues = (0, record_js_1.values)(this.units);
|
|
17
|
+
const fromIx = unitKeys.indexOf(from);
|
|
18
|
+
const toIx = unitKeys.indexOf(to);
|
|
19
|
+
if (fromIx === -1)
|
|
20
|
+
throw new Error(`Invalid unit '${from}'`);
|
|
21
|
+
if (toIx === -1)
|
|
22
|
+
throw new Error(`Invalid unit '${to}'`);
|
|
23
|
+
if (fromIx === toIx)
|
|
24
|
+
return value;
|
|
25
|
+
let convertedValue = value;
|
|
26
|
+
let conversionStep = fromIx;
|
|
27
|
+
while (conversionStep != toIx) {
|
|
28
|
+
const mp = unitValues[conversionStep + (0, general_js_1.countStep)(conversionStep, toIx, 1)];
|
|
29
|
+
if (mp === null || mp === undefined)
|
|
30
|
+
throw new Error('Invalid conversion step.');
|
|
31
|
+
if (conversionStep < toIx) {
|
|
32
|
+
conversionStep++;
|
|
33
|
+
convertedValue /= mp;
|
|
34
|
+
}
|
|
35
|
+
if (conversionStep > toIx) {
|
|
36
|
+
conversionStep--;
|
|
37
|
+
convertedValue *= mp;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return convertedValue;
|
|
41
|
+
}
|
|
42
|
+
scaleDownValue(value, unit) {
|
|
43
|
+
const keyList = (0, record_js_1.keys)(this.units).reverse();
|
|
44
|
+
for (const key of keyList) {
|
|
45
|
+
const formatted = this.convert(value, unit, key);
|
|
46
|
+
if (formatted >= 1.0)
|
|
47
|
+
return {
|
|
48
|
+
value: formatted,
|
|
49
|
+
format: key
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
value: value,
|
|
54
|
+
format: unit
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Format string
|
|
59
|
+
*
|
|
60
|
+
* @placeholder %v - Value
|
|
61
|
+
* @placeholder %V - Rounded value
|
|
62
|
+
* @placeholder %uu - Unit
|
|
63
|
+
* @placeholder %UU - Unit uppercase
|
|
64
|
+
* @placeholder %u - Short unit
|
|
65
|
+
* @placeholder %U . Short unit uppercase
|
|
66
|
+
*/
|
|
67
|
+
formatValue(scaleDown, format, value, unit, fractionDigits = 2) {
|
|
68
|
+
const data = scaleDown
|
|
69
|
+
? this.scaleDownValue(value, unit)
|
|
70
|
+
: {
|
|
71
|
+
value: value,
|
|
72
|
+
format: unit
|
|
73
|
+
};
|
|
74
|
+
const unitFormat = this.getUnitFormat(data.format);
|
|
75
|
+
let fullFormat = unitFormat.full;
|
|
76
|
+
if (value === 0 || value > 1)
|
|
77
|
+
fullFormat += 's';
|
|
78
|
+
return format
|
|
79
|
+
.replaceAll(/%v/g, data.value.toFixed(fractionDigits))
|
|
80
|
+
.replaceAll(/%V/g, Math.round(data.value).toString())
|
|
81
|
+
.replaceAll(/%uu/g, fullFormat)
|
|
82
|
+
.replaceAll(/%UU/g, fullFormat.toUpperCase())
|
|
83
|
+
.replaceAll(/%u/g, unitFormat.short)
|
|
84
|
+
.replaceAll(/%U/g, unitFormat.short.toUpperCase());
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.UnitCalculator = UnitCalculator;
|
|
88
|
+
//# sourceMappingURL=UnitsCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnitsCalculator.js","sourceRoot":"","sources":["../../../src/lib/UnitsCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function minmax(value: number, min?: number, max?: number): number;
|
package/dist/cjs/math.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.minmax = minmax;
|
|
4
|
+
function minmax(value, min, max) {
|
|
5
|
+
if (min !== undefined)
|
|
6
|
+
value = Math.max(value, min);
|
|
7
|
+
if (max !== undefined)
|
|
8
|
+
value = Math.min(value, max);
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/math.ts"],"names":[],"mappings":";;AAAA,wBAQC;AARD,SAAgB,MAAM,CAAC,KAAa,EAAE,GAAY,EAAE,GAAY;IAC/D,IAAI,GAAG,KAAK,SAAS;QACpB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE9B,IAAI,GAAG,KAAK,SAAS;QACpB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE9B,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function nextTick(callback: () => void): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nextTick = nextTick;
|
|
4
|
+
function nextTick(callback) {
|
|
5
|
+
if (typeof process !== 'undefined' && typeof process.nextTick === 'function') {
|
|
6
|
+
process.nextTick(callback);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (typeof queueMicrotask === 'function') {
|
|
10
|
+
queueMicrotask(callback);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
Promise.resolve().then(callback).catch(err => setTimeout(() => { throw err; }, 0));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=polyfill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../../src/polyfill.ts"],"names":[],"mappings":";;AAAA,4BAeC;AAfD,SAAgB,QAAQ,CAAC,QAAoB;IAE5C,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,EAC5E,CAAC;QACA,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO;IACR,CAAC;IAED,IAAI,OAAO,cAAc,KAAK,UAAU,EACxC,CAAC;QACA,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO;IACR,CAAC;IAED,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Voidable, Optional, RecordKeys } from "./types.js";
|
|
2
|
+
type RecordCallback<K, V, T> = (key: K, value: V, index: number) => T;
|
|
3
|
+
export declare function recordIn<K extends RecordKeys, V, KEY extends RecordKeys>(object: Partial<Record<K, V>>, key: KEY): object is Record<K | KEY, V>;
|
|
4
|
+
export declare function keys<K extends RecordKeys>(object: Partial<Record<K, unknown>>): K[];
|
|
5
|
+
export declare function values<K extends RecordKeys, const V>(object: Partial<Record<K, V>>): V[];
|
|
6
|
+
export declare function entries<K extends RecordKeys, const V>(object: Partial<Record<K, V>>): [K, V][];
|
|
7
|
+
export declare function entriesToRecord<K extends RecordKeys, V>(entries: [K, V][]): Record<K, V>;
|
|
8
|
+
export declare function keysToRecord<K extends RecordKeys, V>(keys: K[], callback: (key: K, index: number) => V): Record<K, V>;
|
|
9
|
+
export declare function valuesToRecord<K extends RecordKeys, V>(values: V[], callback: (value: V, index: number) => K): Record<K, V>;
|
|
10
|
+
export declare function length(object: Partial<Record<RecordKeys, unknown>>): number;
|
|
11
|
+
export declare function find<K extends RecordKeys, const V>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, Voidable<boolean>>): Optional<[K, V]>;
|
|
12
|
+
export declare function findKey<K extends RecordKeys, const V>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, Voidable<boolean>>): Optional<K>;
|
|
13
|
+
export declare function findValue<K extends RecordKeys, const V>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, Voidable<boolean>>): Optional<V>;
|
|
14
|
+
export declare function mapRecord<K extends RecordKeys, const V, RK extends RecordKeys, const RV>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, [RK, RV]>): Record<RK, RV>;
|
|
15
|
+
export declare function map<K extends RecordKeys, V, R>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, R>): R[];
|
|
16
|
+
export declare function mapKeys<K extends RecordKeys, const V, RK extends RecordKeys>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, RK>): Record<RK, V>;
|
|
17
|
+
export declare function mapValues<K extends RecordKeys, const V, RV>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, RV>): Record<K, RV>;
|
|
18
|
+
export declare function filter<K extends RecordKeys, const V>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, Voidable<boolean>>): Partial<Record<K, V>>;
|
|
19
|
+
export declare function forEach<K extends RecordKeys, V>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, void>): void;
|
|
20
|
+
export declare function every<K extends RecordKeys, V>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, Voidable<boolean>>): boolean;
|
|
21
|
+
export declare function some<K extends RecordKeys, V>(object: Partial<Record<K, V>>, callback: RecordCallback<K, V, Voidable<boolean>>): boolean;
|
|
22
|
+
export declare function recordify<T, R_K extends RecordKeys, R_V>(array: Array<T>, callback: (item: T, index: number) => [R_K, R_V]): Record<R_K, R_V>;
|
|
23
|
+
type Flatten<R extends Record<string, Record<string, unknown>>> = UnionToIntersection<R[keyof R]> extends infer M ? {
|
|
24
|
+
[K in keyof M]: M[K];
|
|
25
|
+
} : never;
|
|
26
|
+
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
27
|
+
export declare function flat<R extends Record<string, Record<string, unknown>>>(record: R, includeParentKeys?: boolean): Flatten<R>;
|
|
28
|
+
export {};
|