form-payload 1.1.0 → 1.3.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "form-payload",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "Gets form-payload via form.elements",
5
5
  "keywords": [
6
6
  "form",
@@ -1,11 +1,12 @@
1
1
  export type HTMLFormControlElement = import('../../libs/types/types.js').HTMLFormControlElement;
2
2
  export type HTMLFormOperationalControlElement = import('../../libs/types/types.js').HTMLFormOperationalControlElement;
3
3
  /**
4
+ * @template {unknown} T
4
5
  * @param {HTMLFormOperationalControlElement} controlNode
5
- * @returns {unknown}
6
+ * @returns {T}
6
7
  * @throws {FormPayloadError}
7
8
  */
8
- export function getFormControlPayload(controlNode: HTMLFormOperationalControlElement): unknown;
9
+ export function getFormControlPayload<T extends unknown>(controlNode: HTMLFormOperationalControlElement): T;
9
10
  /** @typedef {import('../../libs/types/types.js').HTMLFormControlElement} HTMLFormControlElement */
10
11
  /** @typedef {import('../../libs/types/types.js').HTMLFormOperationalControlElement} HTMLFormOperationalControlElement */
11
12
  /**
@@ -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":"qCAcc,OAAO,2BAA2B,EAAE,sBAAsB;gDAC1D,OAAO,2BAA2B,EAAE,iCAAiC;AA+BnF;;;;GAIG;AACH,mDAJW,iCAAiC,GAC/B,OAAO,CA0EnB;AA5GD,mGAAmG;AACnG,yHAAyH;AAEzH;;;;GAIG;AACH,8FAHc,sBAAsB,OAyBnC"}
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":"qCAcc,OAAO,2BAA2B,EAAE,sBAAsB;gDAC1D,OAAO,2BAA2B,EAAE,iCAAiC;AA+BnF;;;;;GAKG;AACH,sEAJW,iCAAiC,KA6F3C;AA/HD,mGAAmG;AACnG,yHAAyH;AAEzH;;;;GAIG;AACH,8FAHc,sBAAsB,OAyBnC"}
@@ -45,11 +45,20 @@ const getFormControlsPayload = (...controlElements) => {
45
45
  };
46
46
 
47
47
  /**
48
+ * @template {unknown} T
48
49
  * @param {HTMLFormOperationalControlElement} controlNode
49
- * @returns {unknown}
50
+ * @returns {T}
50
51
  * @throws {FormPayloadError}
51
52
  */
52
53
  const getFormControlPayload = (controlNode) => {
54
+ const hasType = 'type' in controlNode;
55
+
56
+ if (!hasType) {
57
+ throw new FormPayloadError({
58
+ message: 'Control element has no type attribute.',
59
+ });
60
+ }
61
+
53
62
  switch (controlNode.type) {
54
63
  case ControlType.TEXT:
55
64
  case ControlType.PASSWORD:
@@ -63,47 +72,55 @@ const getFormControlPayload = (controlNode) => {
63
72
  case ControlType.TEXTAREA:
64
73
  case ControlType.SELECT_ONE:
65
74
  case ControlType.OUTPUT: {
66
- return getFormControlValue(
67
- /**
68
- * @type {HTMLInputElement
69
- * | HTMLOutputElement
70
- * | HTMLTextAreaElement
71
- * | HTMLSelectElement}
72
- */ (controlNode),
75
+ return /** @type {T} */ (
76
+ getFormControlValue(
77
+ /**
78
+ * @type {HTMLInputElement
79
+ * | HTMLOutputElement
80
+ * | HTMLTextAreaElement
81
+ * | HTMLSelectElement}
82
+ */ (controlNode),
83
+ )
73
84
  );
74
85
  }
75
86
  case ControlType.NUMBER:
76
87
  case ControlType.RANGE: {
77
- return getInputNumericValue(
78
- /** @type {HTMLInputElement} */ (controlNode),
88
+ return /** @type {T} */ (
89
+ getInputNumericValue(
90
+ /** @type {HTMLInputElement} */ (controlNode),
91
+ )
79
92
  );
80
93
  }
81
94
  case ControlType.CHECKBOX: {
82
- return getCheckboxValue(
83
- /** @type {HTMLInputElement} */ (controlNode),
95
+ return /** @type {T} */ (
96
+ getCheckboxValue(/** @type {HTMLInputElement} */ (controlNode))
84
97
  );
85
98
  }
86
99
  case ControlType.DATE:
87
100
  case ControlType.TIME:
88
101
  case ControlType.MONTH:
89
102
  case ControlType.WEEK: {
90
- return getInputDateValue(
91
- /** @type {HTMLInputElement} */ (controlNode),
103
+ return /** @type {T} */ (
104
+ getInputDateValue(/** @type {HTMLInputElement} */ (controlNode))
92
105
  );
93
106
  }
94
107
  case ControlType.DATETIME_LOCAL: {
95
- return getDatetimeLocalValue(
96
- /** @type {HTMLInputElement} */ (controlNode),
108
+ return /** @type {T} */ (
109
+ getDatetimeLocalValue(
110
+ /** @type {HTMLInputElement} */ (controlNode),
111
+ )
97
112
  );
98
113
  }
99
114
  case ControlType.FILE: {
100
- return getInputFileValue(
101
- /** @type {HTMLInputElement} */ (controlNode),
115
+ return /** @type {T} */ (
116
+ getInputFileValue(/** @type {HTMLInputElement} */ (controlNode))
102
117
  );
103
118
  }
104
119
  case ControlType.SELECT_MULTIPLE: {
105
- return getMultiSelectValues(
106
- /** @type {HTMLSelectElement} */ (controlNode),
120
+ return /** @type {T} */ (
121
+ getMultiSelectValues(
122
+ /** @type {HTMLSelectElement} */ (controlNode),
123
+ )
107
124
  );
108
125
  }
109
126
  case ControlType.FIELDSET: {
@@ -111,14 +128,16 @@ const getFormControlPayload = (controlNode) => {
111
128
  .../** @type {HTMLFieldSetElement} */ (controlNode).elements,
112
129
  ];
113
130
 
114
- return getFormControlsPayload(
115
- .../** @type {HTMLFormControlElement[]} */ (elements),
131
+ return /** @type {T} */ (
132
+ getFormControlsPayload(
133
+ .../** @type {HTMLFormControlElement[]} */ (elements),
134
+ )
116
135
  );
117
136
  }
118
137
  }
119
138
 
120
139
  throw new FormPayloadError({
121
- message: `Unsupported control type – ${controlNode.type}.`,
140
+ message: `Unsupported control element type – ${controlNode.type}.`,
122
141
  });
123
142
  };
124
143