11import type { Maybe , Optional } from './types.js' ;
22
3- export function parseNumber ( value ?: Maybe < string > ) : Optional < number > {
3+ /**
4+ * Parses a string into a number.
5+ * If the string is empty or cannot be parsed, returns undefined.
6+ *
7+ * ```ts
8+ * parseNumber('42'); // 42
9+ * parseNumber('3.14'); // 3.14
10+ * parseNumber(''); // undefined
11+ * parseNumber('abc'); // undefined
12+ * parseNumber('123abc'); // undefined
13+ * parseNumber(null); // undefined
14+ * parseNumber(undefined); // undefined
15+ * parseNumber('NaN'); // undefined
16+ * parseNumber('Infinity'); // Infinity
17+ * parseNumber('0'); // 0
18+ */
19+ export function parseNumber ( value : Maybe < string > ) : Optional < number > {
420 if ( ! value ) return undefined ;
521 const parsed = Number ( value ) ;
622 if ( Number . isNaN ( parsed ) ) return undefined ;
723 return parsed ;
824}
925
26+ /**
27+ * Clamps a number between a minimum and maximum value.
28+ *
29+ * ```ts
30+ * clamp(5, 1, 10); // 5
31+ * clamp(0, 1, 10); // 1
32+ * clamp(15, 1, 10); // 10
33+ * clamp(-5, -10, -1); // -5
34+ * ```
35+ *
36+ * @deprecated Use `clamp` from `es-toolkit` instead.
37+ */
1038export function clamp ( val : number , min : number , max : number ) : number {
1139 return Math . max ( min , Math . min ( max , val ) ) ;
1240}
@@ -15,23 +43,79 @@ export function wrap(val: number, min: number, max: number): number {
1543 return ( ( ( ( val - min ) % ( max - min ) ) + ( max - min ) ) % ( max - min ) ) + min ;
1644}
1745
18- export function inRange ( val : number , min : number , max : number ) {
46+ /**
47+ * Checks if a value is within a specified range.
48+ *
49+ * ```ts
50+ * inRange(5, 1, 10); // true
51+ * inRange(0, 1, 10); // false
52+ * inRange(15, 1, 10); // false
53+ * inRange(-5, -10, -1); // true
54+ * ```
55+ *
56+ * @deprecated Use `inRange` from `es-toolkit` instead.
57+ */
58+ export function inRange ( val : number , min : number , max : number ) : boolean {
1959 return Math . min ( min , max ) <= val && val <= Math . max ( min , max ) ;
2060}
2161
22- export function percentage ( val : number , max : number ) {
62+ /**
63+ * Calculates the percentage of a value relative to a maximum.
64+ *
65+ * ```ts
66+ * percentage(50, 200); // 25
67+ * percentage(0, 100); // 0
68+ * percentage(100, 0); // 0 (avoids division by zero)
69+ * percentage(75, 300); // 25
70+ * ```
71+ */
72+ export function percentage ( val : number , max : number ) : number {
73+ if ( max === 0 ) return 0 ; // Avoid division by zero
2374 return ( val * 100 ) / max ;
2475}
2576
26- export function bytesToMegabytes ( size : number ) {
77+ /**
78+ * Converts a size in bytes to a string representation in megabytes.
79+ */
80+ export function bytesToMegabytes ( size : number ) : string {
2781 return ( size / 1024 / 1024 ) . toFixed ( 2 ) ;
2882}
2983
84+ /**
85+ * Normalizes a value to a ratio between 0 and 1 based on a minimum and maximum range.
86+ *
87+ * ```ts
88+ * normalizeRatio(5, 0, 10); // 0.5
89+ * normalizeRatio(0, 0, 10); // 0
90+ * normalizeRatio(10, 0, 10); // 1
91+ * normalizeRatio(-5, -10, 0); // 0.5
92+ * normalizeRatio(15, 10, 20); // 0.5
93+ * ```
94+ */
3095export function normalizeRatio ( val : number , min : number , max : number ) : number {
3196 return ( val - min ) / ( max - min ) ;
3297}
3398
34- export function * range ( start : number , end : number , step = 1 ) {
99+ /**
100+ * Generates a range of numbers from `start` to `end` with an optional `step`.
101+ *
102+ * ```ts
103+ * [...range(1, 5)]; // [1, 2, 3, 4, 5]
104+ * [...range(1, 10, 2)]; // [1, 3, 5, 7, 9]
105+ * [...range(5, 1)]; // [5, 4, 3, 2, 1]
106+ * [...range(5, 5)]; // [5]
107+ * [...range(0, 0)]; // [0]
108+ * [...range(0, 10, 3)]; // [0, 3, 6, 9]
109+ * [...range(10, 0, -2)]; // [10, 8, 6, 4, 2]
110+ * ```
111+ *
112+ * @deprecated Use `range` from `es-toolkit` instead.
113+ */
114+ export function * range (
115+ start : number ,
116+ end : number ,
117+ step = 1 ,
118+ ) : Generator < number > {
35119 const delta = Math . abs ( start - end ) ;
36120 const direction = start < end ? 1 : - 1 ;
37121 for ( let i = 0 ; i <= delta ; i += step ) {
0 commit comments