@fluixi/utils 1.0.0-alpha.82 → 1.0.0-alpha.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2858 -1
- package/dist/index.mjs +2838 -1
- package/dist/lib/array/advanced.cjs +2227 -1
- package/dist/lib/array/advanced.mjs +2204 -1
- package/dist/lib/array/array.cjs +57 -1
- package/dist/lib/array/array.mjs +36 -1
- package/dist/lib/array/index.cjs +2344 -1
- package/dist/lib/array/index.mjs +2322 -1
- package/dist/lib/array/utils.cjs +103 -1
- package/dist/lib/array/utils.mjs +82 -1
- package/dist/lib/color/color.cjs +2190 -1
- package/dist/lib/color/color.mjs +2167 -1
- package/dist/lib/color/constants.cjs +380 -1
- package/dist/lib/color/constants.mjs +359 -1
- package/dist/lib/color/conversions.cjs +629 -1
- package/dist/lib/color/conversions.mjs +608 -1
- package/dist/lib/color/helpers.cjs +2534 -1
- package/dist/lib/color/helpers.mjs +2511 -1
- package/dist/lib/color/index.cjs +2641 -1
- package/dist/lib/color/index.mjs +2619 -1
- package/dist/lib/color/types.cjs +18 -1
- package/dist/lib/color/utils.cjs +962 -1
- package/dist/lib/color/utils.mjs +939 -1
- package/dist/lib/compare/comparators.cjs +171 -1
- package/dist/lib/compare/comparators.mjs +150 -1
- package/dist/lib/compare/index.cjs +172 -1
- package/dist/lib/compare/index.mjs +152 -1
- package/dist/lib/crypto/hash.cjs +83 -1
- package/dist/lib/crypto/hash.mjs +62 -1
- package/dist/lib/crypto/index.cjs +85 -1
- package/dist/lib/crypto/index.mjs +62 -1
- package/dist/lib/dom/events.cjs +40 -1
- package/dist/lib/dom/events.mjs +19 -1
- package/dist/lib/dom/index.cjs +78 -1
- package/dist/lib/dom/index.mjs +56 -1
- package/dist/lib/dom/utils.cjs +57 -1
- package/dist/lib/dom/utils.mjs +36 -1
- package/dist/lib/functions/functions.cjs +366 -1
- package/dist/lib/functions/functions.mjs +345 -1
- package/dist/lib/functions/index.cjs +369 -1
- package/dist/lib/functions/index.mjs +347 -1
- package/dist/lib/functions/types.cjs +18 -1
- package/dist/lib/helpers.cjs +78 -1
- package/dist/lib/helpers.mjs +59 -1
- package/dist/lib/index.cjs +2857 -1
- package/dist/lib/index.mjs +2836 -1
- package/dist/lib/maths/constants.cjs +70 -1
- package/dist/lib/maths/constants.mjs +50 -1
- package/dist/lib/maths/fn/advanced.cjs +231 -1
- package/dist/lib/maths/fn/advanced.mjs +208 -1
- package/dist/lib/maths/fn/basic.cjs +212 -1
- package/dist/lib/maths/fn/basic.mjs +191 -1
- package/dist/lib/maths/fn/complex.cjs +268 -1
- package/dist/lib/maths/fn/complex.mjs +247 -1
- package/dist/lib/maths/fn/index.cjs +877 -1
- package/dist/lib/maths/fn/index.mjs +855 -1
- package/dist/lib/maths/fn/trigo.cjs +179 -1
- package/dist/lib/maths/fn/trigo.mjs +156 -1
- package/dist/lib/maths/fn/vector.cjs +728 -1
- package/dist/lib/maths/fn/vector.mjs +707 -1
- package/dist/lib/maths/formatter.cjs +61 -1
- package/dist/lib/maths/formatter.mjs +40 -1
- package/dist/lib/maths/guards.cjs +164 -1
- package/dist/lib/maths/guards.mjs +144 -1
- package/dist/lib/maths/index.cjs +1152 -1
- package/dist/lib/maths/index.mjs +1130 -1
- package/dist/lib/maths/parser.cjs +75 -1
- package/dist/lib/maths/parser.mjs +54 -1
- package/dist/lib/maths/random.cjs +49 -1
- package/dist/lib/maths/random.mjs +28 -1
- package/dist/lib/maths/types/advanced.cjs +18 -1
- package/dist/lib/maths/types/basic.cjs +18 -1
- package/dist/lib/maths/types/index.cjs +19 -1
- package/dist/lib/maths/types/index.mjs +1 -0
- package/dist/lib/maths/types/negative.cjs +18 -1
- package/dist/lib/maths/types/operations.cjs +18 -1
- package/dist/lib/object/clone.cjs +88 -1
- package/dist/lib/object/clone.mjs +65 -1
- package/dist/lib/object/diff.cjs +573 -1
- package/dist/lib/object/diff.mjs +550 -1
- package/dist/lib/object/getter-setter.cjs +2351 -1
- package/dist/lib/object/getter-setter.mjs +2330 -1
- package/dist/lib/object/index.cjs +3956 -6
- package/dist/lib/object/index.mjs +3936 -6
- package/dist/lib/object/merge.cjs +1029 -1
- package/dist/lib/object/merge.mjs +1006 -1
- package/dist/lib/object/object.cjs +280 -1
- package/dist/lib/object/object.mjs +257 -1
- package/dist/lib/object/omit.cjs +2022 -1
- package/dist/lib/object/omit.mjs +1999 -1
- package/dist/lib/object/reconcile.cjs +126 -1
- package/dist/lib/object/reconcile.mjs +105 -1
- package/dist/lib/object/selector.cjs +303 -1
- package/dist/lib/object/selector.mjs +282 -1
- package/dist/lib/object/sort.cjs +209 -1
- package/dist/lib/object/sort.mjs +186 -1
- package/dist/lib/object/transform.cjs +2211 -1
- package/dist/lib/object/transform.mjs +2190 -1
- package/dist/lib/object/types.cjs +18 -1
- package/dist/lib/object/utils.cjs +326 -6
- package/dist/lib/object/utils.mjs +305 -6
- package/dist/lib/primitive/boolean/boolean.cjs +407 -1
- package/dist/lib/primitive/boolean/boolean.mjs +386 -1
- package/dist/lib/primitive/boolean/index.cjs +382 -1
- package/dist/lib/primitive/boolean/index.mjs +359 -1
- package/dist/lib/primitive/boolean/types.cjs +18 -1
- package/dist/lib/primitive/date/date.cjs +1126 -1
- package/dist/lib/primitive/date/date.mjs +1105 -1
- package/dist/lib/primitive/date/index.cjs +1128 -1
- package/dist/lib/primitive/date/index.mjs +1105 -1
- package/dist/lib/primitive/date/types.cjs +18 -1
- package/dist/lib/primitive/index.cjs +2338 -5
- package/dist/lib/primitive/index.mjs +2316 -5
- package/dist/lib/primitive/string/index.cjs +875 -5
- package/dist/lib/primitive/string/index.mjs +852 -5
- package/dist/lib/primitive/string/parser-2.cjs +543 -8
- package/dist/lib/primitive/string/parser-2.mjs +522 -8
- package/dist/lib/primitive/string/parser.cjs +236 -3
- package/dist/lib/primitive/string/parser.mjs +215 -3
- package/dist/lib/primitive/string/string.cjs +926 -5
- package/dist/lib/primitive/string/string.mjs +903 -5
- package/dist/lib/primitive/string/types.cjs +18 -1
- package/dist/lib/primitive/types.cjs +18 -1
- package/dist/lib/url/index.cjs +327 -1
- package/dist/lib/url/index.mjs +304 -1
- package/dist/lib/url/parser.cjs +325 -1
- package/dist/lib/url/parser.mjs +304 -1
- package/dist/lib/url/types.cjs +18 -1
- package/package.json +5 -5
|
@@ -1 +1,70 @@
|
|
|
1
|
-
|
|
1
|
+
/*! @fluixi/utils v1.0.0-alpha.84 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/lib/maths/constants.ts
|
|
22
|
+
var constants_exports = {};
|
|
23
|
+
__export(constants_exports, {
|
|
24
|
+
Constants: () => Constants,
|
|
25
|
+
DEGREES_IN_CIRCLE: () => DEGREES_IN_CIRCLE,
|
|
26
|
+
DEGREES_PER_RADIAN: () => DEGREES_PER_RADIAN,
|
|
27
|
+
E: () => E,
|
|
28
|
+
GRADIANS_IN_CIRCLE: () => GRADIANS_IN_CIRCLE,
|
|
29
|
+
LN10: () => LN10,
|
|
30
|
+
LN2: () => LN2,
|
|
31
|
+
LOG10E: () => LOG10E,
|
|
32
|
+
LOG2E: () => LOG2E,
|
|
33
|
+
PHI: () => PHI,
|
|
34
|
+
PI: () => PI,
|
|
35
|
+
RADIANS_IN_CIRCLE: () => RADIANS_IN_CIRCLE,
|
|
36
|
+
RADIANS_PER_DEGREE: () => RADIANS_PER_DEGREE,
|
|
37
|
+
SQRT1_2: () => SQRT1_2,
|
|
38
|
+
SQRT2: () => SQRT2
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(constants_exports);
|
|
41
|
+
var PI = 3.141592653589793;
|
|
42
|
+
var E = 2.718281828459045;
|
|
43
|
+
var PHI = 1.618033988749894;
|
|
44
|
+
var SQRT2 = 1.4142135623730951;
|
|
45
|
+
var SQRT1_2 = 0.7071067811865476;
|
|
46
|
+
var LN2 = 0.6931471805599453;
|
|
47
|
+
var LN10 = 2.302585092994046;
|
|
48
|
+
var LOG2E = 1.4426950408889634;
|
|
49
|
+
var LOG10E = 0.4342944819032518;
|
|
50
|
+
var DEGREES_IN_CIRCLE = 360;
|
|
51
|
+
var RADIANS_IN_CIRCLE = 2 * PI;
|
|
52
|
+
var GRADIANS_IN_CIRCLE = 400;
|
|
53
|
+
var DEGREES_PER_RADIAN = 180 / PI;
|
|
54
|
+
var RADIANS_PER_DEGREE = PI / 180;
|
|
55
|
+
var Constants = {
|
|
56
|
+
PI,
|
|
57
|
+
E,
|
|
58
|
+
PHI,
|
|
59
|
+
SQRT2,
|
|
60
|
+
SQRT1_2,
|
|
61
|
+
LN2,
|
|
62
|
+
LN10,
|
|
63
|
+
LOG2E,
|
|
64
|
+
LOG10E,
|
|
65
|
+
DEGREES_IN_CIRCLE,
|
|
66
|
+
RADIANS_IN_CIRCLE,
|
|
67
|
+
GRADIANS_IN_CIRCLE,
|
|
68
|
+
DEGREES_PER_RADIAN,
|
|
69
|
+
RADIANS_PER_DEGREE
|
|
70
|
+
};
|
|
@@ -1 +1,50 @@
|
|
|
1
|
-
|
|
1
|
+
/*! @fluixi/utils v1.0.0-alpha.84 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
|
|
2
|
+
|
|
3
|
+
// src/lib/maths/constants.ts
|
|
4
|
+
var PI = 3.141592653589793;
|
|
5
|
+
var E = 2.718281828459045;
|
|
6
|
+
var PHI = 1.618033988749894;
|
|
7
|
+
var SQRT2 = 1.4142135623730951;
|
|
8
|
+
var SQRT1_2 = 0.7071067811865476;
|
|
9
|
+
var LN2 = 0.6931471805599453;
|
|
10
|
+
var LN10 = 2.302585092994046;
|
|
11
|
+
var LOG2E = 1.4426950408889634;
|
|
12
|
+
var LOG10E = 0.4342944819032518;
|
|
13
|
+
var DEGREES_IN_CIRCLE = 360;
|
|
14
|
+
var RADIANS_IN_CIRCLE = 2 * PI;
|
|
15
|
+
var GRADIANS_IN_CIRCLE = 400;
|
|
16
|
+
var DEGREES_PER_RADIAN = 180 / PI;
|
|
17
|
+
var RADIANS_PER_DEGREE = PI / 180;
|
|
18
|
+
var Constants = {
|
|
19
|
+
PI,
|
|
20
|
+
E,
|
|
21
|
+
PHI,
|
|
22
|
+
SQRT2,
|
|
23
|
+
SQRT1_2,
|
|
24
|
+
LN2,
|
|
25
|
+
LN10,
|
|
26
|
+
LOG2E,
|
|
27
|
+
LOG10E,
|
|
28
|
+
DEGREES_IN_CIRCLE,
|
|
29
|
+
RADIANS_IN_CIRCLE,
|
|
30
|
+
GRADIANS_IN_CIRCLE,
|
|
31
|
+
DEGREES_PER_RADIAN,
|
|
32
|
+
RADIANS_PER_DEGREE
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
Constants,
|
|
36
|
+
DEGREES_IN_CIRCLE,
|
|
37
|
+
DEGREES_PER_RADIAN,
|
|
38
|
+
E,
|
|
39
|
+
GRADIANS_IN_CIRCLE,
|
|
40
|
+
LN10,
|
|
41
|
+
LN2,
|
|
42
|
+
LOG10E,
|
|
43
|
+
LOG2E,
|
|
44
|
+
PHI,
|
|
45
|
+
PI,
|
|
46
|
+
RADIANS_IN_CIRCLE,
|
|
47
|
+
RADIANS_PER_DEGREE,
|
|
48
|
+
SQRT1_2,
|
|
49
|
+
SQRT2
|
|
50
|
+
};
|
|
@@ -1 +1,231 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/maths/fn/advanced.ts
|
|
21
|
+
var advanced_exports = {};
|
|
22
|
+
__export(advanced_exports, {
|
|
23
|
+
addFractions: () => addFractions,
|
|
24
|
+
cbrt: () => cbrt,
|
|
25
|
+
evaluatePolynomial: () => evaluatePolynomial,
|
|
26
|
+
exp: () => exp,
|
|
27
|
+
ln: () => ln,
|
|
28
|
+
log: () => log,
|
|
29
|
+
log10: () => log10,
|
|
30
|
+
log2: () => log2,
|
|
31
|
+
multiplyFractions: () => multiplyFractions,
|
|
32
|
+
normalize: () => normalize,
|
|
33
|
+
nthRoot: () => nthRoot,
|
|
34
|
+
percentage: () => percentage,
|
|
35
|
+
range: () => range,
|
|
36
|
+
simplifyFraction: () => simplifyFraction,
|
|
37
|
+
solveQuadratic: () => solveQuadratic,
|
|
38
|
+
toBase: () => toBase,
|
|
39
|
+
toOrdinal: () => toOrdinal,
|
|
40
|
+
truncateDecimals: () => truncateDecimals,
|
|
41
|
+
wrap: () => wrap
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(advanced_exports);
|
|
44
|
+
|
|
45
|
+
// src/lib/maths/fn/basic.ts
|
|
46
|
+
var round = (value, precision = 0, mode = "round") => {
|
|
47
|
+
if (mode === "david") return roundUsingDavidGay(value, precision, mode);
|
|
48
|
+
if (!Number.isFinite(value)) return value;
|
|
49
|
+
if (precision === 0) return Math[mode](value);
|
|
50
|
+
if (precision < 0) {
|
|
51
|
+
const factor2 = 10 ** -precision;
|
|
52
|
+
return Math[mode](value / factor2) * factor2;
|
|
53
|
+
}
|
|
54
|
+
const factor = 10 ** precision;
|
|
55
|
+
const epsilon = Math.pow(2, -52);
|
|
56
|
+
const adjusted = value * factor;
|
|
57
|
+
const correction = Math.sign(adjusted) * epsilon * Math.abs(adjusted);
|
|
58
|
+
let rounded;
|
|
59
|
+
switch (mode) {
|
|
60
|
+
case "round":
|
|
61
|
+
rounded = Math.round(adjusted + correction);
|
|
62
|
+
break;
|
|
63
|
+
case "ceil":
|
|
64
|
+
rounded = Math.ceil(adjusted - epsilon);
|
|
65
|
+
break;
|
|
66
|
+
case "floor":
|
|
67
|
+
rounded = Math.floor(adjusted + epsilon);
|
|
68
|
+
break;
|
|
69
|
+
case "trunc":
|
|
70
|
+
rounded = adjusted < 0 ? Math.ceil(adjusted) : Math.floor(adjusted);
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
rounded = Math.round(adjusted + correction);
|
|
74
|
+
}
|
|
75
|
+
return rounded / factor;
|
|
76
|
+
};
|
|
77
|
+
var roundUsingDavidGay = (_value, precision = 0, mode = "round") => {
|
|
78
|
+
let value = Math.abs(_value);
|
|
79
|
+
const multiplicator = _value < 0 ? -1 : 1;
|
|
80
|
+
if (precision === 0) {
|
|
81
|
+
return Math.round(value) * multiplicator;
|
|
82
|
+
}
|
|
83
|
+
if (!Number.isFinite(value)) {
|
|
84
|
+
return value * multiplicator;
|
|
85
|
+
}
|
|
86
|
+
const factor = 10 ** precision;
|
|
87
|
+
let shifted = value * factor;
|
|
88
|
+
const epsilon = Math.pow(2, -53);
|
|
89
|
+
const correction = Math.sign(shifted) * epsilon * Math.abs(shifted);
|
|
90
|
+
shifted += correction;
|
|
91
|
+
const rounded = Math.round(shifted);
|
|
92
|
+
return rounded / factor * multiplicator;
|
|
93
|
+
};
|
|
94
|
+
function gcd(a, b) {
|
|
95
|
+
a = Math.abs(a);
|
|
96
|
+
b = Math.abs(b);
|
|
97
|
+
while (b !== 0) {
|
|
98
|
+
const temp = b;
|
|
99
|
+
b = a % b;
|
|
100
|
+
a = temp;
|
|
101
|
+
}
|
|
102
|
+
return a;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// src/lib/maths/fn/advanced.ts
|
|
106
|
+
function ln(value) {
|
|
107
|
+
if (value <= 0) {
|
|
108
|
+
throw new Error("Natural logarithm is only defined for positive numbers");
|
|
109
|
+
}
|
|
110
|
+
return Math.log(value);
|
|
111
|
+
}
|
|
112
|
+
function log10(value) {
|
|
113
|
+
if (value <= 0) {
|
|
114
|
+
throw new Error("Logarithm is only defined for positive numbers");
|
|
115
|
+
}
|
|
116
|
+
return Math.log10(value);
|
|
117
|
+
}
|
|
118
|
+
function log2(value) {
|
|
119
|
+
if (value <= 0) {
|
|
120
|
+
throw new Error("Logarithm is only defined for positive numbers");
|
|
121
|
+
}
|
|
122
|
+
return Math.log2(value);
|
|
123
|
+
}
|
|
124
|
+
function log(value, base) {
|
|
125
|
+
if (value <= 0 || base <= 0) {
|
|
126
|
+
throw new Error("Logarithm is only defined for positive numbers and bases");
|
|
127
|
+
}
|
|
128
|
+
return Math.log(value) / Math.log(base);
|
|
129
|
+
}
|
|
130
|
+
function exp(x) {
|
|
131
|
+
return Math.exp(x);
|
|
132
|
+
}
|
|
133
|
+
function cbrt(value) {
|
|
134
|
+
return Math.cbrt(value);
|
|
135
|
+
}
|
|
136
|
+
function nthRoot(value, n) {
|
|
137
|
+
if (n === 0) {
|
|
138
|
+
throw new Error("Cannot calculate 0th root");
|
|
139
|
+
}
|
|
140
|
+
if (value < 0 && n % 2 === 0) {
|
|
141
|
+
throw new Error("Cannot calculate even root of negative number");
|
|
142
|
+
}
|
|
143
|
+
const exponent = 1 / n;
|
|
144
|
+
return Math.sign(value) * Math.pow(Math.abs(value), exponent);
|
|
145
|
+
}
|
|
146
|
+
function solveQuadratic(a, b, c) {
|
|
147
|
+
if (a === 0) {
|
|
148
|
+
if (b === 0) return [];
|
|
149
|
+
return [-c / b];
|
|
150
|
+
}
|
|
151
|
+
const discriminant = b * b - 4 * a * c;
|
|
152
|
+
if (discriminant < 0) {
|
|
153
|
+
return [];
|
|
154
|
+
} else if (discriminant === 0) {
|
|
155
|
+
return [-b / (2 * a)];
|
|
156
|
+
} else {
|
|
157
|
+
const sqrtDiscriminant = Math.sqrt(discriminant);
|
|
158
|
+
return [
|
|
159
|
+
(-b - sqrtDiscriminant) / (2 * a),
|
|
160
|
+
(-b + sqrtDiscriminant) / (2 * a)
|
|
161
|
+
];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function evaluatePolynomial(coefficients, x) {
|
|
165
|
+
let result = 0;
|
|
166
|
+
for (let i = 0; i < coefficients.length; i++) {
|
|
167
|
+
result = result * x + coefficients[i];
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
function simplifyFraction(fraction) {
|
|
172
|
+
const divisor = gcd(fraction.numerator, fraction.denominator);
|
|
173
|
+
return {
|
|
174
|
+
numerator: fraction.numerator / divisor,
|
|
175
|
+
denominator: fraction.denominator / divisor
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function addFractions(a, b) {
|
|
179
|
+
const numerator = a.numerator * b.denominator + b.numerator * a.denominator;
|
|
180
|
+
const denominator = a.denominator * b.denominator;
|
|
181
|
+
return simplifyFraction({ numerator, denominator });
|
|
182
|
+
}
|
|
183
|
+
function multiplyFractions(a, b) {
|
|
184
|
+
const numerator = a.numerator * b.numerator;
|
|
185
|
+
const denominator = a.denominator * b.denominator;
|
|
186
|
+
return simplifyFraction({ numerator, denominator });
|
|
187
|
+
}
|
|
188
|
+
var percentage = (value, total, precision = 2) => {
|
|
189
|
+
if (total === 0) return 0;
|
|
190
|
+
const percent = value / total * 100;
|
|
191
|
+
return round(percent, precision);
|
|
192
|
+
};
|
|
193
|
+
var toBase = (number, base, minLength = 1) => {
|
|
194
|
+
if (base < 2 || base > 36) {
|
|
195
|
+
throw new Error("Base must be between 2 and 36");
|
|
196
|
+
}
|
|
197
|
+
const result = number.toString(base);
|
|
198
|
+
return result.padStart(minLength, "0");
|
|
199
|
+
};
|
|
200
|
+
var toOrdinal = (n) => {
|
|
201
|
+
const suffix = ["th", "st", "nd", "rd"];
|
|
202
|
+
const v = n % 100;
|
|
203
|
+
return n + (suffix[(v - 20) % 10] || suffix[v] || suffix[0]);
|
|
204
|
+
};
|
|
205
|
+
var range = (start, end, step = 1) => {
|
|
206
|
+
const result = [];
|
|
207
|
+
if (step === 0) return result;
|
|
208
|
+
if (step > 0) {
|
|
209
|
+
for (let i = start; i < end; i += step) {
|
|
210
|
+
result.push(i);
|
|
211
|
+
}
|
|
212
|
+
} else {
|
|
213
|
+
for (let i = start; i > end; i += step) {
|
|
214
|
+
result.push(i);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return result;
|
|
218
|
+
};
|
|
219
|
+
var truncateDecimals = (value, decimalPlaces) => {
|
|
220
|
+
if (!Number.isFinite(value)) return value;
|
|
221
|
+
const factor = 10 ** decimalPlaces;
|
|
222
|
+
return Math.trunc(value * factor) / factor;
|
|
223
|
+
};
|
|
224
|
+
var normalize = (value, min, max) => {
|
|
225
|
+
if (min === max) return 0;
|
|
226
|
+
return (value - min) / (max - min);
|
|
227
|
+
};
|
|
228
|
+
var wrap = (value, min, max) => {
|
|
229
|
+
const range2 = max - min;
|
|
230
|
+
return ((value - min) % range2 + range2) % range2 + min;
|
|
231
|
+
};
|
|
@@ -1 +1,208 @@
|
|
|
1
|
-
|
|
1
|
+
// src/lib/maths/fn/basic.ts
|
|
2
|
+
var round = (value, precision = 0, mode = "round") => {
|
|
3
|
+
if (mode === "david") return roundUsingDavidGay(value, precision, mode);
|
|
4
|
+
if (!Number.isFinite(value)) return value;
|
|
5
|
+
if (precision === 0) return Math[mode](value);
|
|
6
|
+
if (precision < 0) {
|
|
7
|
+
const factor2 = 10 ** -precision;
|
|
8
|
+
return Math[mode](value / factor2) * factor2;
|
|
9
|
+
}
|
|
10
|
+
const factor = 10 ** precision;
|
|
11
|
+
const epsilon = Math.pow(2, -52);
|
|
12
|
+
const adjusted = value * factor;
|
|
13
|
+
const correction = Math.sign(adjusted) * epsilon * Math.abs(adjusted);
|
|
14
|
+
let rounded;
|
|
15
|
+
switch (mode) {
|
|
16
|
+
case "round":
|
|
17
|
+
rounded = Math.round(adjusted + correction);
|
|
18
|
+
break;
|
|
19
|
+
case "ceil":
|
|
20
|
+
rounded = Math.ceil(adjusted - epsilon);
|
|
21
|
+
break;
|
|
22
|
+
case "floor":
|
|
23
|
+
rounded = Math.floor(adjusted + epsilon);
|
|
24
|
+
break;
|
|
25
|
+
case "trunc":
|
|
26
|
+
rounded = adjusted < 0 ? Math.ceil(adjusted) : Math.floor(adjusted);
|
|
27
|
+
break;
|
|
28
|
+
default:
|
|
29
|
+
rounded = Math.round(adjusted + correction);
|
|
30
|
+
}
|
|
31
|
+
return rounded / factor;
|
|
32
|
+
};
|
|
33
|
+
var roundUsingDavidGay = (_value, precision = 0, mode = "round") => {
|
|
34
|
+
let value = Math.abs(_value);
|
|
35
|
+
const multiplicator = _value < 0 ? -1 : 1;
|
|
36
|
+
if (precision === 0) {
|
|
37
|
+
return Math.round(value) * multiplicator;
|
|
38
|
+
}
|
|
39
|
+
if (!Number.isFinite(value)) {
|
|
40
|
+
return value * multiplicator;
|
|
41
|
+
}
|
|
42
|
+
const factor = 10 ** precision;
|
|
43
|
+
let shifted = value * factor;
|
|
44
|
+
const epsilon = Math.pow(2, -53);
|
|
45
|
+
const correction = Math.sign(shifted) * epsilon * Math.abs(shifted);
|
|
46
|
+
shifted += correction;
|
|
47
|
+
const rounded = Math.round(shifted);
|
|
48
|
+
return rounded / factor * multiplicator;
|
|
49
|
+
};
|
|
50
|
+
function gcd(a, b) {
|
|
51
|
+
a = Math.abs(a);
|
|
52
|
+
b = Math.abs(b);
|
|
53
|
+
while (b !== 0) {
|
|
54
|
+
const temp = b;
|
|
55
|
+
b = a % b;
|
|
56
|
+
a = temp;
|
|
57
|
+
}
|
|
58
|
+
return a;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// src/lib/maths/fn/advanced.ts
|
|
62
|
+
function ln(value) {
|
|
63
|
+
if (value <= 0) {
|
|
64
|
+
throw new Error("Natural logarithm is only defined for positive numbers");
|
|
65
|
+
}
|
|
66
|
+
return Math.log(value);
|
|
67
|
+
}
|
|
68
|
+
function log10(value) {
|
|
69
|
+
if (value <= 0) {
|
|
70
|
+
throw new Error("Logarithm is only defined for positive numbers");
|
|
71
|
+
}
|
|
72
|
+
return Math.log10(value);
|
|
73
|
+
}
|
|
74
|
+
function log2(value) {
|
|
75
|
+
if (value <= 0) {
|
|
76
|
+
throw new Error("Logarithm is only defined for positive numbers");
|
|
77
|
+
}
|
|
78
|
+
return Math.log2(value);
|
|
79
|
+
}
|
|
80
|
+
function log(value, base) {
|
|
81
|
+
if (value <= 0 || base <= 0) {
|
|
82
|
+
throw new Error("Logarithm is only defined for positive numbers and bases");
|
|
83
|
+
}
|
|
84
|
+
return Math.log(value) / Math.log(base);
|
|
85
|
+
}
|
|
86
|
+
function exp(x) {
|
|
87
|
+
return Math.exp(x);
|
|
88
|
+
}
|
|
89
|
+
function cbrt(value) {
|
|
90
|
+
return Math.cbrt(value);
|
|
91
|
+
}
|
|
92
|
+
function nthRoot(value, n) {
|
|
93
|
+
if (n === 0) {
|
|
94
|
+
throw new Error("Cannot calculate 0th root");
|
|
95
|
+
}
|
|
96
|
+
if (value < 0 && n % 2 === 0) {
|
|
97
|
+
throw new Error("Cannot calculate even root of negative number");
|
|
98
|
+
}
|
|
99
|
+
const exponent = 1 / n;
|
|
100
|
+
return Math.sign(value) * Math.pow(Math.abs(value), exponent);
|
|
101
|
+
}
|
|
102
|
+
function solveQuadratic(a, b, c) {
|
|
103
|
+
if (a === 0) {
|
|
104
|
+
if (b === 0) return [];
|
|
105
|
+
return [-c / b];
|
|
106
|
+
}
|
|
107
|
+
const discriminant = b * b - 4 * a * c;
|
|
108
|
+
if (discriminant < 0) {
|
|
109
|
+
return [];
|
|
110
|
+
} else if (discriminant === 0) {
|
|
111
|
+
return [-b / (2 * a)];
|
|
112
|
+
} else {
|
|
113
|
+
const sqrtDiscriminant = Math.sqrt(discriminant);
|
|
114
|
+
return [
|
|
115
|
+
(-b - sqrtDiscriminant) / (2 * a),
|
|
116
|
+
(-b + sqrtDiscriminant) / (2 * a)
|
|
117
|
+
];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function evaluatePolynomial(coefficients, x) {
|
|
121
|
+
let result = 0;
|
|
122
|
+
for (let i = 0; i < coefficients.length; i++) {
|
|
123
|
+
result = result * x + coefficients[i];
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
function simplifyFraction(fraction) {
|
|
128
|
+
const divisor = gcd(fraction.numerator, fraction.denominator);
|
|
129
|
+
return {
|
|
130
|
+
numerator: fraction.numerator / divisor,
|
|
131
|
+
denominator: fraction.denominator / divisor
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function addFractions(a, b) {
|
|
135
|
+
const numerator = a.numerator * b.denominator + b.numerator * a.denominator;
|
|
136
|
+
const denominator = a.denominator * b.denominator;
|
|
137
|
+
return simplifyFraction({ numerator, denominator });
|
|
138
|
+
}
|
|
139
|
+
function multiplyFractions(a, b) {
|
|
140
|
+
const numerator = a.numerator * b.numerator;
|
|
141
|
+
const denominator = a.denominator * b.denominator;
|
|
142
|
+
return simplifyFraction({ numerator, denominator });
|
|
143
|
+
}
|
|
144
|
+
var percentage = (value, total, precision = 2) => {
|
|
145
|
+
if (total === 0) return 0;
|
|
146
|
+
const percent = value / total * 100;
|
|
147
|
+
return round(percent, precision);
|
|
148
|
+
};
|
|
149
|
+
var toBase = (number, base, minLength = 1) => {
|
|
150
|
+
if (base < 2 || base > 36) {
|
|
151
|
+
throw new Error("Base must be between 2 and 36");
|
|
152
|
+
}
|
|
153
|
+
const result = number.toString(base);
|
|
154
|
+
return result.padStart(minLength, "0");
|
|
155
|
+
};
|
|
156
|
+
var toOrdinal = (n) => {
|
|
157
|
+
const suffix = ["th", "st", "nd", "rd"];
|
|
158
|
+
const v = n % 100;
|
|
159
|
+
return n + (suffix[(v - 20) % 10] || suffix[v] || suffix[0]);
|
|
160
|
+
};
|
|
161
|
+
var range = (start, end, step = 1) => {
|
|
162
|
+
const result = [];
|
|
163
|
+
if (step === 0) return result;
|
|
164
|
+
if (step > 0) {
|
|
165
|
+
for (let i = start; i < end; i += step) {
|
|
166
|
+
result.push(i);
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
for (let i = start; i > end; i += step) {
|
|
170
|
+
result.push(i);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return result;
|
|
174
|
+
};
|
|
175
|
+
var truncateDecimals = (value, decimalPlaces) => {
|
|
176
|
+
if (!Number.isFinite(value)) return value;
|
|
177
|
+
const factor = 10 ** decimalPlaces;
|
|
178
|
+
return Math.trunc(value * factor) / factor;
|
|
179
|
+
};
|
|
180
|
+
var normalize = (value, min, max) => {
|
|
181
|
+
if (min === max) return 0;
|
|
182
|
+
return (value - min) / (max - min);
|
|
183
|
+
};
|
|
184
|
+
var wrap = (value, min, max) => {
|
|
185
|
+
const range2 = max - min;
|
|
186
|
+
return ((value - min) % range2 + range2) % range2 + min;
|
|
187
|
+
};
|
|
188
|
+
export {
|
|
189
|
+
addFractions,
|
|
190
|
+
cbrt,
|
|
191
|
+
evaluatePolynomial,
|
|
192
|
+
exp,
|
|
193
|
+
ln,
|
|
194
|
+
log,
|
|
195
|
+
log10,
|
|
196
|
+
log2,
|
|
197
|
+
multiplyFractions,
|
|
198
|
+
normalize,
|
|
199
|
+
nthRoot,
|
|
200
|
+
percentage,
|
|
201
|
+
range,
|
|
202
|
+
simplifyFraction,
|
|
203
|
+
solveQuadratic,
|
|
204
|
+
toBase,
|
|
205
|
+
toOrdinal,
|
|
206
|
+
truncateDecimals,
|
|
207
|
+
wrap
|
|
208
|
+
};
|