Skip to content

Commit

Permalink
Merge pull request #3 from alexiglesias93/rename-repo
Browse files Browse the repository at this point in the history
chore: rename repo to deepform
  • Loading branch information
alexiglesias93 authored Feb 16, 2025
2 parents c048a3c + 0eb80d3 commit 98b94c3
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 45 deletions.
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
42 changes: 21 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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();

Expand All @@ -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: {
Expand All @@ -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`:
Expand All @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -110,18 +110,18 @@ 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();

data.append('a[]', '1');
data.append('a[]', '2');
data.append('a[]', '3');

const result = dform(data);
const result = parseFormData(data);
// {
// a: ['1', '2', '3'],
// };
Expand All @@ -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'],
// }
Expand Down Expand Up @@ -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',
// };
Expand All @@ -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).
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down Expand Up @@ -50,7 +50,7 @@
"object",
"array",
"deep",
"dform",
"deepform",
"dset"
],
"scripts": {
Expand Down
32 changes: 16 additions & 16 deletions src/index.test.ts
Original file line number Diff line number Diff line change
@@ -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();
Expand All @@ -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',
Expand All @@ -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: {
Expand All @@ -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'],
Expand All @@ -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: {
Expand All @@ -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: {
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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',
Expand All @@ -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: {
Expand All @@ -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],
Expand All @@ -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: {
Expand All @@ -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',
Expand All @@ -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',
Expand All @@ -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',
Expand Down
4 changes: 3 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,23 @@ type Result = {
* @example
* ```ts
* const data = new FormData();
*
* data.append('a', '0');
* data.append('b.c[]', '1');
* data.append('+b.c[]', '2');
* data.append('&b.d', 'on');
* data.append('e.0', '3');
* data.append('e.1', '4');
*
* parseFormData(data);
* // => { a: '0', b: { c: ['1', 2], d: true }, e: ['3', '4'] }
* ```
*
* @param data - The data to parse. It can be a {@link FormData}, a {@link URLSearchParams} or an iterable of key-value pairs.
* @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 = {}
) => {
Expand Down

0 comments on commit 98b94c3

Please sign in to comment.