xfn v1.0.0
Extended Function (xfn)
Extends a function object with configured versions of itself.
Installation
Requires Node.js 7.0.0 or above.
npm i xfnTutorial
Singular/Plural
xfn simplifies the process of creating singular and plural versions of the same function (e.g. get() and get.all()). The function that you write is the plural version, and xfn creates the singular version. The following example uses each as the name of the plural function:
const xfn = require('xfn')
const getFirstOf = xfn({
pluralProp: 'each',
pluralReturn: true,
}, arrs => arrs.map(arr => arr[0]))
const arr = [[1, 2], ['a', 'b']]
getFirstOf(arr) // [1, 2]
getFirstOf.each(arr) // [[1], ['a']]The first call treats arr as a single array, while the second call treats arr as an array of arrays.
Preset Options
xfn lets you create subfunctions that have certain options preconfigured. For example, you can replace fn(arg, {option: true}) with fn.option(arg).
const getOwnProperty = require('get-own-property')
const xfn = require('xfn')
const get = xfn({
optionArg: 2, // The index of the parameter that contains the options
optionProps: {own: {own: true}},
}, (obj, key, {own} = {}) => own ? getOwnProperty(obj, key) : obj[key])
class Cls {
get inherited () { return 123 }
}
const obj = new Cls()
obj.mine = 456
get(obj, 'mine') // 456
get(obj, 'inherited') // 123
get.own(obj, 'mine') // 456
get.own(obj, 'inherited') // undefinedAPI
The module exports a single function.
Parameters
- Object argument:
- Optional:
pluralArg(positive integer): The zero-based index of the argument that should be singularized ifpluralPropis set. Defaults to0. - Optional:
pluralFirst(boolean): Iftrue, thepluralPropcomes before theoptionPropswhen they are both set. Defaults tofalse. (For example: apluralPropofalland anoptionPropskey ofinwill result in a property chain ofall.in()iftrue, orin.all()iffalse.) - Optional:
pluralProp(string or symbol): If set, the returned function will be a singularized version offn, and the originalfnwill be attached to thepluralPropproperty of the returned function (e.g. ifpluralPropis set to'all'and the returned function is assigned to the variableget, the available functions will beget()andget.all()). - Optional:
pluralReturn(boolean): Only applies ifpluralPropis set. Set totrueiffnreturns an array of one result per argument. (This will cause the one-element result array to be unwrapped when the singularized function is called.) Set tofalseiffnreturns a result that does not correspond to the number of arguments. Defaults tofalse. - Required if
optionPropsis set:optionArg(positive integer): The zero-based index of the argument into which the preconfigured options ofoptionPropsshould be inserted. - Optional:
optionProps(object or Map): A collection whose keys are the desiredfnproperty keys and whose values are the option objects that should be merged into the plain object argument at indexoptionArg. - Optional:
sbo(object or false): Options to be passed to thesbomodule (which adds support for the bind operator), orfalseif you do not want thesbomodule applied.
- Optional:
fn(function): The main function that should be extended on the basis of the arguments in the first parameter.
Return Value
A function object with pluralProp and/or optionProps properties.
Related
This module is part of the fn family of modules.