From 7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Sun, 28 May 2017 00:38:50 +0200 Subject: add linting (and some initial fixes) --- node_modules/option-chain/index.js | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 node_modules/option-chain/index.js (limited to 'node_modules/option-chain/index.js') diff --git a/node_modules/option-chain/index.js b/node_modules/option-chain/index.js new file mode 100644 index 000000000..cf0d484b4 --- /dev/null +++ b/node_modules/option-chain/index.js @@ -0,0 +1,54 @@ +'use strict'; +var objectAssign = require('object-assign'); + +module.exports = function (options, fn, target) { + var chainables = options.chainableMethods || {}; + var spread = options.spread; + var defaults = objectAssign({}, options.defaults); + + function extend(target, getter, ctx) { + Object.keys(chainables).forEach(function (key) { + Object.defineProperty(target, key, { + enumerable: true, + configurable: true, + get: function () { + return wrap(getter, chainables[key], ctx || this); + } + }); + }); + } + + function wrap(createOpts, extensionOpts, ctx) { + function wrappedOpts() { + return objectAssign(createOpts(), extensionOpts); + } + + function wrappedFn() { + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + if (spread) { + args.unshift(wrappedOpts()); + } else { + args = [wrappedOpts(), args]; + } + return fn.apply(ctx || this, args); + } + + extend(wrappedFn, wrappedOpts, ctx); + + return wrappedFn; + } + + function copyDefaults() { + return objectAssign({}, defaults); + } + + if (target) { + extend(target, copyDefaults); + return target; + } + + return wrap(copyDefaults); +}; -- cgit v1.2.3