npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

form-serialization

v0.11.0

Published

Serialize and deserialize HTML forms

Downloads

2,519

Readme

form-serialization Build Status

Note: You may be able to get the functionality you need from using FormData (for which there are also polyfills for the browser or Node).

Serialize form fields. A fork of form-serialize.

Special features

  • Adds deserialize
  • Offers a pre-made browser bundle
  • Offers ESM distribution as well as UMD
  • Offers JSDoc

Use cases

  • Submit a form via XMLHttpRequest
  • Retain settings in local storage
  • Serialize to string for use within hash-based offlineable URLs
  • Serialize for use within modifying history state

Install

npm install form-serialization

Usage

form-serialization supports two output formats, URL encoding (the default) or a hash (JavaScript objects).

Lets serialize the following HTML form:

<form id="example-form">
	<input type="text" name="foo" value="bar"/>
	<input type="submit" value="do it!"/>
</form>
const serialize = require('form-serialization');

const form = document.querySelector('#example-form');

const str = serialize(form);
// str -> "foo=bar"

const obj = serialize(form, {hash: true});
// obj -> { foo: 'bar' }

API

serialize(form [, options])

Returns a serialized form of a HTMLFormElement. Output is determined by the serializer used. The default serializer performs URL encoding.

arg | type | desc :--- | :--- | :--- form | HTMLForm | must be an HTMLFormElement options | Object | optional options object

Options

option | type | default | desc :--- | :--- | :---: | :--- hash | boolean | false | If true, the hash serializer will be used for serializer option serializer | function | url-encoding | Override the default serializer (hash or url-encoding) disabled | boolean | false | If true, disabled fields will also be serialized empty | boolean | false | If true, empty fields will also be serialized

Custom serializer

Serializers take 3 arguments: result, key, value and should return a newly updated result.

See the example serializers in the index.js source file.

Notes

Only successful control form fields are serialized (with the exception of disabled fields if disabled option is set).

Multiselect fields with more than one value will result in an array of values in the hash output mode using the default hash serializer

Explicit array fields

Fields who's name ends with [] are always serialized as an array field in hash output mode using the default hash serializer. The field name also gets the brackets removed from its name.

This does not affect the URL encoding mode output in any way.

<form id="example-form">
	<input type="checkbox" name="foo[]" value="bar" checked />
	<input type="checkbox" name="foo[]" value="baz" />
	<input type="submit" value="do it!"/>
</form>
const serialize = require('form-serialization');

const form = document.querySelector('#example-form');

const obj = serialize(form, {hash: true});
// obj -> { foo: ['bar'] }

const str = serialize(form);
// str -> "foo[]=bar"

Indexed arrays

Adding numbers between brackets for the array notation above will result in a hash serialization with explicit ordering based on the index number regardless of element ordering.

Like the "explicit array fields" this does not affect ULR encoding mode output in any way.

<form id="todos-form">
	<input type="text" name="todos[1]" value="milk" />
	<input type="text" name="todos[0]" value="eggs" />
	<input type="text" name="todos[2]" value="flour" />
</form>
const serialize = require('form-serialization');

const form = document.querySelector('#todos-form');

const obj = serialize(form, {hash: true});
// obj -> { todos: ['eggs', 'milk', 'flour'] }

const str = serialize(form);
// str -> "todos[1]=milk&todos[0]=eggs&todos[2]=flour"

Nested objects

Similar to the indexed array notation, attribute names can be added by inserting a string value between brackets. The notation can be used to create deep objects and mixed with the array notation.

Like the "explicit array fields" this does not affect URL encoding mode output.

<form id="nested-example">
	<input type="text" name="foo[bar][baz]" value="qux" />
	<input type="text" name="foo[norf][]" value="item 1" />
</form>
const serialize = require('form-serialization');

const form = document.querySelector('#todos-form');

const obj = serialize(form, {hash: true});
// obj -> { foo: { bar: { baz: 'qux' } }, norf: [ 'item 1' ] }

License

MIT