obdo

1.0.0 • Public • Published

🎈 obdo

Simple Object generator.

Tired of the json? Rethink it with obdo, (simple object dot notation).

The obdo package will allow you to avoid ♾️ infinitely long levels of nesting and indentation, as well as make the markup of objects more intuitive and cleaner.

Instead of:

const foo = {
  bar: 'baz',
  qux: {
    quux: 0,
    quuz: {
      corge: 1
    }
  }
}

You can:

import o from 'obdo'
 
const foo = o()
  .k('bar').v('baz')
  .k('qux')
  ._().k('quux').v(0)
  ._().k('quuz')
  ._(2).k('corge').v(1)
  .o()

Simple, isn't it? 🌞

Install

npm i obdo

Works in node and modern browsers.

In browser you can import it like es module:

Just copy index.js from this repo, rename it to obdo.js and use:

<!--index.html-->
<script type="module">
  import o from './obdo.js'
  console.log(o().k('hello').v('world').o())
</script> 

Usage

  • Basic usage:
const foo = o()
  .key('bar').val('baz')
  .key('qux')
  .tab().key('quux').val('quuz')
  .o() // return
  • Short aliases:
const foo = o()
  .k('bar').v('baz')
  .k('qux')
  ._().k('quux').v('quuz')
  .o() // return
  • ### Aliases table:
Long Short Description
.key() .k() Create new key
.val() .v() Assign value to key
.tab() ._() Put next key inside one of the previous
.obj() .o() Return resulted object
  • ### Nesting

To created nested object, increase .tab() argument. By default it equals to 1:

const nested = o()
  .k('wrapper')
  ._().k('inside')
  ._(2).k('inside').v('of inside')
  .o() // return
 
/*
{
  wrapper: {
    inside: {
      inside: 'of inside'
    }
  }
}
*/

You can create infinite nesting without cluttering the code with a bunch of indents:

const giza = o(true, '  ')
  .k('🧱0')
  ._(1).k('🧱1')
  ._(2).k('🧱2')
  ._(3).k('🧱3')
  ._(4).k('🧱4')
  ._(5).k('🧱5')
  ._(6).k('🧱6').v('👁️')
  .o() // return
 
/*
  "🧱0": {
    "🧱1": {
      "🧱2": {
        "🧱3": {
          "🧱4": {
            "🧱5": {
              "🧱6": "👁️"
            }
          }
        }
      }
    }
  }
}
*/
  • ### Methods arguments

.key() or .k()

Argument Type Default Description
name * undefined Name of the key to install
depth Number 0 Nesting level, don't use it directly

.val() or .v()

Argument Type Default Description
value * Uses the empty parameter passed during initialization in o() Value to assign

.tab() or ._()

Argument Type Default Description
quantity Number 1 Tabs quantity, depth nesting level to pass to .key()'s depth parameter

Advanced usage

  • ### Initialization arguments
Argument Type Default Description
stringify Boolean false Use JSON.stringify() on result object, or not
space String or Number undefined Separator for stringify, if String use this string as separator, else if Number use number * ' ' as separator
empty * undefined Replace undefined values with this argument

Main o() function accept some arguments to tweak your object, for example:

  • Stringify:
const body = o(true)
  .k('id').v(777)
  .k('token').v('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9')
  .o() // return
 
// {"id":777,"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"}
  • Stringify with two spaces:
const body = o(true, '  ')
  .k('id').v(777)
  .k('token').v('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9')
  .o() // return
 
console.log(body)
/*
{
  "id": 777,
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}
*/
  • Placeholder

If you want to pass undefined value to the key you can:

const foo = o().k('falsy')
// { falsy: undefined }

or

const foo = o().k('falsy').v(undefined)
// { falsy: undefined }

to replace undefined values with default pass third parameter empty:

const foo = o(false, '', null).k('falsy')
// { falsy: null }

also you can pass undefined as key:

const foo = o().v("i'm undefined :)").o()
// { undefined: "i'm undefined :)" }

to create empty object, just do:

const empty = o().o()

⚠️ Remember that you should always call the .o() method at the end of any chain to return the desired object.

.val() argument

The argument can be any expression, any type, you can even write something like this:

const weirdo = o()
  .k('self').v(o().k('foo').v('bar').o())
  .o()
 
// { self: { foo: 'bar' } }

but it's better to use standard syntax:

const weirdo = o()
  .k('self')
  ._().k('foo').v('bar')
  .o()
 
// { self: { foo: 'bar' } }

Contribute

If you want to help, or found a bug - open issue, merge/pull request, or donate 🤑.

License

Licensed under the MIT license.

Package Sidebar

Install

npm i obdo

Weekly Downloads

0

Version

1.0.0

License

MIT

Unpacked Size

11.4 kB

Total Files

4

Last publish

Collaborators

  • ceigh