nhb-toolbox 2.8.9 → 2.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/form/convert.d.ts +6 -11
- package/dist/form/convert.d.ts.map +1 -1
- package/dist/form/convert.js +205 -23
- package/dist/form/guards.d.ts +6 -0
- package/dist/form/guards.d.ts.map +1 -1
- package/dist/form/guards.js +17 -0
- package/dist/form/types.d.ts +6 -1
- package/dist/form/types.d.ts.map +1 -1
- package/dist/guards/non-primitives.d.ts +17 -5
- package/dist/guards/non-primitives.d.ts.map +1 -1
- package/dist/guards/non-primitives.js +21 -5
- package/dist/guards/primitives.js +1 -1
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/object/basics.d.ts +0 -14
- package/dist/object/basics.d.ts.map +1 -1
- package/dist/object/basics.js +0 -20
- package/dist/object/objectify.d.ts.map +1 -1
- package/dist/object/objectify.js +6 -5
- package/dist/object/sanitize.d.ts.map +1 -1
- package/dist/object/sanitize.js +3 -3
- package/dist/object/types.d.ts +14 -10
- package/dist/object/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/form/transform.d.ts +0 -12
- package/dist/form/transform.d.ts.map +0 -1
- package/dist/form/transform.js +0 -175
package/dist/form/convert.d.ts
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import type { GenericObject } from '../object/types';
|
|
2
|
+
import type { FormDataConfigs } from './types';
|
|
2
3
|
/**
|
|
3
|
-
* * Utility to convert object into FormData.
|
|
4
|
+
* * Utility to convert object into FormData in a controlled way.
|
|
4
5
|
*
|
|
5
|
-
* @param data
|
|
6
|
-
* @
|
|
6
|
+
* @param data - The source object to control and convert to FormData.
|
|
7
|
+
* @param configs - Configuration options to control the formData.
|
|
8
|
+
* @returns `FormData` instance containing the sanitized and transformed data.
|
|
7
9
|
*/
|
|
8
|
-
export declare const
|
|
9
|
-
/**
|
|
10
|
-
* * Check if a formdata object is empty.
|
|
11
|
-
*
|
|
12
|
-
* @param data FormData to check.
|
|
13
|
-
* @returns Boolean (`true`/`false`) Whether the formdata is empty.
|
|
14
|
-
*/
|
|
15
|
-
export declare const isEmptyFormData: (data: FormData) => boolean;
|
|
10
|
+
export declare const createControlledFormData: <T extends GenericObject>(data: T, configs?: FormDataConfigs<T>) => FormData;
|
|
16
11
|
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/form/convert.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/form/convert.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEX,aAAa,EAEb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,aAAa,QACzD,CAAC,YACG,eAAe,CAAC,CAAC,CAAC,KAC1B,QAiPF,CAAC"}
|
package/dist/form/convert.js
CHANGED
|
@@ -1,31 +1,213 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isEmptyObject, isNotEmptyObject, isValidArray, } from '../guards/non-primitives';
|
|
2
|
+
import { isNonEmptyString } from '../guards/primitives';
|
|
3
|
+
import { isCustomFile, isCustomFileArray, isFileUpload } from './guards';
|
|
2
4
|
/**
|
|
3
|
-
* * Utility to convert object into FormData.
|
|
5
|
+
* * Utility to convert object into FormData in a controlled way.
|
|
4
6
|
*
|
|
5
|
-
* @param data
|
|
6
|
-
* @
|
|
7
|
+
* @param data - The source object to control and convert to FormData.
|
|
8
|
+
* @param configs - Configuration options to control the formData.
|
|
9
|
+
* @returns `FormData` instance containing the sanitized and transformed data.
|
|
7
10
|
*/
|
|
8
|
-
export const
|
|
11
|
+
export const createControlledFormData = (data, configs) => {
|
|
9
12
|
const formData = new FormData();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
const { stringifyNested = '*' } = configs || {};
|
|
14
|
+
/** - Helper to check if a key should be lowercase */
|
|
15
|
+
const shouldLowercaseKeys = (key) => {
|
|
16
|
+
return Array.isArray(configs?.lowerCaseKeys) ?
|
|
17
|
+
configs.lowerCaseKeys.some((path) => key === path || key.startsWith(`${path}.`))
|
|
18
|
+
: configs?.lowerCaseKeys === '*';
|
|
19
|
+
};
|
|
20
|
+
/** - Helper to check if a key should be lowercase */
|
|
21
|
+
const shouldLowercaseValue = (key) => {
|
|
22
|
+
return Array.isArray(configs?.lowerCaseValues) ?
|
|
23
|
+
configs.lowerCaseValues.some((path) => key === path || key.startsWith(`${path}.`))
|
|
24
|
+
: configs?.lowerCaseValues === '*';
|
|
25
|
+
};
|
|
26
|
+
/** - Transforms key to lowercase if needed */
|
|
27
|
+
const _transformKey = (key) => {
|
|
28
|
+
return shouldLowercaseKeys(key) ? key.toLowerCase() : key;
|
|
29
|
+
};
|
|
30
|
+
/** - Helper function to check if a key matches a breakArray key. */
|
|
31
|
+
const isRequiredKey = (key) => {
|
|
32
|
+
const transformedKey = _transformKey(key);
|
|
33
|
+
return Array.isArray(configs?.requiredKeys) ?
|
|
34
|
+
configs.requiredKeys.some((path) => transformedKey === path ||
|
|
35
|
+
transformedKey.startsWith(`${path}.`))
|
|
36
|
+
: configs?.requiredKeys === '*';
|
|
37
|
+
};
|
|
38
|
+
/** - Helper function to check if a key matches a dotNotation path to preserve. */
|
|
39
|
+
const shouldDotNotate = (key) => {
|
|
40
|
+
const transformedKey = _transformKey(key);
|
|
41
|
+
return Array.isArray(configs?.dotNotateNested) ?
|
|
42
|
+
configs.dotNotateNested.includes(transformedKey)
|
|
43
|
+
: configs?.dotNotateNested === '*';
|
|
44
|
+
};
|
|
45
|
+
/** - Helper function to check if a key matches a stringifyNested key. */
|
|
46
|
+
const shouldStringify = (key) => {
|
|
47
|
+
const transformedKey = _transformKey(key);
|
|
48
|
+
return Array.isArray(stringifyNested) ?
|
|
49
|
+
stringifyNested.includes(transformedKey)
|
|
50
|
+
: stringifyNested === '*';
|
|
51
|
+
};
|
|
52
|
+
/** - Helper function to check if a key matches a breakArray key. */
|
|
53
|
+
const shouldBreakArray = (key) => {
|
|
54
|
+
const transformedKey = _transformKey(key);
|
|
55
|
+
return Array.isArray(configs?.breakArray) ?
|
|
56
|
+
configs.breakArray.includes(transformedKey)
|
|
57
|
+
: configs?.breakArray === '*';
|
|
58
|
+
};
|
|
59
|
+
/** - Helper to clean object by removing null/undefined/empty values while respecting required keys */
|
|
60
|
+
const _cleanObject = (obj, parentKey = '') => {
|
|
61
|
+
return Object.entries(obj).reduce((acc, [key, value]) => {
|
|
62
|
+
const transformedKey = _transformKey(key);
|
|
63
|
+
const fullKey = parentKey ? `${parentKey}.${transformedKey}` : transformedKey;
|
|
64
|
+
// * Skip ignored keys (don't include them in the cleaned object)
|
|
65
|
+
if (configs?.ignoreKeys?.includes(fullKey)) {
|
|
66
|
+
return acc;
|
|
67
|
+
}
|
|
68
|
+
const isNotNullish = value != null && value !== '';
|
|
69
|
+
// * Keep value if:
|
|
70
|
+
// * 1. It's required OR
|
|
71
|
+
// * 2. It's not null/undefined AND not empty string/object
|
|
72
|
+
const shouldKeep = isRequiredKey(fullKey) ||
|
|
73
|
+
isNotNullish ||
|
|
74
|
+
isNonEmptyString(value) ||
|
|
75
|
+
isValidArray(value) ||
|
|
76
|
+
isNotEmptyObject(value);
|
|
77
|
+
if (shouldKeep) {
|
|
78
|
+
if (isNotEmptyObject(value)) {
|
|
79
|
+
// * Recursively clean nested objects
|
|
80
|
+
const cleaned = _cleanObject(value, fullKey);
|
|
81
|
+
if (isRequiredKey(fullKey) || isNotEmptyObject(cleaned)) {
|
|
82
|
+
acc[_transformKey(key)] = cleaned;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
if (typeof value === 'string') {
|
|
87
|
+
acc[_transformKey(key)] = value.toLowerCase();
|
|
88
|
+
}
|
|
89
|
+
else if (Array.isArray(value)) {
|
|
90
|
+
if (isRequiredKey(fullKey) || isValidArray(value)) {
|
|
91
|
+
acc[_transformKey(key)] = value;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (isEmptyObject(value)) {
|
|
95
|
+
if (isRequiredKey(fullKey)) {
|
|
96
|
+
acc[_transformKey(key)] = value;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
acc[_transformKey(key)] = value;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return acc;
|
|
105
|
+
}, {});
|
|
106
|
+
};
|
|
107
|
+
/** * Helper function to add values to formData */
|
|
108
|
+
const _addToFormData = (key, value) => {
|
|
109
|
+
const transformedKey = _transformKey(key);
|
|
110
|
+
if (isCustomFileArray(value)) {
|
|
111
|
+
value.forEach((file) => formData.append(transformedKey, file.originFileObj));
|
|
13
112
|
}
|
|
14
|
-
else if (value
|
|
15
|
-
|
|
113
|
+
else if (isFileUpload(value)) {
|
|
114
|
+
if (value.fileList) {
|
|
115
|
+
value.fileList.forEach((file) => formData.append(transformedKey, file.originFileObj));
|
|
116
|
+
}
|
|
117
|
+
else if (value.file) {
|
|
118
|
+
if (isCustomFile(value.file)) {
|
|
119
|
+
formData.append(transformedKey, value.file.originFileObj);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
formData.append(transformedKey, value.file);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
16
125
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
126
|
+
else if (value instanceof Blob || value instanceof File) {
|
|
127
|
+
formData.append(transformedKey, value);
|
|
128
|
+
}
|
|
129
|
+
// else if (value instanceof FileList) {
|
|
130
|
+
// for (let i = 0; i < value.length; i++) {
|
|
131
|
+
// formData.append(transformedKey, value.item(i) as File);
|
|
132
|
+
// }
|
|
133
|
+
// }
|
|
134
|
+
else if (Array.isArray(value)) {
|
|
135
|
+
if (isValidArray(value)) {
|
|
136
|
+
if (shouldBreakArray(key)) {
|
|
137
|
+
value.forEach((item, index) => {
|
|
138
|
+
_addToFormData(`${transformedKey}[${index}]`, item);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
formData.append(transformedKey, JSON.stringify(value));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else if (isRequiredKey(key)) {
|
|
146
|
+
formData.append(transformedKey, JSON.stringify(value));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else if (isNotEmptyObject(value)) {
|
|
150
|
+
if (shouldStringify(key) && !shouldDotNotate(key)) {
|
|
151
|
+
// * Clean object before stringifying, preserving required keys
|
|
152
|
+
const cleanedValue = _cleanObject(value, key);
|
|
153
|
+
if (isNotEmptyObject(cleanedValue) || isRequiredKey(key)) {
|
|
154
|
+
formData.append(transformedKey, JSON.stringify(cleanedValue));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
Object.entries(value).forEach(([nestedKey, nestedValue]) => {
|
|
159
|
+
_addToFormData(`${key}.${nestedKey}`, nestedValue);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const isNotNullish = value != null && value !== '';
|
|
165
|
+
if (isNotNullish || isRequiredKey(key)) {
|
|
166
|
+
if (typeof value === 'string' && shouldLowercaseValue(key)) {
|
|
167
|
+
formData.append(transformedKey, value.toLowerCase());
|
|
168
|
+
}
|
|
169
|
+
// else if (isRequiredKey(key) || isNotEmptyObject(value)) {
|
|
170
|
+
// formData.append(transformedKey, JSON.stringify(value));
|
|
171
|
+
// }
|
|
172
|
+
else {
|
|
173
|
+
formData.append(transformedKey, value);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
/** - Helper to process object */
|
|
179
|
+
const _processObject = (obj, parentKey = '') => {
|
|
180
|
+
Object.entries(obj).forEach(([key, value]) => {
|
|
181
|
+
const transformedKey = _transformKey(key);
|
|
182
|
+
const fullKey = parentKey ? `${parentKey}.${transformedKey}` : transformedKey;
|
|
183
|
+
// * Skip keys that are in ignoreKeys
|
|
184
|
+
if (configs?.ignoreKeys?.includes(fullKey))
|
|
185
|
+
return;
|
|
186
|
+
// * Trim string values if trimStrings is enabled
|
|
187
|
+
if (configs?.trimStrings && typeof value === 'string') {
|
|
188
|
+
value = value.trim();
|
|
189
|
+
}
|
|
190
|
+
// * Check if this key is preserved as dot-notation
|
|
191
|
+
if (shouldDotNotate(fullKey)) {
|
|
192
|
+
_addToFormData(fullKey, value);
|
|
193
|
+
}
|
|
194
|
+
else if (isNotEmptyObject(value) && !shouldStringify(fullKey)) {
|
|
195
|
+
// * Process nested objects
|
|
196
|
+
_processObject(value, key);
|
|
197
|
+
}
|
|
198
|
+
else if (isEmptyObject(value)) {
|
|
199
|
+
if (isRequiredKey(fullKey)) {
|
|
200
|
+
_addToFormData(key, JSON.stringify(value));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
// * For other cases, just append as key-value
|
|
205
|
+
_addToFormData(key, value);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
};
|
|
209
|
+
if (isNotEmptyObject(data)) {
|
|
210
|
+
_processObject(data);
|
|
29
211
|
}
|
|
30
|
-
|
|
212
|
+
return formData;
|
|
31
213
|
};
|
package/dist/form/guards.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { CustomFile, FileUpload, OriginFileObj } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* * Checks if a given value is a valid `FormData` & it's not empty.
|
|
4
|
+
* @param value - The value to check.
|
|
5
|
+
* @returns `true` if the value is a valid `FormData` and not empty, otherwise `false`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isValidFormData(value: unknown): value is FormData;
|
|
2
8
|
/**
|
|
3
9
|
* * Checks if a given value is an `OriginFileObj`.
|
|
4
10
|
* @param value - The value to check.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/form/guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAErE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAQtE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAQhE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,EAAE,CAIvE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAWhE"}
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/form/guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAErE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAajE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAQtE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAQhE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,EAAE,CAIvE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAWhE"}
|
package/dist/form/guards.js
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* * Checks if a given value is a valid `FormData` & it's not empty.
|
|
3
|
+
* @param value - The value to check.
|
|
4
|
+
* @returns `true` if the value is a valid `FormData` and not empty, otherwise `false`.
|
|
5
|
+
*/
|
|
6
|
+
export function isValidFormData(value) {
|
|
7
|
+
if (!(value instanceof FormData))
|
|
8
|
+
return false;
|
|
9
|
+
if ('entries' in value) {
|
|
10
|
+
if (typeof value.entries !== 'function') {
|
|
11
|
+
console.warn('`FormData.entries()` is not supported!');
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return Array.from(value.entries()).length > 0;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
1
18
|
/**
|
|
2
19
|
* * Checks if a given value is an `OriginFileObj`.
|
|
3
20
|
* @param value - The value to check.
|
package/dist/form/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DotNotationKey, KeyForArray, KeyForObject } from '../object/types';
|
|
1
|
+
import type { DotNotationKey, KeyForArray, KeyForObject, NestedKeyString } from '../object/types';
|
|
2
2
|
/** - Configuration options to control FormData generation behavior. */
|
|
3
3
|
export interface FormDataConfigs<T> {
|
|
4
4
|
/**
|
|
@@ -16,6 +16,11 @@ export interface FormDataConfigs<T> {
|
|
|
16
16
|
* * Use `*` to apply to all keys.
|
|
17
17
|
*/
|
|
18
18
|
lowerCaseKeys?: '*' | DotNotationKey<T>[];
|
|
19
|
+
/**
|
|
20
|
+
* * Defines which values should be converted to lowercase.
|
|
21
|
+
* * Use `*` to apply to all keys.
|
|
22
|
+
*/
|
|
23
|
+
lowerCaseValues?: '*' | NestedKeyString<T>[];
|
|
19
24
|
/**
|
|
20
25
|
* * An array of keys (values must be object) to preserve in their original structure.
|
|
21
26
|
* - Use `*` to preserve all keys with object values in their dot-notation format.
|
package/dist/form/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/form/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,MAAM,iBAAiB,CAAC;AAEzB,uEAAuE;AACvE,MAAM,WAAW,eAAe,CAAC,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjC;;;OAGG;IACH,YAAY,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzC;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C;;;;OAIG;IACH,eAAe,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C;;;;OAIG;IACH,UAAU,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpC,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,+GAA+G;AAC/G,MAAM,WAAW,UAAU;IAC1B,uCAAuC;IACvC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC;IACxB,oDAAoD;IACpD,QAAQ,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IAC1B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,gBAAgB,EAAE,IAAI,CAAC;IACvB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,aAAa,EAAE,aAAa,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAc,SAAQ,IAAI;IAC1C,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,8DAA8D;AAC9D,MAAM,WAAW,SAAU,SAAQ,KAAK;IACvC,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;CACZ"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/form/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,MAAM,iBAAiB,CAAC;AAEzB,uEAAuE;AACvE,MAAM,WAAW,eAAe,CAAC,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjC;;;OAGG;IACH,YAAY,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzC;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C;;;OAGG;IACH,eAAe,CAAC,EAAE,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7C;;;;OAIG;IACH,eAAe,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1C;;;;OAIG;IACH,UAAU,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpC,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,+GAA+G;AAC/G,MAAM,WAAW,UAAU;IAC1B,uCAAuC;IACvC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC;IACxB,oDAAoD;IACpD,QAAQ,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IAC1B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,gBAAgB,EAAE,IAAI,CAAC;IACvB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,aAAa,EAAE,aAAa,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAc,SAAQ,IAAI;IAC1C,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,8DAA8D;AAC9D,MAAM,WAAW,SAAU,SAAQ,KAAK;IACvC,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;CACZ"}
|
|
@@ -1,30 +1,42 @@
|
|
|
1
1
|
import type { AsyncFunction, GenericFn } from '../types';
|
|
2
2
|
/**
|
|
3
|
-
* Type guard to check if a value is an array.
|
|
3
|
+
* * Type guard to check if a value is an array.
|
|
4
4
|
* @param value - The value to check.
|
|
5
5
|
* @returns `true` if the value is an array, otherwise `false`.
|
|
6
6
|
*/
|
|
7
7
|
export declare function isArray<T>(value: unknown): value is Array<T>;
|
|
8
8
|
/**
|
|
9
|
-
* Type guard to check if a value is an
|
|
9
|
+
* * Type guard to check if a value is an array with length.
|
|
10
|
+
* @param value - The value to check.
|
|
11
|
+
* @returns `true` if the value is an array with length, otherwise `false`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isValidArray<T>(value: unknown): value is Array<T>;
|
|
14
|
+
/**
|
|
15
|
+
* * Type guard to check if a value is an object (excluding null).
|
|
10
16
|
* @param value - The value to check.
|
|
11
17
|
* @returns `true` if the value is an object, otherwise `false`.
|
|
12
18
|
*/
|
|
13
19
|
export declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
14
20
|
/**
|
|
15
|
-
* Type guard to check if a value is
|
|
21
|
+
* * Type guard to check if a value is an object (excluding null) and has keys in it.
|
|
22
|
+
* @param value - The value to check.
|
|
23
|
+
* @returns `true` if the value is an object with valid keys, otherwise `false`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isNotEmptyObject(value: unknown): value is Record<string, unknown>;
|
|
26
|
+
/**
|
|
27
|
+
* * Type guard to check if a value is a function.
|
|
16
28
|
* @param value - The value to check.
|
|
17
29
|
* @returns `true` if the value is a function, otherwise `false`.
|
|
18
30
|
*/
|
|
19
31
|
export declare function isFunction(value: unknown): value is GenericFn;
|
|
20
32
|
/**
|
|
21
|
-
* Type guard to check if a value is a Date object.
|
|
33
|
+
* * Type guard to check if a value is a Date object.
|
|
22
34
|
* @param value - The value to check.
|
|
23
35
|
* @returns `true` if the value is a Date object, otherwise `false`.
|
|
24
36
|
*/
|
|
25
37
|
export declare function isDate(value: unknown): value is Date;
|
|
26
38
|
/**
|
|
27
|
-
* Type guard to check if a value is an object with specific keys.
|
|
39
|
+
* * Type guard to check if a value is an object with specific keys.
|
|
28
40
|
* @param value - The value to check.
|
|
29
41
|
* @param keys - The set of keys the object should contain.
|
|
30
42
|
* @returns `true` if the value is an object with the specified keys, otherwise `false`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-primitives.d.ts","sourceRoot":"","sources":["../../src/guards/non-primitives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGzD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GACf,KAAK,IAAI,CAAC,CAEZ;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC9B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,GACrC,KAAK,IAAI,CAAC,EAAE,CAEd;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAExD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAStD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,CAEzE"}
|
|
1
|
+
{"version":3,"file":"non-primitives.d.ts","sourceRoot":"","sources":["../../src/guards/non-primitives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGzD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GACf,KAAK,IAAI,CAAC,CAEZ;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,OAAO,GACZ,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC9B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,GACrC,KAAK,IAAI,CAAC,EAAE,CAEd;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,CAExD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAStD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,CAEzE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isString } from './primitives';
|
|
2
2
|
/**
|
|
3
|
-
* Type guard to check if a value is an array.
|
|
3
|
+
* * Type guard to check if a value is an array.
|
|
4
4
|
* @param value - The value to check.
|
|
5
5
|
* @returns `true` if the value is an array, otherwise `false`.
|
|
6
6
|
*/
|
|
@@ -8,7 +8,15 @@ export function isArray(value) {
|
|
|
8
8
|
return Array.isArray(value);
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Type guard to check if a value is an
|
|
11
|
+
* * Type guard to check if a value is an array with length.
|
|
12
|
+
* @param value - The value to check.
|
|
13
|
+
* @returns `true` if the value is an array with length, otherwise `false`.
|
|
14
|
+
*/
|
|
15
|
+
export function isValidArray(value) {
|
|
16
|
+
return Array.isArray(value) && value.length > 0;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* * Type guard to check if a value is an object (excluding null).
|
|
12
20
|
* @param value - The value to check.
|
|
13
21
|
* @returns `true` if the value is an object, otherwise `false`.
|
|
14
22
|
*/
|
|
@@ -16,7 +24,15 @@ export function isObject(value) {
|
|
|
16
24
|
return value !== null && typeof value === 'object' && !isArray(value);
|
|
17
25
|
}
|
|
18
26
|
/**
|
|
19
|
-
* Type guard to check if a value is
|
|
27
|
+
* * Type guard to check if a value is an object (excluding null) and has keys in it.
|
|
28
|
+
* @param value - The value to check.
|
|
29
|
+
* @returns `true` if the value is an object with valid keys, otherwise `false`.
|
|
30
|
+
*/
|
|
31
|
+
export function isNotEmptyObject(value) {
|
|
32
|
+
return isObject(value) && Object.keys(value).length > 0;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* * Type guard to check if a value is a function.
|
|
20
36
|
* @param value - The value to check.
|
|
21
37
|
* @returns `true` if the value is a function, otherwise `false`.
|
|
22
38
|
*/
|
|
@@ -24,7 +40,7 @@ export function isFunction(value) {
|
|
|
24
40
|
return typeof value === 'function';
|
|
25
41
|
}
|
|
26
42
|
/**
|
|
27
|
-
* Type guard to check if a value is a Date object.
|
|
43
|
+
* * Type guard to check if a value is a Date object.
|
|
28
44
|
* @param value - The value to check.
|
|
29
45
|
* @returns `true` if the value is a Date object, otherwise `false`.
|
|
30
46
|
*/
|
|
@@ -32,7 +48,7 @@ export function isDate(value) {
|
|
|
32
48
|
return value instanceof Date;
|
|
33
49
|
}
|
|
34
50
|
/**
|
|
35
|
-
* Type guard to check if a value is an object with specific keys.
|
|
51
|
+
* * Type guard to check if a value is an object with specific keys.
|
|
36
52
|
* @param value - The value to check.
|
|
37
53
|
* @param keys - The set of keys the object should contain.
|
|
38
54
|
* @returns `true` if the value is an object with the specified keys, otherwise `false`.
|
|
@@ -77,7 +77,7 @@ export function isPrimitive(value) {
|
|
|
77
77
|
* @returns `true` if the value is a non-empty string, otherwise `false`.
|
|
78
78
|
*/
|
|
79
79
|
export function isNonEmptyString(value) {
|
|
80
|
-
return isString(value) && value?.
|
|
80
|
+
return isString(value) && value?.length > 0;
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
83
|
* * Type guard to check if a value is falsy.
|
package/dist/index.d.ts
CHANGED
|
@@ -14,15 +14,14 @@ export { Color, Color as Colour } from './colors/Color';
|
|
|
14
14
|
export { filterArrayOfObjects, flattenArray, getLastArrayElement, isInvalidOrEmptyArray, isInvalidOrEmptyArray as isValidEmptyArray, shuffleArray, } from './array/basics';
|
|
15
15
|
export { sortAnArray } from './array/sort';
|
|
16
16
|
export { createOptionsArray, removeDuplicatesFromArray, } from './array/transform';
|
|
17
|
-
export { convertIntoFormData,
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export { cloneObject, countObjectFields, generateQueryParams, isEmptyObject, isObject, } from './object/basics';
|
|
17
|
+
export { createControlledFormData as convertIntoFormData, createControlledFormData, } from './form/convert';
|
|
18
|
+
export { isCustomFile, isCustomFileArray, isFileUpload, isOriginFileObj, isValidFormData, } from './form/guards';
|
|
19
|
+
export { cloneObject, countObjectFields, generateQueryParams, } from './object/basics';
|
|
21
20
|
export { extractNewFields, extractUpdatedAndNewFields, extractUpdatedFields, flattenObjectDotNotation, flattenObjectKeyValue, mergeAndFlattenObjects, mergeObjects, } from './object/objectify';
|
|
22
21
|
export { sanitizeData } from './object/sanitize';
|
|
23
22
|
export { convertObjectValues } from './object/convert';
|
|
24
23
|
export { convertArrayToString, debounceAction, isDeepEqual, throttleAction, } from './utils';
|
|
25
24
|
export { isBoolean, isFalsy, isInteger, isNonEmptyString, isNull, isNumber, isPositiveInteger, isPrimitive, isString, isSymbol, isTruthy, isUndefined, } from './guards/primitives';
|
|
26
|
-
export { isReturningPromise as doesReturnPromise, isArray, isArrayOfType, isBigInt, isDate, isEmptyObject as isEmptyObjectGuard, isError, isFunction, isJSON, isJSON as isJSONObject, isMap, isEmptyObject as isObjectEmpty, isObjectWithKeys, isPromise, isRegExp, isRegExp as isRegularExpression, isReturningPromise, isSet, isJSON as isValidJSON, isMap as isValidMap,
|
|
25
|
+
export { isReturningPromise as doesReturnPromise, isArray, isArrayOfType, isValidArray as isArrayWithLength, isBigInt, isDate, isEmptyObject, isEmptyObject as isEmptyObjectGuard, isError, isFunction, isJSON, isJSON as isJSONObject, isMap, isNotEmptyObject, isObject, isEmptyObject as isObjectEmpty, isObjectWithKeys, isPromise, isRegExp, isRegExp as isRegularExpression, isReturningPromise, isSet, isValidArray, isJSON as isValidJSON, isMap as isValidMap, isNotEmptyObject as isValidObject, isSet as isValidSet, } from './guards/non-primitives';
|
|
27
26
|
export { isBase64, isBrowser, isDateString, isEmail, isEmailArray, isEnvironment, isEnvironment as isExpectedNodeENV, isIPAddress, isNode, isEnvironment as isNodeENV, isEnvironment as isNodeEnvironment, isNumericString, isPhoneNumber, isURL, isUUID, isEmail as isValidEmail, isURL as isValidURL, } from './guards/specials';
|
|
28
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,cAAc,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EACN,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,aAAa,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,EACZ,sBAAsB,IAAI,mBAAmB,GAC7C,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACN,YAAY,IAAI,YAAY,EAC5B,YAAY,EACZ,YAAY,IAAI,YAAY,EAC5B,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,MAAM,IAAI,YAAY,EACtB,UAAU,EACV,KAAK,EACL,KAAK,IAAI,WAAW,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,aAAa,IAAI,oBAAoB,EACrC,sBAAsB,EACtB,aAAa,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,gBAAgB,EAChB,OAAO,EACP,OAAO,IAAI,aAAa,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACN,WAAW,EACX,cAAc,IAAI,uBAAuB,EACzC,cAAc,EACd,cAAc,IAAI,gBAAgB,EAClC,cAAc,EACd,cAAc,IAAI,WAAW,EAC7B,cAAc,IAAI,4BAA4B,EAC9C,cAAc,EACd,cAAc,IAAI,sBAAsB,GACxC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACN,2BAA2B,EAC3B,sBAAsB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EACN,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,IAAI,iBAAiB,EAC1C,YAAY,GACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EACN,kBAAkB,EAClB,yBAAyB,GACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -19,11 +19,10 @@ export { filterArrayOfObjects, flattenArray, getLastArrayElement, isInvalidOrEmp
|
|
|
19
19
|
export { sortAnArray } from './array/sort';
|
|
20
20
|
export { createOptionsArray, removeDuplicatesFromArray, } from './array/transform';
|
|
21
21
|
// ! Form Utilities
|
|
22
|
-
export { convertIntoFormData,
|
|
23
|
-
export {
|
|
24
|
-
export { isCustomFile, isCustomFileArray, isFileUpload, isOriginFileObj, } from './form/guards';
|
|
22
|
+
export { createControlledFormData as convertIntoFormData, createControlledFormData, } from './form/convert';
|
|
23
|
+
export { isCustomFile, isCustomFileArray, isFileUpload, isOriginFileObj, isValidFormData, } from './form/guards';
|
|
25
24
|
// ! Object Utilities
|
|
26
|
-
export { cloneObject, countObjectFields, generateQueryParams,
|
|
25
|
+
export { cloneObject, countObjectFields, generateQueryParams, } from './object/basics';
|
|
27
26
|
export { extractNewFields, extractUpdatedAndNewFields, extractUpdatedFields, flattenObjectDotNotation, flattenObjectKeyValue, mergeAndFlattenObjects, mergeObjects, } from './object/objectify';
|
|
28
27
|
export { sanitizeData } from './object/sanitize';
|
|
29
28
|
export { convertObjectValues } from './object/convert';
|
|
@@ -32,6 +31,6 @@ export { convertArrayToString, debounceAction, isDeepEqual, throttleAction, } fr
|
|
|
32
31
|
// ! Primitive Type Guards
|
|
33
32
|
export { isBoolean, isFalsy, isInteger, isNonEmptyString, isNull, isNumber, isPositiveInteger, isPrimitive, isString, isSymbol, isTruthy, isUndefined, } from './guards/primitives';
|
|
34
33
|
// ! Non-Primitive Type Guards
|
|
35
|
-
export { isReturningPromise as doesReturnPromise, isArray, isArrayOfType, isBigInt, isDate, isEmptyObject as isEmptyObjectGuard, isError, isFunction, isJSON, isJSON as isJSONObject, isMap, isEmptyObject as isObjectEmpty, isObjectWithKeys, isPromise, isRegExp, isRegExp as isRegularExpression, isReturningPromise, isSet, isJSON as isValidJSON, isMap as isValidMap,
|
|
34
|
+
export { isReturningPromise as doesReturnPromise, isArray, isArrayOfType, isValidArray as isArrayWithLength, isBigInt, isDate, isEmptyObject, isEmptyObject as isEmptyObjectGuard, isError, isFunction, isJSON, isJSON as isJSONObject, isMap, isNotEmptyObject, isObject, isEmptyObject as isObjectEmpty, isObjectWithKeys, isPromise, isRegExp, isRegExp as isRegularExpression, isReturningPromise, isSet, isValidArray, isJSON as isValidJSON, isMap as isValidMap, isNotEmptyObject as isValidObject, isSet as isValidSet, } from './guards/non-primitives';
|
|
36
35
|
// ! Special Type Guards
|
|
37
36
|
export { isBase64, isBrowser, isDateString, isEmail, isEmailArray, isEnvironment, isEnvironment as isExpectedNodeENV, isIPAddress, isNode, isEnvironment as isNodeENV, isEnvironment as isNodeEnvironment, isNumericString, isPhoneNumber, isURL, isUUID, isEmail as isValidEmail, isURL as isValidURL, } from './guards/specials';
|
package/dist/object/basics.d.ts
CHANGED
|
@@ -21,13 +21,6 @@ export declare const generateQueryParams: <T extends QueryObject>(params?: T) =>
|
|
|
21
21
|
* @returns Deep cloned object.
|
|
22
22
|
*/
|
|
23
23
|
export declare const cloneObject: <T extends GenericObject>(obj: T) => T;
|
|
24
|
-
/**
|
|
25
|
-
* * Check if an object is empty.
|
|
26
|
-
*
|
|
27
|
-
* @param obj Object to check.
|
|
28
|
-
* @returns Whether the object is empty.
|
|
29
|
-
*/
|
|
30
|
-
export declare const isEmptyObject: <T extends GenericObject>(obj: T) => boolean;
|
|
31
24
|
/**
|
|
32
25
|
* * Count the number of fields in an object.
|
|
33
26
|
*
|
|
@@ -35,11 +28,4 @@ export declare const isEmptyObject: <T extends GenericObject>(obj: T) => boolean
|
|
|
35
28
|
* @returns Number of fields in the object.
|
|
36
29
|
*/
|
|
37
30
|
export declare const countObjectFields: <T extends GenericObject>(obj: T) => number;
|
|
38
|
-
/**
|
|
39
|
-
* * Check whether data is object and not array.
|
|
40
|
-
*
|
|
41
|
-
* @param data Data to check if its an object and not array.
|
|
42
|
-
* @returns Boolean: `true` if it's an object, `false` if not.
|
|
43
|
-
*/
|
|
44
|
-
export declare const isObject: (data: unknown) => boolean;
|
|
45
31
|
//# sourceMappingURL=basics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basics.d.ts","sourceRoot":"","sources":["../../src/object/basics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,WAAW,WAChD,CAAC,KACP,MAkCF,CAAC;AACF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,aAAa,OAAO,CAAC,KAAG,CAE7D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"basics.d.ts","sourceRoot":"","sources":["../../src/object/basics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,WAAW,WAChD,CAAC,KACP,MAkCF,CAAC;AACF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,aAAa,OAAO,CAAC,KAAG,CAE7D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,aAAa,OAAO,CAAC,KAAG,MAInE,CAAC"}
|
package/dist/object/basics.js
CHANGED
|
@@ -40,17 +40,6 @@ export const generateQueryParams = (params = {}) => {
|
|
|
40
40
|
export const cloneObject = (obj) => {
|
|
41
41
|
return JSON.parse(JSON.stringify(obj));
|
|
42
42
|
};
|
|
43
|
-
/**
|
|
44
|
-
* * Check if an object is empty.
|
|
45
|
-
*
|
|
46
|
-
* @param obj Object to check.
|
|
47
|
-
* @returns Whether the object is empty.
|
|
48
|
-
*/
|
|
49
|
-
export const isEmptyObject = (obj) => {
|
|
50
|
-
if (obj != null)
|
|
51
|
-
return countObjectFields(obj) === 0;
|
|
52
|
-
return false;
|
|
53
|
-
};
|
|
54
43
|
/**
|
|
55
44
|
* * Count the number of fields in an object.
|
|
56
45
|
*
|
|
@@ -62,12 +51,3 @@ export const countObjectFields = (obj) => {
|
|
|
62
51
|
return Object.keys(obj).length;
|
|
63
52
|
return 0;
|
|
64
53
|
};
|
|
65
|
-
/**
|
|
66
|
-
* * Check whether data is object and not array.
|
|
67
|
-
*
|
|
68
|
-
* @param data Data to check if its an object and not array.
|
|
69
|
-
* @returns Boolean: `true` if it's an object, `false` if not.
|
|
70
|
-
*/
|
|
71
|
-
export const isObject = (data) => {
|
|
72
|
-
return typeof data === 'object' && !Array.isArray(data);
|
|
73
|
-
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectify.d.ts","sourceRoot":"","sources":["../../src/object/objectify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"objectify.d.ts","sourceRoot":"","sources":["../../src/object/objectify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,UAAU,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,aAAa,cAAc,CAAC,EAAE,KAAG,CAuCvE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,aAAa,cACjD,CAAC,EAAE,KACb,aAyBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,aAAa,UACpD,CAAC,KACP,CAmBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,aAAa,UACvD,CAAC,KACP,aAkCF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,aAAa,cAC/C,CAAC,iBACE,cAAc,CAAC,CAAC,CAAC,KAC9B,cAAc,CAAC,CAAC,CAwBlB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC5B,CAAC,SAAS,aAAa,EACvB,CAAC,SAAS,aAAa,cAEX,CAAC,iBACE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,KAClD,cAAc,CAAC,CAAC,CAyBlB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GACtC,CAAC,SAAS,aAAa,EACvB,CAAC,SAAS,aAAa,cAEX,CAAC,iBACE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,KAClD,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAwBtC,CAAC"}
|
package/dist/object/objectify.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { isEmptyObject, isNotEmptyObject } from '../guards/non-primitives';
|
|
1
2
|
import { isDeepEqual } from '../utils';
|
|
2
|
-
import { isEmptyObject, isObject } from './basics';
|
|
3
3
|
/**
|
|
4
4
|
* * Deeply merge two or more objects using `Map`.
|
|
5
5
|
*
|
|
@@ -136,7 +136,7 @@ export const extractUpdatedFields = (baseObject, updatedObject) => {
|
|
|
136
136
|
for (const key in updatedObject) {
|
|
137
137
|
if (key in baseObject &&
|
|
138
138
|
!isDeepEqual(updatedObject[key], baseObject[key])) {
|
|
139
|
-
if (updatedObject[key] &&
|
|
139
|
+
if (updatedObject[key] && isNotEmptyObject(updatedObject[key])) {
|
|
140
140
|
updatedFields[key] = extractUpdatedFields(baseObject[key], updatedObject[key]);
|
|
141
141
|
if (updatedFields[key] && isEmptyObject(updatedFields[key])) {
|
|
142
142
|
delete updatedFields[key];
|
|
@@ -163,10 +163,11 @@ export const extractNewFields = (baseObject, updatedObject) => {
|
|
|
163
163
|
// Directly assign new fields
|
|
164
164
|
newFields[key] = updatedObject[key];
|
|
165
165
|
}
|
|
166
|
-
else if (
|
|
166
|
+
else if (isNotEmptyObject(updatedObject[key]) &&
|
|
167
|
+
isNotEmptyObject(baseObject[key])) {
|
|
167
168
|
// Recursively extract new fields inside nested objects
|
|
168
169
|
const nestedNewFields = extractNewFields(baseObject[key], updatedObject[key]);
|
|
169
|
-
if (
|
|
170
|
+
if (isNotEmptyObject(nestedNewFields)) {
|
|
170
171
|
newFields[key] =
|
|
171
172
|
nestedNewFields;
|
|
172
173
|
}
|
|
@@ -189,7 +190,7 @@ export const extractUpdatedAndNewFields = (baseObject, updatedObject) => {
|
|
|
189
190
|
newFields[key] = updatedObject[key];
|
|
190
191
|
}
|
|
191
192
|
else if (!isDeepEqual(updatedObject[key], baseObject[key])) {
|
|
192
|
-
if (updatedObject[key] &&
|
|
193
|
+
if (updatedObject[key] && isNotEmptyObject(updatedObject[key])) {
|
|
193
194
|
updatedFields[key] = extractUpdatedAndNewFields(baseObject[key], updatedObject[key]);
|
|
194
195
|
if (updatedFields[key] && isEmptyObject(updatedFields[key])) {
|
|
195
196
|
delete updatedFields[key];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/object/sanitize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/object/sanitize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAkB,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE9E;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EACnD,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,cAAc,CAAC,CAAC,CAAC,CAAC;AAErB;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EACnD,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;AAEvB;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC"}
|
package/dist/object/sanitize.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { isNotEmptyObject } from '../guards/non-primitives';
|
|
1
2
|
import { trimString } from '../string/basics';
|
|
2
|
-
import { isEmptyObject } from './basics';
|
|
3
3
|
/**
|
|
4
4
|
* * Sanitizes a string, array of strings, an object or array of objects by ignoring specified keys and trimming string values.
|
|
5
5
|
* * Also excludes nullish values (null, undefined) if specified. Always ignores empty nested object(s).
|
|
@@ -39,7 +39,7 @@ export function sanitizeData(input, options) {
|
|
|
39
39
|
// Recursively process nested objects
|
|
40
40
|
const processedValue = _processObject(value, fullKeyPath);
|
|
41
41
|
// Only add the property if it's not an empty object
|
|
42
|
-
if (
|
|
42
|
+
if (isNotEmptyObject(processedValue)) {
|
|
43
43
|
acc[key] = processedValue;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
@@ -62,7 +62,7 @@ export function sanitizeData(input, options) {
|
|
|
62
62
|
// Process array of objects
|
|
63
63
|
return input
|
|
64
64
|
.map((obj) => _processObject(obj))
|
|
65
|
-
.filter((obj) =>
|
|
65
|
+
.filter((obj) => isNotEmptyObject(obj));
|
|
66
66
|
}
|
|
67
67
|
// Process object
|
|
68
68
|
if (typeof input === 'object' && input !== null) {
|
package/dist/object/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Primitive } from '../types';
|
|
1
|
+
import type { AdvancedTypes, Primitive } from '../types';
|
|
2
2
|
/** - Generic object with `unknown` value */
|
|
3
|
-
export type
|
|
3
|
+
export type StrictObject = Record<string, unknown>;
|
|
4
4
|
/** - Generic object but with `any` value */
|
|
5
5
|
export type GenericObject = Record<string, any>;
|
|
6
6
|
/**
|
|
@@ -18,24 +18,28 @@ export type QueryObject = {
|
|
|
18
18
|
/** - Object type with string or number or boolean as value for each key. */
|
|
19
19
|
export type GenericObjectPrimitive = Record<string, string | number | boolean>;
|
|
20
20
|
/** - Dot-notation keys for nested objects */
|
|
21
|
-
export type DotNotationKeyStrict<T> = T extends
|
|
22
|
-
[K in keyof T & string]: T[K] extends
|
|
21
|
+
export type DotNotationKeyStrict<T> = T extends AdvancedTypes ? never : T extends StrictObject ? {
|
|
22
|
+
[K in keyof T & string]: NonNullable<T[K]> extends StrictObject ? `${K}` | `${K}.${DotNotationKey<NonNullable<T[K]>>}` : `${K}`;
|
|
23
23
|
}[keyof T & string] : never;
|
|
24
24
|
/** - Dot-notation keys for nested objects (including optional properties) */
|
|
25
|
-
export type DotNotationKey<T> = T extends
|
|
25
|
+
export type DotNotationKey<T> = T extends AdvancedTypes ? never : T extends GenericObject ? {
|
|
26
26
|
[K in keyof T & string]: NonNullable<T[K]> extends GenericObject ? `${K}` | `${K}.${DotNotationKey<NonNullable<T[K]>>}` : `${K}`;
|
|
27
27
|
}[keyof T & string] : never;
|
|
28
28
|
/** - Dot-notation keys where the value is an array (including optional properties) */
|
|
29
29
|
export type KeyForArray<T> = T extends GenericObject ? {
|
|
30
|
-
[K in keyof T & string]: NonNullable<T[K]> extends unknown
|
|
30
|
+
[K in keyof T & string]: NonNullable<T[K]> extends Array<unknown> ? K : never;
|
|
31
31
|
}[keyof T & string] : never;
|
|
32
32
|
/** - Dot-notation keys where the value is a non-array object (including optional properties) */
|
|
33
33
|
export type KeyForObject<T> = T extends GenericObject ? {
|
|
34
|
-
[K in keyof T & string]: NonNullable<T[K]> extends GenericObject ? NonNullable<T[K]> extends unknown
|
|
34
|
+
[K in keyof T & string]: NonNullable<T[K]> extends GenericObject ? NonNullable<T[K]> extends Array<unknown> ? never : K : never;
|
|
35
|
+
}[keyof T & string] : never;
|
|
36
|
+
/** - Extract only keys with string values from an object, including nested dot-notation keys. */
|
|
37
|
+
export type NestedKeyString<T> = T extends GenericObject ? {
|
|
38
|
+
[K in keyof T & string]: NonNullable<T[K]> extends string ? K : NonNullable<T[K]> extends GenericObject ? `${K}.${NestedKeyString<NonNullable<T[K]>>}` : never;
|
|
35
39
|
}[keyof T & string] : never;
|
|
36
40
|
/** - Extract only primitive keys from an object, including nested dot-notation keys. */
|
|
37
41
|
export type NestedPrimitiveKey<T> = T extends GenericObject ? {
|
|
38
|
-
[K in keyof T & string]: T[K] extends Primitive ? K : T[K] extends GenericObject ? `${K}.${NestedPrimitiveKey<T[K]
|
|
42
|
+
[K in keyof T & string]: NonNullable<T[K]> extends Primitive ? K : NonNullable<T[K]> extends GenericObject ? `${K}.${NestedPrimitiveKey<NonNullable<T[K]>>}` : never;
|
|
39
43
|
}[keyof T & string] : never;
|
|
40
44
|
/** - Options for `sanitizeData` */
|
|
41
45
|
export interface SanitizeOptions<T extends GenericObject> {
|
|
@@ -56,8 +60,8 @@ export type SanitizedData<T> = {
|
|
|
56
60
|
* - Dot-notation keys for nested objects.
|
|
57
61
|
* ! Unused
|
|
58
62
|
*/
|
|
59
|
-
export type KeyConversion<T> = T extends
|
|
60
|
-
[K in keyof T & string]: K extends string ? T[K] extends
|
|
63
|
+
export type KeyConversion<T> = T extends StrictObject ? {
|
|
64
|
+
[K in keyof T & string]: K extends string ? T[K] extends StrictObject ? `${K}` | `${K}.${KeyConversion<T[K]>}` : `${K}` : never;
|
|
61
65
|
}[keyof T & string] : never;
|
|
62
66
|
/**
|
|
63
67
|
* ! Unused
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/object/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/object/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -33,5 +33,7 @@ export type DelayedFn<T extends VoidFunction> = (...args: Parameters<T>) => void
|
|
|
33
33
|
export type ThrottledFn<T extends VoidFunction> = (...args: Parameters<T>) => void;
|
|
34
34
|
/** Asynchronous function type */
|
|
35
35
|
export type AsyncFunction<T> = (...args: unknown[]) => Promise<T>;
|
|
36
|
+
/** Advanced non-primitive types */
|
|
37
|
+
export type AdvancedTypes = Array<unknown> | File | FileList | Blob | ArrayBuffer | Date | RegExp | WeakMap<any, any> | WeakSet<any> | Map<any, any> | Set<any> | GenericFn | VoidFunction | AsyncFunction<any> | Promise<any> | Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError | URIError | Intl.Collator | Intl.DateTimeFormat | Intl.ListFormat | Intl.Locale | Intl.NumberFormat | Intl.PluralRules | Intl.RelativeTimeFormat | Intl.Segmenter | bigint | symbol;
|
|
36
38
|
export {};
|
|
37
39
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC;AAElC,OAAO,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,CAAC;AACrC,KAAK,KAAK,CAAC,CAAC,IAAI;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAEjC,6BAA6B;AAC7B,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAEzC,2CAA2C;AAC3C,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAAC;AAElE,2CAA2C;AAG3C,+BAA+B;AAC/B,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAErE,8CAA8C;AAC9C,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KAC5B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,CAAC,GAAG,KAAK;CAClD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,0EAA0E;AAC1E,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;KACtC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK;CAClE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,4BAA4B;AAC5B,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/D,4BAA4B;AAC5B,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAExD,gDAAgD;AAChD,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AAEpD,kDAAkD;AAClD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,YAAY,IAAI,CAC/C,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAClB,IAAI,CAAC;AAEV,mDAAmD;AACnD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,YAAY,IAAI,CACjD,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAClB,IAAI,CAAC;AAEV,iCAAiC;AACjC,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/dist/form/transform.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { GenericObject } from '../object/types';
|
|
2
|
-
import type { FormDataConfigs } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* * Utility to convert object into FormData in a controlled way.
|
|
5
|
-
*
|
|
6
|
-
* @param data - The source object to control and convert to FormData.
|
|
7
|
-
* @param configs - Configuration options to control the formData.
|
|
8
|
-
*
|
|
9
|
-
* @returns FormData instance containing the sanitized and transformed data
|
|
10
|
-
*/
|
|
11
|
-
export declare const createControlledFormData: <T extends GenericObject>(data: T, configs?: FormDataConfigs<T>) => FormData;
|
|
12
|
-
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/form/transform.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEX,aAAa,EAEb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;;GAOG;AAGH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,aAAa,QACzD,CAAC,YACG,eAAe,CAAC,CAAC,CAAC,KAC1B,QAsMF,CAAC"}
|
package/dist/form/transform.js
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { isInvalidOrEmptyArray } from '../array/basics';
|
|
2
|
-
import { isEmptyObject } from '../object/basics';
|
|
3
|
-
import { isCustomFile, isCustomFileArray, isFileUpload } from './guards';
|
|
4
|
-
/**
|
|
5
|
-
* * Utility to convert object into FormData in a controlled way.
|
|
6
|
-
*
|
|
7
|
-
* @param data - The source object to control and convert to FormData.
|
|
8
|
-
* @param configs - Configuration options to control the formData.
|
|
9
|
-
*
|
|
10
|
-
* @returns FormData instance containing the sanitized and transformed data
|
|
11
|
-
*/
|
|
12
|
-
// ... (previous imports remain the same)
|
|
13
|
-
export const createControlledFormData = (data, configs) => {
|
|
14
|
-
const formData = new FormData();
|
|
15
|
-
const { stringifyNested = '*' } = configs || {};
|
|
16
|
-
/** Helper to check if a key should be lowercase */
|
|
17
|
-
const shouldLowercase = (key) => {
|
|
18
|
-
return Array.isArray(configs?.lowerCaseKeys) ?
|
|
19
|
-
configs.lowerCaseKeys.some((path) => key === path || key.startsWith(`${path}.`))
|
|
20
|
-
: configs?.lowerCaseKeys === '*';
|
|
21
|
-
};
|
|
22
|
-
/** Transforms key to lowercase if needed */
|
|
23
|
-
const transformKey = (key) => {
|
|
24
|
-
return shouldLowercase(key) ? key.toLowerCase() : key;
|
|
25
|
-
};
|
|
26
|
-
/** - Helper function to check if a key matches a breakArray key. */
|
|
27
|
-
const isRequiredKey = (key) => {
|
|
28
|
-
const transformedKey = transformKey(key);
|
|
29
|
-
return Array.isArray(configs?.requiredKeys) ?
|
|
30
|
-
configs.requiredKeys.some((path) => transformedKey === path ||
|
|
31
|
-
transformedKey.startsWith(`${path}.`))
|
|
32
|
-
: configs?.requiredKeys === '*';
|
|
33
|
-
};
|
|
34
|
-
/** - Helper function to check if a key matches a dotNotation path to preserve. */
|
|
35
|
-
const shouldDotNotate = (key) => {
|
|
36
|
-
const transformedKey = transformKey(key);
|
|
37
|
-
return Array.isArray(configs?.dotNotateNested) ?
|
|
38
|
-
configs.dotNotateNested.includes(transformedKey)
|
|
39
|
-
: configs?.dotNotateNested === '*';
|
|
40
|
-
};
|
|
41
|
-
/** - Helper function to check if a key matches a stringifyNested key. */
|
|
42
|
-
const shouldStringify = (key) => {
|
|
43
|
-
const transformedKey = transformKey(key);
|
|
44
|
-
return Array.isArray(stringifyNested) ?
|
|
45
|
-
stringifyNested.includes(transformedKey)
|
|
46
|
-
: stringifyNested === '*';
|
|
47
|
-
};
|
|
48
|
-
/** - Helper function to check if a key matches a breakArray key. */
|
|
49
|
-
const shouldBreakArray = (key) => {
|
|
50
|
-
const transformedKey = transformKey(key);
|
|
51
|
-
return Array.isArray(configs?.breakArray) ?
|
|
52
|
-
configs.breakArray.includes(transformedKey)
|
|
53
|
-
: configs?.breakArray === '*';
|
|
54
|
-
};
|
|
55
|
-
/** - Helper to clean object by removing null/undefined/empty values while respecting required keys */
|
|
56
|
-
const _cleanObject = (obj, parentKey = '') => {
|
|
57
|
-
return Object.entries(obj).reduce((acc, [key, value]) => {
|
|
58
|
-
const transformedKey = transformKey(key);
|
|
59
|
-
const fullKey = parentKey ? `${parentKey}.${transformedKey}` : transformedKey;
|
|
60
|
-
// Skip ignored keys (don't include them in the cleaned object)
|
|
61
|
-
if (configs?.ignoreKeys?.includes(fullKey)) {
|
|
62
|
-
return acc;
|
|
63
|
-
}
|
|
64
|
-
// Keep value if:
|
|
65
|
-
// 1. It's required OR
|
|
66
|
-
// 2. It's not null/undefined AND not empty string/object
|
|
67
|
-
const shouldKeep = isRequiredKey(fullKey) ||
|
|
68
|
-
(value != null &&
|
|
69
|
-
(typeof value !== 'string' || value !== '') &&
|
|
70
|
-
(typeof value !== 'object' || !isEmptyObject(value)));
|
|
71
|
-
if (shouldKeep) {
|
|
72
|
-
if (typeof value === 'object' &&
|
|
73
|
-
value !== null &&
|
|
74
|
-
!Array.isArray(value)) {
|
|
75
|
-
// Recursively clean nested objects
|
|
76
|
-
const cleaned = _cleanObject(value, fullKey);
|
|
77
|
-
if (isRequiredKey(fullKey) || !isEmptyObject(cleaned)) {
|
|
78
|
-
acc[transformKey(key)] = cleaned;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
acc[transformKey(key)] = value;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return acc;
|
|
86
|
-
}, {});
|
|
87
|
-
};
|
|
88
|
-
/** * Helper function to add values to formData */
|
|
89
|
-
const _addToFormData = (key, value) => {
|
|
90
|
-
const transformedKey = transformKey(key);
|
|
91
|
-
if (isCustomFileArray(value)) {
|
|
92
|
-
value.forEach((file) => formData.append(transformedKey, file.originFileObj));
|
|
93
|
-
}
|
|
94
|
-
else if (isFileUpload(value)) {
|
|
95
|
-
if (value.fileList) {
|
|
96
|
-
value.fileList.forEach((file) => formData.append(transformedKey, file.originFileObj));
|
|
97
|
-
}
|
|
98
|
-
else if (value.file) {
|
|
99
|
-
if (isCustomFile(value.file)) {
|
|
100
|
-
formData.append(transformedKey, value.file.originFileObj);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
formData.append(transformedKey, value.file);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
else if (value instanceof Blob || value instanceof File) {
|
|
108
|
-
formData.append(transformedKey, value);
|
|
109
|
-
}
|
|
110
|
-
else if (Array.isArray(value) && !isInvalidOrEmptyArray(value)) {
|
|
111
|
-
if (shouldBreakArray(key)) {
|
|
112
|
-
value.forEach((item, index) => {
|
|
113
|
-
_addToFormData(`${transformedKey}[${index}]`, item);
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
formData.append(transformedKey, JSON.stringify(value));
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
else if (typeof value === 'object' &&
|
|
121
|
-
value !== null &&
|
|
122
|
-
!isEmptyObject(value)) {
|
|
123
|
-
if (shouldStringify(key) && !shouldDotNotate(key)) {
|
|
124
|
-
// Clean object before stringifying, preserving required keys
|
|
125
|
-
const cleanedValue = _cleanObject(value, key);
|
|
126
|
-
if (!isEmptyObject(cleanedValue) || isRequiredKey(key)) {
|
|
127
|
-
formData.append(transformedKey, JSON.stringify(cleanedValue));
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
Object.entries(value).forEach(([nestedKey, nestedValue]) => {
|
|
132
|
-
_addToFormData(`${key}.${nestedKey}`, nestedValue);
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
const isNotNullish = value != null && value !== '';
|
|
138
|
-
if (isNotNullish || isRequiredKey(key)) {
|
|
139
|
-
formData.append(transformedKey, value);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
/** - Helper to process object */
|
|
144
|
-
const _processObject = (obj, parentKey = '') => {
|
|
145
|
-
Object.entries(obj).forEach(([key, value]) => {
|
|
146
|
-
const transformedKey = transformKey(key);
|
|
147
|
-
const fullKey = parentKey ? `${parentKey}.${transformedKey}` : transformedKey;
|
|
148
|
-
// Skip keys that are in ignoreKeys
|
|
149
|
-
if (configs?.ignoreKeys?.includes(fullKey))
|
|
150
|
-
return;
|
|
151
|
-
// Trim string values if trimStrings is enabled
|
|
152
|
-
if (configs?.trimStrings && typeof value === 'string') {
|
|
153
|
-
value = value.trim();
|
|
154
|
-
}
|
|
155
|
-
// Check if this key is preserved
|
|
156
|
-
if (shouldDotNotate(fullKey)) {
|
|
157
|
-
// If it's a preserved path, append the value directly
|
|
158
|
-
_addToFormData(fullKey, value);
|
|
159
|
-
}
|
|
160
|
-
else if (typeof value === 'object' &&
|
|
161
|
-
!Array.isArray(value) &&
|
|
162
|
-
value !== null &&
|
|
163
|
-
!shouldStringify(fullKey)) {
|
|
164
|
-
// Process nested objects
|
|
165
|
-
_processObject(value, key);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
// For other cases, just append as key-value
|
|
169
|
-
_addToFormData(key, value);
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
};
|
|
173
|
-
_processObject(data);
|
|
174
|
-
return formData;
|
|
175
|
-
};
|