aboutsummaryrefslogtreecommitdiff
path: root/node_modules/option-chain
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-28 00:38:50 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-28 00:40:43 +0200
commit7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch)
tree6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/option-chain
parent963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff)
downloadwallet-core-7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027.tar.xz
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/option-chain')
-rw-r--r--node_modules/option-chain/index.js54
-rw-r--r--node_modules/option-chain/license21
-rw-r--r--node_modules/option-chain/package.json38
-rw-r--r--node_modules/option-chain/readme.md129
4 files changed, 242 insertions, 0 deletions
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);
+};
diff --git a/node_modules/option-chain/license b/node_modules/option-chain/license
new file mode 100644
index 000000000..ad5d021ed
--- /dev/null
+++ b/node_modules/option-chain/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) James Talmage <james@talmage.io> (github.com/jamestalmage)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/option-chain/package.json b/node_modules/option-chain/package.json
new file mode 100644
index 000000000..2c58dd932
--- /dev/null
+++ b/node_modules/option-chain/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "option-chain",
+ "version": "0.1.1",
+ "description": "Use fluent property chains in lieu of options objects",
+ "license": "MIT",
+ "repository": "jamestalmage/option-chain",
+ "author": {
+ "name": "James Talmage",
+ "email": "james@talmage.io",
+ "url": "github.com/jamestalmage"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "xo && nyc --cache --reporter=lcov --reporter=text ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "option",
+ "options",
+ "chain",
+ "chains",
+ "chainable",
+ "fluent"
+ ],
+ "devDependencies": {
+ "ava": "^0.10.0",
+ "coveralls": "^2.11.6",
+ "nyc": "^5.3.0",
+ "xo": "^0.12.1"
+ },
+ "dependencies": {
+ "object-assign": "^4.0.1"
+ }
+}
diff --git a/node_modules/option-chain/readme.md b/node_modules/option-chain/readme.md
new file mode 100644
index 000000000..efa9af4cc
--- /dev/null
+++ b/node_modules/option-chain/readme.md
@@ -0,0 +1,129 @@
+# option-chain [![Build Status](https://travis-ci.org/jamestalmage/option-chain.svg?branch=master)](https://travis-ci.org/jamestalmage/option-chain) [![Coverage Status](https://coveralls.io/repos/jamestalmage/option-chain/badge.svg?branch=master&service=github)](https://coveralls.io/github/jamestalmage/option-chain?branch=master)
+
+> Use fluent property chains in lieu of options objects.
+
+
+## Install
+
+```
+$ npm install --save option-chain
+```
+
+
+## Usage
+
+```js
+const optionChain = require('option-chain');
+
+const optionDefinition = {
+ defaults: {
+ bar: false
+ },
+ chainableMethods: {
+ foo: {foo: true},
+ notFoo: {foo: false},
+ bar: {bar: true}
+ }
+};
+
+function printOptionsAndArgs(options, args) {
+ console.log(options);
+ if (args.length) {
+ console.log(args);
+ }
+}
+
+const fn = optionChain(optionDefinition, printOptionsAndArgs);
+
+fn();
+//=> [{bar: false}]
+fn.bar();
+//=> [{bar: true}]
+fn.foo.bar();
+//=> [{foo: true, bar: false}]
+
+fn.foo('a', 'b');
+//=> [{foo: true, bar: false}]
+//=> ['a', 'b']
+```
+
+
+## API
+
+### optionChain(options, callback, [target])
+
+#### options
+
+##### chainableMethods
+
+Type: `Object`
+*Required*
+
+A map of chainable property names to the options set by adding property to the chain.
+
+Given the following:
+
+```js
+const chainableMethods = {
+ foo: {foo: true},
+ notFoo: {foo: false},
+ bar: {bar: true},
+ both: {foo: true, bar: true}
+}
+```
+
+Then:
+
+- `fn.foo` would set `foo` to `true`.
+- `fn.bar` would set `bar` to `true`.
+- `fn.both` sets both `foo` and `bar` to `true`.
+- The last property in the chain takes precedence, so `fn.foo.notFoo` would result in `foo` being `false`.
+
+
+##### defaults
+
+Type: `Object`
+Default: `{}`
+
+A set of default starting properties.
+
+##### spread
+
+Type: `boolean`
+Default: `false`
+
+By default, any arguments passed to the wrapper are passed as an array to the second argument of the wrapped function. When this is `true`, additional arguments will be spread out as additional arguments:
+
+```js
+function withoutSpread(opts, args) {
+ let foo = args[0];
+ let bar = args[1];
+ // ...
+}
+
+function withSpread(opts, foo, bar) {
+ // ...
+}
+```
+
+#### callback
+
+Type: `function`
+
+This callback is called with the accumulated options as the first argument. Depending on the value of `options.spread`, arguments passed to the wrapper will either be an array as the second argument or spread out as the 2nd, 3rd, 4th... arguments.
+
+#### target
+
+If supplied, the `target` object is extended with the property getters and returned. Otherwise a wrapper function is created for `options.defaults`, then that wrapper is extended and returned.
+
+*Hint:* If you want to extend a `target` and add a method that simply uses the defaults, add a chainable method definition with an empty spec:
+
+```js
+const chainableMethods = {
+ defaultMethodName: {}
+}
+```
+
+## License
+
+MIT © [James Talmage](http://github.com/jamestalmage)