nhb-toolbox 4.0.53 → 4.0.55
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.
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sanitizeData = sanitizeData;
|
|
4
4
|
exports.parseObjectValues = parseObjectValues;
|
|
5
|
-
const guards_1 = require("../form/guards");
|
|
6
5
|
const non_primitives_1 = require("../guards/non-primitives");
|
|
7
6
|
const primitives_1 = require("../guards/primitives");
|
|
8
7
|
const basics_1 = require("../string/basics");
|
|
@@ -15,14 +14,27 @@ const basics_1 = require("../string/basics");
|
|
|
15
14
|
* @returns A new string, object or array of strings or objects with the specified modifications.
|
|
16
15
|
*/
|
|
17
16
|
function sanitizeData(input, options) {
|
|
18
|
-
const { keysToIgnore = [], requiredKeys = [], trimStrings = true, ignoreNullish = false, ignoreFalsy = false, } = options || {};
|
|
17
|
+
const { keysToIgnore = [], requiredKeys = [], trimStrings = true, ignoreNullish = false, ignoreFalsy = false, ignoreEmpty = false, } = options || {};
|
|
19
18
|
// Flatten the object keys and use the keys for comparison
|
|
20
19
|
const ignoreKeySet = new Set(keysToIgnore);
|
|
20
|
+
/**
|
|
21
|
+
* * Determines if a key is required
|
|
22
|
+
* @param key The key to check.
|
|
23
|
+
* @returns `true` if the key is required, otherwise `false`.
|
|
24
|
+
*/
|
|
21
25
|
const isRequiredKey = (key) => {
|
|
22
26
|
return Array.isArray(requiredKeys) ?
|
|
23
|
-
requiredKeys
|
|
27
|
+
requiredKeys?.some((path) => key === path || key.startsWith(`${path}.`))
|
|
24
28
|
: requiredKeys === '*';
|
|
25
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* * Check if a value is an object and determines whether it should skip based on `ignoreEmpty` flag.
|
|
32
|
+
* @param obj Object value to check.
|
|
33
|
+
* @returns `true` if the object is skippable, otherwise `false`.
|
|
34
|
+
*/
|
|
35
|
+
const skipObject = (obj) => {
|
|
36
|
+
return ignoreEmpty && (0, non_primitives_1.isObject)(obj) && !(0, non_primitives_1.isNotEmptyObject)(obj);
|
|
37
|
+
};
|
|
26
38
|
/**
|
|
27
39
|
* * Recursively process an array and its nested content(s).
|
|
28
40
|
* @param arr Array to process.
|
|
@@ -49,9 +61,8 @@ function sanitizeData(input, options) {
|
|
|
49
61
|
return false;
|
|
50
62
|
if (ignoreFalsy && !v)
|
|
51
63
|
return false;
|
|
52
|
-
if (
|
|
64
|
+
if (skipObject(v) && !isRequiredKey(path))
|
|
53
65
|
return false;
|
|
54
|
-
}
|
|
55
66
|
return true;
|
|
56
67
|
});
|
|
57
68
|
};
|
|
@@ -84,7 +95,7 @@ function sanitizeData(input, options) {
|
|
|
84
95
|
// Recursively process nested objects
|
|
85
96
|
const processedValue = _processObject(value, fullKeyPath);
|
|
86
97
|
// Add the property conditionally if it's not an empty object
|
|
87
|
-
if (!
|
|
98
|
+
if (!ignoreEmpty ||
|
|
88
99
|
isRequiredKey(fullKeyPath) ||
|
|
89
100
|
(0, non_primitives_1.isNotEmptyObject)(processedValue)) {
|
|
90
101
|
acc[key] = processedValue;
|
|
@@ -92,17 +103,18 @@ function sanitizeData(input, options) {
|
|
|
92
103
|
}
|
|
93
104
|
else if (value && Array.isArray(value)) {
|
|
94
105
|
// Keep file arrays untouched
|
|
95
|
-
if (
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
// if (isFileArray(value) || isCustomFileArray(value)) {
|
|
107
|
+
// acc[key as keyof T] = value as T[keyof T];
|
|
108
|
+
// }
|
|
109
|
+
const processedArray = _processArray(value, fullKeyPath);
|
|
110
|
+
if (!ignoreEmpty ||
|
|
111
|
+
isRequiredKey(fullKeyPath) ||
|
|
112
|
+
processedArray.length > 0) {
|
|
113
|
+
acc[key] = processedArray;
|
|
102
114
|
}
|
|
103
115
|
}
|
|
104
116
|
else {
|
|
105
|
-
// Add other values
|
|
117
|
+
// Add other values untouched
|
|
106
118
|
acc[key] = value;
|
|
107
119
|
}
|
|
108
120
|
return acc;
|
|
@@ -125,9 +137,8 @@ function sanitizeData(input, options) {
|
|
|
125
137
|
return false;
|
|
126
138
|
if (ignoreFalsy && !val)
|
|
127
139
|
return false;
|
|
128
|
-
if (
|
|
140
|
+
if (skipObject(val))
|
|
129
141
|
return false;
|
|
130
|
-
}
|
|
131
142
|
return true;
|
|
132
143
|
});
|
|
133
144
|
}
|
|
@@ -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":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAEX,aAAa,EACb,eAAe,EACf,YAAY,EACZ,MAAM,SAAS,CAAC;AAEjB;;;;;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;AAExD;;;;;;;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,EAC7B,KAAK,EAAE,CAAC,EAAE,EACV,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;AA8KvB;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAgCrE"}
|
|
@@ -22,7 +22,7 @@ export type DotNotationKeyStrict<T> = T extends AdvancedTypes ? never : T extend
|
|
|
22
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 with `any` value (including optional properties) */
|
|
25
|
-
export type DotNotationKey<T> = T extends AdvancedTypes ? never : T extends GenericObject ? {
|
|
25
|
+
export type DotNotationKey<T> = T extends AdvancedTypes ? never : T extends Array<infer U> ? DotNotationKey<U> : 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
|
/** - Object keys where the value is an array (including optional properties) */
|
|
@@ -53,8 +53,10 @@ export interface SanitizeOptions<T> {
|
|
|
53
53
|
trimStrings?: boolean;
|
|
54
54
|
/** Whether to exclude nullish (`null` or `undefined`) values. Defaults to `false`. */
|
|
55
55
|
ignoreNullish?: boolean;
|
|
56
|
-
/** Whether to exclude all falsy values (`false`, `0`, `empty string: ''`, `null`, `undefined
|
|
56
|
+
/** Whether to exclude all falsy values (`false`, `0`, `empty string: ''`, `null`, `undefined`. Defaults to `false`. */
|
|
57
57
|
ignoreFalsy?: boolean;
|
|
58
|
+
/** Whether to exclude empty object(s) and array(s) (`{}`, `[]`). Defaults to `false`. */
|
|
59
|
+
ignoreEmpty?: boolean;
|
|
58
60
|
/**
|
|
59
61
|
* An array of dot-notation key paths that must be preserved in the sanitized output.
|
|
60
62
|
* Use `"*"` to retain all keys. This applies primarily to plain or nested objects and arrays of objects.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/object/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/object/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { isCustomFileArray, isFileArray } from '../form/guards';
|
|
2
1
|
import { isArrayOfType, isNotEmptyObject, isObject, } from '../guards/non-primitives';
|
|
3
2
|
import { isString } from '../guards/primitives';
|
|
4
3
|
import { trimString } from '../string/basics';
|
|
@@ -11,14 +10,27 @@ import { trimString } from '../string/basics';
|
|
|
11
10
|
* @returns A new string, object or array of strings or objects with the specified modifications.
|
|
12
11
|
*/
|
|
13
12
|
export function sanitizeData(input, options) {
|
|
14
|
-
const { keysToIgnore = [], requiredKeys = [], trimStrings = true, ignoreNullish = false, ignoreFalsy = false, } = options || {};
|
|
13
|
+
const { keysToIgnore = [], requiredKeys = [], trimStrings = true, ignoreNullish = false, ignoreFalsy = false, ignoreEmpty = false, } = options || {};
|
|
15
14
|
// Flatten the object keys and use the keys for comparison
|
|
16
15
|
const ignoreKeySet = new Set(keysToIgnore);
|
|
16
|
+
/**
|
|
17
|
+
* * Determines if a key is required
|
|
18
|
+
* @param key The key to check.
|
|
19
|
+
* @returns `true` if the key is required, otherwise `false`.
|
|
20
|
+
*/
|
|
17
21
|
const isRequiredKey = (key) => {
|
|
18
22
|
return Array.isArray(requiredKeys) ?
|
|
19
|
-
requiredKeys
|
|
23
|
+
requiredKeys?.some((path) => key === path || key.startsWith(`${path}.`))
|
|
20
24
|
: requiredKeys === '*';
|
|
21
25
|
};
|
|
26
|
+
/**
|
|
27
|
+
* * Check if a value is an object and determines whether it should skip based on `ignoreEmpty` flag.
|
|
28
|
+
* @param obj Object value to check.
|
|
29
|
+
* @returns `true` if the object is skippable, otherwise `false`.
|
|
30
|
+
*/
|
|
31
|
+
const skipObject = (obj) => {
|
|
32
|
+
return ignoreEmpty && isObject(obj) && !isNotEmptyObject(obj);
|
|
33
|
+
};
|
|
22
34
|
/**
|
|
23
35
|
* * Recursively process an array and its nested content(s).
|
|
24
36
|
* @param arr Array to process.
|
|
@@ -45,9 +57,8 @@ export function sanitizeData(input, options) {
|
|
|
45
57
|
return false;
|
|
46
58
|
if (ignoreFalsy && !v)
|
|
47
59
|
return false;
|
|
48
|
-
if (
|
|
60
|
+
if (skipObject(v) && !isRequiredKey(path))
|
|
49
61
|
return false;
|
|
50
|
-
}
|
|
51
62
|
return true;
|
|
52
63
|
});
|
|
53
64
|
};
|
|
@@ -80,7 +91,7 @@ export function sanitizeData(input, options) {
|
|
|
80
91
|
// Recursively process nested objects
|
|
81
92
|
const processedValue = _processObject(value, fullKeyPath);
|
|
82
93
|
// Add the property conditionally if it's not an empty object
|
|
83
|
-
if (!
|
|
94
|
+
if (!ignoreEmpty ||
|
|
84
95
|
isRequiredKey(fullKeyPath) ||
|
|
85
96
|
isNotEmptyObject(processedValue)) {
|
|
86
97
|
acc[key] = processedValue;
|
|
@@ -88,17 +99,18 @@ export function sanitizeData(input, options) {
|
|
|
88
99
|
}
|
|
89
100
|
else if (value && Array.isArray(value)) {
|
|
90
101
|
// Keep file arrays untouched
|
|
91
|
-
if (isFileArray(value) || isCustomFileArray(value)) {
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
102
|
+
// if (isFileArray(value) || isCustomFileArray(value)) {
|
|
103
|
+
// acc[key as keyof T] = value as T[keyof T];
|
|
104
|
+
// }
|
|
105
|
+
const processedArray = _processArray(value, fullKeyPath);
|
|
106
|
+
if (!ignoreEmpty ||
|
|
107
|
+
isRequiredKey(fullKeyPath) ||
|
|
108
|
+
processedArray.length > 0) {
|
|
109
|
+
acc[key] = processedArray;
|
|
98
110
|
}
|
|
99
111
|
}
|
|
100
112
|
else {
|
|
101
|
-
// Add other values
|
|
113
|
+
// Add other values untouched
|
|
102
114
|
acc[key] = value;
|
|
103
115
|
}
|
|
104
116
|
return acc;
|
|
@@ -121,9 +133,8 @@ export function sanitizeData(input, options) {
|
|
|
121
133
|
return false;
|
|
122
134
|
if (ignoreFalsy && !val)
|
|
123
135
|
return false;
|
|
124
|
-
if (
|
|
136
|
+
if (skipObject(val))
|
|
125
137
|
return false;
|
|
126
|
-
}
|
|
127
138
|
return true;
|
|
128
139
|
});
|
|
129
140
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nhb-toolbox",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.55",
|
|
4
4
|
"description": "A versatile collection of smart, efficient, and reusable utility functions and classes for everyday development needs.",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|