-{{#if status }}
+ {{! its important to keep this with no whitespace so we can use :empty in css }}
+
\ No newline at end of file
+{{/if}}
\ No newline at end of file
diff --git a/ui-v2/app/templates/dc/nodes/-healthchecks.hbs b/ui-v2/app/templates/dc/nodes/-healthchecks.hbs
index d199676133..a956fad631 100644
--- a/ui-v2/app/templates/dc/nodes/-healthchecks.hbs
+++ b/ui-v2/app/templates/dc/nodes/-healthchecks.hbs
@@ -1,6 +1,11 @@
+{{#if (gt item.Checks.length 0) }}
{{#each (sort-by (action 'sortChecksByImportance') item.Checks) as |check| }}
{{healthcheck-status data-test-node-healthcheck=check.Name tagName='li' name=check.Name class=check.Status status=check.Status notes=check.Notes output=check.Output}}
{{/each}}
-
+{{else}}
+
+ This node has no health checks.
+
+{{/if}}
diff --git a/ui-v2/app/templates/dc/nodes/-services.hbs b/ui-v2/app/templates/dc/nodes/-services.hbs
index ff618251c3..87a913d250 100644
--- a/ui-v2/app/templates/dc/nodes/-services.hbs
+++ b/ui-v2/app/templates/dc/nodes/-services.hbs
@@ -15,7 +15,10 @@
{{/block-slot}}
{{#block-slot 'row'}}
- {{item.Service}}{{#if (not-eq item.ID item.Service) }} ({{item.ID}}){{/if}}
+
+
+ {{item.Service}}{{#if (not-eq item.ID item.Service) }}({{item.ID}}){{/if}}
+
|
{{item.Port}}
diff --git a/ui-v2/app/templates/dc/nodes/show.hbs b/ui-v2/app/templates/dc/nodes/show.hbs
index 9a63296b89..de95c3965d 100644
--- a/ui-v2/app/templates/dc/nodes/show.hbs
+++ b/ui-v2/app/templates/dc/nodes/show.hbs
@@ -10,13 +10,18 @@
{{/block-slot}}
{{#block-slot 'header'}}
- {{ item.Node }}
+ {{ item.Node }}
{{tab-nav
items=(compact
- (array 'Health Checks' 'Services' (if tomography 'Round Trip Time' '') 'Lock Sessions')
+ (array
+ 'Health Checks'
+ 'Services'
+ (if tomography 'Round Trip Time' '')
+ 'Lock Sessions'
+ )
)
- selected=(if selectedTab selectedTab 'health-checks')
+ selected=selectedTab
}}
{{/block-slot}}
{{#block-slot 'actions'}}
@@ -49,7 +54,7 @@
)
) as |panel|
}}
- {{#tab-section id=panel.id selected=(eq (if selectedTab selectedTab 'health-checks') panel.id) onchange=(action "change")}}
+ {{#tab-section id=panel.id selected=(eq (if selectedTab selectedTab '') panel.id) onchange=(action "change")}}
{{partial panel.partial}}
{{/tab-section}}
{{/each}}
diff --git a/ui-v2/app/templates/dc/services/index.hbs b/ui-v2/app/templates/dc/services/index.hbs
index 64c9a54e30..22a5c12c5b 100644
--- a/ui-v2/app/templates/dc/services/index.hbs
+++ b/ui-v2/app/templates/dc/services/index.hbs
@@ -22,14 +22,21 @@
}}
{{#block-slot 'header'}}
| Service |
- Node Health |
+ Node Health |
Tags |
{{/block-slot}}
{{#block-slot 'row'}}
+
- {{item.Name}}
+
+
+ {{item.Name}}
+
|
-
+ |
+{{#if (and (lt item.ChecksPassing 1) (lt item.ChecksWarning 1) (lt item.ChecksCritical 1) )}}
+ 0
+{{else}}
- Healthchecks Passing
- {{format_number item.ChecksPassing}}
@@ -38,6 +45,7 @@
- Healthchecks Critical
- {{format_number item.ChecksCritical}}
+{{/if}}
|
{{#if (gt item.Tags.length 0)}}
diff --git a/ui-v2/app/templates/dc/services/show.hbs b/ui-v2/app/templates/dc/services/show.hbs
index 4e1c0dcda6..2c3fb111eb 100644
--- a/ui-v2/app/templates/dc/services/show.hbs
+++ b/ui-v2/app/templates/dc/services/show.hbs
@@ -5,9 +5,10 @@
{{/block-slot}}
{{#block-slot 'header'}}
-
- {{ item.Service.Service }}
-
+
+ {{ item.Service.Service }}
+ Registered via {{service/external-source item.Service}}
+
{{/block-slot}}
{{#block-slot 'toolbar'}}
{{#if (gt items.length 0) }}
diff --git a/ui-v2/tests/acceptance/components/catalog-filter.feature b/ui-v2/tests/acceptance/components/catalog-filter.feature
index 213eee4c4c..ff4f9558db 100644
--- a/ui-v2/tests/acceptance/components/catalog-filter.feature
+++ b/ui-v2/tests/acceptance/components/catalog-filter.feature
@@ -61,9 +61,22 @@ Feature: components / catalog-filter
-------------------------------------------------
Scenario: Filtering [Model] in [Page]
Given 1 datacenter model with the value "dc1"
- And 2 node models from yaml
+ And 1 node model from yaml
---
- - ID: node-0
+ ID: node-0
+ Services:
+ - ID: 'service-0-with-id'
+ Port: 65535
+ Service: 'service-0'
+ Tags: ['monitor', 'two', 'three']
+ - ID: 'service-1'
+ Port: 0
+ Service: 'service-1'
+ Tags: ['hard drive', 'monitor', 'three']
+ - ID: 'service-2'
+ Port: 1
+ Service: 'service-2'
+ Tags: ['one', 'two', 'three']
---
When I visit the [Page] page for yaml
---
@@ -71,7 +84,6 @@ Feature: components / catalog-filter
node: node-0
---
# And I see 3 healthcheck model with the name "Disk Util"
- # And then pause for 5000
When I click services on the tabs
And I see servicesIsSelected on the tabs
diff --git a/ui-v2/tests/acceptance/dc/nodes/services.feature b/ui-v2/tests/acceptance/dc/nodes/services.feature
deleted file mode 100644
index d7c6713312..0000000000
--- a/ui-v2/tests/acceptance/dc/nodes/services.feature
+++ /dev/null
@@ -1,16 +0,0 @@
-@setupApplicationTest
-Feature: Search services within nodes by name and port
- Scenario: Given 1 node
- Given 1 datacenter model with the value "dc1"
- And 1 node models from yaml
- ---
- - ID: node-0
- ---
- When I visit the node page for yaml
- ---
- dc: dc1
- node: node-0
- ---
- When I click services on the tabs
- And I see servicesIsSelected on the tabs
-
diff --git a/ui-v2/tests/acceptance/dc/nodes/services/list.feature b/ui-v2/tests/acceptance/dc/nodes/services/list.feature
new file mode 100644
index 0000000000..1d99fd9f93
--- /dev/null
+++ b/ui-v2/tests/acceptance/dc/nodes/services/list.feature
@@ -0,0 +1,53 @@
+@setupApplicationTest
+Feature: dc / nodes / services / list: Node > Services Listing
+ Scenario: Given 1 node
+ Given 1 datacenter model with the value "dc1"
+ And 1 node model from yaml
+ ---
+ ID: node-0
+ Services:
+ - ID: 'service-0-with-id'
+ Port: 65535
+ Service: 'service-0'
+ Tags: ['monitor', 'two', 'three']
+ Meta:
+ external-source: consul
+ - ID: 'service-1'
+ Port: 0
+ Service: 'service-1'
+ Tags: ['hard drive', 'monitor', 'three']
+ Meta:
+ external-source: nomad
+ - ID: 'service-2'
+ Port: 1
+ Service: 'service-2'
+ Tags: ['one', 'two', 'three']
+ Meta:
+ external-source: terraform
+ - ID: 'service-3'
+ Port: 2
+ Service: 'service-3'
+ Tags: []
+ Meta:
+ external-source: kubernetes
+ - ID: 'service-4'
+ Port: 3
+ Service: 'service-4'
+ Tags: []
+ Meta: ~
+ ---
+ When I visit the node page for yaml
+ ---
+ dc: dc1
+ node: node-0
+ ---
+ When I click services on the tabs
+ And I see servicesIsSelected on the tabs
+ And I see externalSource on the services like yaml
+ ---
+ - consul
+ - nomad
+ - terraform
+ - kubernetes
+ - ~
+ ---
diff --git a/ui-v2/tests/acceptance/dc/nodes/sessions/invalidate.feature b/ui-v2/tests/acceptance/dc/nodes/sessions/invalidate.feature
index ae77c20f08..ba2288a38a 100644
--- a/ui-v2/tests/acceptance/dc/nodes/sessions/invalidate.feature
+++ b/ui-v2/tests/acceptance/dc/nodes/sessions/invalidate.feature
@@ -7,7 +7,7 @@ Feature: dc / nodes / sessions / invalidate: Invalidate Lock Sessions
Given 1 datacenter model with the value "dc1"
And 1 node model from yaml
---
- - ID: node-0
+ ID: node-0
---
And 2 session models from yaml
---
diff --git a/ui-v2/tests/acceptance/dc/nodes/sessions/list.feature b/ui-v2/tests/acceptance/dc/nodes/sessions/list.feature
index 4c7f17beda..efcc9c1e4d 100644
--- a/ui-v2/tests/acceptance/dc/nodes/sessions/list.feature
+++ b/ui-v2/tests/acceptance/dc/nodes/sessions/list.feature
@@ -7,7 +7,7 @@ Feature: dc / nodes / sessions / list: List Lock Sessions
Given 1 datacenter model with the value "dc1"
And 1 node model from yaml
---
- - ID: node-0
+ ID: node-0
---
And 2 session models from yaml
---
diff --git a/ui-v2/tests/acceptance/dc/nodes/show.feature b/ui-v2/tests/acceptance/dc/nodes/show.feature
index 49a8c22fa1..2ea28bb3e2 100644
--- a/ui-v2/tests/acceptance/dc/nodes/show.feature
+++ b/ui-v2/tests/acceptance/dc/nodes/show.feature
@@ -1,12 +1,8 @@
@setupApplicationTest
-Feature: Show node
+Feature: dc / nodes / show: Show node
Scenario: Given 2 nodes all the tabs are visible and clickable
Given 1 datacenter model with the value "dc1"
And 2 node models from yaml
- ---
- - ID: node-0
- - ID: node-1
- ---
When I visit the node page for yaml
---
dc: dc1
@@ -22,12 +18,11 @@ Feature: Show node
When I click lockSessions on the tabs
And I see lockSessionsIsSelected on the tabs
-@ignore
Scenario: Given 1 node all the tabs are visible and clickable and the RTT one isn't there
Given 1 datacenter model with the value "dc1"
And 1 node models from yaml
---
- - ID: node-0
+ ID: node-0
---
When I visit the node page for yaml
---
@@ -43,4 +38,20 @@ Feature: Show node
When I click lockSessions on the tabs
And I see lockSessionsIsSelected on the tabs
-
+ Scenario: Given 1 node with no checks all the tabs are visible but the Services tab is selected
+ Given 1 datacenter model with the value "dc1"
+ And 1 node models from yaml
+ ---
+ ID: node-0
+ Checks: []
+ ---
+ When I visit the node page for yaml
+ ---
+ dc: dc1
+ node: node-0
+ ---
+ And I see healthChecks on the tabs
+ And I see services on the tabs
+ And I see roundTripTime on the tabs
+ And I see lockSessions on the tabs
+ And I see servicesIsSelected on the tabs
diff --git a/ui-v2/tests/acceptance/dc/services/index.feature b/ui-v2/tests/acceptance/dc/services/index.feature
index a70f62ba63..9c303cf34b 100644
--- a/ui-v2/tests/acceptance/dc/services/index.feature
+++ b/ui-v2/tests/acceptance/dc/services/index.feature
@@ -1,11 +1,36 @@
@setupApplicationTest
-Feature: Services
+Feature: dc / services: List Services
Scenario:
Given 1 datacenter model with the value "dc-1"
- And 3 service models
+ And 5 service models from yaml
+ ---
+ - Name: Service 1
+ Meta:
+ external-source: consul
+ - Name: Service 2
+ Meta:
+ external-source: nomad
+ - Name: Service 3
+ Meta:
+ external-source: terraform
+ - Name: Service 4
+ Meta:
+ external-source: kubernetes
+ - Name: Service 5
+ Meta: ~
+ ---
When I visit the services page for yaml
---
dc: dc-1
---
Then the url should be /dc-1/services
- Then I see 3 service models
+ Then I see 5 service models
+ And I see externalSource on the services like yaml
+ ---
+ - consul
+ - nomad
+ - terraform
+ - kubernetes
+ - ~
+ ---
+
diff --git a/ui-v2/tests/acceptance/dc/services/show.feature b/ui-v2/tests/acceptance/dc/services/show.feature
index b327e822de..8be64db06f 100644
--- a/ui-v2/tests/acceptance/dc/services/show.feature
+++ b/ui-v2/tests/acceptance/dc/services/show.feature
@@ -1,5 +1,21 @@
@setupApplicationTest
Feature: dc / services / show: Show Service
+ Scenario: Given a service with an external source, the logo is displayed
+ Given 1 datacenter model with the value "dc1"
+ And 1 node models
+ And 1 service model from yaml
+ ---
+ - Service:
+ Tags: ['Tag1', 'Tag2']
+ Meta:
+ external-source: consul
+ ---
+ When I visit the service page for yaml
+ ---
+ dc: dc1
+ service: service-0
+ ---
+ Then I see externalSource like "consul"
Scenario: Given various services with various tags, all tags are displayed
Given 1 datacenter model with the value "dc1"
And 3 node models
diff --git a/ui-v2/tests/acceptance/steps/dc/nodes/services-steps.js b/ui-v2/tests/acceptance/steps/dc/nodes/services/list-steps.js
similarity index 85%
rename from ui-v2/tests/acceptance/steps/dc/nodes/services-steps.js
rename to ui-v2/tests/acceptance/steps/dc/nodes/services/list-steps.js
index a7eff3228b..3231912b98 100644
--- a/ui-v2/tests/acceptance/steps/dc/nodes/services-steps.js
+++ b/ui-v2/tests/acceptance/steps/dc/nodes/services/list-steps.js
@@ -1,10 +1,10 @@
-import steps from '../../steps';
-
-// step definitions that are shared between features should be moved to the
-// tests/acceptance/steps/steps.js file
-
-export default function(assert) {
- return steps(assert).then('I should find a file', function() {
- assert.ok(true, this.step);
- });
-}
+import steps from '../../../steps';
+
+// step definitions that are shared between features should be moved to the
+// tests/acceptance/steps/steps.js file
+
+export default function(assert) {
+ return steps(assert).then('I should find a file', function() {
+ assert.ok(true, this.step);
+ });
+}
diff --git a/ui-v2/tests/helpers/type-to-url.js b/ui-v2/tests/helpers/type-to-url.js
index 401c8c0b91..57fbbe3538 100644
--- a/ui-v2/tests/helpers/type-to-url.js
+++ b/ui-v2/tests/helpers/type-to-url.js
@@ -8,7 +8,7 @@ export default function(type) {
requests = ['/v1/internal/ui/services', '/v1/health/service/'];
break;
case 'node':
- requests = ['/v1/internal/ui/nodes'];
+ requests = ['/v1/internal/ui/nodes', '/v1/internal/ui/node/'];
break;
case 'kv':
requests = ['/v1/kv/'];
diff --git a/ui-v2/tests/integration/helpers/css-var-test.js b/ui-v2/tests/integration/helpers/css-var-test.js
new file mode 100644
index 0000000000..3dbf3f57b7
--- /dev/null
+++ b/ui-v2/tests/integration/helpers/css-var-test.js
@@ -0,0 +1,32 @@
+import { moduleForComponent, test } from 'ember-qunit';
+import hbs from 'htmlbars-inline-precompile';
+
+moduleForComponent('css-var', 'helper:css-var', {
+ integration: true,
+});
+
+// Replace this with your real tests.
+test("it renders nothing if the variable doesn't exist", function(assert) {
+ this.set('inputValue', '1234');
+
+ this.render(hbs`{{css-var inputValue}}`);
+
+ assert.equal(
+ this.$()
+ .text()
+ .trim(),
+ ''
+ );
+});
+test("it renders a default if the variable doesn't exist", function(assert) {
+ this.set('inputValue', '1234');
+
+ this.render(hbs`{{css-var inputValue 'none'}}`);
+
+ assert.equal(
+ this.$()
+ .text()
+ .trim(),
+ 'none'
+ );
+});
diff --git a/ui-v2/tests/integration/helpers/service/external-source-test.js b/ui-v2/tests/integration/helpers/service/external-source-test.js
new file mode 100644
index 0000000000..9e94138d80
--- /dev/null
+++ b/ui-v2/tests/integration/helpers/service/external-source-test.js
@@ -0,0 +1,32 @@
+import { moduleForComponent, test } from 'ember-qunit';
+import hbs from 'htmlbars-inline-precompile';
+
+moduleForComponent('service/external-source', 'helper:service/external-source', {
+ integration: true,
+});
+
+// Replace this with your real tests.
+test('it renders', function(assert) {
+ this.set('inputValue', { Meta: { 'external-source': 'consul' } });
+
+ this.render(hbs`{{service/external-source inputValue}}`);
+
+ assert.equal(
+ this.$()
+ .text()
+ .trim(),
+ 'consul'
+ );
+});
+test('it renders prefixed', function(assert) {
+ this.set('inputValue', { Meta: { 'external-source': 'consul' } });
+
+ this.render(hbs`{{service/external-source inputValue prefix='external-source-'}}`);
+
+ assert.equal(
+ this.$()
+ .text()
+ .trim(),
+ 'external-source-consul'
+ );
+});
diff --git a/ui-v2/tests/pages/dc/nodes/show.js b/ui-v2/tests/pages/dc/nodes/show.js
index db1bdf0db2..755306ff7c 100644
--- a/ui-v2/tests/pages/dc/nodes/show.js
+++ b/ui-v2/tests/pages/dc/nodes/show.js
@@ -9,6 +9,7 @@ export default function(visitable, deletable, clickable, attribute, collection,
id: attribute('data-test-service-id', '[data-test-service-id]'),
name: attribute('data-test-service-name', '[data-test-service-name]'),
port: attribute('data-test-service-port', '.port'),
+ externalSource: attribute('data-test-external-source', 'a span'),
}),
sessions: collection(
'#lock-sessions [data-test-tabular-row]',
diff --git a/ui-v2/tests/pages/dc/services/index.js b/ui-v2/tests/pages/dc/services/index.js
index d403b0b10b..551a95fef2 100644
--- a/ui-v2/tests/pages/dc/services/index.js
+++ b/ui-v2/tests/pages/dc/services/index.js
@@ -4,6 +4,7 @@ export default function(visitable, clickable, attribute, collection, page, filte
services: collection('[data-test-service]', {
name: attribute('data-test-service'),
service: clickable('a'),
+ externalSource: attribute('data-test-external-source', 'a span'),
}),
dcs: collection('[data-test-datacenter-picker]'),
navigation: page.navigation,
diff --git a/ui-v2/tests/pages/dc/services/show.js b/ui-v2/tests/pages/dc/services/show.js
index 7e2a895bf3..f50c60c834 100644
--- a/ui-v2/tests/pages/dc/services/show.js
+++ b/ui-v2/tests/pages/dc/services/show.js
@@ -1,6 +1,7 @@
export default function(visitable, attribute, collection, text, filter) {
return {
visit: visitable('/:dc/services/:service'),
+ externalSource: attribute('data-test-external-source', 'h1 span'),
nodes: collection('[data-test-node]', {
name: attribute('data-test-node'),
}),
diff --git a/ui-v2/tests/steps.js b/ui-v2/tests/steps.js
index f2a3bd671e..05cfad9f86 100644
--- a/ui-v2/tests/steps.js
+++ b/ui-v2/tests/steps.js
@@ -317,7 +317,11 @@ export default function(assert) {
// this will catch if we get aren't managing to select a component
assert.ok(iterator.length > 0);
iterator.forEach(function(item, i, arr) {
- const actual = _component.objectAt(i)[property];
+ const actual =
+ typeof _component.objectAt(i)[property] === 'undefined'
+ ? null
+ : _component.objectAt(i)[property];
+
// anything coming from the DOM is going to be text/strings
// if the yaml has numbers, cast them to strings
// TODO: This would get problematic for deeper objects
@@ -380,6 +384,13 @@ export default function(assert) {
.then(['I see $property'], function(property) {
assert.ok(currentPage[property], `Expected to see ${property}`);
})
+ .then(['I see $property like "$value"'], function(property, value) {
+ assert.equal(
+ currentPage[property],
+ value,
+ `Expected to see ${property}, was ${currentPage[property]}`
+ );
+ })
.then(['I see the text "$text" in "$selector"'], function(text, selector) {
assert.ok(
find(selector).textContent.indexOf(text) !== -1,
diff --git a/ui-v2/yarn.lock b/ui-v2/yarn.lock
index 40d9406805..311af52c69 100644
--- a/ui-v2/yarn.lock
+++ b/ui-v2/yarn.lock
@@ -82,12 +82,12 @@
js-yaml "^3.10.0"
"@hashicorp/consul-api-double@^1.4.0":
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-1.4.3.tgz#0d08e167b1163200885636e6d368585004db1c98"
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-1.5.1.tgz#73ce7696dc4475f69a59462e6690611b73ec6ced"
"@hashicorp/ember-cli-api-double@^1.3.0":
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-1.5.1.tgz#92789eaf2073b5871d859700bc696e9552bb835b"
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-1.6.0.tgz#b40eae09d14ae8491516598f881cf51cbe7e2787"
dependencies:
"@hashicorp/api-double" "^1.3.0"
array-range "^1.0.1"
@@ -5343,9 +5343,9 @@ invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-ipaddr.js@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b"
+ipaddr.js@1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
is-accessor-descriptor@^0.1.6:
version "0.1.6"
@@ -6700,9 +6700,9 @@ miller-rabin@^4.0.0:
version "1.33.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
-mime-db@~1.35.0:
- version "1.35.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47"
+mime-db@~1.36.0:
+ version "1.36.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397"
mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.17, mime-types@~2.1.7:
version "2.1.18"
@@ -6711,10 +6711,10 @@ mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.17, mime-types@~2.1.7:
mime-db "~1.33.0"
mime-types@~2.1.18:
- version "2.1.19"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0"
+ version "2.1.20"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19"
dependencies:
- mime-db "~1.35.0"
+ mime-db "~1.36.0"
mime@1.4.1:
version "1.4.1"
@@ -7548,11 +7548,11 @@ promised-io@*:
resolved "https://registry.yarnpkg.com/promised-io/-/promised-io-0.3.5.tgz#4ad217bb3658bcaae9946b17a8668ecd851e1356"
proxy-addr@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341"
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
dependencies:
forwarded "~0.1.2"
- ipaddr.js "1.6.0"
+ ipaddr.js "1.8.0"
pseudomap@^1.0.2:
version "1.0.2"
@@ -8109,8 +8109,8 @@ rollup@^0.58.1:
"@types/node" "*"
route-recognizer@^0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.3.tgz#1d365e27fa6995e091675f7dc940a8c00353bd29"
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.4.tgz#39ab1ffbce1c59e6d2bdca416f0932611e4f3ca3"
rsvp@^3.0.14, rsvp@^3.0.16, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0, rsvp@^3.2.1, rsvp@^3.3.3, rsvp@^3.5.0:
version "3.6.2"
|