summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Early <alexander.early@gmail.com>2018-04-14 20:10:29 -0700
committerAlexander Early <alexander.early@gmail.com>2018-04-14 20:10:29 -0700
commit45e2938cfa536fe27898c60a4e0fe37080c880bb (patch)
treec0cb0776b596908d1a79f77c1a30a138dcba6a00
parent2030f5f1bd01a141ac4c85d3deab927f49e255fc (diff)
parent3235c8f5f67ff38b85ce6f9664053d0b1897ff3b (diff)
downloadasync-DELETE_THIS_BRANCH.tar.gz
Merge branch 'master' into DELETE_THIS_BRANCHDELETE_THIS_BRANCH
-rw-r--r--.travis.yml4
-rw-r--r--CHANGELOG.md238
-rw-r--r--LICENSE2
-rw-r--r--Makefile64
-rw-r--r--README.es.md59
-rw-r--r--README.md46
-rw-r--r--dist/async.js1221
-rw-r--r--dist/async.min.js2
-rw-r--r--dist/async.min.map2
-rw-r--r--intro.md39
-rw-r--r--lib/apply.js15
-rw-r--r--lib/asyncify.js19
-rw-r--r--lib/auto.js14
-rw-r--r--lib/compose.js8
-rw-r--r--lib/concat.js6
-rw-r--r--lib/concatLimit.js44
-rw-r--r--lib/concatSeries.js6
-rw-r--r--lib/constant.js13
-rw-r--r--lib/doDuring.js9
-rw-r--r--lib/doWhilst.js7
-rw-r--r--lib/index.js168
-rw-r--r--lib/internal/DoublyLinkedList.js27
-rw-r--r--lib/internal/applyEach.js7
-rw-r--r--lib/internal/concat.js11
-rw-r--r--lib/internal/consoleFunc.js16
-rw-r--r--lib/internal/doSeries.js8
-rw-r--r--lib/internal/eachOfLimit.js5
-rw-r--r--lib/internal/initialParams.js7
-rw-r--r--lib/internal/parallel.js12
-rw-r--r--lib/internal/queue.js33
-rw-r--r--lib/internal/rest.js8
-rw-r--r--lib/internal/setImmediate.js7
-rw-r--r--lib/internal/slice.js9
-rw-r--r--lib/internal/wrapAsync.js16
-rw-r--r--lib/memoize.js7
-rw-r--r--lib/nextTick.js4
-rw-r--r--lib/queue.js9
-rw-r--r--lib/reduceRight.js5
-rw-r--r--lib/reflect.js26
-rw-r--r--lib/retry.js4
-rw-r--r--lib/seq.js18
-rw-r--r--lib/setImmediate.js2
-rw-r--r--lib/timeout.js41
-rw-r--r--lib/tryEach.js60
-rw-r--r--lib/waterfall.js23
-rw-r--r--lib/whilst.js7
-rw-r--r--mocha_test/applyEach.js6
-rw-r--r--mocha_test/asyncFunctions.js13
-rw-r--r--mocha_test/asyncify.js38
-rw-r--r--mocha_test/cargo.js55
-rw-r--r--mocha_test/concat.js442
-rw-r--r--mocha_test/eachOf.js60
-rw-r--r--mocha_test/es2017/asyncFunctions.js20
-rw-r--r--mocha_test/groupBy.js2
-rw-r--r--mocha_test/linked_list.js83
-rw-r--r--mocha_test/queue.js237
-rw-r--r--mocha_test/retry.js23
-rw-r--r--mocha_test/slice.js32
-rw-r--r--mocha_test/timeout.js36
-rw-r--r--mocha_test/tryEach.js86
-rw-r--r--mocha_test/waterfall.js32
-rw-r--r--package-lock.json9130
-rw-r--r--package.json3
-rwxr-xr-xperf/benchmark.js3
-rw-r--r--perf/suites.js42
-rw-r--r--support/aliases.json24
-rw-r--r--support/build.test.js2
-rw-r--r--support/build/aggregate-build.js20
-rw-r--r--support/build/aggregate-bundle.js22
-rw-r--r--support/build/aggregate-cjs.js9
-rwxr-xr-xsupport/build/compile-module.js32
-rw-r--r--support/build/compile-modules.js45
-rw-r--r--support/build/modules-cjs.js3
-rw-r--r--support/build/plugin-lodash-import-rename.js24
-rw-r--r--support/es.test.js15
-rw-r--r--support/generate-index.js66
-rw-r--r--support/get-alias.js12
-rw-r--r--support/index-template.js80
-rw-r--r--support/jsdoc/theme/tmpl/layout.tmpl1
-rw-r--r--support/list-aliases.js25
-rwxr-xr-xsupport/sync-cjs-package.js2
-rwxr-xr-xsupport/sync-es-package.js4
82 files changed, 11854 insertions, 1233 deletions
diff --git a/.travis.yml b/.travis.yml
index 6732369..329cd54 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,7 +5,7 @@ node_js:
- "0.12"
- "4"
- "6"
- - "7"
+ - "8"
matrix:
include:
@@ -27,6 +27,6 @@ before_script:
script:
- npm test
# ensure buildable
- - "[ $MAKE_TEST == false ] || make"
+ - "[ $MAKE_TEST == false ] || make -j 4"
# test in firefox
- "[ $BROWSER == false ] || npm run mocha-browser-test"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fb1204b..d2c6e46 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,15 +1,39 @@
+# v2.6.0
+- Added missing aliases for many methods. Previously, you could not (e.g.) `require('async/find')` or use `async.anyLimit`. (#1483)
+- Improved `queue` performance. (#1448, #1454)
+- Add missing sourcemap (#1452, #1453)
+- Various doc updates (#1448, #1471, #1483)
+
+# v2.5.0
+- Added `concatLimit`, the `Limit` equivalent of [`concat`](https://caolan.github.io/async/docs.html#concat) ([#1426](https://github.com/caolan/async/issues/1426), [#1430](https://github.com/caolan/async/pull/1430))
+- `concat` improvements: it now preserves order, handles falsy values and the `iteratee` callback takes a variable number of arguments ([#1437](https://github.com/caolan/async/issues/1437), [#1436](https://github.com/caolan/async/pull/1436))
+- Fixed an issue in `queue` where there was a size discrepancy between `workersList().length` and `running()` ([#1428](https://github.com/caolan/async/issues/1428), [#1429](https://github.com/caolan/async/pull/1429))
+- Various doc fixes ([#1422](https://github.com/caolan/async/issues/1422), [#1424](https://github.com/caolan/async/pull/1424))
+
+# v2.4.1
+- Fixed a bug preventing functions wrapped with `timeout()` from being re-used. ([#1418](https://github.com/caolan/async/issues/1418), [#1419](https://github.com/caolan/async/issues/1419))
+
+# v2.4.0
+- Added `tryEach`, for running async functions in parallel, where you only expect one to succeed. ([#1365](https://github.com/caolan/async/issues/1365), [#687](https://github.com/caolan/async/issues/687))
+- Improved performance, most notably in `parallel` and `waterfall` ([#1395](https://github.com/caolan/async/issues/1395))
+- Added `queue.remove()`, for removing items in a `queue` ([#1397](https://github.com/caolan/async/issues/1397), [#1391](https://github.com/caolan/async/issues/1391))
+- Fixed using `eval`, preventing Async from running in pages with Content Security Policy ([#1404](https://github.com/caolan/async/issues/1404), [#1403](https://github.com/caolan/async/issues/1403))
+- Fixed errors thrown in an `asyncify`ed function's callback being caught by the underlying Promise ([#1408](https://github.com/caolan/async/issues/1408))
+- Fixed timing of `queue.empty()` ([#1367](https://github.com/caolan/async/issues/1367))
+- Various doc fixes ([#1314](https://github.com/caolan/async/issues/1314), [#1394](https://github.com/caolan/async/issues/1394), [#1412](https://github.com/caolan/async/issues/1412))
+
# v2.3.0
-- Added support for ES2017 `async` functions. Wherever you can pass a Node-style/CPS function that uses a callback, you can also pass an `async` function. Previously, you had to wrap `async` functions with `asyncify`. The caveat is that it will only work if `async` functions are supported natively in your environment, transpiled implementations can't be detected. (#1386, #1390)
-- Small doc fix (#1392)
+- Added support for ES2017 `async` functions. Wherever you can pass a Node-style/CPS function that uses a callback, you can also pass an `async` function. Previously, you had to wrap `async` functions with `asyncify`. The caveat is that it will only work if `async` functions are supported natively in your environment, transpiled implementations can't be detected. ([#1386](https://github.com/caolan/async/issues/1386), [#1390](https://github.com/caolan/async/issues/1390))
+- Small doc fix ([#1392](https://github.com/caolan/async/issues/1392))
# v2.2.0
-- Added `groupBy`, and the `Series`/`Limit` equivalents, analogous to [`_.groupBy`](http://lodash.com/docs#groupBy) (#1364)
-- Fixed `transform` bug when `callback` was not passed (#1381)
-- Added note about `reflect` to `parallel` docs (#1385)
+- Added `groupBy`, and the `Series`/`Limit` equivalents, analogous to [`_.groupBy`](http://lodash.com/docs#groupBy) ([#1364](https://github.com/caolan/async/issues/1364))
+- Fixed `transform` bug when `callback` was not passed ([#1381](https://github.com/caolan/async/issues/1381))
+- Added note about `reflect` to `parallel` docs ([#1385](https://github.com/caolan/async/issues/1385))
# v2.1.5
-- Fix `auto` bug when function names collided with Array.prototype (#1358)
-- Improve some error messages (#1349)
+- Fix `auto` bug when function names collided with Array.prototype ([#1358](https://github.com/caolan/async/issues/1358))
+- Improve some error messages ([#1349](https://github.com/caolan/async/issues/1349))
- Avoid stack overflow case in queue
- Fixed an issue in `some`, `every` and `find` where processing would continue after the result was determined.
- Cleanup implementations of `some`, `every` and `find`
@@ -19,19 +43,19 @@
- Create optimized hotpath for `filter` in array case.
# v2.1.2
-- Fixed a stackoverflow bug with `detect`, `some`, `every` on large inputs (#1293).
+- Fixed a stackoverflow bug with `detect`, `some`, `every` on large inputs ([#1293](https://github.com/caolan/async/issues/1293)).
# v2.1.0
-- `retry` and `retryable` now support an optional `errorFilter` function that determines if the `task` should retry on the error (#1256, #1261)
-- Optimized array iteration in `race`, `cargo`, `queue`, and `priorityQueue` (#1253)
-- Added alias documentation to doc site (#1251, #1254)
-- Added [BootStrap scrollspy](http://getbootstrap.com/javascript/#scrollspy) to docs to highlight in the sidebar the current method being viewed (#1289, #1300)
-- Various minor doc fixes (#1263, #1264, #1271, #1278, #1280, #1282, #1302)
+- `retry` and `retryable` now support an optional `errorFilter` function that determines if the `task` should retry on the error ([#1256](https://github.com/caolan/async/issues/1256), [#1261](https://github.com/caolan/async/issues/1261))
+- Optimized array iteration in `race`, `cargo`, `queue`, and `priorityQueue` ([#1253](https://github.com/caolan/async/issues/1253))
+- Added alias documentation to doc site ([#1251](https://github.com/caolan/async/issues/1251), [#1254](https://github.com/caolan/async/issues/1254))
+- Added [BootStrap scrollspy](http://getbootstrap.com/javascript/#scrollspy) to docs to highlight in the sidebar the current method being viewed ([#1289](https://github.com/caolan/async/issues/1289), [#1300](https://github.com/caolan/async/issues/1300))
+- Various minor doc fixes ([#1263](https://github.com/caolan/async/issues/1263), [#1264](https://github.com/caolan/async/issues/1264), [#1271](https://github.com/caolan/async/issues/1271), [#1278](https://github.com/caolan/async/issues/1278), [#1280](https://github.com/caolan/async/issues/1280), [#1282](https://github.com/caolan/async/issues/1282), [#1302](https://github.com/caolan/async/issues/1302))
# v2.0.1
-- Significantly optimized all iteration based collection methods such as `each`, `map`, `filter`, etc (#1245, #1246, #1247).
+- Significantly optimized all iteration based collection methods such as `each`, `map`, `filter`, etc ([#1245](https://github.com/caolan/async/issues/1245), [#1246](https://github.com/caolan/async/issues/1246), [#1247](https://github.com/caolan/async/issues/1247)).
# v2.0.0
@@ -54,7 +78,7 @@ Another one of the general themes of the 2.0 release is standardization of what
5. Any number of result arguments can be passed after the "error" argument
6. The callback is called once and exactly once, either on the same tick or later tick of the JavaScript event loop.
-There were several cases where Async accepted some functions that did not strictly have these properties, most notably `auto`, `every`, `some`, and `filter`.
+There were several cases where Async accepted some functions that did not strictly have these properties, most notably `auto`, `every`, `some`, `filter`, `reject` and `detect`.
Another theme is performance. We have eliminated internal deferrals in all cases where they make sense. For example, in `waterfall` and `auto`, there was a `setImmediate` between each task -- these deferrals have been removed. A `setImmediate` call can add up to 1ms of delay. This might not seem like a lot, but it can add up if you are using many Async functions in the course of processing a HTTP request, for example. Nearly all asynchronous functions that do I/O already have some sort of deferral built in, so the extra deferral is unnecessary. The trade-off of this change is removing our built-in stack-overflow defense. Many synchronous callback calls in series can quickly overflow the JS call stack. If you do have a function that is sometimes synchronous (calling its callback on the same tick), and are running into stack overflows, wrap it with `async.ensureAsync()`.
@@ -62,96 +86,96 @@ Another big performance win has been re-implementing `queue`, `cargo`, and `prio
## New Features
-- Async is now modularized. Individual functions can be `require()`d from the main package. (`require('async/auto')`) (#984, #996)
-- Async is also available as a collection of ES2015 modules in the new `async-es` package. (`import {forEachSeries} from 'async-es'`) (#984, #996)
-- Added `race`, analogous to `Promise.race()`. It will run an array of async tasks in parallel and will call its callback with the result of the first task to respond. (#568, #1038)
-- Collection methods now accept ES2015 iterators. Maps, Sets, and anything that implements the iterator spec can now be passed directly to `each`, `map`, `parallel`, etc.. (#579, #839, #1074)
-- Added `mapValues`, for mapping over the properties of an object and returning an object with the same keys. (#1157, #1177)
-- Added `timeout`, a wrapper for an async function that will make the task time-out after the specified time. (#1007, #1027)
-- Added `reflect` and `reflectAll`, analagous to [`Promise.reflect()`](http://bluebirdjs.com/docs/api/reflect.html), a wrapper for async tasks that always succeeds, by gathering results and errors into an object. (#942, #1012, #1095)
-- `constant` supports dynamic arguments -- it will now always use its last argument as the callback. (#1016, #1052)
-- `setImmediate` and `nextTick` now support arguments to partially apply to the deferred function, like the node-native versions do. (#940, #1053)
-- `auto` now supports resolving cyclic dependencies using [Kahn's algorithm](https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm) (#1140).
-- Added `autoInject`, a relative of `auto` that automatically spreads a task's dependencies as arguments to the task function. (#608, #1055, #1099, #1100)
-- You can now limit the concurrency of `auto` tasks. (#635, #637)
-- Added `retryable`, a relative of `retry` that wraps an async function, making it retry when called. (#1058)
-- `retry` now supports specifying a function that determines the next time interval, useful for exponential backoff, logging and other retry strategies. (#1161)
-- `retry` will now pass all of the arguments the task function was resolved with to the callback (#1231).
-- Added `q.unsaturated` -- callback called when a `queue`'s number of running workers falls below a threshold. (#868, #1030, #1033, #1034)
-- Added `q.error` -- a callback called whenever a `queue` task calls its callback with an error. (#1170)
-- `applyEach` and `applyEachSeries` now pass results to the final callback. (#1088)
+- Async is now modularized. Individual functions can be `require()`d from the main package. (`require('async/auto')`) ([#984](https://github.com/caolan/async/issues/984), [#996](https://github.com/caolan/async/issues/996))
+- Async is also available as a collection of ES2015 modules in the new `async-es` package. (`import {forEachSeries} from 'async-es'`) ([#984](https://github.com/caolan/async/issues/984), [#996](https://github.com/caolan/async/issues/996))
+- Added `race`, analogous to `Promise.race()`. It will run an array of async tasks in parallel and will call its callback with the result of the first task to respond. ([#568](https://github.com/caolan/async/issues/568), [#1038](https://github.com/caolan/async/issues/1038))
+- Collection methods now accept ES2015 iterators. Maps, Sets, and anything that implements the iterator spec can now be passed directly to `each`, `map`, `parallel`, etc.. ([#579](https://github.com/caolan/async/issues/579), [#839](https://github.com/caolan/async/issues/839), [#1074](https://github.com/caolan/async/issues/1074))
+- Added `mapValues`, for mapping over the properties of an object and returning an object with the same keys. ([#1157](https://github.com/caolan/async/issues/1157), [#1177](https://github.com/caolan/async/issues/1177))
+- Added `timeout`, a wrapper for an async function that will make the task time-out after the specified time. ([#1007](https://github.com/caolan/async/issues/1007), [#1027](https://github.com/caolan/async/issues/1027))
+- Added `reflect` and `reflectAll`, analagous to [`Promise.reflect()`](http://bluebirdjs.com/docs/api/reflect.html), a wrapper for async tasks that always succeeds, by gathering results and errors into an object. ([#942](https://github.com/caolan/async/issues/942), [#1012](https://github.com/caolan/async/issues/1012), [#1095](https://github.com/caolan/async/issues/1095))
+- `constant` supports dynamic arguments -- it will now always use its last argument as the callback. ([#1016](https://github.com/caolan/async/issues/1016), [#1052](https://github.com/caolan/async/issues/1052))
+- `setImmediate` and `nextTick` now support arguments to partially apply to the deferred function, like the node-native versions do. ([#940](https://github.com/caolan/async/issues/940), [#1053](https://github.com/caolan/async/issues/1053))
+- `auto` now supports resolving cyclic dependencies using [Kahn's algorithm](https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm) ([#1140](https://github.com/caolan/async/issues/1140)).
+- Added `autoInject`, a relative of `auto` that automatically spreads a task's dependencies as arguments to the task function. ([#608](https://github.com/caolan/async/issues/608), [#1055](https://github.com/caolan/async/issues/1055), [#1099](https://github.com/caolan/async/issues/1099), [#1100](https://github.com/caolan/async/issues/1100))
+- You can now limit the concurrency of `auto` tasks. ([#635](https://github.com/caolan/async/issues/635), [#637](https://github.com/caolan/async/issues/637))
+- Added `retryable`, a relative of `retry` that wraps an async function, making it retry when called. ([#1058](https://github.com/caolan/async/issues/1058))
+- `retry` now supports specifying a function that determines the next time interval, useful for exponential backoff, logging and other retry strategies. ([#1161](https://github.com/caolan/async/issues/1161))
+- `retry` will now pass all of the arguments the task function was resolved with to the callback ([#1231](https://github.com/caolan/async/issues/1231)).
+- Added `q.unsaturated` -- callback called when a `queue`'s number of running workers falls below a threshold. ([#868](https://github.com/caolan/async/issues/868), [#1030](https://github.com/caolan/async/issues/1030), [#1033](https://github.com/caolan/async/issues/1033), [#1034](https://github.com/caolan/async/issues/1034))
+- Added `q.error` -- a callback called whenever a `queue` task calls its callback with an error. ([#1170](https://github.com/caolan/async/issues/1170))
+- `applyEach` and `applyEachSeries` now pass results to the final callback. ([#1088](https://github.com/caolan/async/issues/1088))
## Breaking changes
-- Calling a callback more than once is considered an error, and an error will be thrown. This had an explicit breaking change in `waterfall`. If you were relying on this behavior, you should more accurately represent your control flow as an event emitter or stream. (#814, #815, #1048, #1050)
-- `auto` task functions now always take the callback as the last argument. If a task has dependencies, the `results` object will be passed as the first argument. To migrate old task functions, wrap them with [`_.flip`](https://lodash.com/docs#flip) (#1036, #1042)
-- Internal `setImmediate` calls have been refactored away. This may make existing flows vulnerable to stack overflows if you use many synchronous functions in series. Use `ensureAsync` to work around this. (#696, #704, #1049, #1050)
-- `map` used to return an object when iterating over an object. `map` now always returns an array, like in other libraries. The previous object behavior has been split out into `mapValues`. (#1157, #1177)
-- `filter`, `reject`, `some`, `every`, and related functions now expect an error as the first callback argument, rather than just a simple boolean. Pass `null` as the first argument, or use `fs.access` instead of `fs.exists`. (#118, #774, #1028, #1041)
-- `{METHOD}` and `{METHOD}Series` are now implemented in terms of `{METHOD}Limit`. This is a major internal simplification, and is not expected to cause many problems, but it does subtly affect how functions execute internally. (#778, #847)
-- `retry`'s callback is now optional. Previously, omitting the callback would partially apply the function, meaning it could be passed directly as a task to `series` or `auto`. The partially applied "control-flow" behavior has been separated out into `retryable`. (#1054, #1058)
-- The test function for `whilst`, `until`, and `during` used to be passed non-error args from the iteratee function's callback, but this led to weirdness where the first call of the test function would be passed no args. We have made it so the test function is never passed extra arguments, and only the `doWhilst`, `doUntil`, and `doDuring` functions pass iteratee callback arguments to the test function (#1217, #1224)
-- The `q.tasks` array has been renamed `q._tasks` and is now implemented as a doubly linked list (DLL). Any code that used to interact with this array will need to be updated to either use the provided helpers or support DLLs (#1205).
-- The timing of the `q.saturated()` callback in a `queue` has been modified to better reflect when tasks pushed to the queue will start queueing. (#724, #1078)
-- Removed `iterator` method in favour of [ES2015 iterator protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators ) which natively supports arrays (#1237)
-- Dropped support for Component, Jam, SPM, and Volo (#1175, ##176)
+- Calling a callback more than once is considered an error, and an error will be thrown. This had an explicit breaking change in `waterfall`. If you were relying on this behavior, you should more accurately represent your control flow as an event emitter or stream. ([#814](https://github.com/caolan/async/issues/814), [#815](https://github.com/caolan/async/issues/815), [#1048](https://github.com/caolan/async/issues/1048), [#1050](https://github.com/caolan/async/issues/1050))
+- `auto` task functions now always take the callback as the last argument. If a task has dependencies, the `results` object will be passed as the first argument. To migrate old task functions, wrap them with [`_.flip`](https://lodash.com/docs#flip) ([#1036](https://github.com/caolan/async/issues/1036), [#1042](https://github.com/caolan/async/issues/1042))
+- Internal `setImmediate` calls have been refactored away. This may make existing flows vulnerable to stack overflows if you use many synchronous functions in series. Use `ensureAsync` to work around this. ([#696](https://github.com/caolan/async/issues/696), [#704](https://github.com/caolan/async/issues/704), [#1049](https://github.com/caolan/async/issues/1049), [#1050](https://github.com/caolan/async/issues/1050))
+- `map` used to return an object when iterating over an object. `map` now always returns an array, like in other libraries. The previous object behavior has been split out into `mapValues`. ([#1157](https://github.com/caolan/async/issues/1157), [#1177](https://github.com/caolan/async/issues/1177))
+- `filter`, `reject`, `some`, `every`, `detect` and their families like `{METHOD}Series` and `{METHOD}Limit` now expect an error as the first callback argument, rather than just a simple boolean. Pass `null` as the first argument, or use `fs.access` instead of `fs.exists`. ([#118](https://github.com/caolan/async/issues/118), [#774](https://github.com/caolan/async/issues/774), [#1028](https://github.com/caolan/async/issues/1028), [#1041](https://github.com/caolan/async/issues/1041))
+- `{METHOD}` and `{METHOD}Series` are now implemented in terms of `{METHOD}Limit`. This is a major internal simplification, and is not expected to cause many problems, but it does subtly affect how functions execute internally. ([#778](https://github.com/caolan/async/issues/778), [#847](https://github.com/caolan/async/issues/847))
+- `retry`'s callback is now optional. Previously, omitting the callback would partially apply the function, meaning it could be passed directly as a task to `series` or `auto`. The partially applied "control-flow" behavior has been separated out into `retryable`. ([#1054](https://github.com/caolan/async/issues/1054), [#1058](https://github.com/caolan/async/issues/1058))
+- The test function for `whilst`, `until`, and `during` used to be passed non-error args from the iteratee function's callback, but this led to weirdness where the first call of the test function would be passed no args. We have made it so the test function is never passed extra arguments, and only the `doWhilst`, `doUntil`, and `doDuring` functions pass iteratee callback arguments to the test function ([#1217](https://github.com/caolan/async/issues/1217), [#1224](https://github.com/caolan/async/issues/1224))
+- The `q.tasks` array has been renamed `q._tasks` and is now implemented as a doubly linked list (DLL). Any code that used to interact with this array will need to be updated to either use the provided helpers or support DLLs ([#1205](https://github.com/caolan/async/issues/1205)).
+- The timing of the `q.saturated()` callback in a `queue` has been modified to better reflect when tasks pushed to the queue will start queueing. ([#724](https://github.com/caolan/async/issues/724), [#1078](https://github.com/caolan/async/issues/1078))
+- Removed `iterator` method in favour of [ES2015 iterator protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators ) which natively supports arrays ([#1237](https://github.com/caolan/async/issues/1237))
+- Dropped support for Component, Jam, SPM, and Volo ([#1175](https://github.com/caolan/async/issues/1175), #[#176](https://github.com/caolan/async/issues/176))
## Bug Fixes
-- Improved handling of no dependency cases in `auto` & `autoInject` (#1147).
-- Fixed a bug where the callback generated by `asyncify` with `Promises` could resolve twice (#1197).
-- Fixed several documented optional callbacks not actually being optional (#1223).
+- Improved handling of no dependency cases in `auto` & `autoInject` ([#1147](https://github.com/caolan/async/issues/1147)).
+- Fixed a bug where the callback generated by `asyncify` with `Promises` could resolve twice ([#1197](https://github.com/caolan/async/issues/1197)).
+- Fixed several documented optional callbacks not actually being optional ([#1223](https://github.com/caolan/async/issues/1223)).
## Other
- Added `someSeries` and `everySeries` for symmetry, as well as a complete set of `any`/`anyLimit`/`anySeries` and `all`/`/allLmit`/`allSeries` aliases.
- Added `find` as an alias for `detect. (as well as `findLimit` and `findSeries`).
-- Various doc fixes (#1005, #1008, #1010, #1015, #1021, #1037, #1039, #1051, #1102, #1107, #1121, #1123, #1129, #1135, #1138, #1141, #1153, #1216, #1217, #1232, #1233, #1236, #1238)
+- Various doc fixes ([#1005](https://github.com/caolan/async/issues/1005), [#1008](https://github.com/caolan/async/issues/1008), [#1010](https://github.com/caolan/async/issues/1010), [#1015](https://github.com/caolan/async/issues/1015), [#1021](https://github.com/caolan/async/issues/1021), [#1037](https://github.com/caolan/async/issues/1037), [#1039](https://github.com/caolan/async/issues/1039), [#1051](https://github.com/caolan/async/issues/1051), [#1102](https://github.com/caolan/async/issues/1102), [#1107](https://github.com/caolan/async/issues/1107), [#1121](https://github.com/caolan/async/issues/1121), [#1123](https://github.com/caolan/async/issues/1123), [#1129](https://github.com/caolan/async/issues/1129), [#1135](https://github.com/caolan/async/issues/1135), [#1138](https://github.com/caolan/async/issues/1138), [#1141](https://github.com/caolan/async/issues/1141), [#1153](https://github.com/caolan/async/issues/1153), [#1216](https://github.com/caolan/async/issues/1216), [#1217](https://github.com/caolan/async/issues/1217), [#1232](https://github.com/caolan/async/issues/1232), [#1233](https://github.com/caolan/async/issues/1233), [#1236](https://github.com/caolan/async/issues/1236), [#1238](https://github.com/caolan/async/issues/1238))
Thank you [**@aearly**](github.com/aearly) and [**@megawac**](github.com/megawac) for taking the lead on version 2 of async.
------------------------------------------
# v1.5.2
-- Allow using `"constructor"` as an argument in `memoize` (#998)
-- Give a better error messsage when `auto` dependency checking fails (#994)
-- Various doc updates (#936, #956, #979, #1002)
+- Allow using `"constructor"` as an argument in `memoize` ([#998](https://github.com/caolan/async/issues/998))
+- Give a better error messsage when `auto` dependency checking fails ([#994](https://github.com/caolan/async/issues/994))
+- Various doc updates ([#936](https://github.com/caolan/async/issues/936), [#956](https://github.com/caolan/async/issues/956), [#979](https://github.com/caolan/async/issues/979), [#1002](https://github.com/caolan/async/issues/1002))
# v1.5.1
-- Fix issue with `pause` in `queue` with concurrency enabled (#946)
-- `while` and `until` now pass the final result to callback (#963)
-- `auto` will properly handle concurrency when there is no callback (#966)
-- `auto` will no. properly stop execution when an error occurs (#988, #993)
-- Various doc fixes (#971, #980)
+- Fix issue with `pause` in `queue` with concurrency enabled ([#946](https://github.com/caolan/async/issues/946))
+- `while` and `until` now pass the final result to callback ([#963](https://github.com/caolan/async/issues/963))
+- `auto` will properly handle concurrency when there is no callback ([#966](https://github.com/caolan/async/issues/966))
+- `auto` will no. properly stop execution when an error occurs ([#988](https://github.com/caolan/async/issues/988), [#993](https://github.com/caolan/async/issues/993))
+- Various doc fixes ([#971](https://github.com/caolan/async/issues/971), [#980](https://github.com/caolan/async/issues/980))
# v1.5.0
-- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) (#892)
-- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. (#873)
-- `auto` now accepts an optional `concurrency` argument to limit the number o. running tasks (#637)
-- Added `queue#workersList()`, to retrieve the lis. of currently running tasks. (#891)
-- Various code simplifications (#896, #904)
-- Various doc fixes :scroll: (#890, #894, #903, #905, #912)
+- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) ([#892](https://github.com/caolan/async/issues/892))
+- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. ([#873](https://github.com/caolan/async/issues/873))
+- `auto` now accepts an optional `concurrency` argument to limit the number o. running tasks ([#637](https://github.com/caolan/async/issues/637))
+- Added `queue#workersList()`, to retrieve the lis. of currently running tasks. ([#891](https://github.com/caolan/async/issues/891))
+- Various code simplifications ([#896](https://github.com/caolan/async/issues/896), [#904](https://github.com/caolan/async/issues/904))
+- Various doc fixes :scroll: ([#890](https://github.com/caolan/async/issues/890), [#894](https://github.com/caolan/async/issues/894), [#903](https://github.com/caolan/async/issues/903), [#905](https://github.com/caolan/async/issues/905), [#912](https://github.com/caolan/async/issues/912))
# v1.4.2
-- Ensure coverage files don't get published on npm (#879)
+- Ensure coverage files don't get published on npm ([#879](https://github.com/caolan/async/issues/879))
# v1.4.1
-- Add in overlooked `detectLimit` method (#866)
-- Removed unnecessary files from npm releases (#861)
-- Removed usage of a reserved word to prevent :boom: in older environments (#870)
+- Add in overlooked `detectLimit` method ([#866](https://github.com/caolan/async/issues/866))
+- Removed unnecessary files from npm releases ([#861](https://github.com/caolan/async/issues/861))
+- Removed usage of a reserved word to prevent :boom: in older environments ([#870](https://github.com/caolan/async/issues/870))
# v1.4.0
-- `asyncify` now supports promises (#840)
-- Added `Limit` versions of `filter` and `reject` (#836)
-- Add `Limit` versions of `detect`, `some` and `every` (#828, #829)
-- `some`, `every` and `detect` now short circuit early (#828, #829)
-- Improve detection of the global object (#804), enabling use in WebWorkers
-- `whilst` now called with arguments from iterator (#823)
-- `during` now gets called with arguments from iterator (#824)
+- `asyncify` now supports promises ([#840](https://github.com/caolan/async/issues/840))
+- Added `Limit` versions of `filter` and `reject` ([#836](https://github.com/caolan/async/issues/836))
+- Add `Limit` versions of `detect`, `some` and `every` ([#828](https://github.com/caolan/async/issues/828), [#829](https://github.com/caolan/async/issues/829))
+- `some`, `every` and `detect` now short circuit early ([#828](https://github.com/caolan/async/issues/828), [#829](https://github.com/caolan/async/issues/829))
+- Improve detection of the global object ([#804](https://github.com/caolan/async/issues/804)), enabling use in WebWorkers
+- `whilst` now called with arguments from iterator ([#823](https://github.com/caolan/async/issues/823))
+- `during` now gets called with arguments from iterator ([#824](https://github.com/caolan/async/issues/824))
- Code simplifications and optimizations aplenty ([diff](https://github.com/caolan/async/compare/v1.3.0...v1.4.0))
@@ -159,42 +183,42 @@ Thank you [**@aearly**](github.com/aearly) and [**@megawac**](github.com/megawac
New Features:
- Added `constant`
-- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. (#671, #806)
-- Added `during` and `doDuring`, which are like `whilst` with an async truth test. (#800)
-- `retry` now accepts an `interval` parameter to specify a delay between retries. (#793)
-- `async` should work better in Web Workers due to better `root` detection (#804)
-- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` (#642)
-- Various internal updates (#786, #801, #802, #803)
-- Various doc fixes (#790, #794)
+- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. ([#671](https://github.com/caolan/async/issues/671), [#806](https://github.com/caolan/async/issues/806))
+- Added `during` and `doDuring`, which are like `whilst` with an async truth test. ([#800](https://github.com/caolan/async/issues/800))
+- `retry` now accepts an `interval` parameter to specify a delay between retries. ([#793](https://github.com/caolan/async/issues/793))
+- `async` should work better in Web Workers due to better `root` detection ([#804](https://github.com/caolan/async/issues/804))
+- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` ([#642](https://github.com/caolan/async/issues/642))
+- Various internal updates ([#786](https://github.com/caolan/async/issues/786), [#801](https://github.com/caolan/async/issues/801), [#802](https://github.com/caolan/async/issues/802), [#803](https://github.com/caolan/async/issues/803))
+- Various doc fixes ([#790](https://github.com/caolan/async/issues/790), [#794](https://github.com/caolan/async/issues/794))
Bug Fixes:
-- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. (#740, #744, #783)
+- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. ([#740](https://github.com/caolan/async/issues/740), [#744](https://github.com/caolan/async/issues/744), [#783](https://github.com/caolan/async/issues/783))
# v1.2.1
Bug Fix:
-- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782)
+- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. ([#782](https://github.com/caolan/async/issues/782))
# v1.2.0
New Features:
-- Added `timesLimit` (#743)
-- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. (#747, #772)
+- Added `timesLimit` ([#743](https://github.com/caolan/async/issues/743))
+- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. ([#747](https://github.com/caolan/async/issues/747), [#772](https://github.com/caolan/async/issues/772))
Bug Fixes:
-- Fixed a regression in `each` and family with empty arrays that have additional properties. (#775, #777)
+- Fixed a regression in `each` and family with empty arrays that have additional properties. ([#775](https://github.com/caolan/async/issues/775), [#777](https://github.com/caolan/async/issues/777))
# v1.1.1
Bug Fix:
-- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782)
+- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. ([#782](https://github.com/caolan/async/issues/782))
# v1.1.0
@@ -202,23 +226,23 @@ Bug Fix:
New Features:
- `cargo` now supports all of the same methods and event callbacks as `queue`.
-- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. (#769)
+- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. ([#769](https://github.com/caolan/async/issues/769))
- Optimized `map`, `eachOf`, and `waterfall` families of functions
-- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array (#667).
-- The callback is now optional for the composed results of `compose` and `seq`. (#618)
+- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array ([#667](https://github.com/caolan/async/issues/667)).
+- The callback is now optional for the composed results of `compose` and `seq`. ([#618](https://github.com/caolan/async/issues/618))
- Reduced file size by 4kb, (minified version by 1kb)
-- Added code coverage through `nyc` and `coveralls` (#768)
+- Added code coverage through `nyc` and `coveralls` ([#768](https://github.com/caolan/async/issues/768))
Bug Fixes:
-- `forever` will no longer stack overflow with a synchronous iterator (#622)
-- `eachLimit` and other limit functions will stop iterating once an error occurs (#754)
-- Always pass `null` in callbacks when there is no error (#439)
-- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue (#668)
-- `each` and family will properly handle an empty array (#578)
-- `eachSeries` and family will finish if the underlying array is modified during execution (#557)
-- `queue` will throw if a non-function is passed to `q.push()` (#593)
-- Doc fixes (#629, #766)
+- `forever` will no longer stack overflow with a synchronous iterator ([#622](https://github.com/caolan/async/issues/622))
+- `eachLimit` and other limit functions will stop iterating once an error occurs ([#754](https://github.com/caolan/async/issues/754))
+- Always pass `null` in callbacks when there is no error ([#439](https://github.com/caolan/async/issues/439))
+- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue ([#668](https://github.com/caolan/async/issues/668))
+- `each` and family will properly handle an empty array ([#578](https://github.com/caolan/async/issues/578))
+- `eachSeries` and family will finish if the underlying array is modified during execution ([#557](https://github.com/caolan/async/issues/557))
+- `queue` will throw if a non-function is passed to `q.push()` ([#593](https://github.com/caolan/async/issues/593))
+- Doc fixes ([#629](https://github.com/caolan/async/issues/629), [#766](https://github.com/caolan/async/issues/766))
# v1.0.0
@@ -228,12 +252,12 @@ No known breaking changes, we are simply complying with semver from here on out.
Changes:
- Start using a changelog!
-- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) (#168 #704 #321)
-- Detect deadlocks in `auto` (#663)
-- Better support for require.js (#527)
-- Throw if queue created with concurrency `0` (#714)
-- Fix unneeded iteration in `queue.resume()` (#758)
-- Guard against timer mocking overriding `setImmediate` (#609 #611)
-- Miscellaneous doc fixes (#542 #596 #615 #628 #631 #690 #729)
-- Use single noop function internally (#546)
+- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) ([#168](https://github.com/caolan/async/issues/168) [#704](https://github.com/caolan/async/issues/704) [#321](https://github.com/caolan/async/issues/321))
+- Detect deadlocks in `auto` ([#663](https://github.com/caolan/async/issues/663))
+- Better support for require.js ([#527](https://github.com/caolan/async/issues/527))
+- Throw if queue created with concurrency `0` ([#714](https://github.com/caolan/async/issues/714))
+- Fix unneeded iteration in `queue.resume()` ([#758](https://github.com/caolan/async/issues/758))
+- Guard against timer mocking overriding `setImmediate` ([#609](https://github.com/caolan/async/issues/609) [#611](https://github.com/caolan/async/issues/611))
+- Miscellaneous doc fixes ([#542](https://github.com/caolan/async/issues/542) [#596](https://github.com/caolan/async/issues/596) [#615](https://github.com/caolan/async/issues/615) [#628](https://github.com/caolan/async/issues/628) [#631](https://github.com/caolan/async/issues/631) [#690](https://github.com/caolan/async/issues/690) [#729](https://github.com/caolan/async/issues/729))
+- Use single noop function internally ([#546](https://github.com/caolan/async/issues/546))
- Optimize internal `_each`, `_map` and `_keys` functions.
diff --git a/LICENSE b/LICENSE
index d807c05..b18aed6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2010-2017 Caolan McMahon
+Copyright (c) 2010-2018 Caolan McMahon
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/Makefile b/Makefile
index deeb78b..770ed1b 100644
--- a/Makefile
+++ b/Makefile
@@ -7,22 +7,26 @@ export PATH := ./node_modules/.bin/:$(PATH):./bin/
PACKAGE = asyncjs
REQUIRE_NAME = async
-BABEL_NODE = babel-node
UGLIFY = uglifyjs
XYZ = support/xyz.sh --repo git@github.com:caolan/async.git
+COPY_ES = sed -E "s/(import.+)lodash/\1lodash-es/g"
BUILDDIR = build
BUILD_ES = build-es
DIST = dist
-SRC = lib/index.js
+JS_INDEX = lib/index.js
SCRIPTS = ./support
-JS_SRC = $(shell find lib/ -type f -name '*.js')
+JS_SRC = $(shell find lib/ -type f -name '*.js') lib/index.js
+INDEX_SRC = $(shell find lib/ -type f -name '*.js' | grep -v 'index') $(SCRIPTS)/index-template.js $(SCRIPTS)/aliases.json ${SCRIPTS}/generate-index.js
LINT_FILES = lib/ mocha_test/ $(shell find perf/ -maxdepth 2 -type f) $(shell find support/ -maxdepth 2 -type f -name "*.js") karma.conf.js
UMD_BUNDLE = $(BUILDDIR)/dist/async.js
UMD_BUNDLE_MIN = $(BUILDDIR)/dist/async.min.js
-CJS_BUNDLE = $(BUILDDIR)/index.js
-ES_MODULES = $(patsubst lib/%.js, build-es/%.js, $(JS_SRC))
+UMD_BUNDLE_MAP = $(BUILDDIR)/dist/async.min.map
+ALIAS_ES = $(shell node $(SCRIPTS)/list-aliases.js build-es/)
+ES_MODULES = $(patsubst lib/%.js, build-es/%.js, $(JS_SRC)) $(ALIAS_ES)
+ALIAS_CJS = $(shell node $(SCRIPTS)/list-aliases.js build/)
+CJS_MODULES = $(patsubst lib/%.js, build/%.js, $(JS_SRC)) $(ALIAS_CJS)
all: clean lint build test
@@ -34,6 +38,7 @@ clean:
rm -rf $(BUILDDIR)
rm -rf $(BUILD_ES)
rm -rf $(DIST)
+ rm -rf $(JS_INDEX)
rm -rf tmp/ docs/ .nyc_output/ coverage/
rm -rf perf/versions/
@@ -41,20 +46,31 @@ lint:
eslint $(LINT_FILES)
# Compile the ES6 modules to singular bundles, and individual bundles
-build-bundle: build-modules $(UMD_BUNDLE) $(CJS_BUNDLE)
+build-bundle: build-modules $(UMD_BUNDLE)
-build-modules:
- $(BABEL_NODE) $(SCRIPTS)/build/modules-cjs.js
+build-modules: $(CJS_MODULES)
-$(UMD_BUNDLE): $(JS_SRC) package.json
+$(JS_INDEX): $(INDEX_SRC)
+ node $(SCRIPTS)/generate-index.js > $@
+
+$(BUILDDIR)/%.js: lib/%.js
mkdir -p "$(@D)"
- $(BABEL_NODE) $(SCRIPTS)/build/aggregate-bundle.js
+ node $(SCRIPTS)/build/compile-module.js --file $< --output $@
+
-$(CJS_BUNDLE): $(JS_SRC) package.json
- $(BABEL_NODE) $(SCRIPTS)/build/aggregate-cjs.js
+define COMPILE_ALIAS
+$A: $(shell node $(SCRIPTS)/get-alias.js $A)
+ mkdir -p "$$(@D)"
+ node $(SCRIPTS)/build/compile-module.js --file $$< --output $$@
+endef
+$(foreach A,$(ALIAS_CJS),$(eval $(COMPILE_ALIAS)))
+
+$(UMD_BUNDLE): $(ES_MODULES) package.json
+ mkdir -p "$(@D)"
+ node $(SCRIPTS)/build/aggregate-bundle.js
# Create the minified UMD versions and copy them to dist/ for bower
-build-dist: $(DIST) $(UMD_BUNDLE) $(UMD_BUNDLE_MIN) $(DIST)/async.js $(DIST)/async.min.js
+build-dist: $(DIST) $(DIST)/async.js $(DIST)/async.min.js $(DIST)/async.min.map
$(DIST):
mkdir -p $@
@@ -62,7 +78,7 @@ $(DIST):
$(UMD_BUNDLE_MIN): $(UMD_BUNDLE)
mkdir -p "$(@D)"
$(UGLIFY) $< --mangle --compress \
- --source-map $(DIST)/async.min.map \
+ --source-map $(UMD_BUNDLE_MAP) \
--source-map-url async.min.map \
-o $@
@@ -72,13 +88,23 @@ $(DIST)/async.js: $(UMD_BUNDLE)
$(DIST)/async.min.js: $(UMD_BUNDLE_MIN)
cp $< $@
+$(DIST)/async.min.map: $(UMD_BUNDLE_MIN)
+ cp $(UMD_BUNDLE_MAP) $@
+
build-es: $(ES_MODULES)
$(BUILD_ES)/%.js: lib/%.js
mkdir -p "$(@D)"
- sed -E "s/(import.+)lodash/\1lodash-es/g" $< > $@
+ $(COPY_ES) $< > $@
-test-build:
+define COPY_ES_ALIAS
+$A: $(shell node $(SCRIPTS)/get-alias.js $A)
+ mkdir -p "$$(@D)"
+ $(COPY_ES) $$< > $$@
+endef
+$(foreach A,$(ALIAS_ES),$(eval $(COPY_ES_ALIAS)))
+
+test-build: $(UMD_BUNDLE) $(UMD_BUNDLE_MIN)
mocha support/build.test.js
build-config: $(BUILDDIR)/package.json $(BUILDDIR)/bower.json $(BUILDDIR)/README.md $(BUILDDIR)/LICENSE $(BUILDDIR)/CHANGELOG.md
@@ -97,13 +123,17 @@ $(BUILD_ES)/package.json: package.json
mkdir -p "$(@D)"
support/sync-es-package.js > $@
+$(BUILD_ES)/README.md: README.es.md
+ mkdir -p "$(@D)"
+ cp $< $@
+
$(BUILD_ES)/%: %
mkdir -p "$(@D)"
cp $< $@
.PHONY: build-modules build-bundle build-dist build-es build-config build-es-config test-build
-build: clean build-bundle build-dist build-es build-config build-es-config test-build
+build: build-bundle build-dist build-es build-config build-es-config test-build
.PHONY: test lint build all clean
diff --git a/README.es.md b/README.es.md
new file mode 100644
index 0000000..9661061
--- /dev/null
+++ b/README.es.md
@@ -0,0 +1,59 @@
+![Async Logo](https://raw.githubusercontent.com/caolan/async/master/logo/async-logo_readme.jpg)
+
+[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async)
+[![NPM version](https://img.shields.io/npm/v/async.svg)](https://www.npmjs.com/package/async)
+[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master)
+[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![libhive - Open source examples](https://www.libhive.com/providers/npm/packages/async/examples/badge.svg)](https://www.libhive.com/providers/npm/packages/async)
+[![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/async/badge?style=rounded)](https://www.jsdelivr.com/package/npm/async)
+
+
+Async is a utility module which provides straight-forward, powerful functions for working with [asynchronous JavaScript](http://caolan.github.io/async/global.html). Although originally designed for use with [Node.js](https://nodejs.org/) and installable via `npm install --save async`, it can also be used directly in the browser.
+
+This version of the package is optimized for building with webpack. If you use Async in Node.js, install [`async`](https://www.npmjs.com/package/async) instead.
+
+For Documentation, visit <https://caolan.github.io/async/>
+
+*For Async v1.5.x documentation, go [HERE](https://github.com/caolan/async/blob/v1.5.2/README.md)*
+
+
+```javascript
+// for use with callbacks...
+import { forEachOf } from "async-es";
+
+const images = {cat: "/cat.png", dog: "/dog.png", duck: "/duck.png"};
+const sizes = {};
+
+forEachOf(images, (value, key, callback) => {
+ const imageElem = new Image();
+ imageElem.src = value;
+ imageElem.addEventListener("load", () => {
+ sizes[key] = {
+ width: imageElem.naturalWidth,
+ height: imageElem.naturalHeight,
+ };
+ callback();
+ });
+ imageElem.addEventListener("error", (e) => {
+ callback(e);
+ });
+}, err => {
+ if (err) console.error(err.message);
+ // `sizes` is now a map of image sizes
+ doSomethingWith(sizes);
+});
+```
+
+```javascript
+import { mapLimit } from "async-es";
+
+// ...or ES2017 async functions
+mapLimit(urls, 5, async function(url) {
+ const response = await fetch(url)
+ return response.body
+}, (err, results) => {
+ if (err) throw err
+ // results is now an array of the response bodies
+ console.log(results)
+})
+```
diff --git a/README.md b/README.md
index f59b13c..49cf950 100644
--- a/README.md
+++ b/README.md
@@ -5,10 +5,52 @@
[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master)
[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![libhive - Open source examples](https://www.libhive.com/providers/npm/packages/async/examples/badge.svg)](https://www.libhive.com/providers/npm/packages/async)
+[![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/async/badge?style=rounded)](https://www.jsdelivr.com/package/npm/async)
-Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with [Node.js](https://nodejs.org/) and installable via `npm install --save async`, it can also be used directly in the browser.
+Async is a utility module which provides straight-forward, powerful functions for working with [asynchronous JavaScript](http://caolan.github.io/async/global.html). Although originally designed for use with [Node.js](https://nodejs.org/) and installable via `npm install --save async`, it can also be used directly in the browser.
-For Documentation, visit <http://caolan.github.io/async/>
+This version of the package is optimized for the Node.js environment. If you use Async with webpack, install [`async-es`](https://www.npmjs.com/package/async-es) instead.
+
+For Documentation, visit <https://caolan.github.io/async/>
*For Async v1.5.x documentation, go [HERE](https://github.com/caolan/async/blob/v1.5.2/README.md)*
+
+
+```javascript
+// for use with Node-style callbacks...
+var async = require("async");
+
+var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
+var configs = {};
+
+async.forEachOf(obj, (value, key, callback) => {
+ fs.readFile(__dirname + value, "utf8", (err, data) => {
+ if (err) return callback(err);
+ try {
+ configs[key] = JSON.parse(data);
+ } catch (e) {
+ return callback(e);
+ }
+ callback();
+ });
+}, err => {
+ if (err) console.error(err.message);
+ // configs is now a map of JSON data
+ doSomethingWith(configs);
+});
+```
+
+```javascript
+var async = require("async");
+
+// ...or ES2017 async functions
+async.mapLimit(urls, 5, async function(url) {
+ const response = await fetch(url)
+ return response.body
+}, (err, results) => {
+ if (err) throw err
+ // results is now an array of the response bodies
+ console.log(results)
+})
+```
diff --git a/dist/async.js b/dist/async.js
index 4d2aa08..ddb1af7 100644
--- a/dist/async.js
+++ b/dist/async.js
@@ -1,93 +1,78 @@
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (factory((global.async = global.async || {})));
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (factory((global.async = global.async || {})));
}(this, (function (exports) { 'use strict';
-/**
- * A faster alternative to `Function#apply`, this function invokes `func`
- * with the `this` binding of `thisArg` and the arguments of `args`.
- *
- * @private
- * @param {Function} func The function to invoke.
- * @param {*} thisArg The `this` binding of `func`.
- * @param {Array} args The arguments to invoke `func` with.
- * @returns {*} Returns the result of `func`.
- */
-function apply(func, thisArg, args) {
- switch (args.length) {
- case 0: return func.call(thisArg);
- case 1: return func.call(thisArg, args[0]);
- case 2: return func.call(thisArg, args[0], args[1]);
- case 3: return func.call(thisArg, args[0], args[1], args[2]);
- }
- return func.apply(thisArg, args);
-}
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMax = Math.max;
-
-/**
- * A specialized version of `baseRest` which transforms the rest array.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @param {number} [start=func.length-1] The start position of the rest parameter.
- * @param {Function} transform The rest array transform.
- * @returns {Function} Returns the new function.
- */
-function overRest$1(func, start, transform) {
- start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
- return function() {
- var args = arguments,
- index = -1,
- length = nativeMax(args.length - start, 0),
- array = Array(length);
-
- while (++index < length) {
- array[index] = args[start + index];
- }
- index = -1;
- var otherArgs = Array(start + 1);
- while (++index < start) {
- otherArgs[index] = args[index];
+function slice(arrayLike, start) {
+ start = start|0;
+ var newLen = Math.max(arrayLike.length - start, 0);
+ var newArr = Array(newLen);
+ for(var idx = 0; idx < newLen; idx++) {
+ newArr[idx] = arrayLike[start + idx];
}
- otherArgs[start] = transform(array);
- return apply(func, this, otherArgs);
- };
+ return newArr;
}
/**
- * This method returns the first argument it receives.
+ * Creates a continuation function with some arguments already applied.
*
+ * Useful as a shorthand when combined with other control flow functions. Any
+ * arguments passed to the returned function are added to the arguments
+ * originally passed to apply.
+ *
+ * @name apply
* @static
- * @since 0.1.0
- * @memberOf _
+ * @memberOf module:Utils
+ * @method
* @category Util
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
+ * @param {Function} fn - The function you want to eventually apply all
+ * arguments to. Invokes with (arguments...).
+ * @param {...*} arguments... - Any number of arguments to automatically apply
+ * when the continuation is called.
+ * @returns {Function} the partially-applied function
* @example
*
- * var object = { 'a': 1 };
+ * // using apply
+ * async.parallel([
+ * async.apply(fs.writeFile, 'testfile1', 'test1'),
+ * async.apply(fs.writeFile, 'testfile2', 'test2')
+ * ]);
*
- * console.log(_.identity(object) === object);
- * // => true
+ *
+ * // the same process without using apply
+ * async.parallel([
+ * function(callback) {
+ * fs.writeFile('testfile1', 'test1', callback);
+ * },
+ * function(callback) {
+ * fs.writeFile('testfile2', 'test2', callback);
+ * }
+ * ]);
+ *
+ * // It's possible to pass any number of additional arguments when calling the
+ * // continuation:
+ *
+ * node> var fn = async.apply(sys.puts, 'one');
+ * node> fn('two', 'three');
+ * one
+ * two
+ * three
*/
-function identity(value) {
- return value;
-}
-
-// Lodash rest function without function.toString()
-// remappings
-function rest(func, start) {
- return overRest$1(func, start, identity);
-}
+var apply = function(fn/*, ...args*/) {
+ var args = slice(arguments, 1);
+ return function(/*callArgs*/) {
+ var callArgs = slice(arguments);
+ return fn.apply(null, args.concat(callArgs));
+ };
+};
var initialParams = function (fn) {
- return rest(function (args /*..., callback*/) {
+ return function (/*...args, callback*/) {
+ var args = slice(arguments);
var callback = args.pop();
fn.call(this, args, callback);
- });
+ };
};
/**
@@ -120,6 +105,34 @@ function isObject(value) {
return value != null && (type == 'object' || type == 'function');
}
+var hasSetImmediate = typeof setImmediate === 'function' && setImmediate;
+var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';
+
+function fallback(fn) {
+ setTimeout(fn, 0);
+}
+
+function wrap(defer) {
+ return function (fn/*, ...args*/) {
+ var args = slice(arguments, 1);
+ defer(function () {
+ fn.apply(null, args);
+ });
+ };
+}
+
+var _defer;
+
+if (hasSetImmediate) {
+ _defer = setImmediate;
+} else if (hasNextTick) {
+ _defer = process.nextTick;
+} else {
+ _defer = fallback;
+}
+
+var setImmediate$1 = wrap(_defer);
+
/**
* Take a sync function and make it async, passing its return value to a
* callback. This is useful for plugging sync functions into a waterfall,
@@ -139,7 +152,7 @@ function isObject(value) {
* @method
* @alias wrapSync
* @category Util
- * @param {Function} func - The synchronous funuction, or Promise-returning
+ * @param {Function} func - The synchronous function, or Promise-returning
* function to convert to an {@link AsyncFunction}.
* @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be
* invoked with `(args..., callback)`.
@@ -186,10 +199,10 @@ function asyncify(func) {
}
// if result is Promise object
if (isObject(result) && typeof result.then === 'function') {
- result.then(function (value) {
- callback(null, value);
- }, function (err) {
- callback(err.message ? err : new Error(err));
+ result.then(function(value) {
+ invokeCallback(callback, null, value);
+ }, function(err) {
+ invokeCallback(callback, err.message ? err : new Error(err));
});
} else {
callback(null, result);
@@ -197,19 +210,20 @@ function asyncify(func) {
});
}
-var supportsSymbol = typeof Symbol === 'function';
-
-function supportsAsync() {
- var supported;
+function invokeCallback(callback, error, value) {
try {
- /* eslint no-eval: 0 */
- supported = isAsync(eval('(async function () {})'));
+ callback(error, value);
} catch (e) {
- supported = false;
+ setImmediate$1(rethrow, e);
}
- return supported;
}
+function rethrow(error) {
+ throw error;
+}
+
+var supportsSymbol = typeof Symbol === 'function';
+
function isAsync(fn) {
return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction';
}
@@ -218,22 +232,22 @@ function wrapAsync(asyncFn) {
return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;
}
-var wrapAsync$1 = supportsAsync() ? wrapAsync : identity;
-
function applyEach$1(eachfn) {
- return rest(function (fns, args) {
- var go = initialParams(function (args, callback) {
+ return function(fns/*, ...args*/) {
+ var args = slice(arguments, 1);
+ var go = initialParams(function(args, callback) {
var that = this;
return eachfn(fns, function (fn, cb) {
- wrapAsync$1(fn).apply(that, args.concat(cb));
+ wrapAsync(fn).apply(that, args.concat(cb));
}, callback);
});
if (args.length) {
return go.apply(this, args);
- } else {
+ }
+ else {
return go;
}
- });
+ };
}
/** Detect free variable `global` from Node.js. */
@@ -330,8 +344,7 @@ function baseGetTag(value) {
if (value == null) {
return value === undefined ? undefinedTag : nullTag;
}
- value = Object(value);
- return (symToStringTag && symToStringTag in value)
+ return (symToStringTag && symToStringTag in Object(value))
? getRawTag(value)
: objectToString(value);
}
@@ -740,7 +753,7 @@ var freeProcess = moduleExports$1 && freeGlobal.process;
/** Used to access faster Node.js helpers. */
var nodeUtil = (function() {
try {
- return freeProcess && freeProcess.binding('util');
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
} catch (e) {}
}());
@@ -903,18 +916,19 @@ function createArrayIterator(coll) {
var i = -1;
var len = coll.length;
return function next() {
- return ++i < len ? { value: coll[i], key: i } : null;
- };
+ return ++i < len ? {value: coll[i], key: i} : null;
+ }
}
function createES2015Iterator(iterator) {
var i = -1;
return function next() {
var item = iterator.next();
- if (item.done) return null;
+ if (item.done)
+ return null;
i++;
- return { value: item.value, key: i };
- };
+ return {value: item.value, key: i};
+ }
}
function createObjectIterator(obj) {
@@ -923,7 +937,7 @@ function createObjectIterator(obj) {
var len = okeys.length;
return function next() {
var key = okeys[++i];
- return i < len ? { value: obj[key], key: key } : null;
+ return i < len ? {value: obj[key], key: key} : null;
};
}
@@ -937,7 +951,7 @@ function iterator(coll) {
}
function onlyOnce(fn) {
- return function () {
+ return function() {
if (fn === null) throw new Error("Callback was already called.");
var callFn = fn;
fn = null;
@@ -960,15 +974,17 @@ function _eachOfLimit(limit) {
if (err) {
done = true;
callback(err);
- } else if (value === breakLoop || done && running <= 0) {
+ }
+ else if (value === breakLoop || (done && running <= 0)) {
done = true;
return callback(null);
- } else {
+ }
+ else {
replenish();
}
}
- function replenish() {
+ function replenish () {
while (running < limit && !done) {
var elem = nextElem();
if (elem === null) {
@@ -1008,7 +1024,7 @@ function _eachOfLimit(limit) {
* `iteratee` functions have finished, or an error occurs. Invoked with (err).
*/
function eachOfLimit(coll, limit, iteratee, callback) {
- _eachOfLimit(limit)(coll, wrapAsync$1(iteratee), callback);
+ _eachOfLimit(limit)(coll, wrapAsync(iteratee), callback);
}
function doLimit(fn, limit) {
@@ -1030,7 +1046,7 @@ function eachOfArrayLike(coll, iteratee, callback) {
function iteratorCallback(err, value) {
if (err) {
callback(err);
- } else if (++completed === length || value === breakLoop) {
+ } else if ((++completed === length) || value === breakLoop) {
callback(null);
}
}
@@ -1082,14 +1098,14 @@ var eachOfGeneric = doLimit(eachOfLimit, Infinity);
* doSomethingWith(configs);
* });
*/
-var eachOf = function (coll, iteratee, callback) {
+var eachOf = function(coll, iteratee, callback) {
var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;
- eachOfImplementation(coll, wrapAsync$1(iteratee), callback);
+ eachOfImplementation(coll, wrapAsync(iteratee), callback);
};
function doParallel(fn) {
return function (obj, iteratee, callback) {
- return fn(eachOf, obj, wrapAsync$1(iteratee), callback);
+ return fn(eachOf, obj, wrapAsync(iteratee), callback);
};
}
@@ -1098,7 +1114,7 @@ function _asyncMap(eachfn, arr, iteratee, callback) {
arr = arr || [];
var results = [];
var counter = 0;
- var _iteratee = wrapAsync$1(iteratee);
+ var _iteratee = wrapAsync(iteratee);
eachfn(arr, function (value, _, callback) {
var index = counter++;
@@ -1186,7 +1202,7 @@ var applyEach = applyEach$1(map);
function doParallelLimit(fn) {
return function (obj, limit, iteratee, callback) {
- return fn(_eachOfLimit(limit), obj, wrapAsync$1(iteratee), callback);
+ return fn(_eachOfLimit(limit), obj, wrapAsync(iteratee), callback);
};
}
@@ -1253,56 +1269,6 @@ var mapSeries = doLimit(mapLimit, 1);
var applyEachSeries = applyEach$1(mapSeries);
/**
- * Creates a continuation function with some arguments already applied.
- *
- * Useful as a shorthand when combined with other control flow functions. Any
- * arguments passed to the returned function are added to the arguments
- * originally passed to apply.
- *
- * @name apply
- * @static
- * @memberOf module:Utils
- * @method
- * @category Util
- * @param {Function} function - The function you want to eventually apply all
- * arguments to. Invokes with (arguments...).
- * @param {...*} arguments... - Any number of arguments to automatically apply
- * when the continuation is called.
- * @example
- *
- * // using apply
- * async.parallel([
- * async.apply(fs.writeFile, 'testfile1', 'test1'),
- * async.apply(fs.writeFile, 'testfile2', 'test2')
- * ]);
- *
- *
- * // the same process without using apply
- * async.parallel([
- * function(callback) {
- * fs.writeFile('testfile1', 'test1', callback);
- * },
- * function(callback) {
- * fs.writeFile('testfile2', 'test2', callback);
- * }
- * ]);
- *
- * // It's possible to pass any number of additional arguments when calling the
- * // continuation:
- *
- * node> var fn = async.apply(sys.puts, 'one');
- * node> fn('two', 'three');
- * one
- * two
- * three
- */
-var apply$2 = rest(function (fn, args) {
- return rest(function (callArgs) {
- return fn.apply(null, args.concat(callArgs));
- });
-});
-
-/**
* A specialized version of `_.forEach` for arrays without support for
* iteratee shorthands.
*
@@ -1570,7 +1536,10 @@ var auto = function (tasks, concurrency, callback) {
arrayEach(dependencies, function (dependencyName) {
if (!tasks[dependencyName]) {
- throw new Error('async.auto task `' + key + '` has a non-existent dependency `' + dependencyName + '` in ' + dependencies.join(', '));
+ throw new Error('async.auto task `' + key +
+ '` has a non-existent dependency `' +
+ dependencyName + '` in ' +
+ dependencies.join(', '));
}
addListener(dependencyName, function () {
remainingDependencies--;
@@ -1594,10 +1563,11 @@ var auto = function (tasks, concurrency, callback) {
if (readyTasks.length === 0 && runningTasks === 0) {
return callback(null, results);
}
- while (readyTasks.length && runningTasks < concurrency) {
+ while(readyTasks.length && runningTasks < concurrency) {
var run = readyTasks.shift();
run();
}
+
}
function addListener(taskName, fn) {
@@ -1617,32 +1587,33 @@ var auto = function (tasks, concurrency, callback) {
processQueue();
}
+
function runTask(key, task) {
if (hasError) return;
- var taskCallback = onlyOnce(rest(function (err, args) {
+ var taskCallback = onlyOnce(function(err, result) {
runningTasks--;
- if (args.length <= 1) {
- args = args[0];
+ if (arguments.length > 2) {
+ result = slice(arguments, 1);
}
if (err) {
var safeResults = {};
- baseForOwn(results, function (val, rkey) {
+ baseForOwn(results, function(val, rkey) {
safeResults[rkey] = val;
});
- safeResults[key] = args;
+ safeResults[key] = result;
hasError = true;
listeners = Object.create(null);
callback(err, safeResults);
} else {
- results[key] = args;
+ results[key] = result;
taskComplete(key);
}
- }));
+ });
runningTasks++;
- var taskFn = wrapAsync$1(task[task.length - 1]);
+ var taskFn = wrapAsync(task[task.length - 1]);
if (task.length > 1) {
taskFn(results, taskCallback);
} else {
@@ -1667,7 +1638,9 @@ var auto = function (tasks, concurrency, callback) {
}
if (counter !== numTasks) {
- throw new Error('async.auto cannot execute tasks due to a recursive dependency');
+ throw new Error(
+ 'async.auto cannot execute tasks due to a recursive dependency'
+ );
}
}
@@ -1849,15 +1822,17 @@ function asciiToArray(string) {
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff';
-var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23';
-var rsComboSymbolsRange = '\\u20d0-\\u20f0';
+var rsComboMarksRange = '\\u0300-\\u036f';
+var reComboHalfMarksRange = '\\ufe20-\\ufe2f';
+var rsComboSymbolsRange = '\\u20d0-\\u20ff';
+var rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;
var rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
+var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
/**
* Checks if `string` contains Unicode symbols.
@@ -1872,13 +1847,15 @@ function hasUnicode(string) {
/** Used to compose unicode character classes. */
var rsAstralRange$1 = '\\ud800-\\udfff';
-var rsComboMarksRange$1 = '\\u0300-\\u036f\\ufe20-\\ufe23';
-var rsComboSymbolsRange$1 = '\\u20d0-\\u20f0';
+var rsComboMarksRange$1 = '\\u0300-\\u036f';
+var reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f';
+var rsComboSymbolsRange$1 = '\\u20d0-\\u20ff';
+var rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1;
var rsVarRange$1 = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange$1 + ']';
-var rsCombo = '[' + rsComboMarksRange$1 + rsComboSymbolsRange$1 + ']';
+var rsCombo = '[' + rsComboRange$1 + ']';
var rsFitz = '\\ud83c[\\udffb-\\udfff]';
var rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')';
var rsNonAstral = '[^' + rsAstralRange$1 + ']';
@@ -1995,7 +1972,7 @@ function parseParams(func) {
func = func.toString().replace(STRIP_COMMENTS, '');
func = func.match(FN_ARGS)[2].replace(' ', '');
func = func ? func.split(FN_ARG_SPLIT) : [];
- func = func.map(function (arg) {
+ func = func.map(function (arg){
return trim(arg.replace(FN_ARG, ''));
});
return func;
@@ -2089,7 +2066,9 @@ function autoInject(tasks, callback) {
baseForOwn(tasks, function (taskFn, key) {
var params;
var fnIsAsync = isAsync(taskFn);
- var hasNoDeps = !fnIsAsync && taskFn.length === 1 || fnIsAsync && taskFn.length === 0;
+ var hasNoDeps =
+ (!fnIsAsync && taskFn.length === 1) ||
+ (fnIsAsync && taskFn.length === 0);
if (isArray(taskFn)) {
params = taskFn.slice(0, -1);
@@ -2116,40 +2095,13 @@ function autoInject(tasks, callback) {
return results[name];
});
newArgs.push(taskCb);
- wrapAsync$1(taskFn).apply(null, newArgs);
+ wrapAsync(taskFn).apply(null, newArgs);
}
});
auto(newTasks, callback);
}
-var hasSetImmediate = typeof setImmediate === 'function' && setImmediate;
-var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';
-
-function fallback(fn) {
- setTimeout(fn, 0);
-}
-
-function wrap(defer) {
- return rest(function (fn, args) {
- defer(function () {
- fn.apply(null, args);
- });
- });
-}
-
-var _defer;
-
-if (hasSetImmediate) {
- _defer = setImmediate;
-} else if (hasNextTick) {
- _defer = process.nextTick;
-} else {
- _defer = fallback;
-}
-
-var setImmediate$1 = wrap(_defer);
-
// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation
// used for queues. This implementation assumes that the node provided by the user can be modified
// to adjust the next and last properties. We implement only the minimal functionality
@@ -2164,60 +2116,93 @@ function setInitial(dll, node) {
dll.head = dll.tail = node;
}
-DLL.prototype.removeLink = function (node) {
- if (node.prev) node.prev.next = node.next;else this.head = node.next;
- if (node.next) node.next.prev = node.prev;else this.tail = node.prev;
+DLL.prototype.removeLink = function(node) {
+ if (node.prev) node.prev.next = node.next;
+ else this.head = node.next;
+ if (node.next) node.next.prev = node.prev;
+ else this.tail = node.prev;
node.prev = node.next = null;
this.length -= 1;
return node;
};
-DLL.prototype.empty = DLL;
+DLL.prototype.empty = function () {
+ while(this.head) this.shift();
+ return this;
+};
-DLL.prototype.insertAfter = function (node, newNode) {
+DLL.prototype.insertAfter = function(node, newNode) {
newNode.prev = node;
newNode.next = node.next;
- if (node.next) node.next.prev = newNode;else this.tail = newNode;
+ if (node.next) node.next.prev = newNode;
+ else this.tail = newNode;
node.next = newNode;
this.length += 1;
};
-DLL.prototype.insertBefore = function (node, newNode) {
+DLL.prototype.insertBefore = function(node, newNode) {
newNode.prev = node.prev;
newNode.next = node;
- if (node.prev) node.prev.next = newNode;else this.head = newNode;
+ if (node.prev) node.prev.next = newNode;
+ else this.head = newNode;
node.prev = newNode;
this.length += 1;
};
-DLL.prototype.unshift = function (node) {
- if (this.head) this.insertBefore(this.head, node);else setInitial(this, node);
+DLL.prototype.unshift = function(node) {
+ if (this.head) this.insertBefore(this.head, node);
+ else setInitial(this, node);
};
-DLL.prototype.push = function (node) {
- if (this.tail) this.insertAfter(this.tail, node);else setInitial(this, node);
+DLL.prototype.push = function(node) {
+ if (this.tail) this.insertAfter(this.tail, node);
+ else setInitial(this, node);
};
-DLL.prototype.shift = function () {
+DLL.prototype.shift = function() {
return this.head && this.removeLink(this.head);
};
-DLL.prototype.pop = function () {
+DLL.prototype.pop = function() {
return this.tail && this.removeLink(this.tail);
};
+DLL.prototype.toArray = function () {
+ var arr = Array(this.length);
+ var curr = this.head;
+ for(var idx = 0; idx < this.length; idx++) {
+ arr[idx] = curr.data;
+ curr = curr.next;
+ }
+ return arr;
+};
+
+DLL.prototype.remove = function (testFn) {
+ var curr = this.head;
+ while(!!curr) {
+ var next = curr.next;
+ if (testFn(curr)) {
+ this.removeLink(curr);
+ }
+ curr = next;
+ }
+ return this;
+};
+
function queue(worker, concurrency, payload) {
if (concurrency == null) {
concurrency = 1;
- } else if (concurrency === 0) {
+ }
+ else if(concurrency === 0) {
throw new Error('Concurrency must not be zero');
}
- var _worker = wrapAsync$1(worker);
+ var _worker = wrapAsync(worker);
var numRunning = 0;
var workersList = [];
+ var processingScheduled = false;
function _insert(data, insertAtFront, callback) {
if (callback != null && typeof callback !== 'function') {
throw new Error('task callback must be a function');
@@ -2228,7 +2213,7 @@ function queue(worker, concurrency, payload) {
}
if (data.length === 0 && q.idle()) {
// call drain immediately if there are no tasks
- return setImmediate$1(function () {
+ return setImmediate$1(function() {
q.drain();
});
}
@@ -2245,28 +2230,38 @@ function queue(worker, concurrency, payload) {
q._tasks.push(item);
}
}
- setImmediate$1(q.process);
+
+ if (!processingScheduled) {
+ processingScheduled = true;
+ setImmediate$1(function() {
+ processingScheduled = false;
+ q.process();
+ });
+ }
}
function _next(tasks) {
- return rest(function (args) {
+ return function(err){
numRunning -= 1;
for (var i = 0, l = tasks.length; i < l; i++) {
var task = tasks[i];
+
var index = baseIndexOf(workersList, task, 0);
- if (index >= 0) {
- workersList.splice(index);
+ if (index === 0) {
+ workersList.shift();
+ } else if (index > 0) {
+ workersList.splice(index, 1);
}
- task.callback.apply(task, args);
+ task.callback.apply(task, arguments);
- if (args[0] != null) {
- q.error(args[0], task.data);
+ if (err != null) {
+ q.error(err, task.data);
}
}
- if (numRunning <= q.concurrency - q.buffer) {
+ if (numRunning <= (q.concurrency - q.buffer) ) {
q.unsaturated();
}
@@ -2274,7 +2269,7 @@ function queue(worker, concurrency, payload) {
q.drain();
}
q.process();
- });
+ };
}
var isProcessing = false;
@@ -2283,7 +2278,7 @@ function queue(worker, concurrency, payload) {
concurrency: concurrency,
payload: payload,
saturated: noop,
- unsaturated: noop,
+ unsaturated:noop,
buffer: concurrency / 4,
empty: noop,
drain: noop,
@@ -2300,6 +2295,9 @@ function queue(worker, concurrency, payload) {
unshift: function (data, callback) {
_insert(data, true, callback);
},
+ remove: function (testFn) {
+ q._tasks.remove(testFn);
+ },
process: function () {
// Avoid trying to start too many processing operations. This can occur
// when callbacks resolve synchronously (#1267).
@@ -2307,22 +2305,22 @@ function queue(worker, concurrency, payload) {
return;
}
isProcessing = true;
- while (!q.paused && numRunning < q.concurrency && q._tasks.length) {
- var tasks = [],
- data = [];
+ while(!q.paused && numRunning < q.concurrency && q._tasks.length){
+ var tasks = [], data = [];
var l = q._tasks.length;
if (q.payload) l = Math.min(l, q.payload);
for (var i = 0; i < l; i++) {
var node = q._tasks.shift();
tasks.push(node);
+ workersList.push(node);
data.push(node.data);
}
+ numRunning += 1;
+
if (q._tasks.length === 0) {
q.empty();
}
- numRunning += 1;
- workersList.push(tasks[0]);
if (numRunning === q.concurrency) {
q.saturated();
@@ -2342,16 +2340,14 @@ function queue(worker, concurrency, payload) {
workersList: function () {
return workersList;
},
- idle: function () {
+ idle: function() {
return q._tasks.length + numRunning === 0;
},
pause: function () {
q.paused = true;
},
resume: function () {
- if (q.paused === false) {
- return;
- }
+ if (q.paused === false) { return; }
q.paused = false;
setImmediate$1(q.process);
}
@@ -2437,7 +2433,7 @@ function queue(worker, concurrency, payload) {
* });
*/
function cargo(worker, payload) {
- return queue(worker, 1, payload);
+ return queue(worker, 1, payload);
}
/**
@@ -2501,13 +2497,13 @@ var eachOfSeries = doLimit(eachOfLimit, 1);
*/
function reduce(coll, memo, iteratee, callback) {
callback = once(callback || noop);
- var _iteratee = wrapAsync$1(iteratee);
- eachOfSeries(coll, function (x, i, callback) {
- _iteratee(memo, x, function (err, v) {
+ var _iteratee = wrapAsync(iteratee);
+ eachOfSeries(coll, function(x, i, callback) {
+ _iteratee(memo, x, function(err, v) {
memo = v;
callback(err);
});
- }, function (err) {
+ }, function(err) {
callback(err, memo);
});
}
@@ -2550,9 +2546,10 @@ function reduce(coll, memo, iteratee, callback) {
* });
* });
*/
-var seq$1 = rest(function seq(functions) {
- var _functions = arrayMap(functions, wrapAsync$1);
- return rest(function (args) {
+function seq(/*...functions*/) {
+ var _functions = arrayMap(arguments, wrapAsync);
+ return function(/*...args*/) {
+ var args = slice(arguments);
var that = this;
var cb = args[args.length - 1];
@@ -2562,15 +2559,17 @@ var seq$1 = rest(function seq(functions) {
cb = noop;
}
- reduce(_functions, args, function (newargs, fn, cb) {
- fn.apply(that, newargs.concat(rest(function (err, nextargs) {
+ reduce(_functions, args, function(newargs, fn, cb) {
+ fn.apply(that, newargs.concat(function(err/*, ...nextargs*/) {
+ var nextargs = slice(arguments, 1);
cb(err, nextargs);
- })));
- }, function (err, results) {
+ }));
+ },
+ function(err, results) {
cb.apply(that, [err].concat(results));
});
- });
-});
+ };
+}
/**
* Creates a function which is a composition of the passed asynchronous
@@ -2607,21 +2606,49 @@ var seq$1 = rest(function seq(functions) {
* // result now equals 15
* });
*/
-var compose = rest(function (args) {
- return seq$1.apply(null, args.reverse());
-});
+var compose = function(/*...args*/) {
+ return seq.apply(null, slice(arguments).reverse());
+};
-function concat$1(eachfn, arr, fn, callback) {
- var result = [];
- eachfn(arr, function (x, index, cb) {
- fn(x, function (err, y) {
- result = result.concat(y || []);
- cb(err);
+var _concat = Array.prototype.concat;
+
+/**
+ * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.
+ *
+ * @name concatLimit
+ * @static
+ * @memberOf module:Collections
+ * @method
+ * @see [async.concat]{@link module:Collections.concat}
+ * @category Collection
+ * @param {Array|Iterable|Object} coll - A collection to iterate over.
+ * @param {number} limit - The maximum number of async operations at a time.
+ * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,
+ * which should use an array as its result. Invoked with (item, callback).
+ * @param {Function} [callback] - A callback which is called after all the
+ * `iteratee` functions have finished, or an error occurs. Results is an array
+ * containing the concatenated results of the `iteratee` function. Invoked with
+ * (err, results).
+ */
+var concatLimit = function(coll, limit, iteratee, callback) {
+ callback = callback || noop;
+ var _iteratee = wrapAsync(iteratee);
+ mapLimit(coll, limit, function(val, callback) {
+ _iteratee(val, function(err /*, ...args*/) {
+ if (err) return callback(err);
+ return callback(null, slice(arguments, 1));
});
- }, function (err) {
- callback(err, result);
+ }, function(err, mapResults) {
+ var result = [];
+ for (var i = 0; i < mapResults.length; i++) {
+ if (mapResults[i]) {
+ result = _concat.apply(result, mapResults[i]);
+ }
+ }
+
+ return callback(err, result);
});
-}
+};
/**
* Applies `iteratee` to each item in `coll`, concatenating the results. Returns
@@ -2648,13 +2675,7 @@ function concat$1(eachfn, arr, fn, callback) {
* // files is now a list of filenames that exist in the 3 directories
* });
*/
-var concat = doParallel(concat$1);
-
-function doSeries(fn) {
- return function (obj, iteratee, callback) {
- return fn(eachOfSeries, obj, wrapAsync$1(iteratee), callback);
- };
-}
+var concat = doLimit(concatLimit, Infinity);
/**
* The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.
@@ -2674,7 +2695,7 @@ function doSeries(fn) {
* containing the concatenated results of the `iteratee` function. Invoked with
* (err, results).
*/
-var concatSeries = doSeries(concat$1);
+var concatSeries = doLimit(concatLimit, 1);
/**
* Returns a function that when called, calls-back with the values provided.
@@ -2718,20 +2739,42 @@ var concatSeries = doSeries(concat$1);
* //...
* }, callback);
*/
-var constant = rest(function (values) {
+var constant = function(/*...values*/) {
+ var values = slice(arguments);
var args = [null].concat(values);
- return initialParams(function (ignoredArgs, callback) {
+ return function (/*...ignoredArgs, callback*/) {
+ var callback = arguments[arguments.length - 1];
return callback.apply(this, args);
- });
-});
+ };
+};
+
+/**
+ * This method returns the first argument it receives.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Util
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ *
+ * console.log(_.identity(object) === object);
+ * // => true
+ */
+function identity(value) {
+ return value;
+}
function _createTester(check, getResult) {
- return function (eachfn, arr, iteratee, cb) {
+ return function(eachfn, arr, iteratee, cb) {
cb = cb || noop;
var testPassed = false;
var testResult;
- eachfn(arr, function (value, _, callback) {
- iteratee(value, function (err, result) {
+ eachfn(arr, function(value, _, callback) {
+ iteratee(value, function(err, result) {
if (err) {
callback(err);
} else if (check(result) && !testResult) {
@@ -2742,7 +2785,7 @@ function _createTester(check, getResult) {
callback();
}
});
- }, function (err) {
+ }, function(err) {
if (err) {
cb(err);
} else {
@@ -2840,8 +2883,10 @@ var detectLimit = doParallelLimit(_createTester(identity, _findGetResult));
var detectSeries = doLimit(detectLimit, 1);
function consoleFunc(name) {
- return rest(function (fn, args) {
- wrapAsync$1(fn).apply(null, args.concat(rest(function (err, args) {
+ return function (fn/*, ...args*/) {
+ var args = slice(arguments, 1);
+ args.push(function (err/*, ...args*/) {
+ var args = slice(arguments, 1);
if (typeof console === 'object') {
if (err) {
if (console.error) {
@@ -2853,8 +2898,9 @@ function consoleFunc(name) {
});
}
}
- })));
- });
+ });
+ wrapAsync(fn).apply(null, args);
+ };
}
/**
@@ -2910,14 +2956,15 @@ var dir = consoleFunc('dir');
*/
function doDuring(fn, test, callback) {
callback = onlyOnce(callback || noop);
- var _fn = wrapAsync$1(fn);
- var _test = wrapAsync$1(test);
+ var _fn = wrapAsync(fn);
+ var _test = wrapAsync(test);
- var next = rest(function (err, args) {
+ function next(err/*, ...args*/) {
if (err) return callback(err);
+ var args = slice(arguments, 1);
args.push(check);
_test.apply(this, args);
- });
+ }
function check(err, truth) {
if (err) return callback(err);
@@ -2926,6 +2973,7 @@ function doDuring(fn, test, callback) {
}
check(null, true);
+
}
/**
@@ -2952,12 +3000,13 @@ function doDuring(fn, test, callback) {
*/
function doWhilst(iteratee, test, callback) {
callback = onlyOnce(callback || noop);
- var _iteratee = wrapAsync$1(iteratee);
- var next = rest(function (err, args) {
+ var _iteratee = wrapAsync(iteratee);
+ var next = function(err/*, ...args*/) {
if (err) return callback(err);
+ var args = slice(arguments, 1);
if (test.apply(this, args)) return _iteratee(next);
callback.apply(null, [null].concat(args));
- });
+ };
_iteratee(next);
}
@@ -2982,7 +3031,7 @@ function doWhilst(iteratee, test, callback) {
* callback. Invoked with (err, [results]);
*/
function doUntil(iteratee, test, callback) {
- doWhilst(iteratee, function () {
+ doWhilst(iteratee, function() {
return !test.apply(this, arguments);
}, callback);
}
@@ -3025,8 +3074,8 @@ function doUntil(iteratee, test, callback) {
*/
function during(test, fn, callback) {
callback = onlyOnce(callback || noop);
- var _fn = wrapAsync$1(fn);
- var _test = wrapAsync$1(test);
+ var _fn = wrapAsync(fn);
+ var _test = wrapAsync(test);
function next(err) {
if (err) return callback(err);
@@ -3106,7 +3155,7 @@ function _withoutIndex(iteratee) {
* });
*/
function eachLimit(coll, iteratee, callback) {
- eachOf(coll, _withoutIndex(wrapAsync$1(iteratee)), callback);
+ eachOf(coll, _withoutIndex(wrapAsync(iteratee)), callback);
}
/**
@@ -3130,7 +3179,7 @@ function eachLimit(coll, iteratee, callback) {
* `iteratee` functions have finished, or an error occurs. Invoked with (err).
*/
function eachLimit$1(coll, limit, iteratee, callback) {
- _eachOfLimit(limit)(coll, _withoutIndex(wrapAsync$1(iteratee)), callback);
+ _eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);
}
/**
@@ -3323,7 +3372,7 @@ function filterGeneric(eachfn, coll, iteratee, callback) {
callback(err);
} else {
if (v) {
- results.push({ index: index, value: x });
+ results.push({index: index, value: x});
}
callback();
}
@@ -3341,7 +3390,7 @@ function filterGeneric(eachfn, coll, iteratee, callback) {
function _filter(eachfn, coll, iteratee, callback) {
var filter = isArrayLike(coll) ? filterArray : filterGeneric;
- filter(eachfn, coll, wrapAsync$1(iteratee), callback || noop);
+ filter(eachfn, coll, wrapAsync(iteratee), callback || noop);
}
/**
@@ -3444,7 +3493,7 @@ var filterSeries = doLimit(filterLimit, 1);
*/
function forever(fn, errback) {
var done = onlyOnce(errback || noop);
- var task = wrapAsync$1(ensureAsync(fn));
+ var task = wrapAsync(ensureAsync(fn));
function next(err) {
if (err) return done(err);
@@ -3472,15 +3521,15 @@ function forever(fn, errback) {
* functions have finished, or an error occurs. Result is an `Object` whoses
* properties are arrays of values which returned the corresponding key.
*/
-var groupByLimit = function (coll, limit, iteratee, callback) {
+var groupByLimit = function(coll, limit, iteratee, callback) {
callback = callback || noop;
- var _iteratee = wrapAsync$1(iteratee);
- mapLimit(coll, limit, function (val, callback) {
- _iteratee(val, function (err, key) {
+ var _iteratee = wrapAsync(iteratee);
+ mapLimit(coll, limit, function(val, callback) {
+ _iteratee(val, function(err, key) {
if (err) return callback(err);
- return callback(null, { key: key, val: val });
+ return callback(null, {key: key, val: val});
});
- }, function (err, mapResults) {
+ }, function(err, mapResults) {
var result = {};
// from MDN, handle object having an `hasOwnProperty` prop
var hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -3614,8 +3663,8 @@ var log = consoleFunc('log');
function mapValuesLimit(obj, limit, iteratee, callback) {
callback = once(callback || noop);
var newObj = {};
- var _iteratee = wrapAsync$1(iteratee);
- eachOfLimit(obj, limit, function (val, key, next) {
+ var _iteratee = wrapAsync(iteratee);
+ eachOfLimit(obj, limit, function(val, key, next) {
_iteratee(val, key, function (err, result) {
if (err) return next(err);
newObj[key] = result;
@@ -3739,25 +3788,26 @@ function memoize(fn, hasher) {
var memo = Object.create(null);
var queues = Object.create(null);
hasher = hasher || identity;
- var _fn = wrapAsync$1(fn);
+ var _fn = wrapAsync(fn);
var memoized = initialParams(function memoized(args, callback) {
var key = hasher.apply(null, args);
if (has(memo, key)) {
- setImmediate$1(function () {
+ setImmediate$1(function() {
callback.apply(null, memo[key]);
});
} else if (has(queues, key)) {
queues[key].push(callback);
} else {
queues[key] = [callback];
- _fn.apply(null, args.concat(rest(function (args) {
+ _fn.apply(null, args.concat(function(/*args*/) {
+ var args = slice(arguments);
memo[key] = args;
var q = queues[key];
delete queues[key];
for (var i = 0, l = q.length; i < l; i++) {
q[i].apply(null, args);
}
- })));
+ }));
}
});
memoized.memo = memo;
@@ -3767,7 +3817,7 @@ function memoize(fn, hasher) {
/**
* Calls `callback` on a later loop around the event loop. In Node.js this just
- * calls `setImmediate`. In the browser it will use `setImmediate` if
+ * calls `process.nextTicl`. In the browser it will use `setImmediate` if
* available, otherwise `setTimeout(callback, 0)`, which means other higher
* priority events may precede the execution of `callback`.
*
@@ -3777,7 +3827,7 @@ function memoize(fn, hasher) {
* @static
* @memberOf module:Utils
* @method
- * @alias setImmediate
+ * @see [async.setImmediate]{@link module:Utils.setImmediate}
* @category Util
* @param {Function} callback - The function to call on a later loop around
* the event loop. Invoked with (args...).
@@ -3813,13 +3863,13 @@ function _parallel(eachfn, tasks, callback) {
var results = isArrayLike(tasks) ? [] : {};
eachfn(tasks, function (task, key, callback) {
- wrapAsync$1(task)(rest(function (err, args) {
- if (args.length <= 1) {
- args = args[0];
+ wrapAsync(task)(function (err, result) {
+ if (arguments.length > 2) {
+ result = slice(arguments, 1);
}
- results[key] = args;
+ results[key] = result;
callback(err);
- }));
+ });
}, function (err) {
callback(err, results);
});
@@ -3895,7 +3945,7 @@ function _parallel(eachfn, tasks, callback) {
* });
*/
function parallelLimit(tasks, callback) {
- _parallel(eachOf, tasks, callback);
+ _parallel(eachOf, tasks, callback);
}
/**
@@ -3918,7 +3968,7 @@ function parallelLimit(tasks, callback) {
* Invoked with (err, results).
*/
function parallelLimit$1(tasks, limit, callback) {
- _parallel(_eachOfLimit(limit), tasks, callback);
+ _parallel(_eachOfLimit(limit), tasks, callback);
}
/**
@@ -3944,6 +3994,12 @@ function parallelLimit$1(tasks, limit, callback) {
* task in the list. Invoke with `queue.push(task, [callback])`,
* @property {Function} unshift - add a new task to the front of the `queue`.
* Invoke with `queue.unshift(task, [callback])`.
+ * @property {Function} remove - remove items from the queue that match a test
+ * function. The test function will be passed an object with a `data` property,
+ * and a `priority` property, if this is a
+ * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.
+ * Invoked with `queue.remove(testFn)`, where `testFn` is of the form
+ * `function ({data, priority}) {}` and returns a Boolean.
* @property {Function} saturated - a callback that is called when the number of
* running workers hits the `concurrency` limit, and further tasks will be
* queued.
@@ -3965,7 +4021,8 @@ function parallelLimit$1(tasks, limit, callback) {
* @property {Function} resume - a function that resumes the processing of
* queued tasks when the queue is paused. Invoke with `queue.resume()`.
* @property {Function} kill - a function that removes the `drain` callback and
- * empties remaining tasks from the queue forcing it to go idle. Invoke with `queue.kill()`.
+ * empties remaining tasks from the queue forcing it to go idle. No more tasks
+ * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.
*/
/**
@@ -4020,10 +4077,10 @@ function parallelLimit$1(tasks, limit, callback) {
* });
*/
var queue$1 = function (worker, concurrency) {
- var _worker = wrapAsync$1(worker);
- return queue(function (items, cb) {
- _worker(items[0], cb);
- }, concurrency, 1);
+ var _worker = wrapAsync(worker);
+ return queue(function (items, cb) {
+ _worker(items[0], cb);
+ }, concurrency, 1);
};
/**
@@ -4049,12 +4106,12 @@ var queue$1 = function (worker, concurrency) {
* array of `tasks` is given, all tasks will be assigned the same priority.
* * The `unshift` method was removed.
*/
-var priorityQueue = function (worker, concurrency) {
+var priorityQueue = function(worker, concurrency) {
// Start with a normal queue
var q = queue$1(worker, concurrency);
// Override push to accept second parameter representing priority
- q.push = function (data, priority, callback) {
+ q.push = function(data, priority, callback) {
if (callback == null) callback = noop;
if (typeof callback !== 'function') {
throw new Error('task callback must be a function');
@@ -4065,7 +4122,7 @@ var priorityQueue = function (worker, concurrency) {
}
if (data.length === 0) {
// call drain immediately if there are no tasks
- return setImmediate$1(function () {
+ return setImmediate$1(function() {
q.drain();
});
}
@@ -4139,12 +4196,10 @@ function race(tasks, callback) {
if (!isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));
if (!tasks.length) return callback();
for (var i = 0, l = tasks.length; i < l; i++) {
- wrapAsync$1(tasks[i])(callback);
+ wrapAsync(tasks[i])(callback);
}
}
-var slice = Array.prototype.slice;
-
/**
* Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.
*
@@ -4167,9 +4222,9 @@ var slice = Array.prototype.slice;
* `iteratee` functions have finished. Result is the reduced value. Invoked with
* (err, result).
*/
-function reduceRight(array, memo, iteratee, callback) {
- var reversed = slice.call(array).reverse();
- reduce(reversed, memo, iteratee, callback);
+function reduceRight (array, memo, iteratee, callback) {
+ var reversed = slice(array).reverse();
+ reduce(reversed, memo, iteratee, callback);
}
/**
@@ -4212,67 +4267,26 @@ function reduceRight(array, memo, iteratee, callback) {
* });
*/
function reflect(fn) {
- var _fn = wrapAsync$1(fn);
+ var _fn = wrapAsync(fn);
return initialParams(function reflectOn(args, reflectCallback) {
- args.push(rest(function callback(err, cbArgs) {
- if (err) {
- reflectCallback(null, {
- error: err
- });
+ args.push(function callback(error, cbArg) {
+ if (error) {
+ reflectCallback(null, { error: error });
} else {
- var value = null;
- if (cbArgs.length === 1) {
- value = cbArgs[0];
- } else if (cbArgs.length > 1) {
- value = cbArgs;
+ var value;
+ if (arguments.length <= 2) {
+ value = cbArg;
+ } else {
+ value = slice(arguments, 1);
}
- reflectCallback(null, {
- value: value
- });
+ reflectCallback(null, { value: value });
}
- }));
+ });
return _fn.apply(this, args);
});
}
-function reject$1(eachfn, arr, iteratee, callback) {
- _filter(eachfn, arr, function (value, cb) {
- iteratee(value, function (err, v) {
- cb(err, !v);
- });
- }, callback);
-}
-
-/**
- * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.
- *
- * @name reject
- * @static
- * @memberOf module:Collections
- * @method
- * @see [async.filter]{@link module:Collections.filter}
- * @category Collection
- * @param {Array|Iterable|Object} coll - A collection to iterate over.
- * @param {Function} iteratee - An async truth test to apply to each item in
- * `coll`.
- * The should complete with a boolean value as its `result`.
- * Invoked with (item, callback).
- * @param {Function} [callback] - A callback which is called after all the
- * `iteratee` functions have finished. Invoked with (err, results).
- * @example
- *
- * async.reject(['file1','file2','file3'], function(filePath, callback) {
- * fs.access(filePath, function(err) {
- * callback(null, !err)
- * });
- * }, function(err, results) {
- * // results now equals an array of missing files
- * createFiles(results);
- * });
- */
-var reject = doParallel(reject$1);
-
/**
* A helper function that wraps an array or an object of functions with `reflect`.
*
@@ -4346,13 +4360,50 @@ function reflectAll(tasks) {
results = arrayMap(tasks, reflect);
} else {
results = {};
- baseForOwn(tasks, function (task, key) {
+ baseForOwn(tasks, function(task, key) {
results[key] = reflect.call(this, task);
});
}
return results;
}
+function reject$1(eachfn, arr, iteratee, callback) {
+ _filter(eachfn, arr, function(value, cb) {
+ iteratee(value, function(err, v) {
+ cb(err, !v);
+ });
+ }, callback);
+}
+
+/**
+ * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.
+ *
+ * @name reject
+ * @static
+ * @memberOf module:Collections
+ * @method
+ * @see [async.filter]{@link module:Collections.filter}
+ * @category Collection
+ * @param {Array|Iterable|Object} coll - A collection to iterate over.
+ * @param {Function} iteratee - An async truth test to apply to each item in
+ * `coll`.
+ * The should complete with a boolean value as its `result`.
+ * Invoked with (item, callback).
+ * @param {Function} [callback] - A callback which is called after all the
+ * `iteratee` functions have finished. Invoked with (err, results).
+ * @example
+ *
+ * async.reject(['file1','file2','file3'], function(filePath, callback) {
+ * fs.access(filePath, function(err) {
+ * callback(null, !err)
+ * });
+ * }, function(err, results) {
+ * // results now equals an array of missing files
+ * createFiles(results);
+ * });
+ */
+var reject = doParallel(reject$1);
+
/**
* The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a
* time.
@@ -4492,8 +4543,8 @@ function constant$1(value) {
* // do something with the result
* });
*
- * // It can also be embedded within other control flow functions to retry
- * // individual methods that are not as reliable, like this:
+ * // to retry individual methods that are not as reliable within other
+ * // control flow functions, use the `retryable` wrapper:
* async.auto({
* users: api.getUsers.bind(api),
* payments: async.retryable(3, api.getPayments.bind(api))
@@ -4515,7 +4566,9 @@ function retry(opts, task, callback) {
if (typeof t === 'object') {
acc.times = +t.times || DEFAULT_TIMES;
- acc.intervalFunc = typeof t.interval === 'function' ? t.interval : constant$1(+t.interval || DEFAULT_INTERVAL);
+ acc.intervalFunc = typeof t.interval === 'function' ?
+ t.interval :
+ constant$1(+t.interval || DEFAULT_INTERVAL);
acc.errorFilter = t.errorFilter;
} else if (typeof t === 'number' || typeof t === 'string') {
@@ -4537,12 +4590,14 @@ function retry(opts, task, callback) {
throw new Error("Invalid arguments for async.retry");
}
- var _task = wrapAsync$1(task);
+ var _task = wrapAsync(task);
var attempt = 1;
function retryAttempt() {
- _task(function (err) {
- if (err && attempt++ < options.times && (typeof options.errorFilter != 'function' || options.errorFilter(err))) {
+ _task(function(err) {
+ if (err && attempt++ < options.times &&
+ (typeof options.errorFilter != 'function' ||
+ options.errorFilter(err))) {
setTimeout(retryAttempt, options.intervalFunc(attempt));
} else {
callback.apply(null, arguments);
@@ -4586,13 +4641,15 @@ var retryable = function (opts, task) {
task = opts;
opts = null;
}
- var _task = wrapAsync$1(task);
+ var _task = wrapAsync(task);
return initialParams(function (args, callback) {
function taskFn(cb) {
_task.apply(null, args.concat(cb));
}
- if (opts) retry(opts, taskFn, callback);else retry(taskFn, callback);
+ if (opts) retry(opts, taskFn, callback);
+ else retry(taskFn, callback);
+
});
};
@@ -4661,7 +4718,7 @@ var retryable = function (opts, task) {
* });
*/
function series(tasks, callback) {
- _parallel(eachOfSeries, tasks, callback);
+ _parallel(eachOfSeries, tasks, callback);
}
/**
@@ -4788,12 +4845,12 @@ var someSeries = doLimit(someLimit, 1);
* // result callback
* });
*/
-function sortBy(coll, iteratee, callback) {
- var _iteratee = wrapAsync$1(iteratee);
+function sortBy (coll, iteratee, callback) {
+ var _iteratee = wrapAsync(iteratee);
map(coll, function (x, callback) {
_iteratee(x, function (err, criteria) {
if (err) return callback(err);
- callback(null, { value: x, criteria: criteria });
+ callback(null, {value: x, criteria: criteria});
});
}, function (err, results) {
if (err) return callback(err);
@@ -4801,8 +4858,7 @@ function sortBy(coll, iteratee, callback) {
});
function comparator(left, right) {
- var a = left.criteria,
- b = right.criteria;
+ var a = left.criteria, b = right.criteria;
return a < b ? -1 : a > b ? 1 : 0;
}
}
@@ -4849,40 +4905,39 @@ function sortBy(coll, iteratee, callback) {
* });
*/
function timeout(asyncFn, milliseconds, info) {
- var originalCallback, timer;
- var timedOut = false;
+ var fn = wrapAsync(asyncFn);
- function injectedCallback() {
- if (!timedOut) {
- originalCallback.apply(null, arguments);
- clearTimeout(timer);
- }
- }
-
- function timeoutCallback() {
- var name = asyncFn.name || 'anonymous';
- var error = new Error('Callback function "' + name + '" timed out.');
- error.code = 'ETIMEDOUT';
- if (info) {
- error.info = info;
+ return initialParams(function (args, callback) {
+ var timedOut = false;
+ var timer;
+
+ function timeoutCallback() {
+ var name = asyncFn.name || 'anonymous';
+ var error = new Error('Callback function "' + name + '" timed out.');
+ error.code = 'ETIMEDOUT';
+ if (info) {
+ error.info = info;
+ }
+ timedOut = true;
+ callback(error);
}
- timedOut = true;
- originalCallback(error);
- }
- var fn = wrapAsync$1(asyncFn);
+ args.push(function () {
+ if (!timedOut) {
+ callback.apply(null, arguments);
+ clearTimeout(timer);
+ }
+ });
- return initialParams(function (args, origCallback) {
- originalCallback = origCallback;
// setup timer and call original function
timer = setTimeout(timeoutCallback, milliseconds);
- fn.apply(null, args.concat(injectedCallback));
+ fn.apply(null, args);
});
}
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil;
-var nativeMax$1 = Math.max;
+var nativeMax = Math.max;
/**
* The base implementation of `_.range` and `_.rangeRight` which doesn't
@@ -4897,7 +4952,7 @@ var nativeMax$1 = Math.max;
*/
function baseRange(start, end, step, fromRight) {
var index = -1,
- length = nativeMax$1(nativeCeil((end - start) / (step || 1)), 0),
+ length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
result = Array(length);
while (length--) {
@@ -4924,8 +4979,8 @@ function baseRange(start, end, step, fromRight) {
* @param {Function} callback - see [async.map]{@link module:Collections.map}.
*/
function timeLimit(count, limit, iteratee, callback) {
- var _iteratee = wrapAsync$1(iteratee);
- mapLimit(baseRange(0, count, 1), limit, _iteratee, callback);
+ var _iteratee = wrapAsync(iteratee);
+ mapLimit(baseRange(0, count, 1), limit, _iteratee, callback);
}
/**
@@ -5020,23 +5075,79 @@ var timesSeries = doLimit(timeLimit, 1);
* // result is equal to {a: 2, b: 4, c: 6}
* })
*/
-function transform(coll, accumulator, iteratee, callback) {
+function transform (coll, accumulator, iteratee, callback) {
if (arguments.length <= 3) {
callback = iteratee;
iteratee = accumulator;
accumulator = isArray(coll) ? [] : {};
}
callback = once(callback || noop);
- var _iteratee = wrapAsync$1(iteratee);
+ var _iteratee = wrapAsync(iteratee);
- eachOf(coll, function (v, k, cb) {
+ eachOf(coll, function(v, k, cb) {
_iteratee(accumulator, v, k, cb);
- }, function (err) {
+ }, function(err) {
callback(err, accumulator);
});
}
/**
+ * It runs each task in series but stops whenever any of the functions were
+ * successful. If one of the tasks were successful, the `callback` will be
+ * passed the result of the successful task. If all tasks fail, the callback
+ * will be passed the error and result (if any) of the final attempt.
+ *
+ * @name tryEach
+ * @static
+ * @memberOf module:ControlFlow
+ * @method
+ * @category Control Flow
+ * @param {Array|Iterable|Object} tasks - A collection containing functions to
+ * run, each function is passed a `callback(err, result)` it must call on
+ * completion with an error `err` (which can be `null`) and an optional `result`
+ * value.
+ * @param {Function} [callback] - An optional callback which is called when one
+ * of the tasks has succeeded, or all have failed. It receives the `err` and
+ * `result` arguments of the last attempt at completing the `task`. Invoked with
+ * (err, results).
+ * @example
+ * async.tryEach([
+ * function getDataFromFirstWebsite(callback) {
+ * // Try getting the data from the first website
+ * callback(err, data);
+ * },
+ * function getDataFromSecondWebsite(callback) {
+ * // First website failed,
+ * // Try getting the data from the backup website
+ * callback(err, data);
+ * }
+ * ],
+ * // optional callback
+ * function(err, results) {
+ * Now do something with the data.
+ * });
+ *
+ */
+function tryEach(tasks, callback) {
+ var error = null;
+ var result;
+ callback = callback || noop;
+ eachSeries(tasks, function(task, callback) {
+ wrapAsync(task)(function (err, res/*, ...args*/) {
+ if (arguments.length > 2) {
+ result = slice(arguments, 1);
+ } else {
+ result = res;
+ }
+ error = err;
+ callback(!err);
+ });
+ }, function () {
+ callback(error, result);
+ });
+}
+
+/**
* Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,
* unmemoized form. Handy for testing.
*
@@ -5091,13 +5202,14 @@ function unmemoize(fn) {
*/
function whilst(test, iteratee, callback) {
callback = onlyOnce(callback || noop);
- var _iteratee = wrapAsync$1(iteratee);
+ var _iteratee = wrapAsync(iteratee);
if (!test()) return callback(null);
- var next = rest(function (err, args) {
+ var next = function(err/*, ...args*/) {
if (err) return callback(err);
if (test()) return _iteratee(next);
+ var args = slice(arguments, 1);
callback.apply(null, [null].concat(args));
- });
+ };
_iteratee(next);
}
@@ -5124,7 +5236,7 @@ function whilst(test, iteratee, callback) {
* callback. Invoked with (err, [results]);
*/
function until(test, iteratee, callback) {
- whilst(function () {
+ whilst(function() {
return !test.apply(this, arguments);
}, iteratee, callback);
}
@@ -5186,30 +5298,25 @@ function until(test, iteratee, callback) {
* callback(null, 'done');
* }
*/
-var waterfall = function (tasks, callback) {
+var waterfall = function(tasks, callback) {
callback = once(callback || noop);
if (!isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));
if (!tasks.length) return callback();
var taskIndex = 0;
function nextTask(args) {
- if (taskIndex === tasks.length) {
- return callback.apply(null, [null].concat(args));
- }
-
- var taskCallback = onlyOnce(rest(function (err, args) {
- if (err) {
- return callback.apply(null, [err].concat(args));
- }
- nextTask(args);
- }));
-
- args.push(taskCallback);
-
- var task = wrapAsync$1(tasks[taskIndex++]);
+ var task = wrapAsync(tasks[taskIndex++]);
+ args.push(onlyOnce(next));
task.apply(null, args);
}
+ function next(err/*, ...args*/) {
+ if (err || taskIndex === tasks.length) {
+ return callback.apply(null, arguments);
+ }
+ nextTask(slice(arguments, 1));
+ }
+
nextTask([]);
};
@@ -5261,6 +5368,7 @@ var waterfall = function (tasks, callback) {
* @see AsyncFunction
*/
+
/**
* A collection of `async` functions for manipulating collections, such as
* arrays and objects.
@@ -5278,110 +5386,120 @@ var waterfall = function (tasks, callback) {
*/
var index = {
- applyEach: applyEach,
- applyEachSeries: applyEachSeries,
- apply: apply$2,
- asyncify: asyncify,
- auto: auto,
- autoInject: autoInject,
- cargo: cargo,
- compose: compose,
- concat: concat,
- concatSeries: concatSeries,
- constant: constant,
- detect: detect,
- detectLimit: detectLimit,
- detectSeries: detectSeries,
- dir: dir,
- doDuring: doDuring,
- doUntil: doUntil,
- doWhilst: doWhilst,
- during: during,
- each: eachLimit,
- eachLimit: eachLimit$1,
- eachOf: eachOf,
- eachOfLimit: eachOfLimit,
- eachOfSeries: eachOfSeries,
- eachSeries: eachSeries,
- ensureAsync: ensureAsync,
- every: every,
- everyLimit: everyLimit,
- everySeries: everySeries,
- filter: filter,
- filterLimit: filterLimit,
- filterSeries: filterSeries,
- forever: forever,
- groupBy: groupBy,
- groupByLimit: groupByLimit,
- groupBySeries: groupBySeries,
- log: log,
- map: map,
- mapLimit: mapLimit,
- mapSeries: mapSeries,
- mapValues: mapValues,
- mapValuesLimit: mapValuesLimit,
- mapValuesSeries: mapValuesSeries,
- memoize: memoize,
- nextTick: nextTick,
- parallel: parallelLimit,
- parallelLimit: parallelLimit$1,
- priorityQueue: priorityQueue,
- queue: queue$1,
- race: race,
- reduce: reduce,
- reduceRight: reduceRight,
- reflect: reflect,
- reflectAll: reflectAll,
- reject: reject,
- rejectLimit: rejectLimit,
- rejectSeries: rejectSeries,
- retry: retry,
- retryable: retryable,
- seq: seq$1,
- series: series,
- setImmediate: setImmediate$1,
- some: some,
- someLimit: someLimit,
- someSeries: someSeries,
- sortBy: sortBy,
- timeout: timeout,
- times: times,
- timesLimit: timeLimit,
- timesSeries: timesSeries,
- transform: transform,
- unmemoize: unmemoize,
- until: until,
- waterfall: waterfall,
- whilst: whilst,
-
- // aliases
- all: every,
- any: some,
- forEach: eachLimit,
- forEachSeries: eachSeries,
- forEachLimit: eachLimit$1,
- forEachOf: eachOf,
- forEachOfSeries: eachOfSeries,
- forEachOfLimit: eachOfLimit,
- inject: reduce,
- foldl: reduce,
- foldr: reduceRight,
- select: filter,
- selectLimit: filterLimit,
- selectSeries: filterSeries,
- wrapSync: asyncify
+ apply: apply,
+ applyEach: applyEach,
+ applyEachSeries: applyEachSeries,
+ asyncify: asyncify,
+ auto: auto,
+ autoInject: autoInject,
+ cargo: cargo,
+ compose: compose,
+ concat: concat,
+ concatLimit: concatLimit,
+ concatSeries: concatSeries,
+ constant: constant,
+ detect: detect,
+ detectLimit: detectLimit,
+ detectSeries: detectSeries,
+ dir: dir,
+ doDuring: doDuring,
+ doUntil: doUntil,
+ doWhilst: doWhilst,
+ during: during,
+ each: eachLimit,
+ eachLimit: eachLimit$1,
+ eachOf: eachOf,
+ eachOfLimit: eachOfLimit,
+ eachOfSeries: eachOfSeries,
+ eachSeries: eachSeries,
+ ensureAsync: ensureAsync,
+ every: every,
+ everyLimit: everyLimit,
+ everySeries: everySeries,
+ filter: filter,
+ filterLimit: filterLimit,
+ filterSeries: filterSeries,
+ forever: forever,
+ groupBy: groupBy,
+ groupByLimit: groupByLimit,
+ groupBySeries: groupBySeries,
+ log: log,
+ map: map,
+ mapLimit: mapLimit,
+ mapSeries: mapSeries,
+ mapValues: mapValues,
+ mapValuesLimit: mapValuesLimit,
+ mapValuesSeries: mapValuesSeries,
+ memoize: memoize,
+ nextTick: nextTick,
+ parallel: parallelLimit,
+ parallelLimit: parallelLimit$1,
+ priorityQueue: priorityQueue,
+ queue: queue$1,
+ race: race,
+ reduce: reduce,
+ reduceRight: reduceRight,
+ reflect: reflect,
+ reflectAll: reflectAll,
+ reject: reject,
+ rejectLimit: rejectLimit,
+ rejectSeries: rejectSeries,
+ retry: retry,
+ retryable: retryable,
+ seq: seq,
+ series: series,
+ setImmediate: setImmediate$1,
+ some: some,
+ someLimit: someLimit,
+ someSeries: someSeries,
+ sortBy: sortBy,
+ timeout: timeout,
+ times: times,
+ timesLimit: timeLimit,
+ timesSeries: timesSeries,
+ transform: transform,
+ tryEach: tryEach,
+ unmemoize: unmemoize,
+ until: until,
+ waterfall: waterfall,
+ whilst: whilst,
+
+ // aliases
+ all: every,
+ allLimit: everyLimit,
+ allSeries: everySeries,
+ any: some,
+ anyLimit: someLimit,
+ anySeries: someSeries,
+ find: detect,
+ findLimit: detectLimit,
+ findSeries: detectSeries,
+ forEach: eachLimit,
+ forEachSeries: eachSeries,
+ forEachLimit: eachLimit$1,
+ forEachOf: eachOf,
+ forEachOfSeries: eachOfSeries,
+ forEachOfLimit: eachOfLimit,
+ inject: reduce,
+ foldl: reduce,
+ foldr: reduceRight,
+ select: filter,
+ selectLimit: filterLimit,
+ selectSeries: filterSeries,
+ wrapSync: asyncify
};
exports['default'] = index;
+exports.apply = apply;
exports.applyEach = applyEach;
exports.applyEachSeries = applyEachSeries;
-exports.apply = apply$2;
exports.asyncify = asyncify;
exports.auto = auto;
exports.autoInject = autoInject;
exports.cargo = cargo;
exports.compose = compose;
exports.concat = concat;
+exports.concatLimit = concatLimit;
exports.concatSeries = concatSeries;
exports.constant = constant;
exports.detect = detect;
@@ -5432,7 +5550,7 @@ exports.rejectLimit = rejectLimit;
exports.rejectSeries = rejectSeries;
exports.retry = retry;
exports.retryable = retryable;
-exports.seq = seq$1;
+exports.seq = seq;
exports.series = series;
exports.setImmediate = setImmediate$1;
exports.some = some;
@@ -5444,6 +5562,7 @@ exports.times = times;
exports.timesLimit = timeLimit;
exports.timesSeries = timesSeries;
exports.transform = transform;
+exports.tryEach = tryEach;
exports.unmemoize = unmemoize;
exports.until = until;
exports.waterfall = waterfall;
diff --git a/dist/async.min.js b/dist/async.min.js
index afd1022..7b8e87c 100644
--- a/dist/async.min.js
+++ b/dist/async.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.async=e.async||{})}(this,function(exports){"use strict";function apply(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}function overRest$1(e,t,r){return t=nativeMax(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=nativeMax(n.length-t,0),a=Array(i);++o<i;)a[o]=n[t+o];o=-1;for(var s=Array(t+1);++o<t;)s[o]=n[o];return s[t]=r(a),apply(e,this,s)}}function identity(e){return e}function rest(e,t){return overRest$1(e,t,identity)}function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function asyncify(e){return initialParams(function(t,r){var n;try{n=e.apply(this,t)}catch(e){return r(e)}isObject(n)&&"function"==typeof n.then?n.then(function(e){r(null,e)},function(e){r(e.message?e:new Error(e))}):r(null,n)})}function supportsAsync(){var supported;try{supported=isAsync(eval("(async function () {})"))}catch(e){supported=!1}return supported}function isAsync(e){return supportsSymbol&&"AsyncFunction"===e[Symbol.toStringTag]}function wrapAsync(e){return isAsync(e)?asyncify(e):e}function applyEach$1(e){return rest(function(t,r){var n=initialParams(function(r,n){var o=this;return e(t,function(e,t){wrapAsync$1(e).apply(o,r.concat(t))},n)});return r.length?n.apply(this,r):n})}function getRawTag(e){var t=hasOwnProperty.call(e,symToStringTag$1),r=e[symToStringTag$1];try{e[symToStringTag$1]=void 0;var n=!0}catch(e){}var o=nativeObjectToString.call(e);return n&&(t?e[symToStringTag$1]=r:delete e[symToStringTag$1]),o}function objectToString(e){return nativeObjectToString$1.call(e)}function baseGetTag(e){return null==e?void 0===e?undefinedTag:nullTag:(e=Object(e),symToStringTag&&symToStringTag in e?getRawTag(e):objectToString(e))}function isFunction(e){if(!isObject(e))return!1;var t=baseGetTag(e);return t==funcTag||t==genTag||t==asyncTag||t==proxyTag}function isLength(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=MAX_SAFE_INTEGER}function isArrayLike(e){return null!=e&&isLength(e.length)&&!isFunction(e)}function noop(){}function once(e){return function(){if(null!==e){var t=e;e=null,t.apply(this,arguments)}}}function baseTimes(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}function isObjectLike(e){return null!=e&&"object"==typeof e}function baseIsArguments(e){return isObjectLike(e)&&baseGetTag(e)==argsTag}function stubFalse(){return!1}function isIndex(e,t){return t=null==t?MAX_SAFE_INTEGER$1:t,!!t&&("number"==typeof e||reIsUint.test(e))&&e>-1&&e%1==0&&e<t}function baseIsTypedArray(e){return isObjectLike(e)&&isLength(e.length)&&!!typedArrayTags[baseGetTag(e)]}function baseUnary(e){return function(t){return e(t)}}function arrayLikeKeys(e,t){var r=isArray(e),n=!r&&isArguments(e),o=!r&&!n&&isBuffer(e),i=!r&&!n&&!o&&isTypedArray(e),a=r||n||o||i,s=a?baseTimes(e.length,String):[],c=s.length;for(var u in e)!t&&!hasOwnProperty$1.call(e,u)||a&&("length"==u||o&&("offset"==u||"parent"==u)||i&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||isIndex(u,c))||s.push(u);return s}function isPrototype(e){var t=e&&e.constructor,r="function"==typeof t&&t.prototype||objectProto$5;return e===r}function overArg(e,t){return function(r){return e(t(r))}}function baseKeys(e){if(!isPrototype(e))return nativeKeys(e);var t=[];for(var r in Object(e))hasOwnProperty$3.call(e,r)&&"constructor"!=r&&t.push(r);return t}function keys(e){return isArrayLike(e)?arrayLikeKeys(e):baseKeys(e)}function createArrayIterator(e){var t=-1,r=e.length;return function(){return++t<r?{value:e[t],key:t}:null}}function createES2015Iterator(e){var t=-1;return function(){var r=e.next();return r.done?null:(t++,{value:r.value,key:t})}}function createObjectIterator(e){var t=keys(e),r=-1,n=t.length;return function(){var o=t[++r];return r<n?{value:e[o],key:o}:null}}function iterator(e){if(isArrayLike(e))return createArrayIterator(e);var t=getIterator(e);return t?createES2015Iterator(t):createObjectIterator(e)}function onlyOnce(e){return function(){if(null===e)throw new Error("Callback was already called.");var t=e;e=null,t.apply(this,arguments)}}function _eachOfLimit(e){return function(t,r,n){function o(e,t){if(c-=1,e)s=!0,n(e);else{if(t===breakLoop||s&&c<=0)return s=!0,n(null);i()}}function i(){for(;c<e&&!s;){var t=a();if(null===t)return s=!0,void(c<=0&&n(null));c+=1,r(t.value,t.key,onlyOnce(o))}}if(n=once(n||noop),e<=0||!t)return n(null);var a=iterator(t),s=!1,c=0;i()}}function eachOfLimit(e,t,r,n){_eachOfLimit(t)(e,wrapAsync$1(r),n)}function doLimit(e,t){return function(r,n,o){return e(r,t,n,o)}}function eachOfArrayLike(e,t,r){function n(e,t){e?r(e):++i!==a&&t!==breakLoop||r(null)}r=once(r||noop);var o=0,i=0,a=e.length;for(0===a&&r(null);o<a;o++)t(e[o],o,onlyOnce(n))}function doParallel(e){return function(t,r,n){return e(eachOf,t,wrapAsync$1(r),n)}}function _asyncMap(e,t,r,n){n=n||noop,t=t||[];var o=[],i=0,a=wrapAsync$1(r);e(t,function(e,t,r){var n=i++;a(e,function(e,t){o[n]=t,r(e)})},function(e){n(e,o)})}function doParallelLimit(e){return function(t,r,n,o){return e(_eachOfLimit(r),t,wrapAsync$1(n),o)}}function arrayEach(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}function createBaseFor(e){return function(t,r,n){for(var o=-1,i=Object(t),a=n(t),s=a.length;s--;){var c=a[e?s:++o];if(r(i[c],c,i)===!1)break}return t}}function baseForOwn(e,t){return e&&baseFor(e,t,keys)}function baseFindIndex(e,t,r,n){for(var o=e.length,i=r+(n?1:-1);n?i--:++i<o;)if(t(e[i],i,e))return i;return-1}function baseIsNaN(e){return e!==e}function strictIndexOf(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1}function baseIndexOf(e,t,r){return t===t?strictIndexOf(e,t,r):baseFindIndex(e,baseIsNaN,r)}function arrayMap(e,t){for(var r=-1,n=null==e?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o}function isSymbol(e){return"symbol"==typeof e||isObjectLike(e)&&baseGetTag(e)==symbolTag}function baseToString(e){if("string"==typeof e)return e;if(isArray(e))return arrayMap(e,baseToString)+"";if(isSymbol(e))return symbolToString?symbolToString.call(e):"";var t=e+"";return"0"==t&&1/e==-INFINITY?"-0":t}function baseSlice(e,t,r){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),r=r>o?o:r,r<0&&(r+=o),o=t>r?0:r-t>>>0,t>>>=0;for(var i=Array(o);++n<o;)i[n]=e[n+t];return i}function castSlice(e,t,r){var n=e.length;return r=void 0===r?n:r,!t&&r>=n?e:baseSlice(e,t,r)}function charsEndIndex(e,t){for(var r=e.length;r--&&baseIndexOf(t,e[r],0)>-1;);return r}function charsStartIndex(e,t){for(var r=-1,n=e.length;++r<n&&baseIndexOf(t,e[r],0)>-1;);return r}function asciiToArray(e){return e.split("")}function hasUnicode(e){return reHasUnicode.test(e)}function unicodeToArray(e){return e.match(reUnicode)||[]}function stringToArray(e){return hasUnicode(e)?unicodeToArray(e):asciiToArray(e)}function toString(e){return null==e?"":baseToString(e)}function trim(e,t,r){if(e=toString(e),e&&(r||void 0===t))return e.replace(reTrim,"");if(!e||!(t=baseToString(t)))return e;var n=stringToArray(e),o=stringToArray(t),i=charsStartIndex(n,o),a=charsEndIndex(n,o)+1;return castSlice(n,i,a).join("")}function parseParams(e){return e=e.toString().replace(STRIP_COMMENTS,""),e=e.match(FN_ARGS)[2].replace(" ",""),e=e?e.split(FN_ARG_SPLIT):[],e=e.map(function(e){return trim(e.replace(FN_ARG,""))})}function autoInject(e,t){var r={};baseForOwn(e,function(e,t){function n(t,r){var n=arrayMap(o,function(e){return t[e]});n.push(r),wrapAsync$1(e).apply(null,n)}var o,i=isAsync(e),a=!i&&1===e.length||i&&0===e.length;if(isArray(e))o=e.slice(0,-1),e=e[e.length-1],r[t]=o.concat(o.length>0?n:e);else if(a)r[t]=e;else{if(o=parseParams(e),0===e.length&&!i&&0===o.length)throw new Error("autoInject task functions require explicit parameters.");i||o.pop(),r[t]=o.concat(n)}}),auto(r,t)}function fallback(e){setTimeout(e,0)}function wrap(e){return rest(function(t,r){e(function(){t.apply(null,r)})})}function DLL(){this.head=this.tail=null,this.length=0}function setInitial(e,t){e.length=1,e.head=e.tail=t}function queue(e,t,r){function n(e,t,r){if(null!=r&&"function"!=typeof r)throw new Error("task callback must be a function");if(u.started=!0,isArray(e)||(e=[e]),0===e.length&&u.idle())return setImmediate$1(function(){u.drain()});for(var n=0,o=e.length;n<o;n++){var i={data:e[n],callback:r||noop};t?u._tasks.unshift(i):u._tasks.push(i)}setImmediate$1(u.process)}function o(e){return rest(function(t){a-=1;for(var r=0,n=e.length;r<n;r++){var o=e[r],i=baseIndexOf(s,o,0);i>=0&&s.splice(i),o.callback.apply(o,t),null!=t[0]&&u.error(t[0],o.data)}a<=u.concurrency-u.buffer&&u.unsaturated(),u.idle()&&u.drain(),u.process()})}if(null==t)t=1;else if(0===t)throw new Error("Concurrency must not be zero");var i=wrapAsync$1(e),a=0,s=[],c=!1,u={_tasks:new DLL,concurrency:t,payload:r,saturated:noop,unsaturated:noop,buffer:t/4,empty:noop,drain:noop,error:noop,started:!1,paused:!1,push:function(e,t){n(e,!1,t)},kill:function(){u.drain=noop,u._tasks.empty()},unshift:function(e,t){n(e,!0,t)},process:function(){if(!c){for(c=!0;!u.paused&&a<u.concurrency&&u._tasks.length;){var e=[],t=[],r=u._tasks.length;u.payload&&(r=Math.min(r,u.payload));for(var n=0;n<r;n++){var l=u._tasks.shift();e.push(l),t.push(l.data)}0===u._tasks.length&&u.empty(),a+=1,s.push(e[0]),a===u.concurrency&&u.saturated();var f=onlyOnce(o(e));i(t,f)}c=!1}},length:function(){return u._tasks.length},running:function(){return a},workersList:function(){return s},idle:function(){return u._tasks.length+a===0},pause:function(){u.paused=!0},resume:function(){u.paused!==!1&&(u.paused=!1,setImmediate$1(u.process))}};return u}function cargo(e,t){return queue(e,1,t)}function reduce(e,t,r,n){n=once(n||noop);var o=wrapAsync$1(r);eachOfSeries(e,function(e,r,n){o(t,e,function(e,r){t=r,n(e)})},function(e){n(e,t)})}function concat$1(e,t,r,n){var o=[];e(t,function(e,t,n){r(e,function(e,t){o=o.concat(t||[]),n(e)})},function(e){n(e,o)})}function doSeries(e){return function(t,r,n){return e(eachOfSeries,t,wrapAsync$1(r),n)}}function _createTester(e,t){return function(r,n,o,i){i=i||noop;var a,s=!1;r(n,function(r,n,i){o(r,function(n,o){n?i(n):e(o)&&!a?(s=!0,a=t(!0,r),i(null,breakLoop)):i()})},function(e){e?i(e):i(null,s?a:t(!1))})}}function _findGetResult(e,t){return t}function consoleFunc(e){return rest(function(t,r){wrapAsync$1(t).apply(null,r.concat(rest(function(t,r){"object"==typeof console&&(t?console.error&&console.error(t):console[e]&&arrayEach(r,function(t){console[e](t)}))})))})}function doDuring(e,t,r){function n(e,t){return e?r(e):t?void o(a):r(null)}r=onlyOnce(r||noop);var o=wrapAsync$1(e),i=wrapAsync$1(t),a=rest(function(e,t){return e?r(e):(t.push(n),void i.apply(this,t))});n(null,!0)}function doWhilst(e,t,r){r=onlyOnce(r||noop);var n=wrapAsync$1(e),o=rest(function(e,i){return e?r(e):t.apply(this,i)?n(o):void r.apply(null,[null].concat(i))});n(o)}function doUntil(e,t,r){doWhilst(e,function(){return!t.apply(this,arguments)},r)}function during(e,t,r){function n(e){return e?r(e):void a(o)}function o(e,t){return e?r(e):t?void i(n):r(null)}r=onlyOnce(r||noop);var i=wrapAsync$1(t),a=wrapAsync$1(e);a(o)}function _withoutIndex(e){return function(t,r,n){return e(t,n)}}function eachLimit(e,t,r){eachOf(e,_withoutIndex(wrapAsync$1(t)),r)}function eachLimit$1(e,t,r,n){_eachOfLimit(t)(e,_withoutIndex(wrapAsync$1(r)),n)}function ensureAsync(e){return isAsync(e)?e:initialParams(function(t,r){var n=!0;t.push(function(){var e=arguments;n?setImmediate$1(function(){r.apply(null,e)}):r.apply(null,e)}),e.apply(this,t),n=!1})}function notId(e){return!e}function baseProperty(e){return function(t){return null==t?void 0:t[e]}}function filterArray(e,t,r,n){var o=new Array(t.length);e(t,function(e,t,n){r(e,function(e,r){o[t]=!!r,n(e)})},function(e){if(e)return n(e);for(var r=[],i=0;i<t.length;i++)o[i]&&r.push(t[i]);n(null,r)})}function filterGeneric(e,t,r,n){var o=[];e(t,function(e,t,n){r(e,function(r,i){r?n(r):(i&&o.push({index:t,value:e}),n())})},function(e){e?n(e):n(null,arrayMap(o.sort(function(e,t){return e.index-t.index}),baseProperty("value")))})}function _filter(e,t,r,n){var o=isArrayLike(t)?filterArray:filterGeneric;o(e,t,wrapAsync$1(r),n||noop)}function forever(e,t){function r(e){return e?n(e):void o(r)}var n=onlyOnce(t||noop),o=wrapAsync$1(ensureAsync(e));r()}function mapValuesLimit(e,t,r,n){n=once(n||noop);var o={},i=wrapAsync$1(r);eachOfLimit(e,t,function(e,t,r){i(e,t,function(e,n){return e?r(e):(o[t]=n,void r())})},function(e){n(e,o)})}function has(e,t){return t in e}function memoize(e,t){var r=Object.create(null),n=Object.create(null);t=t||identity;var o=wrapAsync$1(e),i=initialParams(function(e,i){var a=t.apply(null,e);has(r,a)?setImmediate$1(function(){i.apply(null,r[a])}):has(n,a)?n[a].push(i):(n[a]=[i],o.apply(null,e.concat(rest(function(e){r[a]=e;var t=n[a];delete n[a];for(var o=0,i=t.length;o<i;o++)t[o].apply(null,e)}))))});return i.memo=r,i.unmemoized=e,i}function _parallel(e,t,r){r=r||noop;var n=isArrayLike(t)?[]:{};e(t,function(e,t,r){wrapAsync$1(e)(rest(function(e,o){o.length<=1&&(o=o[0]),n[t]=o,r(e)}))},function(e){r(e,n)})}function parallelLimit(e,t){_parallel(eachOf,e,t)}function parallelLimit$1(e,t,r){_parallel(_eachOfLimit(t),e,r)}function race(e,t){if(t=once(t||noop),!isArray(e))return t(new TypeError("First argument to race must be an array of functions"));if(!e.length)return t();for(var r=0,n=e.length;r<n;r++)wrapAsync$1(e[r])(t)}function reduceRight(e,t,r,n){var o=slice.call(e).reverse();reduce(o,t,r,n)}function reflect(e){var t=wrapAsync$1(e);return initialParams(function(e,r){return e.push(rest(function(e,t){if(e)r(null,{error:e});else{var n=null;1===t.length?n=t[0]:t.length>1&&(n=t),r(null,{value:n})}})),t.apply(this,e)})}function reject$1(e,t,r,n){_filter(e,t,function(e,t){r(e,function(e,r){t(e,!r)})},n)}function reflectAll(e){var t;return isArray(e)?t=arrayMap(e,reflect):(t={},baseForOwn(e,function(e,r){t[r]=reflect.call(this,e)})),t}function constant$1(e){return function(){return e}}function retry(e,t,r){function n(e,t){if("object"==typeof t)e.times=+t.times||i,e.intervalFunc="function"==typeof t.interval?t.interval:constant$1(+t.interval||a),e.errorFilter=t.errorFilter;else{if("number"!=typeof t&&"string"!=typeof t)throw new Error("Invalid arguments for async.retry");e.times=+t||i}}function o(){c(function(e){e&&u++<s.times&&("function"!=typeof s.errorFilter||s.errorFilter(e))?setTimeout(o,s.intervalFunc(u)):r.apply(null,arguments)})}var i=5,a=0,s={times:i,intervalFunc:constant$1(a)};if(arguments.length<3&&"function"==typeof e?(r=t||noop,t=e):(n(s,e),r=r||noop),"function"!=typeof t)throw new Error("Invalid arguments for async.retry");var c=wrapAsync$1(t),u=1;o()}function series(e,t){_parallel(eachOfSeries,e,t)}function sortBy(e,t,r){function n(e,t){var r=e.criteria,n=t.criteria;return r<n?-1:r>n?1:0}var o=wrapAsync$1(t);map(e,function(e,t){o(e,function(r,n){return r?t(r):void t(null,{value:e,criteria:n})})},function(e,t){return e?r(e):void r(null,arrayMap(t.sort(n),baseProperty("value")))})}function timeout(e,t,r){function n(){s||(i.apply(null,arguments),clearTimeout(a))}function o(){var t=e.name||"anonymous",n=new Error('Callback function "'+t+'" timed out.');n.code="ETIMEDOUT",r&&(n.info=r),s=!0,i(n)}var i,a,s=!1,c=wrapAsync$1(e);return initialParams(function(e,r){i=r,a=setTimeout(o,t),c.apply(null,e.concat(n))})}function baseRange(e,t,r,n){for(var o=-1,i=nativeMax$1(nativeCeil((t-e)/(r||1)),0),a=Array(i);i--;)a[n?i:++o]=e,e+=r;return a}function timeLimit(e,t,r,n){var o=wrapAsync$1(r);mapLimit(baseRange(0,e,1),t,o,n)}function transform(e,t,r,n){arguments.length<=3&&(n=r,r=t,t=isArray(e)?[]:{}),n=once(n||noop);var o=wrapAsync$1(r);eachOf(e,function(e,r,n){o(t,e,r,n)},function(e){n(e,t)})}function unmemoize(e){return function(){return(e.unmemoized||e).apply(null,arguments)}}function whilst(e,t,r){r=onlyOnce(r||noop);var n=wrapAsync$1(t);if(!e())return r(null);var o=rest(function(t,i){return t?r(t):e()?n(o):void r.apply(null,[null].concat(i))});n(o)}function until(e,t,r){whilst(function(){return!e.apply(this,arguments)},t,r)}var nativeMax=Math.max,initialParams=function(e){return rest(function(t){var r=t.pop();e.call(this,t,r)})},supportsSymbol="function"==typeof Symbol,wrapAsync$1=supportsAsync()?wrapAsync:identity,freeGlobal="object"==typeof global&&global&&global.Object===Object&&global,freeSelf="object"==typeof self&&self&&self.Object===Object&&self,root=freeGlobal||freeSelf||Function("return this")(),Symbol$1=root.Symbol,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag$1=Symbol$1?Symbol$1.toStringTag:void 0,objectProto$1=Object.prototype,nativeObjectToString$1=objectProto$1.toString,nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag=Symbol$1?Symbol$1.toStringTag:void 0,asyncTag="[object AsyncFunction]",funcTag="[object Function]",genTag="[object GeneratorFunction]",proxyTag="[object Proxy]",MAX_SAFE_INTEGER=9007199254740991,breakLoop={},iteratorSymbol="function"==typeof Symbol&&Symbol.iterator,getIterator=function(e){return iteratorSymbol&&e[iteratorSymbol]&&e[iteratorSymbol]()},argsTag="[object Arguments]",objectProto$3=Object.prototype,hasOwnProperty$2=objectProto$3.hasOwnProperty,propertyIsEnumerable=objectProto$3.propertyIsEnumerable,isArguments=baseIsArguments(function(){return arguments}())?baseIsArguments:function(e){return isObjectLike(e)&&hasOwnProperty$2.call(e,"callee")&&!propertyIsEnumerable.call(e,"callee")},isArray=Array.isArray,freeExports="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule=freeExports&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports=freeModule&&freeModule.exports===freeExports,Buffer=moduleExports?root.Buffer:void 0,nativeIsBuffer=Buffer?Buffer.isBuffer:void 0,isBuffer=nativeIsBuffer||stubFalse,MAX_SAFE_INTEGER$1=9007199254740991,reIsUint=/^(?:0|[1-9]\d*)$/,argsTag$1="[object Arguments]",arrayTag="[object Array]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag$1="[object Function]",mapTag="[object Map]",numberTag="[object Number]",objectTag="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag$1]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dataViewTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag$1]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var freeExports$1="object"==typeof exports&&exports&&!exports.nodeType&&exports,freeModule$1=freeExports$1&&"object"==typeof module&&module&&!module.nodeType&&module,moduleExports$1=freeModule$1&&freeModule$1.exports===freeExports$1,freeProcess=moduleExports$1&&freeGlobal.process,nodeUtil=function(){try{return freeProcess&&freeProcess.binding("util")}catch(e){}}(),nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray,isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray,objectProto$2=Object.prototype,hasOwnProperty$1=objectProto$2.hasOwnProperty,objectProto$5=Object.prototype,nativeKeys=overArg(Object.keys,Object),objectProto$4=Object.prototype,hasOwnProperty$3=objectProto$4.hasOwnProperty,eachOfGeneric=doLimit(eachOfLimit,1/0),eachOf=function(e,t,r){var n=isArrayLike(e)?eachOfArrayLike:eachOfGeneric;n(e,wrapAsync$1(t),r)},map=doParallel(_asyncMap),applyEach=applyEach$1(map),mapLimit=doParallelLimit(_asyncMap),mapSeries=doLimit(mapLimit,1),applyEachSeries=applyEach$1(mapSeries),apply$2=rest(function(e,t){return rest(function(r){return e.apply(null,t.concat(r))})}),baseFor=createBaseFor(),auto=function(e,t,r){function n(e,t){g.push(function(){s(e,t)})}function o(){if(0===g.length&&0===y)return r(null,p);for(;g.length&&y<t;){var e=g.shift();e()}}function i(e,t){var r=d[e];r||(r=d[e]=[]),r.push(t)}function a(e){var t=d[e]||[];arrayEach(t,function(e){e()}),o()}function s(e,t){if(!m){var n=onlyOnce(rest(function(t,n){if(y--,n.length<=1&&(n=n[0]),t){var o={};baseForOwn(p,function(e,t){o[t]=e}),o[e]=n,m=!0,d=Object.create(null),r(t,o)}else p[e]=n,a(e)}));y++;var o=wrapAsync$1(t[t.length-1]);t.length>1?o(p,n):o(n)}}function c(){for(var e,t=0;h.length;)e=h.pop(),t++,arrayEach(u(e),function(e){0===--b[e]&&h.push(e)});if(t!==f)throw new Error("async.auto cannot execute tasks due to a recursive dependency")}function u(t){var r=[];return baseForOwn(e,function(e,n){isArray(e)&&baseIndexOf(e,t,0)>=0&&r.push(n)}),r}"function"==typeof t&&(r=t,t=null),r=once(r||noop);var l=keys(e),f=l.length;if(!f)return r(null);t||(t=f);var p={},y=0,m=!1,d=Object.create(null),g=[],h=[],b={};baseForOwn(e,function(t,r){if(!isArray(t))return n(r,[t]),void h.push(r);var o=t.slice(0,t.length-1),a=o.length;return 0===a?(n(r,t),void h.push(r)):(b[r]=a,void arrayEach(o,function(s){if(!e[s])throw new Error("async.auto task `"+r+"` has a non-existent dependency `"+s+"` in "+o.join(", "));i(s,function(){a--,0===a&&n(r,t)})}))}),c(),o()},symbolTag="[object Symbol]",INFINITY=1/0,symbolProto=Symbol$1?Symbol$1.prototype:void 0,symbolToString=symbolProto?symbolProto.toString:void 0,rsAstralRange="\\ud800-\\udfff",rsComboMarksRange="\\u0300-\\u036f\\ufe20-\\ufe23",rsComboSymbolsRange="\\u20d0-\\u20f0",rsVarRange="\\ufe0e\\ufe0f",rsZWJ="\\u200d",reHasUnicode=RegExp("["+rsZWJ+rsAstralRange+rsComboMarksRange+rsComboSymbolsRange+rsVarRange+"]"),rsAstralRange$1="\\ud800-\\udfff",rsComboMarksRange$1="\\u0300-\\u036f\\ufe20-\\ufe23",rsComboSymbolsRange$1="\\u20d0-\\u20f0",rsVarRange$1="\\ufe0e\\ufe0f",rsAstral="["+rsAstralRange$1+"]",rsCombo="["+rsComboMarksRange$1+rsComboSymbolsRange$1+"]",rsFitz="\\ud83c[\\udffb-\\udfff]",rsModifier="(?:"+rsCombo+"|"+rsFitz+")",rsNonAstral="[^"+rsAstralRange$1+"]",rsRegional="(?:\\ud83c[\\udde6-\\uddff]){2}",rsSurrPair="[\\ud800-\\udbff][\\udc00-\\udfff]",rsZWJ$1="\\u200d",reOptMod=rsModifier+"?",rsOptVar="["+rsVarRange$1+"]?",rsOptJoin="(?:"+rsZWJ$1+"(?:"+[rsNonAstral,rsRegional,rsSurrPair].join("|")+")"+rsOptVar+reOptMod+")*",rsSeq=rsOptVar+reOptMod+rsOptJoin,rsSymbol="(?:"+[rsNonAstral+rsCombo+"?",rsCombo,rsRegional,rsSurrPair,rsAstral].join("|")+")",reUnicode=RegExp(rsFitz+"(?="+rsFitz+")|"+rsSymbol+rsSeq,"g"),reTrim=/^\s+|\s+$/g,FN_ARGS=/^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m,FN_ARG_SPLIT=/,/,FN_ARG=/(=.+)?(\s*)$/,STRIP_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,hasSetImmediate="function"==typeof setImmediate&&setImmediate,hasNextTick="object"==typeof process&&"function"==typeof process.nextTick,_defer;_defer=hasSetImmediate?setImmediate:hasNextTick?process.nextTick:fallback;var setImmediate$1=wrap(_defer);DLL.prototype.removeLink=function(e){return e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev,e.prev=e.next=null,this.length-=1,e},DLL.prototype.empty=DLL,DLL.prototype.insertAfter=function(e,t){t.prev=e,t.next=e.next,e.next?e.next.prev=t:this.tail=t,e.next=t,this.length+=1},DLL.prototype.insertBefore=function(e,t){t.prev=e.prev,t.next=e,e.prev?e.prev.next=t:this.head=t,e.prev=t,this.length+=1},DLL.prototype.unshift=function(e){this.head?this.insertBefore(this.head,e):setInitial(this,e)},DLL.prototype.push=function(e){this.tail?this.insertAfter(this.tail,e):setInitial(this,e)},DLL.prototype.shift=function(){return this.head&&this.removeLink(this.head)},DLL.prototype.pop=function(){return this.tail&&this.removeLink(this.tail)};var eachOfSeries=doLimit(eachOfLimit,1),seq$1=rest(function(e){var t=arrayMap(e,wrapAsync$1);return rest(function(e){var r=this,n=e[e.length-1];"function"==typeof n?e.pop():n=noop,reduce(t,e,function(e,t,n){t.apply(r,e.concat(rest(function(e,t){n(e,t)})))},function(e,t){n.apply(r,[e].concat(t))})})}),compose=rest(function(e){return seq$1.apply(null,e.reverse())}),concat=doParallel(concat$1),concatSeries=doSeries(concat$1),constant=rest(function(e){var t=[null].concat(e);return initialParams(function(e,r){return r.apply(this,t)})}),detect=doParallel(_createTester(identity,_findGetResult)),detectLimit=doParallelLimit(_createTester(identity,_findGetResult)),detectSeries=doLimit(detectLimit,1),dir=consoleFunc("dir"),eachSeries=doLimit(eachLimit$1,1),every=doParallel(_createTester(notId,notId)),everyLimit=doParallelLimit(_createTester(notId,notId)),everySeries=doLimit(everyLimit,1),filter=doParallel(_filter),filterLimit=doParallelLimit(_filter),filterSeries=doLimit(filterLimit,1),groupByLimit=function(e,t,r,n){n=n||noop;var o=wrapAsync$1(r);mapLimit(e,t,function(e,t){o(e,function(r,n){return r?t(r):t(null,{key:n,val:e})})},function(e,t){for(var r={},o=Object.prototype.hasOwnProperty,i=0;i<t.length;i++)if(t[i]){var a=t[i].key,s=t[i].val;o.call(r,a)?r[a].push(s):r[a]=[s]}return n(e,r)})},groupBy=doLimit(groupByLimit,1/0),groupBySeries=doLimit(groupByLimit,1),log=consoleFunc("log"),mapValues=doLimit(mapValuesLimit,1/0),mapValuesSeries=doLimit(mapValuesLimit,1),_defer$1;_defer$1=hasNextTick?process.nextTick:hasSetImmediate?setImmediate:fallback;var nextTick=wrap(_defer$1),queue$1=function(e,t){var r=wrapAsync$1(e);return queue(function(e,t){r(e[0],t)},t,1)},priorityQueue=function(e,t){var r=queue$1(e,t);return r.push=function(e,t,n){if(null==n&&(n=noop),"function"!=typeof n)throw new Error("task callback must be a function");if(r.started=!0,isArray(e)||(e=[e]),0===e.length)return setImmediate$1(function(){r.drain()});t=t||0;for(var o=r._tasks.head;o&&t>=o.priority;)o=o.next;for(var i=0,a=e.length;i<a;i++){var s={data:e[i],priority:t,callback:n};o?r._tasks.insertBefore(o,s):r._tasks.push(s)}setImmediate$1(r.process)},delete r.unshift,r},slice=Array.prototype.slice,reject=doParallel(reject$1),rejectLimit=doParallelLimit(reject$1),rejectSeries=doLimit(rejectLimit,1),retryable=function(e,t){t||(t=e,e=null);var r=wrapAsync$1(t);return initialParams(function(t,n){function o(e){r.apply(null,t.concat(e))}e?retry(e,o,n):retry(o,n)})},some=doParallel(_createTester(Boolean,identity)),someLimit=doParallelLimit(_createTester(Boolean,identity)),someSeries=doLimit(someLimit,1),nativeCeil=Math.ceil,nativeMax$1=Math.max,times=doLimit(timeLimit,1/0),timesSeries=doLimit(timeLimit,1),waterfall=function(e,t){function r(o){if(n===e.length)return t.apply(null,[null].concat(o));var i=onlyOnce(rest(function(e,n){return e?t.apply(null,[e].concat(n)):void r(n)}));o.push(i);var a=wrapAsync$1(e[n++]);a.apply(null,o)}if(t=once(t||noop),!isArray(e))return t(new Error("First argument to waterfall must be an array of functions"));if(!e.length)return t();var n=0;r([])},index={applyEach:applyEach,applyEachSeries:applyEachSeries,apply:apply$2,asyncify:asyncify,auto:auto,autoInject:autoInject,cargo:cargo,compose:compose,concat:concat,concatSeries:concatSeries,constant:constant,detect:detect,detectLimit:detectLimit,detectSeries:detectSeries,dir:dir,doDuring:doDuring,doUntil:doUntil,doWhilst:doWhilst,during:during,each:eachLimit,eachLimit:eachLimit$1,eachOf:eachOf,eachOfLimit:eachOfLimit,eachOfSeries:eachOfSeries,eachSeries:eachSeries,ensureAsync:ensureAsync,every:every,everyLimit:everyLimit,everySeries:everySeries,filter:filter,filterLimit:filterLimit,filterSeries:filterSeries,forever:forever,groupBy:groupBy,groupByLimit:groupByLimit,groupBySeries:groupBySeries,log:log,map:map,mapLimit:mapLimit,mapSeries:mapSeries,mapValues:mapValues,mapValuesLimit:mapValuesLimit,mapValuesSeries:mapValuesSeries,memoize:memoize,nextTick:nextTick,parallel:parallelLimit,parallelLimit:parallelLimit$1,priorityQueue:priorityQueue,queue:queue$1,race:race,reduce:reduce,reduceRight:reduceRight,reflect:reflect,reflectAll:reflectAll,reject:reject,rejectLimit:rejectLimit,rejectSeries:rejectSeries,retry:retry,retryable:retryable,seq:seq$1,series:series,setImmediate:setImmediate$1,some:some,someLimit:someLimit,someSeries:someSeries,sortBy:sortBy,timeout:timeout,times:times,timesLimit:timeLimit,timesSeries:timesSeries,transform:transform,unmemoize:unmemoize,until:until,waterfall:waterfall,whilst:whilst,all:every,any:some,forEach:eachLimit,forEachSeries:eachSeries,forEachLimit:eachLimit$1,forEachOf:eachOf,forEachOfSeries:eachOfSeries,forEachOfLimit:eachOfLimit,inject:reduce,foldl:reduce,foldr:reduceRight,select:filter,selectLimit:filterLimit,selectSeries:filterSeries,wrapSync:asyncify};exports.default=index,exports.applyEach=applyEach,exports.applyEachSeries=applyEachSeries,exports.apply=apply$2,exports.asyncify=asyncify,exports.auto=auto,exports.autoInject=autoInject,exports.cargo=cargo,exports.compose=compose,exports.concat=concat,exports.concatSeries=concatSeries,exports.constant=constant,exports.detect=detect,exports.detectLimit=detectLimit,exports.detectSeries=detectSeries,exports.dir=dir,exports.doDuring=doDuring,exports.doUntil=doUntil,exports.doWhilst=doWhilst,exports.during=during,exports.each=eachLimit,exports.eachLimit=eachLimit$1,exports.eachOf=eachOf,exports.eachOfLimit=eachOfLimit,exports.eachOfSeries=eachOfSeries,exports.eachSeries=eachSeries,exports.ensureAsync=ensureAsync,exports.every=every,exports.everyLimit=everyLimit,exports.everySeries=everySeries,exports.filter=filter,exports.filterLimit=filterLimit,exports.filterSeries=filterSeries,exports.forever=forever,exports.groupBy=groupBy,exports.groupByLimit=groupByLimit,exports.groupBySeries=groupBySeries,exports.log=log,exports.map=map,exports.mapLimit=mapLimit,exports.mapSeries=mapSeries,exports.mapValues=mapValues,exports.mapValuesLimit=mapValuesLimit,exports.mapValuesSeries=mapValuesSeries,exports.memoize=memoize,exports.nextTick=nextTick,exports.parallel=parallelLimit,exports.parallelLimit=parallelLimit$1,exports.priorityQueue=priorityQueue,exports.queue=queue$1,exports.race=race,exports.reduce=reduce,exports.reduceRight=reduceRight,exports.reflect=reflect,exports.reflectAll=reflectAll,exports.reject=reject,exports.rejectLimit=rejectLimit,exports.rejectSeries=rejectSeries,exports.retry=retry,exports.retryable=retryable,exports.seq=seq$1,exports.series=series,exports.setImmediate=setImmediate$1,exports.some=some,exports.someLimit=someLimit,exports.someSeries=someSeries,exports.sortBy=sortBy,exports.timeout=timeout,exports.times=times,exports.timesLimit=timeLimit,exports.timesSeries=timesSeries,exports.transform=transform,exports.unmemoize=unmemoize,exports.until=until,exports.waterfall=waterfall,exports.whilst=whilst,exports.all=every,exports.allLimit=everyLimit,exports.allSeries=everySeries,exports.any=some,exports.anyLimit=someLimit,exports.anySeries=someSeries,exports.find=detect,exports.findLimit=detectLimit,exports.findSeries=detectSeries,exports.forEach=eachLimit,exports.forEachSeries=eachSeries,exports.forEachLimit=eachLimit$1,exports.forEachOf=eachOf,exports.forEachOfSeries=eachOfSeries,exports.forEachOfLimit=eachOfLimit,exports.inject=reduce,exports.foldl=reduce,exports.foldr=reduceRight,exports.select=filter,exports.selectLimit=filterLimit,exports.selectSeries=filterSeries,exports.wrapSync=asyncify,Object.defineProperty(exports,"__esModule",{value:!0})});
+!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.async=n.async||{})}(this,function(n){"use strict";function t(n,t){t|=0;for(var e=Math.max(n.length-t,0),r=Array(e),u=0;u<e;u++)r[u]=n[t+u];return r}function e(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function r(n){setTimeout(n,0)}function u(n){return function(e){var r=t(arguments,1);n(function(){e.apply(null,r)})}}function i(n){return ct(function(t,r){var u;try{u=n.apply(this,t)}catch(n){return r(n)}e(u)&&"function"==typeof u.then?u.then(function(n){o(r,null,n)},function(n){o(r,n.message?n:new Error(n))}):r(null,u)})}function o(n,t,e){try{n(t,e)}catch(n){lt(c,n)}}function c(n){throw n}function f(n){return st&&"AsyncFunction"===n[Symbol.toStringTag]}function a(n){return f(n)?i(n):n}function l(n){return function(e){var r=t(arguments,1),u=ct(function(t,r){var u=this;return n(e,function(n,e){a(n).apply(u,t.concat(e))},r)});return r.length?u.apply(this,r):u}}function s(n){var t=mt.call(n,bt),e=n[bt];try{n[bt]=void 0;var r=!0}catch(n){}var u=gt.call(n);return r&&(t?n[bt]=e:delete n[bt]),u}function p(n){return St.call(n)}function h(n){return null==n?void 0===n?Lt:kt:Ot&&Ot in Object(n)?s(n):p(n)}function y(n){if(!e(n))return!1;var t=h(n);return t==xt||t==Et||t==wt||t==At}function v(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=Tt}function d(n){return null!=n&&v(n.length)&&!y(n)}function m(){}function g(n){return function(){if(null!==n){var t=n;n=null,t.apply(this,arguments)}}}function b(n,t){for(var e=-1,r=Array(n);++e<n;)r[e]=t(e);return r}function j(n){return null!=n&&"object"==typeof n}function S(n){return j(n)&&h(n)==_t}function k(){return!1}function L(n,t){return t=null==t?Nt:t,!!t&&("number"==typeof n||Qt.test(n))&&n>-1&&n%1==0&&n<t}function O(n){return j(n)&&v(n.length)&&!!me[h(n)]}function w(n){return function(t){return n(t)}}function x(n,t){var e=Vt(n),r=!e&&Pt(n),u=!e&&!r&&Wt(n),i=!e&&!r&&!u&&Oe(n),o=e||r||u||i,c=o?b(n.length,String):[],f=c.length;for(var a in n)!t&&!xe.call(n,a)||o&&("length"==a||u&&("offset"==a||"parent"==a)||i&&("buffer"==a||"byteLength"==a||"byteOffset"==a)||L(a,f))||c.push(a);return c}function E(n){var t=n&&n.constructor,e="function"==typeof t&&t.prototype||Ee;return n===e}function A(n,t){return function(e){return n(t(e))}}function T(n){if(!E(n))return Ae(n);var t=[];for(var e in Object(n))Be.call(n,e)&&"constructor"!=e&&t.push(e);return t}function B(n){return d(n)?x(n):T(n)}function F(n){var t=-1,e=n.length;return function(){return++t<e?{value:n[t],key:t}:null}}function I(n){var t=-1;return function(){var e=n.next();return e.done?null:(t++,{value:e.value,key:t})}}function _(n){var t=B(n),e=-1,r=t.length;return function(){var u=t[++e];return e<r?{value:n[u],key:u}:null}}function M(n){if(d(n))return F(n);var t=It(n);return t?I(t):_(n)}function U(n){return function(){if(null===n)throw new Error("Callback was already called.");var t=n;n=null,t.apply(this,arguments)}}function z(n){return function(t,e,r){function u(n,t){if(f-=1,n)c=!0,r(n);else{if(t===Bt||c&&f<=0)return c=!0,r(null);i()}}function i(){for(;f<n&&!c;){var t=o();if(null===t)return c=!0,void(f<=0&&r(null));f+=1,e(t.value,t.key,U(u))}}if(r=g(r||m),n<=0||!t)return r(null);var o=M(t),c=!1,f=0;i()}}function P(n,t,e,r){z(t)(n,a(e),r)}function V(n,t){return function(e,r,u){return n(e,t,r,u)}}function q(n,t,e){function r(n,t){n?e(n):++i!==o&&t!==Bt||e(null)}e=g(e||m);var u=0,i=0,o=n.length;for(0===o&&e(null);u<o;u++)t(n[u],u,U(r))}function D(n){return function(t,e,r){return n(Ie,t,a(e),r)}}function R(n,t,e,r){r=r||m,t=t||[];var u=[],i=0,o=a(e);n(t,function(n,t,e){var r=i++;o(n,function(n,t){u[r]=t,e(n)})},function(n){r(n,u)})}function C(n){return function(t,e,r,u){return n(z(e),t,a(r),u)}}function $(n,t){for(var e=-1,r=null==n?0:n.length;++e<r&&t(n[e],e,n)!==!1;);return n}function W(n){return function(t,e,r){for(var u=-1,i=Object(t),o=r(t),c=o.length;c--;){var f=o[n?c:++u];if(e(i[f],f,i)===!1)break}return t}}function N(n,t){return n&&Ve(n,t,B)}function Q(n,t,e,r){for(var u=n.length,i=e+(r?1:-1);r?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function G(n){return n!==n}function H(n,t,e){for(var r=e-1,u=n.length;++r<u;)if(n[r]===t)return r;return-1}function J(n,t,e){return t===t?H(n,t,e):Q(n,G,e)}function K(n,t){for(var e=-1,r=null==n?0:n.length,u=Array(r);++e<r;)u[e]=t(n[e],e,n);return u}function X(n){return"symbol"==typeof n||j(n)&&h(n)==De}function Y(n){if("string"==typeof n)return n;if(Vt(n))return K(n,Y)+"";if(X(n))return $e?$e.call(n):"";var t=n+"";return"0"==t&&1/n==-Re?"-0":t}function Z(n,t,e){var r=-1,u=n.length;t<0&&(t=-t>u?0:u+t),e=e>u?u:e,e<0&&(e+=u),u=t>e?0:e-t>>>0,t>>>=0;for(var i=Array(u);++r<u;)i[r]=n[r+t];return i}function nn(n,t,e){var r=n.length;return e=void 0===e?r:e,!t&&e>=r?n:Z(n,t,e)}function tn(n,t){for(var e=n.length;e--&&J(t,n[e],0)>-1;);return e}function en(n,t){for(var e=-1,r=n.length;++e<r&&J(t,n[e],0)>-1;);return e}function rn(n){return n.split("")}function un(n){return Xe.test(n)}function on(n){return n.match(mr)||[]}function cn(n){return un(n)?on(n):rn(n)}function fn(n){return null==n?"":Y(n)}function an(n,t,e){if(n=fn(n),n&&(e||void 0===t))return n.replace(gr,"");if(!n||!(t=Y(t)))return n;var r=cn(n),u=cn(t),i=en(r,u),o=tn(r,u)+1;return nn(r,i,o).join("")}function ln(n){return n=n.toString().replace(kr,""),n=n.match(br)[2].replace(" ",""),n=n?n.split(jr):[],n=n.map(function(n){return an(n.replace(Sr,""))})}function sn(n,t){var e={};N(n,function(n,t){function r(t,e){var r=K(u,function(n){return t[n]});r.push(e),a(n).apply(null,r)}var u,i=f(n),o=!i&&1===n.length||i&&0===n.length;if(Vt(n))u=n.slice(0,-1),n=n[n.length-1],e[t]=u.concat(u.length>0?r:n);else if(o)e[t]=n;else{if(u=ln(n),0===n.length&&!i&&0===u.length)throw new Error("autoInject task functions require explicit parameters.");i||u.pop(),e[t]=u.concat(r)}}),qe(e,t)}function pn(){this.head=this.tail=null,this.length=0}function hn(n,t){n.length=1,n.head=n.tail=t}function yn(n,t,e){function r(n,t,e){if(null!=e&&"function"!=typeof e)throw new Error("task callback must be a function");if(s.started=!0,Vt(n)||(n=[n]),0===n.length&&s.idle())return lt(function(){s.drain()});for(var r=0,u=n.length;r<u;r++){var i={data:n[r],callback:e||m};t?s._tasks.unshift(i):s._tasks.push(i)}f||(f=!0,lt(function(){f=!1,s.process()}))}function u(n){return function(t){o-=1;for(var e=0,r=n.length;e<r;e++){var u=n[e],i=J(c,u,0);0===i?c.shift():i>0&&c.splice(i,1),u.callback.apply(u,arguments),null!=t&&s.error(t,u.data)}o<=s.concurrency-s.buffer&&s.unsaturated(),s.idle()&&s.drain(),s.process()}}if(null==t)t=1;else if(0===t)throw new Error("Concurrency must not be zero");var i=a(n),o=0,c=[],f=!1,l=!1,s={_tasks:new pn,concurrency:t,payload:e,saturated:m,unsaturated:m,buffer:t/4,empty:m,drain:m,error:m,started:!1,paused:!1,push:function(n,t){r(n,!1,t)},kill:function(){s.drain=m,s._tasks.empty()},unshift:function(n,t){r(n,!0,t)},remove:function(n){s._tasks.remove(n)},process:function(){if(!l){for(l=!0;!s.paused&&o<s.concurrency&&s._tasks.length;){var n=[],t=[],e=s._tasks.length;s.payload&&(e=Math.min(e,s.payload));for(var r=0;r<e;r++){var f=s._tasks.shift();n.push(f),c.push(f),t.push(f.data)}o+=1,0===s._tasks.length&&s.empty(),o===s.concurrency&&s.saturated();var a=U(u(n));i(t,a)}l=!1}},length:function(){return s._tasks.length},running:function(){return o},workersList:function(){return c},idle:function(){return s._tasks.length+o===0},pause:function(){s.paused=!0},resume:function(){s.paused!==!1&&(s.paused=!1,lt(s.process))}};return s}function vn(n,t){return yn(n,1,t)}function dn(n,t,e,r){r=g(r||m);var u=a(e);Or(n,function(n,e,r){u(t,n,function(n,e){t=e,r(n)})},function(n){r(n,t)})}function mn(){var n=K(arguments,a);return function(){var e=t(arguments),r=this,u=e[e.length-1];"function"==typeof u?e.pop():u=m,dn(n,e,function(n,e,u){e.apply(r,n.concat(function(n){var e=t(arguments,1);u(n,e)}))},function(n,t){u.apply(r,[n].concat(t))})}}function gn(n){return n}function bn(n,t){return function(e,r,u,i){i=i||m;var o,c=!1;e(r,function(e,r,i){u(e,function(r,u){r?i(r):n(u)&&!o?(c=!0,o=t(!0,e),i(null,Bt)):i()})},function(n){n?i(n):i(null,c?o:t(!1))})}}function jn(n,t){return t}function Sn(n){return function(e){var r=t(arguments,1);r.push(function(e){var r=t(arguments,1);"object"==typeof console&&(e?console.error&&console.error(e):console[n]&&$(r,function(t){console[n](t)}))}),a(e).apply(null,r)}}function kn(n,e,r){function u(n){if(n)return r(n);var e=t(arguments,1);e.push(i),c.apply(this,e)}function i(n,t){return n?r(n):t?void o(u):r(null)}r=U(r||m);var o=a(n),c=a(e);i(null,!0)}function Ln(n,e,r){r=U(r||m);var u=a(n),i=function(n){if(n)return r(n);var o=t(arguments,1);return e.apply(this,o)?u(i):void r.apply(null,[null].concat(o))};u(i)}function On(n,t,e){Ln(n,function(){return!t.apply(this,arguments)},e)}function wn(n,t,e){function r(n){return n?e(n):void o(u)}function u(n,t){return n?e(n):t?void i(r):e(null)}e=U(e||m);var i=a(t),o=a(n);o(u)}function xn(n){return function(t,e,r){return n(t,r)}}function En(n,t,e){Ie(n,xn(a(t)),e)}function An(n,t,e,r){z(t)(n,xn(a(e)),r)}function Tn(n){return f(n)?n:ct(function(t,e){var r=!0;t.push(function(){var n=arguments;r?lt(function(){e.apply(null,n)}):e.apply(null,n)}),n.apply(this,t),r=!1})}function Bn(n){return!n}function Fn(n){return function(t){return null==t?void 0:t[n]}}function In(n,t,e,r){var u=new Array(t.length);n(t,function(n,t,r){e(n,function(n,e){u[t]=!!e,r(n)})},function(n){if(n)return r(n);for(var e=[],i=0;i<t.length;i++)u[i]&&e.push(t[i]);r(null,e)})}function _n(n,t,e,r){var u=[];n(t,function(n,t,r){e(n,function(e,i){e?r(e):(i&&u.push({index:t,value:n}),r())})},function(n){n?r(n):r(null,K(u.sort(function(n,t){return n.index-t.index}),Fn("value")))})}function Mn(n,t,e,r){var u=d(t)?In:_n;u(n,t,a(e),r||m)}function Un(n,t){function e(n){return n?r(n):void u(e)}var r=U(t||m),u=a(Tn(n));e()}function zn(n,t,e,r){r=g(r||m);var u={},i=a(e);P(n,t,function(n,t,e){i(n,t,function(n,r){return n?e(n):(u[t]=r,void e())})},function(n){r(n,u)})}function Pn(n,t){return t in n}function Vn(n,e){var r=Object.create(null),u=Object.create(null);e=e||gn;var i=a(n),o=ct(function(n,o){var c=e.apply(null,n);Pn(r,c)?lt(function(){o.apply(null,r[c])}):Pn(u,c)?u[c].push(o):(u[c]=[o],i.apply(null,n.concat(function(){var n=t(arguments);r[c]=n;var e=u[c];delete u[c];for(var i=0,o=e.length;i<o;i++)e[i].apply(null,n)})))});return o.memo=r,o.unmemoized=n,o}function qn(n,e,r){r=r||m;var u=d(e)?[]:{};n(e,function(n,e,r){a(n)(function(n,i){arguments.length>2&&(i=t(arguments,1)),u[e]=i,r(n)})},function(n){r(n,u)})}function Dn(n,t){qn(Ie,n,t)}function Rn(n,t,e){qn(z(t),n,e)}function Cn(n,t){if(t=g(t||m),!Vt(n))return t(new TypeError("First argument to race must be an array of functions"));if(!n.length)return t();for(var e=0,r=n.length;e<r;e++)a(n[e])(t)}function $n(n,e,r,u){var i=t(n).reverse();dn(i,e,r,u)}function Wn(n){var e=a(n);return ct(function(n,r){return n.push(function(n,e){if(n)r(null,{error:n});else{var u;u=arguments.length<=2?e:t(arguments,1),r(null,{value:u})}}),e.apply(this,n)})}function Nn(n){var t;return Vt(n)?t=K(n,Wn):(t={},N(n,function(n,e){t[e]=Wn.call(this,n)})),t}function Qn(n,t,e,r){Mn(n,t,function(n,t){e(n,function(n,e){t(n,!e)})},r)}function Gn(n){return function(){return n}}function Hn(n,t,e){function r(n,t){if("object"==typeof t)n.times=+t.times||i,n.intervalFunc="function"==typeof t.interval?t.interval:Gn(+t.interval||o),n.errorFilter=t.errorFilter;else{if("number"!=typeof t&&"string"!=typeof t)throw new Error("Invalid arguments for async.retry");n.times=+t||i}}function u(){f(function(n){n&&l++<c.times&&("function"!=typeof c.errorFilter||c.errorFilter(n))?setTimeout(u,c.intervalFunc(l)):e.apply(null,arguments)})}var i=5,o=0,c={times:i,intervalFunc:Gn(o)};if(arguments.length<3&&"function"==typeof n?(e=t||m,t=n):(r(c,n),e=e||m),"function"!=typeof t)throw new Error("Invalid arguments for async.retry");var f=a(t),l=1;u()}function Jn(n,t){qn(Or,n,t)}function Kn(n,t,e){function r(n,t){var e=n.criteria,r=t.criteria;return e<r?-1:e>r?1:0}var u=a(t);_e(n,function(n,t){u(n,function(e,r){return e?t(e):void t(null,{value:n,criteria:r})})},function(n,t){return n?e(n):void e(null,K(t.sort(r),Fn("value")))})}function Xn(n,t,e){var r=a(n);return ct(function(u,i){function o(){var t=n.name||"anonymous",r=new Error('Callback function "'+t+'" timed out.');r.code="ETIMEDOUT",e&&(r.info=e),f=!0,i(r)}var c,f=!1;u.push(function(){f||(i.apply(null,arguments),clearTimeout(c))}),c=setTimeout(o,t),r.apply(null,u)})}function Yn(n,t,e,r){for(var u=-1,i=iu(uu((t-n)/(e||1)),0),o=Array(i);i--;)o[r?i:++u]=n,n+=e;return o}function Zn(n,t,e,r){var u=a(e);Ue(Yn(0,n,1),t,u,r)}function nt(n,t,e,r){arguments.length<=3&&(r=e,e=t,t=Vt(n)?[]:{}),r=g(r||m);var u=a(e);Ie(n,function(n,e,r){u(t,n,e,r)},function(n){r(n,t)})}function tt(n,e){var r,u=null;e=e||m,Ur(n,function(n,e){a(n)(function(n,i){r=arguments.length>2?t(arguments,1):i,u=n,e(!n)})},function(){e(u,r)})}function et(n){return function(){return(n.unmemoized||n).apply(null,arguments)}}function rt(n,e,r){r=U(r||m);var u=a(e);if(!n())return r(null);var i=function(e){if(e)return r(e);if(n())return u(i);var o=t(arguments,1);r.apply(null,[null].concat(o))};u(i)}function ut(n,t,e){rt(function(){return!n.apply(this,arguments)},t,e)}var it,ot=function(n){var e=t(arguments,1);return function(){var r=t(arguments);return n.apply(null,e.concat(r))}},ct=function(n){return function(){var e=t(arguments),r=e.pop();n.call(this,e,r)}},ft="function"==typeof setImmediate&&setImmediate,at="object"==typeof process&&"function"==typeof process.nextTick;it=ft?setImmediate:at?process.nextTick:r;var lt=u(it),st="function"==typeof Symbol,pt="object"==typeof global&&global&&global.Object===Object&&global,ht="object"==typeof self&&self&&self.Object===Object&&self,yt=pt||ht||Function("return this")(),vt=yt.Symbol,dt=Object.prototype,mt=dt.hasOwnProperty,gt=dt.toString,bt=vt?vt.toStringTag:void 0,jt=Object.prototype,St=jt.toString,kt="[object Null]",Lt="[object Undefined]",Ot=vt?vt.toStringTag:void 0,wt="[object AsyncFunction]",xt="[object Function]",Et="[object GeneratorFunction]",At="[object Proxy]",Tt=9007199254740991,Bt={},Ft="function"==typeof Symbol&&Symbol.iterator,It=function(n){return Ft&&n[Ft]&&n[Ft]()},_t="[object Arguments]",Mt=Object.prototype,Ut=Mt.hasOwnProperty,zt=Mt.propertyIsEnumerable,Pt=S(function(){return arguments}())?S:function(n){return j(n)&&Ut.call(n,"callee")&&!zt.call(n,"callee")},Vt=Array.isArray,qt="object"==typeof n&&n&&!n.nodeType&&n,Dt=qt&&"object"==typeof module&&module&&!module.nodeType&&module,Rt=Dt&&Dt.exports===qt,Ct=Rt?yt.Buffer:void 0,$t=Ct?Ct.isBuffer:void 0,Wt=$t||k,Nt=9007199254740991,Qt=/^(?:0|[1-9]\d*)$/,Gt="[object Arguments]",Ht="[object Array]",Jt="[object Boolean]",Kt="[object Date]",Xt="[object Error]",Yt="[object Function]",Zt="[object Map]",ne="[object Number]",te="[object Object]",ee="[object RegExp]",re="[object Set]",ue="[object String]",ie="[object WeakMap]",oe="[object ArrayBuffer]",ce="[object DataView]",fe="[object Float32Array]",ae="[object Float64Array]",le="[object Int8Array]",se="[object Int16Array]",pe="[object Int32Array]",he="[object Uint8Array]",ye="[object Uint8ClampedArray]",ve="[object Uint16Array]",de="[object Uint32Array]",me={};me[fe]=me[ae]=me[le]=me[se]=me[pe]=me[he]=me[ye]=me[ve]=me[de]=!0,me[Gt]=me[Ht]=me[oe]=me[Jt]=me[ce]=me[Kt]=me[Xt]=me[Yt]=me[Zt]=me[ne]=me[te]=me[ee]=me[re]=me[ue]=me[ie]=!1;var ge="object"==typeof n&&n&&!n.nodeType&&n,be=ge&&"object"==typeof module&&module&&!module.nodeType&&module,je=be&&be.exports===ge,Se=je&&pt.process,ke=function(){try{return Se&&Se.binding&&Se.binding("util")}catch(n){}}(),Le=ke&&ke.isTypedArray,Oe=Le?w(Le):O,we=Object.prototype,xe=we.hasOwnProperty,Ee=Object.prototype,Ae=A(Object.keys,Object),Te=Object.prototype,Be=Te.hasOwnProperty,Fe=V(P,1/0),Ie=function(n,t,e){var r=d(n)?q:Fe;r(n,a(t),e)},_e=D(R),Me=l(_e),Ue=C(R),ze=V(Ue,1),Pe=l(ze),Ve=W(),qe=function(n,e,r){function u(n,t){j.push(function(){f(n,t)})}function i(){if(0===j.length&&0===v)return r(null,y);for(;j.length&&v<e;){var n=j.shift();n()}}function o(n,t){var e=b[n];e||(e=b[n]=[]),e.push(t)}function c(n){var t=b[n]||[];$(t,function(n){n()}),i()}function f(n,e){if(!d){var u=U(function(e,u){if(v--,arguments.length>2&&(u=t(arguments,1)),e){var i={};N(y,function(n,t){i[t]=n}),i[n]=u,d=!0,b=Object.create(null),r(e,i)}else y[n]=u,c(n)});v++;var i=a(e[e.length-1]);e.length>1?i(y,u):i(u)}}function l(){for(var n,t=0;S.length;)n=S.pop(),t++,$(s(n),function(n){0===--k[n]&&S.push(n)});if(t!==h)throw new Error("async.auto cannot execute tasks due to a recursive dependency")}function s(t){var e=[];return N(n,function(n,r){Vt(n)&&J(n,t,0)>=0&&e.push(r)}),e}"function"==typeof e&&(r=e,e=null),r=g(r||m);var p=B(n),h=p.length;if(!h)return r(null);e||(e=h);var y={},v=0,d=!1,b=Object.create(null),j=[],S=[],k={};N(n,function(t,e){if(!Vt(t))return u(e,[t]),void S.push(e);var r=t.slice(0,t.length-1),i=r.length;return 0===i?(u(e,t),void S.push(e)):(k[e]=i,void $(r,function(c){if(!n[c])throw new Error("async.auto task `"+e+"` has a non-existent dependency `"+c+"` in "+r.join(", "));o(c,function(){i--,0===i&&u(e,t)})}))}),l(),i()},De="[object Symbol]",Re=1/0,Ce=vt?vt.prototype:void 0,$e=Ce?Ce.toString:void 0,We="\\ud800-\\udfff",Ne="\\u0300-\\u036f",Qe="\\ufe20-\\ufe2f",Ge="\\u20d0-\\u20ff",He=Ne+Qe+Ge,Je="\\ufe0e\\ufe0f",Ke="\\u200d",Xe=RegExp("["+Ke+We+He+Je+"]"),Ye="\\ud800-\\udfff",Ze="\\u0300-\\u036f",nr="\\ufe20-\\ufe2f",tr="\\u20d0-\\u20ff",er=Ze+nr+tr,rr="\\ufe0e\\ufe0f",ur="["+Ye+"]",ir="["+er+"]",or="\\ud83c[\\udffb-\\udfff]",cr="(?:"+ir+"|"+or+")",fr="[^"+Ye+"]",ar="(?:\\ud83c[\\udde6-\\uddff]){2}",lr="[\\ud800-\\udbff][\\udc00-\\udfff]",sr="\\u200d",pr=cr+"?",hr="["+rr+"]?",yr="(?:"+sr+"(?:"+[fr,ar,lr].join("|")+")"+hr+pr+")*",vr=hr+pr+yr,dr="(?:"+[fr+ir+"?",ir,ar,lr,ur].join("|")+")",mr=RegExp(or+"(?="+or+")|"+dr+vr,"g"),gr=/^\s+|\s+$/g,br=/^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m,jr=/,/,Sr=/(=.+)?(\s*)$/,kr=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;pn.prototype.removeLink=function(n){return n.prev?n.prev.next=n.next:this.head=n.next,n.next?n.next.prev=n.prev:this.tail=n.prev,n.prev=n.next=null,this.length-=1,n},pn.prototype.empty=function(){for(;this.head;)this.shift();return this},pn.prototype.insertAfter=function(n,t){t.prev=n,t.next=n.next,n.next?n.next.prev=t:this.tail=t,n.next=t,this.length+=1},pn.prototype.insertBefore=function(n,t){t.prev=n.prev,t.next=n,n.prev?n.prev.next=t:this.head=t,n.prev=t,this.length+=1},pn.prototype.unshift=function(n){this.head?this.insertBefore(this.head,n):hn(this,n)},pn.prototype.push=function(n){this.tail?this.insertAfter(this.tail,n):hn(this,n)},pn.prototype.shift=function(){return this.head&&this.removeLink(this.head)},pn.prototype.pop=function(){return this.tail&&this.removeLink(this.tail)},pn.prototype.toArray=function(){for(var n=Array(this.length),t=this.head,e=0;e<this.length;e++)n[e]=t.data,t=t.next;return n},pn.prototype.remove=function(n){for(var t=this.head;t;){var e=t.next;n(t)&&this.removeLink(t),t=e}return this};var Lr,Or=V(P,1),wr=function(){return mn.apply(null,t(arguments).reverse())},xr=Array.prototype.concat,Er=function(n,e,r,u){u=u||m;var i=a(r);Ue(n,e,function(n,e){i(n,function(n){return n?e(n):e(null,t(arguments,1))})},function(n,t){for(var e=[],r=0;r<t.length;r++)t[r]&&(e=xr.apply(e,t[r]));return u(n,e)})},Ar=V(Er,1/0),Tr=V(Er,1),Br=function(){var n=t(arguments),e=[null].concat(n);return function(){var n=arguments[arguments.length-1];return n.apply(this,e)}},Fr=D(bn(gn,jn)),Ir=C(bn(gn,jn)),_r=V(Ir,1),Mr=Sn("dir"),Ur=V(An,1),zr=D(bn(Bn,Bn)),Pr=C(bn(Bn,Bn)),Vr=V(Pr,1),qr=D(Mn),Dr=C(Mn),Rr=V(Dr,1),Cr=function(n,t,e,r){r=r||m;var u=a(e);Ue(n,t,function(n,t){u(n,function(e,r){return e?t(e):t(null,{key:r,val:n})})},function(n,t){for(var e={},u=Object.prototype.hasOwnProperty,i=0;i<t.length;i++)if(t[i]){var o=t[i].key,c=t[i].val;u.call(e,o)?e[o].push(c):e[o]=[c]}return r(n,e)})},$r=V(Cr,1/0),Wr=V(Cr,1),Nr=Sn("log"),Qr=V(zn,1/0),Gr=V(zn,1);Lr=at?process.nextTick:ft?setImmediate:r;var Hr=u(Lr),Jr=function(n,t){var e=a(n);return yn(function(n,t){e(n[0],t)},t,1)},Kr=function(n,t){var e=Jr(n,t);return e.push=function(n,t,r){if(null==r&&(r=m),"function"!=typeof r)throw new Error("task callback must be a function");if(e.started=!0,Vt(n)||(n=[n]),0===n.length)return lt(function(){e.drain()});t=t||0;for(var u=e._tasks.head;u&&t>=u.priority;)u=u.next;for(var i=0,o=n.length;i<o;i++){var c={data:n[i],priority:t,callback:r};u?e._tasks.insertBefore(u,c):e._tasks.push(c)}lt(e.process)},delete e.unshift,e},Xr=D(Qn),Yr=C(Qn),Zr=V(Yr,1),nu=function(n,t){t||(t=n,n=null);var e=a(t);return ct(function(t,r){function u(n){e.apply(null,t.concat(n))}n?Hn(n,u,r):Hn(u,r)})},tu=D(bn(Boolean,gn)),eu=C(bn(Boolean,gn)),ru=V(eu,1),uu=Math.ceil,iu=Math.max,ou=V(Zn,1/0),cu=V(Zn,1),fu=function(n,e){function r(t){var e=a(n[i++]);t.push(U(u)),e.apply(null,t)}function u(u){return u||i===n.length?e.apply(null,arguments):void r(t(arguments,1))}if(e=g(e||m),!Vt(n))return e(new Error("First argument to waterfall must be an array of functions"));if(!n.length)return e();var i=0;r([])},au={apply:ot,applyEach:Me,applyEachSeries:Pe,asyncify:i,auto:qe,autoInject:sn,cargo:vn,compose:wr,concat:Ar,concatLimit:Er,concatSeries:Tr,constant:Br,detect:Fr,detectLimit:Ir,detectSeries:_r,dir:Mr,doDuring:kn,doUntil:On,doWhilst:Ln,during:wn,each:En,eachLimit:An,eachOf:Ie,eachOfLimit:P,eachOfSeries:Or,eachSeries:Ur,ensureAsync:Tn,every:zr,everyLimit:Pr,everySeries:Vr,filter:qr,filterLimit:Dr,filterSeries:Rr,forever:Un,groupBy:$r,groupByLimit:Cr,groupBySeries:Wr,log:Nr,map:_e,mapLimit:Ue,mapSeries:ze,mapValues:Qr,mapValuesLimit:zn,mapValuesSeries:Gr,memoize:Vn,nextTick:Hr,parallel:Dn,parallelLimit:Rn,priorityQueue:Kr,queue:Jr,race:Cn,reduce:dn,reduceRight:$n,reflect:Wn,reflectAll:Nn,reject:Xr,rejectLimit:Yr,rejectSeries:Zr,retry:Hn,retryable:nu,seq:mn,series:Jn,setImmediate:lt,some:tu,someLimit:eu,someSeries:ru,sortBy:Kn,timeout:Xn,times:ou,timesLimit:Zn,timesSeries:cu,transform:nt,tryEach:tt,unmemoize:et,until:ut,waterfall:fu,whilst:rt,all:zr,allLimit:Pr,allSeries:Vr,any:tu,anyLimit:eu,anySeries:ru,find:Fr,findLimit:Ir,findSeries:_r,forEach:En,forEachSeries:Ur,forEachLimit:An,forEachOf:Ie,forEachOfSeries:Or,forEachOfLimit:P,inject:dn,foldl:dn,foldr:$n,select:qr,selectLimit:Dr,selectSeries:Rr,wrapSync:i};n.default=au,n.apply=ot,n.applyEach=Me,n.applyEachSeries=Pe,n.asyncify=i,n.auto=qe,n.autoInject=sn,n.cargo=vn,n.compose=wr,n.concat=Ar,n.concatLimit=Er,n.concatSeries=Tr,n.constant=Br,n.detect=Fr,n.detectLimit=Ir,n.detectSeries=_r,n.dir=Mr,n.doDuring=kn,n.doUntil=On,n.doWhilst=Ln,n.during=wn,n.each=En,n.eachLimit=An,n.eachOf=Ie,n.eachOfLimit=P,n.eachOfSeries=Or,n.eachSeries=Ur,n.ensureAsync=Tn,n.every=zr,n.everyLimit=Pr,n.everySeries=Vr,n.filter=qr,n.filterLimit=Dr,n.filterSeries=Rr,n.forever=Un,n.groupBy=$r,n.groupByLimit=Cr,n.groupBySeries=Wr,n.log=Nr,n.map=_e,n.mapLimit=Ue,n.mapSeries=ze,n.mapValues=Qr,n.mapValuesLimit=zn,n.mapValuesSeries=Gr,n.memoize=Vn,n.nextTick=Hr,n.parallel=Dn,n.parallelLimit=Rn,n.priorityQueue=Kr,n.queue=Jr,n.race=Cn,n.reduce=dn,n.reduceRight=$n,n.reflect=Wn,n.reflectAll=Nn,n.reject=Xr,n.rejectLimit=Yr,n.rejectSeries=Zr,n.retry=Hn,n.retryable=nu,n.seq=mn,n.series=Jn,n.setImmediate=lt,n.some=tu,n.someLimit=eu,n.someSeries=ru,n.sortBy=Kn,n.timeout=Xn,n.times=ou,n.timesLimit=Zn,n.timesSeries=cu,n.transform=nt,n.tryEach=tt,n.unmemoize=et,n.until=ut,n.waterfall=fu,n.whilst=rt,n.all=zr,n.allLimit=Pr,n.allSeries=Vr,n.any=tu,n.anyLimit=eu,n.anySeries=ru,n.find=Fr,n.findLimit=Ir,n.findSeries=_r,n.forEach=En,n.forEachSeries=Ur,n.forEachLimit=An,n.forEachOf=Ie,n.forEachOfSeries=Or,n.forEachOfLimit=P,n.inject=dn,n.foldl=dn,n.foldr=$n,n.select=qr,n.selectLimit=Dr,n.selectSeries=Rr,n.wrapSync=i,Object.defineProperty(n,"__esModule",{value:!0})});
//# sourceMappingURL=async.min.map \ No newline at end of file
diff --git a/dist/async.min.map b/dist/async.min.map
index 6c5a5ad..6cd63ab 100644
--- a/dist/async.min.map
+++ b/dist/async.min.map
@@ -1 +1 @@
-{"version":3,"sources":["build/dist/async.js"],"names":["global","factory","exports","module","define","amd","async","this","apply","func","thisArg","args","length","call","overRest$1","start","transform","nativeMax","undefined","arguments","index","array","Array","otherArgs","identity","value","rest","isObject","type","asyncify","initialParams","callback","result","e","then","err","message","Error","supportsAsync","supported","isAsync","eval","fn","supportsSymbol","Symbol","toStringTag","wrapAsync","asyncFn","applyEach$1","eachfn","fns","go","that","cb","wrapAsync$1","concat","getRawTag","isOwn","hasOwnProperty","symToStringTag$1","tag","unmasked","nativeObjectToString","objectToString","nativeObjectToString$1","baseGetTag","undefinedTag","nullTag","Object","symToStringTag","isFunction","funcTag","genTag","asyncTag","proxyTag","isLength","MAX_SAFE_INTEGER","isArrayLike","noop","once","callFn","baseTimes","n","iteratee","isObjectLike","baseIsArguments","argsTag","stubFalse","isIndex","MAX_SAFE_INTEGER$1","reIsUint","test","baseIsTypedArray","typedArrayTags","baseUnary","arrayLikeKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","String","key","hasOwnProperty$1","push","isPrototype","Ctor","constructor","proto","prototype","objectProto$5","overArg","arg","baseKeys","object","nativeKeys","hasOwnProperty$3","keys","createArrayIterator","coll","i","len","createES2015Iterator","iterator","item","next","done","createObjectIterator","obj","okeys","getIterator","onlyOnce","_eachOfLimit","limit","iterateeCallback","running","breakLoop","replenish","elem","nextElem","eachOfLimit","doLimit","iterable","eachOfArrayLike","iteratorCallback","completed","doParallel","eachOf","_asyncMap","arr","results","counter","_iteratee","_","v","doParallelLimit","arrayEach","createBaseFor","fromRight","keysFunc","props","baseForOwn","baseFor","baseFindIndex","predicate","fromIndex","baseIsNaN","strictIndexOf","baseIndexOf","arrayMap","isSymbol","symbolTag","baseToString","symbolToString","INFINITY","baseSlice","end","castSlice","charsEndIndex","strSymbols","chrSymbols","charsStartIndex","asciiToArray","string","split","hasUnicode","reHasUnicode","unicodeToArray","match","reUnicode","stringToArray","toString","trim","chars","guard","replace","reTrim","join","parseParams","STRIP_COMMENTS","FN_ARGS","FN_ARG_SPLIT","map","FN_ARG","autoInject","tasks","newTasks","taskFn","newTask","taskCb","newArgs","params","name","fnIsAsync","hasNoDeps","slice","pop","auto","fallback","setTimeout","wrap","defer","DLL","head","tail","setInitial","dll","node","queue","worker","concurrency","payload","_insert","data","insertAtFront","q","started","idle","setImmediate$1","drain","l","_tasks","unshift","process","_next","numRunning","task","workersList","splice","error","buffer","unsaturated","_worker","isProcessing","saturated","empty","paused","kill","Math","min","shift","pause","resume","cargo","reduce","memo","eachOfSeries","x","concat$1","y","doSeries","_createTester","check","getResult","testResult","testPassed","_findGetResult","consoleFunc","console","doDuring","truth","_fn","_test","doWhilst","doUntil","during","_withoutIndex","eachLimit","eachLimit$1","ensureAsync","sync","innerArgs","notId","baseProperty","filterArray","truthValues","filterGeneric","sort","a","b","_filter","filter","forever","errback","mapValuesLimit","newObj","val","has","memoize","hasher","create","queues","memoized","unmemoized","_parallel","parallelLimit","parallelLimit$1","race","TypeError","reduceRight","reversed","reverse","reflect","reflectCallback","cbArgs","reject$1","reflectAll","constant$1","retry","opts","parseTimes","acc","t","times","DEFAULT_TIMES","intervalFunc","interval","DEFAULT_INTERVAL","errorFilter","retryAttempt","_task","attempt","options","series","sortBy","comparator","left","right","criteria","timeout","milliseconds","info","injectedCallback","timedOut","originalCallback","clearTimeout","timer","timeoutCallback","code","origCallback","baseRange","step","nativeMax$1","nativeCeil","timeLimit","count","mapLimit","accumulator","k","unmemoize","whilst","until","max","freeGlobal","freeSelf","self","root","Function","Symbol$1","objectProto","objectProto$1","iteratorSymbol","objectProto$3","hasOwnProperty$2","propertyIsEnumerable","freeExports","nodeType","freeModule","moduleExports","Buffer","nativeIsBuffer","argsTag$1","arrayTag","boolTag","dateTag","errorTag","funcTag$1","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","freeExports$1","freeModule$1","moduleExports$1","freeProcess","nodeUtil","binding","nodeIsTypedArray","objectProto$2","objectProto$4","eachOfGeneric","Infinity","eachOfImplementation","applyEach","mapSeries","applyEachSeries","apply$2","callArgs","enqueueTask","readyTasks","runTask","processQueue","runningTasks","run","addListener","taskName","taskListeners","listeners","taskComplete","hasError","taskCallback","safeResults","rkey","checkForDeadlocks","currentTask","readyToCheck","getDependents","dependent","uncheckedDependencies","numTasks","keys$$1","dependencies","remainingDependencies","dependencyName","symbolProto","rsAstralRange","rsComboMarksRange","rsComboSymbolsRange","rsVarRange","rsZWJ","RegExp","rsAstralRange$1","rsComboMarksRange$1","rsComboSymbolsRange$1","rsVarRange$1","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsZWJ$1","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","hasSetImmediate","setImmediate","hasNextTick","nextTick","_defer","removeLink","prev","insertAfter","newNode","insertBefore","seq$1","functions","_functions","newargs","nextargs","compose","concatSeries","constant","values","ignoredArgs","detect","detectLimit","detectSeries","dir","eachSeries","every","everyLimit","everySeries","filterLimit","filterSeries","groupByLimit","mapResults","groupBy","groupBySeries","log","mapValues","mapValuesSeries","_defer$1","queue$1","items","priorityQueue","priority","nextNode","reject","rejectLimit","rejectSeries","retryable","some","Boolean","someLimit","someSeries","ceil","timesSeries","waterfall","nextTask","taskIndex","each","parallel","seq","timesLimit","all","any","forEach","forEachSeries","forEachLimit","forEachOf","forEachOfSeries","forEachOfLimit","inject","foldl","foldr","select","selectLimit","selectSeries","wrapSync","allLimit","allSeries","anyLimit","anySeries","find","findLimit","findSeries","defineProperty"],"mappings":"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","file":"build/dist/async.min.js"} \ No newline at end of file
+{"version":3,"sources":["build/dist/async.js"],"names":["global","factory","exports","module","define","amd","async","this","slice","arrayLike","start","newLen","Math","max","length","newArr","Array","idx","isObject","value","type","fallback","fn","setTimeout","wrap","defer","args","arguments","apply","asyncify","func","initialParams","callback","result","e","then","invokeCallback","err","message","Error","error","setImmediate$1","rethrow","isAsync","supportsSymbol","Symbol","toStringTag","wrapAsync","asyncFn","applyEach$1","eachfn","fns","go","that","cb","concat","getRawTag","isOwn","hasOwnProperty","call","symToStringTag$1","tag","undefined","unmasked","nativeObjectToString","objectToString","nativeObjectToString$1","baseGetTag","undefinedTag","nullTag","symToStringTag","Object","isFunction","funcTag","genTag","asyncTag","proxyTag","isLength","MAX_SAFE_INTEGER","isArrayLike","noop","once","callFn","baseTimes","n","iteratee","index","isObjectLike","baseIsArguments","argsTag","stubFalse","isIndex","MAX_SAFE_INTEGER$1","reIsUint","test","baseIsTypedArray","typedArrayTags","baseUnary","arrayLikeKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","String","key","hasOwnProperty$1","push","isPrototype","Ctor","constructor","proto","prototype","objectProto$5","overArg","transform","arg","baseKeys","object","nativeKeys","hasOwnProperty$3","keys","createArrayIterator","coll","i","len","createES2015Iterator","iterator","item","next","done","createObjectIterator","obj","okeys","getIterator","onlyOnce","_eachOfLimit","limit","iterateeCallback","running","breakLoop","replenish","elem","nextElem","eachOfLimit","doLimit","iterable","eachOfArrayLike","iteratorCallback","completed","doParallel","eachOf","_asyncMap","arr","results","counter","_iteratee","_","v","doParallelLimit","arrayEach","array","createBaseFor","fromRight","keysFunc","props","baseForOwn","baseFor","baseFindIndex","predicate","fromIndex","baseIsNaN","strictIndexOf","baseIndexOf","arrayMap","isSymbol","symbolTag","baseToString","symbolToString","INFINITY","baseSlice","end","castSlice","charsEndIndex","strSymbols","chrSymbols","charsStartIndex","asciiToArray","string","split","hasUnicode","reHasUnicode","unicodeToArray","match","reUnicode","stringToArray","toString","trim","chars","guard","replace","reTrim","join","parseParams","STRIP_COMMENTS","FN_ARGS","FN_ARG_SPLIT","map","FN_ARG","autoInject","tasks","newTasks","taskFn","newTask","taskCb","newArgs","params","name","fnIsAsync","hasNoDeps","pop","auto","DLL","head","tail","setInitial","dll","node","queue","worker","concurrency","payload","_insert","data","insertAtFront","q","started","idle","drain","l","_tasks","unshift","processingScheduled","process","_next","numRunning","task","workersList","shift","splice","buffer","unsaturated","_worker","isProcessing","saturated","empty","paused","kill","remove","testFn","min","pause","resume","cargo","reduce","memo","eachOfSeries","x","seq","_functions","newargs","nextargs","identity","_createTester","check","getResult","testResult","testPassed","_findGetResult","consoleFunc","console","doDuring","_test","truth","_fn","doWhilst","doUntil","during","_withoutIndex","eachLimit","eachLimit$1","ensureAsync","sync","innerArgs","notId","baseProperty","filterArray","truthValues","filterGeneric","sort","a","b","_filter","filter","forever","errback","mapValuesLimit","newObj","val","has","memoize","hasher","create","queues","memoized","unmemoized","_parallel","parallelLimit","parallelLimit$1","race","TypeError","reduceRight","reversed","reverse","reflect","reflectCallback","cbArg","reflectAll","reject$1","constant$1","retry","opts","parseTimes","acc","t","times","DEFAULT_TIMES","intervalFunc","interval","DEFAULT_INTERVAL","errorFilter","retryAttempt","_task","attempt","options","series","sortBy","comparator","left","right","criteria","timeout","milliseconds","info","timeoutCallback","code","timedOut","timer","clearTimeout","baseRange","step","nativeMax","nativeCeil","timeLimit","count","mapLimit","accumulator","k","tryEach","eachSeries","res","unmemoize","whilst","until","_defer","callArgs","hasSetImmediate","setImmediate","hasNextTick","nextTick","freeGlobal","freeSelf","self","root","Function","Symbol$1","objectProto","objectProto$1","iteratorSymbol","objectProto$3","hasOwnProperty$2","propertyIsEnumerable","freeExports","nodeType","freeModule","moduleExports","Buffer","nativeIsBuffer","argsTag$1","arrayTag","boolTag","dateTag","errorTag","funcTag$1","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","freeExports$1","freeModule$1","moduleExports$1","freeProcess","nodeUtil","binding","nodeIsTypedArray","objectProto$2","objectProto$4","eachOfGeneric","Infinity","eachOfImplementation","applyEach","mapSeries","applyEachSeries","enqueueTask","readyTasks","runTask","processQueue","runningTasks","run","addListener","taskName","taskListeners","listeners","taskComplete","hasError","taskCallback","safeResults","rkey","checkForDeadlocks","currentTask","readyToCheck","getDependents","dependent","uncheckedDependencies","numTasks","keys$$1","dependencies","remainingDependencies","dependencyName","symbolProto","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","RegExp","rsAstralRange$1","rsComboMarksRange$1","reComboHalfMarksRange$1","rsComboSymbolsRange$1","rsComboRange$1","rsVarRange$1","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsZWJ$1","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","removeLink","prev","insertAfter","newNode","insertBefore","toArray","curr","_defer$1","compose","_concat","concatLimit","mapResults","concatSeries","constant","values","detect","detectLimit","detectSeries","dir","every","everyLimit","everySeries","filterLimit","filterSeries","groupByLimit","groupBy","groupBySeries","log","mapValues","mapValuesSeries","queue$1","items","priorityQueue","priority","nextNode","reject","rejectLimit","rejectSeries","retryable","some","Boolean","someLimit","someSeries","ceil","timesSeries","waterfall","nextTask","taskIndex","each","parallel","timesLimit","all","allLimit","allSeries","any","anyLimit","anySeries","find","findLimit","findSeries","forEach","forEachSeries","forEachLimit","forEachOf","forEachOfSeries","forEachOfLimit","inject","foldl","foldr","select","selectLimit","selectSeries","wrapSync","defineProperty"],"mappings":"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","file":"build/dist/async.min.js"} \ No newline at end of file
diff --git a/intro.md b/intro.md
index 35e9c76..43d3c81 100644
--- a/intro.md
+++ b/intro.md
@@ -14,9 +14,8 @@ it can also be used directly in the browser.
Async is also installable via:
+- [yarn](https://yarnpkg.com/en/): `yarn add async`
- [bower](http://bower.io/): `bower install async`
-- [component](https://github.com/componentjs/component): `component install caolan/async`
-- [jam](http://jamjs.org/): `jam install async`
Async provides around 70 functions that include the usual 'functional'
suspects (`map`, `reduce`, `filter`, `each`…) as well as some common patterns
@@ -120,11 +119,30 @@ async.waterfall([
It is always good practice to `return callback(err, result)` whenever a callback call is not the last statement of a function.
+### Using ES2017 `async` functions
+
+Async accepts `async` functions wherever we accept a Node-style callback function. However, we do not pass them a callback, and instead use the return value and handle any promise rejections or errors thrown.
+
+```js
+async.mapLimit(files, async file => { // <- no callback!
+ const text = await util.promisify(fs.readFile)(dir + file, 'utf8')
+ const body = JSON.parse(text) // <- a parse error herre will be caught automatically
+ if (!(await checkValidity(body))) {
+ throw new Error(`${file} has invalid contents`) // <- this error will also be caught
+ }
+ return body // <- return a value!
+}, (err, contents) => {
+ if (err) throw err
+ console.log(contents)
+})
+```
+
+We can only detect native `async` functions, not transpiled versions (e.g. with Babel). Otherwise, you can wrap `async` functions in `async.asyncify()`.
### Binding a context to an iteratee
-This section is really about `bind`, not about `async`. If you are wondering how to
-make `async` execute your iteratees in a given context, or are confused as to why
+This section is really about `bind`, not about Async. If you are wondering how to
+make Async execute your iteratees in a given context, or are confused as to why
a method of another library isn't working as an iteratee, study this example:
```js
@@ -149,7 +167,7 @@ async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result) {
async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result) {
// result is [1, 4, 9]
// With the help of bind we can attach a context to the iteratee before
- // passing it to async. Now the square function will be executed in its
+ // passing it to Async. Now the square function will be executed in its
// 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`
// will be as expected.
});
@@ -203,12 +221,12 @@ Usage:
</script>
```
-The portable versions of async, including `async.js` and `async.min.js`, are
+The portable versions of Async, including `async.js` and `async.min.js`, are
included in the `/dist` folder. Async can also be found on the [jsDelivr CDN](http://www.jsdelivr.com/projects/async).
### ES Modules
-We also provide async as a collection of ES2015 modules, in an alternative `async-es` package on npm.
+We also provide Async as a collection of ES2015 modules, in an alternative `async-es` package on npm.
```bash
$ npm install --save async-es
@@ -218,3 +236,10 @@ $ npm install --save async-es
import waterfall from 'async-es/waterfall';
import async from 'async-es';
```
+
+## Other Libraries
+
+* [`limiter`](https://www.npmjs.com/package/limiter) a package for rate-limiting based on requests per sec/hour.
+* [`neo-async`](https://www.npmjs.com/package/neo-async) an altername implementation of Async, focusing on speed.
+* [`co-async`](https://www.npmjs.com/package/co-async) a library inspired by Async for use with [`co`](https://www.npmjs.com/package/co) and generator functions.
+* [`promise-async`](https://www.npmjs.com/package/promise-async) a version of Async where all the methods are Promisified.
diff --git a/lib/apply.js b/lib/apply.js
index d3fc18b..06f630a 100644
--- a/lib/apply.js
+++ b/lib/apply.js
@@ -1,4 +1,4 @@
-import rest from './internal/rest';
+import slice from './internal/slice';
/**
* Creates a continuation function with some arguments already applied.
@@ -12,10 +12,11 @@ import rest from './internal/rest';
* @memberOf module:Utils
* @method
* @category Util
- * @param {Function} function - The function you want to eventually apply all
+ * @param {Function} fn - The function you want to eventually apply all
* arguments to. Invokes with (arguments...).
* @param {...*} arguments... - Any number of arguments to automatically apply
* when the continuation is called.
+ * @returns {Function} the partially-applied function
* @example
*
* // using apply
@@ -44,8 +45,10 @@ import rest from './internal/rest';
* two
* three
*/
-export default rest(function(fn, args) {
- return rest(function(callArgs) {
+export default function(fn/*, ...args*/) {
+ var args = slice(arguments, 1);
+ return function(/*callArgs*/) {
+ var callArgs = slice(arguments);
return fn.apply(null, args.concat(callArgs));
- });
-});
+ };
+};
diff --git a/lib/asyncify.js b/lib/asyncify.js
index 96eea54..d5d0bee 100644
--- a/lib/asyncify.js
+++ b/lib/asyncify.js
@@ -1,5 +1,6 @@
import isObject from 'lodash/isObject';
import initialParams from './internal/initialParams';
+import setImmediate from './internal/setImmediate';
/**
* Take a sync function and make it async, passing its return value to a
@@ -20,7 +21,7 @@ import initialParams from './internal/initialParams';
* @method
* @alias wrapSync
* @category Util
- * @param {Function} func - The synchronous funuction, or Promise-returning
+ * @param {Function} func - The synchronous function, or Promise-returning
* function to convert to an {@link AsyncFunction}.
* @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be
* invoked with `(args..., callback)`.
@@ -68,12 +69,24 @@ export default function asyncify(func) {
// if result is Promise object
if (isObject(result) && typeof result.then === 'function') {
result.then(function(value) {
- callback(null, value);
+ invokeCallback(callback, null, value);
}, function(err) {
- callback(err.message ? err : new Error(err));
+ invokeCallback(callback, err.message ? err : new Error(err));
});
} else {
callback(null, result);
}
});
}
+
+function invokeCallback(callback, error, value) {
+ try {
+ callback(error, value);
+ } catch (e) {
+ setImmediate(rethrow, e);
+ }
+}
+
+function rethrow(error) {
+ throw error;
+}
diff --git a/lib/auto.js b/lib/auto.js
index ba0fdc3..e2c0ab9 100644
--- a/lib/auto.js
+++ b/lib/auto.js
@@ -4,8 +4,8 @@ import indexOf from 'lodash/_baseIndexOf';
import isArray from 'lodash/isArray';
import okeys from 'lodash/keys';
import noop from 'lodash/noop';
-import rest from './internal/rest';
+import slice from './internal/slice';
import once from './internal/once';
import onlyOnce from './internal/onlyOnce';
import wrapAsync from './internal/wrapAsync';
@@ -192,26 +192,26 @@ export default function (tasks, concurrency, callback) {
function runTask(key, task) {
if (hasError) return;
- var taskCallback = onlyOnce(rest(function(err, args) {
+ var taskCallback = onlyOnce(function(err, result) {
runningTasks--;
- if (args.length <= 1) {
- args = args[0];
+ if (arguments.length > 2) {
+ result = slice(arguments, 1);
}
if (err) {
var safeResults = {};
forOwn(results, function(val, rkey) {
safeResults[rkey] = val;
});
- safeResults[key] = args;
+ safeResults[key] = result;
hasError = true;
listeners = Object.create(null);
callback(err, safeResults);
} else {
- results[key] = args;
+ results[key] = result;
taskComplete(key);
}
- }));
+ });
runningTasks++;
var taskFn = wrapAsync(task[task.length - 1]);
diff --git a/lib/compose.js b/lib/compose.js
index 96632c0..d9fa760 100644
--- a/lib/compose.js
+++ b/lib/compose.js
@@ -1,5 +1,5 @@
import seq from './seq';
-import rest from './internal/rest';
+import slice from './internal/slice';
/**
* Creates a function which is a composition of the passed asynchronous
@@ -36,6 +36,6 @@ import rest from './internal/rest';
* // result now equals 15
* });
*/
-export default rest(function(args) {
- return seq.apply(null, args.reverse());
-});
+export default function(/*...args*/) {
+ return seq.apply(null, slice(arguments).reverse());
+};
diff --git a/lib/concat.js b/lib/concat.js
index 7edf759..b4857c9 100644
--- a/lib/concat.js
+++ b/lib/concat.js
@@ -1,5 +1,5 @@
-import concat from './internal/concat';
-import doParallel from './internal/doParallel';
+import doLimit from './internal/doLimit';
+import concatLimit from './concatLimit';
/**
* Applies `iteratee` to each item in `coll`, concatenating the results. Returns
@@ -26,4 +26,4 @@ import doParallel from './internal/doParallel';
* // files is now a list of filenames that exist in the 3 directories
* });
*/
-export default doParallel(concat);
+export default doLimit(concatLimit, Infinity);
diff --git a/lib/concatLimit.js b/lib/concatLimit.js
new file mode 100644
index 0000000..4df03ea
--- /dev/null
+++ b/lib/concatLimit.js
@@ -0,0 +1,44 @@
+import noop from 'lodash/noop';
+import wrapAsync from './internal/wrapAsync';
+import slice from './internal/slice';
+import mapLimit from './mapLimit';
+
+var _concat = Array.prototype.concat;
+
+/**
+ * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.
+ *
+ * @name concatLimit
+ * @static
+ * @memberOf module:Collections
+ * @method
+ * @see [async.concat]{@link module:Collections.concat}
+ * @category Collection
+ * @param {Array|Iterable|Object} coll - A collection to iterate over.
+ * @param {number} limit - The maximum number of async operations at a time.
+ * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,
+ * which should use an array as its result. Invoked with (item, callback).
+ * @param {Function} [callback] - A callback which is called after all the
+ * `iteratee` functions have finished, or an error occurs. Results is an array
+ * containing the concatenated results of the `iteratee` function. Invoked with
+ * (err, results).
+ */
+export default function(coll, limit, iteratee, callback) {
+ callback = callback || noop;
+ var _iteratee = wrapAsync(iteratee);
+ mapLimit(coll, limit, function(val, callback) {
+ _iteratee(val, function(err /*, ...args*/) {
+ if (err) return callback(err);
+ return callback(null, slice(arguments, 1));
+ });
+ }, function(err, mapResults) {
+ var result = [];
+ for (var i = 0; i < mapResults.length; i++) {
+ if (mapResults[i]) {
+ result = _concat.apply(result, mapResults[i]);
+ }
+ }
+
+ return callback(err, result);
+ });
+}
diff --git a/lib/concatSeries.js b/lib/concatSeries.js
index f5b3fab..26f5268 100644
--- a/lib/concatSeries.js
+++ b/lib/concatSeries.js
@@ -1,5 +1,5 @@
-import concat from './internal/concat';
-import doSeries from './internal/doSeries';
+import doLimit from './internal/doLimit';
+import concatLimit from './concatLimit';
/**
* The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.
@@ -19,4 +19,4 @@ import doSeries from './internal/doSeries';
* containing the concatenated results of the `iteratee` function. Invoked with
* (err, results).
*/
-export default doSeries(concat);
+export default doLimit(concatLimit, 1);
diff --git a/lib/constant.js b/lib/constant.js
index ae6ffd0..238ef61 100644
--- a/lib/constant.js
+++ b/lib/constant.js
@@ -1,5 +1,4 @@
-import rest from './internal/rest';
-import initialParams from './internal/initialParams';
+import slice from './internal/slice';
/**
* Returns a function that when called, calls-back with the values provided.
@@ -43,9 +42,11 @@ import initialParams from './internal/initialParams';
* //...
* }, callback);
*/
-export default rest(function(values) {
+export default function(/*...values*/) {
+ var values = slice(arguments);
var args = [null].concat(values);
- return initialParams(function (ignoredArgs, callback) {
+ return function (/*...ignoredArgs, callback*/) {
+ var callback = arguments[arguments.length - 1];
return callback.apply(this, args);
- });
-});
+ };
+};
diff --git a/lib/doDuring.js b/lib/doDuring.js
index 85a69c2..cce61d0 100644
--- a/lib/doDuring.js
+++ b/lib/doDuring.js
@@ -1,5 +1,5 @@
import noop from 'lodash/noop';
-import rest from './internal/rest';
+import slice from './internal/slice';
import onlyOnce from './internal/onlyOnce';
import wrapAsync from './internal/wrapAsync';
@@ -28,11 +28,12 @@ export default function doDuring(fn, test, callback) {
var _fn = wrapAsync(fn);
var _test = wrapAsync(test);
- var next = rest(function(err, args) {
- if (err) return callback(err);
+ function next(err/*, ...args*/) {
+ if (err) return callback(err);
+ var args = slice(arguments, 1);
args.push(check);
_test.apply(this, args);
- });
+ };
function check(err, truth) {
if (err) return callback(err);
diff --git a/lib/doWhilst.js b/lib/doWhilst.js
index 4407305..5e7d259 100644
--- a/lib/doWhilst.js
+++ b/lib/doWhilst.js
@@ -1,5 +1,5 @@
import noop from 'lodash/noop';
-import rest from './internal/rest';
+import slice from './internal/slice';
import onlyOnce from './internal/onlyOnce';
import wrapAsync from './internal/wrapAsync';
@@ -29,10 +29,11 @@ import wrapAsync from './internal/wrapAsync';
export default function doWhilst(iteratee, test, callback) {
callback = onlyOnce(callback || noop);
var _iteratee = wrapAsync(iteratee);
- var next = rest(function(err, args) {
+ var next = function(err/*, ...args*/) {
if (err) return callback(err);
+ var args = slice(arguments, 1);
if (test.apply(this, args)) return _iteratee(next);
callback.apply(null, [null].concat(args));
- });
+ };
_iteratee(next);
}
diff --git a/lib/index.js b/lib/index.js
index f1e8e98..0669152 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -63,92 +63,95 @@
* @module Utils
*/
-import applyEach from './applyEach';
-import applyEachSeries from './applyEachSeries';
-import apply from './apply';
-import asyncify from './asyncify';
-import auto from './auto';
-import autoInject from './autoInject';
-import cargo from './cargo';
-import compose from './compose';
-import concat from './concat';
-import concatSeries from './concatSeries';
-import constant from './constant';
-import detect from './detect';
-import detectLimit from './detectLimit';
-import detectSeries from './detectSeries';
-import dir from './dir';
-import doDuring from './doDuring';
-import doUntil from './doUntil';
-import doWhilst from './doWhilst';
-import during from './during';
-import each from './each';
-import eachLimit from './eachLimit';
-import eachOf from './eachOf';
-import eachOfLimit from './eachOfLimit';
-import eachOfSeries from './eachOfSeries';
-import eachSeries from './eachSeries';
-import ensureAsync from './ensureAsync';
-import every from './every';
-import everyLimit from './everyLimit';
-import everySeries from './everySeries';
-import filter from './filter';
-import filterLimit from './filterLimit';
-import filterSeries from './filterSeries';
-import forever from './forever';
-import groupBy from './groupBy';
-import groupByLimit from './groupByLimit';
-import groupBySeries from './groupBySeries';
-import log from './log';
-import map from './map';
-import mapLimit from './mapLimit';
-import mapSeries from './mapSeries';
-import mapValues from './mapValues';
-import mapValuesLimit from './mapValuesLimit';
-import mapValuesSeries from './mapValuesSeries';
-import memoize from './memoize';
-import nextTick from './nextTick';
-import parallel from './parallel';
-import parallelLimit from './parallelLimit';
-import priorityQueue from './priorityQueue';
-import queue from './queue';
-import race from './race';
-import reduce from './reduce';
-import reduceRight from './reduceRight';
-import reflect from './reflect';
-import reject from './reject';
-import reflectAll from './reflectAll';
-import rejectLimit from './rejectLimit';
-import rejectSeries from './rejectSeries';
-import retry from './retry';
-import retryable from './retryable';
-import seq from './seq';
-import series from './series';
-import setImmediate from './setImmediate';
-import some from './some';
-import someLimit from './someLimit';
-import someSeries from './someSeries';
-import sortBy from './sortBy';
-import timeout from './timeout';
-import times from './times';
-import timesLimit from './timesLimit';
-import timesSeries from './timesSeries';
-import transform from './transform';
-import unmemoize from './unmemoize';
-import until from './until';
-import waterfall from './waterfall';
-import whilst from './whilst';
+import apply from './apply'
+import applyEach from './applyEach'
+import applyEachSeries from './applyEachSeries'
+import asyncify from './asyncify'
+import auto from './auto'
+import autoInject from './autoInject'
+import cargo from './cargo'
+import compose from './compose'
+import concat from './concat'
+import concatLimit from './concatLimit'
+import concatSeries from './concatSeries'
+import constant from './constant'
+import detect from './detect'
+import detectLimit from './detectLimit'
+import detectSeries from './detectSeries'
+import dir from './dir'
+import doDuring from './doDuring'
+import doUntil from './doUntil'
+import doWhilst from './doWhilst'
+import during from './during'
+import each from './each'
+import eachLimit from './eachLimit'
+import eachOf from './eachOf'
+import eachOfLimit from './eachOfLimit'
+import eachOfSeries from './eachOfSeries'
+import eachSeries from './eachSeries'
+import ensureAsync from './ensureAsync'
+import every from './every'
+import everyLimit from './everyLimit'
+import everySeries from './everySeries'
+import filter from './filter'
+import filterLimit from './filterLimit'
+import filterSeries from './filterSeries'
+import forever from './forever'
+import groupBy from './groupBy'
+import groupByLimit from './groupByLimit'
+import groupBySeries from './groupBySeries'
+import log from './log'
+import map from './map'
+import mapLimit from './mapLimit'
+import mapSeries from './mapSeries'
+import mapValues from './mapValues'
+import mapValuesLimit from './mapValuesLimit'
+import mapValuesSeries from './mapValuesSeries'
+import memoize from './memoize'
+import nextTick from './nextTick'
+import parallel from './parallel'
+import parallelLimit from './parallelLimit'
+import priorityQueue from './priorityQueue'
+import queue from './queue'
+import race from './race'
+import reduce from './reduce'
+import reduceRight from './reduceRight'
+import reflect from './reflect'
+import reflectAll from './reflectAll'
+import reject from './reject'
+import rejectLimit from './rejectLimit'
+import rejectSeries from './rejectSeries'
+import retry from './retry'
+import retryable from './retryable'
+import seq from './seq'
+import series from './series'
+import setImmediate from './setImmediate'
+import some from './some'
+import someLimit from './someLimit'
+import someSeries from './someSeries'
+import sortBy from './sortBy'
+import timeout from './timeout'
+import times from './times'
+import timesLimit from './timesLimit'
+import timesSeries from './timesSeries'
+import transform from './transform'
+import tryEach from './tryEach'
+import unmemoize from './unmemoize'
+import until from './until'
+import waterfall from './waterfall'
+import whilst from './whilst'
export default {
+ apply: apply,
applyEach: applyEach,
applyEachSeries: applyEachSeries,
- apply: apply,
asyncify: asyncify,
auto: auto,
autoInject: autoInject,
cargo: cargo,
compose: compose,
concat: concat,
+ concatLimit: concatLimit,
concatSeries: concatSeries,
constant: constant,
detect: detect,
@@ -211,6 +214,7 @@ export default {
timesLimit: timesLimit,
timesSeries: timesSeries,
transform: transform,
+ tryEach: tryEach,
unmemoize: unmemoize,
until: until,
waterfall: waterfall,
@@ -218,7 +222,14 @@ export default {
// aliases
all: every,
+ allLimit: everyLimit,
+ allSeries: everySeries,
any: some,
+ anyLimit: someLimit,
+ anySeries: someSeries,
+ find: detect,
+ findLimit: detectLimit,
+ findSeries: detectSeries,
forEach: each,
forEachSeries: eachSeries,
forEachLimit: eachLimit,
@@ -235,15 +246,16 @@ export default {
};
export {
+ apply as apply,
applyEach as applyEach,
applyEachSeries as applyEachSeries,
- apply as apply,
asyncify as asyncify,
auto as auto,
autoInject as autoInject,
cargo as cargo,
compose as compose,
concat as concat,
+ concatLimit as concatLimit,
concatSeries as concatSeries,
constant as constant,
detect as detect,
@@ -306,6 +318,7 @@ export {
timesLimit as timesLimit,
timesSeries as timesSeries,
transform as transform,
+ tryEach as tryEach,
unmemoize as unmemoize,
until as until,
waterfall as waterfall,
@@ -335,3 +348,4 @@ export {
filterSeries as selectSeries,
asyncify as wrapSync
};
+
diff --git a/lib/internal/DoublyLinkedList.js b/lib/internal/DoublyLinkedList.js
index 79c3bb5..86c5cfd 100644
--- a/lib/internal/DoublyLinkedList.js
+++ b/lib/internal/DoublyLinkedList.js
@@ -23,7 +23,10 @@ DLL.prototype.removeLink = function(node) {
return node;
}
-DLL.prototype.empty = DLL;
+DLL.prototype.empty = function () {
+ while(this.head) this.shift();
+ return this;
+};
DLL.prototype.insertAfter = function(node, newNode) {
newNode.prev = node;
@@ -60,3 +63,25 @@ DLL.prototype.shift = function() {
DLL.prototype.pop = function() {
return this.tail && this.removeLink(this.tail);
};
+
+DLL.prototype.toArray = function () {
+ var arr = Array(this.length);
+ var curr = this.head;
+ for(var idx = 0; idx < this.length; idx++) {
+ arr[idx] = curr.data;
+ curr = curr.next;
+ }
+ return arr;
+}
+
+DLL.prototype.remove = function (testFn) {
+ var curr = this.head;
+ while(!!curr) {
+ var next = curr.next;
+ if (testFn(curr)) {
+ this.removeLink(curr);
+ }
+ curr = next;
+ }
+ return this;
+}
diff --git a/lib/internal/applyEach.js b/lib/internal/applyEach.js
index 285a6a2..c0ed402 100644
--- a/lib/internal/applyEach.js
+++ b/lib/internal/applyEach.js
@@ -1,9 +1,10 @@
-import rest from './rest';
+import slice from './slice';
import initialParams from './initialParams';
import wrapAsync from './wrapAsync';
export default function applyEach(eachfn) {
- return rest(function(fns, args) {
+ return function(fns/*, ...args*/) {
+ var args = slice(arguments, 1);
var go = initialParams(function(args, callback) {
var that = this;
return eachfn(fns, function (fn, cb) {
@@ -16,5 +17,5 @@ export default function applyEach(eachfn) {
else {
return go;
}
- });
+ };
}
diff --git a/lib/internal/concat.js b/lib/internal/concat.js
deleted file mode 100644
index a55de2e..0000000
--- a/lib/internal/concat.js
+++ /dev/null
@@ -1,11 +0,0 @@
-export default function concat(eachfn, arr, fn, callback) {
- var result = [];
- eachfn(arr, function (x, index, cb) {
- fn(x, function (err, y) {
- result = result.concat(y || []);
- cb(err);
- });
- }, function (err) {
- callback(err, result);
- });
-}
diff --git a/lib/internal/consoleFunc.js b/lib/internal/consoleFunc.js
index 35374d7..eb2e886 100644
--- a/lib/internal/consoleFunc.js
+++ b/lib/internal/consoleFunc.js
@@ -1,22 +1,24 @@
import arrayEach from 'lodash/_arrayEach';
-import rest from './rest';
+import slice from './slice';
import wrapAsync from './wrapAsync';
export default function consoleFunc(name) {
- return rest(function (fn, args) {
- wrapAsync(fn).apply(null, args.concat(rest(function (err, args) {
+ return function (fn/*, ...args*/) {
+ var args = slice(arguments, 1);
+ args.push(function (err/*, ...args*/) {
+ var args = slice(arguments, 1);
if (typeof console === 'object') {
if (err) {
if (console.error) {
console.error(err);
}
- }
- else if (console[name]) {
+ } else if (console[name]) {
arrayEach(args, function (x) {
console[name](x);
});
}
}
- })));
- });
+ })
+ wrapAsync(fn).apply(null, args);
+ };
}
diff --git a/lib/internal/doSeries.js b/lib/internal/doSeries.js
deleted file mode 100644
index 9fea488..0000000
--- a/lib/internal/doSeries.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import eachOfSeries from '../eachOfSeries';
-import wrapAsync from './wrapAsync';
-
-export default function doSeries(fn) {
- return function (obj, iteratee, callback) {
- return fn(eachOfSeries, obj, wrapAsync(iteratee), callback);
- };
-}
diff --git a/lib/internal/eachOfLimit.js b/lib/internal/eachOfLimit.js
index 487ec3f..7abad94 100644
--- a/lib/internal/eachOfLimit.js
+++ b/lib/internal/eachOfLimit.js
@@ -15,6 +15,7 @@ export default function _eachOfLimit(limit) {
var nextElem = iterator(obj);
var done = false;
var running = 0;
+ var looping = false;
function iterateeCallback(err, value) {
running -= 1;
@@ -26,12 +27,13 @@ export default function _eachOfLimit(limit) {
done = true;
return callback(null);
}
- else {
+ else if (!looping) {
replenish();
}
}
function replenish () {
+ looping = true;
while (running < limit && !done) {
var elem = nextElem();
if (elem === null) {
@@ -44,6 +46,7 @@ export default function _eachOfLimit(limit) {
running += 1;
iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));
}
+ looping = false;
}
replenish();
diff --git a/lib/internal/initialParams.js b/lib/internal/initialParams.js
index cf30386..2079703 100644
--- a/lib/internal/initialParams.js
+++ b/lib/internal/initialParams.js
@@ -1,8 +1,9 @@
-import rest from './rest';
+import slice from './slice';
export default function (fn) {
- return rest(function (args/*..., callback*/) {
+ return function (/*...args, callback*/) {
+ var args = slice(arguments);
var callback = args.pop();
fn.call(this, args, callback);
- });
+ };
}
diff --git a/lib/internal/parallel.js b/lib/internal/parallel.js
index 70993d3..f4e9347 100644
--- a/lib/internal/parallel.js
+++ b/lib/internal/parallel.js
@@ -1,6 +1,6 @@
import noop from 'lodash/noop';
import isArrayLike from 'lodash/isArrayLike';
-import rest from './rest';
+import slice from './slice';
import wrapAsync from './wrapAsync';
export default function _parallel(eachfn, tasks, callback) {
@@ -8,13 +8,13 @@ export default function _parallel(eachfn, tasks, callback) {
var results = isArrayLike(tasks) ? [] : {};
eachfn(tasks, function (task, key, callback) {
- wrapAsync(task)(rest(function (err, args) {
- if (args.length <= 1) {
- args = args[0];
+ wrapAsync(task)(function (err, result) {
+ if (arguments.length > 2) {
+ result = slice(arguments, 1);
}
- results[key] = args;
+ results[key] = result;
callback(err);
- }));
+ });
}, function (err) {
callback(err, results);
});
diff --git a/lib/internal/queue.js b/lib/internal/queue.js
index 479eaf8..1a3f4cb 100644
--- a/lib/internal/queue.js
+++ b/lib/internal/queue.js
@@ -1,7 +1,6 @@
import indexOf from 'lodash/_baseIndexOf';
import isArray from 'lodash/isArray';
import noop from 'lodash/noop';
-import rest from './rest';
import onlyOnce from './onlyOnce';
import setImmediate from './setImmediate';
@@ -20,6 +19,7 @@ export default function queue(worker, concurrency, payload) {
var numRunning = 0;
var workersList = [];
+ var processingScheduled = false;
function _insert(data, insertAtFront, callback) {
if (callback != null && typeof callback !== 'function') {
throw new Error('task callback must be a function');
@@ -47,24 +47,34 @@ export default function queue(worker, concurrency, payload) {
q._tasks.push(item);
}
}
- setImmediate(q.process);
+
+ if (!processingScheduled) {
+ processingScheduled = true;
+ setImmediate(function() {
+ processingScheduled = false;
+ q.process();
+ });
+ }
}
function _next(tasks) {
- return rest(function(args){
+ return function(err){
numRunning -= 1;
for (var i = 0, l = tasks.length; i < l; i++) {
var task = tasks[i];
+
var index = indexOf(workersList, task, 0);
- if (index >= 0) {
- workersList.splice(index)
+ if (index === 0) {
+ workersList.shift();
+ } else if (index > 0) {
+ workersList.splice(index, 1);
}
- task.callback.apply(task, args);
+ task.callback.apply(task, arguments);
- if (args[0] != null) {
- q.error(args[0], task.data);
+ if (err != null) {
+ q.error(err, task.data);
}
}
@@ -76,7 +86,7 @@ export default function queue(worker, concurrency, payload) {
q.drain();
}
q.process();
- });
+ };
}
var isProcessing = false;
@@ -102,6 +112,9 @@ export default function queue(worker, concurrency, payload) {
unshift: function (data, callback) {
_insert(data, true, callback);
},
+ remove: function (testFn) {
+ q._tasks.remove(testFn);
+ },
process: function () {
// Avoid trying to start too many processing operations. This can occur
// when callbacks resolve synchronously (#1267).
@@ -116,11 +129,11 @@ export default function queue(worker, concurrency, payload) {
for (var i = 0; i < l; i++) {
var node = q._tasks.shift();
tasks.push(node);
+ workersList.push(node);
data.push(node.data);
}
numRunning += 1;
- workersList.push(tasks[0]);
if (q._tasks.length === 0) {
q.empty();
diff --git a/lib/internal/rest.js b/lib/internal/rest.js
deleted file mode 100644
index ee70cc6..0000000
--- a/lib/internal/rest.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import _overRest from 'lodash/_overRest';
-import identity from 'lodash/identity';
-
-// Lodash rest function without function.toString()
-// remappings
-export default function rest(func, start) {
- return _overRest(func, start, identity);
-}
diff --git a/lib/internal/setImmediate.js b/lib/internal/setImmediate.js
index c8824c7..95191f9 100644
--- a/lib/internal/setImmediate.js
+++ b/lib/internal/setImmediate.js
@@ -1,6 +1,6 @@
'use strict';
-import rest from './rest';
+import slice from './slice';
export var hasSetImmediate = typeof setImmediate === 'function' && setImmediate;
export var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';
@@ -10,11 +10,12 @@ export function fallback(fn) {
}
export function wrap(defer) {
- return rest(function (fn, args) {
+ return function (fn/*, ...args*/) {
+ var args = slice(arguments, 1);
defer(function () {
fn.apply(null, args);
});
- });
+ };
}
var _defer;
diff --git a/lib/internal/slice.js b/lib/internal/slice.js
new file mode 100644
index 0000000..cd2e5b3
--- /dev/null
+++ b/lib/internal/slice.js
@@ -0,0 +1,9 @@
+export default function slice(arrayLike, start) {
+ start = start|0;
+ var newLen = Math.max(arrayLike.length - start, 0);
+ var newArr = Array(newLen);
+ for(var idx = 0; idx < newLen; idx++) {
+ newArr[idx] = arrayLike[start + idx];
+ }
+ return newArr;
+}
diff --git a/lib/internal/wrapAsync.js b/lib/internal/wrapAsync.js
index aee0275..c4d1ea8 100644
--- a/lib/internal/wrapAsync.js
+++ b/lib/internal/wrapAsync.js
@@ -1,19 +1,7 @@
-import identity from 'lodash/identity';
import asyncify from '../asyncify';
var supportsSymbol = typeof Symbol === 'function';
-function supportsAsync() {
- var supported;
- try {
- /* eslint no-eval: 0 */
- supported = isAsync(eval('(async function () {})'));
- } catch (e) {
- supported = false;
- }
- return supported;
-}
-
function isAsync(fn) {
return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction';
}
@@ -22,6 +10,6 @@ function wrapAsync(asyncFn) {
return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;
}
-export default supportsAsync() ? wrapAsync : identity;
+export default wrapAsync;
-export { supportsAsync, isAsync };
+export { isAsync };
diff --git a/lib/memoize.js b/lib/memoize.js
index de71c33..27c08bc 100644
--- a/lib/memoize.js
+++ b/lib/memoize.js
@@ -1,5 +1,5 @@
import identity from 'lodash/identity';
-import rest from './internal/rest';
+import slice from './internal/slice';
import setImmediate from './internal/setImmediate';
import initialParams from './internal/initialParams';
@@ -61,14 +61,15 @@ export default function memoize(fn, hasher) {
queues[key].push(callback);
} else {
queues[key] = [callback];
- _fn.apply(null, args.concat(rest(function(args) {
+ _fn.apply(null, args.concat(function(/*args*/) {
+ var args = slice(arguments);
memo[key] = args;
var q = queues[key];
delete queues[key];
for (var i = 0, l = q.length; i < l; i++) {
q[i].apply(null, args);
}
- })));
+ }));
}
});
memoized.memo = memo;
diff --git a/lib/nextTick.js b/lib/nextTick.js
index 62d20de..fb63898 100644
--- a/lib/nextTick.js
+++ b/lib/nextTick.js
@@ -4,7 +4,7 @@ import { hasNextTick, hasSetImmediate, fallback, wrap } from './internal/setImm
/**
* Calls `callback` on a later loop around the event loop. In Node.js this just
- * calls `setImmediate`. In the browser it will use `setImmediate` if
+ * calls `process.nextTick`. In the browser it will use `setImmediate` if
* available, otherwise `setTimeout(callback, 0)`, which means other higher
* priority events may precede the execution of `callback`.
*
@@ -14,7 +14,7 @@ import { hasNextTick, hasSetImmediate, fallback, wrap } from './internal/setImm
* @static
* @memberOf module:Utils
* @method
- * @alias setImmediate
+ * @see [async.setImmediate]{@link module:Utils.setImmediate}
* @category Util
* @param {Function} callback - The function to call on a later loop around
* the event loop. Invoked with (args...).
diff --git a/lib/queue.js b/lib/queue.js
index 906467c..2ba1747 100644
--- a/lib/queue.js
+++ b/lib/queue.js
@@ -24,6 +24,12 @@ import wrapAsync from './internal/wrapAsync';
* task in the list. Invoke with `queue.push(task, [callback])`,
* @property {Function} unshift - add a new task to the front of the `queue`.
* Invoke with `queue.unshift(task, [callback])`.
+ * @property {Function} remove - remove items from the queue that match a test
+ * function. The test function will be passed an object with a `data` property,
+ * and a `priority` property, if this is a
+ * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.
+ * Invoked with `queue.remove(testFn)`, where `testFn` is of the form
+ * `function ({data, priority}) {}` and returns a Boolean.
* @property {Function} saturated - a callback that is called when the number of
* running workers hits the `concurrency` limit, and further tasks will be
* queued.
@@ -45,7 +51,8 @@ import wrapAsync from './internal/wrapAsync';
* @property {Function} resume - a function that resumes the processing of
* queued tasks when the queue is paused. Invoke with `queue.resume()`.
* @property {Function} kill - a function that removes the `drain` callback and
- * empties remaining tasks from the queue forcing it to go idle. Invoke with `queue.kill()`.
+ * empties remaining tasks from the queue forcing it to go idle. No more tasks
+ * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.
*/
/**
diff --git a/lib/reduceRight.js b/lib/reduceRight.js
index ca5aa7f..1d203c9 100644
--- a/lib/reduceRight.js
+++ b/lib/reduceRight.js
@@ -1,6 +1,5 @@
import reduce from './reduce';
-
-var slice = Array.prototype.slice;
+import slice from './internal/slice';
/**
* Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.
@@ -25,6 +24,6 @@ var slice = Array.prototype.slice;
* (err, result).
*/
export default function reduceRight (array, memo, iteratee, callback) {
- var reversed = slice.call(array).reverse();
+ var reversed = slice(array).reverse();
reduce(reversed, memo, iteratee, callback);
}
diff --git a/lib/reflect.js b/lib/reflect.js
index 9e0613b..f50d817 100644
--- a/lib/reflect.js
+++ b/lib/reflect.js
@@ -1,5 +1,5 @@
import initialParams from './internal/initialParams';
-import rest from './internal/rest';
+import slice from './internal/slice';
import wrapAsync from './internal/wrapAsync';
/**
@@ -44,23 +44,19 @@ import wrapAsync from './internal/wrapAsync';
export default function reflect(fn) {
var _fn = wrapAsync(fn);
return initialParams(function reflectOn(args, reflectCallback) {
- args.push(rest(function callback(err, cbArgs) {
- if (err) {
- reflectCallback(null, {
- error: err
- });
+ args.push(function callback(error, cbArg) {
+ if (error) {
+ reflectCallback(null, { error: error });
} else {
- var value = null;
- if (cbArgs.length === 1) {
- value = cbArgs[0];
- } else if (cbArgs.length > 1) {
- value = cbArgs;
+ var value;
+ if (arguments.length <= 2) {
+ value = cbArg
+ } else {
+ value = slice(arguments, 1);
}
- reflectCallback(null, {
- value: value
- });
+ reflectCallback(null, { value: value });
}
- }));
+ });
return _fn.apply(this, args);
});
diff --git a/lib/retry.js b/lib/retry.js
index bd60644..391a4fa 100644
--- a/lib/retry.js
+++ b/lib/retry.js
@@ -76,8 +76,8 @@ import wrapAsync from './internal/wrapAsync';
* // do something with the result
* });
*
- * // It can also be embedded within other control flow functions to retry
- * // individual methods that are not as reliable, like this:
+ * // to retry individual methods that are not as reliable within other
+ * // control flow functions, use the `retryable` wrapper:
* async.auto({
* users: api.getUsers.bind(api),
* payments: async.retryable(3, api.getPayments.bind(api))
diff --git a/lib/seq.js b/lib/seq.js
index 4fceceb..8d31e49 100644
--- a/lib/seq.js
+++ b/lib/seq.js
@@ -1,5 +1,5 @@
import noop from 'lodash/noop';
-import rest from './internal/rest';
+import slice from './internal/slice';
import reduce from './reduce';
import wrapAsync from './internal/wrapAsync';
import arrayMap from 'lodash/_arrayMap';
@@ -42,9 +42,10 @@ import arrayMap from 'lodash/_arrayMap';
* });
* });
*/
-export default rest(function seq(functions) {
- var _functions = arrayMap(functions, wrapAsync);
- return rest(function(args) {
+export default function seq(/*...functions*/) {
+ var _functions = arrayMap(arguments, wrapAsync);
+ return function(/*...args*/) {
+ var args = slice(arguments);
var that = this;
var cb = args[args.length - 1];
@@ -55,12 +56,13 @@ export default rest(function seq(functions) {
}
reduce(_functions, args, function(newargs, fn, cb) {
- fn.apply(that, newargs.concat(rest(function(err, nextargs) {
+ fn.apply(that, newargs.concat(function(err/*, ...nextargs*/) {
+ var nextargs = slice(arguments, 1);
cb(err, nextargs);
- })));
+ }));
},
function(err, results) {
cb.apply(that, [err].concat(results));
});
- });
-})
+ };
+}
diff --git a/lib/setImmediate.js b/lib/setImmediate.js
index f820b46..8476071 100644
--- a/lib/setImmediate.js
+++ b/lib/setImmediate.js
@@ -12,7 +12,7 @@ import setImmediate from './internal/setImmediate';
* @static
* @memberOf module:Utils
* @method
- * @alias nextTick
+ * @see [async.nextTick]{@link module:Utils.nextTick}
* @category Util
* @param {Function} callback - The function to call on a later loop around
* the event loop. Invoked with (args...).
diff --git a/lib/timeout.js b/lib/timeout.js
index 475b208..ebd81b1 100644
--- a/lib/timeout.js
+++ b/lib/timeout.js
@@ -43,33 +43,32 @@ import wrapAsync from './internal/wrapAsync';
* });
*/
export default function timeout(asyncFn, milliseconds, info) {
- var originalCallback, timer;
- var timedOut = false;
+ var fn = wrapAsync(asyncFn);
- function injectedCallback() {
- if (!timedOut) {
- originalCallback.apply(null, arguments);
- clearTimeout(timer);
- }
- }
+ return initialParams(function (args, callback) {
+ var timedOut = false;
+ var timer;
- function timeoutCallback() {
- var name = asyncFn.name || 'anonymous';
- var error = new Error('Callback function "' + name + '" timed out.');
- error.code = 'ETIMEDOUT';
- if (info) {
- error.info = info;
+ function timeoutCallback() {
+ var name = asyncFn.name || 'anonymous';
+ var error = new Error('Callback function "' + name + '" timed out.');
+ error.code = 'ETIMEDOUT';
+ if (info) {
+ error.info = info;
+ }
+ timedOut = true;
+ callback(error);
}
- timedOut = true;
- originalCallback(error);
- }
- var fn = wrapAsync(asyncFn);
+ args.push(function () {
+ if (!timedOut) {
+ callback.apply(null, arguments);
+ clearTimeout(timer);
+ }
+ });
- return initialParams(function (args, origCallback) {
- originalCallback = origCallback;
// setup timer and call original function
timer = setTimeout(timeoutCallback, milliseconds);
- fn.apply(null, args.concat(injectedCallback));
+ fn.apply(null, args);
});
}
diff --git a/lib/tryEach.js b/lib/tryEach.js
new file mode 100644
index 0000000..df9b68f
--- /dev/null
+++ b/lib/tryEach.js
@@ -0,0 +1,60 @@
+import noop from 'lodash/noop';
+import eachSeries from './eachSeries';
+import wrapAsync from './internal/wrapAsync';
+import slice from './internal/slice';
+
+/**
+ * It runs each task in series but stops whenever any of the functions were
+ * successful. If one of the tasks were successful, the `callback` will be
+ * passed the result of the successful task. If all tasks fail, the callback
+ * will be passed the error and result (if any) of the final attempt.
+ *
+ * @name tryEach
+ * @static
+ * @memberOf module:ControlFlow
+ * @method
+ * @category Control Flow
+ * @param {Array|Iterable|Object} tasks - A collection containing functions to
+ * run, each function is passed a `callback(err, result)` it must call on
+ * completion with an error `err` (which can be `null`) and an optional `result`
+ * value.
+ * @param {Function} [callback] - An optional callback which is called when one
+ * of the tasks has succeeded, or all have failed. It receives the `err` and
+ * `result` arguments of the last attempt at completing the `task`. Invoked with
+ * (err, results).
+ * @example
+ * async.tryEach([
+ * function getDataFromFirstWebsite(callback) {
+ * // Try getting the data from the first website
+ * callback(err, data);
+ * },
+ * function getDataFromSecondWebsite(callback) {
+ * // First website failed,
+ * // Try getting the data from the backup website
+ * callback(err, data);
+ * }
+ * ],
+ * // optional callback
+ * function(err, results) {
+ * Now do something with the data.
+ * });
+ *
+ */
+export default function tryEach(tasks, callback) {
+ var error = null;
+ var result;
+ callback = callback || noop;
+ eachSeries(tasks, function(task, callback) {
+ wrapAsync(task)(function (err, res/*, ...args*/) {
+ if (arguments.length > 2) {
+ result = slice(arguments, 1);
+ } else {
+ result = res;
+ }
+ error = err;
+ callback(!err);
+ });
+ }, function () {
+ callback(error, result);
+ });
+}
diff --git a/lib/waterfall.js b/lib/waterfall.js
index 24befac..092f3ac 100644
--- a/lib/waterfall.js
+++ b/lib/waterfall.js
@@ -1,7 +1,7 @@
import isArray from 'lodash/isArray';
import noop from 'lodash/noop';
import once from './internal/once';
-import rest from './internal/rest';
+import slice from './internal/slice';
import onlyOnce from './internal/onlyOnce';
import wrapAsync from './internal/wrapAsync';
@@ -70,22 +70,17 @@ export default function(tasks, callback) {
var taskIndex = 0;
function nextTask(args) {
- if (taskIndex === tasks.length) {
- return callback.apply(null, [null].concat(args));
- }
-
- var taskCallback = onlyOnce(rest(function(err, args) {
- if (err) {
- return callback.apply(null, [err].concat(args));
- }
- nextTask(args);
- }));
-
- args.push(taskCallback);
-
var task = wrapAsync(tasks[taskIndex++]);
+ args.push(onlyOnce(next));
task.apply(null, args);
}
+ function next(err/*, ...args*/) {
+ if (err || taskIndex === tasks.length) {
+ return callback.apply(null, arguments);
+ }
+ nextTask(slice(arguments, 1));
+ }
+
nextTask([]);
}
diff --git a/lib/whilst.js b/lib/whilst.js
index 57edad6..6c2869e 100644
--- a/lib/whilst.js
+++ b/lib/whilst.js
@@ -1,5 +1,5 @@
import noop from 'lodash/noop';
-import rest from './internal/rest';
+import slice from './internal/slice';
import onlyOnce from './internal/onlyOnce';
import wrapAsync from './internal/wrapAsync';
@@ -42,10 +42,11 @@ export default function whilst(test, iteratee, callback) {
callback = onlyOnce(callback || noop);
var _iteratee = wrapAsync(iteratee);
if (!test()) return callback(null);
- var next = rest(function(err, args) {
+ var next = function(err/*, ...args*/) {
if (err) return callback(err);
if (test()) return _iteratee(next);
+ var args = slice(arguments, 1);
callback.apply(null, [null].concat(args));
- });
+ };
_iteratee(next);
}
diff --git a/mocha_test/applyEach.js b/mocha_test/applyEach.js
index 6138d3f..ca5ada3 100644
--- a/mocha_test/applyEach.js
+++ b/mocha_test/applyEach.js
@@ -11,21 +11,21 @@ describe('applyEach', function () {
setTimeout(function () {
call_order.push('one');
cb(null, 1);
- }, 10);
+ }, 12);
};
var two = function (val, cb) {
expect(val).to.equal(5);
setTimeout(function () {
call_order.push('two');
cb(null, 2);
- }, 5);
+ }, 2);
};
var three = function (val, cb) {
expect(val).to.equal(5);
setTimeout(function () {
call_order.push('three');
cb(null, 3);
- }, 15);
+ }, 18);
};
async.applyEach([one, two, three], 5, function (err, results) {
assert(err === null, err + " passed instead of 'null'");
diff --git a/mocha_test/asyncFunctions.js b/mocha_test/asyncFunctions.js
index b756a90..3b759e1 100644
--- a/mocha_test/asyncFunctions.js
+++ b/mocha_test/asyncFunctions.js
@@ -1,4 +1,15 @@
-var supportsAsync = require('../lib/internal/wrapAsync').supportsAsync;
+var isAsync = require('../lib/internal/wrapAsync').isAsync;
+
+function supportsAsync() {
+ var supported;
+ try {
+ /* eslint no-eval: 0 */
+ supported = isAsync(eval('(async function () {})'));
+ } catch (e) {
+ supported = false;
+ }
+ return supported;
+}
describe('async function support', function () {
this.timeout(100);
diff --git a/mocha_test/asyncify.js b/mocha_test/asyncify.js
index a98826c..112b8ad 100644
--- a/mocha_test/asyncify.js
+++ b/mocha_test/asyncify.js
@@ -92,7 +92,9 @@ describe('asyncify', function(){
});
});
- it('callback error', function(done) {
+ it('callback error @nodeonly', function(done) {
+ expectUncaughtException();
+
var promisified = function(argument) {
return new Promise(function (resolve) {
resolve(argument + " resolved");
@@ -105,11 +107,30 @@ describe('asyncify', function(){
throw new Error("error in callback");
}
});
+
setTimeout(function () {
expect(call_count).to.equal(1);
done();
}, 15);
});
+
+ it('dont catch errors in the callback @nodeonly', function(done) {
+ expectUncaughtException(checkErr);
+ var callbackError = new Error('thrown from callback');
+
+ function checkErr(err) {
+ expect(err).to.equal(callbackError);
+ done();
+ }
+
+ function callback() {
+ throw callbackError;
+ }
+
+ async.asyncify(function () {
+ return Promise.reject(new Error('rejection'));
+ })(callback);
+ });
}
describe('native-promise-only', function() {
@@ -134,5 +155,20 @@ describe('asyncify', function(){
var Promise = require('rsvp').Promise;
promisifiedTests.call(this, Promise);
});
+
+ function expectUncaughtException(onError) {
+ // do a weird dance to catch the async thrown error before mocha
+ var listeners = process.listeners('uncaughtException');
+ process.removeAllListeners('uncaughtException');
+ process.once('uncaughtException', function onErr(err) {
+ listeners.forEach(function(listener) {
+ process.on('uncaughtException', listener);
+ });
+ // can't throw errors in a uncaughtException handler, defer
+ if (onError) {
+ setTimeout(onError, 0, err);
+ }
+ });
+ }
});
});
diff --git a/mocha_test/cargo.js b/mocha_test/cargo.js
index 235b9a2..55e6e96 100644
--- a/mocha_test/cargo.js
+++ b/mocha_test/cargo.js
@@ -236,7 +236,7 @@ describe('cargo', function () {
it('expose payload', function (done) {
var called_once = false;
- var cargo= async.cargo(function(tasks, cb) {
+ var cargo = async.cargo(function(tasks, cb) {
if (!called_once) {
expect(cargo.payload).to.equal(1);
assert(tasks.length === 1, 'should start with payload = 1');
@@ -261,4 +261,57 @@ describe('cargo', function () {
}, 15);
});
+ it('workersList', function(done) {
+ var called_once = false;
+
+ function getWorkersListData(cargo) {
+ return cargo.workersList().map(function(v) {
+ return v.data;
+ });
+ }
+
+ var cargo = async.cargo(function(tasks, cb) {
+ if (!called_once) {
+ expect(tasks).to.eql(['foo', 'bar']);
+ } else {
+ expect(tasks).to.eql(['baz']);
+ }
+ expect(getWorkersListData(cargo)).to.eql(tasks);
+ async.setImmediate(function() {
+ // ensure nothing has changed
+ expect(getWorkersListData(cargo)).to.eql(tasks);
+ called_once = true;
+ cb();
+ });
+ }, 2);
+
+ cargo.drain = function() {
+ expect(cargo.workersList()).to.eql([]);
+ expect(cargo.running()).to.equal(0);
+ done();
+ };
+
+ cargo.push('foo');
+ cargo.push('bar');
+ cargo.push('baz');
+ });
+
+ it('running', function(done) {
+ var cargo = async.cargo(function(tasks, cb) {
+ expect(cargo.running()).to.equal(1);
+ async.setImmediate(function() {
+ expect(cargo.running()).to.equal(1);
+ cb();
+ });
+ }, 2);
+
+ cargo.drain = function() {
+ expect(cargo.running()).to.equal(0);
+ done();
+ };
+
+ cargo.push('foo');
+ cargo.push('bar');
+ cargo.push('baz');
+ })
});
diff --git a/mocha_test/concat.js b/mocha_test/concat.js
index 389b2de..f6b73b3 100644
--- a/mocha_test/concat.js
+++ b/mocha_test/concat.js
@@ -3,55 +3,415 @@ var expect = require('chai').expect;
var assert = require('assert');
describe('concat', function() {
- it('concat', function(done) {
- var call_order = [];
- var iteratee = function (x, cb) {
- setTimeout(function(){
- call_order.push(x);
- var r = [];
- while (x > 0) {
- r.push(x);
- x--;
+ this.timeout(250);
+
+ function concatIteratee(callOrder, val, next) {
+ setTimeout(function() {
+ callOrder.push(val);
+ next(null, [val, val+1]);
+ }, val * 25);
+ }
+
+ context('concat', function() {
+ it('basics', function(done) {
+ var callOrder = [];
+ async.concat([1, 3, 2], concatIteratee.bind(this, callOrder), function(err, result) {
+ expect(err).to.eql(null);
+ expect(callOrder).to.eql([1, 2, 3]);
+ expect(result).to.eql([1, 2, 3, 4, 2, 3]);
+ done();
+ });
+ });
+
+ it('error', function(done) {
+ async.concat([1, 3, 2], function(val, next) {
+ if (val === 3) {
+ return next(new Error('fail'));
}
- cb(null, r);
- }, x*25);
- };
- async.concat([1,3,2], iteratee, function(err, results){
- expect(results).to.eql([1,2,1,3,2,1]);
- expect(call_order).to.eql([1,2,3]);
- assert(err === null, err + " passed instead of 'null'");
- done();
+ next(null, [val, val+1]);
+ }, function(err, result) {
+ expect(err).to.not.eql(null);
+ expect(result).to.eql([1, 2]);
+ done();
+ });
+ });
+
+ it('original untouched', function(done) {
+ var arr = ['foo', 'bar', 'baz'];
+ async.concat(arr, function(val, next) {
+ next(null, [val, val]);
+ }, function(err, result) {
+ expect(arr).to.eql(['foo', 'bar', 'baz']);
+ expect(result).to.eql(['foo', 'foo', 'bar', 'bar', 'baz', 'baz']);
+ done();
+ });
+ });
+
+ it('empty results', function(done) {
+ var arr = ['foo', 'bar', 'baz'];
+ async.concat(arr, function(val, next) {
+ next(null);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ done();
+ });
+ });
+
+ it('empty arrays', function(done) {
+ var arr = ['foo', 'bar', 'baz'];
+ async.concat(arr, function(val, next) {
+ next(null, []);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ done();
+ });
+ });
+
+ it('handles empty object', function(done) {
+ async.concat({}, function(val, next) {
+ assert(false, 'iteratee should not be called');
+ next();
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ done();
+ });
+ });
+
+ it('variadic', function(done) {
+ var arr = ['foo', 'bar', 'baz'];
+ async.concat(arr, function(val, next) {
+ next(null, val, val);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql(['foo', 'foo', 'bar', 'bar', 'baz', 'baz']);
+ done();
+ });
+ });
+
+ it('flattens arrays', function(done) {
+ var arr = ['foo', 'bar'];
+ async.concat(arr, function(val, next) {
+ next(null, [val, [val]]);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql(['foo', ['foo'], 'bar', ['bar']]);
+ done();
+ });
+ });
+
+ it('handles fasly values', function(done) {
+ var falsy = [null, undefined, 0, ''];
+ async.concat(falsy, function(val, next) {
+ next(null, val);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql(falsy);
+ done();
+ });
+ });
+
+ it('handles objects', function(done) {
+ var obj = {a: 'foo', b: 'bar', c: 'baz'};
+ async.concat(obj, function(val, next) {
+ next(null, val);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql(['foo', 'bar', 'baz']);
+ done();
+ });
+ });
+
+ it('main callback optional', function(done) {
+ var arr = [1, 2, 3];
+ var runs = [];
+ async.concat(arr, function(val, next) {
+ runs.push(val);
+ var _done = (runs.length === arr.length);
+ async.setImmediate(function() {
+ next(null);
+ if (_done) {
+ expect(runs).to.eql(arr);
+ done();
+ }
+ });
+ });
+ });
+
+ it('iteratee callback is only called once', function(done) {
+ async.concat([1, 2], function(val, next) {
+ try {
+ next(val);
+ } catch (exception) {
+ expect(function() {
+ next(exception);
+ }).to.throw(/already called/);
+ done();
+ }
+ }, function() {
+ throw new Error();
+ });
+ });
+
+ it('preserves order', function(done) {
+ var arr = [30, 15];
+ async.concat(arr, function(x, cb) {
+ setTimeout(function() {
+ cb(null, x);
+ }, x);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql(arr);
+ done();
+ });
+ });
+
+ it('handles Map', function(done) {
+ if (typeof Map !== 'function') {
+ return done();
+ }
+
+ var map = new Map([
+ ['a', 'b'],
+ ['b', 'c'],
+ ['c', 'd']
+ ]);
+
+ async.concat(map, function(val, next) {
+ next(null, val);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql(['a', 'b', 'b', 'c', 'c', 'd']);
+ done();
+ });
+ });
+
+ it('handles sparse results', function(done) {
+ var arr = [1, 2, 3, 4];
+ async.concat(arr, function(val, next) {
+ if (val === 1 || val === 3) {
+ return next(null, val+1);
+ } else if (val === 2) {
+ async.setImmediate(function() {
+ return next(null, val+1);
+ });
+ } else {
+ return next('error');
+ }
+ }, function(err, result) {
+ expect(err).to.not.eql(null);
+ expect(result).to.eql([2, 4]);
+ async.setImmediate(done);
+ });
});
});
- it('concat error', function(done) {
- var iteratee = function (x, cb) {
- cb(new Error('test error'));
- };
- async.concat([1,2,3], iteratee, function(err){
- assert(err);
- done();
+ context('concatLimit', function() {
+ var arr = ['foo', 'bar', 'baz'];
+ it('basics', function(done) {
+ var running = 0;
+ var concurrency = {'foo': 2, 'bar': 2, 'baz': 1};
+ async.concatLimit(arr, 2, function(val, next) {
+ running++;
+ async.setImmediate(function() {
+ expect(running).to.equal(concurrency[val]);
+ running--;
+ next(null, val, val);
+ })
+ }, function(err, result) {
+ expect(running).to.equal(0);
+ expect(err).to.eql(null);
+ expect(result).to.eql(['foo', 'foo', 'bar', 'bar', 'baz', 'baz']);
+ done();
+ });
+ });
+
+ it('error', function(done) {
+ async.concatLimit(arr, 1, function(val, next) {
+ if (val === 'bar') {
+ return next(new Error('fail'));
+ }
+ next(null, val);
+ }, function(err, result) {
+ expect(err).to.not.eql(null);
+ expect(result).to.eql(['foo']);
+ done();
+ });
+ });
+
+ it('handles objects', function(done) {
+ async.concatLimit({'foo': 1, 'bar': 2, 'baz': 3}, 2, function(val, next) {
+ next(null, val+1);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql([2, 3, 4]);
+ done();
+ });
+ });
+
+ it('handles empty object', function(done) {
+ async.concatLimit({}, 2, function(val, next) {
+ assert(false, 'iteratee should not be called');
+ next();
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ done();
+ });
+ });
+
+ it('handles undefined', function(done) {
+ async.concatLimit(undefined, 2, function(val, next) {
+ assert(false, 'iteratee should not be called');
+ next();
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ done();
+ });
+ });
+
+ it('limit exceeds size', function(done) {
+ var callOrder = [];
+ async.concatLimit([3, 2, 2, 1], 10, concatIteratee.bind(this, callOrder), function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql([3, 4, 2, 3, 2, 3, 1, 2]);
+ expect(callOrder).to.eql([1, 2, 2, 3]);
+ done();
+ });
+ });
+
+ it('limit equal size', function(done) {
+ var callOrder = [];
+ async.concatLimit([3, 2, 2, 1], 4, concatIteratee.bind(this, callOrder), function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql([3, 4, 2, 3, 2, 3, 1, 2]);
+ expect(callOrder).to.eql([1, 2, 2, 3]);
+ done();
+ });
+ });
+
+ it('zero limit', function(done) {
+ async.concatLimit([3, 2, 2, 1], 0, function(val, next) {
+ assert(false, 'iteratee should not be called');
+ next();
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ done();
+ });
+ });
+
+ it('does not continue replenishing after error', function(done) {
+ var started = 0;
+ var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
+ var limit = 3;
+ var step = 0;
+ var maxSteps = arr.length;
+
+ async.concatLimit(arr, limit, function(val, next) {
+ started++;
+ if (started === 3) {
+ return next(new Error('fail'));
+ }
+
+ async.setImmediate(function() {
+ next();
+ });
+ }, function(err, result) {
+ expect(err).to.not.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ });
+
+ // wait `maxSteps` event loop cycles before calling done to ensure
+ // the iteratee is not called on more items in arr.
+ function waitCycle() {
+ step++;
+ if (step >= maxSteps) {
+ expect(started).to.equal(3);
+ done();
+ return;
+ } else {
+ async.setImmediate(waitCycle);
+ }
+ }
+
+ async.setImmediate(waitCycle);
});
});
- it('concatSeries', function(done) {
- var call_order = [];
- var iteratee = function (x, cb) {
- setTimeout(function(){
- call_order.push(x);
- var r = [];
- while (x > 0) {
- r.push(x);
- x--;
+ context('concatSeries', function() {
+ it('basics', function(done) {
+ var callOrder = [];
+ var running = 0;
+ var iteratee = function (x, cb) {
+ running++;
+ setTimeout(function() {
+ expect(running).to.equal(1);
+ running--;
+ callOrder.push(x);
+ var r = [];
+ while (x > 0) {
+ r.push(x);
+ x--;
+ }
+ cb(null, r);
+ }, x*25);
+ };
+ async.concatSeries([1,3,2], iteratee, function(err, results) {
+ expect(results).to.eql([1,3,2,1,2,1]);
+ expect(running).to.equal(0);
+ expect(callOrder).to.eql([1,3,2]);
+ assert(err === null, err + " passed instead of 'null'");
+ done();
+ });
+ });
+
+ it('error', function(done) {
+ async.concatSeries(['foo', 'bar', 'baz'], function(val, next) {
+ if (val === 'bar') {
+ return next(new Error('fail'));
}
- cb(null, r);
- }, x*25);
- };
- async.concatSeries([1,3,2], iteratee, function(err, results){
- expect(results).to.eql([1,3,2,1,2,1]);
- expect(call_order).to.eql([1,3,2]);
- assert(err === null, err + " passed instead of 'null'");
- done();
+ next(null, [val, val]);
+ }, function(err, result) {
+ expect(err).to.not.eql(null);
+ expect(result).to.eql(['foo', 'foo']);
+ done();
+ });
+ });
+
+ it('handles objects', function(done) {
+ async.concatSeries({'foo': 1, 'bar': 2, 'baz': 3}, function(val, next) {
+ return next(null, [val, val+1]);
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.eql([1, 2, 2, 3, 3, 4]);
+ done();
+ });
+ });
+
+ it('handles empty object', function(done) {
+ async.concatSeries({}, function(val, next) {
+ assert(false, 'iteratee should not be called');
+ next();
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ done();
+ });
+ });
+
+ it('handles undefined', function(done) {
+ async.concatSeries(undefined, function(val, next) {
+ assert(false, 'iteratee should not be called');
+ next();
+ }, function(err, result) {
+ expect(err).to.eql(null);
+ expect(result).to.be.an('array').that.is.empty;
+ done();
+ });
});
});
});
diff --git a/mocha_test/eachOf.js b/mocha_test/eachOf.js
index 925f995..dd73c22 100644
--- a/mocha_test/eachOf.js
+++ b/mocha_test/eachOf.js
@@ -43,6 +43,30 @@ describe("eachOf", function() {
});
});
+ it('forEachOf no call stack size exceed error', function(done) {
+ var obj = {};
+ var len = 3000;
+ var args = new Array(len * 2);
+ var expected = new Array(len * 2);
+
+ for (var i = 0; i < len; i++) {
+ obj["a" + i] = i;
+ expected[2 * i] = "a" + i;
+ expected[2 * i + 1] = i;
+ }
+
+ async.forEachOf(obj, function(value, key, callback) {
+ var index = parseInt(key.slice(1), 10);
+ args[2 * index] = key;
+ args[2 * index + 1] = value;
+ callback();
+ }, function(err) {
+ assert(err === null, err + " passed instead of 'null'");
+ expect(args).to.eql(expected);
+ done();
+ });
+ });
+
it('forEachOf - instant resolver', function(done) {
var args = [];
async.forEachOf({ a: 1, b: 2 }, function(x, k, cb) {
@@ -139,6 +163,30 @@ describe("eachOf", function() {
});
});
+ it('forEachOfSeries no call stack size exceed error', function(done) {
+ var obj = {};
+ var len = 3000;
+ var args = new Array(len * 2);
+ var expected = new Array(len * 2);
+
+ for (var i = 0; i < len; i++) {
+ obj["a" + i] = i;
+ expected[2 * i] = "a" + i;
+ expected[2 * i + 1] = i;
+ }
+
+ async.forEachOfSeries(obj, function(value, key, callback) {
+ var index = parseInt(key.slice(1), 10);
+ args[2 * index] = key;
+ args[2 * index + 1] = value;
+ callback();
+ }, function(err) {
+ assert(err === null, err + " passed instead of 'null'");
+ expect(args).to.eql(expected);
+ done();
+ });
+ });
+
it('forEachOfSeries empty object', function(done) {
async.forEachOfSeries({}, function(x, callback){
assert(false, 'iteratee should not be called');
@@ -274,6 +322,18 @@ describe("eachOf", function() {
setTimeout(done, 25);
});
+ it('forEachOfLimit no call stack size exceed error', function(done) {
+ var count = 0;
+ async.forEachOfLimit(_.range(1024 * 1024), Infinity, function(x, i, callback){
+ count++;
+ callback();
+ }, function(err){
+ if (err) throw err;
+ expect(count).to.equal(1024 * 1024);
+ done();
+ });
+ });
+
it('forEachOfLimit error', function(done) {
var obj = { a: 1, b: 2, c: 3, d: 4, e: 5 };
var call_order = [];
diff --git a/mocha_test/es2017/asyncFunctions.js b/mocha_test/es2017/asyncFunctions.js
index 8f77bdc..5616307 100644
--- a/mocha_test/es2017/asyncFunctions.js
+++ b/mocha_test/es2017/asyncFunctions.js
@@ -219,6 +219,14 @@ module.exports = function () {
});
});
+ it('should handle async functions in concatLimit', (done) => {
+ async.concatLimit(input, 2, asyncIdentity, (err, result) => {
+ expect(err).to.eql(null);
+ expect(result).to.eql(input);
+ done(err);
+ });
+ });
+
it('should handle async functions in concatSeries', (done) => {
async.concatSeries(input, asyncIdentity, (err, result) => {
expect(result).to.eql(input);
@@ -622,6 +630,18 @@ module.exports = function () {
})
});
+ it('should handle async functons in tryEach', (done) => {
+ async.tryEach([
+ async () => { throw new Error('fail1'); },
+ async () => { throw new Error('fail2'); },
+ async () => 5,
+ async () => { throw new Error('shoult not get here'); }
+ ], (err, result) => {
+ expect(result).to.eql(5);
+ done();
+ })
+ });
+
/**
* Utils
*/
diff --git a/mocha_test/groupBy.js b/mocha_test/groupBy.js
index afb612b..d20f385 100644
--- a/mocha_test/groupBy.js
+++ b/mocha_test/groupBy.js
@@ -330,7 +330,7 @@ describe('groupBy', function() {
});
it('handles empty object', function(done) {
- async.groupByLimit({}, 2, function(val, next) {
+ async.groupBySeries({}, function(val, next) {
assert(false, 'iteratee should not be called');
next();
}, function(err, result) {
diff --git a/mocha_test/linked_list.js b/mocha_test/linked_list.js
new file mode 100644
index 0000000..ab4b223
--- /dev/null
+++ b/mocha_test/linked_list.js
@@ -0,0 +1,83 @@
+var DLL = require('../lib/internal/DoublyLinkedList').default;
+var expect = require('chai').expect;
+
+describe('DoublyLinkedList', function () {
+ it('toArray', function() {
+ var list = new DLL();
+ expect(list.toArray()).to.eql([]);
+
+ for (var i = 0; i < 5; i++) {
+ list.push({data: i});
+ }
+ expect(list.toArray()).to.eql([0, 1, 2, 3, 4]);
+ });
+
+ it('remove', function() {
+ var list = new DLL();
+
+ for (var i = 0; i < 5; i++) {
+ list.push({data: i});
+ }
+
+ list.remove(function (node) {
+ return node.data === 3;
+ })
+
+ expect(list.toArray()).to.eql([0, 1, 2, 4]);
+ });
+
+ it('remove (head)', function() {
+ var list = new DLL();
+
+ for (var i = 0; i < 5; i++) {
+ list.push({data: i});
+ }
+
+ list.remove(function (node) {
+ return node.data === 0;
+ })
+
+ expect(list.toArray()).to.eql([1, 2, 3, 4]);
+ });
+
+ it('remove (tail)', function() {
+ var list = new DLL();
+
+ for (var i = 0; i < 5; i++) {
+ list.push({data: i});
+ }
+
+ list.remove(function (node) {
+ return node.data === 4;
+ })
+
+ expect(list.toArray()).to.eql([0, 1, 2, 3]);
+ });
+
+ it('remove (all)', function() {
+ var list = new DLL();
+
+ for (var i = 0; i < 5; i++) {
+ list.push({data: i});
+ }
+
+ list.remove(function (node) {
+ return node.data < 5;
+ })
+
+ expect(list.toArray()).to.eql([]);
+ });
+
+ it('empty', function() {
+ var list = new DLL();
+
+ for (var i = 0; i < 5; i++) {
+ list.push({data: i});
+ }
+
+ var empty = list.empty();
+
+ expect(list).to.equal(empty);
+ expect(list.toArray()).to.eql([]);
+ });
+});
diff --git a/mocha_test/queue.js b/mocha_test/queue.js
index cc72c52..4539c14 100644
--- a/mocha_test/queue.js
+++ b/mocha_test/queue.js
@@ -10,7 +10,7 @@ describe('queue', function(){
it('basics', function(done) {
var call_order = [];
- var delays = [40,20,60,20];
+ var delays = [40,10,60,10];
// worker1: --1-4
@@ -66,7 +66,7 @@ describe('queue', function(){
it('default concurrency', function(done) {
var call_order = [],
- delays = [40,20,60,20];
+ delays = [40,10,60,10];
// order of completion: 1,2,3,4
@@ -222,16 +222,21 @@ describe('queue', function(){
it('push without callback', function(done) {
this.retries(3); // test can be flakey
- var call_order = [],
- delays = [40,20,60,20];
+ var call_order = [];
+ var delays = [40,10,60,10];
+ var concurrencyList = [];
+ var running = 0;
// worker1: --1-4
// worker2: -2---3
// order of completion: 2,1,4,3
var q = async.queue(function (task, callback) {
+ running++;
+ concurrencyList.push(running);
setTimeout(function () {
call_order.push('process ' + task);
+ running--;
callback('error', 'arg');
}, delays.shift());
}, 2);
@@ -242,6 +247,8 @@ describe('queue', function(){
q.push(4);
q.drain = function () {
+ expect(running).to.eql(0);
+ expect(concurrencyList).to.eql([1, 2, 2, 2]);
expect(call_order).to.eql([
'process 2',
'process 1',
@@ -293,7 +300,7 @@ describe('queue', function(){
it('bulk task', function(done) {
var call_order = [],
- delays = [40,20,60,20];
+ delays = [40,10,60,10];
// worker1: --1-4
// worker2: -2---3
@@ -353,58 +360,58 @@ describe('queue', function(){
});
it('pause', function(done) {
- this.retries(3); // sometimes can be flakey to timing issues
-
- var call_order = [],
- task_timeout = 80,
- pause_timeout = task_timeout * 2.5,
- resume_timeout = task_timeout * 4.5,
- tasks = [ 1, 2, 3, 4, 5, 6 ],
-
- elapsed = (function () {
- var start = Date.now();
- return function () {
- return Math.round((Date.now() - start) / task_timeout) * task_timeout;
- };
- })();
+ var call_order = [];
+ var running = 0;
+ var concurrencyList = [];
+ var pauseCalls = ['process 1', 'process 2', 'process 3'];
var q = async.queue(function (task, callback) {
+ running++;
call_order.push('process ' + task);
- call_order.push('timeout ' + elapsed());
- callback();
- });
-
- function pushTask () {
- var task = tasks.shift();
- if (!task) { return; }
+ concurrencyList.push(running);
setTimeout(function () {
- q.push(task);
- pushTask();
- }, task_timeout);
- }
- pushTask();
+ running--;
+ callback();
+ }, 10)
+ }, 2);
- setTimeout(function () {
+ q.push(1);
+ q.push(2, after2);
+ q.push(3);
+
+ function after2() {
q.pause();
- expect(q.paused).to.equal(true);
- }, pause_timeout);
+ expect(concurrencyList).to.eql([1, 2, 2]);
+ expect(call_order).to.eql(pauseCalls);
- setTimeout(function () {
- q.resume();
- expect(q.paused).to.equal(false);
- }, resume_timeout);
+ setTimeout(whilePaused, 5);
+ setTimeout(afterPause, 10);
+ }
- setTimeout(function () {
+ function whilePaused() {
+ q.push(4);
+ }
+
+ function afterPause() {
+ expect(concurrencyList).to.eql([1, 2, 2]);
+ expect(call_order).to.eql(pauseCalls);
+ q.resume();
+ q.push(5);
+ q.push(6);
+ q.drain = drain;
+ }
+ function drain () {
+ expect(concurrencyList).to.eql([1, 2, 2, 1, 2, 2]);
expect(call_order).to.eql([
- 'process 1', 'timeout ' + task_timeout,
- 'process 2', 'timeout ' + task_timeout * 2,
- 'process 3', 'timeout ' + task_timeout * 5,
- 'process 4', 'timeout ' + task_timeout * 5,
- 'process 5', 'timeout ' + task_timeout * 5,
- 'process 6', 'timeout ' + task_timeout * 6
+ 'process 1',
+ 'process 2',
+ 'process 3',
+ 'process 4',
+ 'process 5',
+ 'process 6'
]);
done();
- }, (task_timeout * tasks.length) + pause_timeout + resume_timeout);
+ }
});
it('pause in worker with concurrency', function(done) {
@@ -436,57 +443,6 @@ describe('queue', function(){
};
});
- it('pause with concurrency', function(done) {
- var call_order = [],
- task_timeout = 40,
- pause_timeout = task_timeout / 2,
- resume_timeout = task_timeout * 2.75,
- tasks = [ 1, 2, 3, 4, 5, 6 ],
-
- elapsed = (function () {
- var start = Date.now();
- return function () {
- return Math.round((Date.now() - start) / task_timeout) * task_timeout;
- };
- })();
-
- var q = async.queue(function (task, callback) {
- setTimeout(function () {
- call_order.push('process ' + task);
- call_order.push('timeout ' + elapsed());
- callback();
- }, task_timeout);
- }, 2);
-
- q.push(tasks);
-
- setTimeout(function () {
- q.pause();
- expect(q.paused).to.equal(true);
- }, pause_timeout);
-
- setTimeout(function () {
- q.resume();
- expect(q.paused).to.equal(false);
- }, resume_timeout);
-
- setTimeout(function () {
- expect(q.running()).to.equal(2);
- }, resume_timeout + 10);
-
- setTimeout(function () {
- expect(call_order).to.eql([
- 'process 1', 'timeout ' + task_timeout,
- 'process 2', 'timeout ' + task_timeout,
- 'process 3', 'timeout ' + task_timeout * 4,
- 'process 4', 'timeout ' + task_timeout * 4,
- 'process 5', 'timeout ' + task_timeout * 5,
- 'process 6', 'timeout ' + task_timeout * 5
- ]);
- done();
- }, (task_timeout * tasks.length) + pause_timeout + resume_timeout);
- });
-
it('start paused', function(done) {
var q = async.queue(function (task, callback) {
setTimeout(function () {
@@ -498,11 +454,12 @@ describe('queue', function(){
q.push([1, 2, 3]);
setTimeout(function () {
+ expect(q.running()).to.equal(0);
q.resume();
}, 5);
setTimeout(function () {
- expect(q._tasks.length).to.equal(1);
+ expect(q.length()).to.equal(1);
expect(q.running()).to.equal(2);
q.resume();
}, 15);
@@ -699,7 +656,7 @@ describe('queue', function(){
});
});
- context('q.unsaturated(): ',function() {
+ context('q.unsaturated(): ', function() {
it('should have a default buffer property that equals 25% of the concurrenct rate', function(done){
var calls = [];
var q = async.queue(function(task, cb) {
@@ -761,5 +718,85 @@ describe('queue', function(){
q.push('foo4', function () {calls.push('foo4 cb');});
});
});
-});
+ context('workersList', function() {
+ it('should be the same length as running()', function(done) {
+ var q = async.queue(function(task, cb) {
+ async.setImmediate(function() {
+ expect(q.workersList().length).to.equal(q.running());
+ cb();
+ });
+ }, 2);
+
+ q.drain = function() {
+ expect(q.workersList().length).to.equal(0);
+ expect(q.running()).to.equal(0);
+ done();
+ };
+
+ q.push('foo');
+ q.push('bar');
+ q.push('baz');
+ });
+
+ it('should contain the items being processed', function(done) {
+ var itemsBeingProcessed = {
+ 'foo': ['foo'],
+ 'foo_cb': ['foo', 'bar'],
+ 'bar': ['foo', 'bar'],
+ 'bar_cb': ['bar', 'baz'],
+ 'baz': ['bar', 'baz'],
+ 'baz_cb': ['baz']
+ };
+
+ function getWorkersListData(q) {
+ return q.workersList().map(function(v) {
+ return v.data;
+ });
+ }
+
+ var q = async.queue(function(task, cb) {
+ expect(
+ getWorkersListData(q)
+ ).to.eql(itemsBeingProcessed[task]);
+ expect(q.workersList().length).to.equal(q.running());
+ async.setImmediate(function() {
+ expect(
+ getWorkersListData(q)
+ ).to.eql(itemsBeingProcessed[task+'_cb']);
+ expect(q.workersList().length).to.equal(q.running());
+ cb();
+ });
+ }, 2);
+
+ q.drain = function() {
+ expect(q.workersList()).to.eql([]);
+ expect(q.workersList().length).to.equal(q.running());
+ done();
+ };
+
+ q.push('foo');
+ q.push('bar');
+ q.push('baz');
+ });
+ })
+
+ it('remove', function(done) {
+ var result = [];
+ var q = async.queue(function(data, cb) {
+ result.push(data);
+ async.setImmediate(cb);
+ });
+
+ q.push([1, 2, 3, 4, 5]);
+
+ q.remove(function (node) {
+ return node.data === 3;
+ });
+
+ q.drain = function () {
+ expect(result).to.eql([1, 2, 4, 5]);
+ done();
+ }
+ });
+});
diff --git a/mocha_test/retry.js b/mocha_test/retry.js
index d3a5d22..8a9f4da 100644
--- a/mocha_test/retry.js
+++ b/mocha_test/retry.js
@@ -66,11 +66,10 @@ describe("retry", function () {
callCount++;
callback(error + callCount, erroredResult + callCount); // respond with indexed values
}
- var start = new Date().getTime();
+ var start = Date.now();
async.retry({ times: times, interval: interval}, fn, function(err, result){
- var now = new Date().getTime();
- var duration = now - start;
- assert(duration >= (interval * (times -1)), 'did not include interval');
+ var duration = Date.now() - start;
+ expect(duration).to.be.above(interval * (times - 1) - times);
assert.equal(callCount, 3, "did not retry the correct number of times");
assert.equal(err, error + times, "Incorrect error was returned");
assert.equal(result, erroredResult + times, "Incorrect result was returned");
@@ -88,11 +87,10 @@ describe("retry", function () {
callCount++;
callback(error + callCount, erroredResult + callCount); // respond with indexed values
}
- var start = new Date().getTime();
+ var start = Date.now();
async.retry({ times: times, interval: intervalFunc}, fn, function(err, result){
- var now = new Date().getTime();
- var duration = now - start;
- assert(duration >= 300, 'did not include custom interval');
+ var duration = Date.now() - start;
+ expect(duration).to.be.above(300 - times);
assert.equal(callCount, 3, "did not retry the correct number of times");
assert.equal(err, error + times, "Incorrect error was returned");
assert.equal(result, erroredResult + times, "Incorrect result was returned");
@@ -127,7 +125,7 @@ describe("retry", function () {
it('retry does not precompute the intervals (#1226)', function(done) {
var callTimes = [];
function intervalFunc() {
- callTimes.push(new Date().getTime());
+ callTimes.push(Date.now());
return 100;
};
function fn(callback) {
@@ -226,11 +224,10 @@ describe("retry", function () {
function errorTest(err) {
return err && err !== special;
}
- var start = new Date().getTime();
+ var start = Date.now();
async.retry({ interval: interval, errorFilter: errorTest }, fn, function(err, result){
- var now = new Date().getTime();
- var duration = now - start;
- assert(duration >= (interval * (specialCount - 1)), 'did not include interval');
+ var duration = Date.now() - start;
+ expect(duration).to.be.above(interval * (specialCount - 1) - specialCount);
assert.equal(callCount, specialCount, "did not retry the correct number of times");
assert.equal(err, special, "Incorrect error was returned");
assert.equal(result, erroredResult + specialCount, "Incorrect result was returned");
diff --git a/mocha_test/slice.js b/mocha_test/slice.js
new file mode 100644
index 0000000..7020526
--- /dev/null
+++ b/mocha_test/slice.js
@@ -0,0 +1,32 @@
+var slice = require('../lib/internal/slice').default;
+var expect = require('chai').expect;
+
+describe('slice', function() {
+ it('should slice arrays', function() {
+ var arr = ['foo', 'bar', 'baz'];
+ var result = slice(arr, 2);
+ expect(arr).to.eql(['foo', 'bar', 'baz']);
+ expect(result).to.eql(['baz']);
+ });
+
+ it('should handle ArrayLike objects', function() {
+ var args = {0: 'foo', 1: 'bar', 2: 'baz', length: 3};
+ var result = slice(args, 1);
+ expect(result).to.be.an('array');
+ expect(result).to.eql(['bar', 'baz']);
+ });
+
+ it('should handle arguments', function() {
+ var foo = function() {
+ return slice(arguments, 1);
+ };
+ var result = foo.apply(null, ['foo', 'bar', 'baz']);
+ expect(result).to.be.an('array');
+ expect(result).to.eql(['bar', 'baz']);
+ });
+
+ it('should return an empty array on an invalid start', function() {
+ var result = slice(['foo', 'bar', 'baz'], 10);
+ expect(result).to.be.an('array').that.is.empty;
+ });
+});
diff --git a/mocha_test/timeout.js b/mocha_test/timeout.js
index be41283..cd4a751 100644
--- a/mocha_test/timeout.js
+++ b/mocha_test/timeout.js
@@ -69,4 +69,40 @@ describe('timeout', function () {
done();
});
});
+
+ it('timeout with multiple calls (#1418)', function(done) {
+ var timeout = async.timeout(function asyncFn(n, callback) {
+ if (n < 1) {
+ setTimeout(function() {
+ callback(null, 'I will time out');
+ }, 75);
+ } else {
+ async.setImmediate(function() {
+ callback(null, 'I didn\'t time out');
+ })
+ }
+ }, 50);
+
+ async.series([
+ function(cb) {
+ timeout(0, function(err, result) {
+ expect(err.message).to.equal('Callback function "asyncFn" timed out.');
+ expect(err.code).to.equal('ETIMEDOUT');
+ expect(err.info).to.equal(undefined);
+ expect(result).to.equal(undefined);
+ cb();
+ });
+ },
+ function(cb) {
+ timeout(1, function(err, result) {
+ expect(err).to.equal(null);
+ expect(result).to.equal('I didn\'t time out');
+ cb();
+ });
+ }
+ ], function(err) {
+ expect(err).to.equal(null);
+ done();
+ });
+ })
});
diff --git a/mocha_test/tryEach.js b/mocha_test/tryEach.js
new file mode 100644
index 0000000..db884a5
--- /dev/null
+++ b/mocha_test/tryEach.js
@@ -0,0 +1,86 @@
+var async = require('../lib');
+var expect = require('chai').expect;
+var assert = require('assert');
+
+describe('tryEach', function () {
+ it('no callback', function () {
+ async.tryEach([]);
+ });
+ it('empty', function (done) {
+ async.tryEach([], function (err, results) {
+ expect(err).to.equal(null);
+ expect(results).to.eql(undefined);
+ done();
+ });
+ });
+ it('one task, multiple results', function (done) {
+ var RESULTS = ['something', 'something2'];
+ async.tryEach([
+ function (callback) {
+ callback(null, RESULTS[0], RESULTS[1]);
+ }
+ ], function (err, results) {
+ expect(err).to.equal(null);
+ expect(results).to.eql(RESULTS);
+ done();
+ });
+ });
+ it('one task', function (done) {
+ var RESULT = 'something';
+ async.tryEach([
+ function (callback) {
+ callback(null, RESULT);
+ }
+ ], function (err, results) {
+ expect(err).to.equal(null);
+ expect(results).to.eql(RESULT);
+ done();
+ });
+ });
+ it('two tasks, one failing', function (done) {
+ var RESULT = 'something';
+ async.tryEach([
+ function (callback) {
+ callback(new Error('Failure'), {});
+ },
+ function (callback) {
+ callback(null, RESULT);
+ }
+ ], function (err, results) {
+ expect(err).to.equal(null);
+ expect(results).to.eql(RESULT);
+ done();
+ });
+ });
+ it('two tasks, both failing', function (done) {
+ var ERROR_RESULT = new Error('Failure2');
+ async.tryEach([
+ function (callback) {
+ callback(new Error('Should not stop here'));
+ },
+ function (callback) {
+ callback(ERROR_RESULT);
+ }
+ ], function (err, results) {
+ expect(err).to.equal(ERROR_RESULT);
+ expect(results).to.eql(undefined);
+ done();
+ });
+ });
+ it('two tasks, non failing', function (done) {
+ var RESULT = 'something';
+ async.tryEach([
+ function (callback) {
+ callback(null, RESULT);
+ },
+ function () {
+ assert.fail('Should not been called');
+ },
+ ], function (err, results) {
+ expect(err).to.equal(null);
+ expect(results).to.eql(RESULT);
+ done();
+ });
+ });
+});
+
diff --git a/mocha_test/waterfall.js b/mocha_test/waterfall.js
index 0c21c80..54ca9f9 100644
--- a/mocha_test/waterfall.js
+++ b/mocha_test/waterfall.js
@@ -93,7 +93,6 @@ describe("waterfall", function () {
it('multiple callback calls', function(){
var arr = [
function(callback){
- // call the callback twice. this should call function 2 twice
callback(null, 'one', 'two');
callback(null, 'one', 'two');
},
@@ -106,6 +105,37 @@ describe("waterfall", function () {
}).to.throw(/already called/);
});
+ it('multiple callback calls (trickier) @nodeonly', function(done){
+
+ // do a weird dance to catch the async thrown error before mocha
+ var listeners = process.listeners('uncaughtException');
+ process.removeAllListeners('uncaughtException');
+ process.once('uncaughtException', function onErr(err) {
+ listeners.forEach(function(listener) {
+ process.on('uncaughtException', listener);
+ });
+ // can't throw errors in a uncaughtException handler, defer
+ setTimeout(checkErr, 0, err)
+ })
+
+ function checkErr(err) {
+ expect(err.message).to.match(/already called/);
+ done();
+ }
+
+ async.waterfall([
+ function(callback){
+ setTimeout(callback, 0, null, 'one', 'two');
+ setTimeout(callback, 10, null, 'one', 'two');
+ },
+ function(arg1, arg2, callback){
+ setTimeout(callback, 15, null, arg1, arg2, 'three');
+ }
+ ], function () {
+ throw new Error('should not get here')
+ });
+ });
+
it('call in another context @nycinvalid @nodeonly', function(done) {
var vm = require('vm');
var sandbox = {
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..697f963
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,9130 @@
+{
+ "name": "async",
+ "version": "2.5.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "JSONStream": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz",
+ "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
+ }
+ },
+ "accepts": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.3.tgz",
+ "integrity": "sha1-Gj6FC0KOc7prCdHMUn9aqtTQPvE=",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "ajv": {
+ "version": "https://registry.npmjs.org/ajv/-/ajv-4.8.2.tgz",
+ "integrity": "sha1-ZUhpNso2/qOaFQQzKni+vV1Ee9w=",
+ "dev": true,
+ "requires": {
+ "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz"
+ }
+ },
+ "ajv-keywords": {
+ "version": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.1.1.tgz",
+ "integrity": "sha1-AlULxgWj5XYEFWViivly4GxUnVA=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.2.tgz",
+ "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.4.tgz"
+ }
+ },
+ "ansi-escapes": {
+ "version": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
+ "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "dev": true,
+ "requires": {
+ "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "normalize-path": "2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ }
+ }
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
+ }
+ },
+ "arr-diff": {
+ "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz"
+ }
+ },
+ "arr-flatten": {
+ "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz",
+ "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=",
+ "dev": true
+ },
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"
+ }
+ },
+ "array-uniq": {
+ "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
+ "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
+ "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.1.tgz",
+ "integrity": "sha1-NaruwzCX8R9COZ7K3zP6zNJ/XEw=",
+ "dev": true
+ },
+ "astw": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
+ "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "babel-cli": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
+ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-polyfill": "6.26.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "chokidar": "1.7.0",
+ "commander": "2.11.0",
+ "convert-source-map": "1.5.0",
+ "fs-readdir-recursive": "1.0.0",
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "output-file-sync": "1.1.2",
+ "path-is-absolute": "1.0.1",
+ "slash": "1.0.0",
+ "source-map": "0.5.7",
+ "v8flags": "2.1.1"
+ },
+ "dependencies": {
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "js-tokens": "3.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ }
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.0",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-add-module-exports": {
+ "version": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz",
+ "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=",
+ "dev": true
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz",
+ "integrity": "sha1-JmswS5EJYH1gdIR0OUZ2mC9mDfQ=",
+ "dev": true,
+ "requires": {
+ "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "istanbul-lib-instrument": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.2.0.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "test-exclude": "https://registry.npmjs.org/test-exclude/-/test-exclude-2.1.3.tgz"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
+ "dev": true
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+ "dev": true
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0"
+ }
+ },
+ "babel-preset-es2017": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz",
+ "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
+ "dev": true
+ }
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ }
+ }
+ },
+ "babelify": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz",
+ "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
+ "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
+ "dev": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "benchmark": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz",
+ "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4",
+ "platform": "1.3.4"
+ }
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz",
+ "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=",
+ "dev": true
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.15"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ }
+ }
+ },
+ "boolbase": {
+ "version": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
+ "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ },
+ "braces": {
+ "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "preserve": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz",
+ "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.1",
+ "combine-source-map": "0.7.2",
+ "defined": "1.0.0",
+ "through2": "2.0.3",
+ "umd": "3.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "browser-resolve": {
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
+ "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
+ "browserify": {
+ "version": "14.5.0",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz",
+ "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.1",
+ "assert": "1.4.1",
+ "browser-pack": "6.0.2",
+ "browser-resolve": "1.11.2",
+ "browserify-zlib": "0.2.0",
+ "buffer": "5.0.8",
+ "cached-path-relative": "1.0.1",
+ "concat-stream": "1.5.2",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.12.0",
+ "defined": "1.0.0",
+ "deps-sort": "2.0.0",
+ "domain-browser": "1.1.7",
+ "duplexer2": "0.1.4",
+ "events": "1.1.1",
+ "glob": "7.1.2",
+ "has": "1.0.1",
+ "htmlescape": "1.1.1",
+ "https-browserify": "1.0.0",
+ "inherits": "2.0.3",
+ "insert-module-globals": "7.0.1",
+ "labeled-stream-splicer": "2.0.0",
+ "module-deps": "4.1.1",
+ "os-browserify": "0.3.0",
+ "parents": "1.0.1",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "read-only-stream": "2.0.0",
+ "readable-stream": "2.3.3",
+ "resolve": "1.5.0",
+ "shasum": "1.0.2",
+ "shell-quote": "1.6.1",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.7.2",
+ "string_decoder": "1.0.3",
+ "subarg": "1.0.0",
+ "syntax-error": "1.3.0",
+ "through2": "2.0.3",
+ "timers-browserify": "1.4.2",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.0.6",
+ "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
+ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "1.1.1",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.3"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.5"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "1.0.6"
+ }
+ },
+ "buffer": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz",
+ "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==",
+ "dev": true,
+ "requires": {
+ "base64-js": "1.2.1",
+ "ieee754": "1.1.8"
+ }
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cached-path-relative": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
+ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz"
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "callsites": {
+ "version": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "catharsis": {
+ "version": "0.8.9",
+ "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz",
+ "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=",
+ "dev": true,
+ "requires": {
+ "underscore-contrib": "0.3.0"
+ }
+ },
+ "center-align": {
+ "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz"
+ }
+ },
+ "chai": {
+ "version": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.1.tgz",
+ "deep-eql": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "type-detect": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz"
+ }
+ },
+ "chalk": {
+ "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
+ "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
+ }
+ },
+ "cheerio": {
+ "version": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+ "dev": true,
+ "requires": {
+ "css-select": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "lodash.assignin": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "lodash.bind": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "lodash.defaults": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "lodash.filter": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "lodash.flatten": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "lodash.foreach": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "lodash.map": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "lodash.merge": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz",
+ "lodash.pick": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "lodash.reduce": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "lodash.reject": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "lodash.some": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz"
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ }
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "circular-json": {
+ "version": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz",
+ "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz"
+ }
+ },
+ "cli-width": {
+ "version": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
+ "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "co": {
+ "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz",
+ "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "combine-lists": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
+ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "combine-source-map": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz",
+ "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.1.3",
+ "inline-source-map": "0.6.2",
+ "lodash.memoize": "3.0.4",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "dev": true
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz",
+ "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=",
+ "dev": true
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz",
+ "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+ }
+ },
+ "connect": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz",
+ "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.0.6",
+ "parseurl": "1.3.2",
+ "utils-merge": "1.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
+ "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "coveralls": {
+ "version": "2.13.3",
+ "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz",
+ "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==",
+ "dev": true,
+ "requires": {
+ "js-yaml": "3.6.1",
+ "lcov-parse": "0.0.10",
+ "log-driver": "1.2.5",
+ "minimist": "1.2.0",
+ "request": "2.79.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.9"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "diffie-hellman": "5.0.2",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.14",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.5",
+ "randomfill": "1.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "css-select": {
+ "version": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "css-what": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "nth-check": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz"
+ }
+ },
+ "css-what": {
+ "version": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "custom-event": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "d": {
+ "version": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
+ "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "debug": {
+ "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
+ }
+ },
+ "debug-stream": {
+ "version": "https://registry.npmjs.org/debug-stream/-/debug-stream-2.1.0.tgz",
+ "integrity": "sha1-EI0uWnbY100/NUQic7IJ3Nw4DjA=",
+ "dev": true,
+ "requires": {
+ "debug": "https://registry.npmjs.org/debug/-/debug-1.0.4.tgz",
+ "split": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "https://registry.npmjs.org/debug/-/debug-1.0.4.tgz",
+ "integrity": "sha1-W5wla9VLbsAigxdvqKDt5tFUy/g=",
+ "dev": true,
+ "requires": {
+ "ms": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz"
+ }
+ },
+ "ms": {
+ "version": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz",
+ "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=",
+ "dev": true
+ }
+ }
+ },
+ "decamelize": {
+ "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
+ "dev": true,
+ "requires": {
+ "type-detect": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+ "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=",
+ "dev": true
+ }
+ }
+ },
+ "deep-is": {
+ "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "del": {
+ "version": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "is-path-cwd": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "is-path-in-cwd": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz",
+ "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz",
+ "rimraf": "2.6.2"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ },
+ "deps-sort": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
+ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.1",
+ "shasum": "1.0.2",
+ "subarg": "1.0.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz"
+ },
+ "dependencies": {
+ "repeating": {
+ "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz"
+ }
+ }
+ }
+ },
+ "detective": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz",
+ "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13",
+ "defined": "1.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "di": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+ "dev": true
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.5"
+ }
+ },
+ "doctrine": {
+ "version": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
+ }
+ },
+ "dom-serialize": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+ "dev": true,
+ "requires": {
+ "custom-event": "1.0.1",
+ "ent": "2.2.0",
+ "extend": "3.0.1",
+ "void-elements": "2.0.1"
+ }
+ },
+ "dom-serializer": {
+ "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
+ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
+ }
+ },
+ "domutils": {
+ "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
+ }
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "duplexify": {
+ "version": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
+ "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz",
+ "stream-shift": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.3",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
+ "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
+ "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=",
+ "dev": true,
+ "requires": {
+ "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz"
+ }
+ },
+ "engine.io": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz",
+ "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.3",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "ws": "1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz",
+ "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "2.3.3",
+ "engine.io-parser": "1.3.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parsejson": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "1.1.2",
+ "xmlhttprequest-ssl": "1.5.3",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
+ "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.6",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary": "0.1.7",
+ "wtf-8": "1.0.0"
+ }
+ },
+ "ent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+ "dev": true
+ },
+ "entities": {
+ "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz",
+ "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
+ }
+ },
+ "es5-ext": {
+ "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz",
+ "integrity": "sha1-gYTD5wWoIJSMLb4EOEk3mx29DEU=",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz",
+ "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.0.2.tgz"
+ },
+ "dependencies": {
+ "es6-symbol": {
+ "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.0.2.tgz",
+ "integrity": "sha1-HpKIeMb15jVBYltLtN9K8H0VQhk=",
+ "dev": true,
+ "requires": {
+ "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
+ "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz"
+ }
+ }
+ }
+ },
+ "es6-iterator": {
+ "version": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz",
+ "integrity": "sha1-vZaFZ9YWNeM8C4BydhPJy0sJa6w=",
+ "dev": true,
+ "requires": {
+ "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
+ "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz",
+ "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz"
+ }
+ },
+ "es6-map": {
+ "version": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.4.tgz",
+ "integrity": "sha1-o0sUe+IkdzpNfagHJ5TO+jYyuJc=",
+ "dev": true,
+ "requires": {
+ "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
+ "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz",
+ "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz",
+ "es6-set": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.4.tgz",
+ "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz",
+ "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz"
+ }
+ },
+ "es6-promise": {
+ "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz",
+ "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=",
+ "dev": true
+ },
+ "es6-set": {
+ "version": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.4.tgz",
+ "integrity": "sha1-lRa2dhwpZLkv9HlFYjOiR9xwfOg=",
+ "dev": true,
+ "requires": {
+ "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
+ "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz",
+ "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz",
+ "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz",
+ "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz"
+ }
+ },
+ "es6-symbol": {
+ "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz",
+ "integrity": "sha1-lEgcZV56fK2C66gy2X1UM0ltf/o=",
+ "dev": true,
+ "requires": {
+ "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
+ "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz"
+ }
+ },
+ "es6-weak-map": {
+ "version": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.1.tgz",
+ "integrity": "sha1-DSu9iCfrX7S6j5f7/qUNQ9sh6oE=",
+ "dev": true,
+ "requires": {
+ "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
+ "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz",
+ "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz",
+ "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escope": {
+ "version": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "dev": true,
+ "requires": {
+ "es6-map": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.4.tgz",
+ "es6-weak-map": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.1.tgz",
+ "esrecurse": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz",
+ "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz"
+ }
+ },
+ "eslint": {
+ "version": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz",
+ "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=",
+ "dev": true,
+ "requires": {
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "concat-stream": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "doctrine": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "es6-map": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.4.tgz",
+ "escope": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "espree": "https://registry.npmjs.org/espree/-/espree-3.3.2.tgz",
+ "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "file-entry-cache": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz",
+ "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "globals": "https://registry.npmjs.org/globals/-/globals-9.12.0.tgz",
+ "ignore": "https://registry.npmjs.org/ignore/-/ignore-3.2.0.tgz",
+ "imurmurhash": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "inquirer": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
+ "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.13.1.tgz",
+ "is-resolvable": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
+ "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "lodash": "4.17.4",
+ "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "optionator": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
+ "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "pluralize": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
+ "progress": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "require-uncached": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz",
+ "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
+ "table": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
+ "text-table": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "user-home": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
+ }
+ },
+ "chalk": {
+ "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
+ }
+ },
+ "esprima": {
+ "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "glob": {
+ "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz"
+ }
+ },
+ "globals": {
+ "version": "https://registry.npmjs.org/globals/-/globals-9.12.0.tgz",
+ "integrity": "sha1-mSzpCCjDpV+o8W+toXettkZkz50=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
+ "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
+ "dev": true,
+ "requires": {
+ "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz"
+ }
+ },
+ "minimatch": {
+ "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
+ }
+ },
+ "user-home": {
+ "version": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"
+ }
+ }
+ }
+ },
+ "espree": {
+ "version": "https://registry.npmjs.org/espree/-/espree-3.3.2.tgz",
+ "integrity": "sha1-2/P63rTstNR3gwPlAQOz02yIuJw=",
+ "dev": true,
+ "requires": {
+ "acorn": "https://registry.npmjs.org/acorn/-/acorn-4.0.3.tgz",
+ "acorn-jsx": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "esrecurse": {
+ "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz",
+ "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=",
+ "dev": true,
+ "requires": {
+ "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz",
+ "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "event-emitter": {
+ "version": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz",
+ "integrity": "sha1-jWPd+0z+H647MsomXExyAiIIC7U=",
+ "dev": true,
+ "requires": {
+ "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz",
+ "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.11.tgz"
+ }
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "execspawn": {
+ "version": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz",
+ "integrity": "sha1-gob53efOzeeQX73ATiTzaPI/jaY=",
+ "dev": true,
+ "requires": {
+ "util-extend": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz"
+ }
+ },
+ "exit-hook": {
+ "version": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+ "dev": true
+ },
+ "expand-braces": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
+ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
+ "dev": true,
+ "requires": {
+ "array-slice": "0.2.3",
+ "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "braces": "0.1.5"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
+ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
+ "dev": true,
+ "requires": {
+ "expand-range": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
+ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
+ "dev": true,
+ "requires": {
+ "is-number": "0.1.1",
+ "repeat-string": "0.2.2"
+ }
+ },
+ "is-number": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
+ "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
+ "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
+ "dev": true
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz"
+ }
+ },
+ "expand-range": {
+ "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extglob": {
+ "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz",
+ "integrity": "sha1-vTMUV0RRmrHDbD7p8x8I6QebZ/I=",
+ "dev": true
+ },
+ "figures": {
+ "version": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=",
+ "dev": true
+ }
+ }
+ },
+ "file-entry-cache": {
+ "version": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz",
+ "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.1.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz"
+ }
+ },
+ "filename-regex": {
+ "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz",
+ "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "requires": {
+ "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "randomatic": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.5.tgz",
+ "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.4.tgz"
+ }
+ },
+ "finalhandler": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz",
+ "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "find-up": {
+ "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz"
+ }
+ }
+ }
+ },
+ "flat-cache": {
+ "version": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.1.tgz",
+ "integrity": "sha1-bIN9YiWn3lZZMjdAs21TYfcWkf8=",
+ "dev": true,
+ "requires": {
+ "circular-json": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz",
+ "del": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz",
+ "write": "https://registry.npmjs.org/write/-/write-0.2.1.tgz"
+ }
+ },
+ "for-in": {
+ "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz",
+ "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz",
+ "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=",
+ "dev": true,
+ "requires": {
+ "for-in": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "fs-extra": {
+ "version": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz",
+ "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz",
+ "jsonfile": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.2.3.tgz",
+ "klaw": "https://registry.npmjs.org/klaw/-/klaw-1.1.3.tgz",
+ "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
+ "rimraf": "2.6.2"
+ }
+ },
+ "fs-readdir-recursive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz",
+ "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gasket": {
+ "version": "https://registry.npmjs.org/gasket/-/gasket-2.0.0.tgz",
+ "integrity": "sha1-Jsmz9GDHlIAcmJxHg8emOrW2p2Q=",
+ "dev": true,
+ "requires": {
+ "debug-stream": "https://registry.npmjs.org/debug-stream/-/debug-stream-2.1.0.tgz",
+ "duplexify": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
+ "multistream": "https://registry.npmjs.org/multistream/-/multistream-1.6.1.tgz",
+ "ndjson": "https://registry.npmjs.org/ndjson/-/ndjson-1.4.3.tgz",
+ "npm-execspawn": "https://registry.npmjs.org/npm-execspawn/-/npm-execspawn-1.3.0.tgz",
+ "pumpify": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz",
+ "resolve": "https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz",
+ "tabalot": "https://registry.npmjs.org/tabalot/-/tabalot-0.6.1.tgz",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz",
+ "integrity": "sha1-OVqe+ehz+/4SvRRAi9kbuTYAPWk=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "dev": true
+ }
+ }
+ },
+ "generate-function": {
+ "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "gh-pages-deploy": {
+ "version": "https://registry.npmjs.org/gh-pages-deploy/-/gh-pages-deploy-0.4.2.tgz",
+ "integrity": "sha1-Ku0Yh/Hem9xpF7ncnz5oyGrGiKY=",
+ "dev": true,
+ "requires": {
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
+ "gasket": "https://registry.npmjs.org/gasket/-/gasket-2.0.0.tgz",
+ "prompt": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz",
+ "require-module": "https://registry.npmjs.org/require-module/-/require-module-0.1.0.tgz"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+ },
+ "glob-base": {
+ "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz"
+ }
+ },
+ "glob-parent": {
+ "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "globby": {
+ "version": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz",
+ "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz"
+ }
+ },
+ "minimatch": {
+ "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz",
+ "integrity": "sha1-kgM84RETxB4mKNYf36QLwQ3AFVw=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.11.0",
+ "is-my-json-valid": "2.16.1",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz",
+ "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==",
+ "dev": true,
+ "requires": {
+ "generate-function": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "generate-object-property": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "jsonpointer": "4.0.1",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "dev": true,
+ "requires": {
+ "function-bind": "1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
+ }
+ },
+ "has-binary": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
+ "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "hat": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz",
+ "integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=",
+ "dev": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "hosted-git-info": {
+ "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz",
+ "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=",
+ "dev": true
+ },
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "domhandler": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
+ "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.4.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "i": {
+ "version": "https://registry.npmjs.org/i/-/i-0.3.5.tgz",
+ "integrity": "sha1-HSuFQVjsgWkRPGy39raAHpniEdU=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "https://registry.npmjs.org/ignore/-/ignore-3.2.0.tgz",
+ "integrity": "sha1-jYjwPDACoKxSEU2yXSxnOwvx5DU=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
+ "integrity": "sha1-bLtFIevVHODsCpNr/XZX736bFyo=",
+ "dev": true,
+ "requires": {
+ "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ },
+ "inherits": {
+ "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "inquirer": {
+ "version": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
+ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
+ "cli-cursor": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "cli-width": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
+ "figures": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "lodash": "4.17.4",
+ "readline2": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
+ "run-async": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
+ "rx-lite": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
+ "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
+ }
+ },
+ "insert-module-globals": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz",
+ "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.1",
+ "combine-source-map": "0.7.2",
+ "concat-stream": "1.5.2",
+ "is-buffer": "1.1.6",
+ "lexical-scope": "1.2.0",
+ "process": "0.11.10",
+ "through2": "2.0.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.0.6",
+ "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "https://registry.npmjs.org/invariant/-/invariant-2.2.1.tgz",
+ "integrity": "sha1-sJcBBUdmjH4zcCjr6Bbr42yKjVQ=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz"
+ }
+ },
+ "is-arrayish": {
+ "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "1.10.0"
+ }
+ },
+ "is-buffer": {
+ "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.3.tgz",
+ "integrity": "sha1-24l/w/esotUN6UtsjCiWpHcWJ68=",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz"
+ }
+ },
+ "is-dotfile": {
+ "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz",
+ "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz"
+ }
+ },
+ "is-extendable": {
+ "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz",
+ "integrity": "sha1-ZDhgPq6+J5OUj/SkJi7I2z1iWXs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz"
+ }
+ },
+ "is-glob": {
+ "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.13.1.tgz",
+ "integrity": "sha1-1Vd4qC/rawlj/0vhEdXRaE6JBwc=",
+ "dev": true,
+ "requires": {
+ "generate-function": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "generate-object-property": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "jsonpointer": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ },
+ "is-number": {
+ "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.2.tgz"
+ }
+ },
+ "is-path-cwd": {
+ "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz"
+ }
+ },
+ "is-path-inside": {
+ "version": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
+ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz"
+ }
+ },
+ "is-posix-bracket": {
+ "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-property": {
+ "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "dev": true,
+ "requires": {
+ "tryit": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isbinaryfile": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz",
+ "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
+ }
+ },
+ "isstream": {
+ "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz",
+ "integrity": "sha1-w/m20ibaEkJAZMzof84PtX/fp6I=",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.2.0.tgz",
+ "integrity": "sha1-c9XRCKt1aMNz/ct9AcHULVZbyMQ=",
+ "dev": true,
+ "requires": {
+ "babel-generator": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.18.0.tgz",
+ "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.16.0.tgz",
+ "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.18.0.tgz",
+ "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.18.0.tgz",
+ "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.13.1.tgz",
+ "istanbul-lib-coverage": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz",
+ "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.16.0.tgz",
+ "integrity": "sha1-+Q5g2ghikJ084JhzO105h8l8uN4=",
+ "dev": true,
+ "requires": {
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
+ "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-2.0.0.tgz"
+ }
+ },
+ "babel-generator": {
+ "version": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.18.0.tgz",
+ "integrity": "sha1-5PEEyzBjmW2YUFVqRarkoCIGCgc=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.8.0.tgz",
+ "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.18.0.tgz",
+ "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.18.0.tgz",
+ "detect-indent": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "jsesc": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "lodash": "4.17.4",
+ "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.3.tgz"
+ }
+ },
+ "babel-messages": {
+ "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.8.0.tgz",
+ "integrity": "sha1-v1BHNsqWfm1l7wrbWipflHyODrk=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.18.0.tgz"
+ }
+ },
+ "babel-runtime": {
+ "version": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.18.0.tgz",
+ "integrity": "sha1-D0F3/9mEku8Tufgj6ZlKAlhMkHg=",
+ "dev": true,
+ "requires": {
+ "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz",
+ "regenerator-runtime": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz"
+ }
+ },
+ "babel-template": {
+ "version": "https://registry.npmjs.org/babel-template/-/babel-template-6.16.0.tgz",
+ "integrity": "sha1-4UndGp8Do1+BfdvE0EgZiOfryMo=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.18.0.tgz",
+ "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.18.0.tgz",
+ "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.18.0.tgz",
+ "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.13.1.tgz",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.18.0.tgz",
+ "integrity": "sha1-WuqpgLrtKgfIxHMpzZDDuQyA8F4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.16.0.tgz",
+ "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.8.0.tgz",
+ "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.18.0.tgz",
+ "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.18.0.tgz",
+ "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.13.1.tgz",
+ "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "globals": "https://registry.npmjs.org/globals/-/globals-9.12.0.tgz",
+ "invariant": "https://registry.npmjs.org/invariant/-/invariant-2.2.1.tgz",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "https://registry.npmjs.org/babel-types/-/babel-types-6.18.0.tgz",
+ "integrity": "sha1-H31ac0dMWeuRUbJBe7/05Pznw/g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.18.0.tgz",
+ "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "lodash": "4.17.4",
+ "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.1.tgz"
+ }
+ },
+ "babylon": {
+ "version": "https://registry.npmjs.org/babylon/-/babylon-6.13.1.tgz",
+ "integrity": "sha1-rco1DgiPBGdkcVdlK6/q1t2439s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz",
+ "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=",
+ "dev": true
+ },
+ "globals": {
+ "version": "https://registry.npmjs.org/globals/-/globals-9.12.0.tgz",
+ "integrity": "sha1-mSzpCCjDpV+o8W+toXettkZkz50=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-2.0.0.tgz",
+ "integrity": "sha1-eZA/VWPud4zBFi5tzxoAJ8l/nLU=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "semver": {
+ "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "js-string-escape": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
+ "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz",
+ "integrity": "sha1-hkf34T9krBXZNXpZo0bIBNU7Pv4=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
+ "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "2.7.3"
+ }
+ },
+ "js2xmlparser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
+ "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
+ "dev": true,
+ "requires": {
+ "xmlcreate": "1.0.2"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsdoc": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
+ "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
+ "dev": true,
+ "requires": {
+ "babylon": "7.0.0-beta.19",
+ "bluebird": "3.5.1",
+ "catharsis": "0.8.9",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "js2xmlparser": "3.0.0",
+ "klaw": "2.0.0",
+ "marked": "0.3.6",
+ "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "requizzle": "0.2.1",
+ "strip-json-comments": "2.0.1",
+ "taffydb": "2.6.2",
+ "underscore": "1.8.3"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.19",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
+ "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "klaw": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz",
+ "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ }
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.2.3.tgz",
+ "integrity": "sha1-4lK5mmr5AdPsQfMyWJyQUJp7xgU=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz",
+ "integrity": "sha1-OvHdIP6FRjkQ1GmjheMwF9KgMNk=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "karma": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz",
+ "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "body-parser": "1.18.2",
+ "chokidar": "1.7.0",
+ "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "combine-lists": "1.0.1",
+ "connect": "3.6.5",
+ "core-js": "2.5.1",
+ "di": "0.0.1",
+ "dom-serialize": "2.2.1",
+ "expand-braces": "0.1.2",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "http-proxy": "1.16.2",
+ "isbinaryfile": "3.0.2",
+ "lodash": "3.10.1",
+ "log4js": "0.6.38",
+ "mime": "1.4.1",
+ "minimatch": "3.0.4",
+ "optimist": "0.6.1",
+ "qjobs": "1.1.5",
+ "range-parser": "1.2.0",
+ "rimraf": "2.6.2",
+ "safe-buffer": "5.1.1",
+ "socket.io": "1.7.3",
+ "source-map": "0.5.7",
+ "tmp": "0.0.31",
+ "useragent": "2.2.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "karma-browserify": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-5.1.1.tgz",
+ "integrity": "sha1-9kLXDXdtmrO3NSbFcyq8/qJAAxk=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.5.0",
+ "hat": "0.0.3",
+ "js-string-escape": "1.0.1",
+ "lodash": "3.10.1",
+ "minimatch": "3.0.4",
+ "os-shim": "0.1.3"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ }
+ }
+ },
+ "karma-firefox-launcher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz",
+ "integrity": "sha1-zlj0fCATqIFW1VpdYTN8CZz1u1E=",
+ "dev": true
+ },
+ "karma-mocha": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz",
+ "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "karma-mocha-reporter": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
+ "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "log-symbols": "2.1.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "supports-color": "4.5.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.2.tgz",
+ "integrity": "sha1-GH20JwRufpCUVpLmdoZovWkA3qA=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.3.tgz"
+ }
+ },
+ "klaw": {
+ "version": "https://registry.npmjs.org/klaw/-/klaw-1.1.3.tgz",
+ "integrity": "sha1-faM8a0L5s9yc7ADRfxOvAX/MJyE=",
+ "dev": true
+ },
+ "labeled-stream-splicer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "stream-splicer": "2.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "lazy-cache": {
+ "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "lcov-parse": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz",
+ "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=",
+ "dev": true
+ },
+ "levn": {
+ "version": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz"
+ }
+ },
+ "lexical-scope": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
+ "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
+ "dev": true,
+ "requires": {
+ "astw": "2.2.0"
+ }
+ },
+ "load-json-file": {
+ "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz",
+ "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz",
+ "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash-es": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz",
+ "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc="
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash.assignin": {
+ "version": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
+ "dev": true
+ },
+ "lodash.bind": {
+ "version": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.defaults": {
+ "version": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.filter": {
+ "version": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
+ "dev": true
+ },
+ "lodash.flatten": {
+ "version": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "dev": true
+ },
+ "lodash.foreach": {
+ "version": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
+ "dev": true
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.map": {
+ "version": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz",
+ "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=",
+ "dev": true
+ },
+ "lodash.pick": {
+ "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+ "dev": true
+ },
+ "lodash.reduce": {
+ "version": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
+ "dev": true
+ },
+ "lodash.reject": {
+ "version": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "log-driver": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz",
+ "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz",
+ "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "supports-color": "4.5.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "log4js": {
+ "version": "0.6.38",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz",
+ "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "longest": {
+ "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz",
+ "integrity": "sha1-UnWC1iz/TgTaP5l2xxENM5Lsfgw=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz"
+ }
+ },
+ "lru-cache": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+ "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=",
+ "dev": true
+ },
+ "marked": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz",
+ "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "braces": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "extglob": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz",
+ "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.2.tgz",
+ "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz",
+ "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "mocha": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+ },
+ "module-deps": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz",
+ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.1",
+ "browser-resolve": "1.11.2",
+ "cached-path-relative": "1.0.1",
+ "concat-stream": "1.5.2",
+ "defined": "1.0.0",
+ "detective": "4.5.0",
+ "duplexer2": "0.1.4",
+ "inherits": "2.0.3",
+ "parents": "1.0.1",
+ "readable-stream": "2.3.3",
+ "resolve": "1.5.0",
+ "stream-combiner2": "1.1.1",
+ "subarg": "1.0.0",
+ "through2": "2.0.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.0.6",
+ "typedarray": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ }
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ },
+ "multistream": {
+ "version": "https://registry.npmjs.org/multistream/-/multistream-1.6.1.tgz",
+ "integrity": "sha1-EfW+8XtyOoWzcGCm4aa1/T2bpGw=",
+ "dev": true,
+ "requires": {
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+ }
+ },
+ "mute-stream": {
+ "version": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz",
+ "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=",
+ "dev": true
+ },
+ "native-promise-only": {
+ "version": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
+ "dev": true
+ },
+ "ncp": {
+ "version": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz",
+ "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=",
+ "dev": true
+ },
+ "ndjson": {
+ "version": "https://registry.npmjs.org/ndjson/-/ndjson-1.4.3.tgz",
+ "integrity": "sha1-eqAm/jqzin2horStB7EAjnM+sjk=",
+ "dev": true,
+ "requires": {
+ "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "split2": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "isarray": "0.0.1",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ },
+ "through2": {
+ "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz",
+ "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz",
+ "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz"
+ }
+ },
+ "normalize-path": {
+ "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz",
+ "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=",
+ "dev": true
+ },
+ "npm-execspawn": {
+ "version": "https://registry.npmjs.org/npm-execspawn/-/npm-execspawn-1.3.0.tgz",
+ "integrity": "sha1-W0hgqM94NGU4ajiKIaFF0/cSVjg=",
+ "dev": true,
+ "requires": {
+ "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "execspawn": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz",
+ "shell-quote": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "xtend": "3.0.0"
+ },
+ "dependencies": {
+ "shell-quote": {
+ "version": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "dev": true,
+ "requires": {
+ "array-filter": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "array-map": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "array-reduce": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
+ },
+ "dependencies": {
+ "array-filter": {
+ "version": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-map": {
+ "version": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "dev": true
+ }
+ }
+ },
+ "xtend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "dev": true
+ }
+ }
+ },
+ "nth-check": {
+ "version": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "dev": true,
+ "requires": {
+ "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
+ }
+ },
+ "number-is-nan": {
+ "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz",
+ "integrity": "sha1-wCD1KcUoKt/dIz2R1LGBw9aG3Es=",
+ "dev": true
+ },
+ "nyc": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-7.1.0.tgz",
+ "integrity": "sha1-jhSXHzoV0au+x6xhDvVMuInp/7Q=",
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "caching-transform": "1.0.1",
+ "convert-source-map": "1.3.0",
+ "default-require-extensions": "1.0.0",
+ "find-cache-dir": "0.1.1",
+ "find-up": "1.1.2",
+ "foreground-child": "1.5.3",
+ "glob": "7.0.5",
+ "istanbul-lib-coverage": "1.0.0-alpha.4",
+ "istanbul-lib-hook": "1.0.0-alpha.4",
+ "istanbul-lib-instrument": "1.1.0-alpha.4",
+ "istanbul-lib-report": "1.0.0-alpha.3",
+ "istanbul-lib-source-maps": "1.0.0-alpha.10",
+ "istanbul-reports": "1.0.0-alpha.8",
+ "md5-hex": "1.3.0",
+ "micromatch": "2.3.11",
+ "mkdirp": "0.5.1",
+ "pkg-up": "1.0.0",
+ "resolve-from": "2.0.0",
+ "rimraf": "2.5.4",
+ "signal-exit": "3.0.0",
+ "spawn-wrap": "1.2.4",
+ "test-exclude": "1.1.0",
+ "yargs": "4.8.1",
+ "yargs-parser": "2.4.1"
+ },
+ "dependencies": {
+ "align-text": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "kind-of": "3.0.3",
+ "longest": "1.0.1",
+ "repeat-string": "1.5.4"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "append-transform": {
+ "version": "0.3.0",
+ "bundled": true,
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "bundled": true,
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.11.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.9.2",
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "2.0.0"
+ }
+ },
+ "babel-generator": {
+ "version": "6.11.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.8.0",
+ "babel-runtime": "6.9.2",
+ "babel-types": "6.11.1",
+ "detect-indent": "3.0.1",
+ "lodash": "4.13.1",
+ "source-map": "0.5.6"
+ }
+ },
+ "babel-messages": {
+ "version": "6.8.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.9.2"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.9.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "core-js": "2.4.1",
+ "regenerator-runtime": "0.9.5"
+ }
+ },
+ "babel-template": {
+ "version": "6.9.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.9.2",
+ "babel-traverse": "6.11.4",
+ "babel-types": "6.11.1",
+ "babylon": "6.8.4",
+ "lodash": "4.13.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.11.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.11.0",
+ "babel-messages": "6.8.0",
+ "babel-runtime": "6.9.2",
+ "babel-types": "6.11.1",
+ "babylon": "6.8.4",
+ "debug": "2.2.0",
+ "globals": "8.18.0",
+ "invariant": "2.2.1",
+ "lodash": "4.13.1"
+ }
+ },
+ "babel-types": {
+ "version": "6.11.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.9.2",
+ "babel-traverse": "6.11.4",
+ "esutils": "2.0.2",
+ "lodash": "4.13.1",
+ "to-fast-properties": "1.0.2"
+ }
+ },
+ "babylon": {
+ "version": "6.8.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.9.2"
+ }
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "caching-transform": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "md5-hex": "1.3.0",
+ "mkdirp": "0.5.1",
+ "write-file-atomic": "1.1.4"
+ }
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "code-point-at": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.0"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.4.1",
+ "bundled": true,
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.0.1",
+ "which": "1.2.10"
+ }
+ },
+ "debug": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "default-require-extensions": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "strip-bom": "2.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1",
+ "minimist": "1.2.0",
+ "repeating": "1.1.3"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "error-ex": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.5",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.5.4"
+ }
+ },
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "commondir": "1.0.1",
+ "mkdirp": "0.5.1",
+ "pkg-dir": "1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "for-in": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "for-in": "0.1.5"
+ }
+ },
+ "foreground-child": {
+ "version": "1.5.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cross-spawn": "4.0.0",
+ "signal-exit": "3.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "glob": {
+ "version": "7.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.5",
+ "inherits": "2.0.1",
+ "minimatch": "3.0.2",
+ "once": "1.3.3",
+ "path-is-absolute": "1.0.0"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "globals": {
+ "version": "8.18.0",
+ "bundled": true,
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.7.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.1.5",
+ "bundled": true,
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.3.3",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.2.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "kind-of": "3.0.3"
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isexe": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "istanbul-lib-coverage": {
+ "version": "1.0.0-alpha.4",
+ "bundled": true,
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "1.0.0-alpha.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "append-transform": "0.3.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "1.1.0-alpha.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "babel-generator": "6.11.4",
+ "babel-template": "6.9.0",
+ "babel-traverse": "6.11.4",
+ "babel-types": "6.11.1",
+ "babylon": "6.8.4",
+ "istanbul-lib-coverage": "1.0.0-alpha.4"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "1.0.0-alpha.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "istanbul-lib-coverage": "1.0.0-alpha.4",
+ "mkdirp": "0.5.1",
+ "path-parse": "1.0.5",
+ "rimraf": "2.5.4",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "3.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "1.0.0-alpha.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "1.0.0-alpha.4",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.5.4",
+ "source-map": "0.5.6"
+ }
+ },
+ "istanbul-reports": {
+ "version": "1.0.0-alpha.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "handlebars": "4.0.5"
+ }
+ },
+ "js-tokens": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.3"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.4",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.13.1",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "4.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lodash.keys": "4.0.7",
+ "lodash.rest": "4.0.3"
+ }
+ },
+ "lodash.keys": {
+ "version": "4.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.rest": {
+ "version": "4.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "js-tokens": "1.0.3"
+ },
+ "dependencies": {
+ "js-tokens": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "lru-cache": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.0.0"
+ }
+ },
+ "md5-hex": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "md5-o-matic": "0.1.1"
+ }
+ },
+ "md5-o-matic": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.0",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.0.3",
+ "normalize-path": "2.0.1",
+ "object.omit": "2.0.0",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.3"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.6"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "bundled": true,
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.3.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.1.5",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.3.0",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "object.omit": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.4",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "once": {
+ "version": "1.3.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8",
+ "wordwrap": "0.0.3"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.2",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.4",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "bundled": true,
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ }
+ },
+ "pkg-up": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ }
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "kind-of": "3.0.3"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.3.5",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.9.5",
+ "bundled": true,
+ "dev": true
+ },
+ "regex-cache": {
+ "version": "0.4.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3",
+ "is-primitive": "2.0.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.5.4",
+ "bundled": true,
+ "dev": true
+ },
+ "repeating": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.1"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.5.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "7.0.5"
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "slide": {
+ "version": "1.1.6",
+ "bundled": true,
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.6",
+ "bundled": true,
+ "dev": true
+ },
+ "spawn-wrap": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "foreground-child": "1.5.3",
+ "mkdirp": "0.5.1",
+ "os-homedir": "1.0.1",
+ "rimraf": "2.5.4",
+ "signal-exit": "2.1.2",
+ "which": "1.2.10"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.1"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "1.0.5",
+ "spdx-license-ids": "1.2.1"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.0.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "test-exclude": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "lodash.assign": "4.0.9",
+ "micromatch": "2.3.11",
+ "read-pkg-up": "1.0.1",
+ "require-main-filename": "1.0.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.7.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async": "0.2.10",
+ "source-map": "0.5.6",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.2"
+ }
+ },
+ "which": {
+ "version": "1.2.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "isexe": "1.1.2"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.4",
+ "imurmurhash": "0.1.4",
+ "slide": "1.1.6"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "yargs": {
+ "version": "4.8.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.1",
+ "lodash.assign": "4.0.9",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.1",
+ "which-module": "1.0.0",
+ "window-size": "0.2.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "2.4.1"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "3.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.1",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "2.4.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "lodash.assign": "4.0.9"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz",
+ "integrity": "sha1-mVBEVsNZi1ytT8WcJuipuxB/4L0=",
+ "dev": true
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object.omit": {
+ "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz",
+ "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
+ }
+ },
+ "onetime": {
+ "version": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.10",
+ "wordwrap": "0.0.3"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ }
+ }
+ },
+ "optionator": {
+ "version": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "fast-levenshtein": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz",
+ "levn": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "type-check": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz"
+ }
+ },
+ "options": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
+ "dev": true
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-shim": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
+ "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "outpipe": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz",
+ "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=",
+ "dev": true,
+ "requires": {
+ "shell-quote": "1.6.1"
+ }
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "pako": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "dev": true
+ },
+ "parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "dev": true,
+ "requires": {
+ "path-platform": "0.11.15"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "dev": true,
+ "requires": {
+ "asn1.js": "4.9.2",
+ "browserify-aes": "1.1.1",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
+ },
+ "parse-glob": {
+ "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "is-dotfile": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz",
+ "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz"
+ }
+ },
+ "parse-json": {
+ "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz"
+ }
+ },
+ "parsejson": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
+ "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
+ "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz",
+ "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "pify": {
+ "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz",
+ "integrity": "sha1-TINTjeH25mDCngoTRGhE96foglk=",
+ "dev": true,
+ "requires": {
+ "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"
+ }
+ },
+ "pkginfo": {
+ "version": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz",
+ "integrity": "sha1-NJ27f/04CB/K3AhT32h/DHdEzWU=",
+ "dev": true
+ },
+ "platform": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.4.tgz",
+ "integrity": "sha1-bw+xftqqSPIUQrOpdcBjEw8cPr0=",
+ "dev": true
+ },
+ "pluralize": {
+ "version": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
+ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.6.tgz",
+ "integrity": "sha1-D5awAc6pCxJZLOVm7bl+wR5pvQU=",
+ "dev": true
+ },
+ "progress": {
+ "version": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+ "dev": true
+ },
+ "prompt": {
+ "version": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz",
+ "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=",
+ "dev": true,
+ "requires": {
+ "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "pkginfo": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz",
+ "read": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "revalidator": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz",
+ "utile": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz",
+ "winston": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz"
+ }
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "dev": true,
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "pump": {
+ "version": "https://registry.npmjs.org/pump/-/pump-1.0.1.tgz",
+ "integrity": "sha1-8fFAn7m9EIW721drQ7hOxLXq3Bo=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz",
+ "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz",
+ "integrity": "sha1-6TUyWLqpEIll78QcsO+K3i88+wc=",
+ "dev": true,
+ "requires": {
+ "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz"
+ }
+ }
+ }
+ },
+ "pumpify": {
+ "version": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz",
+ "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=",
+ "dev": true,
+ "requires": {
+ "duplexify": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "pump": "https://registry.npmjs.org/pump/-/pump-1.0.1.tgz"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "qjobs": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz",
+ "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.5.tgz",
+ "integrity": "sha1-Xp718tVzxnvSuBJK6QtRVuRXhAs=",
+ "dev": true,
+ "requires": {
+ "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.2.tgz"
+ }
+ },
+ "randombytes": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
+ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
+ "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "dev": true,
+ "requires": {
+ "randombytes": "2.0.5",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "read": {
+ "version": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+ "dev": true,
+ "requires": {
+ "mute-stream": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz",
+ "path-type": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz"
+ }
+ },
+ "read-pkg-up": {
+ "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz"
+ }
+ },
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz",
+ "integrity": "sha1-okJvjc1FUcd6M/lu3yiGojyClmk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.6.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "readline2": {
+ "version": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
+ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "mute-stream": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz"
+ },
+ "dependencies": {
+ "mute-stream": {
+ "version": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
+ "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
+ "dev": true
+ }
+ }
+ },
+ "recursive-readdir": {
+ "version": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-1.3.0.tgz",
+ "integrity": "sha1-xuZsmuRz9JKPjmxnoF2A56VlKO8=",
+ "dev": true,
+ "requires": {
+ "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+ "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "sigmund": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz"
+ }
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz",
+ "integrity": "sha1-QD1tQKS9/5wzDdk5Lcuy2ai7ofw=",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
+ "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.4.tgz",
+ "integrity": "sha1-ZOwMkeD0tHX5DVtkNlHj5uW2wtU=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.1.0"
+ }
+ },
+ "require-main-filename": {
+ "version": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "require-module": {
+ "version": "https://registry.npmjs.org/require-module/-/require-module-0.1.0.tgz",
+ "integrity": "sha1-YwfrWsHYJZQmoiUVdTZWGOGRUT4=",
+ "dev": true,
+ "requires": {
+ "resolve": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz",
+ "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=",
+ "dev": true
+ }
+ }
+ },
+ "require-uncached": {
+ "version": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "resolve-from": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz"
+ }
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "requizzle": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz",
+ "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=",
+ "dev": true,
+ "requires": {
+ "underscore": "1.6.0"
+ },
+ "dependencies": {
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
+ "dev": true
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+ "onetime": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz"
+ }
+ },
+ "revalidator": {
+ "version": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz",
+ "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=",
+ "dev": true
+ },
+ "right-align": {
+ "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "dev": true,
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "rollup": {
+ "version": "0.36.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.36.4.tgz",
+ "integrity": "sha1-oiRJTFOGwdc9OPe7hvafXrARo9I=",
+ "dev": true,
+ "requires": {
+ "source-map-support": "0.4.18"
+ }
+ },
+ "rollup-plugin-node-resolve": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.1.1.tgz",
+ "integrity": "sha1-y7eDsNFbAnlNWJFTULLw2QK43cg=",
+ "dev": true,
+ "requires": {
+ "browser-resolve": "1.11.2",
+ "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "resolve": "1.5.0"
+ }
+ },
+ "rollup-plugin-npm": {
+ "version": "https://registry.npmjs.org/rollup-plugin-npm/-/rollup-plugin-npm-2.0.0.tgz",
+ "integrity": "sha1-iij/21FgvI4eNx3jntcfrwCdZVw=",
+ "dev": true
+ },
+ "rsvp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
+ "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==",
+ "dev": true
+ },
+ "run-async": {
+ "version": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
+ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
+ "dev": true,
+ "requires": {
+ "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz"
+ }
+ },
+ "rx-lite": {
+ "version": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
+ "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz",
+ "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "0.0.1",
+ "sha.js": "2.4.9"
+ },
+ "dependencies": {
+ "json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
+ }
+ }
+ }
+ },
+ "shell-quote": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "dev": true,
+ "requires": {
+ "array-filter": "0.0.1",
+ "array-map": "0.0.0",
+ "array-reduce": "0.0.0",
+ "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
+ }
+ },
+ "shelljs": {
+ "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz",
+ "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "socket.io": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz",
+ "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=",
+ "dev": true,
+ "requires": {
+ "debug": "2.3.3",
+ "engine.io": "1.8.3",
+ "has-binary": "0.1.7",
+ "object-assign": "4.1.0",
+ "socket.io-adapter": "0.5.0",
+ "socket.io-client": "1.7.3",
+ "socket.io-parser": "2.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=",
+ "dev": true
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz",
+ "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=",
+ "dev": true,
+ "requires": {
+ "debug": "2.3.3",
+ "socket.io-parser": "2.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ }
+ }
+ },
+ "socket.io-client": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz",
+ "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.3.3",
+ "engine.io-client": "1.8.3",
+ "has-binary": "0.1.7",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "2.3.1",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz",
+ "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.1.2",
+ "debug": "2.2.0",
+ "isarray": "0.0.1",
+ "json3": "3.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.3.tgz",
+ "integrity": "sha1-gmdLhacbC+dsPnQW0V6fUlLrO+A=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "spdx-correct": {
+ "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "split": {
+ "version": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "dev": true,
+ "requires": {
+ "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
+ }
+ },
+ "split2": {
+ "version": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
+ "integrity": "sha1-At2smtwD7Au3jBKC7Aecpuha6QA=",
+ "dev": true,
+ "requires": {
+ "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "through2": {
+ "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "sprintf-js": {
+ "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "stack-trace": {
+ "version": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz",
+ "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.1.4",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "stream-http": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
+ "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "stream-splicer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "string-width": {
+ "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz"
+ }
+ },
+ "strip-bom": {
+ "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz"
+ }
+ },
+ "strip-json-comments": {
+ "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
+ "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
+ "dev": true
+ },
+ "subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "syntax-error": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz",
+ "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=",
+ "dev": true,
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ }
+ }
+ },
+ "tabalot": {
+ "version": "https://registry.npmjs.org/tabalot/-/tabalot-0.6.1.tgz",
+ "integrity": "sha1-B/lAXuWayXUjjMCbueDWrFKU/5w=",
+ "dev": true,
+ "requires": {
+ "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+ "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
+ "dev": true
+ }
+ }
+ },
+ "table": {
+ "version": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
+ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
+ "dev": true,
+ "requires": {
+ "ajv": "https://registry.npmjs.org/ajv/-/ajv-4.8.2.tgz",
+ "ajv-keywords": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.1.1.tgz",
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
+ "lodash": "4.17.4",
+ "slice-ansi": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "string-width": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz",
+ "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
+ }
+ }
+ }
+ },
+ "taffydb": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
+ "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=",
+ "dev": true
+ },
+ "test-exclude": {
+ "version": "https://registry.npmjs.org/test-exclude/-/test-exclude-2.1.3.tgz",
+ "integrity": "sha1-qNiWjh2oMmb5hk8oUsVeIg8GQ0o=",
+ "dev": true,
+ "requires": {
+ "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "require-main-filename": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
+ "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=",
+ "dev": true
+ }
+ }
+ },
+ "text-table": {
+ "version": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz",
+ "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.5.tgz",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "dev": true,
+ "requires": {
+ "process": "0.11.10"
+ }
+ },
+ "tmp": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
+ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.1.tgz",
+ "integrity": "sha1-SkFVTSsvS74teUBg3Ec5axC7SKg=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tryit": {
+ "version": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"
+ }
+ },
+ "type-detect": {
+ "version": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.17"
+ }
+ },
+ "typedarray": {
+ "version": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.7.5",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz",
+ "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10",
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=",
+ "dev": true
+ },
+ "umd": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz",
+ "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
+ "dev": true
+ },
+ "underscore-contrib": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz",
+ "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=",
+ "dev": true,
+ "requires": {
+ "underscore": "1.6.0"
+ },
+ "dependencies": {
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
+ "dev": true
+ }
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "useragent": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz",
+ "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.2.4",
+ "tmp": "0.0.31"
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util-extend": {
+ "version": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz",
+ "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=",
+ "dev": true
+ },
+ "utile": {
+ "version": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz",
+ "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=",
+ "dev": true,
+ "requires": {
+ "async": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "deep-equal": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
+ "i": "https://registry.npmjs.org/i/-/i-0.3.5.tgz",
+ "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "ncp": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "async": {
+ "version": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "dev": true
+ },
+ "deep-equal": {
+ "version": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz",
+ "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=",
+ "dev": true
+ }
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl": {
+ "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz"
+ }
+ },
+ "vinyl-buffer": {
+ "version": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.0.tgz",
+ "integrity": "sha1-ygZ+oIQx1QdyKx3lCD9gJhbrwjQ=",
+ "dev": true,
+ "requires": {
+ "bl": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz"
+ },
+ "dependencies": {
+ "bl": {
+ "version": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
+ "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz"
+ }
+ },
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "through2": {
+ "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "vinyl-source-stream": {
+ "version": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz",
+ "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=",
+ "dev": true,
+ "requires": {
+ "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "through2": {
+ "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
+ "dev": true
+ },
+ "watchify": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.9.0.tgz",
+ "integrity": "sha1-8HX9LoqGrN6Eztum5cKgvt1SPZ4=",
+ "dev": true,
+ "requires": {
+ "anymatch": "1.3.2",
+ "browserify": "14.5.0",
+ "chokidar": "1.7.0",
+ "defined": "1.0.0",
+ "outpipe": "1.1.1",
+ "through2": "2.0.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "2.0.3",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "window-size": {
+ "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "winston": {
+ "version": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz",
+ "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=",
+ "dev": true,
+ "requires": {
+ "async": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "colors": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "cycle": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "eyes": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "pkginfo": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
+ "stack-trace": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz"
+ },
+ "dependencies": {
+ "async": {
+ "version": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "colors": {
+ "version": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "pkginfo": {
+ "version": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
+ "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=",
+ "dev": true
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz",
+ "integrity": "sha1-HmWWmWXMvC20VIxrhKbyxa7dRzk=",
+ "dev": true
+ },
+ "write": {
+ "version": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"
+ }
+ },
+ "ws": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz",
+ "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=",
+ "dev": true,
+ "requires": {
+ "options": "0.0.6",
+ "ultron": "1.0.2"
+ }
+ },
+ "wtf-8": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz",
+ "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=",
+ "dev": true
+ },
+ "xmlcreate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
+ "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=",
+ "dev": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
+ "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "https://registry.npmjs.org/yargs/-/yargs-3.9.1.tgz",
+ "integrity": "sha1-d0NsIYD5kdum15rEJo1maXOmw/Y=",
+ "dev": true,
+ "requires": {
+ "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ }
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
index 3c5f5f1..0afd79f 100644
--- a/package.json
+++ b/package.json
@@ -1,9 +1,10 @@
{
"name": "async",
"description": "Higher-order functions and common patterns for asynchronous code",
- "version": "2.3.0",
+ "version": "2.6.0",
"main": "dist/async.js",
"author": "Caolan McMahon",
+ "homepage": "https://caolan.github.io/async/",
"repository": {
"type": "git",
"url": "https://github.com/caolan/async.git"
diff --git a/perf/benchmark.js b/perf/benchmark.js
index 42f400a..393464f 100755
--- a/perf/benchmark.js
+++ b/perf/benchmark.js
@@ -213,8 +213,7 @@ function cloneVersion(tag, callback) {
fs.open(versionDir + "/package.json", "r", function (err, handle) {
if (!err) {
// version has already been cloned
- fs.close(handle);
- return callback();
+ return fs.close(handle, callback);
}
var repoPath = path.join(__dirname, "..");
diff --git a/perf/suites.js b/perf/suites.js
index ca400dc..02f0e7e 100644
--- a/perf/suites.js
+++ b/perf/suites.js
@@ -131,6 +131,24 @@ module.exports = [{
}, done);
}
}, {
+ name: "concat",
+ // args lists are passed to the setup function
+ args: [
+ [10],
+ [300],
+ [10000]
+ ],
+ setup: function setup(count) {
+ tasks = _.range(count);
+ },
+ fn: function(async, done) {
+ async.concat(tasks, function(num, cb) {
+ async.setImmediate(function() {
+ cb(null, [num]);
+ });
+ }, done);
+ }
+}, {
name: "eachOf",
// args lists are passed to the setup function
args: [
@@ -234,8 +252,32 @@ module.exports = [{
async.waterfall(tasks, done);
}
}, {
+ name: "auto",
+ args: [
+ [5],
+ [10],
+ [100]
+ ],
+ setup: function setup(count) {
+ tasks = {
+ dep1: function (cb) { cb(null, 1); }
+ };
+ _.times(count, function(n) {
+ var task = ['dep' + (n+1), function(results, cb) {
+ setImmediate(cb, null, n);
+ }];
+ if (n > 2) task.unshift('dep' + n);
+ tasks['dep' + (n+2)] = task;
+ });
+ },
+ fn: function(async, done) {
+ async.auto(tasks, done);
+ }
+}, {
name: "queue",
args: [
+ [10],
+ [100],
[1000],
[30000],
[100000],
diff --git a/support/aliases.json b/support/aliases.json
new file mode 100644
index 0000000..a7ed776
--- /dev/null
+++ b/support/aliases.json
@@ -0,0 +1,24 @@
+{
+ "all": "every",
+ "allLimit": "everyLimit",
+ "allSeries": "everySeries",
+ "any": "some",
+ "anyLimit": "someLimit",
+ "anySeries": "someSeries",
+ "find": "detect",
+ "findLimit": "detectLimit",
+ "findSeries": "detectSeries",
+ "forEach": "each",
+ "forEachSeries": "eachSeries",
+ "forEachLimit": "eachLimit",
+ "forEachOf": "eachOf",
+ "forEachOfSeries": "eachOfSeries",
+ "forEachOfLimit": "eachOfLimit",
+ "inject": "reduce",
+ "foldl": "reduce",
+ "foldr": "reduceRight",
+ "select": "filter",
+ "selectLimit": "filterLimit",
+ "selectSeries": "filterSeries",
+ "wrapSync": "asyncify"
+}
diff --git a/support/build.test.js b/support/build.test.js
index cc56348..ebf18b7 100644
--- a/support/build.test.js
+++ b/support/build.test.js
@@ -1,5 +1,5 @@
// Smoke test for the CJS build
-var methods = ["each", "waterfall", "queue", "eachSeries"];
+var methods = ["each", "waterfall", "queue", "eachSeries", "forEachOf"];
var expect = require('chai').expect;
var rollup = require('rollup').rollup;
var rollupPluginNodeResolve = require('rollup-plugin-node-resolve');
diff --git a/support/build/aggregate-build.js b/support/build/aggregate-build.js
deleted file mode 100644
index 7269291..0000000
--- a/support/build/aggregate-build.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import compileModules from './compile-modules';
-import {rollup} from 'rollup';
-import rimraf from 'rimraf/rimraf';
-
-export default function buildBundle(options) {
- function bundle() {
- rollup({
- entry: options.outpath + '/index.js'
- }).then(function ( bundle ) {
- bundle.write({
- format: options.format,
- moduleName: 'async',
- dest: options.outfile
- });
- rimraf.sync(options.outpath);
- }).catch(console.error);
- }
-
- compileModules(bundle, options);
-}
diff --git a/support/build/aggregate-bundle.js b/support/build/aggregate-bundle.js
index 482bfcd..c48b25f 100644
--- a/support/build/aggregate-bundle.js
+++ b/support/build/aggregate-bundle.js
@@ -1,9 +1,15 @@
-import aggregateBuild from './aggregate-build';
+const {rollup} = require('rollup');
+const nodeResolve = require('rollup-plugin-node-resolve');
-aggregateBuild({
- es6: true,
- outpath:'build/build-modules-es6',
- outfile: 'build/dist/async.js',
- format: 'umd',
- lodashRename: true
-});
+rollup({
+ entry: 'build-es/index.js',
+ plugins: [ nodeResolve() ]
+})
+.then(function ( bundle ) {
+ return bundle.write({
+ format: 'umd',
+ moduleName: 'async',
+ dest: 'build/dist/async.js'
+ });
+})
+.catch((err) => { throw err; });
diff --git a/support/build/aggregate-cjs.js b/support/build/aggregate-cjs.js
deleted file mode 100644
index 077ca49..0000000
--- a/support/build/aggregate-cjs.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import aggregateBuild from './aggregate-build';
-
-aggregateBuild({
- es6: true,
- outpath:'build/build-modules-es6',
- outfile: 'build/index.js',
- format: 'cjs',
- lodashRename: false
-});
diff --git a/support/build/compile-module.js b/support/build/compile-module.js
new file mode 100755
index 0000000..38a4d38
--- /dev/null
+++ b/support/build/compile-module.js
@@ -0,0 +1,32 @@
+#!/usr/bin/env node
+
+const yargs = require('yargs');
+const fs = require('fs');
+const {transformFile} = require('babel-core');
+const pluginCJS = require('babel-plugin-transform-es2015-modules-commonjs');
+const pluginModuleExports = require('babel-plugin-add-module-exports');
+
+compileModule(yargs.argv, (err) => {
+ if (err) throw err;
+})
+
+function compileModule(options, callback) {
+ const {file, output} = options;
+ const plugins = [
+ pluginModuleExports,
+ pluginCJS
+ ];
+
+ transformFile(file, {
+ babelrc: false,
+ ast: false,
+ plugins
+ }, (err, content) => {
+ if (err) return callback(err);
+ if (!output) {
+ process.stdout.write(content.code);
+ return callback();
+ }
+ fs.writeFile(output, content.code, callback)
+ })
+}
diff --git a/support/build/compile-modules.js b/support/build/compile-modules.js
deleted file mode 100644
index 16aa1ca..0000000
--- a/support/build/compile-modules.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import async from '../../lib';
-import {transformFile} from 'babel-core';
-import _ from 'lodash';
-import readdirR from 'recursive-readdir';
-import pluginCJS from 'babel-plugin-transform-es2015-modules-commonjs';
-import pluginModuleExports from 'babel-plugin-add-module-exports';
-import pluginLodashImportRename from './plugin-lodash-import-rename';
-import {join as joinPath} from 'path';
-import fs from 'fs-extra';
-
-export default function(cb, options) {
- options = _.defaults({}, options, {
- path:'lib/',
- outpath:'build',
- es6: false,
- lodashRename: false
- });
- let plugins = [];
-
- if (options.lodashRename) {
- plugins.push(pluginLodashImportRename);
- }
- if (!options.es6) {
- plugins.push(pluginModuleExports);
- plugins.push(pluginCJS);
- }
-
- readdirR(options.path, [], function(err, files) {
- fs.emptyDirSync(options.outpath);
- fs.emptyDirSync(joinPath(options.outpath, 'internal'));
- async.each(files, (file, callback) => {
- let filename = file.startsWith(options.path) ?
- file.slice(options.path.length) :
- file;
-
- transformFile(file, {
- babelrc: false,
- plugins: plugins
- }, function(err, content) {
- let outpath = joinPath(options.outpath, filename);
- fs.writeFile(outpath, content.code, callback);
- });
- }, cb);
- });
-}
diff --git a/support/build/modules-cjs.js b/support/build/modules-cjs.js
deleted file mode 100644
index 09632ff..0000000
--- a/support/build/modules-cjs.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import compileModules from './compile-modules';
-
-compileModules(function() {}, {es6: false});
diff --git a/support/build/plugin-lodash-import-rename.js b/support/build/plugin-lodash-import-rename.js
deleted file mode 100644
index 6fe893b..0000000
--- a/support/build/plugin-lodash-import-rename.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import _ from 'lodash';
-import {dirname, sep} from 'path';
-
-export default function() {
- return {
- visitor: {
-
- ImportDeclaration(path, mapping) {
- let {node} = path;
- let {value} = node.source;
-
- if (/\blodash\b/.test(value)) {
- let f = mapping.file.opts.filename;
- let dir = dirname(f).split(sep);
- let relative = _.repeat('../', dir.length + 1);
-
- node.source.value = value.replace(
- /\blodash\b/,
- relative + 'node_modules/lodash-es');
- }
- }
- }
- };
-}
diff --git a/support/es.test.js b/support/es.test.js
index 9f7fd5e..3dbb7d6 100644
--- a/support/es.test.js
+++ b/support/es.test.js
@@ -1,8 +1,10 @@
// simple async example to test ES module build output
import {waterfall as waterfall} from "../build-es/index";
+import {wrapSync} from "../build-es/index";
import async from "../build-es/index";
import constant from "../build-es/constant";
+import forEachOf from "../build-es/forEachOf";
waterfall([
constant(42),
@@ -10,6 +12,19 @@ waterfall([
async.setImmediate(function () {
next(null, val);
});
+ },
+ wrapSync(function (a) { return a; }),
+ function (val, next) {
+ async.forEachOf({a: 1}, function (val, key, cb) {
+ if (val !== 1 && key !== 'a') return cb(new Error('fail!'));
+ cb();
+ }, function (err) { next (err, val)});
+ },
+ function (val, next) {
+ forEachOf([1, 2, 3], function (v, key, cb) {
+ val += key
+ cb()
+ }, function (err) { next(err, val - 3) })
}
], function (err, result) {
if (err) { throw err; }
diff --git a/support/generate-index.js b/support/generate-index.js
new file mode 100644
index 0000000..4154d03
--- /dev/null
+++ b/support/generate-index.js
@@ -0,0 +1,66 @@
+#!/usr/bin/env node
+'use strict'
+
+const fs = require('fs')
+const path = require('path')
+require('babel-core/register')
+const autoInject = require('../lib/autoInject').default
+
+generateIndex(err => {
+ if (err) throw err
+})
+
+function generateIndex(cb) {
+ autoInject({
+ entries: cb => readEntries(cb),
+ aliases: cb => cb(null, require('./aliases')),
+ template: cb => fs.readFile(path.join(__dirname, './index-template.js'), 'utf8', cb),
+ generated: (entries, aliases, template, cb) => {
+ cb(null, renderTemplate(entries, aliases, template))
+ }
+ }, (err, results) => {
+ if (err) return cb(err)
+ console.log(results.generated)
+ })
+}
+
+function readEntries (cb) {
+ const libDir = path.join(__dirname, '../lib')
+ fs.readdir(libDir, (err, files) => {
+ if (err) return cb(err)
+ cb(null, files
+ .map(file => path.basename(file, '.js'))
+ .filter(file => !file.match(/(^(index|internal)$)/)))
+ })
+}
+
+function renderTemplate(entries, aliases, template) {
+ return template
+ .replace(
+ `/*__imports__*/`,
+ entries
+ .map(entry => `import ${entry} from './${entry}'`)
+ .join('\n'))
+ .replace(
+ `/*__default_object__*/`,
+ entries
+ .map(entry => ` ${entry}: ${entry}`)
+ .join(',\n') + ',')
+
+ .replace(
+ `/*__default_aliases__*/`,
+ Object.keys(aliases)
+ .map(alias => ` ${alias}: ${aliases[alias]}`)
+ .join(',\n'))
+ .replace(
+ `/*__exports__*/`,
+ entries
+ .map(entry => ` ${entry} as ${entry}`)
+ .join(',\n') + ',')
+
+ .replace(
+ `/*__alias_exports__*/`,
+ Object.keys(aliases)
+ .map(alias => ` ${aliases[alias]} as ${alias}`)
+ .join(',\n'))
+}
diff --git a/support/get-alias.js b/support/get-alias.js
new file mode 100644
index 0000000..0323fc0
--- /dev/null
+++ b/support/get-alias.js
@@ -0,0 +1,12 @@
+#!/usr/bin/env node
+const path = require('path')
+const aliases = require('./aliases.json')
+
+const toAlias = process.argv[2]
+const baseName = path.basename(toAlias, '.js')
+
+const alias = aliases[baseName] || baseName
+
+process.stdout.write(toAlias
+ .replace(/^[^/]+\//, 'lib/')
+ .replace(baseName, alias))
diff --git a/support/index-template.js b/support/index-template.js
new file mode 100644
index 0000000..58ba867
--- /dev/null
+++ b/support/index-template.js
@@ -0,0 +1,80 @@
+/**
+ * An "async function" in the context of Async is an asynchronous function with
+ * a variable number of parameters, with the final parameter being a callback.
+ * (`function (arg1, arg2, ..., callback) {}`)
+ * The final callback is of the form `callback(err, results...)`, which must be
+ * called once the function is completed. The callback should be called with a
+ * Error as its first argument to signal that an error occurred.
+ * Otherwise, if no error occurred, it should be called with `null` as the first
+ * argument, and any additional `result` arguments that may apply, to signal
+ * successful completion.
+ * The callback must be called exactly once, ideally on a later tick of the
+ * JavaScript event loop.
+ *
+ * This type of function is also referred to as a "Node-style async function",
+ * or a "continuation passing-style function" (CPS). Most of the methods of this
+ * library are themselves CPS/Node-style async functions, or functions that
+ * return CPS/Node-style async functions.
+ *
+ * Wherever we accept a Node-style async function, we also directly accept an
+ * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}.
+ * In this case, the `async` function will not be passed a final callback
+ * argument, and any thrown error will be used as the `err` argument of the
+ * implicit callback, and the return value will be used as the `result` value.
+ * (i.e. a `rejected` of the returned Promise becomes the `err` callback
+ * argument, and a `resolved` value becomes the `result`.)
+ *
+ * Note, due to JavaScript limitations, we can only detect native `async`
+ * functions and not transpilied implementations.
+ * Your environment must have `async`/`await` support for this to work.
+ * (e.g. Node > v7.6, or a recent version of a modern browser).
+ * If you are using `async` functions through a transpiler (e.g. Babel), you
+ * must still wrap the function with [asyncify]{@link module:Utils.asyncify},
+ * because the `async function` will be compiled to an ordinary function that
+ * returns a promise.
+ *
+ * @typedef {Function} AsyncFunction
+ * @static
+ */
+
+/**
+ * Async is a utility module which provides straight-forward, powerful functions
+ * for working with asynchronous JavaScript. Although originally designed for
+ * use with [Node.js](http://nodejs.org) and installable via
+ * `npm install --save async`, it can also be used directly in the browser.
+ * @module async
+ * @see AsyncFunction
+ */
+
+
+/**
+ * A collection of `async` functions for manipulating collections, such as
+ * arrays and objects.
+ * @module Collections
+ */
+
+/**
+ * A collection of `async` functions for controlling the flow through a script.
+ * @module ControlFlow
+ */
+
+/**
+ * A collection of `async` utility functions.
+ * @module Utils
+ */
+
+/*__imports__*/
+
+export default {
+/*__default_object__*/
+
+ // aliases
+/*__default_aliases__*/
+};
+
+export {
+/*__exports__*/
+
+ // Aliases
+/*__alias_exports__*/
+};
diff --git a/support/jsdoc/theme/tmpl/layout.tmpl b/support/jsdoc/theme/tmpl/layout.tmpl
index 631efa4..a5a3421 100644
--- a/support/jsdoc/theme/tmpl/layout.tmpl
+++ b/support/jsdoc/theme/tmpl/layout.tmpl
@@ -41,6 +41,7 @@
</li>
<li><a href="./index.html">Home</a></li>
<li><a href="./docs.html">Docs</a></li>
+ <li><a href="https://github.com/caolan/async/blob/master/CHANGELOG.md">Changelog</a></li>
<li><a href="https://github.com/caolan/async"><i class="ion-social-github" aria-hidden="true"></i></a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
diff --git a/support/list-aliases.js b/support/list-aliases.js
new file mode 100644
index 0000000..d1eeed5
--- /dev/null
+++ b/support/list-aliases.js
@@ -0,0 +1,25 @@
+#!/usr/bin/env node
+const path = require('path')
+const yargs = require('yargs')
+const aliases = require('./aliases')
+
+const argv = yargs
+ .option('sources', {
+ type: 'boolean',
+ default: false
+ })
+ .argv
+
+const prefix = argv._[0] || 'build-es/'
+
+const targets = Object.keys(aliases).map(argv.sources ? expandSource : expandAlias)
+process.stdout.write(targets.join(' '))
+
+
+function expandAlias (alias) {
+ return path.join(prefix, `${alias}.js`)
+}
+
+function expandSource (alias) {
+ return path.join(prefix, `${aliases[alias]}.js`)
+}
diff --git a/support/sync-cjs-package.js b/support/sync-cjs-package.js
index 7db78b0..1ef530d 100755
--- a/support/sync-cjs-package.js
+++ b/support/sync-cjs-package.js
@@ -6,5 +6,3 @@ var json = JSON.parse(fs.readFileSync(__dirname + "/../package.json"), "utf8");
delete json.dependencies["lodash-es"];
process.stdout.write(JSON.stringify(json, null, 2));
-
-
diff --git a/support/sync-es-package.js b/support/sync-es-package.js
index bb72f47..e6c8aa6 100755
--- a/support/sync-es-package.js
+++ b/support/sync-es-package.js
@@ -5,10 +5,8 @@ var json = JSON.parse(fs.readFileSync(__dirname + "/../package.json"), "utf8");
json.name = "async-es";
json.main = "index.js";
+json.sideEffects = false;
delete json.dependencies["lodash"];
-delete json.volo;
-delete json.spm;
-delete json.jam;
process.stdout.write(JSON.stringify(json, null, 2));