From 553d3cc79b06516fd758157b45e544e2c189b11c Mon Sep 17 00:00:00 2001 From: John Cowen Date: Tue, 11 Jun 2019 20:31:22 +0000 Subject: [PATCH] ui: more backend search --- ui-v2/app/components/consul-node-list.js | 7 + ui-v2/app/components/consul-service-list.js | 66 +++ ui-v2/app/components/data-source.js | 77 +-- ui-v2/app/components/event-source.js | 4 +- ui-v2/app/components/phrase-editor.js | 2 +- ui-v2/app/controllers/dc/nodes/index.js | 7 +- ui-v2/app/controllers/dc/services/index.js | 60 +-- ui-v2/app/helpers/to-filter.js | 1 - ui-v2/app/routes/dc/nodes/index.js | 11 +- ui-v2/app/routes/dc/services/index.js | 21 +- ui-v2/app/services/blocking.js | 134 +++-- .../templates/components/consul-node-list.hbs | 24 + .../components/consul-service-list.hbs | 40 ++ ui-v2/app/templates/dc/nodes/index.hbs | 32 +- ui-v2/app/templates/dc/services/index.hbs | 47 +- ui-v2/app/utils/atob.js | 2 +- ui-v2/app/utils/btoa.js | 2 +- ui-v2/app/utils/dom/event-source/blocking.js | 16 +- ui-v2/app/utils/routing/convert-status.js | 14 + ui-v2/package.json | 5 +- .../components/consul-node-list-test.js | 34 ++ .../components/consul-service-list-test.js | 34 ++ .../unit/utils/routing/convert-status-test.js | 10 + ui-v2/yarn.lock | 498 +++++++++++++++++- 24 files changed, 868 insertions(+), 280 deletions(-) create mode 100644 ui-v2/app/components/consul-node-list.js create mode 100644 ui-v2/app/components/consul-service-list.js create mode 100644 ui-v2/app/templates/components/consul-node-list.hbs create mode 100644 ui-v2/app/templates/components/consul-service-list.hbs create mode 100644 ui-v2/app/utils/routing/convert-status.js create mode 100644 ui-v2/tests/integration/components/consul-node-list-test.js create mode 100644 ui-v2/tests/integration/components/consul-service-list-test.js create mode 100644 ui-v2/tests/unit/utils/routing/convert-status-test.js diff --git a/ui-v2/app/components/consul-node-list.js b/ui-v2/app/components/consul-node-list.js new file mode 100644 index 000000000000..d0f91b4d1132 --- /dev/null +++ b/ui-v2/app/components/consul-node-list.js @@ -0,0 +1,7 @@ +import Component from '@ember/component'; +import Slotted from 'block-slots'; + +export default Component.extend(Slotted, { + tagName: '', + onchange: function() {}, +}); diff --git a/ui-v2/app/components/consul-service-list.js b/ui-v2/app/components/consul-service-list.js new file mode 100644 index 000000000000..fe6ea80b9f22 --- /dev/null +++ b/ui-v2/app/components/consul-service-list.js @@ -0,0 +1,66 @@ +import Component from '@ember/component'; +import Slotted from 'block-slots'; + +import { get, computed } from '@ember/object'; +import { htmlSafe } from '@ember/string'; +const max = function(arr, prop) { + return arr.reduce(function(prev, item) { + return Math.max(prev, get(item, prop)); + }, 0); +}; +const chunk = function(str, size) { + const num = Math.ceil(str.length / size); + const chunks = new Array(num); + for (let i = 0, o = 0; i < num; ++i, o += size) { + chunks[i] = str.substr(o, size); + } + return chunks; +}; +const width = function(num) { + const str = num.toString(); + const len = str.length; + const commas = chunk(str, 3).length - 1; + return commas * 4 + len * 10; +}; +const widthDeclaration = function(num) { + return htmlSafe(`width: ${num}px`); +}; +export default Component.extend(Slotted, { + tagName: '', + onchange: function() {}, + maxWidth: computed('{maxPassing,maxWarning,maxCritical}', function() { + const PADDING = 32 * 3 + 13; + return ['maxPassing', 'maxWarning', 'maxCritical'].reduce((prev, item) => { + return prev + width(get(this, item)); + }, PADDING); + }), + totalWidth: computed('maxWidth', function() { + return widthDeclaration(get(this, 'maxWidth')); + }), + remainingWidth: computed('maxWidth', function() { + // maxWidth is the maximum width of the healthchecks column + // there are currently 2 other columns so divide it by 2 and + // take that off 50% (100% / number of fluid columns) + // also we added a Type column which we've currently fixed to 100px + // so again divide that by 2 and take it off each fluid column + return htmlSafe(`width: calc(50% - 50px - ${Math.round(get(this, 'maxWidth') / 2)}px)`); + }), + maxPassing: computed('items.[]', function() { + return max(get(this, 'items'), 'ChecksPassing'); + }), + maxWarning: computed('items.[]', function() { + return max(get(this, 'items'), 'ChecksWarning'); + }), + maxCritical: computed('items.[]', function() { + return max(get(this, 'items'), 'ChecksCritical'); + }), + passingWidth: computed('maxPassing', function() { + return widthDeclaration(width(get(this, 'maxPassing'))); + }), + warningWidth: computed('maxWarning', function() { + return widthDeclaration(width(get(this, 'maxWarning'))); + }), + criticalWidth: computed('maxCritical', function() { + return widthDeclaration(width(get(this, 'maxCritical'))); + }), +}); diff --git a/ui-v2/app/components/data-source.js b/ui-v2/app/components/data-source.js index 459e71595701..6e974f39edd3 100644 --- a/ui-v2/app/components/data-source.js +++ b/ui-v2/app/components/data-source.js @@ -1,6 +1,6 @@ import Component from '@ember/component'; import { inject as service } from '@ember/service'; -import { get, set, computed } from '@ember/object'; +import { get, set } from '@ember/object'; import WithListeners from 'consul-ui/mixins/with-listeners'; @@ -19,48 +19,14 @@ const replace = function( export default Component.extend(WithListeners, { tagName: 'span', - // TODO: Temporary repo list here - service: service('repository/service'), - node: service('repository/node'), - session: service('repository/session'), - blocking: service('blocking'), + data: service('blocking'), settings: service('settings'), - onmessage: function() {}, + + onchange: function() {}, onerror: function() {}, onprogress: function() {}, - // TODO: Temporary finder - finder: function(src, filter) { - const temp = src.split('/'); - temp.shift(); - const slug = temp.pop(); - const model = temp.pop(); - const dc = temp.shift(); - switch (slug) { - case '*': - switch (model) { - default: - return configuration => { - return get(this, model).findAllByDatacenter(dc, { - cursor: configuration.cursor, - filter: filter, - }); - }; - } - default: - switch (model) { - case 'session': - return configuration => { - return get(this, model).findByNode(slug, dc, { cursor: configuration.cursor }); - }; - default: - return configuration => { - return get(this, model).findBySlug(slug, dc, { cursor: configuration.cursor }); - }; - } - } - }, didInsertElement: function() { this._super(...arguments); const options = { @@ -97,32 +63,31 @@ export default Component.extend(WithListeners, { const src = get(this, 'src'); const filter = get(this, 'filter'); - replace( + const source = replace( this, 'source', - get(this, 'blocking').open(this.finder(src, filter), { - id: `${src}${filter ? `?filter=${filter}` : ``}`, - }), + get(this, 'data').open(`${src}${filter ? `?filter=${filter}` : ``}`, this), (prev, source) => { - get(this, 'blocking').close(prev); - const remove = this.listen(source, { - message: e => this.onmessage(e), - error: e => { - remove(); - this.onerror(e); - }, - }); - replace(this, '_remove', remove); - const previousEvent = source.getPreviousEvent(); - if (previousEvent) { - source.dispatchEvent(previousEvent); - } + // Makes sure any previous source (if different) is ALWAYS closed + get(this, 'data').close(prev, this); } ); + const remove = this.listen(source, { + message: e => this.onchange(e), + error: e => { + remove(); + this.onerror(e); + }, + }); + replace(this, '_remove', remove); + const currentEvent = source.getCurrentEvent(); + if (currentEvent) { + this.onchange(currentEvent); + } }, close: function() { // keep this argumentless - get(this, 'blocking').close(get(this, 'source')); + get(this, 'data').close(get(this, 'source'), this); replace(this, '_remove', null); set(this, 'source', undefined); }, diff --git a/ui-v2/app/components/event-source.js b/ui-v2/app/components/event-source.js index ab83f473d097..00f200e6c252 100644 --- a/ui-v2/app/components/event-source.js +++ b/ui-v2/app/components/event-source.js @@ -1,5 +1,5 @@ import Component from '@ember/component'; -import { get, set, computed } from '@ember/object'; +import { get, set } from '@ember/object'; import { inject as service } from '@ember/service'; import { CallableEventSource as EventSource } from 'consul-ui/utils/dom/event-source'; @@ -36,14 +36,12 @@ export default Component.extend(WithListeners, { $placeholder.remove(); this.listen(source, 'message', e => { const type = e.data.type; - const event = e.data.data; if (get(this, 'type') == type) { set(this, `on${type}`, get(this, 'handler')); } get(this, 'dom').dispatch(get(this, 'target'), { type: type, target: this }); }); this.listen(source, 'error', e => this.onerror(e)); - } else { } }, actions: { diff --git a/ui-v2/app/components/phrase-editor.js b/ui-v2/app/components/phrase-editor.js index aabc117b725d..632f3b9e0564 100644 --- a/ui-v2/app/components/phrase-editor.js +++ b/ui-v2/app/components/phrase-editor.js @@ -1,5 +1,5 @@ import Component from '@ember/component'; -import { get, set, computed } from '@ember/object'; +import { get, set } from '@ember/object'; import { inject as service } from '@ember/service'; export default Component.extend({ diff --git a/ui-v2/app/controllers/dc/nodes/index.js b/ui-v2/app/controllers/dc/nodes/index.js index dba43544614c..7b7a734303dd 100644 --- a/ui-v2/app/controllers/dc/nodes/index.js +++ b/ui-v2/app/controllers/dc/nodes/index.js @@ -1,8 +1,13 @@ import Controller from '@ember/controller'; import { set } from '@ember/object'; -import { get } from '@ember/object'; + let s; export default Controller.extend({ + queryParams: { + s: { + as: 'filter', + }, + }, setProperties: function(model) { s = model.s = typeof model.s === 'undefined' ? s : model.s; if (s) { diff --git a/ui-v2/app/controllers/dc/services/index.js b/ui-v2/app/controllers/dc/services/index.js index 4bf523fba2c0..640dd37988e5 100644 --- a/ui-v2/app/controllers/dc/services/index.js +++ b/ui-v2/app/controllers/dc/services/index.js @@ -1,28 +1,5 @@ import Controller from '@ember/controller'; -import { get, set, computed } from '@ember/object'; -import { htmlSafe } from '@ember/string'; -const max = function(arr, prop) { - return arr.reduce(function(prev, item) { - return Math.max(prev, get(item, prop)); - }, 0); -}; -const chunk = function(str, size) { - const num = Math.ceil(str.length / size); - const chunks = new Array(num); - for (let i = 0, o = 0; i < num; ++i, o += size) { - chunks[i] = str.substr(o, size); - } - return chunks; -}; -const width = function(num) { - const str = num.toString(); - const len = str.length; - const commas = chunk(str, 3).length - 1; - return commas * 4 + len * 10; -}; -const widthDeclaration = function(num) { - return htmlSafe(`width: ${num}px`); -}; +import { set } from '@ember/object'; let s; export default Controller.extend({ queryParams: { @@ -39,41 +16,6 @@ export default Controller.extend({ } return this._super(model); }, - maxWidth: computed('{maxPassing,maxWarning,maxCritical}', function() { - const PADDING = 32 * 3 + 13; - return ['maxPassing', 'maxWarning', 'maxCritical'].reduce((prev, item) => { - return prev + width(get(this, item)); - }, PADDING); - }), - totalWidth: computed('maxWidth', function() { - return widthDeclaration(get(this, 'maxWidth')); - }), - remainingWidth: computed('maxWidth', function() { - // maxWidth is the maximum width of the healthchecks column - // there are currently 2 other columns so divide it by 2 and - // take that off 50% (100% / number of fluid columns) - // also we added a Type column which we've currently fixed to 100px - // so again divide that by 2 and take it off each fluid column - return htmlSafe(`width: calc(50% - 50px - ${Math.round(get(this, 'maxWidth') / 2)}px)`); - }), - maxPassing: computed('items.[]', function() { - return max(get(this, 'items'), 'ChecksPassing'); - }), - maxWarning: computed('items.[]', function() { - return max(get(this, 'items'), 'ChecksWarning'); - }), - maxCritical: computed('items.[]', function() { - return max(get(this, 'items'), 'ChecksCritical'); - }), - passingWidth: computed('maxPassing', function() { - return widthDeclaration(width(get(this, 'maxPassing'))); - }), - warningWidth: computed('maxWarning', function() { - return widthDeclaration(width(get(this, 'maxWarning'))); - }), - criticalWidth: computed('maxCritical', function() { - return widthDeclaration(width(get(this, 'maxCritical'))); - }), actions: { query: function(args) { s = args.length > 0 ? args.join('\n') : null; diff --git a/ui-v2/app/helpers/to-filter.js b/ui-v2/app/helpers/to-filter.js index d727e073c319..57a4adc8adb8 100644 --- a/ui-v2/app/helpers/to-filter.js +++ b/ui-v2/app/helpers/to-filter.js @@ -3,7 +3,6 @@ import ucfirst from 'consul-ui/utils/ucfirst'; const convert = function(str, map) { const replacement = map.find(function(arr) { const key = arr[0]; - const val = arr[1]; return str.startsWith(key); }); const replaced = str.replace(replacement[0], ''); diff --git a/ui-v2/app/routes/dc/nodes/index.js b/ui-v2/app/routes/dc/nodes/index.js index 1056528bdebc..0f61f0025726 100644 --- a/ui-v2/app/routes/dc/nodes/index.js +++ b/ui-v2/app/routes/dc/nodes/index.js @@ -1,4 +1,5 @@ import Route from '@ember/routing/route'; +import convertStatus from 'consul-ui/utils/routing/convert-status'; export default Route.extend({ queryParams: { @@ -6,12 +7,18 @@ export default Route.extend({ as: 'filter', replace: true, }, + // temporary support of old style status + status: { + as: 'status', + }, }, model: function(params) { return { - s: params.s, - dc: this.modelFor('dc').dc.Name, + // we check for the old style `status` variable here + // and convert it to the new style filter=status:critical + s: convertStatus(params.s, params.status), slug: '*', + dc: this.modelFor('dc').dc.Name, }; }, setupController: function(controller, model) { diff --git a/ui-v2/app/routes/dc/services/index.js b/ui-v2/app/routes/dc/services/index.js index 743045a92bd2..0f61f0025726 100644 --- a/ui-v2/app/routes/dc/services/index.js +++ b/ui-v2/app/routes/dc/services/index.js @@ -1,5 +1,5 @@ import Route from '@ember/routing/route'; -import { get } from '@ember/object'; +import convertStatus from 'consul-ui/utils/routing/convert-status'; export default Route.extend({ queryParams: { @@ -13,23 +13,10 @@ export default Route.extend({ }, }, model: function(params) { - const repo = get(this, 'repo'); - let s = params.s; - // we check for the old style `status` variable here - // and convert it to the new style filter=status:critical - let status = params.status; - if (status) { - status = `status:${status}`; - if (s && s.indexOf(status) === -1) { - s = s - .split('\n') - .concat(status) - .join('\n') - .trim(); - } - } return { - s: s, + // we check for the old style `status` variable here + // and convert it to the new style filter=status:critical + s: convertStatus(params.s, params.status), slug: '*', dc: this.modelFor('dc').dc.Name, }; diff --git a/ui-v2/app/services/blocking.js b/ui-v2/app/services/blocking.js index 83f92b422f9e..d9e08d8871ef 100644 --- a/ui-v2/app/services/blocking.js +++ b/ui-v2/app/services/blocking.js @@ -1,7 +1,8 @@ import Service, { inject as service } from '@ember/service'; -import { get, set } from '@ember/object'; +import { get } from '@ember/object'; import { BlockingEventSource } from 'consul-ui/utils/dom/event-source'; -import LRUMap from 'npm:mnemonist/lru-map'; +import LRUMap from 'mnemonist/lru-map'; +import MultiMap from 'mnemonist/multi-map'; const restartWhenAvailable = function(client) { return function(e) { @@ -26,95 +27,92 @@ const maybeCall = function(cb, what) { return res; }); }; - return what - ? function(res) { - cb(); - return res; - } - : res => res; }; const ifNotBlocking = function(settings) { return settings.findBySlug('client').then(res => !res.blocking); }; // TODO: Expose this as a env var -const messages = new LRUMap(50); -// old cursors are never deleted -const cursors = new Map(); -// sources are 'manually' removed when closeed, +const cache = new Map(); +// sources are 'manually' removed when closed, // they are only closed when the usage counter is 0 const sources = new Map(); +const refs = new MultiMap(Set); -const makeCounter = function() { - const count = new WeakMap(); - return { - add: function(obj) { - const num = (count.get(obj) || 0) + 1; - count.set(obj, num); - return num; - }, - remove: function(obj) { - let num = count.get(obj) || 0; - if (num) { - num = num - 1; - count.set(obj, num); - } - return Math.max(num, 0); - }, - }; -}; -let counter; export default Service.extend({ + // TODO: Temporary repo list here + service: service('repository/service'), + node: service('repository/node'), + session: service('repository/session'), + client: service('client/http'), settings: service('settings'), - init: function() { - // counter = get('datastruct').counter(); - counter = makeCounter(); - }, - open: function(cb, configuration) { - const id = configuration.id; - if (!sources.has(id)) { - // TODO: if something is filtered we shouldn't reconcile things - const source = new BlockingEventSource( - (configuration, source) => { - const close = source.close.bind(source); - return cb(configuration) - .then(maybeCall(close, ifNotBlocking(get(this, 'settings')))) - .catch(restartWhenAvailable(get(this, 'client'))); - }, - { - cursor: cursors.get(id), + // TODO: Temporary finder + finder: function(src, filter) { + const temp = src.split('/'); + temp.shift(); + const slug = temp.pop(); + const model = temp.pop(); + const dc = temp.shift(); + + switch (slug) { + case '*': + switch (model) { + default: + return configuration => { + return get(this, model).findAllByDatacenter(dc, { + cursor: configuration.cursor, + filter: filter, + }); + }; } - ); - sources.set(id, source); - // keep this order do we aren't notified of any close events here - // source.close(); - const previousEvent = messages.get(id); - const open = function(e) { - if (previousEvent) { - e.target.dispatchEvent(previousEvent); + default: + switch (model) { + case 'session': + return configuration => { + return get(this, model).findByNode(slug, dc, { cursor: configuration.cursor }); + }; + default: + return configuration => { + return get(this, model).findBySlug(slug, dc, { cursor: configuration.cursor }); + }; } - }; - source.addEventListener('open', open); + } + }, + open: function(uri, ref) { + if (!sources.has(uri)) { + const cb = this.finder.apply(this, uri.split('?filter=')); + let configuration = {}; + if (cache.has(uri)) { + configuration = cache.get(uri); + } + // TODO: if something is filtered we shouldn't reconcile things + const source = new BlockingEventSource((configuration, source) => { + const close = source.close.bind(source); + return cb(configuration) + .then(maybeCall(close, ifNotBlocking(get(this, 'settings')))) + .catch(restartWhenAvailable(get(this, 'client'))); + }, configuration); source.addEventListener('close', function close(e) { const source = e.target; source.removeEventListener('close', close); - source.removeEventListener('open', open); - messages.set(id, source.getCurrentEvent()); - cursors.set(id, source.configuration.cursor); - sources.delete(id); + cache.set(uri, { + currentEvent: e.target.getCurrentEvent(), + cursor: e.target.configuration.cursor, + }); + sources.delete(uri); }); - // + sources.set(uri, source); } - const source = sources.get(id); - counter.add(source); + const source = sources.get(uri); + refs.set(source, ref); source.open(); return source; }, - close: function(source) { + close: function(source, ref) { if (source) { - const num = counter.remove(source); - if (num === 0) { + refs.remove(source, ref); + if (!refs.has(source)) { source.close(); } } diff --git a/ui-v2/app/templates/components/consul-node-list.hbs b/ui-v2/app/templates/components/consul-node-list.hbs new file mode 100644 index 000000000000..b70208f07cc5 --- /dev/null +++ b/ui-v2/app/templates/components/consul-node-list.hbs @@ -0,0 +1,24 @@ +{{yield}} +{{#yield-slot 'data'}} + {{yield}} +{{else}} + {{data-source src=(concat '/' dc '/node/*') filter=filter onchange=(queue (action (mut items) value='data') (action onchange))}} +{{/yield-slot}} +{{#if (gt items.length 0)}} +
+
+
    + {{#each items as |item|}} + {{healthchecked-resource + tagName='li' + data-test-node=item.Node + href=(href-to 'dc.nodes.show' item.Node) + name=item.Node + address=item.Address + checks=item.Checks + }} + {{/each}} +
+
+
+{{/if}} \ No newline at end of file diff --git a/ui-v2/app/templates/components/consul-service-list.hbs b/ui-v2/app/templates/components/consul-service-list.hbs new file mode 100644 index 000000000000..753d2e611269 --- /dev/null +++ b/ui-v2/app/templates/components/consul-service-list.hbs @@ -0,0 +1,40 @@ +{{yield}} +{{#yield-slot 'data'}} + {{yield}} +{{else}} + {{data-source src=(concat '/' dc '/service/*') filter=filter onchange=(queue (action (mut items) value='data') (action onchange))}} +{{/yield-slot}} +{{#if (gt items.length 0)}} + {{#tabular-collection rows=5 items=items as |item index|}} + {{#block-slot 'header'}} + Service + Type + Health ChecksThe number of health checks for the service on all nodes + Tags + {{/block-slot}} + {{#block-slot 'row'}} + + + + {{item.Name}} + + + +{{#if (eq item.Kind 'connect-proxy')}} + Proxy +{{else}} +   +{{/if}} + + + {{healthcheck-info + passing=item.ChecksPassing warning=item.ChecksWarning critical=item.ChecksCritical + passingWidth=passingWidth warningWidth=warningWidth criticalWidth=criticalWidth + }} + + + {{tag-list items=item.Tags}} + + {{/block-slot}} + {{/tabular-collection}} +{{/if}} diff --git a/ui-v2/app/templates/dc/nodes/index.hbs b/ui-v2/app/templates/dc/nodes/index.hbs index cc3f2ac59d91..03f8d2cf83b1 100644 --- a/ui-v2/app/templates/dc/nodes/index.hbs +++ b/ui-v2/app/templates/dc/nodes/index.hbs @@ -2,7 +2,7 @@ (array 'node:' 'Node == "%s"') (array 'status:' 'Checks.Status == %s') (array '' 'Node == "%s"') -)) onmessage=(action (mut items) value='data')}} +)) onchange=(action (mut items) value='data')}} {{#app-view class="node list" loading=(is-undefined items)}} {{#block-slot 'header'}}

@@ -14,27 +14,13 @@ {{phrase-editor placeholder=(if (eq terms.length 0) 'node:name status:critical search-term' '') value=(slice 0 terms.length terms) onchange=(queue (action (mut terms) value='detail.value') (action 'query' value='detail.value'))}} {{/block-slot}} {{#block-slot 'content'}} -{{#if (gt items.length 0) }} -
-
-
    - {{#each items as |item|}} - {{healthchecked-resource - tagName='li' - data-test-node=item.Node - href=(href-to 'dc.nodes.show' item.Node) - name=item.Node - address=item.Address - checks=item.Checks - }} - {{/each}} -
-
-
-{{else}} -

- There are no nodes. -

-{{/if}} + {{#consul-node-list items=items}} + {{#block-slot 'data'}}{{/block-slot}} + {{/consul-node-list}} + {{#if (lt items.length 1)}} +

+ There are no nodes. +

+ {{/if}} {{/block-slot}} {{/app-view}} \ No newline at end of file diff --git a/ui-v2/app/templates/dc/services/index.hbs b/ui-v2/app/templates/dc/services/index.hbs index 46a04ebf63a4..6ee92c90abdf 100644 --- a/ui-v2/app/templates/dc/services/index.hbs +++ b/ui-v2/app/templates/dc/services/index.hbs @@ -4,7 +4,8 @@ (array 'tags:' '"%s" IN Service.Tags') (array 'tag:' '"%s" IN Service.Tags') (array '' 'Service.Service == "%s"') -)) onmessage=(action (mut items) value='data')}} +)) onchange=(action (mut items) value='data')}} + {{#app-view class="service list" loading=(is-undefined items)}} {{#block-slot 'notification' as |status type|}} {{partial 'dc/services/notifications'}} @@ -16,43 +17,17 @@ {{/block-slot}} {{#block-slot 'toolbar'}} - {{phrase-editor placeholder=(if (eq terms.length 0) 'service:name tag:name status:critical search-term' '') value=(slice 0 terms.length terms) onchange=(queue (action (mut terms) value='detail.value') (action 'query' value='detail.value'))}} + {{phrase-editor + placeholder=(if (eq terms.length 0) 'service:name tag:name status:critical search-term' '') + value=(slice 0 terms.length terms) + onchange=(queue (action (mut terms) value='detail.value') (action 'query' value='detail.value')) + }} {{/block-slot}} {{#block-slot 'content'}} - {{#if (gt items.length 0)}} - {{#tabular-collection items=items as |item index|}} - {{#block-slot 'header'}} - Service - Type - Health ChecksThe number of health checks for the service on all nodes - Tags - {{/block-slot}} - {{#block-slot 'row'}} - - - - {{item.Name}} - - - -{{#if (eq item.Kind 'connect-proxy')}} - Proxy -{{else}} -   -{{/if}} - - - {{healthcheck-info - passing=item.ChecksPassing warning=item.ChecksWarning critical=item.ChecksCritical - passingWidth=passingWidth warningWidth=warningWidth criticalWidth=criticalWidth - }} - - - {{tag-list items=item.Tags}} - - {{/block-slot}} - {{/tabular-collection}} - {{else}} + {{#consul-service-list items=items}} + {{#block-slot 'data'}}{{/block-slot}} + {{/consul-service-list}} + {{#if (lt items.length 1)}}

There are no services.

diff --git a/ui-v2/app/utils/atob.js b/ui-v2/app/utils/atob.js index bf3960bc41a9..d930c5e31990 100644 --- a/ui-v2/app/utils/atob.js +++ b/ui-v2/app/utils/atob.js @@ -1,4 +1,4 @@ -import base64js from 'npm:base64-js'; +import base64js from 'base64-js'; export default function(str, encoding = 'utf-8') { // decode const bytes = base64js.toByteArray(str); diff --git a/ui-v2/app/utils/btoa.js b/ui-v2/app/utils/btoa.js index 47aedc876687..76a38446056a 100644 --- a/ui-v2/app/utils/btoa.js +++ b/ui-v2/app/utils/btoa.js @@ -1,4 +1,4 @@ -import base64js from 'npm:base64-js'; +import base64js from 'base64-js'; export default function(str, encoding = 'utf-8') { // encode const bytes = new TextEncoder(encoding).encode(str); diff --git a/ui-v2/app/utils/dom/event-source/blocking.js b/ui-v2/app/utils/dom/event-source/blocking.js index 3df010e8b6e5..f1a48dda4580 100644 --- a/ui-v2/app/utils/dom/event-source/blocking.js +++ b/ui-v2/app/utils/dom/event-source/blocking.js @@ -70,6 +70,7 @@ export default function(EventSource, backoff = create5xxBackoff()) { */ return class extends EventSource { constructor(source, configuration = {}) { + const { currentEvent, ...config } = configuration; super(configuration => { const { createEvent, ...superConfiguration } = configuration; return source @@ -103,11 +104,18 @@ export default function(EventSource, backoff = create5xxBackoff()) { this.previousEvent = this.currentEvent; return throttledResolve(result); }); - }, configuration); + }, config); + if (typeof currentEvent !== 'undefined') { + this.currentEvent = currentEvent; + } + // only on initialization + // if we already have an event set, possibly via config or + // via setCurrentEvent + // dispatch the event so things are populated immediately this.addEventListener('open', e => { - const prev = this.getCurrentEvent(); - if (prev) { - this.dispatchEvent(prev); + const currentEvent = e.target.getCurrentEvent(); + if (typeof currentEvent !== 'undefined') { + this.dispatchEvent(currentEvent); } }); } diff --git a/ui-v2/app/utils/routing/convert-status.js b/ui-v2/app/utils/routing/convert-status.js new file mode 100644 index 000000000000..b64c373fbf9d --- /dev/null +++ b/ui-v2/app/utils/routing/convert-status.js @@ -0,0 +1,14 @@ +export default function(search = '', status = '') { + if (status) { + status = `status:${status}`; + if (search.indexOf(status) === -1) { + return search + .split('\n') + .concat(status) + .join('\n') + .trim(); + } + } + + return search === '' ? undefined : search; +} diff --git a/ui-v2/package.json b/ui-v2/package.json index b85cf7813fa2..fad135689979 100644 --- a/ui-v2/package.json +++ b/ui-v2/package.json @@ -51,6 +51,7 @@ "chalk": "^2.4.2", "dart-sass": "^1.14.1", "ember-ajax": "^3.0.0", + "ember-auto-import": "^1.4.0", "ember-browserify": "^1.2.2", "ember-changeset-validations": "^2.1.0", "ember-cli": "~2.18.2", @@ -99,11 +100,11 @@ "jsonlint": "^1.6.3", "lint-staged": "^7.0.0", "loader.js": "^4.2.3", + "mnemonist": "^0.28.0", "node-sass": "^4.9.3", "prettier": "^1.10.2", "svgo": "^1.0.5", - "text-encoding": "^0.6.4", - "mnemonist": "^0.28.0" + "text-encoding": "^0.6.4" }, "engines": { "node": "^4.5 || 6.* || >= 7.*" diff --git a/ui-v2/tests/integration/components/consul-node-list-test.js b/ui-v2/tests/integration/components/consul-node-list-test.js new file mode 100644 index 000000000000..cbd85620d8fb --- /dev/null +++ b/ui-v2/tests/integration/components/consul-node-list-test.js @@ -0,0 +1,34 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('consul-node-list', 'Integration | Component | consul node list', { + integration: true, +}); + +test('it renders', function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`{{consul-node-list}}`); + + assert.equal( + this.$() + .text() + .trim(), + '' + ); + + // Template block usage: + this.render(hbs` + {{#consul-node-list}} + template block text + {{/consul-node-list}} + `); + + assert.equal( + this.$() + .text() + .trim(), + 'template block text' + ); +}); diff --git a/ui-v2/tests/integration/components/consul-service-list-test.js b/ui-v2/tests/integration/components/consul-service-list-test.js new file mode 100644 index 000000000000..a6622bfa1c66 --- /dev/null +++ b/ui-v2/tests/integration/components/consul-service-list-test.js @@ -0,0 +1,34 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('service-list', 'Integration | Component | service list', { + integration: true, +}); + +test('it renders', function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... }); + + this.render(hbs`{{service-list}}`); + + assert.equal( + this.$() + .text() + .trim(), + '' + ); + + // Template block usage: + this.render(hbs` + {{#service-list}} + template block text + {{/service-list}} + `); + + assert.equal( + this.$() + .text() + .trim(), + 'template block text' + ); +}); diff --git a/ui-v2/tests/unit/utils/routing/convert-status-test.js b/ui-v2/tests/unit/utils/routing/convert-status-test.js new file mode 100644 index 000000000000..a0ac6d2b5b27 --- /dev/null +++ b/ui-v2/tests/unit/utils/routing/convert-status-test.js @@ -0,0 +1,10 @@ +import routingConvertStatus from 'consul-ui/utils/routing/convert-status'; +import { module, test } from 'qunit'; + +module('Unit | Utility | routing/convert status'); + +// Replace this with your real tests. +test('it works', function(assert) { + let result = routingConvertStatus(); + assert.ok(result); +}); diff --git a/ui-v2/yarn.lock b/ui-v2/yarn.lock index aacaa6111383..01b123e04a30 100644 --- a/ui-v2/yarn.lock +++ b/ui-v2/yarn.lock @@ -27,6 +27,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.1.6": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" + integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.4" + "@babel/helpers" "^7.4.4" + "@babel/parser" "^7.4.5" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.5" + "@babel/types" "^7.4.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.2.2": version "7.3.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.3.tgz#d090d157b7c5060d05a05acaebc048bd2b037947" @@ -99,6 +119,17 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" + integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== + dependencies: + "@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-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -255,6 +286,13 @@ dependencies: "@babel/types" "^7.4.0" +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + "@babel/helper-wrap-function@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" @@ -290,6 +328,15 @@ "@babel/traverse" "^7.4.3" "@babel/types" "^7.4.0" +"@babel/helpers@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" + integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== + dependencies: + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -312,6 +359,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.3.tgz#eb3ac80f64aa101c907d4ce5406360fe75b7895b" integrity sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ== +"@babel/parser@^7.4.4", "@babel/parser@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" + integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== + "@babel/plugin-proposal-async-generator-functions@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce" @@ -681,6 +733,15 @@ "@babel/parser" "^7.4.0" "@babel/types" "^7.4.0" +"@babel/template@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" + integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.0.tgz#503ec6669387efd182c3888c4eec07bcc45d91b2" @@ -710,6 +771,21 @@ globals "^11.1.0" lodash "^4.17.10" +"@babel/traverse@^7.1.6", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" + integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== + dependencies: + "@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.5" + "@babel/types" "^7.4.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + "@babel/traverse@^7.4.0", "@babel/traverse@^7.4.3": version "7.4.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.3.tgz#1a01f078fc575d589ff30c0f71bf3c3d9ccbad84" @@ -733,6 +809,15 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" +"@babel/types@^7.1.6", "@babel/types@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" + integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" + "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.3.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.3.tgz#6c44d1cdac2a7625b624216657d5bc6c107ab436" @@ -880,6 +965,15 @@ version "10.11.3" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.11.3.tgz#c055536ac8a5e871701aa01914be5731539d01ee" +"@webassemblyjs/ast@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" + integrity sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA== + dependencies: + "@webassemblyjs/helper-module-context" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/wast-parser" "1.7.11" + "@webassemblyjs/ast@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.8.tgz#f31f480debeef957f01b623f27eabc695fa4fe8f" @@ -888,36 +982,83 @@ "@webassemblyjs/helper-wasm-bytecode" "1.7.8" "@webassemblyjs/wast-parser" "1.7.8" +"@webassemblyjs/floating-point-hex-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313" + integrity sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg== + "@webassemblyjs/floating-point-hex-parser@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.8.tgz#1b3ed0e27e384032254e9322fc646dd3e70ef1b9" +"@webassemblyjs/helper-api-error@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a" + integrity sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg== + "@webassemblyjs/helper-api-error@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.8.tgz#a2b49c11f615e736f815ec927f035dcfa690d572" +"@webassemblyjs/helper-buffer@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b" + integrity sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w== + "@webassemblyjs/helper-buffer@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.8.tgz#3fc66bfa09c1c60e824cf3d5887826fac062877d" +"@webassemblyjs/helper-code-frame@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b" + integrity sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw== + dependencies: + "@webassemblyjs/wast-printer" "1.7.11" + "@webassemblyjs/helper-code-frame@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.8.tgz#cc5a7e9522b70e7580df056dfd34020cf29645b0" dependencies: "@webassemblyjs/wast-printer" "1.7.8" +"@webassemblyjs/helper-fsm@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181" + integrity sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A== + "@webassemblyjs/helper-fsm@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.8.tgz#fe4607430af466912797c21acafd3046080182ea" +"@webassemblyjs/helper-module-context@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209" + integrity sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg== + "@webassemblyjs/helper-module-context@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.8.tgz#3c2e7ee93d14ff4768ba66fb1be42fdc9dc7160a" +"@webassemblyjs/helper-wasm-bytecode@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06" + integrity sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ== + "@webassemblyjs/helper-wasm-bytecode@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.8.tgz#89bdb78cd6dd5209ae2ed2925de78d0f0e00b6f0" +"@webassemblyjs/helper-wasm-section@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a" + integrity sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + "@webassemblyjs/helper-wasm-section@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.8.tgz#c68ef7d26a6fc12421b2e6e56f9bc810dfb33e87" @@ -927,22 +1068,55 @@ "@webassemblyjs/helper-wasm-bytecode" "1.7.8" "@webassemblyjs/wasm-gen" "1.7.8" +"@webassemblyjs/ieee754@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b" + integrity sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + "@webassemblyjs/ieee754@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.8.tgz#1f37974b13cb486a9237e73ce04cac7a2f1265ed" dependencies: "@xtuc/ieee754" "^1.2.0" +"@webassemblyjs/leb128@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63" + integrity sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw== + dependencies: + "@xtuc/long" "4.2.1" + "@webassemblyjs/leb128@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.8.tgz#1bee83426819192db2ea1a234b84c7ebc6d34c1f" dependencies: "@xtuc/long" "4.2.1" +"@webassemblyjs/utf8@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82" + integrity sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA== + "@webassemblyjs/utf8@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.8.tgz#2b489d5cf43e0aebb93d8e2d792aff9879c61f05" +"@webassemblyjs/wasm-edit@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005" + integrity sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/helper-wasm-section" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + "@webassemblyjs/wasm-opt" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + "@webassemblyjs/wast-printer" "1.7.11" + "@webassemblyjs/wasm-edit@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.8.tgz#f8bdbe7088718eca27b1c349bb7c06b8a457950c" @@ -956,6 +1130,17 @@ "@webassemblyjs/wasm-parser" "1.7.8" "@webassemblyjs/wast-printer" "1.7.8" +"@webassemblyjs/wasm-gen@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8" + integrity sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/ieee754" "1.7.11" + "@webassemblyjs/leb128" "1.7.11" + "@webassemblyjs/utf8" "1.7.11" + "@webassemblyjs/wasm-gen@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.8.tgz#7e8abf1545eae74ac6781d545c034af3cfd0c7d5" @@ -966,6 +1151,16 @@ "@webassemblyjs/leb128" "1.7.8" "@webassemblyjs/utf8" "1.7.8" +"@webassemblyjs/wasm-opt@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7" + integrity sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-buffer" "1.7.11" + "@webassemblyjs/wasm-gen" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + "@webassemblyjs/wasm-opt@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.8.tgz#7ada6e211914728fce02ff0ff9c344edc6d41f26" @@ -975,6 +1170,18 @@ "@webassemblyjs/wasm-gen" "1.7.8" "@webassemblyjs/wasm-parser" "1.7.8" +"@webassemblyjs/wasm-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a" + integrity sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-api-error" "1.7.11" + "@webassemblyjs/helper-wasm-bytecode" "1.7.11" + "@webassemblyjs/ieee754" "1.7.11" + "@webassemblyjs/leb128" "1.7.11" + "@webassemblyjs/utf8" "1.7.11" + "@webassemblyjs/wasm-parser@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.8.tgz#dac47c291fb6a3e63529aecd647592cd34afbf94" @@ -986,6 +1193,18 @@ "@webassemblyjs/leb128" "1.7.8" "@webassemblyjs/utf8" "1.7.8" +"@webassemblyjs/wast-parser@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c" + integrity sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/floating-point-hex-parser" "1.7.11" + "@webassemblyjs/helper-api-error" "1.7.11" + "@webassemblyjs/helper-code-frame" "1.7.11" + "@webassemblyjs/helper-fsm" "1.7.11" + "@xtuc/long" "4.2.1" + "@webassemblyjs/wast-parser@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.8.tgz#f8aab9a450c048c1f9537695c89faeb92fabfba5" @@ -997,6 +1216,15 @@ "@webassemblyjs/helper-fsm" "1.7.8" "@xtuc/long" "4.2.1" +"@webassemblyjs/wast-printer@1.7.11": + version "1.7.11" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813" + integrity sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/wast-parser" "1.7.11" + "@xtuc/long" "4.2.1" + "@webassemblyjs/wast-printer@1.7.8": version "1.7.8" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.8.tgz#e7e965782c1912f6a965f14a53ff43d8ad0403a5" @@ -1079,6 +1307,11 @@ after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" @@ -2110,6 +2343,11 @@ big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" @@ -2140,6 +2378,11 @@ bluebird@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" +bluebird@^3.5.3: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -2983,6 +3226,26 @@ cacache@^10.0.4: unique-filename "^1.1.0" y18n "^4.0.0" +cacache@^11.3.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" + integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== + dependencies: + bluebird "^3.5.3" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3191,7 +3454,7 @@ chokidar@^2.0.0, chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.2" -chownr@^1.0.1: +chownr@^1.0.1, chownr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" @@ -3418,6 +3681,11 @@ commander@^2.14.1, commander@^2.9.0: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" +commander@^2.19.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + commander@^2.6.0: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" @@ -4118,6 +4386,36 @@ ember-auto-import@^1.2.13: walk-sync "^0.3.2" webpack "^4.12.0" +ember-auto-import@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.4.0.tgz#9fee23cfe050e2221626ebb5ca30a91b03926064" + integrity sha512-3OK37rFEQT3e0mjl1v7L3HHd9w0dWD+JqDjTnQFRNT0uhTeD2lq8k30r3w6HYtvJ1ish57ChdfxBLgGib8MTiA== + dependencies: + "@babel/core" "^7.1.6" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.1.6" + babel-core "^6.26.3" + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-template "^6.26.0" + babylon "^6.18.0" + broccoli-debug "^0.6.4" + broccoli-plugin "^1.3.0" + debug "^3.1.0" + ember-cli-babel "^6.6.0" + enhanced-resolve "^4.0.0" + fs-extra "^6.0.1" + fs-tree-diff "^1.0.0" + handlebars "~4.0.13" + js-string-escape "^1.0.1" + lodash "^4.17.10" + mkdirp "^0.5.1" + pkg-up "^2.0.0" + resolve "^1.7.1" + rimraf "^2.6.2" + symlink-or-copy "^1.2.0" + walk-sync "^0.3.3" + webpack "~4.28" + ember-basic-dropdown@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-1.0.3.tgz#bd785c84ea2b366951e0630f173c84677ed53b6c" @@ -5731,6 +6029,11 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -5818,6 +6121,15 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + find-index@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-index/-/find-index-1.1.0.tgz#53007c79cd30040d6816d79458e8837d5c5705ef" @@ -6059,7 +6371,7 @@ fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.4, fs-tree-diff@^0.5 path-posix "^1.0.0" symlink-or-copy "^1.1.8" -fs-tree-diff@^1.0.2: +fs-tree-diff@^1.0.0, fs-tree-diff@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-1.0.2.tgz#0e2931733a85b55feb3472c0b89a20b0c03ac0de" integrity sha512-Zro2ACaPVDgVOx9+s5s5AfPlAD0kMJdbwGvTGF6KC1SjxjiGWxJvV4mUTDkFVSy3OUw2C/f1qpdjF81hGqSBAw== @@ -6270,6 +6582,18 @@ glob@^7.0.3, glob@^7.0.4, glob@^7.1.0, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-modules@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" @@ -6345,6 +6669,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +graceful-fs@^4.1.15: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -6373,6 +6702,17 @@ handlebars@^4.0.4: optionalDependencies: uglify-js "^2.6" +handlebars@~4.0.13: + version "4.0.14" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.14.tgz#88de711eb693a5b783ae06065f9b91b0dd373a71" + integrity sha512-E7tDoyAA8ilZIV3xDJgl18sX3M8xB9/fMw8+mfW4msLW8jlX97bAnWgT3pmaNXuvzIEgSBMnAHfuXsB2hdzfow== + dependencies: + async "^2.5.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" @@ -7108,6 +7448,11 @@ is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -7361,6 +7706,13 @@ json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -7600,6 +7952,15 @@ loader-utils@^1.1.0: emojis-list "^2.0.0" json5 "^0.5.0" +loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + loader.js@^4.2.3: version "4.7.0" resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.7.0.tgz#a1a52902001c83631efde9688b8ab3799325ef1f" @@ -8029,6 +8390,13 @@ lru-cache@^4.0.1, lru-cache@^4.1.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + magic-string@^0.22.4: version "0.22.5" resolved "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" @@ -8047,6 +8415,14 @@ make-dir@^1.3.0: dependencies: pify "^3.0.0" +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -8358,6 +8734,22 @@ mississippi@^2.0.0: stream-each "^1.1.0" through2 "^2.0.0" +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" @@ -9185,6 +9577,11 @@ pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -10092,6 +10489,15 @@ schema-utils@^0.4.4, schema-utils@^0.4.5: ajv "^6.1.0" ajv-keywords "^3.1.0" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -10115,7 +10521,7 @@ semver@^5.3.0, semver@^5.4.1: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" -semver@^5.5.1: +semver@^5.5.1, semver@^5.6.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== @@ -10147,6 +10553,11 @@ serialize-javascript@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" +serialize-javascript@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" + integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== + serve-static@1.13.2: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" @@ -10388,6 +10799,14 @@ source-map-support@^0.4.0, source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map-support@~0.5.10: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" @@ -10407,7 +10826,7 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, sour resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -10499,6 +10918,13 @@ ssri@^5.2.4: dependencies: safe-buffer "^5.1.1" +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + stable@~0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -10809,6 +11235,31 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" +terser-webpack-plugin@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" + integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== + dependencies: + 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.7.0" + source-map "^0.6.1" + terser "^4.0.0" + webpack-sources "^1.3.0" + worker-farm "^1.7.0" + +terser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374" + integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA== + dependencies: + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" + test-exclude@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.0.0.tgz#cdce7cece785e0e829cd5c2b27baf18bc583cfb7" @@ -11152,7 +11603,7 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -unique-filename@^1.1.0: +unique-filename@^1.1.0, unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" dependencies: @@ -11409,6 +11860,36 @@ webpack@^4.12.0: watchpack "^1.5.0" webpack-sources "^1.3.0" +webpack@~4.28: + version "4.28.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.28.4.tgz#1ddae6c89887d7efb752adf0c3cd32b9b07eacd0" + integrity sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw== + dependencies: + "@webassemblyjs/ast" "1.7.11" + "@webassemblyjs/helper-module-context" "1.7.11" + "@webassemblyjs/wasm-edit" "1.7.11" + "@webassemblyjs/wasm-parser" "1.7.11" + acorn "^5.6.2" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" + websocket-driver@>=0.5.1: version "0.7.0" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" @@ -11475,6 +11956,13 @@ worker-farm@^1.5.2: dependencies: errno "~0.1.7" +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + workerpool@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-2.3.1.tgz#6872d3a749dd820d42b8390abaac20fb14ce4c81"