diff --git a/.circleci/config.yml b/.circleci/config.yml index 6e2a080b..f0375fd3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -49,10 +49,21 @@ jobs: ignore: - gh-pages + node12: + docker: + - image: circleci/node:12 + <<: *common-build + + filters: + branches: + ignore: + - gh-pages + workflows: version: 2 test_node_versions: jobs: - node8 - node10 + - node12 diff --git a/CHANGELOG.md b/CHANGELOG.md index a3c636f4..0517cce6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,48 @@ -# Change Log +# Changelog All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.0.0](https://github.com/nodeshift/opossum/compare/v1.11.1...v2.0.0) (2019-06-05) + + +### Build System + +* use node 12 on ci/cd in addition to 8 and 10 ([93f8008](https://github.com/nodeshift/opossum/commit/93f8008)) + + +### Features + +* prometheus client integration ([282b467](https://github.com/nodeshift/opossum/commit/282b467)) + +### Breaking Changes + +* `health-check-failed` and `semaphore-locked` events have been changed to `healthCheckFailed` and `semaphoreLocked` respectively + + +### [1.11.1](https://github.com/nodeshift/opossum/compare/v1.11.0...v1.11.1) (2019-05-22) + + +### Build System + +* don't fail coverage from untrusted forks ([194e18d](https://github.com/nodeshift/opossum/commit/194e18d)) +* remove travis-ci now that circleci is good ([9756bf5](https://github.com/nodeshift/opossum/commit/9756bf5)) +* rename the workflow to test_node_versions in circleci ([c7cc277](https://github.com/nodeshift/opossum/commit/c7cc277)) +* set circleci to ignore gh-pages branch ([23e1384](https://github.com/nodeshift/opossum/commit/23e1384)) +* set up coveralls (again); remove Makefile ([d099b45](https://github.com/nodeshift/opossum/commit/d099b45)) +* switch to standardx for linting ([4967736](https://github.com/nodeshift/opossum/commit/4967736)) +* try circleci for continuous integration ([1a77f3a](https://github.com/nodeshift/opossum/commit/1a77f3a)) +* try workflows for multiple version builds ([5e9e6c8](https://github.com/nodeshift/opossum/commit/5e9e6c8)) +* use codacy for coverage instead of coveralls ([e359ab9](https://github.com/nodeshift/opossum/commit/e359ab9)) + + +### Tests + +* generate browser/headless test suite ([2d24b35](https://github.com/nodeshift/opossum/commit/2d24b35)) +* improve circuit.shutdown() test ([6841abc](https://github.com/nodeshift/opossum/commit/6841abc)) +* switch to serve instead of http-server for browser tests ([50ccab7](https://github.com/nodeshift/opossum/commit/50ccab7)) + + + # [1.11.0](https://github.com/nodeshift/opossum/compare/v1.10.1...v1.11.0) (2019-03-14) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b3b45adb..568486f3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,8 +86,8 @@ Click the 'Pull Request' button and fill out the form. These are mostly notes for myself. - * Make sure everything works: `make clean && npm install && make ci` - * Run standard-version: `npm run release` + * Be sure you are starting from a clean slate: `npm clean && npm install` + * Run standard-version: `npm run release` - this will run the `ci` task * Push to GitHub: `git push --follow-tags origin master` * Publish to npmjs.com: `npm publish` * Assuming all goes well, head over to https://github.com/nodeshift/opossum/releases diff --git a/README.md b/README.md index 5a3322bd..56e70c00 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ on the web - search it! Fowler's blog post is one place to | Documentation: | https://nodeshift.dev/opossum/ | | Typngs: | https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/opossum | Issue tracker: | https://github.com/nodeshift/opossum/issues | -| Engines: | Node.js 8.x, 10.x, 11.x | +| Engines: | Node.js 8.x, 10.x, 11.x, 12.x | ## Usage @@ -161,8 +161,8 @@ Here are the events you can listen for. * `close` - emitted when the breaker state changes to `closed` * `halfOpen` - emitted when the breaker state changes to `halfOpen` * `fallback` - emitted when the breaker has a fallback function and executes it - * `semaphore-locked` - emitted when the breaker is at capacity and cannot execute the request - * `health-check-failed` - emitted when a user-supplied health check function returns a rejected promise + * `semaphoreLocked` - emitted when the breaker is at capacity and cannot execute the request + * `healthCheckFailed` - emitted when a user-supplied health check function returns a rejected promise Handling events gives a greater level of control over your application behavior. diff --git a/config/webpack.browser.config.js b/config/webpack.browser.config.js new file mode 100644 index 00000000..3646eea2 --- /dev/null +++ b/config/webpack.browser.config.js @@ -0,0 +1,66 @@ +const path = require('path'); +const webpack = require('webpack'); +const configs = ['opossum', 'opossum.min', 'browser-test'] + .map(key => generateConfig(key)); + +// add a webpack for tests +configs.push({ + target: 'web', + mode: 'development', + entry: './test/browser/index.js', + node: { + fs: 'empty' + }, + output: { + path: path.resolve(__dirname, '..', 'test', 'browser'), + filename: 'webpack-test.js' + }, + resolve: { + modules: ['node_modules'], + extensions: ['*', '.js'] + }, + plugins: [ + new webpack.IgnorePlugin(/prom-client/), + new webpack.DefinePlugin({ + 'process.env': { + WEB: JSON.stringify('web') + } + }) + ] +}); + +function generateConfig (name) { + const mode = name.indexOf('min') > -1 ? 'production' : 'development'; + const config = { + mode, + entry: { + circuitBreaker: './index.js' + }, + output: { + path: path.resolve(__dirname, '..', 'dist'), + filename: `${name}.js`, + sourceMapFilename: `${name}.map`, + library: 'circuitBreaker', + libraryTarget: 'umd' + }, + node: { + process: true, + console: true + }, + plugins: [ + new webpack.IgnorePlugin(/prom-client/), + new webpack.ProvidePlugin({ + 'circuitBreaker': 'opossum' + }), + new webpack.DefinePlugin({ + 'process.env': { + WEB: JSON.stringify('web') + } + }) + ], + devtool: 'source-map' + }; + return config; +} + +module.exports = configs; diff --git a/config/webpack.config.js b/config/webpack.config.js index c71a9b39..30904aa4 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -1,29 +1,12 @@ const path = require('path'); const webpack = require('webpack'); -const configs = ['opossum', 'opossum.min', 'browser-test'] +const configs = ['opossum', 'opossum.min'] .map(key => generateConfig(key)); -// add a webpack for tests -configs.push({ - target: 'web', - mode: 'development', - entry: './test/browser/index.js', - node: { - fs: 'empty' - }, - output: { - path: path.resolve(__dirname, '..', 'test', 'browser'), - filename: 'webpack-test.js' - }, - resolve: { - modules: ['node_modules'], - extensions: ['*', '.js'] - } -}); - function generateConfig (name) { const mode = name.indexOf('min') > -1 ? 'production' : 'development'; const config = { + target: 'node', mode, entry: { circuitBreaker: './index.js' diff --git a/docs/index.html b/docs/index.html index 0fa6fde0..cf4b2d54 100644 --- a/docs/index.html +++ b/docs/index.html @@ -146,6 +146,12 @@
close
- emitted when the breaker state changes to closed
halfOpen
- emitted when the breaker state changes to halfOpen
fallback
- emitted when the breaker has a fallback function and executes itsemaphore-locked
- emitted when the breaker is at capacity and cannot execute the requesthealth-check-failed
- emitted when a user-supplied health check function returns a rejected promisesemaphoreLocked
- emitted when the breaker is at capacity and cannot execute the requesthealthCheckFailed
- emitted when a user-supplied health check function returns a rejected promiseHandling events gives a greater level of control over your application behavior.
const circuit = circuitBreaker(() => $.get(route), circuitBreakerOptions);
@@ -1921,6 +1927,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ▸
+ metrics
+
+
+
+
+
+
+
+ Get the prometheus metrics for this circuit
+
+ metrics
+
+
+ Type:
+ PrometheusMetrics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2966,8 +3024,8 @@
-
- CircuitBreaker#semaphore-locked
+
+ CircuitBreaker#semaphoreLocked
@@ -2977,7 +3035,7 @@
Emitted when the rate limit has been reached and there
are no more locks to be obtained.
- CircuitBreaker#semaphore-locked
+ CircuitBreaker#semaphoreLocked
Type:
@@ -3020,8 +3078,8 @@
-
- CircuitBreaker#health-check-failed
+
+ CircuitBreaker#healthCheckFailed
@@ -3031,7 +3089,7 @@
Emitted with the user-supplied health check function
returns a rejected promise.
- CircuitBreaker#health-check-failed
+ CircuitBreaker#healthCheckFailed
Type:
diff --git a/docs/opossum.md b/docs/opossum.md
index c1a1d7ca..e1592636 100644
--- a/docs/opossum.md
+++ b/docs/opossum.md
@@ -22,41 +22,42 @@
- [status][18]
- [stats][19]
- [hystrixStats][20]
- - [enabled][21]
- - [warmUp][22]
- - [volumeThreshold][23]
- - [fallback][24]
- - [Parameters][25]
- - [fire][26]
- - [clearCache][27]
- - [healthCheck][28]
- - [Parameters][29]
- - [enable][30]
- - [disable][31]
-- [CircuitBreaker#halfOpen][32]
-- [CircuitBreaker#close][33]
-- [CircuitBreaker#open][34]
-- [CircuitBreaker#fire][35]
-- [CircuitBreaker#cacheHit][36]
-- [CircuitBreaker#cacheMiss][37]
-- [CircuitBreaker#reject][38]
-- [CircuitBreaker#timeout][39]
-- [CircuitBreaker#success][40]
-- [CircuitBreaker#semaphore-locked][41]
-- [CircuitBreaker#health-check-failed][42]
-- [CircuitBreaker#fallback][43]
-- [CircuitBreaker#failure][44]
-- [Status][45]
- - [Parameters][46]
- - [Examples][47]
- - [stats][48]
- - [window][49]
-- [Status#snapshot][50]
-- [HystrixStats][51]
- - [Parameters][52]
- - [Examples][53]
- - [getHystrixStream][54]
- - [shutdown][55]
+ - [metrics][21]
+ - [enabled][22]
+ - [warmUp][23]
+ - [volumeThreshold][24]
+ - [fallback][25]
+ - [Parameters][26]
+ - [fire][27]
+ - [clearCache][28]
+ - [healthCheck][29]
+ - [Parameters][30]
+ - [enable][31]
+ - [disable][32]
+- [CircuitBreaker#halfOpen][33]
+- [CircuitBreaker#close][34]
+- [CircuitBreaker#open][35]
+- [CircuitBreaker#fire][36]
+- [CircuitBreaker#cacheHit][37]
+- [CircuitBreaker#cacheMiss][38]
+- [CircuitBreaker#reject][39]
+- [CircuitBreaker#timeout][40]
+- [CircuitBreaker#success][41]
+- [CircuitBreaker#semaphoreLocked][42]
+- [CircuitBreaker#healthCheckFailed][43]
+- [CircuitBreaker#fallback][44]
+- [CircuitBreaker#failure][45]
+- [Status][46]
+ - [Parameters][47]
+ - [Examples][48]
+ - [stats][49]
+ - [window][50]
+- [Status#snapshot][51]
+- [HystrixStats][52]
+ - [Parameters][53]
+ - [Examples][54]
+ - [getHystrixStream][55]
+ - [shutdown][56]
## factory
@@ -64,53 +65,53 @@ Creates a [CircuitBreaker][6] instance capable of executing `action`.
### Parameters
-- `action` **[Function][56]** The action to fire for this [CircuitBreaker][6]
-- `options` **[Object][57]** Options for the [CircuitBreaker][6]
- - `options.timeout` **[Number][58]** The time in milliseconds that action should
+- `action` **[Function][57]** The action to fire for this [CircuitBreaker][6]
+- `options` **[Object][58]** Options for the [CircuitBreaker][6]
+ - `options.timeout` **[Number][59]** The time in milliseconds that action should
be allowed to execute before timing out. Default 10000 (10 seconds)
- - `options.maxFailures` **[Number][58]** The number of times the circuit can fail
+ - `options.maxFailures` **[Number][59]** The number of times the circuit can fail
before opening. Default 10.
- - `options.resetTimeout` **[Number][58]** The time in milliseconds to wait before
+ - `options.resetTimeout` **[Number][59]** The time in milliseconds to wait before
setting the breaker to `halfOpen` state, and trying the action again.
- - `options.rollingCountTimeout` **[Number][58]** Sets the duration of the
+ - `options.rollingCountTimeout` **[Number][59]** Sets the duration of the
statistical rolling window, in milliseconds. This is how long Opossum keeps
metrics for the circuit breaker to use and for publishing. Default: 10000
- - `options.rollingCountBuckets` **[Number][58]** Sets the number of buckets the
+ - `options.rollingCountBuckets` **[Number][59]** Sets the number of buckets the
rolling statistical window is divided into. So, if
options.rollingCountTimeout is 10000, and options.rollingCountBuckets is 10,
then the statistical window will be 1000 1 second snapshots in the
statistical window. Default: 10
- - `options.name` **[String][59]** the circuit name to use when reporting stats
- - `options.rollingPercentilesEnabled` **[boolean][60]** This property indicates
+ - `options.name` **[String][60]** the circuit name to use when reporting stats
+ - `options.rollingPercentilesEnabled` **[boolean][61]** This property indicates
whether execution latencies should be tracked and calculated as percentiles.
If they are disabled, all summary statistics (mean, percentiles) are
returned as -1. Default: false
- - `options.capacity` **[Number][58]** the number of concurrent requests allowed.
+ - `options.capacity` **[Number][59]** the number of concurrent requests allowed.
If the number currently executing function calls is equal to
options.capacity, further calls to `fire()` are rejected until at least one
of the current requests completes.
- - `options.errorThresholdPercentage` **[Number][58]** the error percentage at
+ - `options.errorThresholdPercentage` **[Number][59]** the error percentage at
which to open the circuit and start short-circuiting requests to fallback.
- - `options.enabled` **[boolean][60]** whether this circuit is enabled upon
+ - `options.enabled` **[boolean][61]** whether this circuit is enabled upon
construction. Default: true
- - `options.allowWarmUp` **[boolean][60]** determines whether to allow failures
+ - `options.allowWarmUp` **[boolean][61]** determines whether to allow failures
without opening the circuit during a brief warmup period (this is the
`rollingCountDuration` property). Default: false
allow before enabling the circuit. This can help in situations where no
matter what your `errorThresholdPercentage` is, if the first execution
times out or fails, the circuit immediately opens. Default: 0
- - `options.volumeThreshold` **[Number][58]** the minimum number of requests within
+ - `options.volumeThreshold` **[Number][59]** the minimum number of requests within
the rolling statistical window that must exist before the circuit breaker
can open. This is similar to `options.allowWarmUp` in that no matter how many
failures there are, if the number of requests within the statistical window
does not exceed this threshold, the circuit will remain closed. Default: 0
- - `options.errorFilter` **[Function][56]** an optional function that will be
+ - `options.errorFilter` **[Function][57]** an optional function that will be
called when the circuit's function fails (returns a rejected Promise). If
this function returns truthy, the circuit's failure statistics will not be
incremented. This is useful, for example, when you don't want HTTP 404 to
trip the circuit, but still want to handle it as a failure case.
-Returns **[CircuitBreaker][61]** a newly created [CircuitBreaker][6] instance
+Returns **[CircuitBreaker][62]** a newly created [CircuitBreaker][6] instance
## factory.promisify
@@ -121,7 +122,7 @@ callback is executed.
### Parameters
-- `action` **[Function][56]** A Node.js-like asynchronous function
+- `action` **[Function][57]** A Node.js-like asynchronous function
### Examples
@@ -139,46 +140,46 @@ Constructs a [CircuitBreaker][6].
### Parameters
-- `action` **[Function][56]** The action to fire for this [CircuitBreaker][6]
-- `options` **[Object][57]** Options for the [CircuitBreaker][6]
- - `options.timeout` **[Number][58]** The time in milliseconds that action should
+- `action` **[Function][57]** The action to fire for this [CircuitBreaker][6]
+- `options` **[Object][58]** Options for the [CircuitBreaker][6]
+ - `options.timeout` **[Number][59]** The time in milliseconds that action should
be allowed to execute before timing out. Default 10000 (10 seconds)
- - `options.maxFailures` **[Number][58]** The number of times the circuit can fail
+ - `options.maxFailures` **[Number][59]** The number of times the circuit can fail
before opening. Default 10.
- - `options.resetTimeout` **[Number][58]** The time in milliseconds to wait before
+ - `options.resetTimeout` **[Number][59]** The time in milliseconds to wait before
setting the breaker to `halfOpen` state, and trying the action again.
- - `options.rollingCountTimeout` **[Number][58]** Sets the duration of the
+ - `options.rollingCountTimeout` **[Number][59]** Sets the duration of the
statistical rolling window, in milliseconds. This is how long Opossum keeps
metrics for the circuit breaker to use and for publishing. Default: 10000
- - `options.rollingCountBuckets` **[Number][58]** Sets the number of buckets the
+ - `options.rollingCountBuckets` **[Number][59]** Sets the number of buckets the
statistical window is divided into. So, if options.rollingCountTimeout is
10000, and options.rollingCountBuckets is 10, the statistical window will
be 1000 1 second snapshots in the statistical window. Default: 10
- - `options.name` **[String][59]** the circuit name to use when reporting stats
- - `options.rollingPercentilesEnabled` **[boolean][60]** indicates whether
+ - `options.name` **[String][60]** the circuit name to use when reporting stats
+ - `options.rollingPercentilesEnabled` **[boolean][61]** indicates whether
execution latencies should be tracked and calculated as percentiles. If they
are disabled, all summary statistics (mean, percentiles) are returned as -1.
Default: false
- - `options.capacity` **[Number][58]** the number of concurrent requests allowed.
+ - `options.capacity` **[Number][59]** the number of concurrent requests allowed.
If the number currently executing functions is equal to options.capacity,
further calls to `fire()` are rejected until at least one of the current
requests completes.
- - `options.errorThresholdPercentage` **[Number][58]** the error percentage at
+ - `options.errorThresholdPercentage` **[Number][59]** the error percentage at
which to open the circuit and start short-circuiting requests to fallback.
- - `options.enabled` **[boolean][60]** whether this circuit is enabled upon
+ - `options.enabled` **[boolean][61]** whether this circuit is enabled upon
construction. Default: true
- - `options.allowWarmUp` **[boolean][60]** determines whether to allow failures
+ - `options.allowWarmUp` **[boolean][61]** determines whether to allow failures
without opening the circuit during a brief warmup period (this is the
`rollingCountDuration` property). Default: false
allow before enabling the circuit. This can help in situations where no
matter what your `errorThresholdPercentage` is, if the first execution times
out or fails, the circuit immediately opens. Default: 0
- - `options.volumeThreshold` **[Number][58]** the minimum number of requests within
+ - `options.volumeThreshold` **[Number][59]** the minimum number of requests within
the rolling statistical window that must exist before the circuit breaker
can open. This is similar to `options.allowWarmUp` in that no matter how many
failures there are, if the number of requests within the statistical window
does not exceed this threshold, the circuit will remain closed. Default: 0
- - `options.errorFilter` **[Function][56]** an optional function that will be
+ - `options.errorFilter` **[Function][57]** an optional function that will be
called when the circuit's function fails (returns a rejected Promise). If
this function returns truthy, the circuit's failure statistics will not be
incremented. This is useful, for example, when you don't want HTTP 404 to
@@ -209,49 +210,49 @@ Returns **void**
Determines if the circuit has been shutdown.
-Type: [Boolean][60]
+Type: [Boolean][61]
### name
Gets the name of this circuit
-Type: [String][59]
+Type: [String][60]
### group
Gets the name of this circuit group
-Type: [String][59]
+Type: [String][60]
### pendingClose
Gets whether this cicruit is in the `pendingClosed` state
-Type: [Boolean][60]
+Type: [Boolean][61]
### closed
True if the circuit is currently closed. False otherwise.
-Type: [Boolean][60]
+Type: [Boolean][61]
### opened
True if the circuit is currently opened. False otherwise.
-Type: [Boolean][60]
+Type: [Boolean][61]
### halfOpen
True if the circuit is currently half opened. False otherwise.
-Type: [Boolean][60]
+Type: [Boolean][61]
### status
The current [Status][18] of this [CircuitBreaker][6]
-Type: [Status][62]
+Type: [Status][63]
### stats
@@ -259,31 +260,37 @@ Type: [Status][62]
Get the current stats for the circuit.
-Type: [Object][57]
+Type: [Object][58]
### hystrixStats
Get the hystrixStats.
-Type: [HystrixStats][63]
+Type: [HystrixStats][64]
+
+### metrics
+
+Get the prometheus metrics for this circuit
+
+Type: PrometheusMetrics
### enabled
Gets whether the circuit is enabled or not
-Type: [Boolean][60]
+Type: [Boolean][61]
### warmUp
Gets whether the circuit is currently in warm up phase
-Type: [Boolean][60]
+Type: [Boolean][61]
### volumeThreshold
Gets the volume threshold for this circuit
-Type: [Boolean][60]
+Type: [Boolean][61]
### fallback
@@ -294,10 +301,10 @@ a rejected Promise.
#### Parameters
-- `func` **([Function][56] \| [CircuitBreaker][61])** the fallback function to execute
+- `func` **([Function][57] \| [CircuitBreaker][62])** the fallback function to execute
when the breaker has opened or when a timeout or error occurs.
-Returns **[CircuitBreaker][61]** this
+Returns **[CircuitBreaker][62]** this
### fire
@@ -306,7 +313,7 @@ returned promise will be rejected. If the action succeeds, the promise will
resolve with the resolved value from action. If a fallback function was
provided, it will be invoked in the event of any failure or timeout.
-Returns **[Promise][64]<any>** promise resolves with the circuit function's return
+Returns **[Promise][65]<any>** promise resolves with the circuit function's return
value on success or is rejected on failure of the action.
### clearCache
@@ -329,12 +336,12 @@ circuit breaker itself.
#### Parameters
-- `func` **[Function][56]** a health check function which returns a promise.
-- `interval` **[Number][58]?** the amount of time between calls to the health
+- `func` **[Function][57]** a health check function which returns a promise.
+- `interval` **[Number][59]?** the amount of time between calls to the health
check function. Default: 5000 (5 seconds)
-- Throws **[TypeError][65]** if `interval` is supplied but not a number
+- Throws **[TypeError][66]** if `interval` is supplied but not a number
Returns **void**
@@ -359,7 +366,7 @@ Emitted after `options.resetTimeout` has elapsed, allowing for
a single attempt to call the service again. If that attempt is
successful, the circuit will be closed. Otherwise it remains open.
-Type: [Number][58]
+Type: [Number][59]
## CircuitBreaker#close
@@ -390,14 +397,14 @@ the cache, but the cache option is enabled.
Emitted when the circuit breaker is open and failing fast
-Type: [Error][66]
+Type: [Error][67]
## CircuitBreaker#timeout
Emitted when the circuit breaker action takes longer than
`options.timeout`
-Type: [Error][66]
+Type: [Error][67]
## CircuitBreaker#success
@@ -405,19 +412,19 @@ Emitted when the circuit breaker action succeeds
Type: any
-## CircuitBreaker#semaphore-locked
+## CircuitBreaker#semaphoreLocked
Emitted when the rate limit has been reached and there
are no more locks to be obtained.
-Type: [Error][66]
+Type: [Error][67]
-## CircuitBreaker#health-check-failed
+## CircuitBreaker#healthCheckFailed
Emitted with the user-supplied health check function
returns a rejected promise.
-Type: [Error][66]
+Type: [Error][67]
## CircuitBreaker#fallback
@@ -429,7 +436,7 @@ Type: any
Emitted when the circuit breaker action fails
-Type: [Error][66]
+Type: [Error][67]
## Status
@@ -454,10 +461,10 @@ is determined by dividing the `rollingCountTimeout` by
### Parameters
-- `options` **[Object][57]** for the status window
- - `options.rollingCountBuckets` **[Number][58]** number of buckets in the window
- - `options.rollingCountTimeout` **[Number][58]** the duration of the window
- - `options.rollingPercentilesEnabled` **[Boolean][60]** whether to calculate
+- `options` **[Object][58]** for the status window
+ - `options.rollingCountBuckets` **[Number][59]** number of buckets in the window
+ - `options.rollingCountTimeout` **[Number][59]** the duration of the window
+ - `options.rollingPercentilesEnabled` **[Boolean][61]** whether to calculate
percentiles
### Examples
@@ -479,20 +486,20 @@ circuit.status.window;
Get the cumulative stats for the current window
-Type: [Object][57]
+Type: [Object][58]
### window
Gets the stats window as an array of time-sliced objects.
-Type: [Array][67]
+Type: [Array][68]
## Status#snapshot
Emitted at each time-slice. Listeners for this
event will receive a cumulative snapshot of the current status window.
-Type: [Object][57]
+Type: [Object][58]
## HystrixStats
@@ -503,13 +510,13 @@ A HystrixStats instance is created for every [CircuitBreaker][6]
and does not typically need to be created by a user.
A HystrixStats instance will listen for all events on the
-[Status#snapshot][68]
+[Status#snapshot][69]
and format the data to the proper Hystrix format.
Making it easy to construct an Event Stream for a client
### Parameters
-- `the` **[CircuitBreaker][61]** circuit breaker
+- `the` **[CircuitBreaker][62]** circuit breaker
### Examples
@@ -573,98 +580,100 @@ Returns **void**
[20]: #hystrixstats
-[21]: #enabled
+[21]: #metrics
+
+[22]: #enabled
-[22]: #warmup
+[23]: #warmup
-[23]: #volumethreshold
+[24]: #volumethreshold
-[24]: #fallback
+[25]: #fallback
-[25]: #parameters-3
+[26]: #parameters-3
-[26]: #fire
+[27]: #fire
-[27]: #clearcache
+[28]: #clearcache
-[28]: #healthcheck
+[29]: #healthcheck
-[29]: #parameters-4
+[30]: #parameters-4
-[30]: #enable
+[31]: #enable
-[31]: #disable
+[32]: #disable
-[32]: #circuitbreakerhalfopen
+[33]: #circuitbreakerhalfopen
-[33]: #circuitbreakerclose
+[34]: #circuitbreakerclose
-[34]: #circuitbreakeropen
+[35]: #circuitbreakeropen
-[35]: #circuitbreakerfire
+[36]: #circuitbreakerfire
-[36]: #circuitbreakercachehit
+[37]: #circuitbreakercachehit
-[37]: #circuitbreakercachemiss
+[38]: #circuitbreakercachemiss
-[38]: #circuitbreakerreject
+[39]: #circuitbreakerreject
-[39]: #circuitbreakertimeout
+[40]: #circuitbreakertimeout
-[40]: #circuitbreakersuccess
+[41]: #circuitbreakersuccess
-[41]: #circuitbreakersemaphore-locked
+[42]: #circuitbreakersemaphorelocked
-[42]: #circuitbreakerhealth-check-failed
+[43]: #circuitbreakerhealthcheckfailed
-[43]: #circuitbreakerfallback
+[44]: #circuitbreakerfallback
-[44]: #circuitbreakerfailure
+[45]: #circuitbreakerfailure
-[45]: #status-1
+[46]: #status-1
-[46]: #parameters-5
+[47]: #parameters-5
-[47]: #examples-1
+[48]: #examples-1
-[48]: #stats-1
+[49]: #stats-1
-[49]: #window
+[50]: #window
-[50]: #statussnapshot
+[51]: #statussnapshot
-[51]: #hystrixstats-1
+[52]: #hystrixstats-1
-[52]: #parameters-6
+[53]: #parameters-6
-[53]: #examples-2
+[54]: #examples-2
-[54]: #gethystrixstream
+[55]: #gethystrixstream
-[55]: #shutdown-1
+[56]: #shutdown-1
-[56]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
+[57]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
-[57]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
+[58]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
-[58]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
+[59]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
-[59]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
+[60]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
-[60]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
+[61]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
-[61]: #circuitbreaker
+[62]: #circuitbreaker
-[62]: #status
+[63]: #status
-[63]: #hystrixstats
+[64]: #hystrixstats
-[64]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
+[65]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
-[65]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/TypeError
+[66]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/TypeError
-[66]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error
+[67]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error
-[67]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
+[68]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
-[68]: Status#snapshot
+[69]: Status#snapshot
diff --git a/index.js b/index.js
index 54940133..8ac6e135 100644
--- a/index.js
+++ b/index.js
@@ -15,10 +15,11 @@ const defaults = {
* @param {Object} options Options for the {@link CircuitBreaker}
* @param {Number} options.timeout The time in milliseconds that action should
* be allowed to execute before timing out. Default 10000 (10 seconds)
- * @param {Number} options.maxFailures The number of times the circuit can fail
- * before opening. Default 10.
+ * @param {Number} options.maxFailures (Deprecated) The number of times the
+ * circuit can fail before opening. Default 10.
* @param {Number} options.resetTimeout The time in milliseconds to wait before
* setting the breaker to `halfOpen` state, and trying the action again.
+ * Default: 30000 (30 seconds)
* @param {Number} options.rollingCountTimeout Sets the duration of the
* statistical rolling window, in milliseconds. This is how long Opossum keeps
* metrics for the circuit breaker to use and for publishing. Default: 10000
@@ -27,7 +28,8 @@ const defaults = {
* options.rollingCountTimeout is 10000, and options.rollingCountBuckets is 10,
* then the statistical window will be 1000 1 second snapshots in the
* statistical window. Default: 10
- * @param {String} options.name the circuit name to use when reporting stats
+ * @param {String} options.name the circuit name to use when reporting stats.
+ * Default: the name of the function this circuit controls.
* @param {boolean} options.rollingPercentilesEnabled This property indicates
* whether execution latencies should be tracked and calculated as percentiles.
* If they are disabled, all summary statistics (mean, percentiles) are
@@ -35,9 +37,10 @@ const defaults = {
* @param {Number} options.capacity the number of concurrent requests allowed.
* If the number currently executing function calls is equal to
* options.capacity, further calls to `fire()` are rejected until at least one
- * of the current requests completes.
+ * of the current requests completes. Default: `Number.MAX_SAFE_INTEGER`.
* @param {Number} options.errorThresholdPercentage the error percentage at
* which to open the circuit and start short-circuiting requests to fallback.
+ * Default: 50
* @param {boolean} options.enabled whether this circuit is enabled upon
* construction. Default: true
* @param {boolean} options.allowWarmUp determines whether to allow failures
diff --git a/lib/circuit.js b/lib/circuit.js
index 6c07f61a..1a91c573 100644
--- a/lib/circuit.js
+++ b/lib/circuit.js
@@ -4,6 +4,10 @@ const EventEmitter = require('events');
const Status = require('./status');
const HystrixStats = require('./hystrix-stats');
const Semaphore = require('./semaphore');
+let PrometheusMetrics;
+if (!process.env.WEB) {
+ PrometheusMetrics = require('./prometheus-metrics');
+}
const STATE = Symbol('state');
const OPEN = Symbol('open');
@@ -16,6 +20,7 @@ const STATUS = Symbol('status');
const NAME = Symbol('name');
const GROUP = Symbol('group');
const HYSTRIX_STATS = Symbol('hystrix-stats');
+const PROMETHEUS_METRICS = Symbol('prometheus-metrics');
const CACHE = new WeakMap();
const ENABLED = Symbol('Enabled');
const WARMING_UP = Symbol('warming-up');
@@ -35,36 +40,40 @@ let warningIssued = false;
* @param {Object} options Options for the {@link CircuitBreaker}
* @param {Number} options.timeout The time in milliseconds that action should
* be allowed to execute before timing out. Default 10000 (10 seconds)
- * @param {Number} options.maxFailures The number of times the circuit can fail
- * before opening. Default 10.
+ * @param {Number} options.maxFailures (Deprecated) The number of times the
+ * circuit can fail before opening. Default 10.
* @param {Number} options.resetTimeout The time in milliseconds to wait before
* setting the breaker to `halfOpen` state, and trying the action again.
+ * Default: 30000 (30 seconds)
* @param {Number} options.rollingCountTimeout Sets the duration of the
* statistical rolling window, in milliseconds. This is how long Opossum keeps
* metrics for the circuit breaker to use and for publishing. Default: 10000
* @param {Number} options.rollingCountBuckets Sets the number of buckets the
- * statistical window is divided into. So, if options.rollingCountTimeout is
- * 10000, and options.rollingCountBuckets is 10, the statistical window will
- * be 1000 1 second snapshots in the statistical window. Default: 10
- * @param {String} options.name the circuit name to use when reporting stats
- * @param {boolean} options.rollingPercentilesEnabled indicates whether
- * execution latencies should be tracked and calculated as percentiles. If they
- * are disabled, all summary statistics (mean, percentiles) are returned as -1.
- * Default: false
+ * rolling statistical window is divided into. So, if
+ * options.rollingCountTimeout is 10000, and options.rollingCountBuckets is 10,
+ * then the statistical window will be 1000 1 second snapshots in the
+ * statistical window. Default: 10
+ * @param {String} options.name the circuit name to use when reporting stats.
+ * Default: the name of the function this circuit controls.
+ * @param {boolean} options.rollingPercentilesEnabled This property indicates
+ * whether execution latencies should be tracked and calculated as percentiles.
+ * If they are disabled, all summary statistics (mean, percentiles) are
+ * returned as -1. Default: false
* @param {Number} options.capacity the number of concurrent requests allowed.
- * If the number currently executing functions is equal to options.capacity,
- * further calls to `fire()` are rejected until at least one of the current
- * requests completes.
+ * If the number currently executing function calls is equal to
+ * options.capacity, further calls to `fire()` are rejected until at least one
+ * of the current requests completes. Default: `Number.MAX_SAFE_INTEGER`.
* @param {Number} options.errorThresholdPercentage the error percentage at
* which to open the circuit and start short-circuiting requests to fallback.
+ * Default: 50
* @param {boolean} options.enabled whether this circuit is enabled upon
* construction. Default: true
* @param {boolean} options.allowWarmUp determines whether to allow failures
* without opening the circuit during a brief warmup period (this is the
* `rollingCountDuration` property). Default: false
* allow before enabling the circuit. This can help in situations where no
- * matter what your `errorThresholdPercentage` is, if the first execution times
- * out or fails, the circuit immediately opens. Default: 0
+ * matter what your `errorThresholdPercentage` is, if the first execution
+ * times out or fails, the circuit immediately opens. Default: 0
* @param {Number} options.volumeThreshold the minimum number of requests within
* the rolling statistical window that must exist before the circuit breaker
* can open. This is similar to `options.allowWarmUp` in that no matter how many
@@ -101,7 +110,7 @@ class CircuitBreaker extends EventEmitter {
this.options.capacity = Number.isInteger(options.capacity)
? options.capacity : Number.MAX_SAFE_INTEGER;
this.options.errorFilter = options.errorFilter || (_ => false);
-
+
this.semaphore = new Semaphore(this.options.capacity);
this[VOLUME_THRESHOLD] = Number.isInteger(options.volumeThreshold)
@@ -142,7 +151,7 @@ class CircuitBreaker extends EventEmitter {
this.on('cacheMiss', increment('cacheMisses'));
this.on('open', _ => this[STATUS].open());
this.on('close', _ => this[STATUS].close());
- this.on('semaphore-locked', increment('semaphoreRejections'));
+ this.on('semaphoreLocked', increment('semaphoreRejections'));
/**
* Emitted after `options.resetTimeout` has elapsed, allowing for
@@ -174,6 +183,11 @@ class CircuitBreaker extends EventEmitter {
// Register with the hystrix stats listener
this[HYSTRIX_STATS] = new HystrixStats(this);
+
+ // Add Prometheus metrics if not running in a web env
+ if (PrometheusMetrics && options.usePrometheus) {
+ this[PROMETHEUS_METRICS] = new PrometheusMetrics(this);
+ }
}
/**
@@ -223,6 +237,7 @@ class CircuitBreaker extends EventEmitter {
this.removeAllListeners();
this.status.shutdown();
this.hystrixStats.shutdown();
+ this.metrics && this.metrics.clear();
this[STATE] = SHUTDOWN;
}
@@ -312,6 +327,14 @@ class CircuitBreaker extends EventEmitter {
return this[HYSTRIX_STATS];
}
+ /**
+ * Get the prometheus metrics for this circuit
+ * @type {PrometheusMetrics}
+ */
+ get metrics () {
+ return this[PROMETHEUS_METRICS];
+ }
+
/**
* Gets whether the circuit is enabled or not
* @type {Boolean}
@@ -371,7 +394,7 @@ class CircuitBreaker extends EventEmitter {
* @fires CircuitBreaker#reject
* @fires CircuitBreaker#success
* @fires CircuitBreaker#timeout
- * @fires CircuitBreaker#semaphore-locked
+ * @fires CircuitBreaker#semaphoreLocked
*/
fire () {
if (this.isShutdown) {
@@ -496,10 +519,10 @@ class CircuitBreaker extends EventEmitter {
/**
* Emitted when the rate limit has been reached and there
* are no more locks to be obtained.
- * @event CircuitBreaker#semaphore-locked
+ * @event CircuitBreaker#semaphoreLocked
* @type {Error}
*/
- this.emit('semaphore-locked', err, latency);
+ this.emit('semaphoreLocked', err, latency);
handleError(err, this, timeout, args, latency, resolve, reject);
}
});
@@ -530,7 +553,7 @@ class CircuitBreaker extends EventEmitter {
*
* @returns {void}
*
- * @fires CircuitBreaker#health-check-failed
+ * @fires CircuitBreaker#healthCheckFailed
* @throws {TypeError} if `interval` is supplied but not a number
*/
healthCheck (func, interval) {
@@ -547,10 +570,10 @@ class CircuitBreaker extends EventEmitter {
/**
* Emitted with the user-supplied health check function
* returns a rejected promise.
- * @event CircuitBreaker#health-check-failed
+ * @event CircuitBreaker#healthCheckFailed
* @type {Error}
*/
- this.emit('health-check-failed', e);
+ this.emit('healthCheckFailed', e);
this.open();
});
};
diff --git a/lib/prometheus-metrics.js b/lib/prometheus-metrics.js
new file mode 100644
index 00000000..72e96c93
--- /dev/null
+++ b/lib/prometheus-metrics.js
@@ -0,0 +1,52 @@
+'use strict';
+
+const client = require('prom-client');
+
+// The current tests has circuit names like:
+// 'circuit one' (with blank space) and others like
+// 3beb8f49-62c0-46e0-b458-dcd4a62d0f48.
+// So to avoid "Error: Invalid metric name" we are changing the
+// circuit name to pass the tests.
+// More details:
+// https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels
+function normalizePrefix(prefixName) {
+ return `circuit_${prefixName.replace(/[ |-]/g, '_')}_`;
+}
+
+class PrometheusMetrics {
+ constructor (circuit) {
+ this.circuit = circuit;
+ this._client = client;
+ this.counters = [];
+ const prefix = normalizePrefix(this.circuit.name);
+
+ this.interval = this._client
+ .collectDefaultMetrics({ prefix, timeout: 5000 });
+
+ for (let eventName of this.circuit.eventNames()) {
+ const counter = new this._client.Counter({
+ name: `${prefix}${eventName}`,
+ help: `A count of the ${circuit.name} circuit's ${eventName} event`
+ });
+ this.circuit.on(eventName, _ => {
+ counter.inc();
+ });
+ this.counters.push(counter);
+ }
+ }
+
+ clear () {
+ clearInterval(this.interval);
+ this._client.register.clear();
+ }
+
+ get metrics () {
+ return this._client.register.metrics();
+ }
+
+ get client () {
+ return this._client;
+ }
+}
+
+module.exports = PrometheusMetrics;
diff --git a/package-lock.json b/package-lock.json
index bfeb0ee8..fc79a6b4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "opossum",
- "version": "1.11.0",
+ "version": "2.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -14,18 +14,18 @@
}
},
"@babel/core": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.3.tgz",
- "integrity": "sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz",
+ "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.4.0",
- "@babel/helpers": "^7.4.3",
- "@babel/parser": "^7.4.3",
- "@babel/template": "^7.4.0",
- "@babel/traverse": "^7.4.3",
- "@babel/types": "^7.4.0",
+ "@babel/generator": "^7.4.4",
+ "@babel/helpers": "^7.4.4",
+ "@babel/parser": "^7.4.4",
+ "@babel/template": "^7.4.4",
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4",
"convert-source-map": "^1.1.0",
"debug": "^4.1.0",
"json5": "^2.1.0",
@@ -35,6 +35,73 @@
"source-map": "^0.5.0"
},
"dependencies": {
+ "@babel/generator": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
+ "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.11",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz",
+ "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+ "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz",
+ "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.4.4",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -110,39 +177,147 @@
}
},
"@babel/helper-call-delegate": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz",
- "integrity": "sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
+ "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.4.0",
- "@babel/traverse": "^7.4.0",
- "@babel/types": "^7.4.0"
+ "@babel/helper-hoist-variables": "^7.4.4",
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
+ "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.11",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz",
+ "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==",
+ "dev": true
+ },
+ "@babel/traverse": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz",
+ "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.4.4",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.3.tgz",
- "integrity": "sha512-UMl3TSpX11PuODYdWGrUeW6zFkdYhDn7wRLrOuNVM6f9L+S9CzmDXYyrp3MTHcwWjnzur1f/Op8A7iYZWya2Yg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz",
+ "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.1.0",
"@babel/helper-member-expression-to-functions": "^7.0.0",
"@babel/helper-optimise-call-expression": "^7.0.0",
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.4.0",
- "@babel/helper-split-export-declaration": "^7.4.0"
+ "@babel/helper-replace-supers": "^7.4.4",
+ "@babel/helper-split-export-declaration": "^7.4.4"
+ },
+ "dependencies": {
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-define-map": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz",
- "integrity": "sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz",
+ "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.1.0",
- "@babel/types": "^7.4.0",
+ "@babel/types": "^7.4.4",
"lodash": "^4.17.11"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-explode-assignable-expression": {
@@ -176,12 +351,25 @@
}
},
"@babel/helper-hoist-variables": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz",
- "integrity": "sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
+ "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
"dev": true,
"requires": {
- "@babel/types": "^7.4.0"
+ "@babel/types": "^7.4.4"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-member-expression-to-functions": {
@@ -203,17 +391,56 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.3.tgz",
- "integrity": "sha512-H88T9IySZW25anu5uqyaC1DaQre7ofM+joZtAaO2F8NBdFfupH0SZ4gKjgSFVcvtx/aAirqA9L9Clio2heYbZA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz",
+ "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.0.0",
"@babel/helper-simple-access": "^7.1.0",
- "@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/template": "^7.2.2",
- "@babel/types": "^7.2.2",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/template": "^7.4.4",
+ "@babel/types": "^7.4.4",
"lodash": "^4.17.11"
+ },
+ "dependencies": {
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz",
+ "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+ "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-optimise-call-expression": {
@@ -232,9 +459,9 @@
"dev": true
},
"@babel/helper-regex": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.3.tgz",
- "integrity": "sha512-hnoq5u96pLCfgjXuj8ZLX3QQ+6nAulS+zSgi6HulUwFbEruRAKwbGLU5OvXkE14L8XW6XsQEKsIDfgthKLRAyA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz",
+ "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==",
"dev": true,
"requires": {
"lodash": "^4.17.11"
@@ -254,15 +481,88 @@
}
},
"@babel/helper-replace-supers": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz",
- "integrity": "sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz",
+ "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==",
"dev": true,
"requires": {
"@babel/helper-member-expression-to-functions": "^7.0.0",
"@babel/helper-optimise-call-expression": "^7.0.0",
- "@babel/traverse": "^7.4.0",
- "@babel/types": "^7.4.0"
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
+ "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.11",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz",
+ "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==",
+ "dev": true
+ },
+ "@babel/traverse": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz",
+ "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.4.4",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
}
},
"@babel/helper-simple-access": {
@@ -297,14 +597,98 @@
}
},
"@babel/helpers": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.3.tgz",
- "integrity": "sha512-BMh7X0oZqb36CfyhvtbSmcWc3GXocfxv3yNsAEuM0l+fAqSO22rQrUpijr3oE/10jCTrB6/0b9kzmG4VetCj8Q==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz",
+ "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==",
"dev": true,
"requires": {
- "@babel/template": "^7.4.0",
- "@babel/traverse": "^7.4.3",
- "@babel/types": "^7.4.0"
+ "@babel/template": "^7.4.4",
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
+ "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.11",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz",
+ "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+ "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz",
+ "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.4.4",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
}
},
"@babel/highlight": {
@@ -367,22 +751,22 @@
}
},
"@babel/plugin-proposal-class-properties": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz",
- "integrity": "sha512-t2ECPNOXsIeK1JxJNKmgbzQtoG27KIlVE61vTqX0DKR9E9sZlVVxWUtEW9D5FlZ8b8j7SBNCHY47GgPKCKlpPg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz",
+ "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.4.0",
+ "@babel/helper-create-class-features-plugin": "^7.4.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-proposal-decorators": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.0.tgz",
- "integrity": "sha512-d08TLmXeK/XbgCo7ZeZ+JaeZDtDai/2ctapTRsWWkkmy7G/cqz8DQN/HlWG7RR4YmfXxmExsbU3SuCjlM7AtUg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz",
+ "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.4.0",
+ "@babel/helper-create-class-features-plugin": "^7.4.4",
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-syntax-decorators": "^7.2.0"
}
@@ -459,9 +843,9 @@
}
},
"@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.4.3.tgz",
- "integrity": "sha512-eYtYniPfQOPY8rpsR8YK5pioJHrFLXjXOeYRf0vr5sWSPJU13or3CxLFn+uIb6fhukbYNch+L2VDAlvME2DSAw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.4.4.tgz",
+ "integrity": "sha512-Amph7Epui1Dh/xxUxS2+K22/MUi6+6JVTvy3P58tja3B6yKTSjwwx0/d83rF7551D6PVSSoplQb8GCwqec7HRw==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
@@ -479,9 +863,9 @@
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.3.tgz",
- "integrity": "sha512-xC//6DNSSHVjq8O2ge0dyYlhshsH4T7XdCVoxbi5HzLYWfsC5ooFlJjrXk8RcAT+hjHAK9UjBXdylzSoDK3t4g==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz",
+ "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
@@ -529,13 +913,13 @@
}
},
"@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz",
- "integrity": "sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
+ "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.0.0",
+ "@babel/helper-regex": "^7.4.4",
"regexpu-core": "^4.5.4"
}
},
@@ -729,9 +1113,9 @@
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz",
- "integrity": "sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz",
+ "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.0.0",
@@ -749,9 +1133,9 @@
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz",
- "integrity": "sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz",
+ "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
@@ -759,19 +1143,41 @@
}
},
"@babel/plugin-transform-classes": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.3.tgz",
- "integrity": "sha512-PUaIKyFUDtG6jF5DUJOfkBdwAS/kFFV3XFk7Nn0a6vR7ZT8jYw5cGtIlat77wcnd0C6ViGqo/wyNf4ZHytF/nQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz",
+ "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.0.0",
- "@babel/helper-define-map": "^7.4.0",
+ "@babel/helper-define-map": "^7.4.4",
"@babel/helper-function-name": "^7.1.0",
"@babel/helper-optimise-call-expression": "^7.0.0",
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-replace-supers": "^7.4.0",
- "@babel/helper-split-export-declaration": "^7.4.0",
+ "@babel/helper-replace-supers": "^7.4.4",
+ "@babel/helper-split-export-declaration": "^7.4.4",
"globals": "^11.1.0"
+ },
+ "dependencies": {
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/plugin-transform-computed-properties": {
@@ -784,22 +1190,22 @@
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.3.tgz",
- "integrity": "sha512-rVTLLZpydDFDyN4qnXdzwoVpk1oaXHIvPEOkOLyr88o7oHxVc/LyrnDx+amuBWGOwUb7D1s/uLsKBNTx08htZg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz",
+ "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.3.tgz",
- "integrity": "sha512-9Arc2I0AGynzXRR/oPdSALv3k0rM38IMFyto7kOCwb5F9sLUt2Ykdo3V9yUPR+Bgr4kb6bVEyLkPEiBhzcTeoA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
+ "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.4.3",
+ "@babel/helper-regex": "^7.4.4",
"regexpu-core": "^4.5.4"
}
},
@@ -823,9 +1229,9 @@
}
},
"@babel/plugin-transform-flow-strip-types": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.0.tgz",
- "integrity": "sha512-C4ZVNejHnfB22vI2TYN4RUp2oCmq6cSEAg4RygSvYZUECRqUu9O4PMEMNJ4wsemaRGg27BbgYctG4BZh+AgIHw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz",
+ "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
@@ -833,18 +1239,18 @@
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.3.tgz",
- "integrity": "sha512-UselcZPwVWNSURnqcfpnxtMehrb8wjXYOimlYQPBnup/Zld426YzIhNEvuRsEWVHfESIECGrxoI6L5QqzuLH5Q==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
+ "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.3.tgz",
- "integrity": "sha512-uT5J/3qI/8vACBR9I1GlAuU/JqBtWdfCrynuOkrWG6nCDieZd5przB1vfP59FRHBZQ9DC2IUfqr/xKqzOD5x0A==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
+ "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.1.0",
@@ -880,23 +1286,23 @@
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.3.tgz",
- "integrity": "sha512-sMP4JqOTbMJMimqsSZwYWsMjppD+KRyDIUVW91pd7td0dZKAvPmhCaxhOzkzLParKwgQc7bdL9UNv+rpJB0HfA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz",
+ "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.4.3",
+ "@babel/helper-module-transforms": "^7.4.4",
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/helper-simple-access": "^7.1.0"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz",
- "integrity": "sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz",
+ "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.4.0",
+ "@babel/helper-hoist-variables": "^7.4.4",
"@babel/helper-plugin-utils": "^7.0.0"
}
},
@@ -911,18 +1317,18 @@
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz",
- "integrity": "sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz",
+ "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==",
"dev": true,
"requires": {
"regexp-tree": "^0.1.0"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz",
- "integrity": "sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
+ "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0"
@@ -939,12 +1345,12 @@
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.3.tgz",
- "integrity": "sha512-ULJYC2Vnw96/zdotCZkMGr2QVfKpIT/4/K+xWWY0MbOJyMZuk660BGkr3bEKWQrrciwz6xpmft39nA4BF7hJuA==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
+ "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
"dev": true,
"requires": {
- "@babel/helper-call-delegate": "^7.4.0",
+ "@babel/helper-call-delegate": "^7.4.4",
"@babel/helper-get-function-arity": "^7.0.0",
"@babel/helper-plugin-utils": "^7.0.0"
}
@@ -999,9 +1405,9 @@
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.3.tgz",
- "integrity": "sha512-kEzotPuOpv6/iSlHroCDydPkKYw7tiJGKlmYp6iJn4a6C/+b2FdttlJsLKYxolYHgotTJ5G5UY5h0qey5ka3+A==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz",
+ "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==",
"dev": true,
"requires": {
"regenerator-transform": "^0.13.4"
@@ -1045,9 +1451,9 @@
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
- "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
+ "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.0.0",
@@ -1064,65 +1470,65 @@
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.3.tgz",
- "integrity": "sha512-lnSNgkVjL8EMtnE8eSS7t2ku8qvKH3eqNf/IwIfnSPUqzgqYmRwzdsQWv4mNQAN9Nuo6Gz1Y0a4CSmdpu1Pp6g==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
+ "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
- "@babel/helper-regex": "^7.4.3",
+ "@babel/helper-regex": "^7.4.4",
"regexpu-core": "^4.5.4"
}
},
"@babel/preset-env": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.3.tgz",
- "integrity": "sha512-FYbZdV12yHdJU5Z70cEg0f6lvtpZ8jFSDakTm7WXeJbLXh4R0ztGEu/SW7G1nJ2ZvKwDhz8YrbA84eYyprmGqw==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz",
+ "integrity": "sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.0.0",
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-proposal-async-generator-functions": "^7.2.0",
"@babel/plugin-proposal-json-strings": "^7.2.0",
- "@babel/plugin-proposal-object-rest-spread": "^7.4.3",
+ "@babel/plugin-proposal-object-rest-spread": "^7.4.4",
"@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
"@babel/plugin-syntax-async-generators": "^7.2.0",
"@babel/plugin-syntax-json-strings": "^7.2.0",
"@babel/plugin-syntax-object-rest-spread": "^7.2.0",
"@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
"@babel/plugin-transform-arrow-functions": "^7.2.0",
- "@babel/plugin-transform-async-to-generator": "^7.4.0",
+ "@babel/plugin-transform-async-to-generator": "^7.4.4",
"@babel/plugin-transform-block-scoped-functions": "^7.2.0",
- "@babel/plugin-transform-block-scoping": "^7.4.0",
- "@babel/plugin-transform-classes": "^7.4.3",
+ "@babel/plugin-transform-block-scoping": "^7.4.4",
+ "@babel/plugin-transform-classes": "^7.4.4",
"@babel/plugin-transform-computed-properties": "^7.2.0",
- "@babel/plugin-transform-destructuring": "^7.4.3",
- "@babel/plugin-transform-dotall-regex": "^7.4.3",
+ "@babel/plugin-transform-destructuring": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
"@babel/plugin-transform-duplicate-keys": "^7.2.0",
"@babel/plugin-transform-exponentiation-operator": "^7.2.0",
- "@babel/plugin-transform-for-of": "^7.4.3",
- "@babel/plugin-transform-function-name": "^7.4.3",
+ "@babel/plugin-transform-for-of": "^7.4.4",
+ "@babel/plugin-transform-function-name": "^7.4.4",
"@babel/plugin-transform-literals": "^7.2.0",
"@babel/plugin-transform-member-expression-literals": "^7.2.0",
"@babel/plugin-transform-modules-amd": "^7.2.0",
- "@babel/plugin-transform-modules-commonjs": "^7.4.3",
- "@babel/plugin-transform-modules-systemjs": "^7.4.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.4.4",
+ "@babel/plugin-transform-modules-systemjs": "^7.4.4",
"@babel/plugin-transform-modules-umd": "^7.2.0",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.2",
- "@babel/plugin-transform-new-target": "^7.4.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.4",
+ "@babel/plugin-transform-new-target": "^7.4.4",
"@babel/plugin-transform-object-super": "^7.2.0",
- "@babel/plugin-transform-parameters": "^7.4.3",
+ "@babel/plugin-transform-parameters": "^7.4.4",
"@babel/plugin-transform-property-literals": "^7.2.0",
- "@babel/plugin-transform-regenerator": "^7.4.3",
+ "@babel/plugin-transform-regenerator": "^7.4.4",
"@babel/plugin-transform-reserved-words": "^7.2.0",
"@babel/plugin-transform-shorthand-properties": "^7.2.0",
"@babel/plugin-transform-spread": "^7.2.0",
"@babel/plugin-transform-sticky-regex": "^7.2.0",
- "@babel/plugin-transform-template-literals": "^7.2.0",
+ "@babel/plugin-transform-template-literals": "^7.4.4",
"@babel/plugin-transform-typeof-symbol": "^7.2.0",
- "@babel/plugin-transform-unicode-regex": "^7.4.3",
- "@babel/types": "^7.4.0",
+ "@babel/plugin-transform-unicode-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
"browserslist": "^4.5.2",
"core-js-compat": "^3.0.0",
"invariant": "^2.2.2",
@@ -1130,6 +1536,17 @@
"semver": "^5.5.0"
},
"dependencies": {
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
"semver": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
@@ -1690,11 +2107,12 @@
}
},
"assert": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
- "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
"dev": true,
"requires": {
+ "object-assign": "^4.1.1",
"util": "0.10.3"
},
"dependencies": {
@@ -1783,9 +2201,9 @@
"dev": true
},
"bail": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz",
- "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz",
+ "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==",
"dev": true
},
"balanced-match": {
@@ -1882,6 +2300,11 @@
"integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==",
"dev": true
},
+ "bintrees": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz",
+ "integrity": "sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ="
+ },
"bluebird": {
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz",
@@ -2131,14 +2554,14 @@
}
},
"browserslist": {
- "version": "4.5.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.5.tgz",
- "integrity": "sha512-0QFO1r/2c792Ohkit5XI8Cm8pDtZxgNl2H6HU4mHrpYz7314pEYcsAVVatM0l/YmxPnEzh9VygXouj4gkFUTKA==",
+ "version": "4.5.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.6.tgz",
+ "integrity": "sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30000960",
- "electron-to-chromium": "^1.3.124",
- "node-releases": "^1.1.14"
+ "caniuse-lite": "^1.0.30000963",
+ "electron-to-chromium": "^1.3.127",
+ "node-releases": "^1.1.17"
}
},
"buffer": {
@@ -2217,9 +2640,9 @@
},
"dependencies": {
"glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -2327,9 +2750,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30000963",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000963.tgz",
- "integrity": "sha512-n4HUiullc7Lw0LyzpeLa2ffP8KxFBGdxqD/8G3bSL6oB758hZ2UE2CVK+tQN958tJIi0/tfpjAc67aAtoHgnrQ==",
+ "version": "1.0.30000967",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz",
+ "integrity": "sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==",
"dev": true
},
"caseless": {
@@ -2339,9 +2762,9 @@
"dev": true
},
"ccount": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz",
- "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz",
+ "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==",
"dev": true
},
"chalk": {
@@ -2358,27 +2781,27 @@
}
},
"character-entities": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz",
- "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz",
+ "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==",
"dev": true
},
"character-entities-html4": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz",
- "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz",
+ "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==",
"dev": true
},
"character-entities-legacy": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz",
- "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz",
+ "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==",
"dev": true
},
"character-reference-invalid": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz",
- "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz",
+ "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==",
"dev": true
},
"chardet": {
@@ -2414,9 +2837,9 @@
"dev": true
},
"chrome-trace-event": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
- "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
@@ -2669,9 +3092,9 @@
"dev": true
},
"collapse-white-space": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz",
- "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz",
+ "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==",
"dev": true
},
"collection-visit": {
@@ -2832,21 +3255,22 @@
"dev": true
},
"conventional-changelog": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.0.6.tgz",
- "integrity": "sha512-1b96x3G67lDKakRvMm+VvYGwgRk+C8aapHKL5iZ/TJzzD/RuyGA2diHNEsR+uPHmQ7/A4Ts7j6N+VNqUoOfksg==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.8.tgz",
+ "integrity": "sha512-fb3/DOLLrQdNqN0yYn/lT6HcNsAa9A+VTDBqlZBMQcEPPIeJIMI+DBs3yu+eiYOLi22w9oShq3nn/zN6qm1Hmw==",
"dev": true,
"requires": {
"conventional-changelog-angular": "^5.0.3",
"conventional-changelog-atom": "^2.0.1",
"conventional-changelog-codemirror": "^2.0.1",
- "conventional-changelog-core": "^3.1.6",
+ "conventional-changelog-conventionalcommits": "^3.0.2",
+ "conventional-changelog-core": "^3.2.2",
"conventional-changelog-ember": "^2.0.2",
- "conventional-changelog-eslint": "^3.0.1",
+ "conventional-changelog-eslint": "^3.0.2",
"conventional-changelog-express": "^2.0.1",
"conventional-changelog-jquery": "^3.0.4",
"conventional-changelog-jshint": "^2.0.1",
- "conventional-changelog-preset-loader": "^2.0.2"
+ "conventional-changelog-preset-loader": "^2.1.1"
}
},
"conventional-changelog-angular": {
@@ -2877,14 +3301,30 @@
"q": "^1.5.1"
}
},
+ "conventional-changelog-config-spec": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-1.0.0.tgz",
+ "integrity": "sha512-RR3479x5Qw7XWkmNDYx/kOnsQJW+FZBIakURG/Dg7FkTaCrGjAkgfH96pQs9SyOEZI07USEXy7FjUDWYP8bt3Q==",
+ "dev": true
+ },
+ "conventional-changelog-conventionalcommits": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-3.0.2.tgz",
+ "integrity": "sha512-w1+fQSDnm/7+sPKIYC5nfRVYDszt+6HdWizrigSqWFVIiiBVzkHGeqDLMSHc+Qq9qssHVAxAak5206epZyK87A==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
"conventional-changelog-core": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.6.tgz",
- "integrity": "sha512-5teTAZOtJ4HLR6384h50nPAaKdDr+IaU0rnD2Gg2C3MS7hKsEPH8pZxrDNqam9eOSPQg9tET6uZY79zzgSz+ig==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz",
+ "integrity": "sha512-cssjAKajxaOX5LNAJLB+UOcoWjAIBvXtDMedv/58G+YEmAXMNfC16mmPl0JDOuVJVfIqM0nqQiZ8UCm8IXbE0g==",
"dev": true,
"requires": {
- "conventional-changelog-writer": "^4.0.3",
- "conventional-commits-parser": "^3.0.1",
+ "conventional-changelog-writer": "^4.0.5",
+ "conventional-commits-parser": "^3.0.2",
"dateformat": "^3.0.0",
"get-pkg-repo": "^1.0.0",
"git-raw-commits": "2.0.0",
@@ -2895,7 +3335,7 @@
"q": "^1.5.1",
"read-pkg": "^3.0.0",
"read-pkg-up": "^3.0.0",
- "through2": "^2.0.0"
+ "through2": "^3.0.0"
},
"dependencies": {
"load-json-file": {
@@ -2955,6 +3395,15 @@
"find-up": "^2.0.0",
"read-pkg": "^3.0.0"
}
+ },
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+ "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2 || 3"
+ }
}
}
},
@@ -2968,9 +3417,9 @@
}
},
"conventional-changelog-eslint": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.1.tgz",
- "integrity": "sha512-yH3+bYrtvgKxSFChUBQnKNh9/U9kN2JElYBm253VpYs5wXhPHVc9ENcuVGWijh24nnOkei7wEJmnmUzgZ4ok+A==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz",
+ "integrity": "sha512-Yi7tOnxjZLXlCYBHArbIAm8vZ68QUSygFS7PgumPRiEk+9NPUeucy5Wg9AAyKoBprSV3o6P7Oghh4IZSLtKCvQ==",
"dev": true,
"requires": {
"q": "^1.5.1"
@@ -3005,19 +3454,19 @@
}
},
"conventional-changelog-preset-loader": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz",
- "integrity": "sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz",
+ "integrity": "sha512-K4avzGMLm5Xw0Ek/6eE3vdOXkqnpf9ydb68XYmCc16cJ99XMMbc2oaNMuPwAsxVK6CC1yA4/I90EhmWNj0Q6HA==",
"dev": true
},
"conventional-changelog-writer": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.3.tgz",
- "integrity": "sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.5.tgz",
+ "integrity": "sha512-g/Myp4MaJ1A+f7Ai+SnVhkcWtaHk6flw0SYN7A+vQ+MTu0+gSovQWs4Pg4NtcNUcIztYQ9YHsoxHP+GGQplI7Q==",
"dev": true,
"requires": {
"compare-func": "^1.3.1",
- "conventional-commits-filter": "^2.0.1",
+ "conventional-commits-filter": "^2.0.2",
"dateformat": "^3.0.0",
"handlebars": "^4.1.0",
"json-stringify-safe": "^5.0.1",
@@ -3025,31 +3474,40 @@
"meow": "^4.0.0",
"semver": "^5.5.0",
"split": "^1.0.0",
- "through2": "^2.0.0"
+ "through2": "^3.0.0"
},
"dependencies": {
"semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
"dev": true
+ },
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+ "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2 || 3"
+ }
}
}
},
"conventional-commits-filter": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz",
- "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz",
+ "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==",
"dev": true,
"requires": {
- "is-subset": "^0.1.1",
+ "lodash.ismatch": "^4.4.0",
"modify-values": "^1.0.0"
}
},
"conventional-commits-parser": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz",
- "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.2.tgz",
+ "integrity": "sha512-y5eqgaKR0F6xsBNVSQ/5cI5qIF3MojddSUi1vKIggRkqUTbkqFKH9P5YX/AT1BVZp9DtSzBTIkvjyVLotLsVog==",
"dev": true,
"requires": {
"JSONStream": "^1.0.4",
@@ -3057,24 +3515,60 @@
"lodash": "^4.2.1",
"meow": "^4.0.0",
"split2": "^2.0.0",
- "through2": "^2.0.0",
+ "through2": "^3.0.0",
"trim-off-newlines": "^1.0.0"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
+ "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2 || 3"
+ }
+ }
}
},
"conventional-recommended-bump": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-4.0.4.tgz",
- "integrity": "sha512-9mY5Yoblq+ZMqJpBzgS+RpSq+SUfP2miOR3H/NR9drGf08WCrY9B6HAGJZEm6+ThsVP917VHAahSOjM6k1vhPg==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.0.tgz",
+ "integrity": "sha512-CsfdICpbUe0pmM4MTG90GPUqnFgB1SWIR2HAh+vS+JhhJdPWvc0brs8oadWoYGhFOQpQwe57JnvzWEWU0m2OSg==",
"dev": true,
"requires": {
- "concat-stream": "^1.6.0",
- "conventional-changelog-preset-loader": "^2.0.2",
- "conventional-commits-filter": "^2.0.1",
- "conventional-commits-parser": "^3.0.1",
+ "concat-stream": "^2.0.0",
+ "conventional-changelog-preset-loader": "^2.1.1",
+ "conventional-commits-filter": "^2.0.2",
+ "conventional-commits-parser": "^3.0.2",
"git-raw-commits": "2.0.0",
"git-semver-tags": "^2.0.2",
"meow": "^4.0.0",
"q": "^1.5.1"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "readable-stream": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz",
+ "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
}
},
"convert-source-map": {
@@ -3504,15 +3998,15 @@
"dev": true
},
"detect-indent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
- "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz",
+ "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==",
"dev": true
},
"detect-newline": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
- "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.0.0.tgz",
+ "integrity": "sha512-JAP22dVPAqvhdRFFxK1G5GViIokyUn0UWXRNW0ztK96fsqi9cuM8w8ESbSk+T2w5OVorcMcL6m7yUg1RrX+2CA==",
"dev": true
},
"detective": {
@@ -3579,9 +4073,9 @@
}
},
"documentation": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/documentation/-/documentation-10.0.0.tgz",
- "integrity": "sha512-krCLVxobxphAFs8wktfCw1bZtZ6MPux/pt5HJHdm2NA5qX45Gra7m9SqGYWyeOAkfsZs9C9/Qk0xEQ/cekphYg==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/documentation/-/documentation-11.0.0.tgz",
+ "integrity": "sha512-+lbAn7Eie0ObnQi6Ns0pv57FlriMG0sVg2S684UKUXHgfnfNR4War1w2gZ0i7wKinIDpxC7ivSx5B6X6wN794Q==",
"dev": true,
"requires": {
"@babel/core": "^7.1.2",
@@ -3913,9 +4407,9 @@
}
},
"electron-to-chromium": {
- "version": "1.3.125",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.125.tgz",
- "integrity": "sha512-XxowpqQxJ4nDwUXHtVtmEhRqBpm2OnjBomZmZtHD0d2Eo0244+Ojezhk3sD/MBSSe2nxCdGQFRXHIsf/LUTL9A==",
+ "version": "1.3.133",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz",
+ "integrity": "sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg==",
"dev": true
},
"elliptic": {
@@ -4926,9 +5420,9 @@
"dev": true
},
"fsevents": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz",
- "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==",
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
"dev": true,
"optional": true,
"requires": {
@@ -5714,9 +6208,9 @@
},
"dependencies": {
"semver": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
- "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
"dev": true
}
}
@@ -6078,9 +6572,9 @@
"dev": true
},
"html-void-elements": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.3.tgz",
- "integrity": "sha512-SaGhCDPXJVNrQyKMtKy24q6IMdXg5FCPN3z+xizxw9l+oXQw5fOoaj/ERU5KqWhSYhXtW5bWthlDbTDLBhJQrA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.4.tgz",
+ "integrity": "sha512-yMk3naGPLrfvUV9TdDbuYXngh/TpHbA6TrOw3HL9kS8yhwx7i309BReNg7CbAJXGE+UMJ6je5OqJ7lC63o6YuQ==",
"dev": true
},
"http-parser-js": {
@@ -6593,12 +7087,6 @@
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
- "is-subset": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
- "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
- "dev": true
- },
"is-symbol": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
@@ -6659,6 +7147,12 @@
"integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==",
"dev": true
},
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -7041,6 +7535,12 @@
"integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
"dev": true
},
+ "lodash.ismatch": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
+ "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=",
+ "dev": true
+ },
"lodash.template": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
@@ -7162,9 +7662,9 @@
}
},
"markdown-escapes": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz",
- "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz",
+ "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==",
"dev": true
},
"markdown-table": {
@@ -7843,9 +8343,9 @@
}
},
"node-releases": {
- "version": "1.1.17",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.17.tgz",
- "integrity": "sha512-/SCjetyta1m7YXLgtACZGDYJdCSIBAWorDWkGCGZlydP2Ll7J48l7j/JxNYZ+xsgSPbWfdulVS/aY+GdjUsQ7Q==",
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.18.tgz",
+ "integrity": "sha512-/mnVgm6u/8OwlIsoyRXtTI0RfQcxZoAZbdwyXap0EeWwcOpDDymyCHM2/aR9XKmHXrvizHoPAOs0pcbiJ6RUaA==",
"dev": true,
"requires": {
"semver": "^5.3.0"
@@ -8705,6 +9205,14 @@
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
+ "prom-client": {
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-11.3.0.tgz",
+ "integrity": "sha512-OqSf5WOvpGZXkfqPXUHNHpjrbEE/q8jxjktO0i7zg1cnULAtf0ET67/J5R4e4iA4MZx2260tzTzSFSWgMdTZmQ==",
+ "requires": {
+ "tdigest": "^0.1.1"
+ }
+ },
"promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
@@ -8822,6 +9330,12 @@
"integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
"dev": true
},
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ },
"query-string": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
@@ -9028,9 +9542,9 @@
}
},
"regexp-tree": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz",
- "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==",
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz",
+ "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==",
"dev": true
},
"regexpp": {
@@ -10095,25 +10609,33 @@
}
},
"standard-version": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-5.0.2.tgz",
- "integrity": "sha512-vvdWZySinwWU9UZhtgYUGGTkYzqrwYMw3c7CFJ17E7vMbAEqVSui/bm+ZcSukAAU2WmphPTWIKFmn8ni+lk4NA==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.1",
- "conventional-changelog": "^3.0.6",
- "conventional-recommended-bump": "^4.0.4",
- "detect-indent": "^5.0.0",
- "detect-newline": "^2.1.0",
- "dotgitignore": "^2.1.0",
- "figures": "^2.0.0",
- "fs-access": "^1.0.0",
- "git-semver-tags": "^2.0.2",
- "semver": "^5.2.0",
- "stringify-package": "^1.0.0",
- "yargs": "^12.0.2"
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-6.0.1.tgz",
+ "integrity": "sha512-+09AwTbyLKyUwefiZSccgarp24okvH9A229NOVSpYTKWcxBxqZqdYmtQaJ8UET9mjPXRxP84vonJU4YMqCyBTQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.4.2",
+ "conventional-changelog": "3.1.8",
+ "conventional-changelog-config-spec": "1.0.0",
+ "conventional-recommended-bump": "5.0.0",
+ "detect-indent": "6.0.0",
+ "detect-newline": "3.0.0",
+ "dotgitignore": "2.1.0",
+ "figures": "3.0.0",
+ "find-up": "3.0.0",
+ "fs-access": "1.0.1",
+ "git-semver-tags": "2.0.2",
+ "semver": "6.0.0",
+ "stringify-package": "1.0.0",
+ "yargs": "13.2.2"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@@ -10123,6 +10645,12 @@
"color-convert": "^1.9.0"
}
},
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -10135,14 +10663,101 @@
}
},
"figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz",
+ "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==",
"dev": true,
"requires": {
"escape-string-regexp": "^1.0.5"
}
},
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz",
+ "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -10151,6 +10766,41 @@
"requires": {
"has-flag": "^3.0.0"
}
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz",
+ "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "os-locale": "^3.1.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz",
+ "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
@@ -10625,6 +11275,14 @@
}
}
},
+ "tdigest": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.1.tgz",
+ "integrity": "sha1-Ljyyw56kSeVdHmzZEReszKRYgCE=",
+ "requires": {
+ "bintrees": "1.0.1"
+ }
+ },
"term-size": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
@@ -10669,9 +11327,9 @@
}
},
"terser": {
- "version": "3.17.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
- "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz",
+ "integrity": "sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==",
"dev": true,
"requires": {
"commander": "^2.19.0",
@@ -10694,19 +11352,21 @@
}
},
"terser-webpack-plugin": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz",
- "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz",
+ "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==",
"dev": true,
"requires": {
- "cacache": "^11.0.2",
+ "cacache": "^11.3.2",
"find-cache-dir": "^2.0.0",
+ "is-wsl": "^1.1.0",
+ "loader-utils": "^1.2.3",
"schema-utils": "^1.0.0",
- "serialize-javascript": "^1.4.0",
+ "serialize-javascript": "^1.7.0",
"source-map": "^0.6.1",
- "terser": "^3.16.1",
- "webpack-sources": "^1.1.0",
- "worker-farm": "^1.5.2"
+ "terser": "^4.0.0",
+ "webpack-sources": "^1.3.0",
+ "worker-farm": "^1.7.0"
},
"dependencies": {
"source-map": {
@@ -10927,12 +11587,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true
}
}
},
@@ -11049,9 +11703,9 @@
"dev": true
},
"trim-lines": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.1.tgz",
- "integrity": "sha512-X+eloHbgJGxczUk1WSjIvn7aC9oN3jVE3rQfRVKcgpavi3jxtCn0VVKtjOBj64Yop96UYn/ujJRpTbCdAF1vyg==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.2.tgz",
+ "integrity": "sha512-3GOuyNeTqk3FAqc3jOJtw7FTjYl94XBR5aD9QnDbK/T4CA9sW/J0l9RoaRPE9wyPP7NF331qnHnvJFBJ+IDkmQ==",
"dev": true
},
"trim-newlines": {
@@ -11746,9 +12400,9 @@
}
},
"webpack": {
- "version": "4.30.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.30.0.tgz",
- "integrity": "sha512-4hgvO2YbAFUhyTdlR4FNyt2+YaYBYHavyzjCMbZzgglo02rlKi/pcsEzwCuCpsn1ryzIl1cq/u8ArIKu8JBYMg==",
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.33.0.tgz",
+ "integrity": "sha512-ggWMb0B2QUuYso6FPZKUohOgfm+Z0sVFs8WwWuSH1IAvkWs428VDNmOlAxvHGTB9Dm/qOB/qtE5cRx5y01clxw==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.8.5",
@@ -11933,9 +12587,9 @@
"dev": true
},
"worker-farm": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
- "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
"dev": true,
"requires": {
"errno": "~0.1.7"
diff --git a/package.json b/package.json
index 944cb4cc..8a25efb1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "opossum",
- "version": "1.11.0",
+ "version": "2.0.0",
"author": "Red Hat, Inc.",
"license": "Apache-2.0",
"support": {
@@ -10,8 +10,9 @@
},
"scripts": {
"prebuild": "npm run lint",
- "build": "npm run build:browser && npm run build:docs",
- "build:browser": "webpack --config=config/webpack.config.js",
+ "build": "npm run build:browser && npm run build:node && npm run build:docs",
+ "build:node": "webpack --config=config/webpack.config.js",
+ "build:browser": "webpack --config=config/webpack.browser.config.js",
"build:docs": "npm run build:docs:html && npm run build:docs:markdown",
"build:docs:html": "documentation build index.js -f html -o docs --config documentation.yml",
"build:docs:markdown": "documentation build index.js -f md -o docs/opossum.md",
@@ -21,7 +22,7 @@
"test:browser": "opener http://localhost:9007/test/browser/index.html && serve . -p 9007",
"coverage": "nyc report && if [ $CODACY_PROJECT_TOKEN'' != '' ] ; then nyc report --reporter=text-lcov | codacy-coverage; fi",
"ci": "npm run build && npm run test && npm run test:headless && npm run coverage",
- "prerelease": "npm run test:ci",
+ "prerelease": "npm run ci",
"release": "standard-version -s",
"lint": "standardx test/*.js index.js lib/*.js test/*/*.js",
"clean": "rm -rf node_modules dist/*.js test/browser/webpack-test.js"
@@ -46,15 +47,15 @@
"devDependencies": {
"codacy-coverage": "^3.4.0",
"coveralls": "^3.0.3",
- "documentation": "^10.0.0",
+ "documentation": "^11.0.0",
"nyc": "~14.1.1",
"opener": "1.5.1",
"serve": "^11.0.0",
- "standard-version": "5.0.2",
+ "standard-version": "6.0.1",
"standardx": "^3.0.1",
"tap-spec": "~5.0.0",
"tape": "~4.10.1",
- "webpack": "~4.30.0",
+ "webpack": "~4.33.0",
"webpack-cli": "~3.3.0"
},
"description": "A fail-fast circuit breaker for promises and callbacks",
@@ -66,5 +67,8 @@
"breaker",
"hystrix",
"rate-limiting"
- ]
+ ],
+ "dependencies": {
+ "prom-client": "^11.2.1"
+ }
}
diff --git a/test/circuit-shutdown-test.js b/test/circuit-shutdown-test.js
index 59cd6a09..85b6bf63 100644
--- a/test/circuit-shutdown-test.js
+++ b/test/circuit-shutdown-test.js
@@ -8,8 +8,7 @@ const passFail = require('./common').passFail;
// chew up memory
test('EventEmitter max listeners', t => {
let i = 100;
- while (i > 0) {
- --i;
+ while (--i >= 0) {
const breaker = circuit(passFail, { name: `passFail${i}` });
breaker.fire(1);
breaker.shutdown(); // required for cleanup
diff --git a/test/health-check-test.js b/test/health-check-test.js
index bc3d5a48..2a3f5bd7 100644
--- a/test/health-check-test.js
+++ b/test/health-check-test.js
@@ -15,11 +15,11 @@ test('Circuits accept a health check function', t => {
}), 10000);
});
-test('health-check-failed is emitted on failure', t => {
+test('healthCheckFailed is emitted on failure', t => {
t.plan(1);
const circuit = opossum(common.passFail);
- circuit.on('health-check-failed', e => {
- t.equals(e.message, 'Too many tacos', 'health-check-failed emitted');
+ circuit.on('healthCheckFailed', e => {
+ t.equals(e.message, 'Too many tacos', 'healthCheckFailed emitted');
circuit.shutdown();
t.end();
});
diff --git a/test/prometheus-test.js b/test/prometheus-test.js
new file mode 100644
index 00000000..93f57ce1
--- /dev/null
+++ b/test/prometheus-test.js
@@ -0,0 +1,101 @@
+'use strict';
+
+const test = require('tape');
+const cb = require('../');
+const { passFail } = require('./common');
+
+test('A circuit provides prometheus metrics when not in a web env', t => {
+ t.plan(1);
+ const circuit = cb(passFail, {usePrometheus: true});
+ t.ok(process.env.WEB ? circuit.metrics : !!circuit.metrics);
+ circuit.metrics.clear();
+ t.end();
+});
+
+test('Does not load Prometheus when the option is not provided', t => {
+ t.plan(1);
+ const circuit = cb(passFail);
+ t.ok(!circuit.metrics);
+ circuit.shutdown();
+ t.end();
+});
+
+
+// All of the additional tests only make sense when running in a Node.js context
+if (!process.env.WEB) {
+ test('Circuit fire/success/failure are counted', t => {
+ const circuit = cb(passFail, {usePrometheus: true});
+ const fire = /circuit_passFail_fire 2/;
+ const success = /circuit_passFail_success 1/;
+ const failure = /circuit_passFail_failure 1/;
+ t.plan(3);
+ circuit.fire(1)
+ .then(_ => circuit.fire(-1))
+ .catch(_ => {
+ const metrics = circuit.metrics.metrics;
+ process.stdout.write(metrics);
+ t.ok(fire.test(metrics), fire);
+ t.ok(success.test(metrics), success);
+ t.ok(failure.test(metrics), failure);
+ circuit.metrics.clear();
+ t.end();
+ });
+ });
+
+ test('Metrics are enabled for all circuit events', t => {
+ const circuit = cb(passFail, {usePrometheus: true});
+ const metrics = circuit.metrics.metrics;
+ t.plan(circuit.eventNames().length);
+ for (let name of circuit.eventNames()) {
+ const match = new RegExp(`circuit_passFail_${name}`);
+ t.ok(match.test(metrics), name);
+ }
+ circuit.metrics.clear();
+ t.end();
+ });
+
+ test('Default prometheus metrics are enabled', t => {
+ const circuit = cb(passFail, {usePrometheus: true});
+ const metrics = circuit.metrics.metrics;
+ const names = [
+ 'process_cpu_seconds_total',
+ 'process_open_fds',
+ 'process_max_fds',
+ 'process_virtual_memory_bytes',
+ 'process_resident_memory_bytes',
+ 'process_heap_bytes',
+ 'process_start_time_seconds'
+ ];
+ t.plan(names.length);
+ for (let name of names) {
+ const match = new RegExp(`circuit_passFail_${name}`);
+ t.ok(match.test(metrics), name);
+ }
+ circuit.metrics.clear();
+ t.end();
+ });
+
+ test('Node.js specific metrics are enabled', t => {
+ const circuit = cb(passFail, {usePrometheus: true});
+ const metrics = circuit.metrics.metrics;
+ const names = [
+ 'nodejs_eventloop_lag',
+ 'nodejs_active_handles',
+ 'nodejs_active_requests',
+ 'nodejs_heap_size_total_bytes',
+ 'nodejs_heap_size_used_bytes',
+ 'nodejs_external_memory_bytes',
+ 'nodejs_heap_space_size_total_bytes',
+ 'nodejs_heap_space_size_used_bytes',
+ 'nodejs_heap_space_size_available_bytes',
+ 'nodejs_version_info'
+ ];
+ t.plan(names.length);
+ for (let name of names) {
+ const match = new RegExp(`circuit_passFail_${name}`);
+ t.ok(match.test(metrics), name);
+ }
+ circuit.metrics.clear();
+ t.end();
+ });
+}