Socket
Socket
Sign inDemoInstall

sweetener

Package Overview
Dependencies
0
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    sweetener

Add getters and setters to a function to connect it with an object


Version published
Maintainers
1
Created

Readme

Source

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.

FAQs

Last updated on 21 Oct 2016

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc