full-utils 3.0.2 → 3.0.4

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.d.cts CHANGED
@@ -145,31 +145,42 @@ declare function arrFuncArgs(value: string): unknown[];
145
145
  *
146
146
  * @example
147
147
  * // Split an array into groups of 3
148
- * arrSplitPortions([1, 2, 3, 4, 5, 6, 7], 3);
148
+ * arrSplitBatches([1, 2, 3, 4, 5, 6, 7], 3);
149
149
  * // => [[1, 2, 3], [4, 5, 6], [7]]
150
150
  *
151
151
  * @example
152
152
  * // Portion length larger than array
153
- * arrSplitPortions(['a', 'b'], 5);
153
+ * arrSplitBatches(['a', 'b'], 5);
154
154
  * // => [['a', 'b']]
155
155
  *
156
156
  * @example
157
157
  * // Non-integer or invalid sizes
158
- * arrSplitPortions([1, 2, 3], 0); // => []
159
- * arrSplitPortions([1, 2, 3], -2); // => []
160
- * arrSplitPortions([1, 2, 3], NaN); // => []
158
+ * arrSplitBatches([1, 2, 3], 0); // => []
159
+ * arrSplitBatches([1, 2, 3], -2); // => []
160
+ * arrSplitBatches([1, 2, 3], NaN); // => []
161
161
  *
162
162
  * @example
163
163
  * // Works with readonly arrays
164
164
  * const input = [10, 20, 30, 40] as const;
165
- * const result = arrSplitPortions(input, 2);
165
+ * const result = arrSplitBatches(input, 2);
166
166
  * // result: [[10, 20], [30, 40]]
167
167
  *
168
168
  * @category Array
169
169
  * @public
170
170
  * @since 2.0.0
171
171
  */
172
- declare function arrSplitPortions<T>(arr: readonly T[], portionLength: number): T[][];
172
+ declare function arrSplitBatches<T>(arr: readonly T[], portionLength: number): T[][];
173
+
174
+ type AnyObj = Record<string, any>;
175
+ declare function arrReplaceTemplate<T>(where: T, template: AnyObj): T;
176
+
177
+ type JsonLike = null | boolean | number | string | undefined | bigint | Date | JsonLike[] | {
178
+ [key: string]: JsonLike;
179
+ };
180
+ interface UniqueDeepOptions<T = unknown> {
181
+ keyFn?: (item: T) => string;
182
+ }
183
+ declare function arrUniqueDeep<T>(input: T, opts?: UniqueDeepOptions<unknown>): T;
173
184
 
174
185
  /**
175
186
  * Converts any given value into a normalized boolean (`true` / `false`).
@@ -347,6 +358,8 @@ declare function boolNormalize(value: unknown): boolean;
347
358
  */
348
359
  declare function wait(timeout?: number): Promise<void>;
349
360
 
361
+ declare function env(k: any): string | undefined;
362
+
350
363
  /**
351
364
  * Represents a human-readable breakdown of a time duration
352
365
  * into its fundamental components — **days**, **hours**, **minutes**, and **seconds**.
@@ -3159,7 +3172,7 @@ declare function strPhone(value?: unknown, defaultCountry?: string): string | nu
3159
3172
  * @public
3160
3173
  * @since 2.0.0
3161
3174
  */
3162
- declare function strTrim(value: unknown): string;
3175
+ declare function strTrim(value: unknown, border?: string): string;
3163
3176
 
3164
3177
  /**
3165
3178
  * Converts `null` or empty (whitespace-only) strings into `undefined`.
@@ -3255,4 +3268,6 @@ type UrlObj = {
3255
3268
 
3256
3269
  declare function urlObj(value?: string): UrlObj;
3257
3270
 
3258
- export { type JSONLike, type PasswordOptions, type TimeParts, arrFuncArgs, arrSplitPortions, boolNormalize, dateFloorMin, datePartsSec, dateSecParts, dateStr, ipNumStr, ipStrNum, isArr, isArrFilled, isBool, isClass, isDate, isEmail, isExists, isFunc, isIpAddr, isMacAddr, isNum, isNumFloat, isNumN, isNumNZ, isNumP, isNumPZ, isObj, isObjFilled, isPassword, isPhone, isStr, isStrAscDesc, isStrBool, isStrFilled, isVar, jsonDecode, jsonEncode, jsonParse, jsonStrLike, numNormalize, strLowerCase, strNormalCase, strNormalize, strNull, strPhone, strTrim, strUndefined, urlObj, wait };
3271
+ declare function urlDecode(input: string): string;
3272
+
3273
+ export { type JSONLike, type JsonLike, type PasswordOptions, type TimeParts, type UniqueDeepOptions, arrFuncArgs, arrReplaceTemplate, arrSplitBatches, arrUniqueDeep, boolNormalize, dateFloorMin, datePartsSec, dateSecParts, dateStr, env, ipNumStr, ipStrNum, isArr, isArrFilled, isBool, isClass, isDate, isEmail, isExists, isFunc, isIpAddr, isMacAddr, isNum, isNumFloat, isNumN, isNumNZ, isNumP, isNumPZ, isObj, isObjFilled, isPassword, isPhone, isStr, isStrAscDesc, isStrBool, isStrFilled, isVar, jsonDecode, jsonEncode, jsonParse, jsonStrLike, numNormalize, strLowerCase, strNormalCase, strNormalize, strNull, strPhone, strTrim, strUndefined, urlDecode, urlObj, wait };
package/dist/index.d.ts CHANGED
@@ -145,31 +145,42 @@ declare function arrFuncArgs(value: string): unknown[];
145
145
  *
146
146
  * @example
147
147
  * // Split an array into groups of 3
148
- * arrSplitPortions([1, 2, 3, 4, 5, 6, 7], 3);
148
+ * arrSplitBatches([1, 2, 3, 4, 5, 6, 7], 3);
149
149
  * // => [[1, 2, 3], [4, 5, 6], [7]]
150
150
  *
151
151
  * @example
152
152
  * // Portion length larger than array
153
- * arrSplitPortions(['a', 'b'], 5);
153
+ * arrSplitBatches(['a', 'b'], 5);
154
154
  * // => [['a', 'b']]
155
155
  *
156
156
  * @example
157
157
  * // Non-integer or invalid sizes
158
- * arrSplitPortions([1, 2, 3], 0); // => []
159
- * arrSplitPortions([1, 2, 3], -2); // => []
160
- * arrSplitPortions([1, 2, 3], NaN); // => []
158
+ * arrSplitBatches([1, 2, 3], 0); // => []
159
+ * arrSplitBatches([1, 2, 3], -2); // => []
160
+ * arrSplitBatches([1, 2, 3], NaN); // => []
161
161
  *
162
162
  * @example
163
163
  * // Works with readonly arrays
164
164
  * const input = [10, 20, 30, 40] as const;
165
- * const result = arrSplitPortions(input, 2);
165
+ * const result = arrSplitBatches(input, 2);
166
166
  * // result: [[10, 20], [30, 40]]
167
167
  *
168
168
  * @category Array
169
169
  * @public
170
170
  * @since 2.0.0
171
171
  */
172
- declare function arrSplitPortions<T>(arr: readonly T[], portionLength: number): T[][];
172
+ declare function arrSplitBatches<T>(arr: readonly T[], portionLength: number): T[][];
173
+
174
+ type AnyObj = Record<string, any>;
175
+ declare function arrReplaceTemplate<T>(where: T, template: AnyObj): T;
176
+
177
+ type JsonLike = null | boolean | number | string | undefined | bigint | Date | JsonLike[] | {
178
+ [key: string]: JsonLike;
179
+ };
180
+ interface UniqueDeepOptions<T = unknown> {
181
+ keyFn?: (item: T) => string;
182
+ }
183
+ declare function arrUniqueDeep<T>(input: T, opts?: UniqueDeepOptions<unknown>): T;
173
184
 
174
185
  /**
175
186
  * Converts any given value into a normalized boolean (`true` / `false`).
@@ -347,6 +358,8 @@ declare function boolNormalize(value: unknown): boolean;
347
358
  */
348
359
  declare function wait(timeout?: number): Promise<void>;
349
360
 
361
+ declare function env(k: any): string | undefined;
362
+
350
363
  /**
351
364
  * Represents a human-readable breakdown of a time duration
352
365
  * into its fundamental components — **days**, **hours**, **minutes**, and **seconds**.
@@ -3159,7 +3172,7 @@ declare function strPhone(value?: unknown, defaultCountry?: string): string | nu
3159
3172
  * @public
3160
3173
  * @since 2.0.0
3161
3174
  */
3162
- declare function strTrim(value: unknown): string;
3175
+ declare function strTrim(value: unknown, border?: string): string;
3163
3176
 
3164
3177
  /**
3165
3178
  * Converts `null` or empty (whitespace-only) strings into `undefined`.
@@ -3255,4 +3268,6 @@ type UrlObj = {
3255
3268
 
3256
3269
  declare function urlObj(value?: string): UrlObj;
3257
3270
 
3258
- export { type JSONLike, type PasswordOptions, type TimeParts, arrFuncArgs, arrSplitPortions, boolNormalize, dateFloorMin, datePartsSec, dateSecParts, dateStr, ipNumStr, ipStrNum, isArr, isArrFilled, isBool, isClass, isDate, isEmail, isExists, isFunc, isIpAddr, isMacAddr, isNum, isNumFloat, isNumN, isNumNZ, isNumP, isNumPZ, isObj, isObjFilled, isPassword, isPhone, isStr, isStrAscDesc, isStrBool, isStrFilled, isVar, jsonDecode, jsonEncode, jsonParse, jsonStrLike, numNormalize, strLowerCase, strNormalCase, strNormalize, strNull, strPhone, strTrim, strUndefined, urlObj, wait };
3271
+ declare function urlDecode(input: string): string;
3272
+
3273
+ export { type JSONLike, type JsonLike, type PasswordOptions, type TimeParts, type UniqueDeepOptions, arrFuncArgs, arrReplaceTemplate, arrSplitBatches, arrUniqueDeep, boolNormalize, dateFloorMin, datePartsSec, dateSecParts, dateStr, env, ipNumStr, ipStrNum, isArr, isArrFilled, isBool, isClass, isDate, isEmail, isExists, isFunc, isIpAddr, isMacAddr, isNum, isNumFloat, isNumN, isNumNZ, isNumP, isNumPZ, isObj, isObjFilled, isPassword, isPhone, isStr, isStrAscDesc, isStrBool, isStrFilled, isVar, jsonDecode, jsonEncode, jsonParse, jsonStrLike, numNormalize, strLowerCase, strNormalCase, strNormalize, strNull, strPhone, strTrim, strUndefined, urlDecode, urlObj, wait };
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function Q(t){if(!s(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,f=0,l=0,d=0,k=[],g=()=>{let m=n.trim();m!==""&&k.push(m),n="";};for(let m=0;m<r.length;m++){let u=r[m];if(e){if(n+=u,i){i=false;continue}if(u==="\\"){i=true;continue}u===o&&(e=false,o=null);continue}if(u==='"'||u==="'"){e=true,o=u,n+=u;continue}if(u==="("){f++,n+=u;continue}if(u===")"){f=Math.max(0,f-1),n+=u;continue}if(u==="["){l++,n+=u;continue}if(u==="]"){l=Math.max(0,l-1),n+=u;continue}if(u==="{"){d++,n+=u;continue}if(u==="}"){d=Math.max(0,d-1),n+=u;continue}if(u===","&&f===0&&l===0&&d===0){g();continue}n+=u;}return n.length&&g(),k.map(m=>{if(m.startsWith("$")&&m.includes("(")&&m.endsWith(")"))return m;if(m==="null")return null;if(m==="undefined")return;if(F(m))return P(m);let u=O(m);if(Number.isFinite(u))return u;if(m==="Infinity")return 1/0;if(m==="-Infinity")return -1/0;let p=String(m||"");if(p.length>=2&&(p.startsWith("'")&&p.endsWith("'")||p.startsWith('"')&&p.endsWith('"')))return p.slice(1,-1).replace(/\\\\/g,"\\").replace(/\\'/g,"'").replace(/\\"/g,'"');if(p.startsWith("{")&&p.endsWith("}")||p.startsWith("[")&&p.endsWith("]"))try{return D(p)}catch{}return p})}function q(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 P(t){switch(true){case S(t):return t;case y(t):return true;case j(t):return false;case(c(t)&&["true","1","yes","on"].includes(String(t??"").trim().toLowerCase())):return true;case(c(t)&&["false","0","no","off"].includes(String(t??"").trim().toLowerCase())):return false}return false}async function G(t=0){await new Promise(r=>setTimeout(()=>r(true),t));}function v(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 rt(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()),f=r(t.getMinutes()),l=r(t.getSeconds());return `${n}-${e}-${o} ${i}:${f}:${l}`}function et(t){let{days:r=0,hours:n=0,minutes:e=0,seconds:o=0}=t;return r*86400+n*3600+e*60+o}function it(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 ut(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 at(t){if(!y(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 h(t){return Array.isArray(t)}function A(t){return h(t)&&t.length>0}function S(t){return typeof t=="boolean"}function wt(t){if(t instanceof Date)return !Number.isNaN(t.getTime());if(s(t)||a(t)){let r=new Date(t);return !Number.isNaN(r.getTime())}return false}var U=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z]{2,})+$/;function yt(t){return c(t)?U.test(t):false}function Nt(t){return t!=null}function I(t){return typeof t=="function"}var Z=/^(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 Dt(t){if(!s(t))return false;let r=t.trim();return Z.test(r)}function At(t){return s(t)&&/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/.test(t)}function a(t){return typeof t=="number"&&Number.isFinite(t)}function Mt(t){return a(t)&&!Number.isInteger(t)}function Wt(t){return a(t)&&t<0}function j(t){return a(t)&&t<=0}function y(t){return a(t)&&t>0}function $(t){return a(t)&&t>=0}function w(t){return typeof t=="object"&&t!==null&&Object.prototype.toString.call(t)==="[object Object]"&&!Array.isArray(t)}function L(t){return w(t)&&Object.keys(t).length>0}function Kt(t,{minLength:r=8,maxLength:n=256,requireUppercase:e=true,requireLowercase:o=true,requireDigit:i=true,requireSpecial:f=true}={}){return !(!s(t)||t.length<r||t.length>n||e&&!/[A-ZА-Я]/.test(t)||o&&!/[a-zа-я]/.test(t)||i&&!/\d/.test(t)||f&&!/[~!?@#$%^&*_\-+()\[\]{}><\\\/|"'.,:;=]/.test(t))}function Xt(t){if(!c(t)&&!a(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 s(t){return typeof t=="string"}function F(t){if(!c(t))return false;let r=t.trim().toLowerCase();return r==="true"||r==="false"}function c(t){return s(t)&&t.trim().length>0}function sr(t){if(!c(t))return false;let r=t.trim().toLowerCase();return r==="asc"||r==="desc"}function mr(t){return s(t)&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(t)}function pr(t){return I(t)&&/^class\s/.test(Function.prototype.toString.call(t))}var B=/^(['"`])([\s\S]*)\1$/;function b(t,r){let n=t.trim(),e=M(n);if(e.ok)return e.value;let o=B.exec(n);return o?o[2]:r?n:null}function M(t){try{return {ok:!0,value:JSON.parse(t)}}catch{}return {ok:false}}function D(t,r=false){if(t===null||a(t)||S(t))return t;if(A(t)){let n=t,e=[];for(let o of n)c(o)?e.push(b(String(o),r)):e.push(o);return e}if(L(t)){let n=t,e={};for(let o of Object.keys(n)){let i=n[o];c(i)?e[o]=b(String(i),r):e[o]=i;}return e}return h(t)||w(t)?t:c(t)?b(String(t),r):null}function br(t){try{return w(t)||h(t)?JSON.stringify(t):""}catch{}return ""}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),f=n.slice(o);return r+i+"."+f}function E(t){return Number(z(t))}function N(t,r){let n=/^([0-9]+)(?:\.([0-9]*))?e([+\-]?[0-9]+)$/i.exec((()=>{let[i,f]=r.split(/e/i),[l,d=""]=i.split("."),k=l.replace(/^0+/,"")+d,g=parseInt(f,10)-d.length;return `${k||"0"}e${g}`})());if(!n)throw new Error("Failed to parse exponential notation.");let e=n[1],o=parseInt(n[3],10);if($(o))return e=e+"0".repeat(o),{sign:t,integerPart:e||"0",fractionalPart:""};{let i=-o;if(i>=e.length){let f="0".repeat(i-e.length);return {sign:t,integerPart:"0",fractionalPart:f+e}}else {let f=e.length-i;return {sign:t,integerPart:e.slice(0,f),fractionalPart:e.slice(f)}}}}function W(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 N(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 N(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 T(t){let{sign:r,integerPart:n,fractionalPart:e}=W(t),o=n.replace(/^0+/,"")||"0",i=e.replace(/0+$/,""),f=o+i||"0";return {sign:r,digitsInteger:BigInt(f),scale:i.length}}function C(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),f=t.digitsInteger/i,l=t.digitsInteger%i;if(n==="trunc"||l===0n)return {sign:t.sign,digitsInteger:f,scale:e};let d=i/2n,g=l>=d?f+1n:f;return {sign:t.sign,digitsInteger:g,scale:e}}function O(t,r=1,n=false){try{return E(r>1?C(T(t),r,"half-up"):T(t))}catch(e){if(n)throw e}return 0}function J(t){if(!s(t))return "";let r=x(t);return c(r)?r.toLowerCase():""}function Zr(t){if(!s(t))return "";let r=J(t);return c(r)?r[0].toUpperCase()+r.slice(1):""}function Qr(t){return s(t)&&x(t)===""||t===void 0?null:t}function Hr(t,r="+7"){if(!s(t))return null;let n=x(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 x(t){return String(s(t)?t.trim().normalize("NFKC").replace(/[\u200B-\u200D\uFEFF]/g,""):"")}function tn(t){return s(t)&&x(t)===""||t===null?void 0:t}var en=t=>{if(!s(t))return t;let r=String(x(t)||"");return r===""?null:r.toLowerCase()};function sn(t=""){return {}}export{Q as arrFuncArgs,q as arrSplitPortions,P as boolNormalize,v as dateFloorMin,et as datePartsSec,it as dateSecParts,rt as dateStr,at as ipNumStr,ut as ipStrNum,h as isArr,A as isArrFilled,S as isBool,pr as isClass,wt as isDate,yt as isEmail,Nt as isExists,I as isFunc,Dt as isIpAddr,At as isMacAddr,a as isNum,Mt as isNumFloat,Wt as isNumN,j as isNumNZ,y as isNumP,$ as isNumPZ,w as isObj,L as isObjFilled,Kt as isPassword,Xt as isPhone,s as isStr,sr as isStrAscDesc,F as isStrBool,c as isStrFilled,mr as isVar,D as jsonDecode,br as jsonEncode,M as jsonParse,b as jsonStrLike,O as numNormalize,J as strLowerCase,Zr as strNormalCase,en as strNormalize,Qr as strNull,Hr as strPhone,x as strTrim,tn as strUndefined,sn as urlObj,G as wait};//# sourceMappingURL=index.mjs.map
1
+ function X(t){if(!u(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,c=0,p=0,x=[],y=()=>{let m=n.trim();m!==""&&x.push(m),n="";};for(let m=0;m<r.length;m++){let f=r[m];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==="["){c++,n+=f;continue}if(f==="]"){c=Math.max(0,c-1),n+=f;continue}if(f==="{"){p++,n+=f;continue}if(f==="}"){p=Math.max(0,p-1),n+=f;continue}if(f===","&&s===0&&c===0&&p===0){y();continue}n+=f;}return n.length&&y(),x.map(m=>{if(m.startsWith("$")&&m.includes("(")&&m.endsWith(")"))return m;if(m==="null")return null;if(m==="undefined")return;if(P(m))return D(m);let f=O(m);if(Number.isFinite(f))return f;if(m==="Infinity")return 1/0;if(m==="-Infinity")return -1/0;let d=String(m||"");if(d.length>=2&&(d.startsWith("'")&&d.endsWith("'")||d.startsWith('"')&&d.endsWith('"')))return d.slice(1,-1).replace(/\\\\/g,"\\").replace(/\\'/g,"'").replace(/\\"/g,'"');if(d.startsWith("{")&&d.endsWith("}")||d.startsWith("[")&&d.endsWith("]"))try{return A(d)}catch{}return d})}function tt(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 j(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function U(t){return t==null||typeof t!="object"||t instanceof Date}function B(t,r){return Array.isArray(t)?Array.isArray(r)?r:[r]:r}function N(t,r){if(t==null)return t;if(U(r))return B(t,r);if(Array.isArray(t))return t.map(o=>N(o,r));if(!j(t)||!j(r))return t;let n={...t},e=false;for(let o of Object.keys(r)){if(!(o in t))continue;let i=N(t[o],r[o]);i!==t[o]&&(n[o]=i,e=true);}return e?n:t}function nt(t,r){return N(t,r)}function Z(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)&&!(t instanceof Date)}function V(t){let r=new WeakSet,n=e=>{if(e===null)return "null";let o=typeof e;if(o==="string")return JSON.stringify(e);if(o==="number")return Number.isNaN(e)?'"__NaN__"':String(e);if(o==="boolean")return e?"true":"false";if(o==="undefined")return '"__undefined__"';if(o==="bigint")return `"__bigint__:${String(e)}"`;if(o==="function")return '"__function__"';if(e instanceof Date)return `"__date__:${e.toISOString()}"`;if(Array.isArray(e))return "["+e.map(n).join(",")+"]";if(o==="object"&&e){let i=e;return r.has(i)?'"__circular__"':(r.add(i),"{"+Object.keys(i).sort().map(p=>JSON.stringify(p)+":"+n(i[p])).join(",")+"}")}return JSON.stringify(String(e))};return n(t)}function Q(t){if(t===null)return "null";let r=typeof t;return r==="string"?"s:"+t:r==="number"?"n:"+(Number.isNaN(t)?"__NaN__":t):r==="boolean"?"b:"+t:r==="undefined"?"u:":r==="bigint"?"bi:"+String(t):t instanceof Date?"d:"+t.toISOString():"o:"+V(t)}function ot(t,r){let n=r?.keyFn??Q,e=o=>{if(Array.isArray(o)){let i=o.map(e),s=new Set,c=[];for(let p of i){let x=n(p);s.has(x)||(s.add(x),c.push(p));}return c}if(Z(o)){let i={};for(let s of Object.keys(o))i[s]=e(o[s]);return i}return o};return e(t)}function D(t){switch(true){case b(t):return t;case w(t):return true;case _(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 ft(t=0){await new Promise(r=>setTimeout(()=>r(true),t));}function ct(t){return process.env[t]}function pt(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 dt(t=new Date){let r=p=>String(p).padStart(2,"0"),n=t.getFullYear(),e=r(t.getMonth()+1),o=r(t.getDate()),i=r(t.getHours()),s=r(t.getMinutes()),c=r(t.getSeconds());return `${n}-${e}-${o} ${i}:${s}:${c}`}function xt(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 bt(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 Tt(t){if(!w(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 h(t){return Array.isArray(t)}function I(t){return h(t)&&t.length>0}function b(t){return typeof t=="boolean"}function _t(t){if(t instanceof Date)return !Number.isNaN(t.getTime());if(u(t)||l(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 Lt(t){return a(t)?q.test(t):false}function Et(t){return t!=null}function $(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 Mt(t){if(!u(t))return false;let r=t.trim();return K.test(r)}function Bt(t){return u(t)&&/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/.test(t)}function l(t){return typeof t=="number"&&Number.isFinite(t)}function qt(t){return l(t)&&!Number.isInteger(t)}function Yt(t){return l(t)&&t<0}function _(t){return l(t)&&t<=0}function w(t){return l(t)&&t>0}function L(t){return l(t)&&t>=0}function k(t){return typeof t=="object"&&t!==null&&Object.prototype.toString.call(t)==="[object Object]"&&!Array.isArray(t)}function W(t){return k(t)&&Object.keys(t).length>0}function fr(t,{minLength:r=8,maxLength:n=256,requireUppercase:e=true,requireLowercase:o=true,requireDigit:i=true,requireSpecial:s=true}={}){return !(!u(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 mr(t){if(!a(t)&&!l(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 u(t){return typeof t=="string"}function P(t){if(!a(t))return false;let r=t.trim().toLowerCase();return r==="true"||r==="false"}function a(t){return u(t)&&t.trim().length>0}function kr(t){if(!a(t))return false;let r=t.trim().toLowerCase();return r==="asc"||r==="desc"}function Sr(t){return u(t)&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(t)}function Fr(t){return $(t)&&/^class\s/.test(Function.prototype.toString.call(t))}var H=/^(['"`])([\s\S]*)\1$/;function S(t,r){let n=t.trim(),e=E(n);if(e.ok)return e.value;let o=H.exec(n);return o?o[2]:r?n:null}function E(t){try{return {ok:!0,value:JSON.parse(t)}}catch{}return {ok:false}}function A(t,r=false){if(t===null||l(t)||b(t))return t;if(I(t)){let n=t,e=[];for(let o of n)a(o)?e.push(S(String(o),r)):e.push(o);return e}if(W(t)){let n=t,e={};for(let o of Object.keys(n)){let i=n[o];a(i)?e[o]=S(String(i),r):e[o]=i;}return e}return h(t)||k(t)?t:a(t)?S(String(t),r):null}function Wr(t){try{return k(t)||h(t)?JSON.stringify(t):""}catch{}return ""}function J(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 R(t){return Number(J(t))}function T(t,r){let n=/^([0-9]+)(?:\.([0-9]*))?e([+\-]?[0-9]+)$/i.exec((()=>{let[i,s]=r.split(/e/i),[c,p=""]=i.split("."),x=c.replace(/^0+/,"")+p,y=parseInt(s,10)-p.length;return `${x||"0"}e${y}`})());if(!n)throw new Error("Failed to parse exponential notation.");let e=n[1],o=parseInt(n[3],10);if(L(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 C(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 T(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 T(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 F(t){let{sign:r,integerPart:n,fractionalPart:e}=C(t),o=n.replace(/^0+/,"")||"0",i=e.replace(/0+$/,""),s=o+i||"0";return {sign:r,digitsInteger:BigInt(s),scale:i.length}}function M(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,c=t.digitsInteger%i;if(n==="trunc"||c===0n)return {sign:t.sign,digitsInteger:s,scale:e};let p=i/2n,y=c>=p?s+1n:s;return {sign:t.sign,digitsInteger:y,scale:e}}function O(t,r=1,n=false){try{return R(r>1?M(F(t),r,"half-up"):F(t))}catch(e){if(n)throw e}return 0}function z(t){if(!u(t))return "";let r=g(t);return a(r)?r.toLowerCase():""}function tn(t){if(!u(t))return "";let r=z(t);return a(r)?r[0].toUpperCase()+r.slice(1):""}function on(t){return u(t)&&g(t)===""||t===void 0?null:t}function fn(t,r="+7"){if(!u(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,r=""){let n=String(u(t)?t.trim().normalize("NFKC").replace(/[\u200B-\u200D\uFEFF]/g,""):"");return r?n.split(r).filter(e=>!!e).join(r):n}function dn(t){return u(t)&&g(t)===""||t===null?void 0:t}var yn=t=>{if(!u(t))return t;let r=String(g(t)||"");return r===""?null:String(r.toLowerCase()||"").replace(/\s+/g," ").replace(/\t+/g,"").replace(/\n+/g,"")};function kn(t=""){return {}}function Sn(t){if(!a(t))return String(t);let r="____RAW_PERCENT____",n=t.replace(/%(?![0-9A-Fa-f]{2})/g,r),e=new Set(["22","7B","7D","3A","2C","5B","5D","5C"]);return n.replace(/%([0-9A-Fa-f]{2})/g,(i,s)=>{let c=s.toUpperCase();return e.has(c)?decodeURIComponent(`%${c}`):`%${c}`}).split(r).join("%")}export{X as arrFuncArgs,nt as arrReplaceTemplate,tt as arrSplitBatches,ot as arrUniqueDeep,D as boolNormalize,pt as dateFloorMin,xt as datePartsSec,ht as dateSecParts,dt as dateStr,ct as env,Tt as ipNumStr,bt as ipStrNum,h as isArr,I as isArrFilled,b as isBool,Fr as isClass,_t as isDate,Lt as isEmail,Et as isExists,$ as isFunc,Mt as isIpAddr,Bt as isMacAddr,l as isNum,qt as isNumFloat,Yt as isNumN,_ as isNumNZ,w as isNumP,L as isNumPZ,k as isObj,W as isObjFilled,fr as isPassword,mr as isPhone,u as isStr,kr as isStrAscDesc,P as isStrBool,a as isStrFilled,Sr as isVar,A as jsonDecode,Wr as jsonEncode,E as jsonParse,S as jsonStrLike,O as numNormalize,z as strLowerCase,tn as strNormalCase,yn as strNormalize,on as strNull,fn as strPhone,g as strTrim,dn as strUndefined,Sn as urlDecode,kn as urlObj,ft as wait};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map