Nylon Pendulum Movement

    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);

    Install

    npm i dumbson

    DownloadsWeekly Downloads

    44

    Version

    0.1.1

    License

    Apache-2.0

    Unpacked Size

    18.4 kB

    Total Files

    6

    Last publish

    Collaborators

    • jakobz