full-utils 2.0.0 → 2.0.1

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 CHANGED
@@ -1,1039 +1,3 @@
1
- 'use strict';
2
-
3
- // src/arr/formatStrToFuncArgs.ts
4
- function formatStrToFuncArgs(value) {
5
- if (!isStr(value)) {
6
- return [value];
7
- }
8
- let src = value.trim();
9
- if (src === "") {
10
- return [];
11
- }
12
- if (src.startsWith("[") && src.endsWith("]")) {
13
- src = src.slice(1, -1).trim();
14
- if (src === "") {
15
- return [];
16
- }
17
- }
18
- let buf = "", inQuote = false, quoteChar = null, esc = false, depthParen = 0, depthBracket = 0, depthBrace = 0;
19
- const items = [];
20
- const finalize = () => {
21
- const trimmed = buf.trim();
22
- if (trimmed !== "") {
23
- items.push(trimmed);
24
- }
25
- buf = "";
26
- };
27
- for (let i = 0; i < src.length; i++) {
28
- const ch = src[i];
29
- if (inQuote) {
30
- buf += ch;
31
- if (esc) {
32
- esc = false;
33
- continue;
34
- }
35
- if (ch === "\\") {
36
- esc = true;
37
- continue;
38
- }
39
- if (ch === quoteChar) {
40
- inQuote = false;
41
- quoteChar = null;
42
- }
43
- continue;
44
- }
45
- if (ch === '"' || ch === "'") {
46
- inQuote = true;
47
- quoteChar = ch;
48
- buf += ch;
49
- continue;
50
- }
51
- if (ch === "(") {
52
- depthParen++;
53
- buf += ch;
54
- continue;
55
- }
56
- if (ch === ")") {
57
- depthParen = Math.max(0, depthParen - 1);
58
- buf += ch;
59
- continue;
60
- }
61
- if (ch === "[") {
62
- depthBracket++;
63
- buf += ch;
64
- continue;
65
- }
66
- if (ch === "]") {
67
- depthBracket = Math.max(0, depthBracket - 1);
68
- buf += ch;
69
- continue;
70
- }
71
- if (ch === "{") {
72
- depthBrace++;
73
- buf += ch;
74
- continue;
75
- }
76
- if (ch === "}") {
77
- depthBrace = Math.max(0, depthBrace - 1);
78
- buf += ch;
79
- continue;
80
- }
81
- if (ch === "," && depthParen === 0 && depthBracket === 0 && depthBrace === 0) {
82
- finalize();
83
- continue;
84
- }
85
- buf += ch;
86
- }
87
- if (buf.length) {
88
- finalize();
89
- }
90
- return items.map((raw) => {
91
- if (raw.startsWith("$") && raw.includes("(") && raw.endsWith(")")) {
92
- return raw;
93
- }
94
- if (raw === "null") {
95
- return null;
96
- }
97
- if (raw === "undefined") {
98
- return void 0;
99
- }
100
- if (isStrBool(raw)) {
101
- return formatToBool(raw);
102
- }
103
- const n = formatToNum(raw);
104
- if (Number.isFinite(n)) {
105
- return n;
106
- }
107
- if (raw === "Infinity") {
108
- return Infinity;
109
- }
110
- if (raw === "-Infinity") {
111
- return -Infinity;
112
- }
113
- const rawStr = String(raw || "");
114
- const hasQuotes = rawStr.length >= 2 && (rawStr.startsWith("'") && rawStr.endsWith("'") || rawStr.startsWith('"') && rawStr.endsWith('"'));
115
- if (hasQuotes) {
116
- return rawStr.slice(1, -1).replace(/\\\\/g, "\\").replace(/\\'/g, "'").replace(/\\"/g, '"');
117
- }
118
- if (rawStr.startsWith("{") && rawStr.endsWith("}") || rawStr.startsWith("[") && rawStr.endsWith("]")) {
119
- try {
120
- return jsonDecode(rawStr);
121
- } catch {
122
- }
123
- }
124
- return rawStr;
125
- });
126
- }
127
-
128
- // src/arr/splitArrToPortions.ts
129
- function splitArrToPortions(arr, portionLength) {
130
- if (!Number.isInteger(portionLength) || portionLength <= 0) {
131
- return [];
132
- }
133
- const out = [];
134
- let i = 0;
135
- while (i < arr.length) {
136
- out.push(arr.slice(i, i + portionLength));
137
- i += portionLength;
138
- }
139
- return out;
140
- }
141
-
142
- // src/bool/formatToBool.ts
143
- function formatToBool(value) {
144
- switch (true) {
145
- case isBool(value):
146
- return value;
147
- case isNumP(value):
148
- return true;
149
- case isNumNZ(value):
150
- return false;
151
- case (isStrFilled(value) && ["true", "1", "yes", "on"].includes(String(value ?? "").trim().toLowerCase())):
152
- return true;
153
- case (isStrFilled(value) && ["false", "0", "no", "off"].includes(String(value ?? "").trim().toLowerCase())):
154
- return false;
155
- }
156
- return false;
157
- }
158
-
159
- // src/common/wait.ts
160
- async function wait(timeout = 0) {
161
- await new Promise((resolve) => setTimeout(() => resolve(true), timeout));
162
- }
163
-
164
- // src/date/floorDateToMinutes.ts
165
- function floorDateToMinutes(everyMinutes = 1, date = /* @__PURE__ */ new Date()) {
166
- const step = Math.min(60, Math.max(1, Math.trunc(Math.abs(everyMinutes))));
167
- const m = date.getMinutes();
168
- const floored = Math.floor(m / step) * step;
169
- const d = new Date(date);
170
- d.setMinutes(floored, 0, 0);
171
- return d;
172
- }
173
-
174
- // src/date/formatDateToString.ts
175
- function formatDateToString(date = /* @__PURE__ */ new Date()) {
176
- const pad = (n) => String(n).padStart(2, "0");
177
- const year = date.getFullYear();
178
- const month = pad(date.getMonth() + 1);
179
- const day = pad(date.getDate());
180
- const hours = pad(date.getHours());
181
- const minutes = pad(date.getMinutes());
182
- const seconds = pad(date.getSeconds());
183
- return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
184
- }
185
-
186
- // src/date/partsToSeconds.ts
187
- function partsToSeconds(parts) {
188
- const { days = 0, hours = 0, minutes = 0, seconds = 0 } = parts;
189
- return days * 86400 + hours * 3600 + minutes * 60 + seconds;
190
- }
191
-
192
- // src/date/secondsToParts.ts
193
- function secondsToParts(total) {
194
- if (!Number.isFinite(total) || total < 0) {
195
- throw new Error("Invalid total seconds");
196
- }
197
- const days = Math.floor(total / 86400);
198
- const hours = Math.floor(total % 86400 / 3600);
199
- const minutes = Math.floor(total % 3600 / 60);
200
- const seconds = total % 60;
201
- return { days, hours, minutes, seconds };
202
- }
203
-
204
- // src/ip-addr/cidrToRange.ts
205
- function cidrToRange(cidr) {
206
- const [ip, maskStr] = cidr.split("/");
207
- const base = parseIPv4(ip);
208
- const mask = maskStr ? Number(maskStr) : NaN;
209
- if (base === null || !Number.isInteger(mask) || mask < 0 || mask > 32) {
210
- return null;
211
- }
212
- const netmask = mask === 0 ? 0 : 4294967295 << 32 - mask >>> 0;
213
- const start = base & netmask;
214
- const end = start | ~netmask >>> 0;
215
- return [toIPv4(start), toIPv4(end)];
216
- }
217
-
218
- // src/ip-addr/ipAddrToNum.ts
219
- function ipAddrToNum(ip) {
220
- const parts = ip.split(".").map((p) => Number(p));
221
- if (parts.length !== 4 || parts.some((p) => !Number.isInteger(p) || p < 0 || p > 255)) {
222
- throw new Error("Invalid IPv4 address");
223
- }
224
- const buffer = new ArrayBuffer(4);
225
- const dv = new DataView(buffer);
226
- let i = 0;
227
- while (i < 4) {
228
- dv.setUint8(i, parts[i]);
229
- i++;
230
- }
231
- return dv.getUint32(0, false);
232
- }
233
-
234
- // src/ip-addr/numToIpAddr.ts
235
- function numToIpAddr(num) {
236
- if (!isNumP(num)) {
237
- return "";
238
- }
239
- const nbuffer = new ArrayBuffer(4);
240
- const ndv = new DataView(nbuffer);
241
- ndv.setUint32(0, num, false);
242
- const output = [];
243
- let i = 0;
244
- while (i < 4) {
245
- output.push(ndv.getUint8(i));
246
- i++;
247
- }
248
- return output.join(".");
249
- }
250
-
251
- // src/ip-addr/parseIPv4.ts
252
- function parseIPv4(ip) {
253
- if (!isStr(ip)) {
254
- return null;
255
- }
256
- const parts = formatToTrim(ip).split(".");
257
- if (parts.length !== 4) {
258
- return null;
259
- }
260
- let out = 0;
261
- for (let i = 0; i < 4; i++) {
262
- if (!/^\d{1,3}$/.test(parts[i])) {
263
- return null;
264
- }
265
- const n = Number(parts[i]);
266
- if (n < 0 || n > 255) {
267
- return null;
268
- }
269
- out = out << 8 | n;
270
- }
271
- return out >>> 0;
272
- }
273
-
274
- // src/ip-addr/rangeIPv4.ts
275
- function* rangeIPv4(from, to, opts = {}) {
276
- const { includeNetwork = true, includeBroadcast = true } = opts;
277
- let startNum;
278
- let endNum;
279
- let isCIDR = false;
280
- let cidrMask = null;
281
- if (to === void 0 && from.includes("/")) {
282
- const range = cidrToRange(from);
283
- if (!range) {
284
- throw new Error(`Invalid CIDR: "${from}"`);
285
- }
286
- const [startStr, endStr] = range;
287
- const [_, maskStr] = from.split("/");
288
- cidrMask = Number(maskStr);
289
- startNum = parseIPv4(startStr);
290
- endNum = parseIPv4(endStr);
291
- isCIDR = true;
292
- } else {
293
- const s = parseIPv4(from);
294
- if (s === null) {
295
- throw new Error(`Invalid IPv4: "${from}"`);
296
- }
297
- startNum = s;
298
- if (to && to.trim() !== "") {
299
- const e = parseIPv4(to);
300
- if (e === null) {
301
- throw new Error(`Invalid IPv4: "${to}"`);
302
- }
303
- endNum = e;
304
- } else {
305
- const a = startNum >>> 24 & 255;
306
- const b = startNum >>> 16 & 255;
307
- const c = startNum >>> 8 & 255;
308
- endNum = (a << 24 | b << 16 | c << 8 | 255) >>> 0;
309
- }
310
- }
311
- if (startNum > endNum) {
312
- [startNum, endNum] = [endNum, startNum];
313
- }
314
- let skipNetworkAt = -1;
315
- let skipBroadcastAt = -1;
316
- if (isCIDR && cidrMask !== null) {
317
- if (cidrMask <= 30) {
318
- skipNetworkAt = startNum;
319
- skipBroadcastAt = endNum;
320
- }
321
- }
322
- for (let cur = startNum; cur <= endNum; cur = cur + 1 >>> 0) {
323
- if (!includeNetwork && cur === skipNetworkAt) {
324
- if (cur === endNum) {
325
- break;
326
- }
327
- continue;
328
- }
329
- if (!includeBroadcast && cur === skipBroadcastAt) {
330
- if (cur === endNum) {
331
- break;
332
- }
333
- continue;
334
- }
335
- yield toIPv4(cur);
336
- if (cur === 4294967295) {
337
- break;
338
- }
339
- }
340
- }
341
-
342
- // src/ip-addr/rangeIPv4ToArr.ts
343
- function rangeIPv4ToArr2(from, to, opts = {}) {
344
- const { limit = 1e6 } = opts;
345
- const out = [];
346
- let count = 0;
347
- for (const ip of rangeIPv4(from, to, opts)) {
348
- if (count >= limit) {
349
- throw new Error(`Range is too large (> ${limit}). Use the generator version instead.`);
350
- }
351
- out.push(ip);
352
- count++;
353
- }
354
- return out;
355
- }
356
-
357
- // src/ip-addr/toIPv4.ts
358
- function toIPv4(n) {
359
- if (!Number.isInteger(n) || n < 0 || n > 4294967295) {
360
- throw new Error(`Invalid IPv4 number: ${n}`);
361
- }
362
- return [
363
- n >>> 24 & 255,
364
- n >>> 16 & 255,
365
- n >>> 8 & 255,
366
- n & 255
367
- ].join(".");
368
- }
369
-
370
- // src/is/isArr.ts
371
- function isArr(value) {
372
- return Array.isArray(value);
373
- }
374
-
375
- // src/is/isArrFilled.ts
376
- function isArrFilled(value) {
377
- return isArr(value) && value.length > 0;
378
- }
379
-
380
- // src/is/isBool.ts
381
- function isBool(value) {
382
- return typeof value === "boolean";
383
- }
384
-
385
- // src/is/isDate.ts
386
- function isDate(value) {
387
- if (value instanceof Date) {
388
- return !Number.isNaN(value.getTime());
389
- }
390
- if (isStr(value) || isNum(value)) {
391
- const d = new Date(value);
392
- return !Number.isNaN(d.getTime());
393
- }
394
- return false;
395
- }
396
-
397
- // src/is/isEmail.ts
398
- var emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z]{2,})+$/;
399
- function isEmail(value) {
400
- if (!isStrFilled(value)) {
401
- return false;
402
- }
403
- return emailRegex.test(value);
404
- }
405
-
406
- // src/is/isExists.ts
407
- function isExists(value) {
408
- return value !== null && value !== void 0;
409
- }
410
-
411
- // src/is/isFunc.ts
412
- function isFunc(value) {
413
- return typeof value === "function";
414
- }
415
-
416
- // src/is/isIpAddr.ts
417
- var IPV4_RE = /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/;
418
- function isIpAddr(value) {
419
- if (!isStr(value)) {
420
- return false;
421
- }
422
- const v = value.trim();
423
- return IPV4_RE.test(v);
424
- }
425
-
426
- // src/is/isMacAddr.ts
427
- function isMacAddr(value) {
428
- return isStr(value) && /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/.test(value);
429
- }
430
-
431
- // src/is/isNum.ts
432
- function isNum(value) {
433
- return typeof value === "number" && Number.isFinite(value);
434
- }
435
-
436
- // src/is/isNumFloat.ts
437
- function isNumFloat(value) {
438
- return isNum(value) && !Number.isInteger(value);
439
- }
440
-
441
- // src/is/isNumN.ts
442
- function isNumN(value) {
443
- return isNum(value) && value < 0;
444
- }
445
-
446
- // src/is/isNumNZ.ts
447
- function isNumNZ(value) {
448
- return isNum(value) && value <= 0;
449
- }
450
-
451
- // src/is/isNumP.ts
452
- function isNumP(value) {
453
- return isNum(value) && value > 0;
454
- }
455
-
456
- // src/is/isNumPZ.ts
457
- function isNumPZ(value) {
458
- return isNum(value) && value >= 0;
459
- }
460
-
461
- // src/is/isObj.ts
462
- function isObj(value) {
463
- return typeof value === "object" && value !== null && Object.prototype.toString.call(value) === "[object Object]" && !Array.isArray(value);
464
- }
465
-
466
- // src/is/isObjFilled.ts
467
- function isObjFilled(value) {
468
- return isObj(value) && Object.keys(value).length > 0;
469
- }
470
-
471
- // src/is/isPassword.ts
472
- function isPassword(value, {
473
- minLength = 8,
474
- maxLength = 256,
475
- requireUppercase = true,
476
- requireLowercase = true,
477
- requireDigit = true,
478
- requireSpecial = true
479
- } = {}) {
480
- if (!isStr(value)) {
481
- return false;
482
- }
483
- if (value.length < minLength || value.length > maxLength) {
484
- return false;
485
- }
486
- if (requireUppercase && !/[A-ZА-Я]/.test(value)) {
487
- return false;
488
- }
489
- if (requireLowercase && !/[a-zа-я]/.test(value)) {
490
- return false;
491
- }
492
- if (requireDigit && !/\d/.test(value)) {
493
- return false;
494
- }
495
- if (requireSpecial && !/[~!?@#$%^&*_\-+()\[\]{}><\\\/|"'.,:;=]/.test(value)) {
496
- return false;
497
- }
498
- return true;
499
- }
500
-
501
- // src/is/isPhone.ts
502
- function isPhone(value) {
503
- if (!isStrFilled(value) && !isNum(value)) {
504
- return false;
505
- }
506
- const valueProcessed = String(value).trim();
507
- if (valueProcessed.startsWith("-")) {
508
- return false;
509
- }
510
- if ((valueProcessed.match(/\+/g) || []).length > 1) {
511
- return false;
512
- }
513
- if (valueProcessed.includes("+") && !valueProcessed.startsWith("+")) {
514
- return false;
515
- }
516
- if (!/^\+?[0-9-]+$/.test(valueProcessed)) {
517
- return false;
518
- }
519
- if (valueProcessed.length < 3 || valueProcessed.length > 20) {
520
- return false;
521
- }
522
- if (!/[0-9]$/.test(valueProcessed)) {
523
- return false;
524
- }
525
- if (valueProcessed.includes("--")) {
526
- return false;
527
- }
528
- return true;
529
- }
530
-
531
- // src/is/isStr.ts
532
- function isStr(value) {
533
- return typeof value === "string";
534
- }
535
-
536
- // src/is/isStrBool.ts
537
- function isStrBool(value) {
538
- if (!isStrFilled(value)) {
539
- return false;
540
- }
541
- const normalized = value.trim().toLowerCase();
542
- return normalized === "true" || normalized === "false";
543
- }
544
-
545
- // src/is/isStrFilled.ts
546
- function isStrFilled(value) {
547
- return isStr(value) && value.trim().length > 0;
548
- }
549
-
550
- // src/is/isStrAscDesc.ts
551
- function isStrAscDesc(value) {
552
- if (!isStrFilled(value)) {
553
- return false;
554
- }
555
- const normalized = value.trim().toLowerCase();
556
- return normalized === "asc" || normalized === "desc";
557
- }
558
-
559
- // src/is/isVar.ts
560
- function isVar(value) {
561
- return isStr(value) && /^[A-Za-z_][A-Za-z0-9_]*$/.test(value);
562
- }
563
-
564
- // src/json/parseStringLike.ts
565
- var QUOTED_RE = /^(['"`])([\s\S]*)\1$/;
566
- function parseStringLike(s, allowString) {
567
- const trimmed = s.trim();
568
- const pr = tryParseJSON(trimmed);
569
- if (pr.ok) {
570
- return pr.value;
571
- }
572
- const m = QUOTED_RE.exec(trimmed);
573
- if (m) {
574
- return m[2];
575
- }
576
- return allowString ? trimmed : null;
577
- }
578
-
579
- // src/json/tryParseJSON.ts
580
- function tryParseJSON(str) {
581
- try {
582
- return { ok: true, value: JSON.parse(str) };
583
- } catch (err) {
584
- }
585
- return { ok: false };
586
- }
587
-
588
- // src/json/jsonDecode.ts
589
- function jsonDecode(value, allowString = false) {
590
- if (value === null || isNum(value) || isBool(value)) {
591
- return value;
592
- }
593
- if (isArrFilled(value)) {
594
- const arr = value;
595
- const out = [];
596
- for (const item of arr) {
597
- if (isStrFilled(item)) {
598
- out.push(parseStringLike(String(item), allowString));
599
- } else {
600
- out.push(item);
601
- }
602
- }
603
- return out;
604
- }
605
- if (isObjFilled(value)) {
606
- const src = value;
607
- const out = {};
608
- for (const key of Object.keys(src)) {
609
- const v = src[key];
610
- if (isStrFilled(v)) {
611
- out[key] = parseStringLike(String(v), allowString);
612
- } else {
613
- out[key] = v;
614
- }
615
- }
616
- return out;
617
- }
618
- if (isArr(value) || isObj(value)) {
619
- return value;
620
- }
621
- if (isStrFilled(value)) {
622
- return parseStringLike(String(value), allowString);
623
- }
624
- return null;
625
- }
626
-
627
- // src/json/jsonEncode.ts
628
- function jsonEncode2(value) {
629
- try {
630
- return isObj(value) || isArr(value) ? JSON.stringify(value) : "";
631
- } catch (err) {
632
- }
633
- return "";
634
- }
635
-
636
- // src/num/changeFixedDecimalScale.ts
637
- function changeFixedDecimalScale(value, scaleDelta) {
638
- const delta = Math.trunc(scaleDelta);
639
- if (delta === 0) {
640
- return { ...value };
641
- }
642
- if (delta > 0) {
643
- return {
644
- sign: value.sign,
645
- digitsInteger: value.digitsInteger,
646
- scale: value.scale + delta
647
- };
648
- }
649
- const multiplier = 10n ** BigInt(-delta);
650
- return {
651
- sign: value.sign,
652
- digitsInteger: value.digitsInteger * multiplier,
653
- scale: value.scale + delta
654
- };
655
- }
656
-
657
- // src/num/convertExponentialToParts.ts
658
- function convertExponentialToParts(sign, exponentialString) {
659
- const match = /^([0-9]+)(?:\.([0-9]*))?e([+\-]?[0-9]+)$/i.exec(
660
- (() => {
661
- const [coefficient, exponentText] = exponentialString.split(/e/i);
662
- const [integerPart, fractionalPart = ""] = coefficient.split(".");
663
- const allDigits2 = integerPart.replace(/^0+/, "") + fractionalPart;
664
- const exponentValue = parseInt(exponentText, 10) - fractionalPart.length;
665
- return `${allDigits2 || "0"}e${exponentValue}`;
666
- })()
667
- );
668
- if (!match) {
669
- throw new Error("Failed to parse exponential notation.");
670
- }
671
- let allDigits = match[1];
672
- const exponent = parseInt(match[3], 10);
673
- if (isNumPZ(exponent)) {
674
- allDigits = allDigits + "0".repeat(exponent);
675
- return {
676
- sign,
677
- integerPart: allDigits || "0",
678
- fractionalPart: ""
679
- };
680
- } else {
681
- const digitsToLeft = -exponent;
682
- if (digitsToLeft >= allDigits.length) {
683
- const missingZeros = "0".repeat(digitsToLeft - allDigits.length);
684
- return {
685
- sign,
686
- integerPart: "0",
687
- fractionalPart: missingZeros + allDigits
688
- };
689
- } else {
690
- const splitIndex = allDigits.length - digitsToLeft;
691
- return {
692
- sign,
693
- integerPart: allDigits.slice(0, splitIndex),
694
- fractionalPart: allDigits.slice(splitIndex)
695
- };
696
- }
697
- }
698
- }
699
-
700
- // src/num/fixedDecimalToNum.ts
701
- function fixedDecimalToNum(value) {
702
- return Number(fixedDecimalToStr(value));
703
- }
704
-
705
- // src/num/fixedDecimalToStr.ts
706
- function fixedDecimalToStr(value) {
707
- const signSymbol = value.sign < 0 ? "-" : "";
708
- const allDigitsString = value.digitsInteger.toString();
709
- if (value.scale === 0) {
710
- return signSymbol + allDigitsString;
711
- }
712
- const padZeros = value.scale - allDigitsString.length;
713
- if (padZeros >= 0) {
714
- return signSymbol + "0." + "0".repeat(padZeros) + allDigitsString;
715
- }
716
- const integerBoundary = allDigitsString.length - value.scale;
717
- const integerText = allDigitsString.slice(0, integerBoundary);
718
- const fractionalText = allDigitsString.slice(integerBoundary);
719
- return signSymbol + integerText + "." + fractionalText;
720
- }
721
-
722
- // src/num/formatToNum.ts
723
- function formatToNum(value, round = 1) {
724
- return fixedDecimalToNum(round > 1 ? roundFixedDecimal(parseToFixedDecimal(value), round, "half-up") : parseToFixedDecimal(value));
725
- }
726
-
727
- // src/num/normalizeToDecimalComponents.ts
728
- function normalizeToDecimalComponents(input) {
729
- if (typeof input === "bigint") {
730
- const sign = input < 0n ? -1 : 1;
731
- const absoluteValue = (input < 0n ? -input : input).toString();
732
- return {
733
- sign,
734
- integerPart: absoluteValue,
735
- fractionalPart: ""
736
- };
737
- }
738
- if (typeof input === "number") {
739
- if (!Number.isFinite(input)) {
740
- throw new Error("Input number is not finite.");
741
- }
742
- const sign = input < 0 ? -1 : 1;
743
- const absoluteValue = Math.abs(input);
744
- const exponentialForm = absoluteValue.toExponential(30);
745
- return convertExponentialToParts(sign, exponentialForm);
746
- }
747
- if (typeof input === "string") {
748
- let processed = input.trim().replace(",", ".");
749
- if (!processed) {
750
- throw new Error("Input string is empty.");
751
- }
752
- let sign = 1;
753
- if (processed.startsWith("+") || processed.startsWith("-")) {
754
- sign = processed.startsWith("-") ? -1 : 1;
755
- processed = processed.slice(1);
756
- }
757
- if (/^[0-9]*\.?[0-9]*(e[+\-]?[0-9]+)?$/i.test(processed)) {
758
- if (/e/i.test(processed)) {
759
- return convertExponentialToParts(sign, processed);
760
- }
761
- const [integerPart = "0", fractionalPart = ""] = processed.split(".");
762
- return {
763
- sign,
764
- integerPart,
765
- fractionalPart
766
- };
767
- }
768
- throw new Error("Invalid numeric string.");
769
- }
770
- throw new Error("Unsupported input type.");
771
- }
772
-
773
- // src/num/parseToFixedDecimal.ts
774
- function parseToFixedDecimal(input) {
775
- const {
776
- sign,
777
- integerPart,
778
- fractionalPart
779
- } = normalizeToDecimalComponents(input);
780
- const integerDigits = integerPart.replace(/^0+/, "") || "0";
781
- const fractionalDigits = fractionalPart.replace(/0+$/, "");
782
- const combinedDigits = integerDigits + fractionalDigits || "0";
783
- return {
784
- sign,
785
- digitsInteger: BigInt(combinedDigits),
786
- scale: fractionalDigits.length
787
- };
788
- }
789
-
790
- // src/num/roundFixedDecimal.ts
791
- function roundFixedDecimal(source, decimalPlaces, roundMode = "half-up") {
792
- const targetPrecision = Math.max(0, Math.trunc(decimalPlaces));
793
- if (source.scale <= targetPrecision) {
794
- return { ...source };
795
- }
796
- const digitsToRemove = source.scale - targetPrecision;
797
- const divisionFactor = 10n ** BigInt(digitsToRemove);
798
- const integerPart = source.digitsInteger / divisionFactor;
799
- const remainder = source.digitsInteger % divisionFactor;
800
- if (roundMode === "trunc" || remainder === 0n) {
801
- return {
802
- sign: source.sign,
803
- digitsInteger: integerPart,
804
- scale: targetPrecision
805
- };
806
- }
807
- const halfThreshold = divisionFactor / 2n;
808
- const shouldRoundUp = remainder >= halfThreshold;
809
- const roundedValue = shouldRoundUp ? integerPart + 1n : integerPart;
810
- return {
811
- sign: source.sign,
812
- digitsInteger: roundedValue,
813
- scale: targetPrecision
814
- };
815
- }
816
-
817
- // src/str/formatToLowerCase.ts
818
- function formatToLowerCase(value) {
819
- if (!isStr(value)) {
820
- return "";
821
- }
822
- const trimmed = formatToTrim(value);
823
- return isStrFilled(trimmed) ? trimmed.toLowerCase() : "";
824
- }
825
-
826
- // src/str/formatToNull.ts
827
- function formatToNull(value) {
828
- return isStr(value) && formatToTrim(value) === "" || value === void 0 ? null : value;
829
- }
830
-
831
- // src/str/formatToPhone.ts
832
- function formatToPhone(value, defaultCountry = "+7") {
833
- if (!isStr(value)) {
834
- return null;
835
- }
836
- let phone = formatToTrim(value).replace(/[\s\-().]/g, "");
837
- if (/^00\d{8,15}$/.test(phone)) {
838
- phone = "+" + phone.slice(2);
839
- } else if (/^\d{10}$/.test(phone)) {
840
- phone = defaultCountry + phone;
841
- } else if (/^\d{9,15}$/.test(phone) && !phone.startsWith("0")) {
842
- phone = "+" + phone;
843
- }
844
- return /^\+\d{10,15}$/.test(phone) ? phone : null;
845
- }
846
-
847
- // src/str/formatToTrim.ts
848
- function formatToTrim(value) {
849
- return String(isStr(value) ? value.trim().normalize("NFKC").replace(/[\u200B-\u200D\uFEFF]/g, "") : "");
850
- }
851
-
852
- // src/str/formatToUndefined.ts
853
- function formatToUndefined2(value) {
854
- return isStr(value) && formatToTrim(value) === "" || value === null ? void 0 : value;
855
- }
856
-
857
- // src/units/toGB.ts
858
- var KB = 1024;
859
- var MB = KB * 1024;
860
- var GB = MB * 1024;
861
- var TB = GB * 1024;
862
- var PB = TB * 1024;
863
- function toGB(value, unit = "") {
864
- const v = formatToNum(value);
865
- if (!isNum(v)) {
866
- throw new Error(`toGB: value "${value}" is not numeric`);
867
- }
868
- const u = String(unit).trim().toLowerCase().replace(/\s+/g, "");
869
- const c = u ? u[0] : "g";
870
- let out;
871
- switch (c) {
872
- case "b":
873
- out = v / GB;
874
- break;
875
- case "k":
876
- out = v / MB;
877
- break;
878
- case "m":
879
- out = v / GB;
880
- break;
881
- case "g":
882
- out = v;
883
- break;
884
- case "t":
885
- out = v * (TB / GB);
886
- break;
887
- case "p":
888
- out = v * (PB / GB);
889
- break;
890
- default:
891
- out = v;
892
- break;
893
- }
894
- if (!isNum(out)) {
895
- throw new Error(`toGB: result is not finite (value="${value}", unit="${unit}")`);
896
- }
897
- return Object.is(out, -0) ? 0 : out;
898
- }
899
-
900
- // src/units/normalizeUnit.ts
901
- function normalizeUnit(u) {
902
- return String(u).trim().toLowerCase().replace(/\s+/g, "").replace(/(?:\/?s|hash(?:es)?)$/i, "");
903
- }
904
-
905
- // src/units/toGH.ts
906
- var FACTOR = {
907
- h: 1e-9,
908
- k: 1e-6,
909
- m: 1e-3,
910
- g: 1,
911
- t: 1e3,
912
- p: 1e6,
913
- e: 1e9
914
- };
915
- function toGH(value, unit = "") {
916
- const v = formatToNum(value);
917
- if (!isNum(v)) {
918
- return 0;
919
- }
920
- const u = normalizeUnit(unit);
921
- const c = u ? u[0] : "g";
922
- const factor = FACTOR[c] ?? 1;
923
- const out = v * factor;
924
- if (!isNum(out)) {
925
- throw new Error(`toGH: result is not finite (value="${v}", unit="${u}")`);
926
- }
927
- return Object.is(out, -0) ? 0 : out;
928
- }
929
-
930
- // src/units/toH.ts
931
- var FACTOR_H = {
932
- h: 1,
933
- k: 1e3,
934
- m: 1e6,
935
- g: 1e9,
936
- t: 1e12,
937
- p: 1e15,
938
- e: 1e18
939
- };
940
- function toH(value, unit = "") {
941
- const v = formatToNum(value);
942
- if (!isNum(v)) {
943
- return 0;
944
- }
945
- const u = normalizeUnit(unit);
946
- const c = u ? u[0] : "h";
947
- const factor = FACTOR_H[c] ?? 1;
948
- const out = v * factor;
949
- if (!isNum(out)) {
950
- throw new Error(`toH: result is not finite (value="${v}", unit="${u}")`);
951
- }
952
- return Object.is(out, -0) ? 0 : out;
953
- }
954
-
955
- // src/url/extractHost.ts
956
- var HAS_SCHEME = /^[a-zA-Z][a-zA-Z\d+\-.]*:/;
957
- function extractHost(value = "") {
958
- if (!isStrFilled(value)) {
959
- return "";
960
- }
961
- let v = value.trim();
962
- const candidate = HAS_SCHEME.test(v) ? v : `http://${v}`;
963
- try {
964
- const u = new URL(candidate);
965
- let host = u.hostname;
966
- return host;
967
- } catch {
968
- const withoutCreds = v.split("@").pop() || v;
969
- const firstSegment = withoutCreds.split(/[/?#]/, 1)[0];
970
- const mIPv6 = firstSegment.match(/^\[([^\]]+)\]/);
971
- if (mIPv6) {
972
- return mIPv6[1];
973
- }
974
- return firstSegment.split(":", 1)[0] || "";
975
- }
976
- }
977
-
978
- exports.changeFixedDecimalScale = changeFixedDecimalScale;
979
- exports.cidrToRange = cidrToRange;
980
- exports.convertExponentialToParts = convertExponentialToParts;
981
- exports.extractHost = extractHost;
982
- exports.fixedDecimalToNum = fixedDecimalToNum;
983
- exports.fixedDecimalToStr = fixedDecimalToStr;
984
- exports.floorDateToMinutes = floorDateToMinutes;
985
- exports.formatDateToString = formatDateToString;
986
- exports.formatStrToFuncArgs = formatStrToFuncArgs;
987
- exports.formatToBool = formatToBool;
988
- exports.formatToLowerCase = formatToLowerCase;
989
- exports.formatToNull = formatToNull;
990
- exports.formatToNum = formatToNum;
991
- exports.formatToPhone = formatToPhone;
992
- exports.formatToTrim = formatToTrim;
993
- exports.formatToUndefined = formatToUndefined2;
994
- exports.ipAddrToNum = ipAddrToNum;
995
- exports.isArr = isArr;
996
- exports.isArrFilled = isArrFilled;
997
- exports.isBool = isBool;
998
- exports.isDate = isDate;
999
- exports.isEmail = isEmail;
1000
- exports.isExists = isExists;
1001
- exports.isFunc = isFunc;
1002
- exports.isIpAddr = isIpAddr;
1003
- exports.isMacAddr = isMacAddr;
1004
- exports.isNum = isNum;
1005
- exports.isNumFloat = isNumFloat;
1006
- exports.isNumN = isNumN;
1007
- exports.isNumNZ = isNumNZ;
1008
- exports.isNumP = isNumP;
1009
- exports.isNumPZ = isNumPZ;
1010
- exports.isObj = isObj;
1011
- exports.isObjFilled = isObjFilled;
1012
- exports.isPassword = isPassword;
1013
- exports.isPhone = isPhone;
1014
- exports.isStr = isStr;
1015
- exports.isStrAscDesc = isStrAscDesc;
1016
- exports.isStrBool = isStrBool;
1017
- exports.isStrFilled = isStrFilled;
1018
- exports.isVar = isVar;
1019
- exports.jsonDecode = jsonDecode;
1020
- exports.jsonEncode = jsonEncode2;
1021
- exports.normalizeToDecimalComponents = normalizeToDecimalComponents;
1022
- exports.numToIpAddr = numToIpAddr;
1023
- exports.parseIPv4 = parseIPv4;
1024
- exports.parseStringLike = parseStringLike;
1025
- exports.parseToFixedDecimal = parseToFixedDecimal;
1026
- exports.partsToSeconds = partsToSeconds;
1027
- exports.rangeIPv4 = rangeIPv4;
1028
- exports.rangeIPv4ToArr = rangeIPv4ToArr2;
1029
- exports.roundFixedDecimal = roundFixedDecimal;
1030
- exports.secondsToParts = secondsToParts;
1031
- exports.splitArrToPortions = splitArrToPortions;
1032
- exports.toGB = toGB;
1033
- exports.toGH = toGH;
1034
- exports.toH = toH;
1035
- exports.toIPv4 = toIPv4;
1036
- exports.tryParseJSON = tryParseJSON;
1037
- exports.wait = wait;
1038
- //# sourceMappingURL=index.cjs.map
1
+ 'use strict';function et(t){if(!m(t))return [t];let r=t.trim();if(r==="")return [];if(r.startsWith("[")&&r.endsWith("]")&&(r=r.slice(1,-1).trim(),r===""))return [];let n="",e=false,o=null,i=false,s=0,p=0,d=0,h=[],x=()=>{let u=n.trim();u!==""&&h.push(u),n="";};for(let u=0;u<r.length;u++){let f=r[u];if(e){if(n+=f,i){i=false;continue}if(f==="\\"){i=true;continue}f===o&&(e=false,o=null);continue}if(f==='"'||f==="'"){e=true,o=f,n+=f;continue}if(f==="("){s++,n+=f;continue}if(f===")"){s=Math.max(0,s-1),n+=f;continue}if(f==="["){p++,n+=f;continue}if(f==="]"){p=Math.max(0,p-1),n+=f;continue}if(f==="{"){d++,n+=f;continue}if(f==="}"){d=Math.max(0,d-1),n+=f;continue}if(f===","&&s===0&&p===0&&d===0){x();continue}n+=f;}return n.length&&x(),h.map(u=>{if(u.startsWith("$")&&u.includes("(")&&u.endsWith(")"))return u;if(u==="null")return null;if(u==="undefined")return;if(E(u))return $(u);let f=w(u);if(Number.isFinite(f))return f;if(u==="Infinity")return 1/0;if(u==="-Infinity")return -1/0;let l=String(u||"");if(l.length>=2&&(l.startsWith("'")&&l.endsWith("'")||l.startsWith('"')&&l.endsWith('"')))return l.slice(1,-1).replace(/\\\\/g,"\\").replace(/\\'/g,"'").replace(/\\"/g,'"');if(l.startsWith("{")&&l.endsWith("}")||l.startsWith("[")&&l.endsWith("]"))try{return B(l)}catch{}return l})}function it(t,r){if(!Number.isInteger(r)||r<=0)return [];let n=[],e=0;for(;e<t.length;)n.push(t.slice(e,e+r)),e+=r;return n}function $(t){switch(true){case y(t):return t;case F(t):return true;case R(t):return false;case(a(t)&&["true","1","yes","on"].includes(String(t??"").trim().toLowerCase())):return true;case(a(t)&&["false","0","no","off"].includes(String(t??"").trim().toLowerCase())):return false}return false}async function mt(t=0){await new Promise(r=>setTimeout(()=>r(true),t));}function at(t=1,r=new Date){let n=Math.min(60,Math.max(1,Math.trunc(Math.abs(t)))),e=r.getMinutes(),o=Math.floor(e/n)*n,i=new Date(r);return i.setMinutes(o,0,0),i}function lt(t=new Date){let r=d=>String(d).padStart(2,"0"),n=t.getFullYear(),e=r(t.getMonth()+1),o=r(t.getDate()),i=r(t.getHours()),s=r(t.getMinutes()),p=r(t.getSeconds());return `${n}-${e}-${o} ${i}:${s}:${p}`}function gt(t){let{days:r=0,hours:n=0,minutes:e=0,seconds:o=0}=t;return r*86400+n*3600+e*60+o}function ht(t){if(!Number.isFinite(t)||t<0)throw new Error("Invalid total seconds");let r=Math.floor(t/86400),n=Math.floor(t%86400/3600),e=Math.floor(t%3600/60),o=t%60;return {days:r,hours:n,minutes:e,seconds:o}}function M(t){let[r,n]=t.split("/"),e=b(r),o=n?Number(n):NaN;if(e===null||!Number.isInteger(o)||o<0||o>32)return null;let i=o===0?0:4294967295<<32-o>>>0,s=e&i,p=s|~i>>>0;return [N(s),N(p)]}function Tt(t){let r=t.split(".").map(i=>Number(i));if(r.length!==4||r.some(i=>!Number.isInteger(i)||i<0||i>255))throw new Error("Invalid IPv4 address");let n=new ArrayBuffer(4),e=new DataView(n),o=0;for(;o<4;)e.setUint8(o,r[o]),o++;return e.getUint32(0,false)}function Pt(t){if(!F(t))return "";let r=new ArrayBuffer(4),n=new DataView(r);n.setUint32(0,t,false);let e=[],o=0;for(;o<4;)e.push(n.getUint8(o)),o++;return e.join(".")}function b(t){if(!m(t))return null;let r=g(t).split(".");if(r.length!==4)return null;let n=0;for(let e=0;e<4;e++){if(!/^\d{1,3}$/.test(r[e]))return null;let o=Number(r[e]);if(o<0||o>255)return null;n=n<<8|o;}return n>>>0}function*j(t,r,n={}){let{includeNetwork:e=true,includeBroadcast:o=true}=n,i,s,p=false,d=null;if(r===void 0&&t.includes("/")){let u=M(t);if(!u)throw new Error(`Invalid CIDR: "${t}"`);let[f,l]=u,[D,V]=t.split("/");d=Number(V),i=b(f),s=b(l),p=true;}else {let u=b(t);if(u===null)throw new Error(`Invalid IPv4: "${t}"`);if(i=u,r&&r.trim()!==""){let f=b(r);if(f===null)throw new Error(`Invalid IPv4: "${r}"`);s=f;}else {let f=i>>>24&255,l=i>>>16&255,D=i>>>8&255;s=(f<<24|l<<16|D<<8|255)>>>0;}}i>s&&([i,s]=[s,i]);let h=-1,x=-1;p&&d!==null&&d<=30&&(h=i,x=s);for(let u=i;u<=s;u=u+1>>>0){if(!e&&u===h){if(u===s)break;continue}if(!o&&u===x){if(u===s)break;continue}if(yield N(u),u===4294967295)break}}function Rt(t,r,n={}){let{limit:e=1e6}=n,o=[],i=0;for(let s of j(t,r,n)){if(i>=e)throw new Error(`Range is too large (> ${e}). Use the generator version instead.`);o.push(s),i++;}return o}function N(t){if(!Number.isInteger(t)||t<0||t>4294967295)throw new Error(`Invalid IPv4 number: ${t}`);return [t>>>24&255,t>>>16&255,t>>>8&255,t&255].join(".")}function k(t){return Array.isArray(t)}function L(t){return k(t)&&t.length>0}function y(t){return typeof t=="boolean"}function Zt(t){if(t instanceof Date)return !Number.isNaN(t.getTime());if(m(t)||c(t)){let r=new Date(t);return !Number.isNaN(r.getTime())}return false}var Q=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z]{2,})+$/;function Gt(t){return a(t)?Q.test(t):false}function Vt(t){return t!=null}function Kt(t){return typeof t=="function"}var K=/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/;function Xt(t){if(!m(t))return false;let r=t.trim();return K.test(r)}function rr(t){return m(t)&&/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/.test(t)}function c(t){return typeof t=="number"&&Number.isFinite(t)}function ir(t){return c(t)&&!Number.isInteger(t)}function fr(t){return c(t)&&t<0}function R(t){return c(t)&&t<=0}function F(t){return c(t)&&t>0}function z(t){return c(t)&&t>=0}function T(t){return typeof t=="object"&&t!==null&&Object.prototype.toString.call(t)==="[object Object]"&&!Array.isArray(t)}function C(t){return T(t)&&Object.keys(t).length>0}function kr(t,{minLength:r=8,maxLength:n=256,requireUppercase:e=true,requireLowercase:o=true,requireDigit:i=true,requireSpecial:s=true}={}){return !(!m(t)||t.length<r||t.length>n||e&&!/[A-ZА-Я]/.test(t)||o&&!/[a-zа-я]/.test(t)||i&&!/\d/.test(t)||s&&!/[~!?@#$%^&*_\-+()\[\]{}><\\\/|"'.,:;=]/.test(t))}function Sr(t){if(!a(t)&&!c(t))return false;let r=String(t).trim();return !(r.startsWith("-")||(r.match(/\+/g)||[]).length>1||r.includes("+")&&!r.startsWith("+")||!/^\+?[0-9-]+$/.test(r)||r.length<3||r.length>20||!/[0-9]$/.test(r)||r.includes("--"))}function m(t){return typeof t=="string"}function E(t){if(!a(t))return false;let r=t.trim().toLowerCase();return r==="true"||r==="false"}function a(t){return m(t)&&t.trim().length>0}function $r(t){if(!a(t))return false;let r=t.trim().toLowerCase();return r==="asc"||r==="desc"}function Rr(t){return m(t)&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(t)}var q=/^(['"`])([\s\S]*)\1$/;function P(t,r){let n=t.trim(),e=W(n);if(e.ok)return e.value;let o=q.exec(n);return o?o[2]:r?n:null}function W(t){try{return {ok:!0,value:JSON.parse(t)}}catch{}return {ok:false}}function B(t,r=false){if(t===null||c(t)||y(t))return t;if(L(t)){let n=t,e=[];for(let o of n)a(o)?e.push(P(String(o),r)):e.push(o);return e}if(C(t)){let n=t,e={};for(let o of Object.keys(n)){let i=n[o];a(i)?e[o]=P(String(i),r):e[o]=i;}return e}return k(t)||T(t)?t:a(t)?P(String(t),r):null}function _r(t){try{return T(t)||k(t)?JSON.stringify(t):""}catch{}return ""}function Hr(t,r){let n=Math.trunc(r);if(n===0)return {...t};if(n>0)return {sign:t.sign,digitsInteger:t.digitsInteger,scale:t.scale+n};let e=10n**BigInt(-n);return {sign:t.sign,digitsInteger:t.digitsInteger*e,scale:t.scale+n}}function A(t,r){let n=/^([0-9]+)(?:\.([0-9]*))?e([+\-]?[0-9]+)$/i.exec((()=>{let[i,s]=r.split(/e/i),[p,d=""]=i.split("."),h=p.replace(/^0+/,"")+d,x=parseInt(s,10)-d.length;return `${h||"0"}e${x}`})());if(!n)throw new Error("Failed to parse exponential notation.");let e=n[1],o=parseInt(n[3],10);if(z(o))return e=e+"0".repeat(o),{sign:t,integerPart:e||"0",fractionalPart:""};{let i=-o;if(i>=e.length){let s="0".repeat(i-e.length);return {sign:t,integerPart:"0",fractionalPart:s+e}}else {let s=e.length-i;return {sign:t,integerPart:e.slice(0,s),fractionalPart:e.slice(s)}}}}function J(t){return Number(Z(t))}function Z(t){let r=t.sign<0?"-":"",n=t.digitsInteger.toString();if(t.scale===0)return r+n;let e=t.scale-n.length;if(e>=0)return r+"0."+"0".repeat(e)+n;let o=n.length-t.scale,i=n.slice(0,o),s=n.slice(o);return r+i+"."+s}function w(t,r=1){return J(r>1?U(O(t),r,"half-up"):O(t))}function _(t){if(typeof t=="bigint"){let r=t<0n?-1:1,n=(t<0n?-t:t).toString();return {sign:r,integerPart:n,fractionalPart:""}}if(typeof t=="number"){if(!Number.isFinite(t))throw new Error("Input number is not finite.");let r=t<0?-1:1,e=Math.abs(t).toExponential(30);return A(r,e)}if(typeof t=="string"){let r=t.trim().replace(",",".");if(!r)throw new Error("Input string is empty.");let n=1;if((r.startsWith("+")||r.startsWith("-"))&&(n=r.startsWith("-")?-1:1,r=r.slice(1)),/^[0-9]*\.?[0-9]*(e[+\-]?[0-9]+)?$/i.test(r)){if(/e/i.test(r))return A(n,r);let[e="0",o=""]=r.split(".");return {sign:n,integerPart:e,fractionalPart:o}}throw new Error("Invalid numeric string.")}throw new Error("Unsupported input type.")}function O(t){let{sign:r,integerPart:n,fractionalPart:e}=_(t),o=n.replace(/^0+/,"")||"0",i=e.replace(/0+$/,""),s=o+i||"0";return {sign:r,digitsInteger:BigInt(s),scale:i.length}}function U(t,r,n="half-up"){let e=Math.max(0,Math.trunc(r));if(t.scale<=e)return {...t};let o=t.scale-e,i=10n**BigInt(o),s=t.digitsInteger/i,p=t.digitsInteger%i;if(n==="trunc"||p===0n)return {sign:t.sign,digitsInteger:s,scale:e};let d=i/2n,x=p>=d?s+1n:s;return {sign:t.sign,digitsInteger:x,scale:e}}function fn(t){if(!m(t))return "";let r=g(t);return a(r)?r.toLowerCase():""}function pn(t){return m(t)&&g(t)===""||t===void 0?null:t}function gn(t,r="+7"){if(!m(t))return null;let n=g(t).replace(/[\s\-().]/g,"");return /^00\d{8,15}$/.test(n)?n="+"+n.slice(2):/^\d{10}$/.test(n)?n=r+n:/^\d{9,15}$/.test(n)&&!n.startsWith("0")&&(n="+"+n),/^\+\d{10,15}$/.test(n)?n:null}function g(t){return String(m(t)?t.trim().normalize("NFKC").replace(/[\u200B-\u200D\uFEFF]/g,""):"")}function Tn(t){return m(t)&&g(t)===""||t===null?void 0:t}var Y=1024,G=Y*1024,S=G*1024,H=S*1024,X=H*1024;function yn(t,r=""){let n=w(t);if(!c(n))throw new Error(`toGB: value "${t}" is not numeric`);let e=String(r).trim().toLowerCase().replace(/\s+/g,""),o=e?e[0]:"g",i;switch(o){case "b":i=n/S;break;case "k":i=n/G;break;case "m":i=n/S;break;case "g":i=n;break;case "t":i=n*(H/S);break;case "p":i=n*(X/S);break;default:i=n;break}if(!c(i))throw new Error(`toGB: result is not finite (value="${t}", unit="${r}")`);return Object.is(i,-0)?0:i}function I(t){return String(t).trim().toLowerCase().replace(/\s+/g,"").replace(/(?:\/?s|hash(?:es)?)$/i,"")}var v={h:1e-9,k:1e-6,m:.001,g:1,t:1e3,p:1e6,e:1e9};function An(t,r=""){let n=w(t);if(!c(n))return 0;let e=I(r),o=e?e[0]:"g",i=v[o]??1,s=n*i;if(!c(s))throw new Error(`toGH: result is not finite (value="${n}", unit="${e}")`);return Object.is(s,-0)?0:s}var tt={h:1,k:1e3,m:1e6,g:1e9,t:1e12,p:1e15,e:1e18};function Bn(t,r=""){let n=w(t);if(!c(n))return 0;let e=I(r),o=e?e[0]:"h",i=tt[o]??1,s=n*i;if(!c(s))throw new Error(`toH: result is not finite (value="${n}", unit="${e}")`);return Object.is(s,-0)?0:s}var rt=/^[a-zA-Z][a-zA-Z\d+\-.]*:/;function jn(t=""){if(!a(t))return "";let r=t.trim(),n=rt.test(r)?r:`http://${r}`;try{return new URL(n).hostname}catch{let o=(r.split("@").pop()||r).split(/[/?#]/,1)[0],i=o.match(/^\[([^\]]+)\]/);return i?i[1]:o.split(":",1)[0]||""}}
2
+ exports.changeFixedDecimalScale=Hr;exports.cidrToRange=M;exports.convertExponentialToParts=A;exports.extractHost=jn;exports.fixedDecimalToNum=J;exports.fixedDecimalToStr=Z;exports.floorDateToMinutes=at;exports.formatDateToString=lt;exports.formatStrToFuncArgs=et;exports.formatToBool=$;exports.formatToLowerCase=fn;exports.formatToNull=pn;exports.formatToNum=w;exports.formatToPhone=gn;exports.formatToTrim=g;exports.formatToUndefined=Tn;exports.ipAddrToNum=Tt;exports.isArr=k;exports.isArrFilled=L;exports.isBool=y;exports.isDate=Zt;exports.isEmail=Gt;exports.isExists=Vt;exports.isFunc=Kt;exports.isIpAddr=Xt;exports.isMacAddr=rr;exports.isNum=c;exports.isNumFloat=ir;exports.isNumN=fr;exports.isNumNZ=R;exports.isNumP=F;exports.isNumPZ=z;exports.isObj=T;exports.isObjFilled=C;exports.isPassword=kr;exports.isPhone=Sr;exports.isStr=m;exports.isStrAscDesc=$r;exports.isStrBool=E;exports.isStrFilled=a;exports.isVar=Rr;exports.jsonDecode=B;exports.jsonEncode=_r;exports.normalizeToDecimalComponents=_;exports.numToIpAddr=Pt;exports.parseIPv4=b;exports.parseStringLike=P;exports.parseToFixedDecimal=O;exports.partsToSeconds=gt;exports.rangeIPv4=j;exports.rangeIPv4ToArr=Rt;exports.roundFixedDecimal=U;exports.secondsToParts=ht;exports.splitArrToPortions=it;exports.toGB=yn;exports.toGH=An;exports.toH=Bn;exports.toIPv4=N;exports.tryParseJSON=W;exports.wait=mt;//# sourceMappingURL=index.cjs.map
1039
3
  //# sourceMappingURL=index.cjs.map