diff --git a/.gitignore b/.gitignore
index e69de29..6a8728b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,4 @@
+node_modules
+.gitignore
+coverage
+.idea
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..0ffd4ea
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,27 @@
+# Contributing
+
+Note: __README.md__ is generated from comments in __index.js__. Do not modify
+__README.md__ directly.
+
+1. Update local master branch:
+
+ $ git checkout master
+ $ git pull upstream master
+
+2. Create feature branch:
+
+ $ git checkout -b feature-x
+
+3. Make one or more atomic commits, and ensure that each commit has a
+ descriptive commit message. Commit messages should be line wrapped
+ at 72 characters.
+
+4. Run `make test lint`, and address any errors. Preferably, fix commits
+ in place using `git rebase` or `git commit --amend` to make the changes
+ easier to review.
+
+5. Push:
+
+ $ git push origin feature-x
+
+6. Open a pull request.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..48a84dd
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,25 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Sanctuary
+Copyright (c) 2016 Plaid Technologies, Inc.
+
+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/Makefile b/Makefile
new file mode 100644
index 0000000..5871142
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,80 @@
+DOCTEST = node_modules/.bin/doctest --module commonjs --prefix .
+ESLINT = node_modules/.bin/eslint --config node_modules/sanctuary-style/eslint-es3.json --env es3
+ISTANBUL = node_modules/.bin/istanbul
+REMEMBER_BOWER = node_modules/.bin/remember-bower
+TRANSCRIBE = node_modules/.bin/transcribe
+XYZ = node_modules/.bin/xyz --repo git@github.com:sanctuary-js/sanctuary-maybe.git --script scripts/prepublish
+YARN = yarn
+
+
+.PHONY: all
+all: LICENSE README.md
+
+.PHONY: LICENSE
+LICENSE:
+ cp -- '$@' '$@.orig'
+ sed 's/Copyright (c) .* Sanctuary/Copyright (c) $(shell git log --date=format:%Y --pretty=format:%ad | sort -r | head -n 1) Sanctuary/' '$@.orig' >'$@'
+ rm -- '$@.orig'
+
+README.md: README.md.tmp package.json scripts/version-urls
+ scripts/version-urls '$<' >'$@'
+
+.INTERMEDIATE: README.md.tmp
+README.md.tmp: index.js
+ $(TRANSCRIBE) \
+ --heading-level 4 \
+ --url 'https://github.com/sanctuary-js/sanctuary-maybe/blob/v$(VERSION)/{filename}#L{line}' \
+ -- $^ \
+ | LC_ALL=C sed 's/
\(.*\)\1#\2/\3\1#\2/' >'$@'
+
+
+.PHONY: lint
+lint:
+ $(ESLINT) \
+ --global define \
+ --global module \
+ --global require \
+ --global self \
+ -- index.js
+ $(ESLINT) \
+ --env node \
+ $(ESLINT) \
+ --env node \
+ --global suite \
+ --global test \
+ --rule 'dot-notation: [error, {allowKeywords: true}]' \
+ --rule 'max-len: [off]' \
+ -- test
+ $(YARN) check
+ $(REMEMBER_BOWER) $(shell pwd)
+ @echo 'Checking for missing link definitions...'
+ grep -o '\[[^]]*\]\[[^]]*\]' index.js \
+ | sort -u \
+ | sed -e 's:\[\(.*\)\]\[\]:\1:' \
+ -e 's:\[.*\]\[\(.*\)\]:\1:' \
+ -e '/0-9/d' \
+ | xargs -I '{}' sh -c "grep '^//[.] \[{}\]: ' index.js"
+
+
+.PHONY: release-major release-minor release-patch
+release-major release-minor release-patch:
+ @$(XYZ) --increment $(@:release-%=%)
+
+
+.PHONY: setup
+setup:
+ $(YARN)
+
+yarn.lock: package.json
+ $(YARN)
+
+
+.PHONY: test
+test:
+ $(ISTANBUL) cover node_modules/.bin/_mocha -- --recursive --ui tdd
+ # $(ISTANBUL) check-coverage --branches 100
+ifeq ($(shell node --version | cut -d . -f 1),v6)
+ $(DOCTEST) -- index.js
+else
+ @echo '[WARN] Doctests are only run in Node v6.x.x (current version is $(shell node --version))' >&2
+endif
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..8a65f13
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,41 @@
+{
+ "name": "sanctuary-maybe",
+ "description": "Refuge from null reference errors in JavaScript",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/sanctuary-js/sanctuary-maybe.git"
+ },
+ "main": "index.js",
+ "moduleType": [
+ "amd",
+ "globals",
+ "node"
+ ],
+ "keywords": [
+ "adt",
+ "functional",
+ "maybe",
+ "safe",
+ "safety",
+ "types"
+ ],
+ "dependencies": {
+ "sanctuary-def": "0.9.0",
+ "sanctuary-type-classes": "3.0.1",
+ "sanctuary-type-identifiers": "1.0.0"
+ },
+ "ignore": [
+ "/.git/",
+ "/bower_components/",
+ "/coverage/",
+ "/node_modules/",
+ "/scripts/",
+ "/test/",
+ "/.*",
+ "/CONTRIBUTING.md",
+ "/Makefile",
+ "/circle.yml",
+ "/package.json"
+ ]
+}
diff --git a/circle.yml b/circle.yml
new file mode 100644
index 0000000..8f646c8
--- /dev/null
+++ b/circle.yml
@@ -0,0 +1,20 @@
+dependencies:
+ pre:
+ - curl https://yarnpkg.com/install.sh | bash
+ override:
+ - case $CIRCLE_NODE_INDEX in 0) make setup ;; 1) nvm install 6 && nvm exec 6 make setup ;; 2) nvm install 7 && nvm exec 7 make setup ;; esac:
+ parallel: true
+ cache_directories:
+ - ~/.cache/yarn
+
+machine:
+ node:
+ version: 4
+ environment:
+ PATH: "${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin"
+
+test:
+ override:
+ - make lint
+ - case $CIRCLE_NODE_INDEX in 0) make test ;; 1) nvm exec 6 make test ;; 2) nvm exec 7 make test ;; esac:
+ parallel: true
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..5154ba3
--- /dev/null
+++ b/index.js
@@ -0,0 +1,469 @@
+// ,______ ______, ,________,,_____,,_____,,__________ ,__________,
+// | \/ | | || || || \ | |
+// |_, ,_| |_ _||_ || _||_, __ ||_, _____|
+// | \ / | / \ \ \/ / | / | |
+// ,_| || |_,,_/ /\ \_, \ / ,_| __ \ ,_| ___|_,
+// | || || || | | | | || |
+// |______||______||_____||_____| |____| |__________/ |__________|
+
+(function(f) {
+
+ 'use strict';
+
+ /* istanbul ignore else */
+ if (typeof module === 'object' && typeof module.exports === 'object') {
+ module.exports = f(require('sanctuary-def'),
+ require('sanctuary-type-classes'),
+ require('sanctuary-type-identifiers'));
+ } else if (typeof define === 'function' && define.amd != null) {
+ define(['sanctuary-def',
+ 'sanctuary-type-classes',
+ 'sanctuary-type-identifiers'],
+ f);
+ } else {
+ self.sanctuary = f(self.sanctuaryDef,
+ self.sanctuaryTypeClasses,
+ self.sanctuaryTypeIdentifiers);
+ }
+
+}(function($, Z, type) {
+
+ 'use strict';
+
+ // typeEq :: String -> a -> Boolean
+ function typeEq(typeIdent) {
+ return function(x) {
+ return type(x) === typeIdent;
+ };
+ }
+
+
+ // readmeUrl :: String -> String
+ function readmeUrl(id) {
+ var version = '0.0.0'; // updated programmatically
+ return 'https://github.com/sanctuary-js/sanctuary-maybe/tree/v' + version +
+ '#' + id;
+ }
+
+ // :: Type
+ var a = $.TypeVariable('a');
+
+ // maybeTypeIdent :: String
+ var maybeTypeIdent = 'sanctuary/Maybe';
+
+ // $Maybe :: Type -> Type
+ var $Maybe = $.UnaryType(
+ maybeTypeIdent,
+ readmeUrl('MaybeType'),
+ typeEq(maybeTypeIdent),
+ function(maybe) { return maybe.isJust ? [maybe.value] : []; }
+ );
+
+ // defaultEnv :: Array Type
+ var env = Z.concat($.env, [
+ $Maybe
+ ]);
+
+ /* eslint-disable indent */
+
+ var M = {};
+
+ var def = $.create({checkTypes: true, env: env});
+
+ //. ### Maybe type
+ //.
+ //. The Maybe type represents optional values: a value of type `Maybe a` is
+ //. either a Just whose value is of type `a` or Nothing (with no value).
+ //.
+ //. The Maybe type satisfies the [Setoid][], [Monoid][], [Monad][],
+ //. [Alternative][], [Traversable][], and [Extend][] specifications.
+
+ //# MaybeType :: Type -> Type
+ //.
+ //. A [`UnaryType`][UnaryType] for use with [sanctuary-def][].
+ M.MaybeType = $Maybe;
+
+ //# Maybe :: TypeRep Maybe
+ //.
+ //. The [type representative](#type-representatives) for the Maybe type.
+ var Maybe = M.Maybe = {prototype: _Maybe.prototype};
+
+ Maybe.prototype.constructor = Maybe;
+
+ function _Maybe(tag, value) {
+ this.isNothing = tag === 'Nothing';
+ this.isJust = tag === 'Just';
+ if (this.isJust) this.value = value;
+ }
+
+ //# Nothing :: Maybe a
+ //.
+ //. Nothing.
+ //.
+ //. ```javascript
+ //. > S.Nothing
+ //. Nothing
+ //. ```
+ var Nothing = M.Nothing = new _Maybe('Nothing');
+
+ //# Just :: a -> Maybe a
+ //.
+ //. Takes a value of any type and returns a Just with the given value.
+ //.
+ //. ```javascript
+ //. > S.Just(42)
+ //. Just(42)
+ //. ```
+ function Just(x) {
+ return new _Maybe('Just', x);
+ }
+ M.Just = def('Just', {}, [a, $Maybe(a)], Just);
+
+ //# Maybe.@@type :: String
+ //.
+ //. Maybe type identifier, `'sanctuary/Maybe'`.
+ Maybe['@@type'] = maybeTypeIdent;
+
+ //# Maybe.fantasy-land/empty :: () -> Maybe a
+ //.
+ //. Returns Nothing.
+ //.
+ //. ```javascript
+ //. > S.empty(S.Maybe)
+ //. Nothing
+ //. ```
+ Maybe['fantasy-land/empty'] = function() { return Nothing; };
+
+ //# Maybe.fantasy-land/of :: a -> Maybe a
+ //.
+ //. Takes a value of any type and returns a Just with the given value.
+ //.
+ //. ```javascript
+ //. > S.of(S.Maybe, 42)
+ //. Just(42)
+ //. ```
+ Maybe['fantasy-land/of'] = Just;
+
+ //# Maybe.fantasy-land/zero :: () -> Maybe a
+ //.
+ //. Returns Nothing.
+ //.
+ //. ```javascript
+ //. > S.zero(S.Maybe)
+ //. Nothing
+ //. ```
+ Maybe['fantasy-land/zero'] = function() { return Nothing; };
+
+ //# Maybe#isNothing :: Maybe a ~> Boolean
+ //.
+ //. `true` if `this` is Nothing; `false` if `this` is a Just.
+ //.
+ //. ```javascript
+ //. > S.Nothing.isNothing
+ //. true
+ //.
+ //. > S.Just(42).isNothing
+ //. false
+ //. ```
+
+ //# Maybe#isJust :: Maybe a ~> Boolean
+ //.
+ //. `true` if `this` is a Just; `false` if `this` is Nothing.
+ //.
+ //. ```javascript
+ //. > S.Just(42).isJust
+ //. true
+ //.
+ //. > S.Nothing.isJust
+ //. false
+ //. ```
+
+ //# Maybe#toString :: Maybe a ~> () -> String
+ //.
+ //. Returns the string representation of the Maybe.
+ //.
+ //. ```javascript
+ //. > S.toString(S.Nothing)
+ //. 'Nothing'
+ //.
+ //. > S.toString(S.Just([1, 2, 3]))
+ //. 'Just([1, 2, 3])'
+ //. ```
+ Maybe.prototype.toString = function() {
+ return this.isJust ? 'Just(' + Z.toString(this.value) + ')' : 'Nothing';
+ };
+
+ //# Maybe#inspect :: Maybe a ~> () -> String
+ //.
+ //. Returns the string representation of the Maybe. This method is used by
+ //. `util.inspect` and the REPL to format a Maybe for display.
+ //.
+ //. See also [`Maybe#toString`][].
+ //.
+ //. ```javascript
+ //. > S.Nothing.inspect()
+ //. 'Nothing'
+ //.
+ //. > S.Just([1, 2, 3]).inspect()
+ //. 'Just([1, 2, 3])'
+ //. ```
+ Maybe.prototype.inspect = function() { return this.toString(); };
+
+ //# Maybe#fantasy-land/equals :: Maybe a ~> Maybe a -> Boolean
+ //.
+ //. Takes a value of the same type and returns `true` if:
+ //.
+ //. - it is Nothing and `this` is Nothing; or
+ //.
+ //. - it is a Just and `this` is a Just, and their values are equal
+ //. according to [`equals`](#equals).
+ //.
+ //. ```javascript
+ //. > S.equals(S.Nothing, S.Nothing)
+ //. true
+ //.
+ //. > S.equals(S.Just([1, 2, 3]), S.Just([1, 2, 3]))
+ //. true
+ //.
+ //. > S.equals(S.Just([1, 2, 3]), S.Just([3, 2, 1]))
+ //. false
+ //.
+ //. > S.equals(S.Just([1, 2, 3]), S.Nothing)
+ //. false
+ //. ```
+ Maybe.prototype['fantasy-land/equals'] = function(other) {
+ return this.isNothing ? other.isNothing
+ : other.isJust && Z.equals(other.value, this.value);
+ };
+
+ //# Maybe#fantasy-land/concat :: Semigroup a => Maybe a ~> Maybe a -> Maybe a
+ //.
+ //. Returns the result of concatenating two Maybe values of the same type.
+ //. `a` must have a [Semigroup][].
+ //.
+ //. If `this` is Nothing and the argument is Nothing, this method returns
+ //. Nothing.
+ //.
+ //. If `this` is a Just and the argument is a Just, this method returns a
+ //. Just whose value is the result of concatenating this Just's value and
+ //. the given Just's value.
+ //.
+ //. Otherwise, this method returns the Just.
+ //.
+ //. ```javascript
+ //. > S.concat(S.Nothing, S.Nothing)
+ //. Nothing
+ //.
+ //. > S.concat(S.Just([1, 2, 3]), S.Just([4, 5, 6]))
+ //. Just([1, 2, 3, 4, 5, 6])
+ //.
+ //. > S.concat(S.Nothing, S.Just([1, 2, 3]))
+ //. Just([1, 2, 3])
+ //.
+ //. > S.concat(S.Just([1, 2, 3]), S.Nothing)
+ //. Just([1, 2, 3])
+ //. ```
+ Maybe.prototype['fantasy-land/concat'] = function(other) {
+ return this.isNothing ?
+ other :
+ other.isNothing ? this : Just(Z.concat(this.value, other.value));
+ };
+
+ //# Maybe#fantasy-land/map :: Maybe a ~> (a -> b) -> Maybe b
+ //.
+ //. Takes a function and returns `this` if `this` is Nothing; otherwise
+ //. it returns a Just whose value is the result of applying the function
+ //. to this Just's value.
+ //.
+ //. ```javascript
+ //. > S.map(Math.sqrt, S.Nothing)
+ //. Nothing
+ //.
+ //. > S.map(Math.sqrt, S.Just(9))
+ //. Just(3)
+ //. ```
+ Maybe.prototype['fantasy-land/map'] = function(f) {
+ return this.isJust ? Just(f(this.value)) : this;
+ };
+
+ //# Maybe#fantasy-land/ap :: Maybe a ~> Maybe (a -> b) -> Maybe b
+ //.
+ //. Takes a Maybe and returns Nothing unless `this` is a Just *and* the
+ //. argument is a Just, in which case it returns a Just whose value is
+ //. the result of applying the given Just's value to this Just's value.
+ //.
+ //. ```javascript
+ //. > S.ap(S.Nothing, S.Nothing)
+ //. Nothing
+ //.
+ //. > S.ap(S.Nothing, S.Just(9))
+ //. Nothing
+ //.
+ //. > S.ap(S.Just(Math.sqrt), S.Nothing)
+ //. Nothing
+ //.
+ //. > S.ap(S.Just(Math.sqrt), S.Just(9))
+ //. Just(3)
+ //. ```
+ Maybe.prototype['fantasy-land/ap'] = function(other) {
+ return other.isJust ? Z.map(other.value, this) : other;
+ };
+
+ //# Maybe#fantasy-land/chain :: Maybe a ~> (a -> Maybe b) -> Maybe b
+ //.
+ //. Takes a function and returns `this` if `this` is Nothing; otherwise
+ //. it returns the result of applying the function to this Just's value.
+ //.
+ //. ```javascript
+ //. > S.chain(S.parseFloat, S.Nothing)
+ //. Nothing
+ //.
+ //. > S.chain(S.parseFloat, S.Just('xxx'))
+ //. Nothing
+ //.
+ //. > S.chain(S.parseFloat, S.Just('12.34'))
+ //. Just(12.34)
+ //. ```
+ Maybe.prototype['fantasy-land/chain'] = function(f) {
+ return this.isJust ? f(this.value) : this;
+ };
+
+ //# Maybe#fantasy-land/alt :: Maybe a ~> Maybe a -> Maybe a
+ //.
+ //. Chooses between `this` and the other Maybe provided as an argument.
+ //. Returns `this` if `this` is a Just; the other Maybe otherwise.
+ //.
+ //. ```javascript
+ //. > S.alt(S.Nothing, S.Nothing)
+ //. Nothing
+ //.
+ //. > S.alt(S.Nothing, S.Just(1))
+ //. Just(1)
+ //.
+ //. > S.alt(S.Just(2), S.Nothing)
+ //. Just(2)
+ //.
+ //. > S.alt(S.Just(3), S.Just(4))
+ //. Just(3)
+ //. ```
+ Maybe.prototype['fantasy-land/alt'] = function(other) {
+ return this.isJust ? this : other;
+ };
+
+ //# Maybe#fantasy-land/reduce :: Maybe a ~> ((b, a) -> b, b) -> b
+ //.
+ //. Takes a function and an initial value of any type, and returns:
+ //.
+ //. - the initial value if `this` is Nothing; otherwise
+ //.
+ //. - the result of applying the function to the initial value and this
+ //. Just's value.
+ //.
+ //. ```javascript
+ //. > S.reduce_(Math.pow, 10, S.Nothing)
+ //. 10
+ //.
+ //. > S.reduce_(Math.pow, 10, S.Just(3))
+ //. 1000
+ //. ```
+ Maybe.prototype['fantasy-land/reduce'] = function(f, x) {
+ return this.isJust ? f(x, this.value) : x;
+ };
+
+ //# Maybe#fantasy-land/traverse :: Applicative f => Maybe a ~> (TypeRep f, a -> f b) -> f (Maybe b)
+ //.
+ //. Takes two functions which both return values of the same [Applicative][],
+ //. (the second of which must be that type's [`of`][] function) and returns:
+ //.
+ //. - the result of applying `of` to `this` if `this` is Nothing; otherwise
+ //.
+ //. - the result of mapping [`Just`](#Just) over the result of applying the
+ //. first function to this Just's value.
+ //.
+ //. ```javascript
+ //. > S.traverse(Array, S.words, S.Nothing)
+ //. [Nothing]
+ //.
+ //. > S.traverse(Array, S.words, S.Just('foo bar baz'))
+ //. [Just('foo'), Just('bar'), Just('baz')]
+ //. ```
+ Maybe.prototype['fantasy-land/traverse'] = function(typeRep, f) {
+ return this.isJust ? Z.map(Just, f(this.value)) : Z.of(typeRep, this);
+ };
+
+ //# Maybe#fantasy-land/extend :: Maybe a ~> (Maybe a -> b) -> Maybe b
+ //.
+ //. Takes a function and returns `this` if `this` is Nothing; otherwise
+ //. it returns a Just whose value is the result of applying the function
+ //. to `this`.
+ //.
+ //. ```javascript
+ //. > S.extend(x => x.value + 1, S.Nothing)
+ //. Nothing
+ //.
+ //. > S.extend(x => x.value + 1, S.Just(42))
+ //. Just(43)
+ //. ```
+ Maybe.prototype['fantasy-land/extend'] = function(f) {
+ return this.isJust ? Just(f(this)) : this;
+ };
+
+ return M;
+}));
+
+//. [$.Array]: v:sanctuary-js/sanctuary-def#Array
+//. [$.String]: v:sanctuary-js/sanctuary-def#String
+//. [Alt]: v:fantasyland/fantasy-land#alt
+//. [Alternative]: v:fantasyland/fantasy-land#alternative
+//. [Applicative]: v:fantasyland/fantasy-land#applicative
+//. [Apply]: v:fantasyland/fantasy-land#apply
+//. [Bifunctor]: v:fantasyland/fantasy-land#bifunctor
+//. [BinaryType]: v:sanctuary-js/sanctuary-def#BinaryType
+//. [Either]: #either-type
+//. [Extend]: v:fantasyland/fantasy-land#extend
+//. [Fantasy Land]: v:fantasyland/fantasy-land
+//. [Foldable]: v:fantasyland/fantasy-land#foldable
+//. [Functor]: v:fantasyland/fantasy-land#functor
+//. [Maybe]: #maybe-type
+//. [Monad]: v:fantasyland/fantasy-land#monad
+//. [Monoid]: v:fantasyland/fantasy-land#monoid
+//. [Nullable]: v:sanctuary-js/sanctuary-def#Nullable
+//. [Object#toString]: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
+//. [Ramda]: http://ramdajs.com/
+//. [RegexFlags]: v:sanctuary-js/sanctuary-def#RegexFlags
+//. [Semigroup]: v:fantasyland/fantasy-land#semigroup
+//. [Setoid]: v:fantasyland/fantasy-land#setoid
+//. [Traversable]: v:fantasyland/fantasy-land#traversable
+//. [UnaryType]: v:sanctuary-js/sanctuary-def#UnaryType
+//. [`Z.alt`]: v:sanctuary-js/sanctuary-type-classes#alt
+//. [`Z.ap`]: v:sanctuary-js/sanctuary-type-classes#ap
+//. [`Z.apFirst`]: v:sanctuary-js/sanctuary-type-classes#apFirst
+//. [`Z.apSecond`]: v:sanctuary-js/sanctuary-type-classes#apSecond
+//. [`Z.bimap`]: v:sanctuary-js/sanctuary-type-classes#bimap
+//. [`Z.chain`]: v:sanctuary-js/sanctuary-type-classes#chain
+//. [`Z.chainRec`]: v:sanctuary-js/sanctuary-type-classes#chainRec
+//. [`Z.concat`]: v:sanctuary-js/sanctuary-type-classes#concat
+//. [`Z.empty`]: v:sanctuary-js/sanctuary-type-classes#empty
+//. [`Z.equals`]: v:sanctuary-js/sanctuary-type-classes#equals
+//. [`Z.extend`]: v:sanctuary-js/sanctuary-type-classes#extend
+//. [`Z.extract`]: v:sanctuary-js/sanctuary-type-classes#extract
+//. [`Z.filter`]: v:sanctuary-js/sanctuary-type-classes#filter
+//. [`Z.filterM`]: v:sanctuary-js/sanctuary-type-classes#filterM
+//. [`Z.join`]: v:sanctuary-js/sanctuary-type-classes#join
+//. [`Z.map`]: v:sanctuary-js/sanctuary-type-classes#map
+//. [`Z.of`]: v:sanctuary-js/sanctuary-type-classes#of
+//. [`Z.promap`]: v:sanctuary-js/sanctuary-type-classes#promap
+//. [`Z.sequence`]: v:sanctuary-js/sanctuary-type-classes#sequence
+//. [`Z.toString`]: v:sanctuary-js/sanctuary-type-classes#toString
+//. [`Z.traverse`]: v:sanctuary-js/sanctuary-type-classes#traverse
+//. [`Z.zero`]: v:sanctuary-js/sanctuary-type-classes#zero
+//. [`of`]: v:fantasyland/fantasy-land#of-method
+//. [parseInt]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt
+//. [sanctuary-def]: v:sanctuary-js/sanctuary-def
+//. [thrush]: https://github.com/raganwald-deprecated/homoiconic/blob/master/2008-10-30/thrush.markdown
+//. [type identifier]: v:sanctuary-js/sanctuary-type-identifiers
+//.
+//. [`Either#fantasy-land/bimap`]: #Either.prototype.fantasy-land/bimap
+//. [`Either#fantasy-land/map`]: #Either.prototype.fantasy-land/map
+//. [`Either#toString`]: #Either.prototype.toString
+//. [`Maybe#toString`]: #Maybe.prototype.toString
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..cbe9a1c
--- /dev/null
+++ b/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "sanctuary-maybe",
+ "version": "0.12.0",
+ "description": "Refuge from null reference errors in JavaScript",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/sanctuary-js/sanctuary-maybe.git"
+ },
+ "scripts": {
+ "test": "make lint test"
+ },
+ "dependencies": {
+ "sanctuary-def": "0.9.0",
+ "sanctuary-type-classes": "3.0.1",
+ "sanctuary-type-identifiers": "1.0.0"
+ },
+ "devDependencies": {
+ "sanctuary": "0.12.0",
+ "doctest": "0.11.x",
+ "eslint": "3.15.x",
+ "fantasy-land": "3.0.0",
+ "istanbul": "0.4.x",
+ "jsverify": "0.7.x",
+ "mocha": "3.x.x",
+ "remember-bower": "0.1.x",
+ "sanctuary-style": "0.4.x",
+ "transcribe": "0.5.x",
+ "xyz": "2.1.x"
+ },
+ "files": [
+ "/LICENSE",
+ "/README.md",
+ "/index.js",
+ "/package.json"
+ ]
+}
diff --git a/test/Just.js b/test/Just.js
new file mode 100644
index 0000000..74c33f3
--- /dev/null
+++ b/test/Just.js
@@ -0,0 +1,73 @@
+'use strict';
+
+var M = require('..');
+
+var S = require('sanctuary');
+var Z = require('sanctuary-type-classes');
+
+var eq = require('./internal/eq');
+
+
+suite('Just', function() {
+
+ test('data constructor', function() {
+ eq(typeof M.Just, 'function');
+ eq(M.Just.length, 1);
+ eq(M.Just(42).constructor, M.Maybe);
+ eq(M.Just(42).isNothing, false);
+ eq(M.Just(42).isJust, true);
+ });
+
+ test('"fantasy-land/alt" method', function() {
+ eq(Z.alt(M.Nothing, M.Just(1)), M.Just(1));
+ eq(Z.alt(M.Just(1), M.Just(2)), M.Just(1));
+ });
+
+ test('"fantasy-land/ap" method', function() {
+ eq(Z.ap(M.Nothing, M.Just(42)), M.Nothing);
+ eq(Z.ap(M.Just(S.inc), M.Just(42)), M.Just(43));
+ });
+
+ test('"fantasy-land/chain" method', function() {
+ eq(Z.chain(S.head, M.Just([1, 2, 3])), M.Just(1));
+ });
+
+ test('"fantasy-land/concat" method', function() {
+ eq(Z.concat(M.Just('foo'), M.Nothing), M.Just('foo'));
+ eq(Z.concat(M.Just('foo'), M.Just('bar')), M.Just('foobar'));
+ });
+
+ test('"fantasy-land/equals" method', function() {
+ eq(Z.equals(M.Just(42), M.Just(42)), true);
+ eq(Z.equals(M.Just(42), M.Just(43)), false);
+ eq(Z.equals(M.Just(42), M.Nothing), false);
+
+ // Value-based equality:
+ eq(Z.equals(M.Just(0), M.Just(-0)), false);
+ eq(Z.equals(M.Just(-0), M.Just(0)), false);
+ eq(Z.equals(M.Just(NaN), M.Just(NaN)), true);
+ eq(Z.equals(M.Just([1, 2, 3]), M.Just([1, 2, 3])), true);
+ });
+
+ test('"fantasy-land/extend" method', function() {
+ eq(Z.extend(function(x) { return x.value / 2; }, M.Just(42)), M.Just(21));
+ });
+
+ test('"fantasy-land/map" method', function() {
+ eq(Z.map(function(x) { return x / 2; }, M.Just(42)), M.Just(21));
+ });
+
+ test('"fantasy-land/reduce" method', function() {
+ eq(Z.reduce(function(x, y) { return x - y; }, 42, M.Just(5)), 37);
+ });
+
+ test('"toString" method', function() {
+ eq(Z.toString(M.Just([1, 2, 3])), 'Just([1, 2, 3])');
+ });
+
+ test('"inspect" method', function() {
+ eq(M.Just([1, 2, 3]).inspect.length, 0);
+ eq(M.Just([1, 2, 3]).inspect(), 'Just([1, 2, 3])');
+ });
+
+});
diff --git a/test/internal/curry2.js b/test/internal/curry2.js
new file mode 100644
index 0000000..f75a28b
--- /dev/null
+++ b/test/internal/curry2.js
@@ -0,0 +1,10 @@
+'use strict';
+
+// curry2 :: ((a, b) -> c) -> a -> b -> c
+module.exports = function curry2(f) {
+ return function(x) {
+ return function(y) {
+ return f(x, y);
+ };
+ };
+};
diff --git a/test/internal/eq.js b/test/internal/eq.js
new file mode 100644
index 0000000..7213255
--- /dev/null
+++ b/test/internal/eq.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var assert = require('assert');
+
+var Z = require('sanctuary-type-classes');
+
+var equals = require('./equals');
+
+// eq :: (a, b) -> Undefined !
+module.exports = function eq(actual, expected) {
+ assert.strictEqual(arguments.length, eq.length);
+ assert.strictEqual(Z.toString(actual), Z.toString(expected));
+ assert.strictEqual(equals(actual)(expected), true);
+};
diff --git a/test/internal/equals.js b/test/internal/equals.js
new file mode 100644
index 0000000..9cee598
--- /dev/null
+++ b/test/internal/equals.js
@@ -0,0 +1,8 @@
+'use strict';
+
+var Z = require('sanctuary-type-classes');
+
+var curry2 = require('./curry2');
+
+// equals :: a -> b -> Boolean
+module.exports = curry2(Z.equals);
diff --git a/test/of.js b/test/of.js
new file mode 100644
index 0000000..31d8987
--- /dev/null
+++ b/test/of.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var M = require('..');
+
+var Z = require('sanctuary-type-classes');
+
+var eq = require('./internal/eq');
+
+
+test('of', function() {
+ eq(Z.of(M.Maybe, 42), M.Just(42));
+});
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..9c34772
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,1252 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abbrev@1, abbrev@1.0.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+
+acorn-jsx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ dependencies:
+ acorn "^3.0.4"
+
+acorn@4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a"
+
+acorn@^3.0.4:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+
+ajv-keywords@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+
+ajv@^4.7.0:
+ version "4.11.3"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.3.tgz#ce30bdb90d1254f762c75af915fb3a63e7183d22"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
+ansi-escapes@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+argparse@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ dependencies:
+ sprintf-js "~1.0.2"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+async@1.x, async@^1.4.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+async@~0.2.6:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+
+babel-code-frame@^6.16.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+browser-stdout@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ dependencies:
+ callsites "^0.2.0"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+circular-json@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
+
+cli-cursor@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+coffee-script@1.10.x:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.10.0.tgz#12938bcf9be1948fa006f92e0c4c9e81705108c0"
+
+commander@2.8.x:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commander@2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.4.6:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+d@^0.1.1, d@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309"
+ dependencies:
+ es5-ext "~0.10.2"
+
+daggy@0.0.x:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/daggy/-/daggy-0.0.1.tgz#ae9c932c9f7136e655a04afb21e8baadfd0d3707"
+
+debug@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ dependencies:
+ ms "0.7.1"
+
+debug@^2.1.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
+ dependencies:
+ ms "0.7.2"
+
+decamelize@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
+del@^2.0.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+ dependencies:
+ globby "^5.0.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ rimraf "^2.2.8"
+
+diff@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
+
+doctest@0.11.x:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/doctest/-/doctest-0.11.0.tgz#ecd9e8c3d1e07bc7d42492b02d9fae318f594169"
+ dependencies:
+ coffee-script "1.10.x"
+ commander "2.8.x"
+ esprima "3.1.x"
+ ramda "0.19.x"
+
+doctrine@^1.2.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7:
+ version "0.10.12"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047"
+ dependencies:
+ es6-iterator "2"
+ es6-symbol "~3.1"
+
+es6-iterator@2:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac"
+ dependencies:
+ d "^0.1.1"
+ es5-ext "^0.10.7"
+ es6-symbol "3"
+
+es6-map@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897"
+ dependencies:
+ d "~0.1.1"
+ es5-ext "~0.10.11"
+ es6-iterator "2"
+ es6-set "~0.1.3"
+ es6-symbol "~3.1.0"
+ event-emitter "~0.3.4"
+
+es6-set@~0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8"
+ dependencies:
+ d "~0.1.1"
+ es5-ext "~0.10.11"
+ es6-iterator "2"
+ es6-symbol "3"
+ event-emitter "~0.3.4"
+
+es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
+ dependencies:
+ d "~0.1.1"
+ es5-ext "~0.10.11"
+
+es6-weak-map@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81"
+ dependencies:
+ d "^0.1.1"
+ es5-ext "^0.10.8"
+ es6-iterator "2"
+ es6-symbol "3"
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+escodegen@1.8.x:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ dependencies:
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
+
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint@3.15.x:
+ version "3.15.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.15.0.tgz#bdcc6a6c5ffe08160e7b93c066695362a91e30f2"
+ dependencies:
+ babel-code-frame "^6.16.0"
+ chalk "^1.1.3"
+ concat-stream "^1.4.6"
+ debug "^2.1.1"
+ doctrine "^1.2.2"
+ escope "^3.6.0"
+ espree "^3.4.0"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ glob "^7.0.3"
+ globals "^9.14.0"
+ ignore "^3.2.0"
+ imurmurhash "^0.1.4"
+ inquirer "^0.12.0"
+ is-my-json-valid "^2.10.0"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.5.1"
+ json-stable-stringify "^1.0.0"
+ levn "^0.3.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.0"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.1"
+ pluralize "^1.2.1"
+ progress "^1.1.8"
+ require-uncached "^1.0.2"
+ shelljs "^0.7.5"
+ strip-bom "^3.0.0"
+ strip-json-comments "~2.0.1"
+ table "^3.7.8"
+ text-table "~0.2.0"
+ user-home "^2.0.0"
+
+espree@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d"
+ dependencies:
+ acorn "4.0.4"
+ acorn-jsx "^3.0.0"
+
+esprima@2.7.x, esprima@^2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+
+esprima@3.1.x, esprima@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
+esrecurse@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
+ dependencies:
+ estraverse "~4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+
+estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+estraverse@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+event-emitter@~0.3.4:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5"
+ dependencies:
+ d "~0.1.1"
+ es5-ext "~0.10.7"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+
+fantasy-combinators@0.0.x:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/fantasy-combinators/-/fantasy-combinators-0.0.1.tgz#d18388aed94be790ac4069031f5ea018345e33a1"
+
+fantasy-land@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/fantasy-land/-/fantasy-land-3.0.0.tgz#657b321f2b7b656b48b478c361d5282d4c765bd0"
+ dependencies:
+ daggy "0.0.x"
+ fantasy-combinators "0.0.x"
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+flat-cache@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
+ dependencies:
+ circular-json "^0.3.1"
+ del "^2.0.2"
+ graceful-fs "^4.1.2"
+ write "^0.2.1"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ dependencies:
+ is-property "^1.0.0"
+
+glob@7.0.5:
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^5.0.15:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.14.0:
+ version "9.15.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.15.0.tgz#7a5d8fd865e69de910b090b15a87772f9423c5de"
+
+globby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+ dependencies:
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+
+growl@1.9.2:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+
+handlebars@^4.0.1:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
+ dependencies:
+ async "^1.4.0"
+ optimist "^0.6.1"
+ source-map "^0.4.4"
+ optionalDependencies:
+ uglify-js "^2.6"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
+ignore@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.2.tgz#1c51e1ef53bab6ddc15db4d9ac4ec139eceb3410"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+inquirer@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ ansi-regex "^2.0.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
+interpret@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+
+is-my-json-valid@^2.10.0:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
+is-resolvable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
+ dependencies:
+ tryit "^1.0.1"
+
+isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isexe@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
+
+istanbul@0.4.x:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
+ dependencies:
+ abbrev "1.0.x"
+ async "1.x"
+ escodegen "1.8.x"
+ esprima "2.7.x"
+ glob "^5.0.15"
+ handlebars "^4.0.1"
+ js-yaml "3.x"
+ mkdirp "0.5.x"
+ nopt "3.x"
+ once "1.x"
+ resolve "1.1.x"
+ supports-color "^3.1.0"
+ which "^1.1.1"
+ wordwrap "^1.0.0"
+
+js-tokens@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+
+js-yaml@3.x, js-yaml@^3.5.1:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.1.tgz#782ba50200be7b9e5a8537001b7804db3ad02628"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^3.1.1"
+
+json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
+json3@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+
+jsverify@0.7.x:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/jsverify/-/jsverify-0.7.4.tgz#cbc191d239c846d8e96086d7d11f9cfd9b8420ee"
+ dependencies:
+ lazy-seq "^1.0.0"
+ rc4 "~0.1.5"
+ trampa "^1.0.0"
+ typify-parser "^1.1.0"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ dependencies:
+ is-buffer "^1.0.2"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+
+lazy-seq@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lazy-seq/-/lazy-seq-1.0.0.tgz#880cb8aab256026382e02f53ec089682a74c5b6a"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+lodash._baseassign@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+ dependencies:
+ lodash._basecopy "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash._basecopy@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+
+lodash._basecreate@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+
+lodash._getnative@^3.0.0:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+
+lodash._isiterateecall@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+
+lodash.create@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
+ dependencies:
+ lodash._baseassign "^3.0.0"
+ lodash._basecreate "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+
+lodash.isarguments@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+
+lodash.isarray@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+
+lodash.keys@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+ dependencies:
+ lodash._getnative "^3.0.0"
+ lodash.isarguments "^3.0.0"
+ lodash.isarray "^3.0.0"
+
+lodash@^4.0.0, lodash@^4.3.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+
+"minimatch@2 || 3", minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8, minimist@~0.0.1:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+mocha@3.x.x:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3"
+ dependencies:
+ browser-stdout "1.3.0"
+ commander "2.9.0"
+ debug "2.2.0"
+ diff "1.4.0"
+ escape-string-regexp "1.0.5"
+ glob "7.0.5"
+ growl "1.9.2"
+ json3 "3.3.2"
+ lodash.create "3.1.1"
+ mkdirp "0.5.1"
+ supports-color "3.1.2"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
+ms@0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+
+mute-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
+nopt@3.x:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+once@1.x, once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optionator@^0.8.1, optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
+ramda@0.19.x:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.19.1.tgz#89c4ad697265ff6b1face9f286439e2520d6679c"
+
+rc4@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/rc4/-/rc4-0.1.5.tgz#08c6e04a0168f6eb621c22ab6cb1151bd9f4a64d"
+
+readable-stream@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readline2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ mute-stream "0.0.5"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ dependencies:
+ resolve "^1.1.6"
+
+remember-bower@0.1.x:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/remember-bower/-/remember-bower-0.1.0.tgz#9222e2dfc6a3cfc5adbaf01ae61ac8c837cc0780"
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+require-uncached@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+
+resolve@1.1.x, resolve@^1.1.6:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@^2.2.8:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ dependencies:
+ glob "^7.0.5"
+
+run-async@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+ dependencies:
+ once "^1.3.0"
+
+rx-lite@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+
+sanctuary-def@0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/sanctuary-def/-/sanctuary-def-0.9.0.tgz#a54bc330ec955d0ef47752317a01657db6d4760e"
+ dependencies:
+ sanctuary-type-classes "2.0.x"
+ sanctuary-type-identifiers "1.0.x"
+
+sanctuary-style@0.4.x:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/sanctuary-style/-/sanctuary-style-0.4.0.tgz#0846dddce46a91af1cd1701ff43b448919117ad8"
+
+sanctuary-type-classes@2.0.x:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/sanctuary-type-classes/-/sanctuary-type-classes-2.0.1.tgz#06b6cfd78e3e8d85cd93f5c2d7b08796b68d1e74"
+ dependencies:
+ sanctuary-type-identifiers "1.0.x"
+
+sanctuary-type-classes@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/sanctuary-type-classes/-/sanctuary-type-classes-3.0.1.tgz#65163f8e1dfdfdc05cf842b83b608fff921cda15"
+ dependencies:
+ sanctuary-type-identifiers "1.0.x"
+
+sanctuary-type-identifiers@1.0.0, sanctuary-type-identifiers@1.0.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/sanctuary-type-identifiers/-/sanctuary-type-identifiers-1.0.0.tgz#e8f359f006cb5e624cfb8464603fc114608bde9f"
+
+sanctuary@0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/sanctuary/-/sanctuary-0.12.0.tgz#676bdec10d5705c7781ef597430cedf18d3699b5"
+ dependencies:
+ sanctuary-def "0.9.0"
+ sanctuary-type-classes "3.0.1"
+ sanctuary-type-identifiers "1.0.0"
+
+semver@5.3.x:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+shelljs@^0.7.5:
+ version "0.7.6"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad"
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
+source-map@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@~0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+strip-ansi@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+
+supports-color@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+supports-color@^3.1.0:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ dependencies:
+ has-flag "^1.0.0"
+
+table@^3.7.8:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+ dependencies:
+ ajv "^4.7.0"
+ ajv-keywords "^1.0.0"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
+text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+
+trampa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trampa/-/trampa-1.0.0.tgz#5247347ac334807fa6c0000444cb91b639840ad5"
+
+transcribe@0.5.x:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/transcribe/-/transcribe-0.5.0.tgz#e3d9ccbae4f0edff2faa266ddd0b9bc59be6e771"
+ dependencies:
+ commander "2.8.x"
+ ramda "0.19.x"
+
+tryit@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+typify-parser@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/typify-parser/-/typify-parser-1.1.0.tgz#ac73bfa5f25343468e2d0f3346c6117bc03d3c99"
+
+uglify-js@^2.6:
+ version "2.7.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
+ dependencies:
+ async "~0.2.6"
+ source-map "~0.5.1"
+ uglify-to-browserify "~1.0.0"
+ yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+user-home@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+ dependencies:
+ os-homedir "^1.0.0"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+which@^1.1.1:
+ version "1.2.12"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
+ dependencies:
+ isexe "^1.1.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wordwrap@^1.0.0, wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ dependencies:
+ mkdirp "^0.5.1"
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+xyz@2.1.x:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/xyz/-/xyz-2.1.0.tgz#c3ca897f156d2178bd818cd503f94b0a3b52fa6c"
+ dependencies:
+ semver "5.3.x"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"