sweetener

1.0.2 • Public • Published

Sweetener

Inspired by Mike Bostock's Towards Reusable Charts, this function makes it easy to add "syntactic sugar" for getting and setting properties on a function.

Installation

On npm:

npm install sweetener

Sweetener can be run in a browser by including sweetener.js. It is available as a global (sweetener) or via AMD.

Usage

Start with the function you wish to augment, and an object whose properties you wish to use:

var sweetener = require('sweetener') // For node.js
 
function fn () {}
var object = { hello: 'world', foo: 'bar' }

Then call sweetener with the function and the object:

sweetener(fn, object)

The object properties can now be accessed by called methods on the function that match the object key:

fn.foo() // 'bar'

And they can be set by calling the method with a value:

fn.foo('baz')
fn.foo() // 'baz'

Setters return the function itself and so can be chained:

fn.hello('hello').foo('baz')

Why?

In Towards Reusable Charts, Mike Bostock advocates using nested functions like so:

function constructor () {
  var width = 3
  var height = 2
 
  function chart () {
    console.log(width, height)
    // …
  }
 
  chart.width = function (_) {
    if (!arguments.length) return width
    width = _
    return chart
  }
 
  chart.height = function (_) {
    if (!arguments.length) return height
    height = _
    return chart
  }
 
  return chart
}
 
var chart = constructor()
chart() // render chart with a width: 3 and height: 2
chart.width(4).height(3)
chart() // render chart with a width: 4 and height: 3

Writing getters and setters for each variable can get cumbersome, so sweetener can do the work for you:

function constructor () {
  var props = {
    width: 3,
    height: 2
  }
 
  return sweetener(function chart () {
    console.log(props.width, props.height)
    // …
  }, props)
}
 
var chart = constructor()
chart() // render chart with a width: 3 and height: 2
chart.width(4).height(3)
chart() // render chart with a width: 4 and height: 3

License

Sweetener is copyright © 2016+ Dom Christie and released under the MIT license.

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.0.2
    0
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 1.0.2
    0
  • 1.0.1
    0
  • 1.0.0
    1

Package Sidebar

Install

npm i sweetener

Weekly Downloads

1

Version

1.0.2

License

MIT

Last publish

Collaborators

  • domchristie