diff --git a/CHANGELOG.md b/CHANGELOG.md index 23b563a..38cf132 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ -# dform +# deepform ## 1.0.0 ### Major Changes -- 0d0ad0e: Official release of the `dform` package. +- 0d0ad0e: Official release of the `deepform` package. diff --git a/README.md b/README.md index 6215653..2c22566 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# dform +# deepform -`dform` is a tiny wrapper around [dset](https://github.com/lukeed/dset) to parse `FormData` or `URLSearchParams` into a deeply nested object. +`deepform` is a tiny wrapper around [dset](https://github.com/lukeed/dset) to parse `FormData` or `URLSearchParams` into a deeply nested object. ## Features @@ -11,16 +11,16 @@ ## Installation -Install from [npm](https://www.npmjs.com/package/dform): +Install from [npm](https://www.npmjs.com/package/deepform): ```sh -npm install dform +npm install deepform ``` ## Usage ```ts -import { dform } from 'dform'; +import { parseFormData } from 'deepform'; const data = new FormData(); @@ -31,7 +31,7 @@ data.append('&b.d', 'on'); data.append('e.0', '3'); data.append('e.1', '4'); -const result = dform(data); +const result = parseFormData(data); // { // a: '0', // b: { @@ -44,7 +44,7 @@ const result = dform(data); ## Type casting -`dform` will attempt to cast values based on the prefix of the key: +`deepform` will attempt to cast values based on the prefix of the key: - `+` prefix will cast the value to a number. - `&` prefix will cast the value to a boolean. The following values will be cast to `true`: @@ -53,14 +53,14 @@ const result = dform(data); - `'1'` (or any other non-zero number) ```ts -import { dform } from 'dform'; +import { parseFormData } from 'deepform'; const data = new FormData(); data.append('+number', '42'); data.append('checkbox', 'on'); -const result = dform(data); +const result = parseFormData(data); // { // number: 42, // checkbox: true, @@ -70,12 +70,12 @@ const result = dform(data); This is useful when parsing numeric inputs or checkboxes: ```jsx -import { dform } from 'dform'; +import { parseFormData } from 'deepform'; const MyForm = () => { const handleSubmit = (e) => { const formData = new FormData(e.target); - const parsedData = dform(formData); + const parsedData = parseFormData(formData); // { // text: 'Hello, World!', // number: 42, @@ -110,10 +110,10 @@ export default MyForm; ## Array values -`dform` supports arrays of values by using the `[]` suffix in the key: +`deepform` supports arrays of values by using the `[]` suffix in the key: ```ts -import { dform } from 'dform'; +import { parseFormData } from 'deepform'; const data = new FormData(); @@ -121,7 +121,7 @@ data.append('a[]', '1'); data.append('a[]', '2'); data.append('a[]', '3'); -const result = dform(data); +const result = parseFormData(data); // { // a: ['1', '2', '3'], // }; @@ -130,14 +130,14 @@ const result = dform(data); This is useful when parsing multiple values from a single input or multiple inputs with the same name: ```jsx -import { dform } from 'dform'; +import { parseFormData } from 'deepform'; const MyForm = () => { const fruits = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry']; const handleSubmit = (e) => { const formData = new FormData(e.target); - const parsedData = dform(formData); + const parsedData = parseFormData(formData); // { // fruits: ['Apple', 'Cherry', 'Date'], // } @@ -167,23 +167,23 @@ const MyForm = () => { - Type: `boolean` - Default: `false` -When `true`, `dform` will omit empty string values from the result object. +When `true`, `deepform` will omit empty string values from the result object. ```ts -import { dform } from 'dform'; +import { parseFormData } from 'deepform'; const data = new FormData(); data.append('a', ''); data.append('b', 'foo'); -const result = dform(data); +const result = parseFormData(data); // { // a: '', // b: 'foo', // }; -const result2 = dform(data, { omitEmptyStrings: true }); +const result2 = parseFormData(data, { omitEmptyStrings: true }); // { // b: 'foo', // }; @@ -197,4 +197,4 @@ const result2 = dform(data, { omitEmptyStrings: true }); ## License -See [LICENSE](https://github.com/alexiglesias93/dform/blob/main/LICENSE). +See [LICENSE](https://github.com/alexiglesias93/deepform/blob/main/LICENSE). diff --git a/package.json b/package.json index 8853d51..3e7c4e2 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,18 @@ { - "name": "dform", + "name": "deepform", "version": "1.0.0", "description": "Parse FormData into deeply nested objects.", "author": { "name": "Alex Iglesias", "url": "https://alexiglesias.me" }, - "homepage": "https://github.com/alexiglesias93/dform#readme", + "homepage": "https://github.com/alexiglesias93/deepform#readme", "bugs": { - "url": "https://github.com/alexiglesias93/dform/issues" + "url": "https://github.com/alexiglesias93/deepform/issues" }, "repository": { "type": "git", - "url": "git+https://github.com/alexiglesias93/dform.git" + "url": "git+https://github.com/alexiglesias93/deepform.git" }, "files": [ "dist", @@ -50,7 +50,7 @@ "object", "array", "deep", - "dform", + "deepform", "dset" ], "scripts": { diff --git a/src/index.test.ts b/src/index.test.ts index 6f76d25..05575c7 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -1,8 +1,8 @@ import * as assert from 'node:assert/strict'; import { describe, it } from 'node:test'; -import { dform } from './index.ts'; +import { parseFormData } from './index.ts'; -describe('dform', () => { +describe('deepform', () => { describe('basic assignments', () => { it('top level assignments', () => { const data = new FormData(); @@ -11,7 +11,7 @@ describe('dform', () => { data.append('b', '2'); data.append('c', '3'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: '1', @@ -28,7 +28,7 @@ describe('dform', () => { data.append('a.d.0', '0'); data.append('a.d.1', '1'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: { @@ -46,7 +46,7 @@ describe('dform', () => { data.append('a[]', '2'); data.append('a[]', '3'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: ['1', '2', '3'], @@ -60,7 +60,7 @@ describe('dform', () => { data.append('a.b[]', '2'); data.append('a.b[]', '3'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: { @@ -76,7 +76,7 @@ describe('dform', () => { data.append('a.b[]', '2'); data.append('a.c', '3'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: { @@ -95,7 +95,7 @@ describe('dform', () => { data.append('+b', '2.2'); data.append('+c', '3.33'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: 1, @@ -112,7 +112,7 @@ describe('dform', () => { data.append('&c', 'on'); data.append('&d', '0'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: true, @@ -131,7 +131,7 @@ describe('dform', () => { data.append('+b', '2'); data.append('&c', 'true'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: '1', @@ -150,7 +150,7 @@ describe('dform', () => { data.append('&a.e.1', '1'); data.append('+a.e.2', '2'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: { @@ -169,7 +169,7 @@ describe('dform', () => { data.append('+a[]', '2'); data.append('&a[]', 'true'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: ['1', 2, true], @@ -185,7 +185,7 @@ describe('dform', () => { data.append('a.c.0[]', 'foo'); data.append('a.c.0[]', 'bar'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: { @@ -205,7 +205,7 @@ describe('dform', () => { data.append('e.0', '3'); data.append('e.1', '4'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: '0', @@ -226,7 +226,7 @@ describe('dform', () => { data.append('b', ''); data.append('c', '3'); - const result = dform(data, { omitEmptyStrings: true }); + const result = parseFormData(data, { omitEmptyStrings: true }); assert.deepEqual(result, { a: '1', @@ -238,7 +238,7 @@ describe('dform', () => { describe('URLSearchParams', () => { it('can parse URLSearchParams', () => { const data = new URLSearchParams('a=1&b=2&c=3'); - const result = dform(data); + const result = parseFormData(data); assert.deepEqual(result, { a: '1', diff --git a/src/index.ts b/src/index.ts index 16ede56..9ba0d54 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,6 +20,7 @@ type Result = { * @example * ```ts * const data = new FormData(); + * * data.append('a', '0'); * data.append('b.c[]', '1'); * data.append('+b.c[]', '2'); @@ -27,6 +28,7 @@ type Result = { * data.append('e.0', '3'); * data.append('e.1', '4'); * + * parseFormData(data); * // => { a: '0', b: { c: ['1', 2], d: true }, e: ['3', '4'] } * ``` * @@ -34,7 +36,7 @@ type Result = { * @param options - Options for parsing the data: * - `omitEmptyStrings` - Exclude empty string values from the result. */ -export const dform = ( +export const parseFormData = ( data: Iterable<[string, string | File]>, { omitEmptyStrings }: Options = {} ) => {