@salespark/toolkit 2.1.4 → 2.1.6
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 +7 -4
- package/dist/index.cjs +32 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +32 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ npm i @salespark/toolkit
|
|
|
27
27
|
- **Array utilities**: chunk, uniqBy, deep equality, flatten, groupBy, etc.
|
|
28
28
|
- **Object utilities**: pick, omit, clean objects, deep merge, etc.
|
|
29
29
|
- **String utilities**: slugify, template fill, deburr, sanitize, etc.
|
|
30
|
-
- **Number utilities**: clamp, round, safe parse, random digits, etc.
|
|
30
|
+
- **Number utilities**: clamp, round, safe parse (locale-aware), random digits, etc.
|
|
31
31
|
- **Function utilities**: debounce, throttle, formatCurrency, parseName, currency conversions, etc.
|
|
32
32
|
- **Boolean utilities**: safe boolean conversion with common representations
|
|
33
33
|
- **Validation utilities**: IBAN validator (ISO 13616), Portuguese tax ID validator
|
|
@@ -333,13 +333,16 @@ safeParseInt("abc", 10); // 10
|
|
|
333
333
|
safeParseInt(3.9); // 3
|
|
334
334
|
```
|
|
335
335
|
|
|
336
|
-
**`safeParseFloat(value: unknown, decimals?: number): number`** — Safely parses a value into a number with decimal precision and
|
|
336
|
+
**`safeParseFloat(value: unknown, decimals?: number): number`** — Safely parses a value into a number with decimal precision, handling locale separators (commas, dots, spaces) and invalid inputs.
|
|
337
337
|
|
|
338
338
|
```javascript
|
|
339
339
|
safeParseFloat("123.45"); // 123.45
|
|
340
340
|
safeParseFloat("123,45"); // 123.45
|
|
341
341
|
safeParseFloat("1,234.56"); // 1234.56
|
|
342
|
+
safeParseFloat("1 234,56"); // 1234.56 (spaces as thousands)
|
|
343
|
+
safeParseFloat("1.234,56"); // 1234.56 (dot thousands, comma decimals)
|
|
342
344
|
safeParseFloat("abc"); // 0
|
|
345
|
+
safeParseFloat(NaN); // 0
|
|
343
346
|
```
|
|
344
347
|
|
|
345
348
|
**`randomDigits(length?: number, options?: { charset?: string; noLeadingZero?: boolean }): string`** — Generates a random string of digits with secure randomness when available.
|
|
@@ -817,5 +820,5 @@ MIT © [SalesPark](https://salespark.io)
|
|
|
817
820
|
|
|
818
821
|
---
|
|
819
822
|
|
|
820
|
-
_Document version:
|
|
821
|
-
_Last update:
|
|
823
|
+
_Document version: 8_
|
|
824
|
+
_Last update: 10-12-2025_
|
package/dist/index.cjs
CHANGED
|
@@ -264,16 +264,35 @@ function safeParseInt(value, defaultValue = 0) {
|
|
|
264
264
|
var toInteger = safeParseInt;
|
|
265
265
|
function safeParseFloat(value, decimals = 6) {
|
|
266
266
|
try {
|
|
267
|
+
if (typeof value === "number") {
|
|
268
|
+
return isNaN(value) ? 0 : Number(value.toFixed(decimals));
|
|
269
|
+
}
|
|
267
270
|
if (value === void 0 || value === null || value === "") return 0;
|
|
268
|
-
let str = String(value);
|
|
271
|
+
let str = String(value).trim();
|
|
272
|
+
if (!str) return 0;
|
|
273
|
+
str = str.replace(/\s+/g, "");
|
|
274
|
+
let normalized;
|
|
269
275
|
if (str.includes(",") && str.includes(".")) {
|
|
270
|
-
|
|
276
|
+
const lastComma = str.lastIndexOf(",");
|
|
277
|
+
const lastDot = str.lastIndexOf(".");
|
|
278
|
+
if (lastDot > lastComma) {
|
|
279
|
+
normalized = str.replace(/,/g, "");
|
|
280
|
+
} else {
|
|
281
|
+
normalized = str.replace(/\./g, "").replace(",", ".");
|
|
282
|
+
}
|
|
271
283
|
} else if (str.includes(",")) {
|
|
272
|
-
|
|
284
|
+
const parts = str.split(",");
|
|
285
|
+
if (parts.length === 2 && parts[1].length <= 2) {
|
|
286
|
+
normalized = str.replace(",", ".");
|
|
287
|
+
} else {
|
|
288
|
+
normalized = str.replace(/,/g, "");
|
|
289
|
+
}
|
|
290
|
+
} else {
|
|
291
|
+
normalized = str;
|
|
273
292
|
}
|
|
274
|
-
const num = parseFloat(
|
|
275
|
-
if (
|
|
276
|
-
return
|
|
293
|
+
const num = parseFloat(normalized);
|
|
294
|
+
if (!isFinite(num)) return 0;
|
|
295
|
+
return Number(num.toFixed(decimals));
|
|
277
296
|
} catch {
|
|
278
297
|
return 0;
|
|
279
298
|
}
|
|
@@ -391,12 +410,11 @@ var hasNilOrEmpty = (array) => {
|
|
|
391
410
|
};
|
|
392
411
|
var isNilEmptyOrZeroLength = (value) => {
|
|
393
412
|
try {
|
|
394
|
-
if (isNil(value)
|
|
395
|
-
if (
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
return false;
|
|
413
|
+
if (isNil(value)) return true;
|
|
414
|
+
if (value === "") return true;
|
|
415
|
+
if (typeof value === "string" && value.length > 0) return false;
|
|
416
|
+
if (Array.isArray(value) && value.length > 0) return false;
|
|
417
|
+
return true;
|
|
400
418
|
} catch {
|
|
401
419
|
return true;
|
|
402
420
|
}
|
|
@@ -405,11 +423,8 @@ var isNilEmptyOrZeroLen = isNilEmptyOrZeroLength;
|
|
|
405
423
|
var isNilOrZeroLength = (value) => {
|
|
406
424
|
try {
|
|
407
425
|
if (isNil(value)) return true;
|
|
408
|
-
if (
|
|
409
|
-
|
|
410
|
-
return typeof length === "number" && length === 0;
|
|
411
|
-
}
|
|
412
|
-
return false;
|
|
426
|
+
if (Array.isArray(value) && value.length > 0) return false;
|
|
427
|
+
return true;
|
|
413
428
|
} catch {
|
|
414
429
|
return true;
|
|
415
430
|
}
|