form-payload 1.5.0 → 1.6.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.
Files changed (18) hide show
  1. package/package.json +1 -1
  2. package/readme.md +1 -0
  3. package/src/libs/constants/value-as-array-custom-control-types.constant.d.ts +1 -1
  4. package/src/libs/constants/value-as-array-custom-control-types.constant.d.ts.map +1 -1
  5. package/src/libs/constants/value-as-array-custom-control-types.constant.js +4 -1
  6. package/src/packages/get-form-control-payload/get-form-control-payload.d.ts +2 -9
  7. package/src/packages/get-form-control-payload/get-form-control-payload.d.ts.map +1 -1
  8. package/src/packages/get-form-control-payload/get-form-control-payload.js +6 -51
  9. package/src/packages/get-form-control-payload/helpers/get-fieldset-value/get-fieldset-value.helper.d.ts +14 -0
  10. package/src/packages/get-form-control-payload/helpers/get-fieldset-value/get-fieldset-value.helper.d.ts.map +1 -0
  11. package/src/packages/get-form-control-payload/helpers/get-fieldset-value/get-fieldset-value.helper.js +27 -0
  12. package/src/packages/get-form-control-payload/helpers/get-form-controls-payload/get-form-controls-payload.d.ts +14 -0
  13. package/src/packages/get-form-control-payload/helpers/get-form-controls-payload/get-form-controls-payload.d.ts.map +1 -0
  14. package/src/packages/get-form-control-payload/helpers/get-form-controls-payload/get-form-controls-payload.js +64 -0
  15. package/src/packages/get-form-control-payload/helpers/helpers.d.ts +2 -0
  16. package/src/packages/get-form-control-payload/helpers/helpers.js +2 -0
  17. package/src/packages/get-form-payload/get-form-payload.d.ts.map +1 -1
  18. package/src/packages/get-form-payload/get-form-payload.js +5 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "form-payload",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "Gets form-payload via form.elements",
5
5
  "keywords": [
6
6
  "form",
package/readme.md CHANGED
@@ -95,5 +95,6 @@ PS. _The library works perfectly with any framework. Just use a valid [HTMLFormE
95
95
  | [HTMLSelectElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement) | `multiple` | ✅ | `Array<string>` |
96
96
  | [HTMLOutputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement) | – | ✅ | `string` |
97
97
  | [HTMLFieldsetElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldsetElement) | – | ✅ | `Object<name: string, value: unknown>` (recursive values of nested elements) |
98
+ | [HTMLFieldsetElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldsetElement) | `[]` in `name` (Ex. `name="shops[]"`) | ✅ | `Array<Object<name: string, value: unknown>>` (recursive values of nested elements) |
98
99
  | [HTMLButtonElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement) | – | ❌ | – |
99
100
  | [HTMLObjectElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement) | – | ❌ | – |
@@ -1,2 +1,2 @@
1
- export const VALUE_AS_ARRAY_CUSTOM_CONTROL_TYPES: "checkbox"[];
1
+ export const VALUE_AS_ARRAY_CUSTOM_CONTROL_TYPES: ("checkbox" | "fieldset")[];
2
2
  //# sourceMappingURL=value-as-array-custom-control-types.constant.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"value-as-array-custom-control-types.constant.d.ts","sourceRoot":"","sources":["../../../../src/libs/constants/value-as-array-custom-control-types.constant.js"],"names":[],"mappings":"AAEA,+DAAmE"}
1
+ {"version":3,"file":"value-as-array-custom-control-types.constant.d.ts","sourceRoot":"","sources":["../../../../src/libs/constants/value-as-array-custom-control-types.constant.js"],"names":[],"mappings":"AAEA,8EAGE"}
@@ -1,5 +1,8 @@
1
1
  import { ControlType } from '../enums/enums.js';
2
2
 
3
- const VALUE_AS_ARRAY_CUSTOM_CONTROL_TYPES = [ControlType.CHECKBOX];
3
+ const VALUE_AS_ARRAY_CUSTOM_CONTROL_TYPES = [
4
+ ControlType.CHECKBOX,
5
+ ControlType.FIELDSET,
6
+ ];
4
7
 
5
8
  export { VALUE_AS_ARRAY_CUSTOM_CONTROL_TYPES };
@@ -1,5 +1,6 @@
1
- export type HTMLFormControlElement = import('../../libs/types/types.js').HTMLFormControlElement;
1
+ export { getFormControlsPayload } from "./helpers/helpers.js";
2
2
  export type HTMLFormOperationalControlElement = import('../../libs/types/types.js').HTMLFormOperationalControlElement;
3
+ /** @typedef {import('../../libs/types/types.js').HTMLFormOperationalControlElement} HTMLFormOperationalControlElement */
3
4
  /**
4
5
  * @template {unknown} T
5
6
  * @param {HTMLFormOperationalControlElement} controlNode
@@ -7,12 +8,4 @@ export type HTMLFormOperationalControlElement = import('../../libs/types/types.j
7
8
  * @throws {FormPayloadError}
8
9
  */
9
10
  export function getFormControlPayload<T extends unknown>(controlNode: HTMLFormOperationalControlElement): T;
10
- /** @typedef {import('../../libs/types/types.js').HTMLFormControlElement} HTMLFormControlElement */
11
- /** @typedef {import('../../libs/types/types.js').HTMLFormOperationalControlElement} HTMLFormOperationalControlElement */
12
- /**
13
- * @template {Record<string, unknown>} T
14
- * @param {...HTMLFormControlElement} controlElements
15
- * @returns {T}
16
- */
17
- export function getFormControlsPayload<T extends Record<string, unknown>>(...controlElements: HTMLFormControlElement[]): T;
18
11
  //# sourceMappingURL=get-form-control-payload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-form-control-payload.d.ts","sourceRoot":"","sources":["../../../../src/packages/get-form-control-payload/get-form-control-payload.js"],"names":[],"mappings":"qCAiBc,OAAO,2BAA2B,EAAE,sBAAsB;gDAC1D,OAAO,2BAA2B,EAAE,iCAAiC;AAyCnF;;;;;GAKG;AACH,sEAJW,iCAAiC,KAmG3C;AA/ID,mGAAmG;AACnG,yHAAyH;AAEzH;;;;GAIG;AACH,8FAHc,sBAAsB,OAmCnC"}
1
+ {"version":3,"file":"get-form-control-payload.d.ts","sourceRoot":"","sources":["../../../../src/packages/get-form-control-payload/get-form-control-payload.js"],"names":[],"mappings":";gDAcc,OAAO,2BAA2B,EAAE,iCAAiC;AAAnF,yHAAyH;AAEzH;;;;;GAKG;AACH,sEAJW,iCAAiC,KAgG3C"}
@@ -1,12 +1,9 @@
1
1
  import { ControlType } from '../../libs/enums/enums.js';
2
2
  import { FormPayloadError } from '../../libs/exceptions/exceptions.js';
3
3
  import {
4
- checkHasValueAsArray,
5
- checkIsReferToAnotherNode,
6
- getAllowedElements,
7
4
  getCheckboxValue,
8
- getCleanedValueAsArrayControlName,
9
5
  getDatetimeLocalValue,
6
+ getFieldsetValue,
10
7
  getFormControlValue,
11
8
  getInputDateValue,
12
9
  getInputEmailValue,
@@ -15,48 +12,8 @@ import {
15
12
  getMultiSelectValues,
16
13
  } from './helpers/helpers.js';
17
14
 
18
- /** @typedef {import('../../libs/types/types.js').HTMLFormControlElement} HTMLFormControlElement */
19
15
  /** @typedef {import('../../libs/types/types.js').HTMLFormOperationalControlElement} HTMLFormOperationalControlElement */
20
16
 
21
- /**
22
- * @template {Record<string, unknown>} T
23
- * @param {...HTMLFormControlElement} controlElements
24
- * @returns {T}
25
- */
26
- const getFormControlsPayload = (...controlElements) => {
27
- const allowedElements = getAllowedElements(controlElements);
28
-
29
- const elementsValues = /** @type {T} */ ({});
30
-
31
- for (const element of allowedElements) {
32
- const isReferToAnotherNode = checkIsReferToAnotherNode(
33
- element,
34
- allowedElements,
35
- );
36
-
37
- if (isReferToAnotherNode) {
38
- continue;
39
- }
40
-
41
- let key = /** @type {keyof T} */ (element.name);
42
- let value = /** @type {T[keyof T]} */ (getFormControlPayload(element));
43
- const hasValueAsArray = checkHasValueAsArray(element);
44
-
45
- if (hasValueAsArray) {
46
- key = getCleanedValueAsArrayControlName(element);
47
-
48
- value = /** @type {T[keyof T]} */ ([
49
- .../** @type {unknown[]} */ (elementsValues[key] ?? []),
50
- .../** @type {unknown[]} */ (getFormControlPayload(element)),
51
- ]);
52
- }
53
-
54
- elementsValues[key] = value;
55
- }
56
-
57
- return elementsValues;
58
- };
59
-
60
17
  /**
61
18
  * @template {unknown} T
62
19
  * @param {HTMLFormOperationalControlElement} controlNode
@@ -143,13 +100,10 @@ const getFormControlPayload = (controlNode) => {
143
100
  );
144
101
  }
145
102
  case ControlType.FIELDSET: {
146
- const elements = [
147
- .../** @type {HTMLFieldSetElement} */ (controlNode).elements,
148
- ];
149
-
150
103
  return /** @type {T} */ (
151
- getFormControlsPayload(
152
- .../** @type {HTMLFormControlElement[]} */ (elements),
104
+ getFieldsetValue(
105
+ getFormControlPayload,
106
+ /** @type {HTMLFieldSetElement} */ (controlNode),
153
107
  )
154
108
  );
155
109
  }
@@ -160,4 +114,5 @@ const getFormControlPayload = (controlNode) => {
160
114
  });
161
115
  };
162
116
 
163
- export { getFormControlPayload, getFormControlsPayload };
117
+ export { getFormControlsPayload } from './helpers/helpers.js';
118
+ export { getFormControlPayload };
@@ -0,0 +1,14 @@
1
+ export type HTMLFormOperationalControlElement = import('../../../../libs/types/types.js').HTMLFormOperationalControlElement;
2
+ export type HTMLFormControlElement = import('../../../../libs/types/types.js').HTMLFormControlElement;
3
+ /** @typedef {import('../../../../libs/types/types.js').HTMLFormOperationalControlElement} HTMLFormOperationalControlElement */
4
+ /** @typedef {import('../../../../libs/types/types.js').HTMLFormControlElement} HTMLFormControlElement */
5
+ /**
6
+ * @template {Record<string, unknown>} T
7
+ * @param {<T extends unknown>(
8
+ * element: HTMLFormOperationalControlElement,
9
+ * ) => T} getFormControlPayloadCallback
10
+ * @param {HTMLFieldSetElement} element
11
+ * @returns {T | [T]}
12
+ */
13
+ export function getFieldsetValue<T extends Record<string, unknown>>(getFormControlPayloadCallback: <T_1 extends unknown>(element: HTMLFormOperationalControlElement) => T_1, element: HTMLFieldSetElement): T | [T];
14
+ //# sourceMappingURL=get-fieldset-value.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-fieldset-value.helper.d.ts","sourceRoot":"","sources":["../../../../../../src/packages/get-form-control-payload/helpers/get-fieldset-value/get-fieldset-value.helper.js"],"names":[],"mappings":"gDAGc,OAAO,iCAAiC,EAAE,iCAAiC;qCAC3E,OAAO,iCAAiC,EAAE,sBAAsB;AAD9E,+HAA+H;AAC/H,yGAAyG;AAEzG;;;;;;;GAOG;AACH,kIALa,iCAAiC,mBAEnC,mBAAmB,WAa7B"}
@@ -0,0 +1,27 @@
1
+ import { VALUE_AS_ARRAY_IDENTIFIER } from '../../../../libs/constants/constants.js';
2
+ import { getFormControlsPayload } from '../get-form-controls-payload/get-form-controls-payload.js';
3
+
4
+ /** @typedef {import('../../../../libs/types/types.js').HTMLFormOperationalControlElement} HTMLFormOperationalControlElement */
5
+ /** @typedef {import('../../../../libs/types/types.js').HTMLFormControlElement} HTMLFormControlElement */
6
+
7
+ /**
8
+ * @template {Record<string, unknown>} T
9
+ * @param {<T extends unknown>(
10
+ * element: HTMLFormOperationalControlElement,
11
+ * ) => T} getFormControlPayloadCallback
12
+ * @param {HTMLFieldSetElement} element
13
+ * @returns {T | [T]}
14
+ */
15
+ const getFieldsetValue = (getFormControlPayloadCallback, element) => {
16
+ const elements = [.../** @type {HTMLFieldSetElement} */ (element).elements];
17
+ const fieldsetValue = getFormControlsPayload(
18
+ getFormControlPayloadCallback,
19
+ .../** @type {HTMLFormControlElement[]} */ (elements),
20
+ );
21
+
22
+ const hasArrayValue = element.name.endsWith(VALUE_AS_ARRAY_IDENTIFIER);
23
+
24
+ return /** @type {T} */ (hasArrayValue ? [fieldsetValue] : fieldsetValue);
25
+ };
26
+
27
+ export { getFieldsetValue };
@@ -0,0 +1,14 @@
1
+ export type HTMLFormOperationalControlElement = import('../../../../libs/types/types.js').HTMLFormOperationalControlElement;
2
+ export type HTMLFormControlElement = import('../../../../libs/types/types.js').HTMLFormControlElement;
3
+ /** @typedef {import('../../../../libs/types/types.js').HTMLFormOperationalControlElement} HTMLFormOperationalControlElement */
4
+ /** @typedef {import('../../../../libs/types/types.js').HTMLFormControlElement} HTMLFormControlElement */
5
+ /**
6
+ * @template {Record<string, unknown>} T
7
+ * @param {<T extends unknown>(
8
+ * element: HTMLFormOperationalControlElement,
9
+ * ) => T} getFormControlPayloadCallback
10
+ * @param {...HTMLFormControlElement} controlElements
11
+ * @returns {T}
12
+ */
13
+ export function getFormControlsPayload<T extends Record<string, unknown>>(getFormControlPayloadCallback: <T_1 extends unknown>(element: HTMLFormOperationalControlElement) => T_1, ...controlElements: HTMLFormControlElement[]): T;
14
+ //# sourceMappingURL=get-form-controls-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-form-controls-payload.d.ts","sourceRoot":"","sources":["../../../../../../src/packages/get-form-control-payload/helpers/get-form-controls-payload/get-form-controls-payload.js"],"names":[],"mappings":"gDAKc,OAAO,iCAAiC,EAAE,iCAAiC;qCAC3E,OAAO,iCAAiC,EAAE,sBAAsB;AAD9E,+HAA+H;AAC/H,yGAAyG;AAEzG;;;;;;;GAOG;AACH,wIALa,iCAAiC,8BAEhC,sBAAsB,OAgDnC"}
@@ -0,0 +1,64 @@
1
+ import { checkHasValueAsArray } from '../check-has-value-as-array/check-has-value-as-array.helper.js';
2
+ import { checkIsReferToAnotherNode } from '../check-is-refer-to-another-node/check-is-refer-to-another-node.helper.js';
3
+ import { getAllowedElements } from '../get-allowed-elements/get-allowed-elements.helper.js';
4
+ import { getCleanedValueAsArrayControlName } from '../get-cleaned-value-as-array-control-name/get-cleaned-value-as-array-control-name.helper.js';
5
+
6
+ /** @typedef {import('../../../../libs/types/types.js').HTMLFormOperationalControlElement} HTMLFormOperationalControlElement */
7
+ /** @typedef {import('../../../../libs/types/types.js').HTMLFormControlElement} HTMLFormControlElement */
8
+
9
+ /**
10
+ * @template {Record<string, unknown>} T
11
+ * @param {<T extends unknown>(
12
+ * element: HTMLFormOperationalControlElement,
13
+ * ) => T} getFormControlPayloadCallback
14
+ * @param {...HTMLFormControlElement} controlElements
15
+ * @returns {T}
16
+ */
17
+ const getFormControlsPayload = (
18
+ getFormControlPayloadCallback,
19
+ ...controlElements
20
+ ) => {
21
+ const allowedElements = getAllowedElements(controlElements);
22
+
23
+ const elementsValues = /** @type {T} */ ({});
24
+
25
+ for (const element of allowedElements) {
26
+ const isReferToAnotherNode = checkIsReferToAnotherNode(
27
+ element,
28
+ allowedElements,
29
+ );
30
+
31
+ if (isReferToAnotherNode) {
32
+ continue;
33
+ }
34
+
35
+ const hasValueAsArray = checkHasValueAsArray(element);
36
+
37
+ if (hasValueAsArray) {
38
+ const key = /** @type {keyof T} */ (
39
+ getCleanedValueAsArrayControlName(element)
40
+ );
41
+ const value = /** @type {T[keyof T]} */ ([
42
+ .../** @type {unknown[]} */ (elementsValues[key] ?? []),
43
+ .../** @type {unknown[]} */ (
44
+ getFormControlPayloadCallback(element)
45
+ ),
46
+ ]);
47
+
48
+ elementsValues[key] = value;
49
+
50
+ continue;
51
+ }
52
+
53
+ const key = /** @type {keyof T} */ (element.name);
54
+ const value = /** @type {T[keyof T]} */ (
55
+ getFormControlPayloadCallback(element)
56
+ );
57
+
58
+ elementsValues[key] = value;
59
+ }
60
+
61
+ return elementsValues;
62
+ };
63
+
64
+ export { getFormControlsPayload };
@@ -5,6 +5,8 @@ export { getCheckboxValue } from "./get-checkbox-value/get-checkbox-value.helper
5
5
  export { getCleanedValueAsArrayControlName } from "./get-cleaned-value-as-array-control-name/get-cleaned-value-as-array-control-name.helper.js";
6
6
  export { getFormControlValue } from "./get-control-value/get-control-value.helper.js";
7
7
  export { getDatetimeLocalValue } from "./get-datatime-local-value/get-datatime-local-value.helper.js";
8
+ export { getFieldsetValue } from "./get-fieldset-value/get-fieldset-value.helper.js";
9
+ export { getFormControlsPayload } from "./get-form-controls-payload/get-form-controls-payload.js";
8
10
  export { getInputDateValue } from "./get-input-date-value/get-input-date-value.helper.js";
9
11
  export { getInputEmailValue } from "./get-input-email-value/get-input-email-value.helper.js";
10
12
  export { getInputFileValue } from "./get-input-file-value/get-input-file-value.helper.js";
@@ -5,6 +5,8 @@ export { getCheckboxValue } from './get-checkbox-value/get-checkbox-value.helper
5
5
  export { getCleanedValueAsArrayControlName } from './get-cleaned-value-as-array-control-name/get-cleaned-value-as-array-control-name.helper.js';
6
6
  export { getFormControlValue } from './get-control-value/get-control-value.helper.js';
7
7
  export { getDatetimeLocalValue } from './get-datatime-local-value/get-datatime-local-value.helper.js';
8
+ export { getFieldsetValue } from './get-fieldset-value/get-fieldset-value.helper.js';
9
+ export { getFormControlsPayload } from './get-form-controls-payload/get-form-controls-payload.js';
8
10
  export { getInputDateValue } from './get-input-date-value/get-input-date-value.helper.js';
9
11
  export { getInputEmailValue } from './get-input-email-value/get-input-email-value.helper.js';
10
12
  export { getInputFileValue } from './get-input-file-value/get-input-file-value.helper.js';
@@ -1 +1 @@
1
- {"version":3,"file":"get-form-payload.d.ts","sourceRoot":"","sources":["../../../../src/packages/get-form-payload/get-form-payload.js"],"names":[],"mappings":"qCAEc,OAAO,2BAA2B,EAAE,sBAAsB;AAAxE,mGAAmG;AAEnG;;;;GAIG;AACH,4EAHW,eAAe,KASzB"}
1
+ {"version":3,"file":"get-form-payload.d.ts","sourceRoot":"","sources":["../../../../src/packages/get-form-payload/get-form-payload.js"],"names":[],"mappings":"qCAKc,OAAO,2BAA2B,EAAE,sBAAsB;AAAxE,mGAAmG;AAEnG;;;;GAIG;AACH,4EAHW,eAAe,KASzB"}
@@ -1,4 +1,7 @@
1
- import { getFormControlsPayload } from '../get-form-control-payload/get-form-control-payload.js';
1
+ import {
2
+ getFormControlPayload,
3
+ getFormControlsPayload,
4
+ } from '../get-form-control-payload/get-form-control-payload.js';
2
5
 
3
6
  /** @typedef {import('../../libs/types/types.js').HTMLFormControlElement} HTMLFormControlElement */
4
7
 
@@ -12,7 +15,7 @@ const getFormPayload = (formNode) => {
12
15
  ...formNode.elements,
13
16
  ]);
14
17
 
15
- return getFormControlsPayload(...elements);
18
+ return getFormControlsPayload(getFormControlPayload, ...elements);
16
19
  };
17
20
 
18
21
  export { getFormPayload };