Newts Parading Majestically

    @f/brackets

    1.0.0 • Public • Published

    brackets

    Build status Git tag NPM version Code style

    Bracket notation for form input names

    Installation

    $ npm install @f/brackets
    

    Usage

    Mostly this is useful for serializing form data to JSON. There is a W3C spec to which this kind of sort of complies, but the spec seems to have been abandoned for reasons unknown. The square notation is essentially a replacement for '.' in dotted paths. You specify name[first], name[last], and it will set the corresponding properties:

    brackets({}, 'name[first]', 'micro-js') // -> {name: {first: 'micro-js'}}

    But it does a little more than dot notation, because it also lets you deal with lists, by using empty square brackets:

    brackets({}, 'colors[]', 'red')                   // -> {colors: ['red']}
    brackets({colors: ['red']}, 'colors[]', 'green'), // -> {colors: ['red', 'green']}

    If you'd like to set nested properties in lists, you can do that too, by just adding more bracketed properties after the []:

    var tmp = brackets({}, 'groups[][name]', 'friends') // -> {groups: [{name: 'friends'}]}
    brackets(tmp, 'groups[][id]', 1)                    // -> {groups: [{name: 'friends', id: 1}]}

    Here's where things get a little messy though. You may be wondering, how does it know I didn't want to append to that list on the second set? The answer is that it checks to see if the deeper property you're trying to set exists already, and only then does it append a new item:

    brackets({}, 'groups[][name]', 'friends')                         // -> {groups: [{name: 'friends'}]}
    brackets({groups: [{name: 'friends'}]}, 'groups[][id]', 1)        // -> {groups: [{name: 'friends', id: 1}]}
    brackets({groups: [{name: 'friends'}]}, 'groups[][name]', 'work') // -> {groups: [{name: 'friends'}, {name: 'work'}]}

    Example

    var reduce = require('@f/reduce')
    var brackets = require('@f/brackets')
    var controls = require('@f/form-controls')
    var serializable = require('@f/is-serializable')
     
    function serialize (form) {
      return reduce(function (acc, ctrl) {
        return serializable(ctrl)
          ? brackets(acc, ctrl.name, ctrl.value)
          : acc
      }, {}, controls(form))
    }

    API

    brackets(obj, path, value)

    • obj - The object you want to set path to value within
    • path - The path using square bracket notation you want to set value at
    • value - The value you want to set at path

    Returns: obj. This function is mutative, you will not receive a fresh copy of obj.

    License

    MIT

    Keywords

    none

    Install

    npm i @f/brackets

    DownloadsWeekly Downloads

    89

    Version

    1.0.0

    License

    MIT

    Last publish

    Collaborators

    • f