@rzl-zone/utils-js 3.10.0 → 3.11.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.
Files changed (122) hide show
  1. package/README.md +131 -129
  2. package/dist/assertions/index.cjs +11 -11
  3. package/dist/assertions/index.d.ts +487 -215
  4. package/dist/assertions/index.js +5 -5
  5. package/dist/{chunk-SN5HAK3Y.js → chunk-22V4WP3H.js} +4 -4
  6. package/dist/{chunk-EJV5AF4L.js → chunk-2XSZ2ANI.js} +2 -2
  7. package/dist/{chunk-OSSFLQDD.js → chunk-3T6VSWYX.js} +2 -2
  8. package/dist/{chunk-3LE6NX57.js → chunk-5WIEDF2J.js} +4 -4
  9. package/dist/{chunk-WLEZ2KSG.cjs → chunk-6EDFZJZ5.cjs} +126 -126
  10. package/dist/{chunk-GHU356XQ.js → chunk-6LXWT2I5.js} +3 -3
  11. package/dist/{chunk-GKDSBOYE.js → chunk-6YGBRENU.js} +3 -3
  12. package/dist/{chunk-NAOVH4OH.cjs → chunk-7FGNVDEV.cjs} +7 -7
  13. package/dist/{chunk-X6ULJZ3X.js → chunk-AXDYWO67.js} +2 -2
  14. package/dist/{chunk-UV5BKAYW.cjs → chunk-B6PMNZ4M.cjs} +7 -7
  15. package/dist/chunk-BAV5T2E3.cjs +1 -1
  16. package/dist/{chunk-YHFRCVTN.js → chunk-BLF7SD66.js} +3 -3
  17. package/dist/{chunk-QZI5PVCI.cjs → chunk-BMZZXZJ2.cjs} +4 -4
  18. package/dist/{chunk-DXPM4NOU.js → chunk-BOYP3ARU.js} +4 -4
  19. package/dist/{chunk-UXT4XSUK.js → chunk-BPYW5YL7.js} +2 -2
  20. package/dist/{chunk-QGTFQ7RO.cjs → chunk-C2PV3VWC.cjs} +6 -6
  21. package/dist/{chunk-MZ3T6L7Z.js → chunk-CCJ2MSN7.js} +2 -2
  22. package/dist/{chunk-H44QVAZL.cjs → chunk-DAPAK2W3.cjs} +31 -31
  23. package/dist/{chunk-OYFUBKEG.cjs → chunk-DLS3G6WQ.cjs} +4 -4
  24. package/dist/{chunk-MS2KSKD7.js → chunk-DNMCR5JH.js} +9 -9
  25. package/dist/chunk-DVMHRLKP.cjs +1 -1
  26. package/dist/{chunk-IX6PF5ZP.cjs → chunk-EBYFYZW4.cjs} +4 -4
  27. package/dist/{chunk-5Y6JL47L.js → chunk-ENMRZ4BE.js} +3 -3
  28. package/dist/{chunk-7EIFPHV3.js → chunk-FJ4BQFVO.js} +8 -8
  29. package/dist/{chunk-TJ5OY6MC.cjs → chunk-GIKL4PUF.cjs} +10 -10
  30. package/dist/{chunk-M5QB2GM5.js → chunk-GOFINGT6.js} +2 -2
  31. package/dist/{chunk-J6VLFVIL.js → chunk-GXKQ3LHF.js} +3 -3
  32. package/dist/{chunk-5KDVIEVO.js → chunk-HNBRGN4R.js} +2 -2
  33. package/dist/{chunk-OCTHWEZK.cjs → chunk-HYN6FC5A.cjs} +34 -34
  34. package/dist/{chunk-MBFVTGYS.js → chunk-IZGVBYFN.js} +4 -4
  35. package/dist/{chunk-QXTJVDWE.js → chunk-JIE447J5.js} +3 -3
  36. package/dist/{chunk-UFYMRRJH.cjs → chunk-JXEIJM5M.cjs} +61 -61
  37. package/dist/{chunk-WB3FT62A.js → chunk-K47GZDBH.js} +3 -3
  38. package/dist/{chunk-KUVRZ2JW.cjs → chunk-K5536YHG.cjs} +50 -50
  39. package/dist/chunk-KHO2SBNA.cjs +1 -1
  40. package/dist/{chunk-NJ24M6ZH.cjs → chunk-KXJ7X325.cjs} +37 -37
  41. package/dist/chunk-L5RDAVVH.js +1 -1
  42. package/dist/{chunk-SRWL4YCP.js → chunk-LJHPTLWB.js} +7 -7
  43. package/dist/{chunk-6AMDHVS2.cjs → chunk-M7ELWZXM.cjs} +9 -9
  44. package/dist/chunk-MSUW5VHZ.js +1590 -0
  45. package/dist/{chunk-2XGQQZ6A.cjs → chunk-MUHRPRR7.cjs} +3 -3
  46. package/dist/{chunk-XYWC4EQ3.cjs → chunk-MV3TSQSH.cjs} +71 -71
  47. package/dist/{chunk-VCYXNIZ2.cjs → chunk-NLZLXWAU.cjs} +9 -9
  48. package/dist/{chunk-76ATVDCR.cjs → chunk-NVRZPF5M.cjs} +3 -3
  49. package/dist/chunk-ONZFBJVW.js +1 -1
  50. package/dist/{chunk-62FS7WMB.cjs → chunk-PGNL7JXO.cjs} +31 -31
  51. package/dist/{chunk-JI57K7D4.cjs → chunk-Q4GEQS7X.cjs} +161 -161
  52. package/dist/chunk-QNKGP5DY.js +1 -1
  53. package/dist/{chunk-ZTHJQJ5F.cjs → chunk-QYI2VJLS.cjs} +9 -9
  54. package/dist/{chunk-C7GC2PFX.js → chunk-RBWZII5I.js} +3 -3
  55. package/dist/{chunk-MMRHKYT6.cjs → chunk-RMP7VMPB.cjs} +12 -12
  56. package/dist/{chunk-TXOVQZPU.js → chunk-RZOGBYIS.js} +2 -2
  57. package/dist/{chunk-ALRISPTL.cjs → chunk-SU3UELUB.cjs} +3 -3
  58. package/dist/chunk-SYHPSOUU.cjs +1626 -0
  59. package/dist/{chunk-R2DR7SPJ.js → chunk-SZUNAEMR.js} +6 -6
  60. package/dist/{chunk-YVRUY4EW.cjs → chunk-TER22LO4.cjs} +8 -8
  61. package/dist/{chunk-WRGN6UBK.js → chunk-TJHGRQ4P.js} +2 -2
  62. package/dist/{chunk-I33PB44Q.cjs → chunk-U23I7JPB.cjs} +15 -15
  63. package/dist/{chunk-VBSLIIDB.js → chunk-U7HHN47R.js} +10 -10
  64. package/dist/chunk-UDA26MCU.cjs +1 -1
  65. package/dist/{chunk-44X74C26.js → chunk-UIAWUZ4H.js} +4 -4
  66. package/dist/{chunk-5O66AUEC.js → chunk-ULQPCIA2.js} +2 -2
  67. package/dist/chunk-VJDDGRIK.cjs +1 -1
  68. package/dist/{chunk-6WVOUVWD.js → chunk-WETQI6HM.js} +9 -9
  69. package/dist/{chunk-FWWPEL7J.cjs → chunk-WLOQQFDS.cjs} +3 -3
  70. package/dist/chunk-WVSPXFTY.js +1 -1
  71. package/dist/{chunk-WKM6UVMG.cjs → chunk-WXFTVXBF.cjs} +4 -4
  72. package/dist/{chunk-YQHJB7KR.cjs → chunk-XPVTIGU2.cjs} +26 -26
  73. package/dist/{chunk-PWKOFPAH.cjs → chunk-XX6RUGTM.cjs} +3 -3
  74. package/dist/chunk-YWHHVDT4.js +1 -1
  75. package/dist/{chunk-7NXFGJJE.cjs → chunk-ZPDMWDGZ.cjs} +14 -14
  76. package/dist/{chunk-JYOCB6OV.js → chunk-ZVWZEGQP.js} +2 -2
  77. package/dist/conversions/index.cjs +34 -34
  78. package/dist/conversions/index.d.ts +489 -333
  79. package/dist/conversions/index.js +15 -15
  80. package/dist/events/index.cjs +8 -8
  81. package/dist/events/index.d.ts +35 -29
  82. package/dist/events/index.js +4 -4
  83. package/dist/formatters/index.cjs +19 -19
  84. package/dist/formatters/index.d.ts +917 -873
  85. package/dist/formatters/index.js +9 -9
  86. package/dist/generators/index.cjs +9 -9
  87. package/dist/generators/index.d.ts +104 -86
  88. package/dist/generators/index.js +4 -4
  89. package/dist/index.d.ts +1 -1
  90. package/dist/isPlainObject-0p3VveWr.d.ts +534 -0
  91. package/dist/next/index.cjs +37 -37
  92. package/dist/next/index.d.ts +36 -21
  93. package/dist/next/index.js +9 -9
  94. package/dist/next/server/index.cjs +4 -4
  95. package/dist/next/server/index.d.ts +6 -3
  96. package/dist/next/server/index.js +2 -2
  97. package/dist/operations/index.cjs +11 -11
  98. package/dist/operations/index.d.ts +14 -5
  99. package/dist/operations/index.js +8 -8
  100. package/dist/parsers/index.cjs +6 -6
  101. package/dist/parsers/index.d.ts +68 -65
  102. package/dist/parsers/index.js +5 -5
  103. package/dist/predicates/index.cjs +77 -77
  104. package/dist/predicates/index.d.ts +442 -258
  105. package/dist/predicates/index.js +14 -14
  106. package/dist/promises/index.cjs +6 -6
  107. package/dist/promises/index.d.ts +28 -16
  108. package/dist/promises/index.js +4 -4
  109. package/dist/rzl-utils.global.js +2 -2
  110. package/dist/strings/index.cjs +23 -23
  111. package/dist/strings/index.d.ts +82 -54
  112. package/dist/strings/index.js +7 -7
  113. package/dist/tailwind/index.cjs +13 -13
  114. package/dist/tailwind/index.d.ts +186 -169
  115. package/dist/tailwind/index.js +5 -5
  116. package/dist/urls/index.cjs +23 -23
  117. package/dist/urls/index.d.ts +252 -229
  118. package/dist/urls/index.js +16 -16
  119. package/package.json +6 -4
  120. package/dist/chunk-7C7TQC5J.cjs +0 -620
  121. package/dist/chunk-J4TT33ZX.js +0 -584
  122. package/dist/isPlainObject-BTPjv6zB.d.ts +0 -178
@@ -2,18 +2,20 @@
2
2
  * ====================================================
3
3
  * Rzl Utils-JS.
4
4
  * ----------------------------------------------------
5
- * Version: 3.10.0.
5
+ * Version: 3.11.1.
6
6
  * Author: Rizalvin Dwiky.
7
7
  * Repository: https://github.com/rzl-zone/utils-js.
8
8
  * ====================================================
9
9
  */
10
- import{Nullish,KeepNull,KeepUndef,AnyFunction,NormalizeEmptyArraysRecursive,RemoveEmptyArrayElements,FixNeverArrayRecursive,IfNotExtends,IfExtends,IsAny,NumberRangeUnion,Prettify,OrArr,Extends,AndArr,TypedArray,WebApiObjects,IntlObjects}from'@rzl-zone/ts-types-plus';type NormalizeInputToNumberArrayUnRecursive<T>=T extends string|bigint|boolean|number|Nullish?T:HasNonNumberLikeNonNullish<T>;
10
+ import { Nullish, KeepNull, KeepUndef, AnyFunction, NormalizeEmptyArraysRecursive, RemoveEmptyArrayElements, FixNeverArrayRecursive, IfNotExtends, IfExtends, IsAny, NumberRangeUnion, Prettify, OrArr, Extends, AndArr, TypedArray, WebApiObjects, IntlObjects } from '@rzl-zone/ts-types-plus';
11
+
12
+ type NormalizeInputToNumberArrayUnRecursive<T> = T extends string | bigint | boolean | number | Nullish ? T : HasNonNumberLikeNonNullish<T>;
11
13
  /** Detects whether `T` contains any number-like type (`string | number | bigint`).
12
14
  *
13
15
  * @template T Input type.
14
16
  * @returns `true` if `T` contains number-like, otherwise `false`.
15
17
  */
16
- type HasNumberLike<T>=[Extract<T,string|bigint|number>] extends [never]?false:true;
18
+ type HasNumberLike<T> = [Extract<T, string | bigint | number>] extends [never] ? false : true;
17
19
  /** Detects whether `T` contains a string type.
18
20
  *
19
21
  * - Useful for identifying values that may fail parsing to number (`undefined` when `R=false`).
@@ -21,13 +23,15 @@ type HasNumberLike<T>=[Extract<T,string|bigint|number>] extends [never]?false:tr
21
23
  * @template T Input type.
22
24
  * @returns `true` if `T` contains `string`, otherwise `false`.
23
25
  */
24
- type HasString<T>=[Extract<T,string>] extends [never]?false:true;
26
+ type HasString<T> = [Extract<T, string>] extends [never] ? false : true;
25
27
  /** Detects whether `T` contains non-number-like, non-nullish values (`objects`, `arrays`, `symbols`, `functions`, `etc`.).
26
28
  *
27
29
  * @template T Input type.
28
30
  * @returns `true` if such types exist, otherwise `false`.
29
31
  */
30
- type HasNonNumberLikeNonNullish<T>=[ Exclude<T,string|bigint|number|Nullish>] extends [never]?false:true;
32
+ type HasNonNumberLikeNonNullish<T> = [
33
+ Exclude<T, string | bigint | number | Nullish>
34
+ ] extends [never] ? false : true;
31
35
  /** -------------------------------------------------------
32
36
  * * ***Computes the return type of {@link toNumberArrayUnRecursive|`toNumberArrayUnRecursive`}
33
37
  * based on input type `T` and option `R`.***
@@ -48,19 +52,25 @@ type HasNonNumberLikeNonNullish<T>=[ Exclude<T,string|bigint|number|Nullish>] ex
48
52
  * @template R Flag indicating whether invalid values should be removed (`true`) or kept (`false`).
49
53
  *
50
54
  */
51
- type ToNumberArrayUnRecursiveReturn<T,R extends boolean>=R extends true?[ Exclude<T,null|undefined>] extends [never]?[]:HasNumberLike<T>extends true?number[]:[]:[ Exclude<T,null>] extends [never]?null[]:[Exclude<T,undefined>] extends [never]?undefined[]:Array<(HasNumberLike<T>extends true?number:never)|(HasString<T>extends true?undefined:never)|(HasNonNumberLikeNonNullish<T>extends true?undefined:never)|KeepNull<T>|KeepUndef<T>>;
55
+ type ToNumberArrayUnRecursiveReturn<T, R extends boolean> = R extends true ? [
56
+ Exclude<T, null | undefined>
57
+ ] extends [never] ? [] : HasNumberLike<T> extends true ? number[] : [] : [
58
+ Exclude<T, null>
59
+ ] extends [never] ? null[] : [Exclude<T, undefined>] extends [never] ? undefined[] : Array<(HasNumberLike<T> extends true ? number : never) | (HasString<T> extends true ? undefined : never) | (HasNonNumberLikeNonNullish<T> extends true ? undefined : never) | KeepNull<T> | KeepUndef<T>>;
52
60
  /** -------------------------------------------------------
53
61
  * * ***Options for {@link toNumberArrayUnRecursive|`toNumberArrayUnRecursive`}.***
54
62
  * -------------------------------------------------------
55
63
  *
56
64
  * @template T Flag indicating whether invalid values should be removed.
57
65
  */
58
- type ToNumberArrayUnRecursiveOptions<T extends boolean>={
59
- /** If true, removes invalid number values (`NaN`, non-numeric strings, `null`, `undefined`) from the result, defaultValue: `true`.
60
- *
61
- * @default true
62
- */
63
- removeInvalidValueNumber?:T;};
66
+ type ToNumberArrayUnRecursiveOptions<T extends boolean> = {
67
+ /** If true, removes invalid number values (`NaN`, non-numeric strings, `null`, `undefined`) from the result, defaultValue: `true`.
68
+ *
69
+ * @default true
70
+ */
71
+ removeInvalidValueNumber?: T;
72
+ };
73
+
64
74
  /** -------------------------------------------------------
65
75
  * * ***Utility: `toNumberArrayUnRecursive`.***
66
76
  * -------------------------------------------------------
@@ -93,9 +103,13 @@ removeInvalidValueNumber?:T;};
93
103
  * toNumberArrayUnRecursive(1); // ➔ undefined
94
104
  * ```
95
105
  */
96
- declare function toNumberArrayUnRecursive(array?:null|undefined,options?:ToNumberArrayUnRecursiveOptions<boolean>):undefined;declare function toNumberArrayUnRecursive(array?:Array<never>,options?:ToNumberArrayUnRecursiveOptions<boolean>):[];declare function toNumberArrayUnRecursive<T,R extends boolean=true>(array?:Array<T>|readonly T[]|null,options?:ToNumberArrayUnRecursiveOptions<R>):ToNumberArrayUnRecursiveReturn<NormalizeInputToNumberArrayUnRecursive<T>,R>;declare function toNumberArrayUnRecursive<T=unknown>(array?:T,options?:ToNumberArrayUnRecursiveOptions<boolean>):undefined;
106
+ declare function toNumberArrayUnRecursive(array?: null | undefined, options?: ToNumberArrayUnRecursiveOptions<boolean>): undefined;
107
+ declare function toNumberArrayUnRecursive(array?: Array<never>, options?: ToNumberArrayUnRecursiveOptions<boolean>): [];
108
+ declare function toNumberArrayUnRecursive<T, R extends boolean = true>(array?: Array<T> | readonly T[] | null, options?: ToNumberArrayUnRecursiveOptions<R>): ToNumberArrayUnRecursiveReturn<NormalizeInputToNumberArrayUnRecursive<T>, R>;
109
+ declare function toNumberArrayUnRecursive<T = unknown>(array?: T, options?: ToNumberArrayUnRecursiveOptions<boolean>): undefined;
110
+
97
111
  /** Union of primitive types that can be safely converted to string. */
98
- type AllowedToString=string|number|boolean|bigint;
112
+ type AllowedToString = string | number | boolean | bigint;
99
113
  /** Checks whether `T` contains any type that is allowed for conversion to string.
100
114
  *
101
115
  * - Returns `true` if `T` contains `string`, `number`, `boolean`, or `bigint`.
@@ -103,14 +117,14 @@ type AllowedToString=string|number|boolean|bigint;
103
117
  *
104
118
  * @template T Input type to check.
105
119
  */
106
- type HasAllowed<T>=[Extract<T,AllowedToString>] extends [never]?false:true;
120
+ type HasAllowed<T> = [Extract<T, AllowedToString>] extends [never] ? false : true;
107
121
  /** Checks whether `T` contains any non-nullish value that is disallowed for conversion.
108
122
  *
109
123
  * - Disallowed non-nullish types include `objects`, `arrays`, `symbols`, `functions`, `etc`.
110
124
  * - Returns `true` if such types exist, otherwise `false`.
111
125
  * @template T Input type to check.
112
126
  */
113
- type HasDisallowedNonNullish<T>=[Exclude<T,AllowedToString|Nullish>] extends [never]?false:true;
127
+ type HasDisallowedNonNullish<T> = [Exclude<T, AllowedToString | Nullish>] extends [never] ? false : true;
114
128
  /** -------------------------------------------------------
115
129
  * * ***Computes the return type of {@link toStringArrayUnRecursive|`toStringArrayUnRecursive`}
116
130
  * based on input type `T` and option `R`.***
@@ -128,19 +142,21 @@ type HasDisallowedNonNullish<T>=[Exclude<T,AllowedToString|Nullish>] extends [ne
128
142
  * @template T Input element type.
129
143
  * @template R Flag indicating whether invalid values should be removed (`true`) or kept (`false`).
130
144
  */
131
- type ToStringArrayUnRecursiveReturn<T,R extends boolean>=R extends true?HasAllowed<T>extends true?string[]:[]:Array<(HasAllowed<T>extends true?string:never)|(HasDisallowedNonNullish<T>extends true?undefined:never)|KeepNull<T>|KeepUndef<T>>;
145
+ type ToStringArrayUnRecursiveReturn<T, R extends boolean> = R extends true ? HasAllowed<T> extends true ? string[] : [] : Array<(HasAllowed<T> extends true ? string : never) | (HasDisallowedNonNullish<T> extends true ? undefined : never) | KeepNull<T> | KeepUndef<T>>;
132
146
  /** -------------------------------------------------------
133
147
  * * ***Options for {@link toStringArrayUnRecursive|`toStringArrayUnRecursive`}.***
134
148
  * -------------------------------------------------------
135
149
  *
136
150
  * @template T Flag indicating whether invalid values should be removed.
137
151
  */
138
- type ToStringArrayUnRecursiveOptions<T extends boolean>={
139
- /** If true, removes invalid values (`null` and `undefined`) from the output, defaultValue: `true`.
140
- *
141
- * @default true
142
- */
143
- removeInvalidValue?:T;};
152
+ type ToStringArrayUnRecursiveOptions<T extends boolean> = {
153
+ /** If true, removes invalid values (`null` and `undefined`) from the output, defaultValue: `true`.
154
+ *
155
+ * @default true
156
+ */
157
+ removeInvalidValue?: T;
158
+ };
159
+
144
160
  /** ---------------------------------------------
145
161
  * * ***Utility: `toStringArrayUnRecursive`.***
146
162
  * ---------------------------------------------
@@ -190,18 +206,29 @@ removeInvalidValue?:T;};
190
206
  * // ➔ undefined
191
207
  * ```
192
208
  */
193
- declare function toStringArrayUnRecursive(array?:undefined|null,options?:ToStringArrayUnRecursiveOptions<boolean>):undefined;declare function toStringArrayUnRecursive(array?:Array<never>,options?:ToStringArrayUnRecursiveOptions<boolean>):[];declare function toStringArrayUnRecursive<T,R extends boolean=true>(array?:Array<T>|readonly T[]|null,options?:ToStringArrayUnRecursiveOptions<R>):ToStringArrayUnRecursiveReturn<T,R>;declare function toStringArrayUnRecursive<T=unknown>(array?:T,options?:ToStringArrayUnRecursiveOptions<boolean>):undefined;type ResUnFTN<Force extends false|"stringOrNumber"|"primitives"|"all"=false>=Force extends"all"?Array<unknown[]|Record<string,unknown>|string>:Force extends"stringOrNumber"?Array<string|boolean|bigint|symbol|null|undefined|Record<string,unknown>|AnyFunction|unknown[]|Date|RegExp|Map<unknown,unknown>|Set<unknown>|Promise<unknown>>:Force extends"primitives"?Array<string|symbol|Record<string,unknown>|AnyFunction|unknown[]|Date|RegExp|Map<unknown,unknown>|Set<unknown>|Promise<unknown>>:Force extends false?Array<string|number|bigint|boolean|symbol|RegExp|Record<string,unknown>|AnyFunction|Date|Map<unknown,unknown>|Set<unknown>|Promise<unknown>|unknown[]|null|undefined>:unknown[];type ResFTN<Force extends false|"stringOrNumber"|"primitives"|"all"=false>=Force extends"all"?Array<string|Record<string,unknown>>:Force extends"stringOrNumber"?Array<string|boolean|bigint|symbol|null|undefined|Record<string,unknown>|AnyFunction|Date|RegExp|Promise<unknown>>:Force extends"primitives"?Array<string|symbol|RegExp|Record<string,unknown>|AnyFunction|Date|Promise<unknown>>:Force extends false?Array<string|number|bigint|boolean|symbol|RegExp|Record<string,unknown>|AnyFunction|Date|Promise<unknown>|null|undefined>:unknown[];type DedupeResult<Force extends ForceToStringOptions=false,FTN extends boolean=false>=FTN extends false?ResUnFTN<Force>:ResFTN<Force>;type ForceToStringOptions=false|"stringOrNumber"|"primitives"|"all";type DedupeArrayOptions<F extends ForceToStringOptions,Fl extends boolean>={
194
- /** Enables string conversion for comparison, default is `false`.
195
- *
196
- * @default false
197
- * @type {ForceToStringOptions}
198
- */
199
- forceToString?:F;
200
- /** If true, deeply flattens `Arrays`, `Maps`, and `Sets` before deduplication, default is `false`.
201
- *
202
- * @default false
203
- */
204
- flatten?:Fl;};
209
+ declare function toStringArrayUnRecursive(array?: undefined | null, options?: ToStringArrayUnRecursiveOptions<boolean>): undefined;
210
+ declare function toStringArrayUnRecursive(array?: Array<never>, options?: ToStringArrayUnRecursiveOptions<boolean>): [];
211
+ declare function toStringArrayUnRecursive<T, R extends boolean = true>(array?: Array<T> | readonly T[] | null, options?: ToStringArrayUnRecursiveOptions<R>): ToStringArrayUnRecursiveReturn<T, R>;
212
+ declare function toStringArrayUnRecursive<T = unknown>(array?: T, options?: ToStringArrayUnRecursiveOptions<boolean>): undefined;
213
+
214
+ type ResUnFTN<Force extends false | "stringOrNumber" | "primitives" | "all" = false> = Force extends "all" ? Array<unknown[] | Record<string, unknown> | string> : Force extends "stringOrNumber" ? Array<string | boolean | bigint | symbol | null | undefined | Record<string, unknown> | AnyFunction | unknown[] | Date | RegExp | Map<unknown, unknown> | Set<unknown> | Promise<unknown>> : Force extends "primitives" ? Array<string | symbol | Record<string, unknown> | AnyFunction | unknown[] | Date | RegExp | Map<unknown, unknown> | Set<unknown> | Promise<unknown>> : Force extends false ? Array<string | number | bigint | boolean | symbol | RegExp | Record<string, unknown> | AnyFunction | Date | Map<unknown, unknown> | Set<unknown> | Promise<unknown> | unknown[] | null | undefined> : unknown[];
215
+ type ResFTN<Force extends false | "stringOrNumber" | "primitives" | "all" = false> = Force extends "all" ? Array<string | Record<string, unknown>> : Force extends "stringOrNumber" ? Array<string | boolean | bigint | symbol | null | undefined | Record<string, unknown> | AnyFunction | Date | RegExp | Promise<unknown>> : Force extends "primitives" ? Array<string | symbol | RegExp | Record<string, unknown> | AnyFunction | Date | Promise<unknown>> : Force extends false ? Array<string | number | bigint | boolean | symbol | RegExp | Record<string, unknown> | AnyFunction | Date | Promise<unknown> | null | undefined> : unknown[];
216
+ type DedupeResult<Force extends ForceToStringOptions = false, FTN extends boolean = false> = FTN extends false ? ResUnFTN<Force> : ResFTN<Force>;
217
+ type ForceToStringOptions = false | "stringOrNumber" | "primitives" | "all";
218
+ type DedupeArrayOptions<F extends ForceToStringOptions, Fl extends boolean> = {
219
+ /** Enables string conversion for comparison, default is `false`.
220
+ *
221
+ * @default false
222
+ * @type {ForceToStringOptions}
223
+ */
224
+ forceToString?: F;
225
+ /** If true, deeply flattens `Arrays`, `Maps`, and `Sets` before deduplication, default is `false`.
226
+ *
227
+ * @default false
228
+ */
229
+ flatten?: Fl;
230
+ };
231
+
205
232
  /** ----------------------------------------------------------
206
233
  * * ***Utility: `dedupeArray`.***
207
234
  * ---------------------------------------------
@@ -281,12 +308,14 @@ flatten?:Fl;};
281
308
  * }); // ➔ Throws TypeError
282
309
  * ```
283
310
  */
284
- declare const dedupeArray:<ForceToString extends ForceToStringOptions=false,Flattening extends boolean=false>(inputArray:unknown[],options?:DedupeArrayOptions<ForceToString,Flattening>)=>DedupeResult<ForceToString,Flattening>;type ExcludeNil<T>=Exclude<T,null|undefined>;
311
+ declare const dedupeArray: <ForceToString extends ForceToStringOptions = false, Flattening extends boolean = false>(inputArray: unknown[], options?: DedupeArrayOptions<ForceToString, Flattening>) => DedupeResult<ForceToString, Flattening>;
312
+
313
+ type ExcludeNil<T> = Exclude<T, null | undefined>;
285
314
  /** ----------------------------------------------------------
286
315
  * * ***Element extractor***
287
316
  * ----------------------------------------------------------
288
317
  */
289
- type ElementOf<A extends readonly unknown[]>=A extends readonly(infer U)[]?U:never;
318
+ type ElementOf<A extends readonly unknown[]> = A extends readonly (infer U)[] ? U : never;
290
319
  /** ----------------------------------------------------------
291
320
  * * ***Compute `FilterNilArray`***
292
321
  * ----------------------------------------------------------
@@ -294,10 +323,16 @@ type ElementOf<A extends readonly unknown[]>=A extends readonly(infer U)[]?U:nev
294
323
  * for a tuple/array A by using the element type (without null|undefined).
295
324
  *
296
325
  */
297
- type FilterNilArrayFromTuple<A extends readonly unknown[]>=FilterNilArray<ExcludeNil<ElementOf<A>>>;
326
+ type FilterNilArrayFromTuple<A extends readonly unknown[]> = FilterNilArray<ExcludeNil<ElementOf<A>>>;
298
327
  /** ----------------------------------------------------------
299
328
  * ***Preserve `mutability`: if A is mutable (extends unknown[]), keep B; otherwise make B readonly***. */
300
- type PreserveMutability<A extends readonly unknown[],B>=A extends unknown[]?B:Readonly<B>;type IsDeepEmptyArray<T>=T extends readonly []?true:T extends readonly(infer U)[]?IsDeepEmptyArray<U>:false;type FilterNilRecursive<T>=T extends readonly(infer U)[]?T extends(infer U)[]?FilterNilRecursive<ExcludeEmptyArray<U>>[]:readonly FilterNilRecursive<ExcludeEmptyArray<U>>[]:Exclude<T,null|undefined>;type ExcludeEmptyArray<T>=T extends []?never:T;type NormalizerArrays<T>=NormalizeEmptyArraysRecursive<RemoveEmptyArrayElements<FilterNilRecursive<T[]>>>;type FilterNilArray<T>=IsDeepEmptyArray<NormalizerArrays<T>>extends true?[]:FixNeverArrayRecursive<NormalizerArrays<T>>;
329
+ type PreserveMutability<A extends readonly unknown[], B> = A extends unknown[] ? B : Readonly<B>;
330
+ type IsDeepEmptyArray<T> = T extends readonly [] ? true : T extends readonly (infer U)[] ? IsDeepEmptyArray<U> : false;
331
+ type FilterNilRecursive<T> = T extends readonly (infer U)[] ? T extends (infer U)[] ? FilterNilRecursive<ExcludeEmptyArray<U>>[] : readonly FilterNilRecursive<ExcludeEmptyArray<U>>[] : Exclude<T, null | undefined>;
332
+ type ExcludeEmptyArray<T> = T extends [] ? never : T;
333
+ type NormalizerArrays<T> = NormalizeEmptyArraysRecursive<RemoveEmptyArrayElements<FilterNilRecursive<T[]>>>;
334
+ type FilterNilArray<T> = IsDeepEmptyArray<NormalizerArrays<T>> extends true ? [] : FixNeverArrayRecursive<NormalizerArrays<T>>;
335
+
301
336
  /** ----------------------------------------------------------
302
337
  * * ***Utility: `filterNilArray`.***
303
338
  * ---------------------------------------------
@@ -329,7 +364,13 @@ type PreserveMutability<A extends readonly unknown[],B>=A extends unknown[]?B:Re
329
364
  * // ➔ [1, [2, [3]]]
330
365
  * ```
331
366
  */
332
- declare function filterNilArray(input:null|undefined):undefined;declare function filterNilArray<A extends readonly unknown[]>(input:A):PreserveMutability<A,FilterNilArrayFromTuple<A>>;declare function filterNilArray<A extends readonly unknown[]>(input:A|null|undefined):PreserveMutability<A,FilterNilArrayFromTuple<A>>|undefined;declare function filterNilArray<A>(input:(A|null|undefined)[]|null|undefined):FilterNilArray<A>|undefined;declare function filterNilArray(input:readonly unknown[]|null|undefined):unknown[]|undefined;declare function filterNilArray(input:unknown[]):unknown[];
367
+ declare function filterNilArray(input: null | undefined): undefined;
368
+ declare function filterNilArray<A extends readonly unknown[]>(input: A): PreserveMutability<A, FilterNilArrayFromTuple<A>>;
369
+ declare function filterNilArray<A extends readonly unknown[]>(input: A | null | undefined): PreserveMutability<A, FilterNilArrayFromTuple<A>> | undefined;
370
+ declare function filterNilArray<A>(input: (A | null | undefined)[] | null | undefined): FilterNilArray<A> | undefined;
371
+ declare function filterNilArray(input: readonly unknown[] | null | undefined): unknown[] | undefined;
372
+ declare function filterNilArray(input: unknown[]): unknown[];
373
+
333
374
  /** ---------------------------------
334
375
  * * ***Utility: `toBooleanContent`.***
335
376
  * ---------------------------------------------
@@ -359,7 +400,8 @@ declare function filterNilArray(input:null|undefined):undefined;declare function
359
400
  * toBooleanContent({ a: 1 }); // ➔ true
360
401
  * toBooleanContent({[Symbol("key")]: 123}); // ➔ false
361
402
  */
362
- declare const toBooleanContent:(value:unknown)=>boolean;
403
+ declare const toBooleanContent: (value: unknown) => boolean;
404
+
363
405
  /** -------------------------------------------------
364
406
  * * ***Utility: `toBooleanContentDeep`.***
365
407
  * ---------------------------------------------
@@ -395,22 +437,25 @@ declare const toBooleanContent:(value:unknown)=>boolean;
395
437
  * toBooleanContentDeep({ a: { b: "x" }}); // ➔ true
396
438
  * toBooleanContentDeep({[Symbol("key")]: 123}); // ➔false
397
439
  */
398
- declare const toBooleanContentDeep:(value:unknown)=>boolean;type ToBooleanExplicitOptions={
399
- /** Whether string comparison ignores case, _defaultValue: `false`_.
400
- *
401
- * @default false
402
- */
403
- caseInsensitive?:boolean;
404
- /** Whether to trim whitespace before comparison, _defaultValue: `true`_.
405
- *
406
- * @default true
407
- */
408
- trimString?:boolean;
409
- /** Whether to consider the string `"indeterminate"` as `true`, _defaultValue: `false`_.
410
- *
411
- * @default false
412
- */
413
- includeIndeterminate?:boolean;};
440
+ declare const toBooleanContentDeep: (value: unknown) => boolean;
441
+
442
+ type ToBooleanExplicitOptions = {
443
+ /** Whether string comparison ignores case, _defaultValue: `false`_.
444
+ *
445
+ * @default false
446
+ */
447
+ caseInsensitive?: boolean;
448
+ /** Whether to trim whitespace before comparison, _defaultValue: `true`_.
449
+ *
450
+ * @default true
451
+ */
452
+ trimString?: boolean;
453
+ /** Whether to consider the string `"indeterminate"` as `true`, _defaultValue: `false`_.
454
+ *
455
+ * @default false
456
+ */
457
+ includeIndeterminate?: boolean;
458
+ };
414
459
  /** ---------------------------------
415
460
  * * ***Utility: `toBooleanExplicit`.***
416
461
  * ---------------------------------------------
@@ -463,7 +508,8 @@ includeIndeterminate?:boolean;};
463
508
  * toBooleanExplicit("indeterminate", { includeIndeterminate: true });
464
509
  * // ➔ true
465
510
  */
466
- declare const toBooleanExplicit:(value:unknown,options?:ToBooleanExplicitOptions)=>boolean;
511
+ declare const toBooleanExplicit: (value: unknown, options?: ToBooleanExplicitOptions) => boolean;
512
+
467
513
  /** ---------------------------------
468
514
  * * ***Utility: `toBooleanLoose`.***
469
515
  * ---------------------------------------------
@@ -488,7 +534,8 @@ declare const toBooleanExplicit:(value:unknown,options?:ToBooleanExplicitOptions
488
534
  * toBooleanLoose({}); // ➔ true
489
535
  * toBooleanLoose({ a: 1 }); // ➔ true
490
536
  */
491
- declare const toBooleanLoose:(value:unknown)=>boolean;
537
+ declare const toBooleanLoose: (value: unknown) => boolean;
538
+
492
539
  /** -------------------------------------------------------------
493
540
  * * ***Utility: `parseCurrencyString`.***
494
541
  * ---------------------------------------------
@@ -556,7 +603,8 @@ declare const toBooleanLoose:(value:unknown)=>boolean;
556
603
  * // ➔ 0
557
604
  * ```
558
605
  */
559
- declare const parseCurrencyString:(input:string|null|undefined)=>number;
606
+ declare const parseCurrencyString: (input: string | null | undefined) => number;
607
+
560
608
  /** ----------------------------------------------------------
561
609
  * * ***Utility: `convertType`.***
562
610
  * ---------------------------------------------
@@ -587,114 +635,117 @@ declare const parseCurrencyString:(input:string|null|undefined)=>number;
587
635
  * convertType(NaN); // ➔ NaN
588
636
  * convertType({}); // ➔ {}
589
637
  */
590
- declare const convertType:(value:unknown)=>unknown;
638
+ declare const convertType: (value: unknown) => unknown;
639
+
591
640
  /** --------------------------------------------------
592
641
  * * ***Options for cleaning and transforming parsed JSON data.***
593
642
  * --------------------------------------------------
594
643
  *
595
644
  * @private Type Options Validation for Function: {@link cleanParsedData | `cleanParsedData`}, {@link parseCustomDate | `parseCustomDate`} and {@link safeJsonParse | `safeJsonParse`}.
596
645
  */
597
- type ParseParsedDataOptions={
598
- /** --------------------------------------------------
599
- * * ***Convert numeric strings to numbers (e.g., `"42"` ➔ `42`), defaultValue: `false`.***
600
- * --------------------------------------------------
601
- *
602
- * @default false
603
- */
604
- convertNumbers?:boolean;
605
- /** --------------------------------------------------
606
- * * ***Convert numeric strings `"NaN"` to `NaN` (e.g., `"NaN"` ➔ `NaN`), defaultValue: `false`.***
607
- * --------------------------------------------------
608
- *
609
- * @default false
610
- */
611
- convertNaN?:boolean;
612
- /** --------------------------------------------------
613
- * * ***Convert `"true"` / `"false"` strings to boolean values, defaultValue: `false`.***
614
- * --------------------------------------------------
615
- *
616
- * @default false
617
- */
618
- convertBooleans?:boolean;
619
- /** --------------------------------------------------
620
- * * ***Convert valid date strings into `Date` objects, defaultValue: `false`.***
621
- * --------------------------------------------------
622
- *
623
- * @default false
624
- */
625
- convertDates?:boolean;
626
- /** --------------------------------------------------
627
- * * ***Custom date formats to be parsed (e.g., `["DD/MM/YYYY", "MM/DD/YYYY"]`), defaultValue: `[]`.***
628
- * --------------------------------------------------
629
- *
630
- * @default []
631
- */
632
- customDateFormats?:string[];
633
- /** --------------------------------------------------
634
- * * ***Remove `null` values from objects and arrays, defaultValue: `false`.***
635
- * --------------------------------------------------
636
- *
637
- * @default false
638
- */
639
- removeNulls?:boolean;
640
- /** --------------------------------------------------
641
- * * ***Remove `undefined` values from objects and arrays, defaultValue: `false`.***
642
- * --------------------------------------------------
643
- *
644
- * - ***Behavior:***
645
- * - `false` (**default**): replaces `undefined` with `null`.
646
- * - `true`: removes keys with `undefined` values.
647
- *
648
- * @default false
649
- */
650
- removeUndefined?:boolean;
651
- /** --------------------------------------------------
652
- * * ***Remove empty objects `{}` from the final output, defaultValue: `false`.***
653
- * --------------------------------------------------
654
- *
655
- * @default false
656
- */
657
- removeEmptyObjects?:boolean;
658
- /** --------------------------------------------------
659
- * * ***Remove empty arrays `[]` from the final output, defaultValue: `false`.***
660
- * --------------------------------------------------
661
- *
662
- * @default false
663
- */
664
- removeEmptyArrays?:boolean;
665
- /** --------------------------------------------------
666
- * * ***Removes values that do not match selected conversions, defaultValue: `false`.***
667
- * --------------------------------------------------
668
- *
669
- * @default false
670
- */
671
- strictMode?:boolean;
672
- /** --------------------------------------------------
673
- * * ***Enable error logging if JSON parsing fails, defaultValue: `false`.***
674
- * --------------------------------------------------
675
- *
676
- * @default false
677
- */
678
- loggingOnFail?:boolean;
679
- /** --------------------------------------------------
680
- * * ***Custom error handler function.***
681
- * --------------------------------------------------
682
- *
683
- * - ***Behavior:***
684
- * - If provided, it will be called with the error.
685
- * - If not provided, defaults to `undefined` in type, but internally a no-op function is used.
686
- *
687
- * @param error - Error instance thrown during fail on execution.
688
- * @default undefined
689
- */
690
- onError?:(error:Error)=>void;
691
- /** --------------------------------------------------
692
- * * ***Whether to check symbol properties when checking empty objects.***
693
- * --------------------------------------------------
694
- *
695
- * @default false
696
- */
697
- checkSymbols?:boolean;};
646
+ type ParseParsedDataOptions = {
647
+ /** --------------------------------------------------
648
+ * * ***Convert numeric strings to numbers (e.g., `"42"` ➔ `42`), defaultValue: `false`.***
649
+ * --------------------------------------------------
650
+ *
651
+ * @default false
652
+ */
653
+ convertNumbers?: boolean;
654
+ /** --------------------------------------------------
655
+ * * ***Convert numeric strings `"NaN"` to `NaN` (e.g., `"NaN"` ➔ `NaN`), defaultValue: `false`.***
656
+ * --------------------------------------------------
657
+ *
658
+ * @default false
659
+ */
660
+ convertNaN?: boolean;
661
+ /** --------------------------------------------------
662
+ * * ***Convert `"true"` / `"false"` strings to boolean values, defaultValue: `false`.***
663
+ * --------------------------------------------------
664
+ *
665
+ * @default false
666
+ */
667
+ convertBooleans?: boolean;
668
+ /** --------------------------------------------------
669
+ * * ***Convert valid date strings into `Date` objects, defaultValue: `false`.***
670
+ * --------------------------------------------------
671
+ *
672
+ * @default false
673
+ */
674
+ convertDates?: boolean;
675
+ /** --------------------------------------------------
676
+ * * ***Custom date formats to be parsed (e.g., `["DD/MM/YYYY", "MM/DD/YYYY"]`), defaultValue: `[]`.***
677
+ * --------------------------------------------------
678
+ *
679
+ * @default []
680
+ */
681
+ customDateFormats?: string[];
682
+ /** --------------------------------------------------
683
+ * * ***Remove `null` values from objects and arrays, defaultValue: `false`.***
684
+ * --------------------------------------------------
685
+ *
686
+ * @default false
687
+ */
688
+ removeNulls?: boolean;
689
+ /** --------------------------------------------------
690
+ * * ***Remove `undefined` values from objects and arrays, defaultValue: `false`.***
691
+ * --------------------------------------------------
692
+ *
693
+ * - ***Behavior:***
694
+ * - `false` (**default**): replaces `undefined` with `null`.
695
+ * - `true`: removes keys with `undefined` values.
696
+ *
697
+ * @default false
698
+ */
699
+ removeUndefined?: boolean;
700
+ /** --------------------------------------------------
701
+ * * ***Remove empty objects `{}` from the final output, defaultValue: `false`.***
702
+ * --------------------------------------------------
703
+ *
704
+ * @default false
705
+ */
706
+ removeEmptyObjects?: boolean;
707
+ /** --------------------------------------------------
708
+ * * ***Remove empty arrays `[]` from the final output, defaultValue: `false`.***
709
+ * --------------------------------------------------
710
+ *
711
+ * @default false
712
+ */
713
+ removeEmptyArrays?: boolean;
714
+ /** --------------------------------------------------
715
+ * * ***Removes values that do not match selected conversions, defaultValue: `false`.***
716
+ * --------------------------------------------------
717
+ *
718
+ * @default false
719
+ */
720
+ strictMode?: boolean;
721
+ /** --------------------------------------------------
722
+ * * ***Enable error logging if JSON parsing fails, defaultValue: `false`.***
723
+ * --------------------------------------------------
724
+ *
725
+ * @default false
726
+ */
727
+ loggingOnFail?: boolean;
728
+ /** --------------------------------------------------
729
+ * * ***Custom error handler function.***
730
+ * --------------------------------------------------
731
+ *
732
+ * - ***Behavior:***
733
+ * - If provided, it will be called with the error.
734
+ * - If not provided, defaults to `undefined` in type, but internally a no-op function is used.
735
+ *
736
+ * @param error - Error instance thrown during fail on execution.
737
+ * @default undefined
738
+ */
739
+ onError?: (error: Error) => void;
740
+ /** --------------------------------------------------
741
+ * * ***Whether to check symbol properties when checking empty objects.***
742
+ * --------------------------------------------------
743
+ *
744
+ * @default false
745
+ */
746
+ checkSymbols?: boolean;
747
+ };
748
+
698
749
  /** --------------------------------------------------
699
750
  * * ***Utility: `cleanParsedData`.***
700
751
  * ---------------------------------------------
@@ -720,7 +771,8 @@ checkSymbols?:boolean;};
720
771
  * console.log(result); // ➔ { isActive: true }
721
772
  * ```
722
773
  */
723
- declare const cleanParsedData:<T=unknown>(data:T,options?:ParseParsedDataOptions)=>T|undefined|null;
774
+ declare const cleanParsedData: <T = unknown>(data: T, options?: ParseParsedDataOptions) => T | undefined | null;
775
+
724
776
  /** --------------------------------------------------
725
777
  * * ***Utility: `parseCustomDate`.***
726
778
  * ---------------------------------------------
@@ -750,11 +802,17 @@ declare const cleanParsedData:<T=unknown>(data:T,options?:ParseParsedDataOptions
750
802
  * parseCustomDate(123, "DD/MM/YYYY");
751
803
  * // ➔ TypeError: Parameter `dateString` and `format` must be of type `string`...
752
804
  */
753
- declare const parseCustomDate:(dateString:string,format:string)=>Date|null;type NonJsonParsableType=Omit<Exclude<unknown,string|null|undefined>,string>;type Contains<T,U>=[Extract<T,U>] extends [never]?false:true;
805
+ declare const parseCustomDate: (dateString: string, format: string) => Date | null;
806
+
807
+ type NonJsonParsableType = Omit<Exclude<unknown, string | null | undefined>, string>;
808
+ type Contains<T, U> = [Extract<T, U>] extends [never] ? false : true;
754
809
  /** @private ***The value type for the overload function {@link safeJsonParse | `safeJsonParse`}.*** */
755
- type UnknownValue={undefined:true;};
810
+ type UnknownValue = {
811
+ undefined: true;
812
+ };
756
813
  /** @private ***The narrows type result for {@link safeJsonParse | `safeJsonParse`}.*** */
757
- type SafeJsonParseResult<TData,T>=IfNotExtends<T,NonJsonParsableType>extends true?T extends never?undefined:T extends void?undefined:T extends number?undefined:Contains<T,string>extends true?Contains<T,null & string>extends true?TData|null|undefined:TData|undefined:IfExtends<T,null>extends true?null:IfNotExtends<T,NonJsonParsableType>extends true?TData|null|undefined:undefined:Contains<T,string>extends true?IsAny<T>extends true?TData|undefined|null:TData|undefined:undefined;
814
+ type SafeJsonParseResult<TData, T> = IfNotExtends<T, NonJsonParsableType> extends true ? T extends never ? undefined : T extends void ? undefined : T extends number ? undefined : Contains<T, string> extends true ? Contains<T, null & string> extends true ? TData | null | undefined : TData | undefined : IfExtends<T, null> extends true ? null : IfNotExtends<T, NonJsonParsableType> extends true ? TData | null | undefined : undefined : Contains<T, string> extends true ? IsAny<T> extends true ? TData | undefined | null : TData | undefined : undefined;
815
+
758
816
  /** --------------------------------------------------
759
817
  * * ***Utility: `safeJsonParse`.***
760
818
  * ---------------------------------------------
@@ -918,7 +976,9 @@ type SafeJsonParseResult<TData,T>=IfNotExtends<T,NonJsonParsableType>extends tru
918
976
  * nullable, or unioned: `safeJsonParse<TData, typeof value>(value)`.
919
977
  * - This makes the returned type exactly match your expectation: `TData | null | undefined`.
920
978
  */
921
- declare function safeJsonParse<TData extends Record<string,any>=Record<string,unknown>,TInput extends UnknownValue=UnknownValue>(value:TInput,options?:ParseParsedDataOptions):IsAny<TInput>extends true?TData|null|undefined:undefined;declare function safeJsonParse<TData extends Record<string,any>=Record<string,unknown>,TInput extends string|null|undefined|unknown=undefined>(value:TInput,options?:ParseParsedDataOptions):SafeJsonParseResult<TData,TInput>;
979
+ declare function safeJsonParse<TData extends Record<string, any> = Record<string, unknown>, TInput extends UnknownValue = UnknownValue>(value: TInput, options?: ParseParsedDataOptions): IsAny<TInput> extends true ? TData | null | undefined : undefined;
980
+ declare function safeJsonParse<TData extends Record<string, any> = Record<string, unknown>, TInput extends string | null | undefined | unknown = undefined>(value: TInput, options?: ParseParsedDataOptions): SafeJsonParseResult<TData, TInput>;
981
+
922
982
  /** ----------------------------------------------------------
923
983
  * * ***Utility: `extractDigits`.***
924
984
  * ---------------------------------------------
@@ -948,64 +1008,85 @@ declare function safeJsonParse<TData extends Record<string,any>=Record<string,un
948
1008
  * extractDigits("abc"); // ➔ 0
949
1009
  * extractDigits(" 00a "); // ➔ 0
950
1010
  */
951
- declare const extractDigits:(value:unknown)=>number;type Prev=[never,NumberRangeUnion<1,30>];type DotPath<T,Prefix extends string="",Depth extends number=NumberRangeUnion<1,30>>=Depth extends never?never:T extends(infer U)[]?U extends object?DotPath<U,`${Prefix}`,Prev[Depth]>:never:T extends object?{[K in Extract<keyof T,string>]:T[K] extends object?DotPath<T[K],`${Prefix}${K}.`,Prev[Depth]>|`${Prefix}${K}`:`${Prefix}${K}`;}[Extract<keyof T,string>]:never;type KeysToRemove<T,K extends readonly ConfigRemoveObjectPaths<T>[]>=K[number] extends{key:infer Key;}?(Key extends string?Key:never):never;type RemoveNested<T,K extends string>=T extends Array<infer U>?RemoveNested<U,K>[]:T extends object?K extends`${infer Head}.${infer Rest}`?Head extends keyof T?{[P in keyof T]:P extends Head?RemoveNested<T[P],Rest>:T[P];}:T:SafeRemove<T,K>:T;type SafeRemove<T,K extends string>=K extends keyof T?Omit<T,K>:T;type ChangeNeverArrayToArrayDeep<T>=T extends never[]?[]:T extends Array<infer U>?ChangeNeverArrayToArrayDeep<U>[]:T extends object?{[K in keyof T]:ChangeNeverArrayToArrayDeep<T[K]>;}:T;
1011
+ declare const extractDigits: (value: unknown) => number;
1012
+
1013
+ type Prev = [never, NumberRangeUnion<1, 30>];
1014
+ type DotPath<T, Prefix extends string = "", Depth extends number = NumberRangeUnion<1, 30>> = Depth extends never ? never : T extends (infer U)[] ? U extends object ? DotPath<U, `${Prefix}`, Prev[Depth]> : never : T extends object ? {
1015
+ [K in Extract<keyof T, string>]: T[K] extends object ? DotPath<T[K], `${Prefix}${K}.`, Prev[Depth]> | `${Prefix}${K}` : `${Prefix}${K}`;
1016
+ }[Extract<keyof T, string>] : never;
1017
+ type KeysToRemove<T, K extends readonly ConfigRemoveObjectPaths<T>[]> = K[number] extends {
1018
+ key: infer Key;
1019
+ } ? (Key extends string ? Key : never) : never;
1020
+ type RemoveNested<T, K extends string> = T extends Array<infer U> ? RemoveNested<U, K>[] : T extends object ? K extends `${infer Head}.${infer Rest}` ? Head extends keyof T ? {
1021
+ [P in keyof T]: P extends Head ? RemoveNested<T[P], Rest> : T[P];
1022
+ } : T : SafeRemove<T, K> : T;
1023
+ type SafeRemove<T, K extends string> = K extends keyof T ? Omit<T, K> : T;
1024
+ type ChangeNeverArrayToArrayDeep<T> = T extends never[] ? [] : T extends Array<infer U> ? ChangeNeverArrayToArrayDeep<U>[] : T extends object ? {
1025
+ [K in keyof T]: ChangeNeverArrayToArrayDeep<T[K]>;
1026
+ } : T;
952
1027
  /** @private ***Types options for {@link removeObjectPaths | `removeObjectPaths`}.*** */
953
- type ConfigRemoveObjectPaths<T>={
954
- /** ------------------------------------------------------------------------
955
- * * ***The dot-notation path to the property that should be removed.
956
- * Can target deeply nested properties (e.g., `"left.data.sensitive"`).***
957
- * ------------------------------------------------------------------------
958
- * **This is resolved relative to the root object `T`, and supports
959
- * any valid **{@link DotPath | `DotPath`}** path within it.**
960
- *
961
- * @example
962
- * const obj = {
963
- * left: { data: { sensitive: "secret", id: 1 } },
964
- * right: { data: { debug: true, keep: "yes" } },
965
- * };
966
- *
967
- * // Removes "left.data.sensitive" and "right.data.debug"
968
- * const result = removeObjectPaths(obj, [
969
- * { key: "left.data.sensitive" },
970
- * { key: "right.data.debug" },
971
- * ]);
972
- * console.log(result);
973
- * // {
974
- * // left: { data: { id: 1 } },
975
- * // right: { data: { keep: "yes" } },
976
- * // };
977
- */
978
- key:DotPath<T>;
979
- /** ------------------------------------------------------------------------
980
- * * ***When `true`, removes the specified property from **all matching nested levels**,
981
- * including occurrences inside arrays, defaults to `false` for single-level removal.***
982
- * ------------------------------------------------------------------------
983
- * **Useful if the target property might appear multiple times across different
984
- * branches or array elements.**
985
- * @default false
986
- * @example
987
- * const obj = {
988
- * items: [
989
- * { data: { sensitive: "one", keep: true } },
990
- * { data: { sensitive: "two", keep: true } },
991
- * { other: { sensitive: "other" } },
992
- * ]
993
- * };
994
- *
995
- * // Removes all "data.sensitive" occurrences inside items[]
996
- * const result = removeObjectPaths(obj, [{ key: "items.data.sensitive", deep: true }]);
997
- * console.log(result);
998
- * // {
999
- * // items: [
1000
- * // { data: { keep: true } },
1001
- * // { data: { keep: true } },
1002
- * // { other: { sensitive: "other" } },
1003
- * // ]
1004
- * // };
1005
- */
1006
- deep?:boolean;};
1028
+ type ConfigRemoveObjectPaths<T> = {
1029
+ /** ------------------------------------------------------------------------
1030
+ * * ***The dot-notation path to the property that should be removed.
1031
+ * Can target deeply nested properties (e.g., `"left.data.sensitive"`).***
1032
+ * ------------------------------------------------------------------------
1033
+ * **This is resolved relative to the root object `T`, and supports
1034
+ * any valid **{@link DotPath | `DotPath`}** path within it.**
1035
+ *
1036
+ * @example
1037
+ * const obj = {
1038
+ * left: { data: { sensitive: "secret", id: 1 } },
1039
+ * right: { data: { debug: true, keep: "yes" } },
1040
+ * };
1041
+ *
1042
+ * // Removes "left.data.sensitive" and "right.data.debug"
1043
+ * const result = removeObjectPaths(obj, [
1044
+ * { key: "left.data.sensitive" },
1045
+ * { key: "right.data.debug" },
1046
+ * ]);
1047
+ * console.log(result);
1048
+ * // {
1049
+ * // left: { data: { id: 1 } },
1050
+ * // right: { data: { keep: "yes" } },
1051
+ * // };
1052
+ */
1053
+ key: DotPath<T>;
1054
+ /** ------------------------------------------------------------------------
1055
+ * * ***When `true`, removes the specified property from **all matching nested levels**,
1056
+ * including occurrences inside arrays, defaults to `false` for single-level removal.***
1057
+ * ------------------------------------------------------------------------
1058
+ * **Useful if the target property might appear multiple times across different
1059
+ * branches or array elements.**
1060
+ * @default false
1061
+ * @example
1062
+ * const obj = {
1063
+ * items: [
1064
+ * { data: { sensitive: "one", keep: true } },
1065
+ * { data: { sensitive: "two", keep: true } },
1066
+ * { other: { sensitive: "other" } },
1067
+ * ]
1068
+ * };
1069
+ *
1070
+ * // Removes all "data.sensitive" occurrences inside items[]
1071
+ * const result = removeObjectPaths(obj, [{ key: "items.data.sensitive", deep: true }]);
1072
+ * console.log(result);
1073
+ * // {
1074
+ * // items: [
1075
+ * // { data: { keep: true } },
1076
+ * // { data: { keep: true } },
1077
+ * // { other: { sensitive: "other" } },
1078
+ * // ]
1079
+ * // };
1080
+ */
1081
+ deep?: boolean;
1082
+ };
1007
1083
  /** @private ***Narrows types result for {@link removeObjectPaths | `removeObjectPaths`}.*** */
1008
- type ResultRemoveObjectPaths<T,K extends readonly ConfigRemoveObjectPaths<T>[]>=Prettify<RemoveNested<ChangeNeverArrayToArrayDeep<T>,KeysToRemove<T,K>>,{recursive:true;}>extends never?T:Prettify<RemoveNested<ChangeNeverArrayToArrayDeep<T>,KeysToRemove<T,K>>,{recursive:true;}>;
1084
+ type ResultRemoveObjectPaths<T, K extends readonly ConfigRemoveObjectPaths<T>[]> = Prettify<RemoveNested<ChangeNeverArrayToArrayDeep<T>, KeysToRemove<T, K>>, {
1085
+ recursive: true;
1086
+ }> extends never ? T : Prettify<RemoveNested<ChangeNeverArrayToArrayDeep<T>, KeysToRemove<T, K>>, {
1087
+ recursive: true;
1088
+ }>;
1089
+
1009
1090
  /** ------------------------------------------------------------------------
1010
1091
  * * ***Utility: `removeObjectPaths`.***
1011
1092
  * ------------------------------------------------------------------------
@@ -1078,72 +1159,74 @@ type ResultRemoveObjectPaths<T,K extends readonly ConfigRemoveObjectPaths<T>[]>=
1078
1159
  * removeObjectPaths({}, [{ deep: true }]);
1079
1160
  * // ➔ throws TypeError
1080
1161
  */
1081
- declare function removeObjectPaths<T extends Record<string,unknown>,K extends ConfigRemoveObjectPaths<T>[]>(object:T,keysToDelete:K,deepClone?:boolean):ResultRemoveObjectPaths<T,K>;
1162
+ declare function removeObjectPaths<T extends Record<string, unknown>, K extends ConfigRemoveObjectPaths<T>[]>(object: T, keysToDelete: K, deepClone?: boolean): ResultRemoveObjectPaths<T, K>;
1163
+
1082
1164
  /** -------------------------------------------------
1083
1165
  * * ***Type Options for **{@link safeStableStringify | `safeStableStringify`}**.***
1084
1166
  * -------------------------------------------------
1085
1167
  */
1086
- type SafeStableStringifyOptions={
1087
- /** -------------------------------------------------
1088
- * * ***Whether to sort **object keys** alphabetically (recursively).***
1089
- * -------------------------------------------------
1090
- *
1091
- * - `true` (default): object keys are sorted to ensure stable output.
1092
- * - `false`: preserves original insertion order of keys.
1093
- *
1094
- * @default true
1095
- */
1096
- sortKeys?:boolean;
1097
- /** -------------------------------------------------
1098
- * * ***Whether to sort **primitive values inside arrays**.***
1099
- * -------------------------------------------------
1100
- *
1101
- * - `true`: primitive values in arrays are sorted to ensure stable output.
1102
- * - `false` (default): arrays retain their original order; objects and nested arrays are not reordered.
1103
- *
1104
- * @default false
1105
- */
1106
- sortArray?:boolean;
1107
- /** -------------------------------------------------
1108
- * * ***Whether to pretty-print JSON output with 2-space indentation.***
1109
- * -------------------------------------------------
1110
- *
1111
- * - `true`: output is formatted with indentation and newlines.
1112
- * - `false` (default): produces compact single-line JSON.
1113
- *
1114
- * @default false
1115
- */
1116
- pretty?:boolean;
1117
- /** -------------------------------------------------
1118
- * * ***Preserve `undefined` values instead of converting them to `null`.***
1119
- * -------------------------------------------------
1120
- * **Controls how the internal `deepProcess` step rewrites values
1121
- * **before** the final `JSON.stringify` call.**
1122
- * - **Default (`false`):**
1123
- * * Every `undefined` value (object properties **and** array elements)
1124
- * is replaced with `null` **before** serialization, because this happens
1125
- * first, the key is **not removed** by `JSON.stringify`.
1126
- * - **`true`** – Leaves `undefined` untouched so the final
1127
- * `JSON.stringify` call behaves natively:
1128
- * * Object properties with `undefined` are **removed**.
1129
- * * Array elements that are `undefined` become `null`.
1130
- * @default false
1131
- * @example
1132
- * // ✅ keepUndefined = true: behaves like native JSON.stringify
1133
- * safeStableStringify({ a: undefined }, { keepUndefined: true });
1134
- * // ➔ '{}' // key removed
1135
- *
1136
- * // ✅ Default (false): convert undefined to null, key kept
1137
- * safeStableStringify({ a: undefined });
1138
- * // ➔ '{"a":null}' // key present, value null
1139
- *
1140
- * // Arrays
1141
- * safeStableStringify([undefined]);
1142
- * // ➔ '[null]' // same, but via pre-replacement
1143
- * safeStableStringify([undefined], { keepUndefined: true });
1144
- * // ➔ '[null]' // element becomes null
1145
- */
1146
- keepUndefined?:boolean;};
1168
+ type SafeStableStringifyOptions = {
1169
+ /** -------------------------------------------------
1170
+ * * ***Whether to sort **object keys** alphabetically (recursively).***
1171
+ * -------------------------------------------------
1172
+ *
1173
+ * - `true` (default): object keys are sorted to ensure stable output.
1174
+ * - `false`: preserves original insertion order of keys.
1175
+ *
1176
+ * @default true
1177
+ */
1178
+ sortKeys?: boolean;
1179
+ /** -------------------------------------------------
1180
+ * * ***Whether to sort **primitive values inside arrays**.***
1181
+ * -------------------------------------------------
1182
+ *
1183
+ * - `true`: primitive values in arrays are sorted to ensure stable output.
1184
+ * - `false` (default): arrays retain their original order; objects and nested arrays are not reordered.
1185
+ *
1186
+ * @default false
1187
+ */
1188
+ sortArray?: boolean;
1189
+ /** -------------------------------------------------
1190
+ * * ***Whether to pretty-print JSON output with 2-space indentation.***
1191
+ * -------------------------------------------------
1192
+ *
1193
+ * - `true`: output is formatted with indentation and newlines.
1194
+ * - `false` (default): produces compact single-line JSON.
1195
+ *
1196
+ * @default false
1197
+ */
1198
+ pretty?: boolean;
1199
+ /** -------------------------------------------------
1200
+ * * ***Preserve `undefined` values instead of converting them to `null`.***
1201
+ * -------------------------------------------------
1202
+ * **Controls how the internal `deepProcess` step rewrites values
1203
+ * **before** the final `JSON.stringify` call.**
1204
+ * - **Default (`false`):**
1205
+ * * Every `undefined` value (object properties **and** array elements)
1206
+ * is replaced with `null` **before** serialization, because this happens
1207
+ * first, the key is **not removed** by `JSON.stringify`.
1208
+ * - **`true`** – Leaves `undefined` untouched so the final
1209
+ * `JSON.stringify` call behaves natively:
1210
+ * * Object properties with `undefined` are **removed**.
1211
+ * * Array elements that are `undefined` become `null`.
1212
+ * @default false
1213
+ * @example
1214
+ * // ✅ keepUndefined = true: behaves like native JSON.stringify
1215
+ * safeStableStringify({ a: undefined }, { keepUndefined: true });
1216
+ * // ➔ '{}' // key removed
1217
+ *
1218
+ * // ✅ Default (false): convert undefined to null, key kept
1219
+ * safeStableStringify({ a: undefined });
1220
+ * // ➔ '{"a":null}' // key present, value null
1221
+ *
1222
+ * // Arrays
1223
+ * safeStableStringify([undefined]);
1224
+ * // ➔ '[null]' // same, but via pre-replacement
1225
+ * safeStableStringify([undefined], { keepUndefined: true });
1226
+ * // ➔ '[null]' // element becomes null
1227
+ */
1228
+ keepUndefined?: boolean;
1229
+ };
1147
1230
  /** --------------------------------------------
1148
1231
  * * ***Utility: `safeStableStringify`.***
1149
1232
  * ---------------------------------------------
@@ -1282,17 +1365,20 @@ keepUndefined?:boolean;};
1282
1365
  * // ➔ '[7,9,[2,3,4],{"z":[1,5,6]}]'
1283
1366
  * ```
1284
1367
  */
1285
- declare const safeStableStringify:(value:unknown,options?:SafeStableStringifyOptions)=>string;
1368
+ declare const safeStableStringify: (value: unknown, options?: SafeStableStringifyOptions) => string;
1369
+
1286
1370
  /** ----------------------------------------------------------
1287
1371
  * * Normalize leaked `never[]` into literal empty array `[]`.
1288
1372
  * ----------------------------------------------------------
1289
1373
  */
1290
- type FixNeverArray$1<T,RemoveEmptyArrays extends boolean>=[T] extends [never[]]?RemoveEmptyArrays extends true?OrArr<[Extends<T,undefined>,Extends<undefined,T>]>extends true?undefined:never:[]:T;
1374
+ type FixNeverArray$1<T, RemoveEmptyArrays extends boolean> = [T] extends [never[]] ? RemoveEmptyArrays extends true ? OrArr<[Extends<T, undefined>, Extends<undefined, T>]> extends true ? undefined : never : [] : T;
1291
1375
  /** ----------------------------------------------------------
1292
1376
  * * Simplify object type to remove unnecessary TypeScript wrappers.
1293
1377
  * ----------------------------------------------------------
1294
1378
  */
1295
- type Simplify$1<T>=T extends object?{[K in keyof T]:T[K];}:T;
1379
+ type Simplify$1<T> = T extends object ? {
1380
+ [K in keyof T]: T[K];
1381
+ } : T;
1296
1382
  /** ----------------------------------------------------------
1297
1383
  * * Deeply convert all numbers and strings to `number | undefined`,
1298
1384
  * * recursively handling arrays, tuples, Sets, Maps, TypedArrays,
@@ -1304,38 +1390,68 @@ type Simplify$1<T>=T extends object?{[K in keyof T]:T[K];}:T;
1304
1390
  * @template RemoveEmptyArrays - Whether to remove empty arrays
1305
1391
  * @template IsRoot - Internal flag for root level
1306
1392
  */
1307
- type ConvertedDeepNumberInternal<T,RemoveEmptyObjects extends boolean,RemoveEmptyArrays extends boolean,IsRoot extends boolean>=[T] extends [null|undefined]?IsRoot extends true?undefined:never:T extends Date|boolean|Boolean?number:T extends string|String|Number|number|`${number}`?number|undefined:AndArr<[Extends<RemoveEmptyArrays,true>,Extends<T,undefined[]>]>extends true?never:T extends readonly(infer E)[]?OrArr<[ Extends<RemoveEmptyArrays,true>,AndArr<[Extends<RemoveEmptyArrays,true>,Extends<IsRoot,true>]>]>extends true?FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<E,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>,RemoveEmptyArrays>[]|undefined:FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<E,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:T extends Set<infer V>?AndArr<[Extends<RemoveEmptyArrays,true>]>extends true?FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<V,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<V,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:T extends Map<infer K,infer V>?FixNeverArray$1<[ Exclude<ConvertedDeepNumberInternal<K,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>,Exclude<ConvertedDeepNumberInternal<V,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>][],RemoveEmptyArrays>:T extends Buffer?FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<string,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:T extends TypedArray?FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<string,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:T extends Record<PropertyKey,unknown>?_ConvertedObjectInternal$1<T,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:never;
1393
+ type ConvertedDeepNumberInternal<T, RemoveEmptyObjects extends boolean, RemoveEmptyArrays extends boolean, IsRoot extends boolean> = [T] extends [null | undefined] ? IsRoot extends true ? undefined : never : T extends Date | boolean | Boolean ? number : T extends string | String | Number | number | `${number}` ? number | undefined : AndArr<[Extends<RemoveEmptyArrays, true>, Extends<T, undefined[]>]> extends true ? never : T extends readonly (infer E)[] ? OrArr<[
1394
+ Extends<RemoveEmptyArrays, true>,
1395
+ AndArr<[Extends<RemoveEmptyArrays, true>, Extends<IsRoot, true>]>
1396
+ ]> extends true ? FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<E, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>, RemoveEmptyArrays>[] | undefined : FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<E, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : T extends Set<infer V> ? AndArr<[Extends<RemoveEmptyArrays, true>]> extends true ? FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<V, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<V, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : T extends Map<infer K, infer V> ? FixNeverArray$1<[
1397
+ Exclude<ConvertedDeepNumberInternal<K, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>,
1398
+ Exclude<ConvertedDeepNumberInternal<V, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>
1399
+ ][], RemoveEmptyArrays> : T extends Buffer ? FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<string, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : T extends TypedArray ? FixNeverArray$1<Exclude<ConvertedDeepNumberInternal<string, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : T extends Record<PropertyKey, unknown> ? _ConvertedObjectInternal$1<T, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : never;
1308
1400
  /** ----------------------------------------------------------
1309
1401
  * * Internal object conversion utility.
1310
1402
  * * Removes empty objects/arrays based on flags.
1311
1403
  * ----------------------------------------------------------
1312
1404
  */
1313
- type _ConvertedObjectInternal$1<O extends Record<PropertyKey,unknown>|string|number,RemoveEmptyObjects extends boolean,RemoveEmptyArrays extends boolean,IsRoot extends boolean>={[K in keyof O as Exclude<ConvertedDeepNumberInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>,undefined>extends infer Convert?[Convert] extends [never]?never:undefined extends ConvertedDeepNumberInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>?never:RemoveEmptyArrays extends true?Convert extends readonly unknown[]?[Convert] extends [[]]?never:K:K:K:never]:Exclude<ConvertedDeepNumberInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>,undefined>;}&{[K in keyof O as Exclude<ConvertedDeepNumberInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>,undefined>extends infer Convert?[Convert] extends [never]?never:undefined extends ConvertedDeepNumberInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>?RemoveEmptyArrays extends true?Convert extends readonly unknown[]?[Convert] extends [[]]?never:K:K:K:never:never]?:Exclude<ConvertedDeepNumberInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>,undefined>;}extends infer M?RemoveEmptyObjects extends true?keyof M extends never?IsRoot extends true?{}:never:_ProcessedObject$1<M,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:Simplify$1<M>:never;type AllPropsAreNumber$1<O>={[K in keyof O]:O[K] extends number|Number?true:O[K] extends Record<string,unknown>?AllPropsAreNumber$1<O[K]>:false;}[keyof O] extends false?false:true;type _ProcessedObject$1<M,RemoveEmptyObjects extends boolean,RemoveEmptyArrays extends boolean,IsRoot extends boolean>=M extends unknown[]?ConvertedDeepNumberInternal<M,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:Prettify<Simplify$1<{[K in keyof M]:M[K] extends Record<string,unknown>?AllPropsAreNumber$1<M[K]>extends true?{[ChildKey in keyof M[K]]:M[K][ChildKey] extends number|Number?M[K][ChildKey]|undefined:_ProcessedObject$1<M[K][ChildKey],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;}|undefined:AndArr<[ Extends<RemoveEmptyArrays,true>,Extends<RemoveEmptyObjects,true>]>extends true?{[ChildKey in keyof M[K]]:_ProcessChild$1<M[K][ChildKey],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;}|undefined:{[ChildKey in keyof M[K]]:_ProcessChild$1<M[K][ChildKey],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;}:M[K] extends unknown[]?ConvertedDeepNumberInternal<M[K],RemoveEmptyObjects,RemoveEmptyArrays,false>:_ProcessedObject$1<M[K],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;}>,{recursive:true;}>;type _ProcessChild$1<T,RemoveEmptyObjects extends boolean,RemoveEmptyArrays extends boolean,IsRoot extends boolean>=T extends number|number[]?ConvertedDeepNumberInternal<T,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:T extends Record<string,unknown>?_ProcessedObject$1<T,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:_ProcessedObject$1<T,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;
1405
+ type _ConvertedObjectInternal$1<O extends Record<PropertyKey, unknown> | string | number, RemoveEmptyObjects extends boolean, RemoveEmptyArrays extends boolean, IsRoot extends boolean> = {
1406
+ [K in keyof O as Exclude<ConvertedDeepNumberInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false>, undefined> extends infer Convert ? [Convert] extends [never] ? never : undefined extends ConvertedDeepNumberInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> ? never : RemoveEmptyArrays extends true ? Convert extends readonly unknown[] ? [Convert] extends [[]] ? never : K : K : K : never]: Exclude<ConvertedDeepNumberInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false>, undefined>;
1407
+ } & {
1408
+ [K in keyof O as Exclude<ConvertedDeepNumberInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false>, undefined> extends infer Convert ? [Convert] extends [never] ? never : undefined extends ConvertedDeepNumberInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> ? RemoveEmptyArrays extends true ? Convert extends readonly unknown[] ? [Convert] extends [[]] ? never : K : K : K : never : never]?: Exclude<ConvertedDeepNumberInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false>, undefined>;
1409
+ } extends infer M ? RemoveEmptyObjects extends true ? keyof M extends never ? IsRoot extends true ? {} : never : _ProcessedObject$1<M, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : Simplify$1<M> : never;
1410
+ type AllPropsAreNumber$1<O> = {
1411
+ [K in keyof O]: O[K] extends number | Number ? true : O[K] extends Record<string, unknown> ? AllPropsAreNumber$1<O[K]> : false;
1412
+ }[keyof O] extends false ? false : true;
1413
+ type _ProcessedObject$1<M, RemoveEmptyObjects extends boolean, RemoveEmptyArrays extends boolean, IsRoot extends boolean> = M extends unknown[] ? ConvertedDeepNumberInternal<M, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : Prettify<Simplify$1<{
1414
+ [K in keyof M]: M[K] extends Record<string, unknown> ? AllPropsAreNumber$1<M[K]> extends true ? {
1415
+ [ChildKey in keyof M[K]]: M[K][ChildKey] extends number | Number ? M[K][ChildKey] | undefined : _ProcessedObject$1<M[K][ChildKey], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1416
+ } | undefined : AndArr<[
1417
+ Extends<RemoveEmptyArrays, true>,
1418
+ Extends<RemoveEmptyObjects, true>
1419
+ ]> extends true ? {
1420
+ [ChildKey in keyof M[K]]: _ProcessChild$1<M[K][ChildKey], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1421
+ } | undefined : {
1422
+ [ChildKey in keyof M[K]]: _ProcessChild$1<M[K][ChildKey], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1423
+ } : M[K] extends unknown[] ? ConvertedDeepNumberInternal<M[K], RemoveEmptyObjects, RemoveEmptyArrays, false> : _ProcessedObject$1<M[K], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1424
+ }>, {
1425
+ recursive: true;
1426
+ }>;
1427
+ type _ProcessChild$1<T, RemoveEmptyObjects extends boolean, RemoveEmptyArrays extends boolean, IsRoot extends boolean> = T extends number | number[] ? ConvertedDeepNumberInternal<T, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : T extends Record<string, unknown> ? _ProcessedObject$1<T, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : _ProcessedObject$1<T, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1314
1428
  /** ----------------------------------------------------------
1315
1429
  * * Public type: Deeply converts numbers/strings to `number | undefined`,
1316
1430
  * * applies empty object/array removal, preserves special types.
1317
1431
  * ----------------------------------------------------------
1318
1432
  * @private ***Narrows types result for {@link toNumberDeep | `toNumberDeep`}.***
1319
1433
  */
1320
- type ConvertedDeepNumber<T,RemoveEmptyObjects extends boolean=false,RemoveEmptyArrays extends boolean=false>=[unknown] extends [T]?unknown:FixNeverArray$1<ConvertedDeepNumberInternal<T,RemoveEmptyObjects,RemoveEmptyArrays,true>,RemoveEmptyArrays>;
1434
+ type ConvertedDeepNumber<T, RemoveEmptyObjects extends boolean = false, RemoveEmptyArrays extends boolean = false> = [unknown] extends [T] ? unknown : FixNeverArray$1<ConvertedDeepNumberInternal<T, RemoveEmptyObjects, RemoveEmptyArrays, true>, RemoveEmptyArrays>;
1321
1435
  /** @private ***Types options for {@link toNumberDeep | `toNumberDeep`}.*** */
1322
- type ToNumberDeepOptions<RemoveEmptyObjects extends boolean=false,RemoveEmptyArrays extends boolean=false>={
1323
- /** Whether to remove empty objects (`{}`) from the result.
1324
- *
1325
- * - `true` ➔ remove empty objects recursively.
1326
- * - `false` **(default)** ➔ keep empty objects as-is.
1327
- *
1328
- * @default false
1329
- */
1330
- removeEmptyObjects?:RemoveEmptyObjects;
1331
- /** Whether to remove empty arrays (`[]`) from the result.
1332
- *
1333
- * - `true` ➔ remove empty arrays recursively.
1334
- * - `false` **(default)** ➔ keep empty arrays as-is.
1335
- *
1336
- * @default false
1337
- */
1338
- removeEmptyArrays?:RemoveEmptyArrays;};
1436
+ type ToNumberDeepOptions<RemoveEmptyObjects extends boolean = false, RemoveEmptyArrays extends boolean = false> = {
1437
+ /** Whether to remove empty objects (`{}`) from the result.
1438
+ *
1439
+ * - `true` ➔ remove empty objects recursively.
1440
+ * - `false` **(default)** ➔ keep empty objects as-is.
1441
+ *
1442
+ * @default false
1443
+ */
1444
+ removeEmptyObjects?: RemoveEmptyObjects;
1445
+ /** Whether to remove empty arrays (`[]`) from the result.
1446
+ *
1447
+ * - `true` ➔ remove empty arrays recursively.
1448
+ * - `false` **(default)** ➔ keep empty arrays as-is.
1449
+ *
1450
+ * @default false
1451
+ */
1452
+ removeEmptyArrays?: RemoveEmptyArrays;
1453
+ };
1454
+
1339
1455
  /** --------------------------------------------------
1340
1456
  * * ***Utility: `toNumberDeep`.***
1341
1457
  * ---------------------------------------------------
@@ -1416,51 +1532,87 @@ removeEmptyArrays?:RemoveEmptyArrays;};
1416
1532
  * // ➔ { z: [] }
1417
1533
  * ```
1418
1534
  */
1419
- declare function toNumberDeep(input?:null|undefined,options?:ToNumberDeepOptions<boolean,boolean>):undefined;declare function toNumberDeep<T,RemoveEmptyObjects extends boolean=false,RemoveEmptyArrays extends boolean=false>(input:T,options?:ToNumberDeepOptions<RemoveEmptyObjects,RemoveEmptyArrays>):ConvertedDeepNumber<T,RemoveEmptyObjects,RemoveEmptyArrays>;
1535
+ declare function toNumberDeep(input?: null | undefined, options?: ToNumberDeepOptions<boolean, boolean>): undefined;
1536
+ declare function toNumberDeep<T, RemoveEmptyObjects extends boolean = false, RemoveEmptyArrays extends boolean = false>(input: T, options?: ToNumberDeepOptions<RemoveEmptyObjects, RemoveEmptyArrays>): ConvertedDeepNumber<T, RemoveEmptyObjects, RemoveEmptyArrays>;
1537
+
1420
1538
  /** ----------------------------------------------------------
1421
1539
  * * Normalize leaked `never[]` into literal empty array `[]`.
1422
1540
  * ---------------------------------------------------------- */
1423
- type FixNeverArray<T,RemoveEmptyArrays extends boolean>=[T] extends [never[]]?RemoveEmptyArrays extends true?OrArr<[Extends<T,undefined>,Extends<undefined,T>]>extends true?undefined:never:[]:T;
1541
+ type FixNeverArray<T, RemoveEmptyArrays extends boolean> = [T] extends [never[]] ? RemoveEmptyArrays extends true ? OrArr<[Extends<T, undefined>, Extends<undefined, T>]> extends true ? undefined : never : [] : T;
1424
1542
  /** ----------------------------------------------------------
1425
1543
  * * Simplify object type to remove unnecessary TypeScript wrappers.
1426
1544
  * ---------------------------------------------------------- */
1427
- type Simplify<T>=T extends object?{[K in keyof T]:T[K];}:T;
1545
+ type Simplify<T> = T extends object ? {
1546
+ [K in keyof T]: T[K];
1547
+ } : T;
1428
1548
  /** ----------------------------------------------------------
1429
1549
  * * Deeply convert all numbers and numeric strings to `string`,
1430
1550
  * * recursively handling arrays, tuples, Sets, Maps, TypedArrays,
1431
1551
  * * Buffer, and objects. Special types like Date remain unchanged.
1432
1552
  * ---------------------------------------------------------- */
1433
- type ConvertedDeepStringInternal<T,RemoveEmptyObjects extends boolean,RemoveEmptyArrays extends boolean,IsRoot extends boolean>=[T] extends [null|undefined]?IsRoot extends true?undefined:never:T extends string|boolean|String|Boolean|Date|RegExp|WebApiObjects|IntlObjects|{[Symbol.toStringTag]:"Proxy";}|typeof Reflect?string:T extends Number|number|`${number}`?string|undefined:AndArr<[Extends<RemoveEmptyArrays,true>,Extends<T,undefined[]>]>extends true?never:T extends readonly(infer E)[]?OrArr<[ Extends<RemoveEmptyArrays,true>,AndArr<[Extends<RemoveEmptyArrays,true>,Extends<IsRoot,true>]>]>extends true?FixNeverArray<Exclude<ConvertedDeepStringInternal<E,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>,RemoveEmptyArrays>[]|undefined:FixNeverArray<Exclude<ConvertedDeepStringInternal<E,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:T extends Set<infer V>?AndArr<[Extends<RemoveEmptyArrays,true>]>extends true?FixNeverArray<Exclude<ConvertedDeepStringInternal<V,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>,RemoveEmptyArrays>:FixNeverArray<Exclude<ConvertedDeepStringInternal<V,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:T extends Map<infer K,infer V>?FixNeverArray<[ Exclude<ConvertedDeepStringInternal<K,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>,Exclude<ConvertedDeepStringInternal<V,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>][],RemoveEmptyArrays>:T extends Buffer?FixNeverArray<Exclude<ConvertedDeepStringInternal<string,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:T extends TypedArray?FixNeverArray<Exclude<ConvertedDeepStringInternal<string,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>,undefined>[],RemoveEmptyArrays>:T extends Record<PropertyKey,unknown>?_ConvertedObjectInternal<T,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:never;
1553
+ type ConvertedDeepStringInternal<T, RemoveEmptyObjects extends boolean, RemoveEmptyArrays extends boolean, IsRoot extends boolean> = [T] extends [null | undefined] ? IsRoot extends true ? undefined : never : T extends string | boolean | String | Boolean | Date | RegExp | WebApiObjects | IntlObjects | {
1554
+ [Symbol.toStringTag]: "Proxy";
1555
+ } | typeof Reflect ? string : T extends Number | number | `${number}` ? string | undefined : AndArr<[Extends<RemoveEmptyArrays, true>, Extends<T, undefined[]>]> extends true ? never : T extends readonly (infer E)[] ? OrArr<[
1556
+ Extends<RemoveEmptyArrays, true>,
1557
+ AndArr<[Extends<RemoveEmptyArrays, true>, Extends<IsRoot, true>]>
1558
+ ]> extends true ? FixNeverArray<Exclude<ConvertedDeepStringInternal<E, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>, RemoveEmptyArrays>[] | undefined : FixNeverArray<Exclude<ConvertedDeepStringInternal<E, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : T extends Set<infer V> ? AndArr<[Extends<RemoveEmptyArrays, true>]> extends true ? FixNeverArray<Exclude<ConvertedDeepStringInternal<V, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>, RemoveEmptyArrays> : FixNeverArray<Exclude<ConvertedDeepStringInternal<V, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : T extends Map<infer K, infer V> ? FixNeverArray<[
1559
+ Exclude<ConvertedDeepStringInternal<K, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>,
1560
+ Exclude<ConvertedDeepStringInternal<V, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>
1561
+ ][], RemoveEmptyArrays> : T extends Buffer ? FixNeverArray<Exclude<ConvertedDeepStringInternal<string, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : T extends TypedArray ? FixNeverArray<Exclude<ConvertedDeepStringInternal<string, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>, undefined>[], RemoveEmptyArrays> : T extends Record<PropertyKey, unknown> ? _ConvertedObjectInternal<T, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : never;
1434
1562
  /** ----------------------------------------------------------
1435
1563
  * * Internal object conversion utility.
1436
1564
  * * Removes empty objects/arrays based on flags.
1437
1565
  * ---------------------------------------------------------- */
1438
- type _ConvertedObjectInternal<O extends Record<string|number|symbol,unknown>|string,RemoveEmptyObjects extends boolean,RemoveEmptyArrays extends boolean,IsRoot extends boolean>={[K in keyof O as Exclude<ConvertedDeepStringInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>,undefined>extends infer Convert?[Convert] extends [never]?never:undefined extends ConvertedDeepStringInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>?never:RemoveEmptyArrays extends true?Convert extends readonly unknown[]?[Convert] extends [[]]?never:K:K:K:never]:Exclude<ConvertedDeepStringInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>,undefined>;}&{[K in keyof O as Exclude<ConvertedDeepStringInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>,undefined>extends infer Convert?[Convert] extends [never]?never:undefined extends ConvertedDeepStringInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>?RemoveEmptyArrays extends true?Convert extends readonly unknown[]?[Convert] extends [[]]?never:K:K:K:never:never]?:Exclude<ConvertedDeepStringInternal<O[K],RemoveEmptyObjects,RemoveEmptyArrays,false>,undefined>;}extends infer M?RemoveEmptyObjects extends true?keyof M extends never?IsRoot extends true?{}:never:_ProcessedObject<M,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:Simplify<M>:never;type AllPropsAreNumber<O>={[K in keyof O]:O[K] extends number|Number?true:O[K] extends Record<string,unknown>?AllPropsAreNumber<O[K]>:false;}[keyof O] extends false?false:true;type _ProcessedObject<M,RemoveEmptyObjects extends boolean,RemoveEmptyArrays extends boolean,IsRoot extends boolean>=M extends unknown[]?ConvertedDeepStringInternal<M,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:Prettify<Simplify<{[K in keyof M]:M[K] extends Record<string,unknown>?AllPropsAreNumber<M[K]>extends true?{[ChildKey in keyof M[K]]:M[K][ChildKey] extends number|Number?M[K][ChildKey]|undefined:_ProcessedObject<M[K][ChildKey],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;}|undefined:AndArr<[ Extends<RemoveEmptyArrays,true>,Extends<RemoveEmptyObjects,true>]>extends true?{[ChildKey in keyof M[K]]:_ProcessChild<M[K][ChildKey],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;}|undefined:{[ChildKey in keyof M[K]]:_ProcessChild<M[K][ChildKey],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;}:M[K] extends unknown[]?ConvertedDeepStringInternal<M[K],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:_ProcessedObject<M[K],RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;}>,{recursive:true;}>;type _ProcessChild<T,RemoveEmptyObjects extends boolean,RemoveEmptyArrays extends boolean,IsRoot extends boolean>=T extends number|Number[]?ConvertedDeepStringInternal<T,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:T extends Record<string,unknown>?_ProcessedObject<T,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>:_ProcessedObject<T,RemoveEmptyObjects,RemoveEmptyArrays,IsRoot>;
1566
+ type _ConvertedObjectInternal<O extends Record<string | number | symbol, unknown> | string, RemoveEmptyObjects extends boolean, RemoveEmptyArrays extends boolean, IsRoot extends boolean> = {
1567
+ [K in keyof O as Exclude<ConvertedDeepStringInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false>, undefined> extends infer Convert ? [Convert] extends [never] ? never : undefined extends ConvertedDeepStringInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false> ? never : RemoveEmptyArrays extends true ? Convert extends readonly unknown[] ? [Convert] extends [[]] ? never : K : K : K : never]: Exclude<ConvertedDeepStringInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false>, undefined>;
1568
+ } & {
1569
+ [K in keyof O as Exclude<ConvertedDeepStringInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false>, undefined> extends infer Convert ? [Convert] extends [never] ? never : undefined extends ConvertedDeepStringInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false> ? RemoveEmptyArrays extends true ? Convert extends readonly unknown[] ? [Convert] extends [[]] ? never : K : K : K : never : never]?: Exclude<ConvertedDeepStringInternal<O[K], RemoveEmptyObjects, RemoveEmptyArrays, false>, undefined>;
1570
+ } extends infer M ? RemoveEmptyObjects extends true ? keyof M extends never ? IsRoot extends true ? {} : never : _ProcessedObject<M, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : Simplify<M> : never;
1571
+ type AllPropsAreNumber<O> = {
1572
+ [K in keyof O]: O[K] extends number | Number ? true : O[K] extends Record<string, unknown> ? AllPropsAreNumber<O[K]> : false;
1573
+ }[keyof O] extends false ? false : true;
1574
+ type _ProcessedObject<M, RemoveEmptyObjects extends boolean, RemoveEmptyArrays extends boolean, IsRoot extends boolean> = M extends unknown[] ? ConvertedDeepStringInternal<M, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : Prettify<Simplify<{
1575
+ [K in keyof M]: M[K] extends Record<string, unknown> ? AllPropsAreNumber<M[K]> extends true ? {
1576
+ [ChildKey in keyof M[K]]: M[K][ChildKey] extends number | Number ? M[K][ChildKey] | undefined : _ProcessedObject<M[K][ChildKey], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1577
+ } | undefined : AndArr<[
1578
+ Extends<RemoveEmptyArrays, true>,
1579
+ Extends<RemoveEmptyObjects, true>
1580
+ ]> extends true ? {
1581
+ [ChildKey in keyof M[K]]: _ProcessChild<M[K][ChildKey], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1582
+ } | undefined : {
1583
+ [ChildKey in keyof M[K]]: _ProcessChild<M[K][ChildKey], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1584
+ } : M[K] extends unknown[] ? ConvertedDeepStringInternal<M[K], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : _ProcessedObject<M[K], RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1585
+ }>, {
1586
+ recursive: true;
1587
+ }>;
1588
+ type _ProcessChild<T, RemoveEmptyObjects extends boolean, RemoveEmptyArrays extends boolean, IsRoot extends boolean> = T extends number | Number[] ? ConvertedDeepStringInternal<T, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : T extends Record<string, unknown> ? _ProcessedObject<T, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot> : _ProcessedObject<T, RemoveEmptyObjects, RemoveEmptyArrays, IsRoot>;
1439
1589
  /** ----------------------------------------------------------
1440
1590
  * * Public type: Deeply converts numbers/strings to `string`,
1441
1591
  * * applies empty object/array removal, preserves special types.
1442
1592
  * ----------------------------------------------------------
1443
1593
  * @private ***Narrows types result for {@link toStringDeep | `toStringDeep`}.***
1444
1594
  */
1445
- type ConvertedDeepString<T,RemoveEmptyObjects extends boolean=false,RemoveEmptyArrays extends boolean=false>=[unknown] extends [T]?unknown:FixNeverArray<Simplify<ConvertedDeepStringInternal<T,RemoveEmptyObjects,RemoveEmptyArrays,true>>,RemoveEmptyArrays>;
1595
+ type ConvertedDeepString<T, RemoveEmptyObjects extends boolean = false, RemoveEmptyArrays extends boolean = false> = [unknown] extends [T] ? unknown : FixNeverArray<Simplify<ConvertedDeepStringInternal<T, RemoveEmptyObjects, RemoveEmptyArrays, true>>, RemoveEmptyArrays>;
1446
1596
  /** @private ***Types options for {@link toStringDeep | `toStringDeep`}.*** */
1447
- type ToStringDeepOptions<RemoveEmptyObjects extends boolean=false,RemoveEmptyArrays extends boolean=false>={
1448
- /** Whether to remove empty objects (`{}`) from the result.
1449
- *
1450
- * - `true` ➔ remove empty objects recursively.
1451
- * - `false` **(default)** ➔ keep empty objects as-is.
1452
- *
1453
- * @default false
1454
- */
1455
- removeEmptyObjects?:RemoveEmptyObjects;
1456
- /** Whether to remove empty arrays (`[]`) from the result.
1457
- *
1458
- * - `true` ➔ remove empty arrays recursively.
1459
- * - `false` **(default)** ➔ keep empty arrays as-is.
1460
- *
1461
- * @default false
1462
- */
1463
- removeEmptyArrays?:RemoveEmptyArrays;};
1597
+ type ToStringDeepOptions<RemoveEmptyObjects extends boolean = false, RemoveEmptyArrays extends boolean = false> = {
1598
+ /** Whether to remove empty objects (`{}`) from the result.
1599
+ *
1600
+ * - `true` ➔ remove empty objects recursively.
1601
+ * - `false` **(default)** ➔ keep empty objects as-is.
1602
+ *
1603
+ * @default false
1604
+ */
1605
+ removeEmptyObjects?: RemoveEmptyObjects;
1606
+ /** Whether to remove empty arrays (`[]`) from the result.
1607
+ *
1608
+ * - `true` ➔ remove empty arrays recursively.
1609
+ * - `false` **(default)** ➔ keep empty arrays as-is.
1610
+ *
1611
+ * @default false
1612
+ */
1613
+ removeEmptyArrays?: RemoveEmptyArrays;
1614
+ };
1615
+
1464
1616
  /** --------------------------------------------------
1465
1617
  * * ***Utility: `toStringDeep`.***
1466
1618
  * ---------------------------------------------------
@@ -1552,7 +1704,9 @@ removeEmptyArrays?:RemoveEmptyArrays;};
1552
1704
  * // ➔ undefined
1553
1705
  * ```
1554
1706
  */
1555
- declare function toStringDeep(input?:null|undefined,options?:ToStringDeepOptions<boolean,boolean>):undefined;declare function toStringDeep<T,RemoveEmptyObjects extends boolean=false,RemoveEmptyArrays extends boolean=false>(input:T,options?:ToStringDeepOptions<RemoveEmptyObjects,RemoveEmptyArrays>):ConvertedDeepString<T,RemoveEmptyObjects,RemoveEmptyArrays>;
1707
+ declare function toStringDeep(input?: null | undefined, options?: ToStringDeepOptions<boolean, boolean>): undefined;
1708
+ declare function toStringDeep<T, RemoveEmptyObjects extends boolean = false, RemoveEmptyArrays extends boolean = false>(input: T, options?: ToStringDeepOptions<RemoveEmptyObjects, RemoveEmptyArrays>): ConvertedDeepString<T, RemoveEmptyObjects, RemoveEmptyArrays>;
1709
+
1556
1710
  /** ----------------------------------------------------------
1557
1711
  * * ***Utility: `toStringDeepForce`.***
1558
1712
  * ---------------------------------------------
@@ -1634,4 +1788,6 @@ declare function toStringDeep(input?:null|undefined,options?:ToStringDeepOptions
1634
1788
  * toStringDeepForce([1, "a", { b: 2 }], false);
1635
1789
  * // ➔ [1, "a", { b: 2 }]
1636
1790
  */
1637
- declare function toStringDeepForce<T>(value:unknown,forceToString:false|"stringOrNumber"|"primitives"|"all"):T;export{cleanParsedData,convertType,dedupeArray,extractDigits,filterNilArray,parseCurrencyString,parseCustomDate,removeObjectPaths,safeJsonParse,safeStableStringify,toBooleanContent,toBooleanContentDeep,toBooleanExplicit,toBooleanLoose,toNumberArrayUnRecursive,toNumberDeep,toStringArrayUnRecursive,toStringDeep,toStringDeepForce};
1791
+ declare function toStringDeepForce<T>(value: unknown, forceToString: false | "stringOrNumber" | "primitives" | "all"): T;
1792
+
1793
+ export { cleanParsedData, convertType, dedupeArray, extractDigits, filterNilArray, parseCurrencyString, parseCustomDate, removeObjectPaths, safeJsonParse, safeStableStringify, toBooleanContent, toBooleanContentDeep, toBooleanExplicit, toBooleanLoose, toNumberArrayUnRecursive, toNumberDeep, toStringArrayUnRecursive, toStringDeep, toStringDeepForce };