dumbson

0.1.1 • Public • Published

dumbson

JavaScript objects to query string serialization format.

It uses plain JSON.stringify, and then swaps '[]{}:,"' chars, which are escaped in query, with corresponding '()-!*.~', which are not escaped. This is done to reduce length of URL, and improve readability:

json: {"name":"John","value":15}
dumbson: -~name~*~John~.~value~*15!
encodeURI(json): %7B%22name%22:%22John%22,%22value%22:15%7D
encodeURI(dumbson): -~name~*~John~.~value~*15!

This looks retarded, however:

  • it gives better URLs, than just putting plain or base64 JSON into query string
  • it works as reliable as plain JSON
  • serialize(parse(dumbson)) = dumbson, which hard to guarantee for more complex methods

Usage

npm i dumbson -s
import * as dumbson from 'dumbson';
 
stringify({ filter: { type: [1,4,3], color: 'red', size: null }, sort: 'name', page: 0, mode: null })
// "-~filter~*-~type~*(1.4.3).~color~*~red~.~size~*null!.~sort~*~name~.~page~*0.~mode~*null!"
 
parse("-~filter~*-~type~*(1.4.3).~color~*~red~.~size~*null!.~sort~*~name~.~page~*0.~mode~*null!")
// { filter: { type: [1,4,3], color: 'red', size: null }, sort: 'name', page: 0, mode: null }
 
 
// stringifyQuery and parseQueryString utilize "&a=b&c=d" pattern for 1-st level, which looks a bit better.
 
stringifyQuery({ filter: { type: [1,4,3], color: 'red', size: null }, sort: 'name', page: 0, mode: null })
// "filter=-~type~*(1.4.3).~color~*~red~.~size~*null!&sort=~name~&page=0&mode=null"
 
parseQueryString("filter=-~type~*(1.4.3).~color~*~red~.~size~*null!&sort=~name~&page=0&mode=null")
// { filter: { type: [1,4,3], color: 'red', size: null }, sort: 'name', page: 0, mode: null }
 

Using with react-router

import * as dumbson from 'dumbson';
 
const routerHistory = useRouterHistory(...)(dumbson);

Package Sidebar

Install

npm i dumbson

Weekly Downloads

28

Version

0.1.1

License

Apache-2.0

Unpacked Size

18.4 kB

Total Files

6

Last publish

Collaborators

  • jakobz