nhb-toolbox 2.8.8 → 2.9.0

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.
@@ -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 Data to convert into FormData.
6
- * @returns Converted FormData.
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 convertIntoFormData: <T extends GenericObject>(data: T) => FormData;
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":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,aAAa,QACpD,CAAC,KACL,QAYF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,SAAU,QAAQ,KAAG,OAQhD,CAAC"}
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/form/convert.ts"],"names":[],"mappings":"AAEA,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,QA2NF,CAAC"}
@@ -1,31 +1,189 @@
1
1
  import { isInvalidOrEmptyArray } from '../array/basics';
2
+ import { isEmptyObject } from '../object/basics';
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 Data to convert into FormData.
6
- * @returns Converted FormData.
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 convertIntoFormData = (data) => {
11
+ export const createControlledFormData = (data, configs) => {
9
12
  const formData = new FormData();
10
- Object.entries(data).forEach(([key, value]) => {
11
- if (!isInvalidOrEmptyArray(value) && value[0]?.originFileObj) {
12
- formData.append(key, value[0].originFileObj);
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
+ // * Keep value if:
69
+ // * 1. It's required OR
70
+ // * 2. It's not null/undefined AND not empty string/object
71
+ const shouldKeep = isRequiredKey(fullKey) ||
72
+ (value != null &&
73
+ (typeof value !== 'string' || value !== '') &&
74
+ (typeof value !== 'object' || !isEmptyObject(value)));
75
+ if (shouldKeep) {
76
+ if (typeof value === 'object' &&
77
+ value !== null &&
78
+ !Array.isArray(value)) {
79
+ // Recursively clean nested objects
80
+ const cleaned = _cleanObject(value, fullKey);
81
+ if (isRequiredKey(fullKey) || !isEmptyObject(cleaned)) {
82
+ acc[transformKey(key)] = cleaned;
83
+ }
84
+ }
85
+ else {
86
+ if (typeof value === 'string') {
87
+ acc[transformKey(key)] = value.toLowerCase();
88
+ }
89
+ else {
90
+ acc[transformKey(key)] = value;
91
+ }
92
+ }
93
+ }
94
+ return acc;
95
+ }, {});
96
+ };
97
+ /** * Helper function to add values to formData */
98
+ const _addToFormData = (key, value) => {
99
+ const transformedKey = transformKey(key);
100
+ if (isCustomFileArray(value)) {
101
+ value.forEach((file) => formData.append(transformedKey, file.originFileObj));
13
102
  }
14
- else if (value !== undefined && value !== null && value !== '') {
15
- formData.append(key, value);
103
+ else if (isFileUpload(value)) {
104
+ if (value.fileList) {
105
+ value.fileList.forEach((file) => formData.append(transformedKey, file.originFileObj));
106
+ }
107
+ else if (value.file) {
108
+ if (isCustomFile(value.file)) {
109
+ formData.append(transformedKey, value.file.originFileObj);
110
+ }
111
+ else {
112
+ formData.append(transformedKey, value.file);
113
+ }
114
+ }
16
115
  }
17
- });
116
+ else if (value instanceof Blob || value instanceof File) {
117
+ formData.append(transformedKey, value);
118
+ }
119
+ else if (Array.isArray(value) && !isInvalidOrEmptyArray(value)) {
120
+ if (shouldBreakArray(key)) {
121
+ value.forEach((item, index) => {
122
+ _addToFormData(`${transformedKey}[${index}]`, item);
123
+ });
124
+ }
125
+ else {
126
+ formData.append(transformedKey, JSON.stringify(value));
127
+ }
128
+ }
129
+ else if (typeof value === 'object' &&
130
+ value !== null &&
131
+ !isEmptyObject(value)) {
132
+ if (shouldStringify(key) && !shouldDotNotate(key)) {
133
+ // Clean object before stringifying, preserving required keys
134
+ const cleanedValue = _cleanObject(value, key);
135
+ if (!isEmptyObject(cleanedValue) || isRequiredKey(key)) {
136
+ formData.append(transformedKey, JSON.stringify(cleanedValue));
137
+ }
138
+ }
139
+ else {
140
+ Object.entries(value).forEach(([nestedKey, nestedValue]) => {
141
+ _addToFormData(`${key}.${nestedKey}`, nestedValue);
142
+ });
143
+ }
144
+ }
145
+ else {
146
+ const isNotNullish = value != null && value !== '';
147
+ if (isNotNullish || isRequiredKey(key)) {
148
+ if (typeof value === 'string' && shouldLowercaseValue(key)) {
149
+ formData.append(transformedKey, value.toLowerCase());
150
+ }
151
+ else {
152
+ formData.append(transformedKey, value);
153
+ }
154
+ }
155
+ }
156
+ };
157
+ /** - Helper to process object */
158
+ const _processObject = (obj, parentKey = '') => {
159
+ Object.entries(obj).forEach(([key, value]) => {
160
+ const transformedKey = transformKey(key);
161
+ const fullKey = parentKey ? `${parentKey}.${transformedKey}` : transformedKey;
162
+ // Skip keys that are in ignoreKeys
163
+ if (configs?.ignoreKeys?.includes(fullKey))
164
+ return;
165
+ // Trim string values if trimStrings is enabled
166
+ if (configs?.trimStrings && typeof value === 'string') {
167
+ value = value.trim();
168
+ }
169
+ // Check if this key is preserved
170
+ if (shouldDotNotate(fullKey)) {
171
+ // If it's a preserved path, append the value directly
172
+ _addToFormData(fullKey, value);
173
+ }
174
+ else if (typeof value === 'object' &&
175
+ !Array.isArray(value) &&
176
+ value !== null &&
177
+ !shouldStringify(fullKey)) {
178
+ // Process nested objects
179
+ _processObject(value, key);
180
+ }
181
+ else {
182
+ // For other cases, just append as key-value
183
+ _addToFormData(key, value);
184
+ }
185
+ });
186
+ };
187
+ _processObject(data);
18
188
  return formData;
19
189
  };
20
- /**
21
- * * Check if a formdata object is empty.
22
- *
23
- * @param data FormData to check.
24
- * @returns Boolean (`true`/`false`) Whether the formdata is empty.
25
- */
26
- export const isEmptyFormData = (data) => {
27
- if ('entries' in data && typeof data.entries === 'function') {
28
- return Array.from(data.entries()).length === 0;
29
- }
30
- throw new Error('`FormData.entries()` is not supported in this environment!');
31
- };
@@ -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"}
@@ -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.
@@ -1,4 +1,4 @@
1
- import type { DotNotationKey, DotNotationKeyForArray, DotNotationKeyForObject } 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
  /**
@@ -17,25 +17,29 @@ export interface FormDataConfigs<T> {
17
17
  */
18
18
  lowerCaseKeys?: '*' | DotNotationKey<T>[];
19
19
  /**
20
- * * An array of dot-notation paths to preserve in their original structure.
21
- * - Example: `'user.settings'` ensures `user` remains an object, and `settings` is not flattened.
22
- * - Use `*` to preserve all keys in their dot-notation format.
20
+ * * Defines which values should be converted to lowercase.
21
+ * * Use `*` to apply to all keys.
22
+ */
23
+ lowerCaseValues?: '*' | NestedKeyString<T>[];
24
+ /**
25
+ * * An array of keys (values must be object) to preserve in their original structure.
26
+ * - Use `*` to preserve all keys with object values in their dot-notation format.
23
27
  * - If a key exists in both `dotNotateNested` and `stringifyNested`, `dotNotateNested` takes precedence.
24
28
  */
25
- dotNotateNested?: '*' | DotNotationKeyForObject<T>[];
29
+ dotNotateNested?: '*' | KeyForObject<T>[];
26
30
  /**
27
- * * Specifies which nested objects should be stringified instead of being flattened or dot-notated.
28
- * - Defaults to `*`, meaning all nested objects will be stringified. Which is standard in modern form submissions.
31
+ * * Specifies which keys (values must be objects) should be stringified instead of being dot-notated.
32
+ * - Defaults to `*`, meaning all keys with object values will be stringified. Which is standard in modern form submissions.
29
33
  * - Use `*` to stringify all nested objects.
30
34
  * - If a key exists in both `dotNotateNested` and `stringifyNested`, `dotNotateNested` takes precedence.
31
35
  */
32
- stringifyNested?: '*' | DotNotationKeyForObject<T>[];
36
+ stringifyNested?: '*' | KeyForObject<T>[];
33
37
  /**
34
38
  * * Controls how arrays should be serialized in FormData.
35
39
  * - If a key is included, the array will be broken into individual key-value pairs (`key[0]: value, key[1]: value`).
36
40
  * - Use `*` to apply this behavior to all array keys.
37
41
  */
38
- breakArray?: '*' | DotNotationKeyForArray<T>[];
42
+ breakArray?: '*' | KeyForArray<T>[];
39
43
  /** - Enables automatic trimming of string values before appending them to FormData. */
40
44
  trimStrings?: boolean;
41
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/form/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,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;;;;;OAKG;IACH,eAAe,CAAC,EAAE,GAAG,GAAG,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IAErD;;;;;OAKG;IACH,eAAe,CAAC,EAAE,GAAG,GAAG,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IAErD;;;;OAIG;IACH,UAAU,CAAC,EAAE,GAAG,GAAG,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,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"}
package/dist/index.d.ts CHANGED
@@ -14,9 +14,8 @@ 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, isEmptyFormData } from './form/convert';
18
- export { createControlledFormData } from './form/transform';
19
- export { isCustomFile, isCustomFileArray, isFileUpload, isOriginFileObj, } from './form/guards';
17
+ export { createControlledFormData as convertIntoFormData, createControlledFormData, } from './form/convert';
18
+ export { isCustomFile, isCustomFileArray, isFileUpload, isOriginFileObj, isValidFormData, } from './form/guards';
20
19
  export { cloneObject, countObjectFields, generateQueryParams, isEmptyObject, isObject, } from './object/basics';
21
20
  export { extractNewFields, extractUpdatedAndNewFields, extractUpdatedFields, flattenObjectDotNotation, flattenObjectKeyValue, mergeAndFlattenObjects, mergeObjects, } from './object/objectify';
22
21
  export { sanitizeData } from './object/sanitize';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -19,9 +19,8 @@ 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, isEmptyFormData } from './form/convert';
23
- export { createControlledFormData } from './form/transform';
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
25
  export { cloneObject, countObjectFields, generateQueryParams, isEmptyObject, isObject, } from './object/basics';
27
26
  export { extractNewFields, extractUpdatedAndNewFields, extractUpdatedFields, flattenObjectDotNotation, flattenObjectKeyValue, mergeAndFlattenObjects, mergeObjects, } from './object/objectify';
@@ -26,12 +26,16 @@ export type DotNotationKey<T> = T extends unknown[] ? never : T extends GenericO
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
- export type DotNotationKeyForArray<T> = T extends GenericObject ? {
30
- [K in keyof T & string]: NonNullable<T[K]> extends unknown[] ? `${K}` | `${K}.${DotNotationKeyForArray<NonNullable<T[K]>>}` : never;
29
+ export type KeyForArray<T> = T extends GenericObject ? {
30
+ [K in keyof T & string]: NonNullable<T[K]> extends 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
- export type DotNotationKeyForObject<T> = T extends GenericObject ? {
34
- [K in keyof T & string]: NonNullable<T[K]> extends GenericObject ? NonNullable<T[K]> extends (unknown[]) ? never : `${K}` | `${K}.${DotNotationKeyForObject<NonNullable<T[K]>>}` : never;
33
+ export type KeyForObject<T> = T extends GenericObject ? {
34
+ [K in keyof T & string]: NonNullable<T[K]> extends GenericObject ? NonNullable<T[K]> extends 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]: T[K] extends unknown[] ? never : T[K] extends string ? K : T[K] extends GenericObject ? `${K}.${NestedKeyString<T[K]>}` extends infer R ? R extends string ? R : never : never : 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 ? {
@@ -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;AAE1C,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1D,4CAA4C;AAC5C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAA;CAAE,CAAC;AAE9D,4EAA4E;AAC5E,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAE/E,6CAA6C;AAC7C,MAAM,MAAM,oBAAoB,CAAC,CAAC,IACjC,CAAC,SAAS,OAAO,EAAE,GAClB,KAAK,GACJ,CAAC,SAAS,mBAAmB,GAC9B;KACE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,mBAAmB,GACxD,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAC5C,GAAG,CAAC,EAAE;CACR,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClB,KAAK,CAAC;AAET,6EAA6E;AAC7E,MAAM,MAAM,cAAc,CAAC,CAAC,IAC3B,CAAC,SAAS,OAAO,EAAE,GAClB,KAAK,GACJ,CAAC,SAAS,aAAa,GACxB;KACE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GAC/D,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GACnD,GAAG,CAAC,EAAE;CACR,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClB,KAAK,CAAC;AAET,sFAAsF;AACtF,MAAM,MAAM,sBAAsB,CAAC,CAAC,IACnC,CAAC,SAAS,aAAa,GACtB;KACE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,GAC3D,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAC3D,KAAK;CACP,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClB,KAAK,CAAC;AAET,gGAAgG;AAChG,MAAM,MAAM,uBAAuB,CAAC,CAAC,IACpC,CAAC,SAAS,aAAa,GACtB;KACE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GAC/D,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACzB,OAAO,EAAE,CACT,GACA,KAAK,GACJ,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAC9D,KAAK;CACP,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClB,KAAK,CAAC;AAET,wFAAwF;AACxF,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC/B,CAAC,SAAS,aAAa,GACtB;KACE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,GAC9C,CAAC,GACA,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GAC3B,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GACjC,KAAK;CACP,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClB,KAAK,CAAC;AAET,mCAAmC;AACnC,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,aAAa;IACvD,qBAAqB;IACrB,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;KAC7B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACxE,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAC1B,CAAC,SAAS,mBAAmB,GAC5B;KACE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,SAAS,MAAM,GACxC,CAAC,CAAC,CAAC,CAAC,SAAS,mBAAmB,GAC/B,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GACrC,GAAG,CAAC,EAAE,GACP,KAAK;CACP,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAClB,KAAK,CAAC;AAET;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,IACzD,CAAC,SAAS,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAElE,iDAAiD;AACjD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC3B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GACzD,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC1D,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,GACrC,CAAC,CAAC,CAAC,CAAC;CACN,CAAC;AAEF,iDAAiD;AACjD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC3B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GACzD,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC1D,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAC5B,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAC1B,MAAM;CACR,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/object/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nhb-toolbox",
3
- "version": "2.8.8",
3
+ "version": "2.9.0",
4
4
  "description": "A versatile collection of smart, efficient, and reusable utility functions for everyday development needs.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -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,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,aAAa,QACzD,CAAC,YACG,eAAe,CAAC,CAAC,CAAC,KAC1B,QAkIF,CAAC"}
@@ -1,122 +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
- export const createControlledFormData = (data, configs) => {
13
- const formData = new FormData();
14
- const { stringifyNested = '*' } = configs || {};
15
- /** - Helper function to check if a key matches a dotNotation path to preserve. */
16
- const shouldDotNotate = (key) => {
17
- return Array.isArray(configs?.dotNotateNested) ?
18
- configs.dotNotateNested.some((path) => key === path || key.startsWith(`${path}.`))
19
- : configs?.dotNotateNested === '*';
20
- };
21
- /** - Helper function to check if a key matches a stringifyNested key. */
22
- const shouldStringify = (key) => {
23
- return Array.isArray(stringifyNested) ?
24
- stringifyNested.some((path) => key === path || key.startsWith(`${path}.`))
25
- : stringifyNested === '*';
26
- };
27
- /** - Helper function to check if a key matches a breakArray key. */
28
- const shouldBreakArray = (key) => {
29
- return Array.isArray(configs?.breakArray) ?
30
- configs.breakArray.some((path) => key === path || key.startsWith(`${path}.`))
31
- : configs?.breakArray === '*';
32
- };
33
- /** * Helper function to add values to formData */
34
- const _addToFormData = (key, value) => {
35
- const transformedKey = (configs?.lowerCaseKeys === '*' ||
36
- configs?.lowerCaseKeys?.includes(key)) ?
37
- key.toLowerCase()
38
- : key;
39
- if (isCustomFileArray(value)) {
40
- value.forEach((file) => formData.append(transformedKey, file.originFileObj));
41
- }
42
- else if (isFileUpload(value)) {
43
- if (value.fileList) {
44
- value.fileList.forEach((file) => formData.append(transformedKey, file.originFileObj));
45
- }
46
- else if (value.file) {
47
- if (isCustomFile(value.file)) {
48
- formData.append(transformedKey, value.file.originFileObj);
49
- }
50
- else {
51
- formData.append(transformedKey, value.file);
52
- }
53
- }
54
- }
55
- else if (value instanceof Blob || value instanceof File) {
56
- formData.append(transformedKey, value);
57
- }
58
- else if (Array.isArray(value) && !isInvalidOrEmptyArray(value)) {
59
- if (shouldBreakArray(key)) {
60
- value.forEach((item, index) => {
61
- _addToFormData(`${transformedKey}[${index}]`, item);
62
- });
63
- }
64
- else {
65
- formData.append(transformedKey, JSON.stringify(value));
66
- }
67
- }
68
- else if (typeof value === 'object' &&
69
- value !== null &&
70
- !isEmptyObject(value)) {
71
- if (shouldStringify(key) && !shouldDotNotate(key)) {
72
- formData.append(transformedKey, JSON.stringify(value));
73
- }
74
- else {
75
- Object.entries(value).forEach(([nestedKey, nestedValue]) => {
76
- _addToFormData(`${key}.${nestedKey}`, nestedValue);
77
- });
78
- }
79
- }
80
- else {
81
- const isRequired = configs?.requiredKeys === '*' ||
82
- configs?.requiredKeys?.includes(key);
83
- const isNotNullish = value != null && value !== '';
84
- if (isNotNullish || isRequired) {
85
- formData.append(transformedKey, value);
86
- }
87
- }
88
- };
89
- /** - Helper to process object */
90
- const _processObject = (obj, parentKey = '') => {
91
- Object.entries(obj).forEach(([key, value]) => {
92
- const fullKey = (parentKey ?
93
- `${parentKey}.${key}`
94
- : key);
95
- // Skip keys that are in ignoreKeys
96
- if (configs?.ignoreKeys?.includes(fullKey))
97
- return;
98
- // Trim string values if trimStrings is enabled
99
- if (configs?.trimStrings && typeof value === 'string') {
100
- value = value.trim();
101
- }
102
- // Check if this key is preserved
103
- if (shouldDotNotate(fullKey)) {
104
- // If it's a preserved path, append the value directly
105
- _addToFormData(fullKey, value);
106
- }
107
- else if (typeof value === 'object' &&
108
- !Array.isArray(value) &&
109
- value != null &&
110
- !stringifyNested) {
111
- // Process nested objects
112
- _processObject(value, key);
113
- }
114
- else {
115
- // For other cases, just append as key-value
116
- _addToFormData(key, value);
117
- }
118
- });
119
- };
120
- _processObject(data);
121
- return formData;
122
- };