form-payload 1.2.0 → 1.4.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.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "Gets form-payload via form.elements",
5
5
  "keywords": [
6
6
  "form",
package/readme.md CHANGED
@@ -63,35 +63,36 @@ PS. _The library works perfectly with any framework. Just use a valid [HTMLFormE
63
63
 
64
64
  ## Value Correspondence Table
65
65
 
66
- | HTMLElement | Attributes | Included | Value |
67
- | ------------------------------------------------------------------------------------------- | ---------------------------- | -------- | ----------------------------------------------------------------------------------------------- |
68
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="text"` | ✅ | `string` |
69
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="password"` | ✅ | `string` |
70
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="email"` | ✅ | `string` |
71
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="search"` | ✅ | `string` |
72
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="url"` | ✅ | `string` |
73
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="tel"` | ✅ | `string` |
74
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="color"` | ✅ | `string` |
75
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="radio"` | ✅ | `string` |
76
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="hidden"` | ✅ | `string` |
77
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="number"` | ✅ | `number` |
78
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="range"` | ✅ | `number` |
79
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="checkbox"` | ✅ | `boolean` |
80
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="date"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
81
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="time"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
82
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="month"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
83
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="week"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
84
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="datetime-local"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
85
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="file"` | ✅ | [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File) or `null` |
86
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="file"` and `multiple` | ✅ | <code>Array<[File](https://developer.mozilla.org/en-US/docs/Web/API/File)></code> |
87
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="button"` | | |
88
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="submit"` | ❌ | – |
89
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="reset"` | ❌ | – |
90
- | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="image"` | ❌ | – |
91
- | [HTMLTextAreaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextareaElement) | | | `string` |
92
- | [HTMLSelectElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement) | – | ✅ | `string` |
93
- | [HTMLSelectElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement) | `multiple` | ✅ | `Array<string>` |
94
- | [HTMLOutputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement) | | ✅ | `string` |
95
- | [HTMLFieldsetElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldsetElement) | – | ✅ | `Object<name: string, value: unknown>` (recursive values of nested elements) |
96
- | [HTMLButtonElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement) | – | | |
97
- | [HTMLObjectElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement) | – | ❌ | – |
66
+ | HTMLElement | Attributes | Included | Return Value |
67
+ | ------------------------------------------------------------------------------------------- | ----------------------------- | -------- | ----------------------------------------------------------------------------------------------- |
68
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="text"` | ✅ | `string` |
69
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="password"` | ✅ | `string` |
70
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="search"` | ✅ | `string` |
71
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="url"` | ✅ | `string` |
72
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="tel"` | ✅ | `string` |
73
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="color"` | ✅ | `string` |
74
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="radio"` | ✅ | `string` |
75
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="hidden"` | ✅ | `string` |
76
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="email"` | ✅ | `string` |
77
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="email"` and `multiple` | ✅ | `Array<string>` |
78
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="number"` | ✅ | `number` |
79
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="range"` | ✅ | `number` |
80
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="checkbox"` | ✅ | `boolean` |
81
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="date"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
82
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="time"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
83
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="month"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
84
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="week"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
85
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="datetime-local"` | ✅ | [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) |
86
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="file"` | ✅ | [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File) or `null` |
87
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="file"` and `multiple` | | <code>Array<[File](https://developer.mozilla.org/en-US/docs/Web/API/File)></code> |
88
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="button"` | ❌ | – |
89
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="submit"` | ❌ | – |
90
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="reset"` | ❌ | – |
91
+ | [HTMLInputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement) | `type="image"` | | |
92
+ | [HTMLTextAreaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextareaElement) | – | ✅ | `string` |
93
+ | [HTMLSelectElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement) | | ✅ | `string` |
94
+ | [HTMLSelectElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement) | `multiple` | ✅ | `Array<string>` |
95
+ | [HTMLOutputElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement) | – | ✅ | `string` |
96
+ | [HTMLFieldsetElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldsetElement) | – | | `Object<name: string, value: unknown>` (recursive values of nested elements) |
97
+ | [HTMLButtonElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement) | – | ❌ | – |
98
+ | [HTMLObjectElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement) | – | ❌ | – |
@@ -1,13 +1,13 @@
1
1
  export namespace ControlType {
2
2
  let TEXT: "text";
3
3
  let PASSWORD: "password";
4
- let EMAIL: "email";
5
4
  let SEARCH: "search";
6
5
  let URL: "url";
7
6
  let TEL: "tel";
8
7
  let COLOR: "color";
9
8
  let RADIO: "radio";
10
9
  let HIDDEN: "hidden";
10
+ let EMAIL: "email";
11
11
  let NUMBER: "number";
12
12
  let RANGE: "range";
13
13
  let CHECKBOX: "checkbox";
@@ -1,7 +1,6 @@
1
1
  const ControlType = /** @type {const} */ ({
2
2
  TEXT: 'text',
3
3
  PASSWORD: 'password',
4
- EMAIL: 'email',
5
4
  SEARCH: 'search',
6
5
  URL: 'url',
7
6
  TEL: 'tel',
@@ -9,6 +8,8 @@ const ControlType = /** @type {const} */ ({
9
8
  RADIO: 'radio',
10
9
  HIDDEN: 'hidden',
11
10
 
11
+ EMAIL: 'email',
12
+
12
13
  NUMBER: 'number',
13
14
  RANGE: 'range',
14
15
 
@@ -18,6 +19,7 @@ const ControlType = /** @type {const} */ ({
18
19
  TIME: 'time',
19
20
  MONTH: 'month',
20
21
  WEEK: 'week',
22
+
21
23
  DATETIME_LOCAL: 'datetime-local',
22
24
 
23
25
  FILE: 'file',
@@ -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;;;;;GAKG;AACH,sEAJW,iCAAiC,KAqF3C;AAvHD,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":"qCAec,OAAO,2BAA2B,EAAE,sBAAsB;gDAC1D,OAAO,2BAA2B,EAAE,iCAAiC;AA+BnF;;;;;GAKG;AACH,sEAJW,iCAAiC,KAmG3C;AArID,mGAAmG;AACnG,yHAAyH;AAEzH;;;;GAIG;AACH,8FAHc,sBAAsB,OAyBnC"}
@@ -7,6 +7,7 @@ import {
7
7
  getDatetimeLocalValue,
8
8
  getFormControlValue,
9
9
  getInputDateValue,
10
+ getInputEmailValue,
10
11
  getInputFileValue,
11
12
  getInputNumericValue,
12
13
  getMultiSelectValues,
@@ -51,10 +52,17 @@ const getFormControlsPayload = (...controlElements) => {
51
52
  * @throws {FormPayloadError}
52
53
  */
53
54
  const getFormControlPayload = (controlNode) => {
55
+ const hasType = 'type' in controlNode;
56
+
57
+ if (!hasType) {
58
+ throw new FormPayloadError({
59
+ message: 'Control element has no type attribute.',
60
+ });
61
+ }
62
+
54
63
  switch (controlNode.type) {
55
64
  case ControlType.TEXT:
56
65
  case ControlType.PASSWORD:
57
- case ControlType.EMAIL:
58
66
  case ControlType.SEARCH:
59
67
  case ControlType.URL:
60
68
  case ControlType.TEL:
@@ -75,6 +83,13 @@ const getFormControlPayload = (controlNode) => {
75
83
  )
76
84
  );
77
85
  }
86
+ case ControlType.EMAIL: {
87
+ return /** @type {T} */ (
88
+ getInputEmailValue(
89
+ /** @type {HTMLInputElement} */ (controlNode),
90
+ )
91
+ );
92
+ }
78
93
  case ControlType.NUMBER:
79
94
  case ControlType.RANGE: {
80
95
  return /** @type {T} */ (
@@ -129,7 +144,7 @@ const getFormControlPayload = (controlNode) => {
129
144
  }
130
145
 
131
146
  throw new FormPayloadError({
132
- message: `Unsupported control type – ${controlNode.type}.`,
147
+ message: `Unsupported control element type – ${controlNode.type}.`,
133
148
  });
134
149
  };
135
150
 
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @param {HTMLInputElement} inputNode
3
+ * @returns {string | string[]}
4
+ */
5
+ export function getInputEmailValue(inputNode: HTMLInputElement): string | string[];
6
+ //# sourceMappingURL=get-input-email-value.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-input-email-value.helper.d.ts","sourceRoot":"","sources":["../../../../../../src/packages/get-form-control-payload/helpers/get-input-email-value/get-input-email-value.helper.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH,8CAHW,gBAAgB,GACd,MAAM,GAAG,MAAM,EAAE,CAW7B"}
@@ -0,0 +1,20 @@
1
+ import { getFormControlValue } from '../get-control-value/get-control-value.helper.js';
2
+
3
+ const EMAIL_SEPARATOR = ',';
4
+
5
+ /**
6
+ * @param {HTMLInputElement} inputNode
7
+ * @returns {string | string[]}
8
+ */
9
+ const getInputEmailValue = (inputNode) => {
10
+ if (inputNode.multiple) {
11
+ return inputNode.value
12
+ .split(EMAIL_SEPARATOR)
13
+ .map((email) => email.trim())
14
+ .filter((email) => email !== '');
15
+ }
16
+
17
+ return getFormControlValue(inputNode);
18
+ };
19
+
20
+ export { getInputEmailValue };
@@ -4,6 +4,7 @@ export { getCheckboxValue } from "./get-checkbox-value/get-checkbox-value.helper
4
4
  export { getFormControlValue } from "./get-control-value/get-control-value.helper.js";
5
5
  export { getDatetimeLocalValue } from "./get-datatime-local-value/get-datatime-local-value.helper.js";
6
6
  export { getInputDateValue } from "./get-input-date-value/get-input-date-value.helper.js";
7
+ export { getInputEmailValue } from "./get-input-email-value/get-input-email-value.helper.js";
7
8
  export { getInputFileValue } from "./get-input-file-value/get-input-file-value.helper.js";
8
9
  export { getInputNumericValue } from "./get-input-numeric-value/get-input-numeric-value.helper.js";
9
10
  export { getMultiSelectValues } from "./get-multi-select-values/get-multi-select-values.helper.js";
@@ -4,6 +4,7 @@ export { getCheckboxValue } from './get-checkbox-value/get-checkbox-value.helper
4
4
  export { getFormControlValue } from './get-control-value/get-control-value.helper.js';
5
5
  export { getDatetimeLocalValue } from './get-datatime-local-value/get-datatime-local-value.helper.js';
6
6
  export { getInputDateValue } from './get-input-date-value/get-input-date-value.helper.js';
7
+ export { getInputEmailValue } from './get-input-email-value/get-input-email-value.helper.js';
7
8
  export { getInputFileValue } from './get-input-file-value/get-input-file-value.helper.js';
8
9
  export { getInputNumericValue } from './get-input-numeric-value/get-input-numeric-value.helper.js';
9
10
  export { getMultiSelectValues } from './get-multi-select-values/get-multi-select-values.helper.js';