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.some((path) => key === path || key.startsWith(`${path}.`))
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 (ignoreFalsy && (0, non_primitives_1.isObject)(v) && !(0, non_primitives_1.isNotEmptyObject)(v)) {
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 (!ignoreFalsy ||
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 ((0, guards_1.isFileArray)(value) || (0, guards_1.isCustomFileArray)(value)) {
96
- acc[key] = value;
97
- }
98
- // acc[key as keyof T] = value.map(sanitizeData) as T[keyof T];
99
- const sanitizedArray = _processArray(value, fullKeyPath);
100
- if (!ignoreFalsy || sanitizedArray.length > 0) {
101
- acc[key] = sanitizedArray;
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 as-is
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 (ignoreFalsy && (0, non_primitives_1.isObject)(val) && !(0, non_primitives_1.isNotEmptyObject)(val)) {
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":"AAQA,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;AAgKvB;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAgCrE"}
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` and `empty object and arrays` (`{}`, `[]`)). Defaults to `false`. */
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.some((path) => key === path || key.startsWith(`${path}.`))
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 (ignoreFalsy && isObject(v) && !isNotEmptyObject(v)) {
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 (!ignoreFalsy ||
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
- acc[key] = value;
93
- }
94
- // acc[key as keyof T] = value.map(sanitizeData) as T[keyof T];
95
- const sanitizedArray = _processArray(value, fullKeyPath);
96
- if (!ignoreFalsy || sanitizedArray.length > 0) {
97
- acc[key] = sanitizedArray;
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 as-is
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 (ignoreFalsy && isObject(val) && !isNotEmptyObject(val)) {
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.53",
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",