@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.
- package/README.md +131 -129
- package/dist/assertions/index.cjs +11 -11
- package/dist/assertions/index.d.ts +487 -215
- package/dist/assertions/index.js +5 -5
- package/dist/{chunk-SN5HAK3Y.js → chunk-22V4WP3H.js} +4 -4
- package/dist/{chunk-EJV5AF4L.js → chunk-2XSZ2ANI.js} +2 -2
- package/dist/{chunk-OSSFLQDD.js → chunk-3T6VSWYX.js} +2 -2
- package/dist/{chunk-3LE6NX57.js → chunk-5WIEDF2J.js} +4 -4
- package/dist/{chunk-WLEZ2KSG.cjs → chunk-6EDFZJZ5.cjs} +126 -126
- package/dist/{chunk-GHU356XQ.js → chunk-6LXWT2I5.js} +3 -3
- package/dist/{chunk-GKDSBOYE.js → chunk-6YGBRENU.js} +3 -3
- package/dist/{chunk-NAOVH4OH.cjs → chunk-7FGNVDEV.cjs} +7 -7
- package/dist/{chunk-X6ULJZ3X.js → chunk-AXDYWO67.js} +2 -2
- package/dist/{chunk-UV5BKAYW.cjs → chunk-B6PMNZ4M.cjs} +7 -7
- package/dist/chunk-BAV5T2E3.cjs +1 -1
- package/dist/{chunk-YHFRCVTN.js → chunk-BLF7SD66.js} +3 -3
- package/dist/{chunk-QZI5PVCI.cjs → chunk-BMZZXZJ2.cjs} +4 -4
- package/dist/{chunk-DXPM4NOU.js → chunk-BOYP3ARU.js} +4 -4
- package/dist/{chunk-UXT4XSUK.js → chunk-BPYW5YL7.js} +2 -2
- package/dist/{chunk-QGTFQ7RO.cjs → chunk-C2PV3VWC.cjs} +6 -6
- package/dist/{chunk-MZ3T6L7Z.js → chunk-CCJ2MSN7.js} +2 -2
- package/dist/{chunk-H44QVAZL.cjs → chunk-DAPAK2W3.cjs} +31 -31
- package/dist/{chunk-OYFUBKEG.cjs → chunk-DLS3G6WQ.cjs} +4 -4
- package/dist/{chunk-MS2KSKD7.js → chunk-DNMCR5JH.js} +9 -9
- package/dist/chunk-DVMHRLKP.cjs +1 -1
- package/dist/{chunk-IX6PF5ZP.cjs → chunk-EBYFYZW4.cjs} +4 -4
- package/dist/{chunk-5Y6JL47L.js → chunk-ENMRZ4BE.js} +3 -3
- package/dist/{chunk-7EIFPHV3.js → chunk-FJ4BQFVO.js} +8 -8
- package/dist/{chunk-TJ5OY6MC.cjs → chunk-GIKL4PUF.cjs} +10 -10
- package/dist/{chunk-M5QB2GM5.js → chunk-GOFINGT6.js} +2 -2
- package/dist/{chunk-J6VLFVIL.js → chunk-GXKQ3LHF.js} +3 -3
- package/dist/{chunk-5KDVIEVO.js → chunk-HNBRGN4R.js} +2 -2
- package/dist/{chunk-OCTHWEZK.cjs → chunk-HYN6FC5A.cjs} +34 -34
- package/dist/{chunk-MBFVTGYS.js → chunk-IZGVBYFN.js} +4 -4
- package/dist/{chunk-QXTJVDWE.js → chunk-JIE447J5.js} +3 -3
- package/dist/{chunk-UFYMRRJH.cjs → chunk-JXEIJM5M.cjs} +61 -61
- package/dist/{chunk-WB3FT62A.js → chunk-K47GZDBH.js} +3 -3
- package/dist/{chunk-KUVRZ2JW.cjs → chunk-K5536YHG.cjs} +50 -50
- package/dist/chunk-KHO2SBNA.cjs +1 -1
- package/dist/{chunk-NJ24M6ZH.cjs → chunk-KXJ7X325.cjs} +37 -37
- package/dist/chunk-L5RDAVVH.js +1 -1
- package/dist/{chunk-SRWL4YCP.js → chunk-LJHPTLWB.js} +7 -7
- package/dist/{chunk-6AMDHVS2.cjs → chunk-M7ELWZXM.cjs} +9 -9
- package/dist/chunk-MSUW5VHZ.js +1590 -0
- package/dist/{chunk-2XGQQZ6A.cjs → chunk-MUHRPRR7.cjs} +3 -3
- package/dist/{chunk-XYWC4EQ3.cjs → chunk-MV3TSQSH.cjs} +71 -71
- package/dist/{chunk-VCYXNIZ2.cjs → chunk-NLZLXWAU.cjs} +9 -9
- package/dist/{chunk-76ATVDCR.cjs → chunk-NVRZPF5M.cjs} +3 -3
- package/dist/chunk-ONZFBJVW.js +1 -1
- package/dist/{chunk-62FS7WMB.cjs → chunk-PGNL7JXO.cjs} +31 -31
- package/dist/{chunk-JI57K7D4.cjs → chunk-Q4GEQS7X.cjs} +161 -161
- package/dist/chunk-QNKGP5DY.js +1 -1
- package/dist/{chunk-ZTHJQJ5F.cjs → chunk-QYI2VJLS.cjs} +9 -9
- package/dist/{chunk-C7GC2PFX.js → chunk-RBWZII5I.js} +3 -3
- package/dist/{chunk-MMRHKYT6.cjs → chunk-RMP7VMPB.cjs} +12 -12
- package/dist/{chunk-TXOVQZPU.js → chunk-RZOGBYIS.js} +2 -2
- package/dist/{chunk-ALRISPTL.cjs → chunk-SU3UELUB.cjs} +3 -3
- package/dist/chunk-SYHPSOUU.cjs +1626 -0
- package/dist/{chunk-R2DR7SPJ.js → chunk-SZUNAEMR.js} +6 -6
- package/dist/{chunk-YVRUY4EW.cjs → chunk-TER22LO4.cjs} +8 -8
- package/dist/{chunk-WRGN6UBK.js → chunk-TJHGRQ4P.js} +2 -2
- package/dist/{chunk-I33PB44Q.cjs → chunk-U23I7JPB.cjs} +15 -15
- package/dist/{chunk-VBSLIIDB.js → chunk-U7HHN47R.js} +10 -10
- package/dist/chunk-UDA26MCU.cjs +1 -1
- package/dist/{chunk-44X74C26.js → chunk-UIAWUZ4H.js} +4 -4
- package/dist/{chunk-5O66AUEC.js → chunk-ULQPCIA2.js} +2 -2
- package/dist/chunk-VJDDGRIK.cjs +1 -1
- package/dist/{chunk-6WVOUVWD.js → chunk-WETQI6HM.js} +9 -9
- package/dist/{chunk-FWWPEL7J.cjs → chunk-WLOQQFDS.cjs} +3 -3
- package/dist/chunk-WVSPXFTY.js +1 -1
- package/dist/{chunk-WKM6UVMG.cjs → chunk-WXFTVXBF.cjs} +4 -4
- package/dist/{chunk-YQHJB7KR.cjs → chunk-XPVTIGU2.cjs} +26 -26
- package/dist/{chunk-PWKOFPAH.cjs → chunk-XX6RUGTM.cjs} +3 -3
- package/dist/chunk-YWHHVDT4.js +1 -1
- package/dist/{chunk-7NXFGJJE.cjs → chunk-ZPDMWDGZ.cjs} +14 -14
- package/dist/{chunk-JYOCB6OV.js → chunk-ZVWZEGQP.js} +2 -2
- package/dist/conversions/index.cjs +34 -34
- package/dist/conversions/index.d.ts +489 -333
- package/dist/conversions/index.js +15 -15
- package/dist/events/index.cjs +8 -8
- package/dist/events/index.d.ts +35 -29
- package/dist/events/index.js +4 -4
- package/dist/formatters/index.cjs +19 -19
- package/dist/formatters/index.d.ts +917 -873
- package/dist/formatters/index.js +9 -9
- package/dist/generators/index.cjs +9 -9
- package/dist/generators/index.d.ts +104 -86
- package/dist/generators/index.js +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/isPlainObject-0p3VveWr.d.ts +534 -0
- package/dist/next/index.cjs +37 -37
- package/dist/next/index.d.ts +36 -21
- package/dist/next/index.js +9 -9
- package/dist/next/server/index.cjs +4 -4
- package/dist/next/server/index.d.ts +6 -3
- package/dist/next/server/index.js +2 -2
- package/dist/operations/index.cjs +11 -11
- package/dist/operations/index.d.ts +14 -5
- package/dist/operations/index.js +8 -8
- package/dist/parsers/index.cjs +6 -6
- package/dist/parsers/index.d.ts +68 -65
- package/dist/parsers/index.js +5 -5
- package/dist/predicates/index.cjs +77 -77
- package/dist/predicates/index.d.ts +442 -258
- package/dist/predicates/index.js +14 -14
- package/dist/promises/index.cjs +6 -6
- package/dist/promises/index.d.ts +28 -16
- package/dist/promises/index.js +4 -4
- package/dist/rzl-utils.global.js +2 -2
- package/dist/strings/index.cjs +23 -23
- package/dist/strings/index.d.ts +82 -54
- package/dist/strings/index.js +7 -7
- package/dist/tailwind/index.cjs +13 -13
- package/dist/tailwind/index.d.ts +186 -169
- package/dist/tailwind/index.js +5 -5
- package/dist/urls/index.cjs +23 -23
- package/dist/urls/index.d.ts +252 -229
- package/dist/urls/index.js +16 -16
- package/package.json +6 -4
- package/dist/chunk-7C7TQC5J.cjs +0 -620
- package/dist/chunk-J4TT33ZX.js +0 -584
- package/dist/isPlainObject-BTPjv6zB.d.ts +0 -178
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
* ====================================================
|
|
3
3
|
* Rzl Utils-JS.
|
|
4
4
|
* ----------------------------------------------------
|
|
5
|
-
* Version: 3.
|
|
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';
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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?:
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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,
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
|
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[]
|
|
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[]
|
|
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[],
|
|
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
|
|
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;
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
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
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
convertNumbers?:boolean;
|
|
605
|
-
/** --------------------------------------------------
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
convertNaN?:boolean;
|
|
612
|
-
/** --------------------------------------------------
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
convertBooleans?:boolean;
|
|
619
|
-
/** --------------------------------------------------
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
convertDates?:boolean;
|
|
626
|
-
/** --------------------------------------------------
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
customDateFormats?:string[];
|
|
633
|
-
/** --------------------------------------------------
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
removeNulls?:boolean;
|
|
640
|
-
/** --------------------------------------------------
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
removeUndefined?:boolean;
|
|
651
|
-
/** --------------------------------------------------
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
removeEmptyObjects?:boolean;
|
|
658
|
-
/** --------------------------------------------------
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
removeEmptyArrays?:boolean;
|
|
665
|
-
/** --------------------------------------------------
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
strictMode?:boolean;
|
|
672
|
-
/** --------------------------------------------------
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
loggingOnFail?:boolean;
|
|
679
|
-
/** --------------------------------------------------
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
onError?:(error:Error)=>void;
|
|
691
|
-
/** --------------------------------------------------
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
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
|
|
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|
|
|
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={
|
|
810
|
+
type UnknownValue = {
|
|
811
|
+
undefined: true;
|
|
812
|
+
};
|
|
756
813
|
/** @private ***The narrows type result for {@link safeJsonParse | `safeJsonParse`}.*** */
|
|
757
|
-
type SafeJsonParseResult<TData,T
|
|
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
|
|
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)=>
|
|
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
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
key:DotPath<T>;
|
|
979
|
-
/** ------------------------------------------------------------------------
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
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>[]
|
|
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
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
sortKeys?:boolean;
|
|
1097
|
-
/** -------------------------------------------------
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
sortArray?:boolean;
|
|
1107
|
-
/** -------------------------------------------------
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
pretty?:boolean;
|
|
1117
|
-
/** -------------------------------------------------
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
removeEmptyObjects?:RemoveEmptyObjects;
|
|
1331
|
-
/** Whether to remove empty arrays (`[]`) from the result.
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
removeEmptyObjects?:RemoveEmptyObjects;
|
|
1456
|
-
/** Whether to remove empty arrays (`[]`) from the result.
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
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;
|
|
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;
|
|
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 };
|