ui: Read-only CRD/Centralized Config Intentions (#8659)

This commit is contained in:
John Cowen 2020-09-18 11:14:06 +01:00 committed by GitHub
parent c6fa758d6f
commit 65f2cd891b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
68 changed files with 1331 additions and 394 deletions

View File

@ -7,10 +7,14 @@
}} }}
{{else}} {{else}}
<span data-test-external-source={{externalSource}} class="consul-external-source {{externalSource}}"> <span data-test-external-source={{externalSource}} class="consul-external-source {{externalSource}}">
{{#if (eq externalSource 'aws')}} {{#if label}}
<span>Registered via {{uppercase externalSource}}</span> {{label}}
{{else}} {{else}}
<span>Registered via {{capitalize externalSource}}</span> {{#if (eq externalSource 'aws')}}
<span>Registered via {{uppercase externalSource}}</span>
{{else}}
<span>Registered via {{capitalize externalSource}}</span>
{{/if}}
{{/if}} {{/if}}
</span> </span>
{{/if}} {{/if}}

View File

@ -0,0 +1,170 @@
<div
...attributes
class="consul-intention-fieldsets"
>
<fieldset disabled={{disabled}}>
<div role="group">
<fieldset>
<h2>Source</h2>
<label data-test-source-element class="type-select{{if item.error.SourceName ' has-error'}}">
<span>Source Service</span>
<PowerSelectWithCreate
@options={{services}}
@searchField="Name"
@selected={{SourceName}}
@searchPlaceholder="Type service name"
@buildSuggestion={{action "createNewLabel" "Use a Consul Service called '{{term}}'"}}
@showCreateWhen={{action "isUnique" services}}
@onCreate={{action onchange "SourceName"}}
@onChange={{action onchange "SourceName"}} as |service|>
{{#if (eq service.Name '*') }}
* (All Services)
{{else}}
{{service.Name}}
{{/if}}
</PowerSelectWithCreate>
<em>Search for an existing service, or enter any Service name.</em>
</label>
{{#if (env 'CONSUL_NSPACES_ENABLED')}}
<label data-test-source-nspace class="type-select{{if item.error.SourceNS ' has-error'}}">
<span>Source Namespace</span>
<PowerSelectWithCreate
@options={{nspaces}}
@searchField="Name"
@selected={{SourceNS}}
@searchPlaceholder="Type namespace name"
@buildSuggestion={{action "createNewLabel" "Use a Consul Namespace called '{{term}}'"}}
@showCreateWhen={{action "isUnique" nspaces}}
@onCreate={{action onchange "SourceNS"}}
@onChange={{action onchange "SourceNS"}} as |nspace|>
{{#if (eq nspace.Name '*') }}
* (All Namespaces)
{{else}}
{{nspace.Name}}
{{/if}}
</PowerSelectWithCreate>
<em>Search for an existing namespace, or enter any Namespace name.</em>
</label>
{{/if}}
</fieldset>
<fieldset>
<h2>Destination</h2>
<label data-test-destination-element class="type-select{{if item.error.DestinationName ' has-error'}}">
<span>Destination Service</span>
<PowerSelectWithCreate
@options={{services}}
@searchField="Name"
@selected={{DestinationName}}
@searchPlaceholder="Type service name"
@buildSuggestion={{action "createNewLabel" "Use a Consul Service called '{{term}}'"}}
@showCreateWhen={{action "isUnique" services}}
@onCreate={{action onchange "DestinationName"}}
@onChange={{action onchange "DestinationName"}} as |service|>
{{#if (eq service.Name '*') }}
* (All Services)
{{else}}
{{service.Name}}
{{/if}}
</PowerSelectWithCreate>
<em>Search for an existing service, or enter any Service name.</em>
</label>
{{#if (env 'CONSUL_NSPACES_ENABLED')}}
<label data-test-destination-nspace class="type-select{{if item.error.DestinationNS ' has-error'}}">
<span>Destination Namespace</span>
<PowerSelectWithCreate
@options={{nspaces}}
@searchField="Name"
@selected={{DestinationNS}}
@searchPlaceholder="Type namespace name"
@buildSuggestion={{action "createNewLabel" "Use a future Consul Namespace called '{{term}}'"}}
@showCreateWhen={{action "isUnique" nspaces}}
@onCreate={{action onchange "DestinationNS"}}
@onChange={{action onchange "DestinationNS"}} as |nspace|>
{{#if (eq nspace.Name '*') }}
* (All Namespaces)
{{else}}
{{nspace.Name}}
{{/if}}
</PowerSelectWithCreate>
<em>For the destination, you may choose any namespace for which you have access.</em>
</label>
{{/if}}
</fieldset>
</div>
<div>
<span class="label">Should this source connect to the destination?</span>
<div role="radiogroup" class={{if item.error.Action ' has-error'}}>
{{#each
(array
(hash
intent="allow"
header="Allow"
body="The source service will be allowed to connect to the destination."
)
(hash
intent="deny"
header="Deny"
body="The source service will not be allowed to connect to the destination."
)
)
as |_action|}}
<RadioCard
class={{concat 'value-' _action.intent}}
@value={{_action.intent}}
@checked={{if (eq item.Action _action.intent) 'checked'}}
@onchange={{action onchange}}
@name="Action"
as |radio|>
<header>
{{_action.header}}
</header>
<p>
{{_action.body}}
</p>
</RadioCard>
{{/each}}
</div>
</div>
<label class="type-text{{if item.error.Description ' has-error'}}">
<span>Description (Optional)</span>
<input type="text" name="Description" value={{item.Description}} placeholder="Description (Optional)" onchange={{action onchange}} />
</label>
</fieldset>
{{#if (not item.Legacy)}}
<fieldset>
<h2>Permissions</h2>
{{#if (gt item.Permissions.length 0) }}
<div class="notice info">
<p>
Permissions are L7 attributes. If any of the following permissions match the request, the Intention will apply. Requests that fail to match any of the provided routes will do the opposite of the allow/deny action above.
</p>
<p>
<a href="{{env 'CONSUL_DOCS_URL'}}/guides/acl-migrate-tokens.html" target="_blank" rel="noopener noreferrer">documentation</a>
</p>
</div>
<ConsulIntentionPermissionList @items={{item.Permissions}} />
{{else}}
<EmptyState>
<BlockSlot @name="header">
<h3>
Add permissions via CLI
</h3>
</BlockSlot>
<BlockSlot @name="body">
<p>
Permissions intercept an Intention's traffic using L7 criteria, such as path prefixes and http headers. You can use the CLI to add permissions to this intention.
</p>
</BlockSlot>
<BlockSlot @name="actions">
<li class="docs-link">
<a href="{{env 'CONSUL_DOCS_URL'}}/commands/intention" rel="noopener noreferrer" target="_blank">Documentation</a>
</li>
<li class="learn-link">
<a href="{{env 'CONSUL_DOCS_LEARN_URL'}}/consul/getting-started/connect" rel="noopener noreferrer" target="_blank">Read the guide</a>
</li>
</BlockSlot>
</EmptyState>
{{/if}}
</fieldset>
{{/if}}
</div>

View File

@ -0,0 +1,13 @@
import Component from '@ember/component';
export default Component.extend({
tagName: '',
actions: {
createNewLabel: function(template, term) {
return template.replace(/{{term}}/g, term);
},
isUnique: function(items, term) {
return !items.findBy('Name', term);
},
},
});

View File

@ -27,129 +27,36 @@
</BlockSlot> </BlockSlot>
<BlockSlot @name="form"> <BlockSlot @name="form">
{{#let api.data as |item|}}
{{#if item.IsEditable}}
<DataSource <DataSource
@src={{concat '/' nspace '/' dc '/services'}} @src={{concat '/' nspace '/' dc '/services'}}
@onchange={{action "createServices" api.data}} @onchange={{action "createServices" item}}
/> />
{{#if (env 'CONSUL_NSPACES_ENABLED')}} {{#if (env 'CONSUL_NSPACES_ENABLED')}}
<DataSource <DataSource
@src="/*/*/namespaces" @src="/*/*/namespaces"
@onchange={{action "createNspaces" api.data}} @onchange={{action "createNspaces" item}}
/> />
{{/if}} {{/if}}
<form onsubmit={{action api.submit}}> <form onsubmit={{action api.submit}}>
<ConsulIntentionForm::Fieldsets
<fieldset disabled={{api.disabled}}> @nspaces={{nspaces}}
<div role="group"> @services={{services}}
<fieldset> @SourceName={{SourceName}}
<h2>Source</h2> @SourceNS={{SourceNS}}
<label data-test-source-element class="type-select{{if api.data.error.SourceName ' has-error'}}"> @DestinationName={{DestinationName}}
<span>Source Service</span> @DestinationNS={{DestinationNS}}
<PowerSelectWithCreate @item={{item}}
@options={{services}} @disabled={{api.disabled}}
@searchField="Name" @onchange={{api.change}}
@selected={{SourceName}} />
@searchPlaceholder="Type service name"
@buildSuggestion={{action "createNewLabel" "Use a Consul Service called '{{term}}'"}}
@showCreateWhen={{action "isUnique" services}}
@onCreate={{action api.change "SourceName"}}
@onChange={{action api.change "SourceName"}} as |service|>
{{#if (eq service.Name '*') }}
* (All Services)
{{else}}
{{service.Name}}
{{/if}}
</PowerSelectWithCreate>
<em>Search for an existing service, or enter any Service name.</em>
</label>
{{#if (env 'CONSUL_NSPACES_ENABLED')}}
<label data-test-source-nspace class="type-select{{if api.data.error.SourceNS ' has-error'}}">
<span>Source Namespace</span>
<PowerSelectWithCreate
@options={{nspaces}}
@searchField="Name"
@selected={{SourceNS}}
@searchPlaceholder="Type namespace name"
@buildSuggestion={{action "createNewLabel" "Use a Consul Namespace called '{{term}}'"}}
@showCreateWhen={{action "isUnique" nspaces}}
@onCreate={{action api.change "SourceNS"}}
@onChange={{action api.change "SourceNS"}} as |nspace|>
{{#if (eq nspace.Name '*') }}
* (All Namespaces)
{{else}}
{{nspace.Name}}
{{/if}}
</PowerSelectWithCreate>
<em>Search for an existing namespace, or enter any Namespace name.</em>
</label>
{{/if}}
</fieldset>
<fieldset>
<h2>Destination</h2>
<label data-test-destination-element class="type-select{{if api.data.error.DestinationName ' has-error'}}">
<span>Destination Service</span>
<PowerSelectWithCreate
@options={{services}}
@searchField="Name"
@selected={{DestinationName}}
@searchPlaceholder="Type service name"
@buildSuggestion={{action "createNewLabel" "Use a Consul Service called '{{term}}'"}}
@showCreateWhen={{action "isUnique" services}}
@onCreate={{action api.change "DestinationName"}}
@onChange={{action api.change "DestinationName"}} as |service|>
{{#if (eq service.Name '*') }}
* (All Services)
{{else}}
{{service.Name}}
{{/if}}
</PowerSelectWithCreate>
<em>Search for an existing service, or enter any Service name.</em>
</label>
{{#if (env 'CONSUL_NSPACES_ENABLED')}}
<label data-test-destination-nspace class="type-select{{if api.data.error.DestinationNS ' has-error'}}">
<span>Destination Namespace</span>
<PowerSelectWithCreate
@options={{nspaces}}
@searchField="Name"
@selected={{DestinationNS}}
@searchPlaceholder="Type namespace name"
@buildSuggestion={{action "createNewLabel" "Use a future Consul Namespace called '{{term}}'"}}
@showCreateWhen={{action "isUnique" nspaces}}
@onCreate={{action api.change "DestinationNS"}}
@onChange={{action api.change "DestinationNS"}} as |nspace|>
{{#if (eq nspace.Name '*') }}
* (All Namespaces)
{{else}}
{{nspace.Name}}
{{/if}}
</PowerSelectWithCreate>
<em>For the destination, you may choose any namespace for which you have access.</em>
</label>
{{/if}}
</fieldset>
</div>
<div role="radiogroup" class={{if api.data.error.Action ' has-error'}}>
{{#each (array 'allow' 'deny') as |intent|}}
<label>
<span>{{capitalize intent}}</span>
<input type="radio" name="Action" value={{intent}} checked={{if (eq api.data.Action intent) 'checked'}} onchange={{action api.change}}/>
</label>
{{/each}}
</div>
<label class="type-text{{if api.data.error.Description ' has-error'}}">
<span>Description (Optional)</span>
<input type="text" name="Description" value={{api.data.Description}} placeholder="Description (Optional)" onchange={{action api.change}} />
</label>
</fieldset>
<div> <div>
<button type="submit" disabled={{or api.data.isInvalid api.disabled}}>Save</button> <button type="submit" disabled={{or item.isInvalid api.disabled}}>Save</button>
<button type="reset" onclick={{action oncancel api.data}} disabled={{api.disabled}}>Cancel</button> <button type="reset" onclick={{action oncancel item}} disabled={{api.disabled}}>Cancel</button>
{{#if (not api.isCreate)}} {{#if (not api.isCreate)}}
{{#if (not-eq form.item.ID 'anonymous') }} {{#if (not-eq item.ID 'anonymous') }}
<ConfirmationDialog @message="Are you sure you want to delete this Intention?"> <ConfirmationDialog @message="Are you sure you want to delete this Intention?">
<BlockSlot @name="action" as |confirm|> <BlockSlot @name="action" as |confirm|>
<button data-test-delete type="button" class="type-delete" {{action confirm api.delete}} disabled={{api.disabled}}>Delete</button> <button data-test-delete type="button" class="type-delete" {{action confirm api.delete}} disabled={{api.disabled}}>Delete</button>
@ -158,11 +65,15 @@
<DeleteConfirmation @message={{message}} @execute={{execute}} @cancel={{cancel}} /> <DeleteConfirmation @message={{message}} @execute={{execute}} @cancel={{cancel}} />
</BlockSlot> </BlockSlot>
</ConfirmationDialog> </ConfirmationDialog>
{{/if}} {{/if}}
{{/if}} {{/if}}
</div> </div>
</form>
</form> {{else}}
<ConsulIntentionView
@item={{item}}
/>
{{/if}}
{{/let}}
</BlockSlot> </BlockSlot>
</DataForm> </DataForm>

View File

@ -63,12 +63,6 @@ export default Component.extend({
DestinationNS: destination, DestinationNS: destination,
}); });
}, },
createNewLabel: function(template, term) {
return template.replace(/{{term}}/g, term);
},
isUnique: function(items, term) {
return !items.findBy('Name', term);
},
change: function(e, form, item) { change: function(e, form, item) {
const target = e.target; const target = e.target;

View File

@ -6,12 +6,21 @@
<BlockSlot @name="content"> <BlockSlot @name="content">
{{#if (gt items.length 0)}} {{#if (gt items.length 0)}}
<TabularCollection class="consul-intention-list" @items={{items}} as |item index|> <TabularCollection class="consul-intention-list"
@items={{items}}
@rowHeight={{59}}
as |item index|>
<BlockSlot @name="header"> <BlockSlot @name="header">
<th>Source</th> <th class="source">Source</th>
<th>&nbsp;</th> <th class="intent">&nbsp;</th>
<th>Destination</th> <th class="destination">Destination</th>
<th>Precedence</th> <th class="permissions">
Permissions
<span>
<Tooltip>Permissions intercept an Intention's traffic using L7 criteria, such as path prefixes and http headers.</Tooltip>
</span>
</th>
<th class="meta">&nbsp;</th>
</BlockSlot> </BlockSlot>
<BlockSlot @name="row"> <BlockSlot @name="row">
<td class="source" data-test-intention={{item.ID}}> <td class="source" data-test-intention={{item.ID}}>
@ -25,9 +34,11 @@
<em class={{concat 'nspace-' (or item.SourceNS 'default')}}>{{or item.SourceNS 'default'}}</em> <em class={{concat 'nspace-' (or item.SourceNS 'default')}}>{{or item.SourceNS 'default'}}</em>
</a> </a>
</td> </td>
<td class="intent-{{item.Action}}" data-test-intention-action="{{item.Action}}"> {{#let (or item.Action "L7 rules") as |intent|}}
<strong>{{item.Action}}</strong> <td class="intent intent-{{slugify intent}}" data-test-intention-action={{intent}}>
<strong>{{capitalize intent}}</strong>
</td> </td>
{{/let}}
<td class="destination" data-test-intention-destination="{{item.DestinationName}}"> <td class="destination" data-test-intention-destination="{{item.DestinationName}}">
<span> <span>
{{#if (eq item.DestinationName '*') }} {{#if (eq item.DestinationName '*') }}
@ -39,8 +50,15 @@
<em class={{concat 'nspace-' (or item.DestinationNS 'default')}}>{{or item.DestinationNS 'default'}}</em> <em class={{concat 'nspace-' (or item.DestinationNS 'default')}}>{{or item.DestinationNS 'default'}}</em>
</span> </span>
</td> </td>
<td class="precedence"> <td class="permissions">
{{item.Precedence}} {{#if (gt item.Permissions.length 0)}}
<span>{{pluralize item.Permissions.length 'Permission'}}</span>
{{/if}}
</td>
<td class="meta">
{{#if item.IsManagedByCRD}}
<ConsulExternalSource @item={{item}} @label="Managed by CRD" />
{{/if}}
</td> </td>
</BlockSlot> </BlockSlot>
<BlockSlot @name="actions" as |index change checked|> <BlockSlot @name="actions" as |index change checked|>
@ -49,6 +67,7 @@
More More
</BlockSlot> </BlockSlot>
<BlockSlot @name="menu" as |confirm send keypressClick change|> <BlockSlot @name="menu" as |confirm send keypressClick change|>
{{#if item.IsEditable}}
<li role="none"> <li role="none">
<a role="menuitem" tabindex="-1" href={{href-to (or routeName 'dc.intentions.edit') item.ID}}>Edit</a> <a role="menuitem" tabindex="-1" href={{href-to (or routeName 'dc.intentions.edit') item.ID}}>Edit</a>
</li> </li>
@ -75,6 +94,11 @@
</div> </div>
</div> </div>
</li> </li>
{{else}}
<li role="none">
<a role="menuitem" tabindex="-1" href={{href-to (or routeName 'dc.intentions.edit') item.ID}}>View</a>
</li>
{{/if}}
</BlockSlot> </BlockSlot>
</PopoverMenu> </PopoverMenu>
</BlockSlot> </BlockSlot>

View File

@ -0,0 +1,35 @@
{{#if (gt items.length 0)}}
<div class="consul-intention-permission-list">
<ul>
{{#each items as |item|}}
<li>
<strong class={{concat 'intent-' item.Action}}>{{item.Action}}</strong>
{{#if item.Http.Path}}
<dl class="route-path">
<dt>
<Tooltip>
{{item.Http.PathType}}
</Tooltip>
</dt>
<dd>
{{item.Http.Path}}
</dd>
</dl>
{{/if}}
{{#each item.Http.Header as |item|}}
<dl class="route-header">
<dt>
<Tooltip>
Header
</Tooltip>
</dt>
<dd>
{{item.Name}} {{route-match item}}
</dd>
</dl>
{{/each}}
</li>
{{/each}}
</ul>
</div>
{{/if}}

View File

@ -0,0 +1,5 @@
import Component from '@ember/component';
export default Component.extend({
tagName: '',
});

View File

@ -0,0 +1,40 @@
<div class="consul-intention-view">
<div class="definition-table">
<dl>
<dt>Destination</dt>
<dd>
{{item.DestinationName}}{{#if (env "CONSUL_NSPACES_ENABLED")}} / {{item.DestinationNS}}{{/if}}
</dd>
<dt>Source</dt>
<dd>
{{item.SourceName}}{{#if (env "CONSUL_NSPACES_ENABLED")}} / {{item.SourceNS}}{{/if}}
</dd>
{{#if item.Action}}
<dt>Action</dt>
<dd>
{{item.Action}}
</dd>
{{/if}}
<dt>Description</dt>
<dd>
{{or item.Description 'N/A'}}
</dd>
</dl>
</div>
{{#if (gt item.Permissions.length 0) }}
<h2>Permissions</h2>
<div class="notice info">
<p>
Permissions are L7 attributes. If any of the following permissions match the request, the Intention will apply. Requests that fail to match any of the provided routes will do the opposite of the allow/deny action above.
</p>
<p>
<a href="{{env 'CONSUL_DOCS_URL'}}/guides/acl-migrate-tokens.html" target="_blank" rel="noopener noreferrer">Learn more about permissions</a>
</p>
</div>
<ConsulIntentionPermissionList @items={{item.Permissions}} @readonly={{true}} />
{{/if}}
</div>

View File

@ -0,0 +1,5 @@
import Component from '@ember/component';
export default Component.extend({
tagName: '',
});

View File

@ -1,8 +1,8 @@
<DataLoader @items={{item}} @src={{concat '/' nspace '/' dc '/' type '/' src}} @onchange={{action "setData"}} @once={{true}}> <DataLoader @items={{item}} @src={{uri nspace dc type src}} @onchange={{action "setData"}} @once={{true}}>
<BlockSlot @name="loaded"> <BlockSlot @name="loaded">
<DataWriter <DataWriter
@sink={{concat '/' nspace '/' (or data.Datacenter dc) '/' type '/'}} @sink={{uri nspace (or data.Datacenter dc) type}}
@type={{type}} @type={{type}}
@label={{label}} @label={{label}}
@ondelete={{action ondelete}} @ondelete={{action ondelete}}

View File

@ -18,14 +18,14 @@
'linkable' 'linkable'
}} }}
> >
<YieldSlot @name="header"><div>{{yield cell.item cell.index}}</div></YieldSlot> <YieldSlot @name="header"><div class="header">{{yield cell.item cell.index}}</div></YieldSlot>
<YieldSlot @name="details"><div>{{yield cell.item cell.index}}</div></YieldSlot> <YieldSlot @name="details"><div class="detail">{{yield cell.item cell.index}}</div></YieldSlot>
<YieldSlot @name="actions" <YieldSlot @name="actions"
@params={{ @params={{
block-params (component 'more-popover-menu' expanded=(if (eq checked cell.index) true false) onchange=(action "change" cell.index)) block-params (component 'more-popover-menu' expanded=(if (eq checked cell.index) true false) onchange=(action "change" cell.index))
}} }}
> >
<div> <div class="actions">
{{yield cell.item cell.index}} {{yield cell.item cell.index}}
</div> </div>
</YieldSlot> </YieldSlot>

View File

@ -0,0 +1,11 @@
<label
...attributes
class="radio-card{{if checked ' checked'}}"
>
<div>
<input type="radio" name={{name}} value={{value}} checked={{checked}} onchange={{action onchange}} />
</div>
<div>
{{yield}}
</div>
</label>

View File

@ -0,0 +1,6 @@
import Component from '@ember/component';
import Slotted from 'block-slots';
export default Component.extend(Slotted, {
tagName: '',
});

View File

@ -1,18 +1,18 @@
import { helper } from '@ember/component/helper'; import { helper } from '@ember/component/helper';
export default helper(function routeMatch([params] /*, hash*/) { export default helper(function routeMatch([item], hash) {
const keys = Object.keys(params); const keys = Object.keys(item.data || item);
switch (true) { switch (true) {
case keys.includes('Present'): case keys.includes('Present'):
return `${params.Invert ? `NOT ` : ``}present`; return `${item.Invert ? `NOT ` : ``}present`;
case keys.includes('Exact'): case keys.includes('Exact'):
return `${params.Invert ? `NOT ` : ``}exactly matching "${params.Exact}"`; return `${item.Invert ? `NOT ` : ``}exactly matching "${item.Exact}"`;
case keys.includes('Prefix'): case keys.includes('Prefix'):
return `${params.Invert ? `NOT ` : ``}prefixed by "${params.Prefix}"`; return `${item.Invert ? `NOT ` : ``}prefixed by "${item.Prefix}"`;
case keys.includes('Suffix'): case keys.includes('Suffix'):
return `${params.Invert ? `NOT ` : ``}suffixed by "${params.Suffix}"`; return `${item.Invert ? `NOT ` : ``}suffixed by "${item.Suffix}"`;
case keys.includes('Regex'): case keys.includes('Regex'):
return `${params.Invert ? `NOT ` : ``}matching the regex "${params.Regex}"`; return `${item.Invert ? `NOT ` : ``}matching the regex "${item.Regex}"`;
} }
return ''; return '';
}); });

View File

@ -0,0 +1,14 @@
import attr from 'ember-data/attr';
import Fragment from 'ember-data-model-fragments/fragment';
export default Fragment.extend({
Name: attr('string'),
Exact: attr('string'),
Prefix: attr('string'),
Suffix: attr('string'),
Regex: attr('string'),
Present: attr('boolean'),
Invert: attr('boolean'),
});

View File

@ -0,0 +1,21 @@
import attr from 'ember-data/attr';
import { computed } from '@ember/object';
import { or } from '@ember/object/computed';
import Fragment from 'ember-data-model-fragments/fragment';
import { fragmentArray, array } from 'ember-data-model-fragments/attributes';
const pathProps = ['PathPrefix', 'PathExact', 'PathRegex'];
export default Fragment.extend({
PathExact: attr('string'),
PathPrefix: attr('string'),
PathRegex: attr('string'),
Header: fragmentArray('intention-permission-http-header'),
Methods: array('string'),
Path: or(...pathProps),
PathType: computed(...pathProps, function() {
return pathProps.find(prop => typeof this[prop] === 'string');
}),
});

View File

@ -0,0 +1,9 @@
import attr from 'ember-data/attr';
import Fragment from 'ember-data-model-fragments/fragment';
import { fragment } from 'ember-data-model-fragments/attributes';
export default Fragment.extend({
Action: attr('string', { defaultValue: 'allow' }),
Http: fragment('intention-permission-http'),
});

View File

@ -1,5 +1,8 @@
import Model from 'ember-data/model'; import Model from 'ember-data/model';
import attr from 'ember-data/attr'; import attr from 'ember-data/attr';
import { computed } from '@ember/object';
import { fragmentArray } from 'ember-data-model-fragments/attributes';
export const PRIMARY_KEY = 'uid'; export const PRIMARY_KEY = 'uid';
export const SLUG_KEY = 'ID'; export const SLUG_KEY = 'ID';
@ -12,9 +15,21 @@ export default Model.extend({
DestinationName: attr('string', { defaultValue: '*' }), DestinationName: attr('string', { defaultValue: '*' }),
DestinationNS: attr('string'), DestinationNS: attr('string'),
Precedence: attr('number'), Precedence: attr('number'),
Permissions: fragmentArray('intention-permission'),
SourceType: attr('string', { defaultValue: 'consul' }), SourceType: attr('string', { defaultValue: 'consul' }),
Action: attr('string', { defaultValue: 'allow' }), Action: attr('string'),
Meta: attr(), Meta: attr(),
Legacy: attr('boolean', { defaultValue: true }),
IsManagedByCRD: computed('Meta', function() {
const meta = Object.entries(this.Meta || {}).find(
([key, value]) => key === 'external-source' && value === 'kubernetes'
);
return typeof meta !== 'undefined';
}),
IsEditable: computed('Legacy', 'IsManagedByCRD', function() {
return this.Legacy && !this.IsManagedByCRD;
}),
SyncTime: attr('number'), SyncTime: attr('number'),
Datacenter: attr('string'), Datacenter: attr('string'),
CreatedAt: attr('date'), CreatedAt: attr('date'),

View File

@ -19,7 +19,7 @@ export const routes = {
intentions: { intentions: {
_options: { path: '/intentions' }, _options: { path: '/intentions' },
edit: { edit: {
_options: { path: '/:intention' }, _options: { path: '/:intention_id' },
}, },
create: { create: {
_options: { path: '/create' }, _options: { path: '/create' },
@ -90,7 +90,7 @@ export const routes = {
intentions: { intentions: {
_options: { path: '/intentions' }, _options: { path: '/intentions' },
edit: { edit: {
_options: { path: '/:id' }, _options: { path: '/:intention_id' },
}, },
create: { create: {
_options: { path: '/create' }, _options: { path: '/create' },

View File

@ -4,15 +4,18 @@ import { hash } from 'rsvp';
export default Route.extend({ export default Route.extend({
repo: service('repository/intention'), repo: service('repository/intention'),
model: function(params, transition) { model: function({ intention_id }, transition) {
const dc = this.modelFor('dc').dc.Name; const dc = this.modelFor('dc').dc.Name;
const nspace = '*'; const nspace = '*';
return hash({ return hash({
isLoading: false,
dc: dc, dc: dc,
nspace: nspace, nspace: nspace,
item: item:
typeof params.id !== 'undefined' ? this.repo.findBySlug(params.id, dc, nspace) : undefined, typeof intention_id !== 'undefined'
? this.repo.findBySlug(intention_id, dc, nspace)
: this.repo.create({
Datacenter: dc,
}),
}); });
}, },
setupController: function(controller, model) { setupController: function(controller, model) {

View File

@ -1,7 +1,45 @@
import Serializer from './application'; import Serializer from './application';
import { inject as service } from '@ember/service';
import { PRIMARY_KEY, SLUG_KEY } from 'consul-ui/models/intention'; import { PRIMARY_KEY, SLUG_KEY } from 'consul-ui/models/intention';
export default Serializer.extend({ export default Serializer.extend({
primaryKey: PRIMARY_KEY, primaryKey: PRIMARY_KEY,
slugKey: SLUG_KEY, slugKey: SLUG_KEY,
encoder: service('encoder'),
init: function() {
this._super();
this.uri = this.encoder.uriTag();
},
ensureID: function(item) {
if (typeof item.ID !== 'string') {
item.ID = this
.uri`${item.SourceNS}:${item.SourceName}:${item.DestinationNS}:${item.DestinationName}`;
item.Legacy = false;
} else {
item.Legacy = true;
}
return item;
},
respondForQuery: function(respond, query) {
return this._super(
cb =>
respond((headers, body) => {
return cb(
headers,
body.map(item => this.ensureID(item))
);
}),
query
);
},
respondForQueryRecord: function(respond, query) {
return this._super(
cb =>
respond((headers, body) => {
body = this.ensureID(body);
return cb(headers, body);
}),
query
);
},
}); });

View File

@ -10,7 +10,10 @@ export default RepositoryService.extend({
}, },
create: function(obj) { create: function(obj) {
delete obj.Namespace; delete obj.Namespace;
return this._super(obj); return this._super({
Action: 'allow',
...obj,
});
}, },
findByService: function(slug, dc, nspace, configuration = {}) { findByService: function(slug, dc, nspace, configuration = {}) {
const query = { const query = {

View File

@ -11,6 +11,11 @@
margin-right: 4px; margin-right: 4px;
font-size: 0; font-size: 0;
} }
%increased-pill {
@extend %pill;
padding: 5px 10px;
min-width: 87px;
}
%reduced-pill { %reduced-pill {
background-color: $gray-100; background-color: $gray-100;
padding: 0 8px; padding: 0 8px;

View File

@ -7,6 +7,12 @@
mask-position: center; mask-position: center;
background-color: currentColor; background-color: currentColor;
} }
%with-glyph-icon {
font-weight: $typo-weight-normal;
background-color: $gray-100;
visibility: visible;
padding: 0 4px;
}
%as-pseudo { %as-pseudo {
display: inline-block; display: inline-block;
content: ''; content: '';

View File

@ -79,6 +79,7 @@ $info-circle-fill-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 2
$info-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10S2 17.543 2 12 6.486 2 12 2zm0 1.886c-4.486 0-8.143 3.628-8.143 8.114 0 4.486 3.657 8.143 8.143 8.143 4.486 0 8.143-3.643 8.143-8.143 0-4.5-3.657-8.129-8.143-8.129v.015zm1.429 8.128a1.555 1.555 0 0 0-.443-.985c-.286-.272-.6-.429-.986-.443h-1.429c-.385.028-.685.185-.985.443a1.456 1.456 0 0 0-.443.985h1.428V16.3c.029.386.158.714.443.986.286.285.6.443.986.443h1.429c.385 0 .685-.158.985-.443.286-.272.429-.6.443-.986H13.43V12v.014zM11 8.73a1.345 1.345 0 0 1-.4-1c0-.4.129-.743.4-1 .271-.258.6-.4 1-.4s.743.128 1 .4c.257.271.4.6.4 1s-.129.742-.4 1a1.433 1.433 0 0 1-1 .428c-.4 0-.743-.157-1-.428z" fill="%23000"/></svg>'); $info-circle-outline-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10S2 17.543 2 12 6.486 2 12 2zm0 1.886c-4.486 0-8.143 3.628-8.143 8.114 0 4.486 3.657 8.143 8.143 8.143 4.486 0 8.143-3.643 8.143-8.143 0-4.5-3.657-8.129-8.143-8.129v.015zm1.429 8.128a1.555 1.555 0 0 0-.443-.985c-.286-.272-.6-.429-.986-.443h-1.429c-.385.028-.685.185-.985.443a1.456 1.456 0 0 0-.443.985h1.428V16.3c.029.386.158.714.443.986.286.285.6.443.986.443h1.429c.385 0 .685-.158.985-.443.286-.272.429-.6.443-.986H13.43V12v.014zM11 8.73a1.345 1.345 0 0 1-.4-1c0-.4.129-.743.4-1 .271-.258.6-.4 1-.4s.743.128 1 .4c.257.271.4.6.4 1s-.129.742-.4 1a1.433 1.433 0 0 1-1 .428c-.4 0-.743-.157-1-.428z" fill="%23000"/></svg>');
$key-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M21 18v3h-2.969L17 20v-2h-2v-2h-2l-4-4 3.052-3L21 18zM10 6L8 4 5.003 5 4 8l2 2 4-4zm-4.217 7.839L1.132 9.188l1.702-6.354 6.354-1.702 4.65 4.65-1.702 6.354-6.353 1.703z" fill="%23000"/></svg>'); $key-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M21 18v3h-2.969L17 20v-2h-2v-2h-2l-4-4 3.052-3L21 18zM10 6L8 4 5.003 5 4 8l2 2 4-4zm-4.217 7.839L1.132 9.188l1.702-6.354 6.354-1.702 4.65 4.65-1.702 6.354-6.353 1.703z" fill="%23000"/></svg>');
$kubernetes-logo-color-svg: url('data:image/svg+xml;charset=UTF-8,<svg width="21" height="20" xmlns="http://www.w3.org/2000/svg"><g stroke="%23FFF" fill="none"><path d="M10.21 1.002a1.241 1.241 0 0 0-.472.12L3.29 4.201a1.225 1.225 0 0 0-.667.83l-1.591 6.922a1.215 1.215 0 0 0 .238 1.035l4.463 5.55c.234.29.59.46.964.46l7.159-.002c.375 0 .73-.168.964-.459l4.462-5.55c.234-.292.322-.673.238-1.036L17.927 5.03a1.225 1.225 0 0 0-.667-.83l-6.45-3.08a1.242 1.242 0 0 0-.598-.12z" fill="%23326CE5"/><path d="M10.275 3.357c-.213 0-.386.192-.386.429v.11c.005.136.035.24.052.367.033.27.06.492.043.7a.421.421 0 0 1-.125.2l-.01.163a4.965 4.965 0 0 0-3.22 1.548 6.47 6.47 0 0 1-.138-.099c-.07.01-.139.03-.23-.022-.172-.117-.33-.277-.52-.47-.087-.093-.15-.181-.254-.27L5.4 5.944a.46.46 0 0 0-.269-.101.372.372 0 0 0-.307.136c-.133.167-.09.422.094.57l.006.003.08.065c.11.08.21.122.32.187.231.142.422.26.574.403.06.063.07.175.078.223l.123.11a4.995 4.995 0 0 0-.787 3.483l-.162.047c-.042.055-.103.141-.166.167-.198.063-.422.086-.692.114-.126.01-.236.004-.37.03-.03.005-.07.016-.103.023l-.003.001-.006.002c-.228.055-.374.264-.327.47.047.206.27.331.498.282h.006c.003-.001.005-.003.008-.003l.1-.022c.131-.036.227-.088.346-.133.255-.092.467-.168.673-.198.086-.007.177.053.222.078l.168-.029a5.023 5.023 0 0 0 2.226 2.78l-.07.168c.025.065.053.154.034.218-.075.195-.203.4-.35.628-.07.106-.142.188-.206.309l-.05.104c-.099.212-.026.456.165.548.191.092.43-.005.532-.218h.001v-.001c.015-.03.036-.07.048-.098.055-.126.073-.233.111-.354.102-.257.159-.526.3-.694.038-.046.1-.063.166-.08l.087-.159a4.987 4.987 0 0 0 3.562.01l.083.148c.066.021.138.032.197.12.105.179.177.391.265.648.038.121.057.229.112.354.012.029.033.069.048.099.102.213.341.311.533.219.19-.092.264-.337.164-.549l-.05-.104c-.064-.12-.136-.202-.207-.307-.146-.23-.267-.419-.342-.613-.032-.1.005-.163.03-.228-.015-.017-.047-.111-.065-.156a5.023 5.023 0 0 0 2.225-2.8l.165.03c.058-.039.112-.088.216-.08.206.03.418.106.673.198.12.045.215.098.347.133.028.008.068.015.1.022l.007.002.006.001c.229.05.45-.076.498-.282.047-.206-.1-.415-.327-.47l-.112-.027c-.134-.025-.243-.019-.37-.03-.27-.027-.494-.05-.692-.113-.081-.031-.139-.128-.167-.167l-.156-.046a4.997 4.997 0 0 0-.804-3.474l.137-.123c.006-.069.001-.142.073-.218.151-.143.343-.261.574-.404.11-.064.21-.106.32-.187.025-.018.06-.047.086-.068.185-.148.227-.403.094-.57-.133-.166-.39-.182-.575-.034-.027.02-.062.048-.086.068-.104.09-.168.178-.255.27-.19.194-.348.355-.52.471-.075.044-.185.029-.235.026l-.146.104A5.059 5.059 0 0 0 10.7 5.328a9.325 9.325 0 0 1-.009-.172c-.05-.048-.11-.09-.126-.193-.017-.208.011-.43.044-.7.018-.126.047-.23.053-.367l-.001-.11c0-.237-.173-.429-.386-.429zM9.79 6.351l-.114 2.025-.009.004a.34.34 0 0 1-.54.26l-.003.002-1.66-1.177A3.976 3.976 0 0 1 9.79 6.351zm.968 0a4.01 4.01 0 0 1 2.313 1.115l-1.65 1.17-.006-.003a.34.34 0 0 1-.54-.26h-.003L10.76 6.35zm-3.896 1.87l1.516 1.357-.002.008a.34.34 0 0 1-.134.585l-.001.006-1.944.561a3.975 3.975 0 0 1 .565-2.516zm6.813.001a4.025 4.025 0 0 1 .582 2.51l-1.954-.563-.001-.008a.34.34 0 0 1-.134-.585v-.004l1.507-1.35zm-3.712 1.46h.62l.387.483-.139.602-.557.268-.56-.269-.138-.602.387-.482zm1.99 1.652a.339.339 0 0 1 .08.005l.002-.004 2.01.34a3.98 3.98 0 0 1-1.609 2.022l-.78-1.885.002-.003a.34.34 0 0 1 .296-.475zm-3.375.008a.34.34 0 0 1 .308.474l.005.007-.772 1.866a3.997 3.997 0 0 1-1.604-2.007l1.993-.339.003.005a.345.345 0 0 1 .067-.006zm1.683.817a.338.338 0 0 1 .312.179h.008l.982 1.775a3.991 3.991 0 0 1-2.57-.002l.979-1.772h.001a.34.34 0 0 1 .288-.18z" stroke-width=".25" fill="%23FFF"/></g></svg>'); $kubernetes-logo-color-svg: url('data:image/svg+xml;charset=UTF-8,<svg width="21" height="20" xmlns="http://www.w3.org/2000/svg"><g stroke="%23FFF" fill="none"><path d="M10.21 1.002a1.241 1.241 0 0 0-.472.12L3.29 4.201a1.225 1.225 0 0 0-.667.83l-1.591 6.922a1.215 1.215 0 0 0 .238 1.035l4.463 5.55c.234.29.59.46.964.46l7.159-.002c.375 0 .73-.168.964-.459l4.462-5.55c.234-.292.322-.673.238-1.036L17.927 5.03a1.225 1.225 0 0 0-.667-.83l-6.45-3.08a1.242 1.242 0 0 0-.598-.12z" fill="%23326CE5"/><path d="M10.275 3.357c-.213 0-.386.192-.386.429v.11c.005.136.035.24.052.367.033.27.06.492.043.7a.421.421 0 0 1-.125.2l-.01.163a4.965 4.965 0 0 0-3.22 1.548 6.47 6.47 0 0 1-.138-.099c-.07.01-.139.03-.23-.022-.172-.117-.33-.277-.52-.47-.087-.093-.15-.181-.254-.27L5.4 5.944a.46.46 0 0 0-.269-.101.372.372 0 0 0-.307.136c-.133.167-.09.422.094.57l.006.003.08.065c.11.08.21.122.32.187.231.142.422.26.574.403.06.063.07.175.078.223l.123.11a4.995 4.995 0 0 0-.787 3.483l-.162.047c-.042.055-.103.141-.166.167-.198.063-.422.086-.692.114-.126.01-.236.004-.37.03-.03.005-.07.016-.103.023l-.003.001-.006.002c-.228.055-.374.264-.327.47.047.206.27.331.498.282h.006c.003-.001.005-.003.008-.003l.1-.022c.131-.036.227-.088.346-.133.255-.092.467-.168.673-.198.086-.007.177.053.222.078l.168-.029a5.023 5.023 0 0 0 2.226 2.78l-.07.168c.025.065.053.154.034.218-.075.195-.203.4-.35.628-.07.106-.142.188-.206.309l-.05.104c-.099.212-.026.456.165.548.191.092.43-.005.532-.218h.001v-.001c.015-.03.036-.07.048-.098.055-.126.073-.233.111-.354.102-.257.159-.526.3-.694.038-.046.1-.063.166-.08l.087-.159a4.987 4.987 0 0 0 3.562.01l.083.148c.066.021.138.032.197.12.105.179.177.391.265.648.038.121.057.229.112.354.012.029.033.069.048.099.102.213.341.311.533.219.19-.092.264-.337.164-.549l-.05-.104c-.064-.12-.136-.202-.207-.307-.146-.23-.267-.419-.342-.613-.032-.1.005-.163.03-.228-.015-.017-.047-.111-.065-.156a5.023 5.023 0 0 0 2.225-2.8l.165.03c.058-.039.112-.088.216-.08.206.03.418.106.673.198.12.045.215.098.347.133.028.008.068.015.1.022l.007.002.006.001c.229.05.45-.076.498-.282.047-.206-.1-.415-.327-.47l-.112-.027c-.134-.025-.243-.019-.37-.03-.27-.027-.494-.05-.692-.113-.081-.031-.139-.128-.167-.167l-.156-.046a4.997 4.997 0 0 0-.804-3.474l.137-.123c.006-.069.001-.142.073-.218.151-.143.343-.261.574-.404.11-.064.21-.106.32-.187.025-.018.06-.047.086-.068.185-.148.227-.403.094-.57-.133-.166-.39-.182-.575-.034-.027.02-.062.048-.086.068-.104.09-.168.178-.255.27-.19.194-.348.355-.52.471-.075.044-.185.029-.235.026l-.146.104A5.059 5.059 0 0 0 10.7 5.328a9.325 9.325 0 0 1-.009-.172c-.05-.048-.11-.09-.126-.193-.017-.208.011-.43.044-.7.018-.126.047-.23.053-.367l-.001-.11c0-.237-.173-.429-.386-.429zM9.79 6.351l-.114 2.025-.009.004a.34.34 0 0 1-.54.26l-.003.002-1.66-1.177A3.976 3.976 0 0 1 9.79 6.351zm.968 0a4.01 4.01 0 0 1 2.313 1.115l-1.65 1.17-.006-.003a.34.34 0 0 1-.54-.26h-.003L10.76 6.35zm-3.896 1.87l1.516 1.357-.002.008a.34.34 0 0 1-.134.585l-.001.006-1.944.561a3.975 3.975 0 0 1 .565-2.516zm6.813.001a4.025 4.025 0 0 1 .582 2.51l-1.954-.563-.001-.008a.34.34 0 0 1-.134-.585v-.004l1.507-1.35zm-3.712 1.46h.62l.387.483-.139.602-.557.268-.56-.269-.138-.602.387-.482zm1.99 1.652a.339.339 0 0 1 .08.005l.002-.004 2.01.34a3.98 3.98 0 0 1-1.609 2.022l-.78-1.885.002-.003a.34.34 0 0 1 .296-.475zm-3.375.008a.34.34 0 0 1 .308.474l.005.007-.772 1.866a3.997 3.997 0 0 1-1.604-2.007l1.993-.339.003.005a.345.345 0 0 1 .067-.006zm1.683.817a.338.338 0 0 1 .312.179h.008l.982 1.775a3.991 3.991 0 0 1-2.57-.002l.979-1.772h.001a.34.34 0 0 1 .288-.18z" stroke-width=".25" fill="%23FFF"/></g></svg>');
$layers-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.14 20.131l-.12.035a2.501 2.501 0 01-.613.077h-.119l-.107-.009a2.095 2.095 0 01-.383-.065l-.074-.011-.196-.07c-.13-.052-4.6-2-8.009-3.49-1.614.838-2.88 1.495-3.07 1.596a.507.507 0 00-.223.177.394.394 0 00-.052.308l.001.013c.012.05.035.095.065.139.007.01.007.021.016.032l.008.008c.022.025.05.046.08.068.029.024.058.049.093.067l.009.006c.153.071 11.554 5.047 11.711 5.11.012.006.025.005.037.009a.61.61 0 00.16.034.672.672 0 00.216-.02l.028-.01c.038-.012.075-.018.11-.037L23.89 18.3c.018-.008.027-.022.043-.032a.542.542 0 00.15-.137c.01-.014.024-.022.032-.037.007-.013.006-.027.013-.04a.446.446 0 00.035-.181.417.417 0 00-.051-.178c-.007-.014-.007-.027-.016-.04-.01-.014-.024-.022-.035-.034a.557.557 0 00-.074-.072.58.58 0 00-.088-.055c-.017-.01-.028-.022-.044-.03l-2.975-1.297-7.353 3.813c-.13.076-.292.125-.386.151z" fill="%23000"/><path fill-rule="evenodd" clip-rule="evenodd" d="M13.146 14.415l-.114.033c-.201.053-.418.08-.637.08h-.088l-.127-.01a2.145 2.145 0 01-.41-.071l-.068-.012-.174-.061c-.14-.057-4.603-2.003-8.009-3.49C1.905 11.722.64 12.38.45 12.48a.507.507 0 00-.223.177.397.397 0 00-.052.309l.001.012c.012.05.035.095.065.139.007.01.007.021.016.032l.008.008c.022.025.05.046.08.068.029.024.058.05.093.068.003 0 .006.004.009.005.153.071 11.554 5.048 11.711 5.111.012.005.025.004.037.008a.61.61 0 00.16.034c.014.002.028.001.04.001a.65.65 0 00.204-.031c.038-.012.075-.017.11-.037l11.182-5.797c.018-.01.027-.023.043-.032a.482.482 0 00.15-.138c.01-.014.024-.022.032-.036.007-.013.006-.027.013-.041a.435.435 0 00.035-.18.373.373 0 00-.015-.088.405.405 0 00-.036-.09c-.007-.014-.007-.028-.016-.04-.01-.014-.024-.023-.035-.035a.515.515 0 00-.162-.128c-.017-.008-.027-.02-.044-.029l-2.974-1.298-7.354 3.814c-.137.076-.291.124-.381.149z" fill="%23000"/><path fill-rule="evenodd" clip-rule="evenodd" d="M12.198.22c-.021-.01-.043-.01-.064-.017a.541.541 0 00-.222-.036.529.529 0 00-.218.048c-.012.006-.027.005-.04.012C11.506.304 1.03 6.07.448 6.397a.52.52 0 00-.222.187.444.444 0 00-.052.328l.001.013c.012.053.035.1.065.148.007.01.007.023.016.034l.008.008c.022.028.05.049.08.073.029.025.058.052.093.07a.023.023 0 00.009.007c.153.076 11.554 5.359 11.711 5.427.012.005.025.005.037.009a.575.575 0 00.2.037c.06 0 .118-.007.177-.023l.027-.01c.038-.012.075-.018.11-.039L23.89 6.51c.018-.01.027-.025.043-.035a.549.549 0 00.15-.146c.01-.014.024-.023.032-.039.007-.013.006-.028.013-.042a.524.524 0 00.035-.193.411.411 0 00-.015-.091.444.444 0 00-.036-.098c-.007-.014-.007-.028-.016-.041-.01-.015-.024-.024-.035-.037a.56.56 0 00-.162-.136c-.017-.01-.027-.023-.044-.03L12.198.221z" fill="%23000"/></svg>');
$learn-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12.409 5.273l8.915 3.958c.46.204.676.681.676 1.108 0 .427-.216.904-.676 1.108l-3.111 1.381v3.767c0 .145-.05.279-.134.385-.157.35-.434.633-.743.858-.377.274-.855.502-1.39.684-1.073.365-2.462.578-3.963.578-1.5 0-2.89-.213-3.962-.578-.536-.182-1.014-.41-1.39-.684-.31-.225-.586-.509-.744-.858a.618.618 0 0 1-.133-.385v-2.824l.029-.945L5.5 12.5c-.38.525-.897 1.436-1.023 2.536a1.122 1.122 0 0 1 .007 1.912 3.343 3.343 0 0 1-.039.813h.028c0 .004.003.028.016.074.015.052.04.119.077.196.074.156.186.333.327.497.3.35.628.533.9.533L5.014 20c-.346 0-.726-.252-1.14-.756-.583.504-1.04.756-1.374.756l-.404-.987c.37 0 .703-.266.938-.812.112-.26.181-.546.207-.806.02-.165.014-.332-.017-.496a1.121 1.121 0 0 1 .329-1.976c.134-1.173.522-2.041.942-2.668l-1.819-.808C2.216 11.243 2 10.766 2 10.34c0-.427.216-.904.676-1.108l8.915-3.958c.262-.116.556-.116.818 0v-.001zm-.432 3.745l-5.52 2.749L12 14.227l8.758-3.888L12 6.45l-8.758 3.89 2.11.937L11 8.5l.977.518zm4.994 4.362l-4.562 2.025a1.003 1.003 0 0 1-.818 0L7.01 13.371l-.013.429v2.6a.531.531 0 0 1 .008.027c.022.079.107.224.358.407.244.178.6.356 1.059.512.917.313 2.167.512 3.562.512s2.645-.2 3.563-.512c.46-.156.814-.334 1.058-.512.251-.183.336-.328.358-.407a.61.61 0 0 1 .009-.027v-3.02h-.001zM17 2.5V1h6v6h-1.5V3.429L18.25 6.75 17 6l3.5-3.5H17z" fill="%23000"/></svg>'); $learn-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12.409 5.273l8.915 3.958c.46.204.676.681.676 1.108 0 .427-.216.904-.676 1.108l-3.111 1.381v3.767c0 .145-.05.279-.134.385-.157.35-.434.633-.743.858-.377.274-.855.502-1.39.684-1.073.365-2.462.578-3.963.578-1.5 0-2.89-.213-3.962-.578-.536-.182-1.014-.41-1.39-.684-.31-.225-.586-.509-.744-.858a.618.618 0 0 1-.133-.385v-2.824l.029-.945L5.5 12.5c-.38.525-.897 1.436-1.023 2.536a1.122 1.122 0 0 1 .007 1.912 3.343 3.343 0 0 1-.039.813h.028c0 .004.003.028.016.074.015.052.04.119.077.196.074.156.186.333.327.497.3.35.628.533.9.533L5.014 20c-.346 0-.726-.252-1.14-.756-.583.504-1.04.756-1.374.756l-.404-.987c.37 0 .703-.266.938-.812.112-.26.181-.546.207-.806.02-.165.014-.332-.017-.496a1.121 1.121 0 0 1 .329-1.976c.134-1.173.522-2.041.942-2.668l-1.819-.808C2.216 11.243 2 10.766 2 10.34c0-.427.216-.904.676-1.108l8.915-3.958c.262-.116.556-.116.818 0v-.001zm-.432 3.745l-5.52 2.749L12 14.227l8.758-3.888L12 6.45l-8.758 3.89 2.11.937L11 8.5l.977.518zm4.994 4.362l-4.562 2.025a1.003 1.003 0 0 1-.818 0L7.01 13.371l-.013.429v2.6a.531.531 0 0 1 .008.027c.022.079.107.224.358.407.244.178.6.356 1.059.512.917.313 2.167.512 3.562.512s2.645-.2 3.563-.512c.46-.156.814-.334 1.058-.512.251-.183.336-.328.358-.407a.61.61 0 0 1 .009-.027v-3.02h-.001zM17 2.5V1h6v6h-1.5V3.429L18.25 6.75 17 6l3.5-3.5H17z" fill="%23000"/></svg>');
$link-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M20.073 10.015l-2.294 2.294a3.063 3.063 0 0 1-2.25.926c-.897 0-1.661-.323-2.294-.97l-.97.97c.647.633.97 1.401.97 2.305 0 .883-.305 1.63-.915 2.24l-2.272 2.282c-.61.625-1.36.938-2.25.938-.883 0-1.629-.305-2.24-.915l-1.62-1.61C3.312 17.863 3 17.117 3 16.234c0-.882.309-1.632.926-2.25l2.295-2.294a3.063 3.063 0 0 1 2.25-.926c.897 0 1.661.323 2.294.97l.97-.97a3.102 3.102 0 0 1-.97-2.305c0-.883.305-1.63.915-2.24l2.272-2.282c.61-.626 1.36-.938 2.25-.938.883 0 1.629.305 2.24.915l1.62 1.61c.625.611.938 1.357.938 2.24 0 .882-.309 1.632-.927 2.25zm-9.436 4.83l-.204.21a6.67 6.67 0 0 1-.237.238c-.044.04-.113.096-.209.166a.886.886 0 0 1-.583.182c-.294 0-.543-.103-.749-.31a1.025 1.025 0 0 1-.308-.75.89.89 0 0 1 .182-.586c.07-.096.124-.166.165-.21.04-.045.119-.124.236-.238l.21-.205A1.062 1.062 0 0 0 8.346 13c-.301 0-.55.1-.749.298l-2.29 2.299a1.025 1.025 0 0 0-.308.751c0 .287.103.534.308.74l1.619 1.614c.212.199.462.298.748.298.294 0 .543-.103.749-.31l2.268-2.287c.205-.206.308-.456.308-.751 0-.31-.121-.578-.363-.807zm8.055-7.944l-1.619-1.614A1.058 1.058 0 0 0 16.325 5c-.301 0-.55.1-.749.298l-2.268 2.288a1.025 1.025 0 0 0-.308.751c0 .31.121.578.363.807l.204-.21c.114-.118.193-.197.237-.238a2.61 2.61 0 0 1 .209-.166.885.885 0 0 1 .583-.182c.294 0 .543.103.749.31.205.206.308.456.308.75a.89.89 0 0 1-.182.586c-.07.096-.124.166-.165.21-.04.045-.119.124-.236.238l-.21.204c.22.236.485.354.793.354.294 0 .543-.103.749-.31l2.29-2.298c.205-.206.308-.456.308-.751 0-.287-.103-.534-.308-.74z" fill="%23000"/></svg>'); $link-svg: url('data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M20.073 10.015l-2.294 2.294a3.063 3.063 0 0 1-2.25.926c-.897 0-1.661-.323-2.294-.97l-.97.97c.647.633.97 1.401.97 2.305 0 .883-.305 1.63-.915 2.24l-2.272 2.282c-.61.625-1.36.938-2.25.938-.883 0-1.629-.305-2.24-.915l-1.62-1.61C3.312 17.863 3 17.117 3 16.234c0-.882.309-1.632.926-2.25l2.295-2.294a3.063 3.063 0 0 1 2.25-.926c.897 0 1.661.323 2.294.97l.97-.97a3.102 3.102 0 0 1-.97-2.305c0-.883.305-1.63.915-2.24l2.272-2.282c.61-.626 1.36-.938 2.25-.938.883 0 1.629.305 2.24.915l1.62 1.61c.625.611.938 1.357.938 2.24 0 .882-.309 1.632-.927 2.25zm-9.436 4.83l-.204.21a6.67 6.67 0 0 1-.237.238c-.044.04-.113.096-.209.166a.886.886 0 0 1-.583.182c-.294 0-.543-.103-.749-.31a1.025 1.025 0 0 1-.308-.75.89.89 0 0 1 .182-.586c.07-.096.124-.166.165-.21.04-.045.119-.124.236-.238l.21-.205A1.062 1.062 0 0 0 8.346 13c-.301 0-.55.1-.749.298l-2.29 2.299a1.025 1.025 0 0 0-.308.751c0 .287.103.534.308.74l1.619 1.614c.212.199.462.298.748.298.294 0 .543-.103.749-.31l2.268-2.287c.205-.206.308-.456.308-.751 0-.31-.121-.578-.363-.807zm8.055-7.944l-1.619-1.614A1.058 1.058 0 0 0 16.325 5c-.301 0-.55.1-.749.298l-2.268 2.288a1.025 1.025 0 0 0-.308.751c0 .31.121.578.363.807l.204-.21c.114-.118.193-.197.237-.238a2.61 2.61 0 0 1 .209-.166.885.885 0 0 1 .583-.182c.294 0 .543.103.749.31.205.206.308.456.308.75a.89.89 0 0 1-.182.586c-.07.096-.124.166-.165.21-.04.045-.119.124-.236.238l-.21.204c.22.236.485.354.793.354.294 0 .543-.103.749-.31l2.29-2.298c.205-.206.308-.456.308-.751 0-.287-.103-.534-.308-.74z" fill="%23000"/></svg>');
$loading-svg: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" class="structure-icon-loading"><style>.structure-icon-loading-base{opacity:.1}.structure-icon-loading-progress{animation:structure-icon-loading-fancy-spin 3s infinite linear;opacity:.25;stroke-dasharray:0 44;stroke-dashoffset:0;stroke-linecap:round;transform-origin:50% 50%}@keyframes structure-icon-loading-fancy-spin{0%{stroke-dasharray:0 44;stroke-dashoffset:0}25%{stroke-dasharray:33 11;stroke-dashoffset:-40}50%{stroke-dasharray:0 44;stroke-dashoffset:-110}75%{stroke-dasharray:33 11;stroke-dashoffset:-150}to{stroke-dasharray:0 44;stroke-dashoffset:-220}}@keyframes structure-icon-loading-simple-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}</style><defs><path stroke="%23000" stroke-width="3" fill="none" id="a" d="M12 5l6 3v8l-6 3-6-3V8z"/></defs><use xlink:href="%23a" class="structure-icon-loading-base"/><use xlink:href="%23a" class="structure-icon-loading-progress"/></svg>'); $loading-svg: url('data:image/svg+xml;charset=UTF-8,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" class="structure-icon-loading"><style>.structure-icon-loading-base{opacity:.1}.structure-icon-loading-progress{animation:structure-icon-loading-fancy-spin 3s infinite linear;opacity:.25;stroke-dasharray:0 44;stroke-dashoffset:0;stroke-linecap:round;transform-origin:50% 50%}@keyframes structure-icon-loading-fancy-spin{0%{stroke-dasharray:0 44;stroke-dashoffset:0}25%{stroke-dasharray:33 11;stroke-dashoffset:-40}50%{stroke-dasharray:0 44;stroke-dashoffset:-110}75%{stroke-dasharray:33 11;stroke-dashoffset:-150}to{stroke-dasharray:0 44;stroke-dashoffset:-220}}@keyframes structure-icon-loading-simple-spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}</style><defs><path stroke="%23000" stroke-width="3" fill="none" id="a" d="M12 5l6 3v8l-6 3-6-3V8z"/></defs><use xlink:href="%23a" class="structure-icon-loading-base"/><use xlink:href="%23a" class="structure-icon-loading-progress"/></svg>');

View File

@ -808,6 +808,16 @@
mask-image: $learn-svg; mask-image: $learn-svg;
} }
%with-layers-icon {
@extend %with-icon;
background-image: $layers-svg;
}
%with-layers-mask {
@extend %with-mask;
-webkit-mask-image: $layers-svg;
mask-image: $layers-svg;
}
%with-link-icon { %with-link-icon {
@extend %with-icon; @extend %with-icon;
background-image: $link-svg; background-image: $link-svg;

View File

@ -8,6 +8,7 @@
@import './components/anchors'; @import './components/anchors';
@import './components/progress'; @import './components/progress';
@import './components/buttons'; @import './components/buttons';
@import './components/list-row';
@import './components/composite-row'; @import './components/composite-row';
@import './components/secret-button'; @import './components/secret-button';
@import './components/tabs'; @import './components/tabs';
@ -38,6 +39,7 @@
@import './components/more-popover-menu'; @import './components/more-popover-menu';
@import './components/confirmation-alert'; @import './components/confirmation-alert';
@import './components/definition-table'; @import './components/definition-table';
@import './components/radio-card';
/**/ /**/
@ -47,3 +49,8 @@
@import './components/main-nav-horizontal'; @import './components/main-nav-horizontal';
@import './components/app-view'; @import './components/app-view';
@import './components/footer'; @import './components/footer';
/**/
@import './components/consul-intention-list';
@import './components/consul-intention-permission-list';
@import './components/consul-intention-fieldsets';

View File

@ -29,6 +29,7 @@
.consul-service-list li > div:first-child > dl:first-child dd { .consul-service-list li > div:first-child > dl:first-child dd {
margin-top: 1px; margin-top: 1px;
} }
.consul-intention-permission-list > ul,
.proxy-exposed-paths > ul, .proxy-exposed-paths > ul,
.proxy-upstreams > ul { .proxy-upstreams > ul {
border-top: 1px solid $gray-200; border-top: 1px solid $gray-200;

View File

@ -1,19 +1,47 @@
@import './layout'; @import './layout';
@import './skin'; @import './skin';
%composite-row {
@extend %list-row;
}
%composite-row > .header {
@extend %composite-row-header, %list-row-header;
}
%composite-row > .detail {
@extend %composite-row-detail, %list-row-detail;
}
%composite-row > .actions {
@extend %composite-row-actions;
}
%with-composite-row-intent:hover, %with-composite-row-intent:hover,
%with-composite-row-intent:focus, %with-composite-row-intent:focus,
%with-composite-row-intent:active { %with-composite-row-intent:active {
@extend %composite-row-intent; @extend %list-row-intent;
} }
%composite-row > :first-child { %list-row-header > dl:first-child {
@extend %composite-row-header; @extend %list-row-header-icon;
} }
%composite-row-header > dl:first-child {
@extend %composite-row-icon; // TODO: %defined-by-icon
// Copy Button
%composite-row .copy-button {
display: inline-flex;
} }
%composite-row > :nth-child(2) { %composite-row .copy-button button {
@extend %composite-row-detail; padding: 0 !important;
margin: 0 !important;
} }
%composite-row > :nth-child(3) { %composite-row-detail .copy-button {
@extend %composite-row-actions; margin-right: 4px;
margin-top: 2px;
}
%composite-row-header .copy-button {
margin-left: 4px;
}
/* buttons need to be displayed in order for the tooltip */
/* to track them */
%composite-row-header .copy-button button {
opacity: 0;
}
%composite-row-header:hover .copy-button button {
opacity: 1;
} }

View File

@ -6,24 +6,10 @@
grid-template-areas: grid-template-areas:
'header actions' 'header actions'
'detail actions'; 'detail actions';
padding-top: 10px;
padding-bottom: 10px;
/* whilst this isn't in the designs this makes our temporary rollover look better */
padding-left: 12px;
} }
%with-one-action-row { %with-one-action-row {
display: grid; @extend %composite-row;
grid-template-columns: 1fr auto; grid-template-columns: 1fr auto;
grid-template-rows: 50% 50%;
// only one action applies to these rows
grid-template-areas:
'header actions'
'detail actions';
padding-top: 10px;
padding-bottom: 10px;
padding-right: 12px; padding-right: 12px;
} }
%composite-row-header { %composite-row-header {
@ -34,73 +20,8 @@
grid-area: detail; grid-area: detail;
align-self: end; align-self: end;
} }
%composite-row-detail:not(:last-child) {
overflow-x: hidden;
}
%composite-row-actions { %composite-row-actions {
grid-area: actions; grid-area: actions;
justify-self: center; justify-self: center;
align-self: center; align-self: center;
} }
%composite-row-icon {
margin-right: 6px;
margin-left: -2px;
}
%composite-row-icon dt {
display: none;
}
%composite-row-icon dd::before {
font-size: 0.9em;
}
/* TODO Currently only here due to dl's in %form-row */
%composite-row dl {
margin: 0;
padding: 0;
}
%composite-row-detail,
%composite-row-detail ul,
%composite-row-detail dl,
%composite-row-header,
%composite-row-header dl {
display: inline-flex;
flex-wrap: nowrap;
}
%composite-row-header *,
%composite-row-detail * {
white-space: nowrap;
flex-wrap: nowrap;
}
%composite-row-detail dl,
%composite-row-detail > span {
margin-right: 18px;
}
%composite-row-detail dl.node dt::before {
margin-top: 3px;
}
%composite-row-detail dl dt::before {
margin-right: 4px;
margin-top: 2px;
}
// Copy Button
%composite-row .copy-button button {
padding: 0 !important;
margin: 0 !important;
}
%composite-row-detail .copy-button {
margin-right: 4px;
margin-top: 2px;
}
%composite-row-header .copy-button {
margin-left: 4px;
}
%composite-row .copy-button {
display: inline-flex;
}
/* buttons need to be displayed in order for the tooltip */
/* to track them */
%composite-row-header .copy-button button {
opacity: 0;
}
%composite-row-header:hover .copy-button button {
opacity: 1;
}

View File

@ -1,26 +1,4 @@
%composite-row { // TODO: %defined-by-icon
list-style-type: none;
border: 1px solid;
border-top-color: $transparent;
border-bottom-color: $gray-200;
border-right-color: $transparent;
border-left-color: $transparent;
}
%composite-row-intent {
border-color: $gray-200;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
border-top-color: $transparent;
cursor: pointer;
}
%composite-row-header {
color: $black;
}
%composite-row-header * {
color: inherit;
}
%composite-row-detail {
color: $gray-500;
}
%composite-row-detail .policy::before { %composite-row-detail .policy::before {
@extend %with-file-fill-mask, %as-pseudo; @extend %with-file-fill-mask, %as-pseudo;

View File

@ -0,0 +1,4 @@
@import './consul-intention-fieldsets/index';
.consul-intention-fieldsets {
@extend %consul-intention-fieldsets;
}

View File

@ -0,0 +1,2 @@
@import './skin';
@import './layout';

View File

@ -0,0 +1,22 @@
%consul-intention-fieldsets [role='radiogroup'] {
overflow: visible !important;
display: grid;
grid-gap: 12px;
grid-template-columns: repeat(auto-fill, minmax(270px, 370px));
}
%consul-intention-fieldsets .radio-card {
@extend %radio-card-with-icon;
}
%consul-intention-fieldsets .radio-card header > * {
display: inline;
}
%consul-intention-fieldsets .value-allow > :last-child::before {
@extend %with-arrow-right-color-icon, %as-pseudo;
}
%consul-intention-fieldsets .value-deny > :last-child::before {
@extend %with-deny-color-icon, %as-pseudo;
}
%consul-intention-fieldsets .radio-card header span.code::before {
@extend %with-deny-color-icon, %as-pseudo;
margin-right: 5px;
}

View File

@ -0,0 +1,2 @@
%consul-intention-fieldsets {
}

View File

@ -0,0 +1,4 @@
@import './consul-intention-list/index';
.consul-intention-list {
@extend %consul-intention-list;
}

View File

@ -0,0 +1,16 @@
@import './skin';
@import './layout';
%consul-intention-list td.source,
%consul-intention-list td.destination {
@extend %tbody-th;
}
%consul-intention-list td.intent-allow strong {
@extend %increased-pill, %pill-allow;
}
%consul-intention-list td.intent-deny strong {
@extend %increased-pill, %pill-deny;
}
%consul-intention-list td.intent-l7-rules strong {
@extend %increased-pill, %pill-l7;
}

View File

@ -0,0 +1,27 @@
%consul-intention-list td {
height: 59px;
}
%consul-intention-list tr > *:nth-child(1) {
width: calc(30% - 50px);
}
%consul-intention-list tr > *:nth-child(2) {
width: 100px;
}
%consul-intention-list tr > *:nth-child(3) {
width: calc(30% - 50px);
}
%consul-intention-list tr > *:nth-child(4) {
width: calc(40% - 220px);
}
%consul-intention-list tr > *:nth-child(5) {
width: 160px;
}
%consul-intention-list tr > *:last-child {
width: 60px;
}
@media #{$--lt-horizontal-nav} {
%consul-intention-list tr > :not(.source):not(.destination):not(.intent) {
display: none;
}
}

View File

@ -0,0 +1,3 @@
%consul-intention-list td.permissions {
color: $blue-500;
}

View File

@ -0,0 +1,4 @@
@import './consul-intention-permission-list/index';
.consul-intention-permission-list {
@extend %consul-intention-permission-list;
}

View File

@ -0,0 +1,11 @@
@import './skin';
@import './layout';
%consul-intention-permission-list > ul > li {
@extend %list-row, %list-row-detail;
}
%consul-intention-permission-list .intent-allow {
@extend %pill, %pill-allow;
}
%consul-intention-permission-list .intent-deny {
@extend %pill, %pill-deny;
}

View File

@ -0,0 +1,3 @@
%consul-intention-permission-list strong {
margin-right: 8px;
}

View File

@ -0,0 +1,9 @@
%consul-intention-permission-list dt::before {
@extend %with-glyph-icon;
}
%consul-intention-permission-list dl.route-path dt::before {
content: 'P';
}
%consul-intention-permission-list dl.route-header dt::before {
content: 'H';
}

View File

@ -104,9 +104,6 @@
display: block; display: block;
width: 33px; width: 33px;
} }
%route-card section header > *::before {
padding: 0 8px;
}
/**/ /**/
/* resolver */ /* resolver */
%resolver-card a { %resolver-card a {

View File

@ -92,8 +92,7 @@
} }
%resolver-card dt, %resolver-card dt,
%route-card section header > *::before { %route-card section header > *::before {
background-color: $gray-100; @extend %with-glyph-icon;
visibility: visible;
} }
%route-card .match-headers header *::before { %route-card .match-headers header *::before {
content: 'H'; content: 'H';

View File

@ -13,6 +13,9 @@ label span {
%main-content form { %main-content form {
@extend %form; @extend %form;
} }
%form span.label {
@extend %form-element-label;
}
%form table, %form table,
%radio-group, %radio-group,
%checkbox-group, %checkbox-group,

View File

@ -0,0 +1,4 @@
@import './list-row/index';
.list-row {
@extend %list-row;
}

View File

@ -0,0 +1,2 @@
@import './skin';
@import './layout';

View File

@ -0,0 +1,48 @@
%list-row {
padding-top: 10px;
padding-bottom: 10px;
/* whilst this isn't in the designs this makes our temporary rollover look better */
padding-left: 12px;
}
%list-row dl {
margin: 0;
padding: 0;
}
%list-row-detail,
%list-row-header {
display: flex;
flex-wrap: nowrap;
overflow-x: hidden;
}
%list-row-detail ul,
%list-row-detail dl,
%list-row-header dl {
display: inline-flex;
}
%list-row-header *,
%list-row-detail * {
white-space: nowrap;
flex-wrap: nowrap;
}
%list-row-detail dl,
%list-row-detail > span {
margin-right: 18px;
}
%list-row-detail dl.node dt::before {
margin-top: 3px;
}
%list-row-detail dl dt::before {
margin-right: 4px;
margin-top: 2px;
}
%list-row-header-icon {
margin-right: 6px;
margin-left: -2px;
}
%list-row-header dt {
display: none;
}
%list-row-header dd::before {
font-size: 0.9em;
}

View File

@ -0,0 +1,23 @@
%list-row {
list-style-type: none;
border: $decor-border-100;
border-top-color: $transparent;
border-bottom-color: $gray-200;
border-right-color: $transparent;
border-left-color: $transparent;
}
%list-row-intent {
border-color: $gray-200;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
border-top-color: $transparent;
cursor: pointer;
}
%list-row-header {
color: $black;
}
%list-row-header * {
color: inherit;
}
%list-row-detail {
color: $gray-500;
}

View File

@ -1,3 +1,30 @@
%pill-allow:before,
%pill-deny:before,
%pill-l7:before {
@extend %as-pseudo;
margin-right: 5px;
font-size: 0.9em;
}
%pill-allow {
color: $green-800;
background-color: $green-100;
}
%pill-allow::before {
@extend %with-arrow-right-color-mask;
}
%pill-deny {
color: $red-800;
background-color: $red-100;
}
%pill-deny::before {
@extend %with-deny-color-mask;
}
%pill-l7 {
@extend %frame-gray-900;
}
%pill-l7::before {
@extend %with-layers-mask;
}
td strong { td strong {
@extend %pill, %frame-gray-900; @extend %pill, %frame-gray-900;
margin-right: 3px; margin-right: 3px;

View File

@ -0,0 +1,4 @@
@import './radio-card/index';
.radio-card {
@extend %radio-card;
}

View File

@ -0,0 +1,2 @@
@import './skin';
@import './layout';

View File

@ -0,0 +1,16 @@
%radio-card {
float: none !important;
margin-right: 0 !important;
}
%radio-card {
display: flex !important;
}
%radio-card > :first-child {
padding: 10px;
display: grid;
align-items: center;
justify-items: center;
}
%radio-card > :last-child {
padding: 18px;
}

View File

@ -0,0 +1,32 @@
%radio-card {
border: $decor-border-100;
border-radius: $decor-radius-100;
border-color: $gray-200;
box-shadow: $decor-elevation-400;
color: $gray-500;
cursor: pointer;
}
%radio-card.checked {
border-color: $blue-500;
}
%radio-card > :first-child {
background-color: $gray-050;
}
%radio-card.checked > :first-child {
background-color: $blue-050;
}
%radio-card header {
margin-bottom: 0.5em;
}
%radio-card header {
color: $black;
}
%radio-card-with-icon > :last-child {
padding-left: 47px;
position: relative;
}
%radio-card-with-icon > :last-child::before {
position: absolute;
left: 14px;
font-size: 1rem;
}

View File

@ -23,72 +23,41 @@
--consul-icon: #{$consul-logo-color-svg}; --consul-icon: #{$consul-logo-color-svg};
--aws-icon: #{$aws-logo-color-svg}; --aws-icon: #{$aws-logo-color-svg};
} }
td.folder::before {
@extend %with-folder-outline-mask, %as-pseudo;
background-color: $gray-300;
margin-top: 1px;
margin-right: 5px;
}
td.destination {
@extend %tbody-th;
}
td.intent-allow strong,
td.intent-deny strong {
visibility: hidden;
}
td.intent-allow strong::before {
@extend %with-arrow-right-color-icon, %as-pseudo;
background-size: 24px;
}
td.intent-deny strong::before {
@extend %with-deny-color-icon, %as-pseudo;
}
table:not(.sessions) tbody tr {
cursor: pointer;
}
table:not(.sessions) td:first-child {
padding: 0;
}
table:not(.sessions) tbody tr:hover {
box-shadow: $decor-elevation-300;
}
table.consul-metadata-list tbody tr { table.consul-metadata-list tbody tr {
cursor: default; cursor: default;
} }
table.consul-metadata-list tbody tr:hover { table.consul-metadata-list tbody tr:hover {
box-shadow: none; box-shadow: none;
} }
/* Header Tooltips/Icon*/
th { %table th span::after {
overflow: visible; @extend %with-info-circle-outline-mask, %as-pseudo;
color: $gray-500;
margin-left: 4px;
} }
th span::after { %table tbody tr {
@extend %with-info-circle-outline-icon, %as-pseudo; cursor: pointer;
opacity: 0.6;
} }
th span { %table td:first-child {
@extend %with-tooltip; padding: 0;
margin-left: 2px;
} }
th span em { %table tbody tr:hover {
width: 250px; box-shadow: $decor-elevation-300;
font-style: normal; }
white-space: normal !important;
%table td.folder::before {
@extend %with-folder-outline-mask, %as-pseudo;
background-color: $gray-300;
margin-top: 1px;
margin-right: 5px;
} }
/**/ /**/
@media #{$--lt-wide-table} { @media #{$--lt-wide-table} {
/* hide actions on narrow screens, you can always click in do everything from there */ /* hide actions on narrow screens, you can always click in do everything from there */
tr > .actions { %table tr > .actions {
display: none; display: none;
} }
html.template-node.template-show #lock-sessions tr > :not(:first-child):not(:last-child) {
display: none;
}
html.template-node.template-show #lock-sessions td:last-child {
padding: 0;
}
.consul-intention-list tr > :nth-last-child(2) { .consul-intention-list tr > :nth-last-child(2) {
display: none; display: none;
} }

View File

@ -52,7 +52,7 @@ $ideal-content-padding: 33px;
padding-right: $ideal-viewport-padding; padding-right: $ideal-viewport-padding;
} }
} }
form > fieldset [role='group'] { fieldset [role='group'] {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: row; flex-direction: row;

View File

@ -14,6 +14,7 @@ h3 {
@extend %h3; @extend %h3;
font-size: $typo-header-300; font-size: $typo-header-300;
} }
%radio-card header,
fieldset > header, fieldset > header,
%main-nav-horizontal-action, %main-nav-horizontal-action,
%app-view-content div > dl > dt, %app-view-content div > dl > dt,

View File

@ -11,20 +11,17 @@
</BlockSlot> </BlockSlot>
<BlockSlot @name="header"> <BlockSlot @name="header">
<h1> <h1>
{{#if item.ID }} {{#if item.IsEditable}}
Edit Intention {{#if item.ID}}
Edit Intention
{{else}}
New Intention
{{/if}}
{{else}} {{else}}
New Intention View Intention
{{/if}} {{/if}}
</h1> </h1>
</BlockSlot> </BlockSlot>
<BlockSlot @name="actions">
{{#if item.ID}}
<CopyButton @value={{item.ID}} @name="UUID">
Copy UUID
</CopyButton>
{{/if}}
</BlockSlot>
<BlockSlot @name="content"> <BlockSlot @name="content">
<ConsulIntentionForm <ConsulIntentionForm
@item={{item}} @item={{item}}

View File

@ -1,4 +1,4 @@
<DataLoader @src={{concat '/' nspace '/' dc '/intentions/for-service/' slug}} as |api|> <DataLoader @src={{uri nspace dc 'intentions' 'for-service' slug}} as |api|>
<BlockSlot @name="error"> <BlockSlot @name="error">
<ErrorState @error={{api.error}} /> <ErrorState @error={{api.error}} />
</BlockSlot> </BlockSlot>

View File

@ -55,7 +55,7 @@
"@ember/optional-features": "^1.3.0", "@ember/optional-features": "^1.3.0",
"@glimmer/component": "^1.0.0", "@glimmer/component": "^1.0.0",
"@glimmer/tracking": "^1.0.0", "@glimmer/tracking": "^1.0.0",
"@hashicorp/consul-api-double": "^3.0.0", "@hashicorp/consul-api-double": "^5.0.0",
"@hashicorp/ember-cli-api-double": "^3.1.0", "@hashicorp/ember-cli-api-double": "^3.1.0",
"@xstate/fsm": "^1.4.0", "@xstate/fsm": "^1.4.0",
"babel-eslint": "^10.0.3", "babel-eslint": "^10.0.3",
@ -90,6 +90,7 @@
"ember-composable-helpers": "~4.0.0", "ember-composable-helpers": "~4.0.0",
"ember-computed-style": "^0.3.0", "ember-computed-style": "^0.3.0",
"ember-data": "~3.16.0", "ember-data": "~3.16.0",
"ember-data-model-fragments": "5.0.0-beta.0",
"ember-exam": "^4.0.0", "ember-exam": "^4.0.0",
"ember-export-application-global": "^2.0.1", "ember-export-application-global": "^2.0.1",
"ember-href-to": "^3.1.0", "ember-href-to": "^3.1.0",

View File

@ -7,6 +7,7 @@ Feature: dc / intentions / deleting: Deleting items with confirmations, success
--- ---
SourceName: name SourceName: name
ID: ee52203d-989f-4f7a-ab5a-2bef004164ca ID: ee52203d-989f-4f7a-ab5a-2bef004164ca
Meta: ~
--- ---
When I visit the intentions page for yaml When I visit the intentions page for yaml
--- ---

View File

@ -1,30 +1,44 @@
@setupApplicationTest @setupApplicationTest
Feature: dc / intentions / navigation Feature: dc / intentions / navigation
Scenario: Clicking a intention in the listing and back again Background:
Given 1 datacenter model with the value "dc-1" Given 1 datacenter model with the value "dc-1"
And 3 intention models And 3 intention models from yaml
When I visit the intentions page for yaml ---
--- - ID: 755b72bd-f5ab-4c92-90cc-bed0e7d8e9f0
dc: dc-1 Action: allow
--- Meta: ~
Then the url should be /dc-1/intentions - ID: 755b72bd-f5ab-4c92-90cc-bed0e7d8e9f1
And the title should be "Intentions - Consul" Action: deny
Then I see 3 intention models Meta: ~
When I click intention on the intentions - ID: 0755b72bd-f5ab-4c92-90cc-bed0e7d8e9f2
Then a GET request was made to "/v1/internal/ui/services?dc=dc-1&ns=*" Action: deny
And I click "[data-test-back]" Meta: ~
Then the url should be /dc-1/intentions ---
Scenario: Clicking the create button and back again Scenario: Clicking a intention in the listing and back again
Given 1 datacenter model with the value "dc-1" When I visit the intentions page for yaml
And 3 intention models ---
When I visit the intentions page for yaml dc: dc-1
--- ---
dc: dc-1 Then the url should be /dc-1/intentions
--- And the title should be "Intentions - Consul"
Then the url should be /dc-1/intentions Then I see 3 intention models
And the title should be "Intentions - Consul" Given 1 intention model from yaml
Then I see 3 intention models ---
When I click create ID: 755b72bd-f5ab-4c92-90cc-bed0e7d8e9f0
Then the url should be /dc-1/intentions/create ---
And I click "[data-test-back]" When I click intention on the intentions
Then the url should be /dc-1/intentions Then a GET request was made to "/v1/internal/ui/services?dc=dc-1&ns=*"
And I click "[data-test-back]"
Then the url should be /dc-1/intentions
Scenario: Clicking the create button and back again
When I visit the intentions page for yaml
---
dc: dc-1
---
Then the url should be /dc-1/intentions
And the title should be "Intentions - Consul"
Then I see 3 intention models
When I click create
Then the url should be /dc-1/intentions/create
And I click "[data-test-back]"
Then the url should be /dc-1/intentions

View File

@ -10,7 +10,18 @@ Feature: dc / services / show / intentions: Intentions per service
Name: service-0 Name: service-0
ID: service-0-with-id ID: service-0-with-id
--- ---
And 3 intention models And 3 intention models from yaml
---
- ID: 755b72bd-f5ab-4c92-90cc-bed0e7d8e9f0
Action: allow
Meta: ~
- ID: 755b72bd-f5ab-4c92-90cc-bed0e7d8e9f1
Action: deny
Meta: ~
- ID: 0755b72bd-f5ab-4c92-90cc-bed0e7d8e9f2
Action: deny
Meta: ~
---
When I visit the service page for yaml When I visit the service page for yaml
--- ---
dc: dc1 dc: dc1

View File

@ -36,7 +36,9 @@ module('Integration | Serializer | intention', function(hooks) {
dc: dc, dc: dc,
} }
); );
assert.deepEqual(actual, expected); assert.equal(actual[0].Namespace, expected[0].Namespace);
assert.equal(actual[0].Datacenter, expected[0].Datacenter);
assert.equal(actual[0].uid, expected[0].uid);
}); });
}); });
test('respondForQueryRecord returns the correct data for item endpoint', function(assert) { test('respondForQueryRecord returns the correct data for item endpoint', function(assert) {
@ -66,7 +68,9 @@ module('Integration | Serializer | intention', function(hooks) {
dc: dc, dc: dc,
} }
); );
assert.deepEqual(actual, expected); assert.equal(actual.Namespace, expected.Namespace);
assert.equal(actual.Datacenter, expected.Datacenter);
assert.equal(actual.uid, expected.uid);
}); });
}); });
}); });

View File

@ -20,7 +20,7 @@ test('findAllByDatacenter returns the correct data for list endpoint', function(
this.subject(), this.subject(),
function retrieveStub(stub) { function retrieveStub(stub) {
return stub(`/v1/connect/intentions?dc=${dc}`, { return stub(`/v1/connect/intentions?dc=${dc}`, {
CONSUL_INTENTION_COUNT: '100', CONSUL_INTENTION_COUNT: '1',
}); });
}, },
function performTest(service) { function performTest(service) {
@ -28,19 +28,20 @@ test('findAllByDatacenter returns the correct data for list endpoint', function(
}, },
function performAssertion(actual, expected) { function performAssertion(actual, expected) {
assert.deepEqual( assert.deepEqual(
actual, actual[0],
expected(function(payload) { expected(function(payload) {
return payload.map(item => const item = payload[0];
Object.assign({}, item, { return {
CreatedAt: new Date(item.CreatedAt), ...item,
UpdatedAt: new Date(item.UpdatedAt), CreatedAt: new Date(item.CreatedAt),
SyncTime: now, UpdatedAt: new Date(item.UpdatedAt),
Datacenter: dc, Legacy: true,
// TODO: nspace isn't required here, once we've SyncTime: now,
// refactored out our Serializer this can go Datacenter: dc,
uid: `["${nspace}","${dc}","${item.ID}"]`, // TODO: nspace isn't required here, once we've
}) // refactored out our Serializer this can go
); uid: `["${nspace}","${dc}","${item.ID}"]`,
};
}) })
); );
} }
@ -63,6 +64,7 @@ test('findBySlug returns the correct data for item endpoint', function(assert) {
expected(function(payload) { expected(function(payload) {
const item = payload; const item = payload;
return Object.assign({}, item, { return Object.assign({}, item, {
Legacy: true,
CreatedAt: new Date(item.CreatedAt), CreatedAt: new Date(item.CreatedAt),
UpdatedAt: new Date(item.UpdatedAt), UpdatedAt: new Date(item.UpdatedAt),
Datacenter: dc, Datacenter: dc,

View File

@ -18,6 +18,15 @@
invariant "^2.2.4" invariant "^2.2.4"
semver "^5.5.0" semver "^5.5.0"
"@babel/compat-data@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c"
integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==
dependencies:
browserslist "^4.12.0"
invariant "^2.2.4"
semver "^5.5.0"
"@babel/core@^7.0.0", "@babel/core@^7.1.6", "@babel/core@^7.10.2", "@babel/core@^7.2.2", "@babel/core@^7.3.4", "@babel/core@^7.7.7": "@babel/core@^7.0.0", "@babel/core@^7.1.6", "@babel/core@^7.10.2", "@babel/core@^7.2.2", "@babel/core@^7.3.4", "@babel/core@^7.7.7":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d"
@ -40,6 +49,28 @@
semver "^5.4.1" semver "^5.4.1"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/core@^7.11.0":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.5.tgz#6ad96e2f71899ea3f9b651f0a911e85205d1ff6d"
integrity sha512-fsEANVOcZHzrsV6dMVWqpSeXClq3lNbYrfFGme6DE25FQWe7pyeYpXyx9guqUnpy466JLzZ8z4uwSr2iv60V5Q==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.11.5"
"@babel/helper-module-transforms" "^7.11.0"
"@babel/helpers" "^7.10.4"
"@babel/parser" "^7.11.5"
"@babel/template" "^7.10.4"
"@babel/traverse" "^7.11.5"
"@babel/types" "^7.11.5"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
json5 "^2.1.2"
lodash "^4.17.19"
resolve "^1.3.2"
semver "^5.4.1"
source-map "^0.6.1"
"@babel/generator@^7.10.4", "@babel/generator@^7.4.0": "@babel/generator@^7.10.4", "@babel/generator@^7.4.0":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243"
@ -50,6 +81,15 @@
lodash "^4.17.13" lodash "^4.17.13"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/generator@^7.11.5":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.5.tgz#a5582773425a468e4ba269d9a1f701fbca6a7a82"
integrity sha512-9UqHWJ4IwRTy4l0o8gq2ef8ws8UPzvtMkVKjTLAiRmza9p9V6Z+OfuNd9fB1j5Q67F+dVJtPC2sZXI8NM9br4g==
dependencies:
"@babel/types" "^7.11.5"
jsesc "^2.5.1"
source-map "^0.6.1"
"@babel/helper-annotate-as-pure@^7.10.4": "@babel/helper-annotate-as-pure@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
@ -97,6 +137,18 @@
"@babel/helper-replace-supers" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.10.4" "@babel/helper-split-export-declaration" "^7.10.4"
"@babel/helper-create-class-features-plugin@^7.10.5":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d"
integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==
dependencies:
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-member-expression-to-functions" "^7.10.5"
"@babel/helper-optimise-call-expression" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/helper-replace-supers" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.10.4"
"@babel/helper-create-regexp-features-plugin@^7.10.4": "@babel/helper-create-regexp-features-plugin@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8"
@ -153,6 +205,13 @@
dependencies: dependencies:
"@babel/types" "^7.10.4" "@babel/types" "^7.10.4"
"@babel/helper-member-expression-to-functions@^7.10.5":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df"
integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==
dependencies:
"@babel/types" "^7.11.0"
"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
@ -173,6 +232,19 @@
"@babel/types" "^7.10.4" "@babel/types" "^7.10.4"
lodash "^4.17.13" lodash "^4.17.13"
"@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359"
integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==
dependencies:
"@babel/helper-module-imports" "^7.10.4"
"@babel/helper-replace-supers" "^7.10.4"
"@babel/helper-simple-access" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.11.0"
"@babel/template" "^7.10.4"
"@babel/types" "^7.11.0"
lodash "^4.17.19"
"@babel/helper-optimise-call-expression@^7.10.4": "@babel/helper-optimise-call-expression@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673"
@ -221,6 +293,13 @@
"@babel/template" "^7.10.4" "@babel/template" "^7.10.4"
"@babel/types" "^7.10.4" "@babel/types" "^7.10.4"
"@babel/helper-skip-transparent-expression-wrappers@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729"
integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==
dependencies:
"@babel/types" "^7.11.0"
"@babel/helper-split-export-declaration@^7.10.4": "@babel/helper-split-export-declaration@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1"
@ -228,6 +307,13 @@
dependencies: dependencies:
"@babel/types" "^7.10.4" "@babel/types" "^7.10.4"
"@babel/helper-split-export-declaration@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f"
integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
dependencies:
"@babel/types" "^7.11.0"
"@babel/helper-validator-identifier@^7.10.4": "@babel/helper-validator-identifier@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
@ -266,6 +352,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64"
integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==
"@babel/parser@^7.11.5":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037"
integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==
"@babel/plugin-proposal-async-generator-functions@^7.10.4": "@babel/plugin-proposal-async-generator-functions@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6"
@ -292,6 +383,15 @@
"@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-decorators" "^7.10.4" "@babel/plugin-syntax-decorators" "^7.10.4"
"@babel/plugin-proposal-decorators@^7.10.5":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4"
integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ==
dependencies:
"@babel/helper-create-class-features-plugin" "^7.10.5"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-decorators" "^7.10.4"
"@babel/plugin-proposal-dynamic-import@^7.10.4": "@babel/plugin-proposal-dynamic-import@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e"
@ -300,6 +400,14 @@
"@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-dynamic-import" "^7.8.0"
"@babel/plugin-proposal-export-namespace-from@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54"
integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
"@babel/plugin-proposal-json-strings@^7.10.4": "@babel/plugin-proposal-json-strings@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db"
@ -308,6 +416,14 @@
"@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0"
"@babel/plugin-proposal-logical-assignment-operators@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8"
integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4", "@babel/plugin-proposal-nullish-coalescing-operator@^7.4.4": "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4", "@babel/plugin-proposal-nullish-coalescing-operator@^7.4.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a"
@ -333,6 +449,15 @@
"@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
"@babel/plugin-transform-parameters" "^7.10.4" "@babel/plugin-transform-parameters" "^7.10.4"
"@babel/plugin-proposal-object-rest-spread@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af"
integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
"@babel/plugin-transform-parameters" "^7.10.4"
"@babel/plugin-proposal-optional-catch-binding@^7.10.4": "@babel/plugin-proposal-optional-catch-binding@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd"
@ -349,6 +474,15 @@
"@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-optional-chaining" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0"
"@babel/plugin-proposal-optional-chaining@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076"
integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/helper-skip-transparent-expression-wrappers" "^7.11.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"
"@babel/plugin-proposal-private-methods@^7.10.4": "@babel/plugin-proposal-private-methods@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909"
@ -393,6 +527,13 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.8.0" "@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-export-namespace-from@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-json-strings@^7.8.0": "@babel/plugin-syntax-json-strings@^7.8.0":
version "7.8.3" version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
@ -400,6 +541,13 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.8.0" "@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
version "7.8.3" version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
@ -569,6 +717,15 @@
"@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4"
babel-plugin-dynamic-import-node "^2.3.3" babel-plugin-dynamic-import-node "^2.3.3"
"@babel/plugin-transform-modules-amd@^7.10.5":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1"
integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==
dependencies:
"@babel/helper-module-transforms" "^7.10.5"
"@babel/helper-plugin-utils" "^7.10.4"
babel-plugin-dynamic-import-node "^2.3.3"
"@babel/plugin-transform-modules-commonjs@^7.10.4": "@babel/plugin-transform-modules-commonjs@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0"
@ -665,6 +822,16 @@
resolve "^1.8.1" resolve "^1.8.1"
semver "^5.5.1" semver "^5.5.1"
"@babel/plugin-transform-runtime@^7.11.0":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc"
integrity sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg==
dependencies:
"@babel/helper-module-imports" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
resolve "^1.8.1"
semver "^5.5.1"
"@babel/plugin-transform-shorthand-properties@^7.10.4": "@babel/plugin-transform-shorthand-properties@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6"
@ -679,6 +846,14 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-transform-spread@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc"
integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/helper-skip-transparent-expression-wrappers" "^7.11.0"
"@babel/plugin-transform-sticky-regex@^7.10.4": "@babel/plugin-transform-sticky-regex@^7.10.4":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d"
@ -711,6 +886,15 @@
"@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-typescript" "^7.10.4" "@babel/plugin-syntax-typescript" "^7.10.4"
"@babel/plugin-transform-typescript@^7.11.0":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz#2b4879676af37342ebb278216dd090ac67f13abb"
integrity sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==
dependencies:
"@babel/helper-create-class-features-plugin" "^7.10.5"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-typescript" "^7.10.4"
"@babel/plugin-transform-typescript@~7.4.0": "@babel/plugin-transform-typescript@~7.4.0":
version "7.4.5" version "7.4.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz#ab3351ba35307b79981993536c93ff8be050ba28" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz#ab3351ba35307b79981993536c93ff8be050ba28"
@ -760,6 +944,14 @@
core-js "^2.6.5" core-js "^2.6.5"
regenerator-runtime "^0.13.4" regenerator-runtime "^0.13.4"
"@babel/polyfill@^7.10.4":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.11.5.tgz#df550b2ec53abbc2ed599367ec59e64c7a707bb5"
integrity sha512-FunXnE0Sgpd61pKSj2OSOs1D44rKTD3pGOfGilZ6LGrrIH0QEtJlTjqOqdF8Bs98JmjfGhni2BBkTfv9KcKJ9g==
dependencies:
core-js "^2.6.5"
regenerator-runtime "^0.13.4"
"@babel/preset-env@^7.10.2": "@babel/preset-env@^7.10.2":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.4.tgz#fbf57f9a803afd97f4f32e4f798bb62e4b2bef5f" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.4.tgz#fbf57f9a803afd97f4f32e4f798bb62e4b2bef5f"
@ -830,6 +1022,80 @@
levenary "^1.1.1" levenary "^1.1.1"
semver "^5.5.0" semver "^5.5.0"
"@babel/preset-env@^7.11.0":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272"
integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==
dependencies:
"@babel/compat-data" "^7.11.0"
"@babel/helper-compilation-targets" "^7.10.4"
"@babel/helper-module-imports" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-proposal-async-generator-functions" "^7.10.4"
"@babel/plugin-proposal-class-properties" "^7.10.4"
"@babel/plugin-proposal-dynamic-import" "^7.10.4"
"@babel/plugin-proposal-export-namespace-from" "^7.10.4"
"@babel/plugin-proposal-json-strings" "^7.10.4"
"@babel/plugin-proposal-logical-assignment-operators" "^7.11.0"
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4"
"@babel/plugin-proposal-numeric-separator" "^7.10.4"
"@babel/plugin-proposal-object-rest-spread" "^7.11.0"
"@babel/plugin-proposal-optional-catch-binding" "^7.10.4"
"@babel/plugin-proposal-optional-chaining" "^7.11.0"
"@babel/plugin-proposal-private-methods" "^7.10.4"
"@babel/plugin-proposal-unicode-property-regex" "^7.10.4"
"@babel/plugin-syntax-async-generators" "^7.8.0"
"@babel/plugin-syntax-class-properties" "^7.10.4"
"@babel/plugin-syntax-dynamic-import" "^7.8.0"
"@babel/plugin-syntax-export-namespace-from" "^7.8.3"
"@babel/plugin-syntax-json-strings" "^7.8.0"
"@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"
"@babel/plugin-syntax-top-level-await" "^7.10.4"
"@babel/plugin-transform-arrow-functions" "^7.10.4"
"@babel/plugin-transform-async-to-generator" "^7.10.4"
"@babel/plugin-transform-block-scoped-functions" "^7.10.4"
"@babel/plugin-transform-block-scoping" "^7.10.4"
"@babel/plugin-transform-classes" "^7.10.4"
"@babel/plugin-transform-computed-properties" "^7.10.4"
"@babel/plugin-transform-destructuring" "^7.10.4"
"@babel/plugin-transform-dotall-regex" "^7.10.4"
"@babel/plugin-transform-duplicate-keys" "^7.10.4"
"@babel/plugin-transform-exponentiation-operator" "^7.10.4"
"@babel/plugin-transform-for-of" "^7.10.4"
"@babel/plugin-transform-function-name" "^7.10.4"
"@babel/plugin-transform-literals" "^7.10.4"
"@babel/plugin-transform-member-expression-literals" "^7.10.4"
"@babel/plugin-transform-modules-amd" "^7.10.4"
"@babel/plugin-transform-modules-commonjs" "^7.10.4"
"@babel/plugin-transform-modules-systemjs" "^7.10.4"
"@babel/plugin-transform-modules-umd" "^7.10.4"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4"
"@babel/plugin-transform-new-target" "^7.10.4"
"@babel/plugin-transform-object-super" "^7.10.4"
"@babel/plugin-transform-parameters" "^7.10.4"
"@babel/plugin-transform-property-literals" "^7.10.4"
"@babel/plugin-transform-regenerator" "^7.10.4"
"@babel/plugin-transform-reserved-words" "^7.10.4"
"@babel/plugin-transform-shorthand-properties" "^7.10.4"
"@babel/plugin-transform-spread" "^7.11.0"
"@babel/plugin-transform-sticky-regex" "^7.10.4"
"@babel/plugin-transform-template-literals" "^7.10.4"
"@babel/plugin-transform-typeof-symbol" "^7.10.4"
"@babel/plugin-transform-unicode-escapes" "^7.10.4"
"@babel/plugin-transform-unicode-regex" "^7.10.4"
"@babel/preset-modules" "^0.1.3"
"@babel/types" "^7.11.5"
browserslist "^4.12.0"
core-js-compat "^3.6.2"
invariant "^2.2.2"
levenary "^1.1.1"
semver "^5.5.0"
"@babel/preset-modules@^0.1.3": "@babel/preset-modules@^0.1.3":
version "0.1.3" version "0.1.3"
resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72"
@ -867,6 +1133,13 @@
dependencies: dependencies:
regenerator-runtime "^0.13.4" regenerator-runtime "^0.13.4"
"@babel/runtime@^7.11.0":
version "7.11.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.10.4", "@babel/template@^7.4.0": "@babel/template@^7.10.4", "@babel/template@^7.4.0":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
@ -891,6 +1164,21 @@
globals "^11.1.0" globals "^11.1.0"
lodash "^4.17.13" lodash "^4.17.13"
"@babel/traverse@^7.11.5":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3"
integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/generator" "^7.11.5"
"@babel/helper-function-name" "^7.10.4"
"@babel/helper-split-export-declaration" "^7.11.0"
"@babel/parser" "^7.11.5"
"@babel/types" "^7.11.5"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.19"
"@babel/types@^7.1.6", "@babel/types@^7.10.4", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": "@babel/types@^7.1.6", "@babel/types@^7.10.4", "@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2":
version "7.10.4" version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee"
@ -900,6 +1188,15 @@
lodash "^4.17.13" lodash "^4.17.13"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@babel/types@^7.11.0", "@babel/types@^7.11.5":
version "7.11.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d"
integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==
dependencies:
"@babel/helper-validator-identifier" "^7.10.4"
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@cnakazawa/watch@^1.0.3": "@cnakazawa/watch@^1.0.3":
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
@ -1222,15 +1519,15 @@
faker "^4.1.0" faker "^4.1.0"
js-yaml "^3.13.1" js-yaml "^3.13.1"
"@hashicorp/consul-api-double@^3.0.0": "@hashicorp/consul-api-double@^5.0.0":
version "3.1.6" version "5.0.0"
resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-3.1.6.tgz#46095438b6989a12cab382a88fdb7b227d834794" resolved "https://registry.yarnpkg.com/@hashicorp/consul-api-double/-/consul-api-double-5.0.0.tgz#099e56ded356421cdfa5e63b4a07c9a2232ffb88"
integrity sha512-mRH7X7k1zSu/Aq+rs5VoJYrIhD3pO57d+j98dicfs+3KaMO1mQYFYKgyugY/g0kY9FQH3+vySeZ0W5nQs45V1Q== integrity sha512-2+Rg4mfxTTUrJiYeRWV5mEWVZTYUK1udFNMb79ygNdC/HScDvU8sTVwPrf6GuRve6oLakk1lB/D4d6AsMmtS4w==
"@hashicorp/ember-cli-api-double@^3.1.0": "@hashicorp/ember-cli-api-double@^3.1.0":
version "3.1.0" version "3.1.1"
resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-3.1.0.tgz#ce228ac5c8a46c7a10112f5bc0fb782c47775b60" resolved "https://registry.yarnpkg.com/@hashicorp/ember-cli-api-double/-/ember-cli-api-double-3.1.1.tgz#ba16a514131ce409054d1ae1a71483941d937d37"
integrity sha512-G8dDSewInFZOeD5sprdZPw7ZKUYlkJ9bJxPkEaMRPbC6ZN4ZHqeFWB1xXeq2ROtR07J6Xbs+BrFIE6GHTshpEg== integrity sha512-VLvV/m+Sx+vG+tHK1FeVjiBXwt8KcIWqgFavglrEBTkVTA2o7uP0xN9nKOJjos49KK+h1K3fCwMK5ltz7Kt97w==
dependencies: dependencies:
"@hashicorp/api-double" "^1.6.1" "@hashicorp/api-double" "^1.6.1"
array-range "^1.0.1" array-range "^1.0.1"
@ -2298,6 +2595,13 @@ babel-plugin-ember-modules-api-polyfill@^2.13.4, babel-plugin-ember-modules-api-
dependencies: dependencies:
ember-rfc176-data "^0.3.13" ember-rfc176-data "^0.3.13"
babel-plugin-ember-modules-api-polyfill@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-3.1.1.tgz#c6e9ede43b64c4e36512f260e42e829b071d9b4f"
integrity sha512-hRTnr59fJ6cIiSiSgQLM9QRiVv/RrBAYRYggCPQDj4dvYhOWZeoX6e+1jFY1qC3tJnSDuMWu3OrDciSIi1MJ0A==
dependencies:
ember-rfc176-data "^0.3.15"
babel-plugin-filter-imports@^3.0.0: babel-plugin-filter-imports@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-3.0.0.tgz#a849683837ad29960da17492fb32789ab6b09a11" resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-3.0.0.tgz#a849683837ad29960da17492fb32789ab6b09a11"
@ -2995,6 +3299,24 @@ broccoli-babel-transpiler@^7.3.0, broccoli-babel-transpiler@^7.5.0:
rsvp "^4.8.4" rsvp "^4.8.4"
workerpool "^3.1.1" workerpool "^3.1.1"
broccoli-babel-transpiler@^7.7.0:
version "7.7.0"
resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.7.0.tgz#271d401e713bfd338d5ef0435d3c4c68f6eddd2a"
integrity sha512-U8Cmnv0/AcQKehiIVi6UDzqq3jqhAEbY9CvOW5vdeNRmYhFpK6bXPmVczS/nUz5g4KsPc/FdnC3zbU6yVf4e7w==
dependencies:
"@babel/core" "^7.11.0"
"@babel/polyfill" "^7.10.4"
broccoli-funnel "^2.0.2"
broccoli-merge-trees "^3.0.2"
broccoli-persistent-filter "^2.2.1"
clone "^2.1.2"
hash-for-dep "^1.4.7"
heimdalljs "^0.2.1"
heimdalljs-logger "^0.1.9"
json-stable-stringify "^1.0.1"
rsvp "^4.8.4"
workerpool "^3.1.1"
broccoli-builder@^0.18.14: broccoli-builder@^0.18.14:
version "0.18.14" version "0.18.14"
resolved "https://registry.yarnpkg.com/broccoli-builder/-/broccoli-builder-0.18.14.tgz#4b79e2f844de11a4e1b816c3f49c6df4776c312d" resolved "https://registry.yarnpkg.com/broccoli-builder/-/broccoli-builder-0.18.14.tgz#4b79e2f844de11a4e1b816c3f49c6df4776c312d"
@ -3807,6 +4129,13 @@ cacheable-request@^2.1.1:
normalize-url "2.0.1" normalize-url "2.0.1"
responselike "1.0.2" responselike "1.0.2"
calculate-cache-key-for-tree@^1.1.0:
version "1.2.3"
resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-1.2.3.tgz#5a5e4fcfa2d374a63e47fe967593f179e8282825"
integrity sha512-PPQorvdNw8K8k7UftCeradwOmKDSDJs8wcqYTtJPEt3fHbZyK8QsorybJA+lOmk0dgE61vX6R+5Kd3W9h4EMGg==
dependencies:
json-stable-stringify "^1.0.1"
calculate-cache-key-for-tree@^2.0.0: calculate-cache-key-for-tree@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz#7ac57f149a4188eacb0a45b210689215d3fef8d6" resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz#7ac57f149a4188eacb0a45b210689215d3fef8d6"
@ -3849,11 +4178,16 @@ can-symlink@^1.0.0:
dependencies: dependencies:
tmp "0.0.28" tmp "0.0.28"
caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001093: caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30001093:
version "1.0.30001096" version "1.0.30001096"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001096.tgz#5a4541af5317dc21f91f5b24d453030a35f919c0" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001096.tgz#5a4541af5317dc21f91f5b24d453030a35f919c0"
integrity sha512-PFTw9UyVfbkcMEFs82q8XVlRayj7HKvnhu5BLcmjGpv+SNyiWasCcWXPGJuO0rK0dhLRDJmtZcJ+LHUfypbw1w== integrity sha512-PFTw9UyVfbkcMEFs82q8XVlRayj7HKvnhu5BLcmjGpv+SNyiWasCcWXPGJuO0rK0dhLRDJmtZcJ+LHUfypbw1w==
caniuse-lite@^1.0.30000844:
version "1.0.30001125"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001125.tgz#2a1a51ee045a0a2207474b086f628c34725e997b"
integrity sha512-9f+r7BW8Qli917mU3j0fUaTweT3f3vnX/Lcs+1C73V+RADmFme+Ih0Br8vONQi3X0lseOe6ZHfsZLCA8MSjxUA==
capture-exit@^2.0.0: capture-exit@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
@ -4897,11 +5231,16 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.488: electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.488:
version "1.3.494" version "1.3.494"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.494.tgz#0d2dba65b69d696c5b71abb37552ff055fb32a5c" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.494.tgz#0d2dba65b69d696c5b71abb37552ff055fb32a5c"
integrity sha512-EOZuaDT3L1sCIMAVN5J0nGuGWVq5dThrdl0d8XeDYf4MOzbXqZ19OLKesN8TZj0RxtpYjqHpiw/fR6BKWdMwYA== integrity sha512-EOZuaDT3L1sCIMAVN5J0nGuGWVq5dThrdl0d8XeDYf4MOzbXqZ19OLKesN8TZj0RxtpYjqHpiw/fR6BKWdMwYA==
electron-to-chromium@^1.3.47:
version "1.3.565"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.565.tgz#8511797ab2b66b767e1aef4eb17d636bf01a2c72"
integrity sha512-me5dGlHFd8Q7mKhqbWRLIYnKjw4i0fO6hmW0JBxa7tM87fBfNEjWokRnDF7V+Qme/9IYpwhfMn+soWs40tXWqg==
elliptic@^6.0.0, elliptic@^6.5.2: elliptic@^6.0.0, elliptic@^6.5.2:
version "6.5.3" version "6.5.3"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
@ -5022,6 +5361,38 @@ ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0:
resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz#de3baedd093163b6c2461f95964888c1676325ac" resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz#de3baedd093163b6c2461f95964888c1676325ac"
integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA== integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA==
ember-cli-babel@7:
version "7.22.1"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.22.1.tgz#cad28b89cf0e184c93b863d09bc5ba4ce1d2e453"
integrity sha512-kCT8WbC1AYFtyOpU23ESm22a+gL6fWv8Nzwe8QFQ5u0piJzM9MEudfbjADEaoyKTrjMQTDsrWwEf3yjggDsOng==
dependencies:
"@babel/core" "^7.11.0"
"@babel/helper-compilation-targets" "^7.10.4"
"@babel/plugin-proposal-class-properties" "^7.10.4"
"@babel/plugin-proposal-decorators" "^7.10.5"
"@babel/plugin-transform-modules-amd" "^7.10.5"
"@babel/plugin-transform-runtime" "^7.11.0"
"@babel/plugin-transform-typescript" "^7.11.0"
"@babel/polyfill" "^7.10.4"
"@babel/preset-env" "^7.11.0"
"@babel/runtime" "^7.11.0"
amd-name-resolver "^1.2.1"
babel-plugin-debug-macros "^0.3.3"
babel-plugin-ember-data-packages-polyfill "^0.1.2"
babel-plugin-ember-modules-api-polyfill "^3.1.1"
babel-plugin-module-resolver "^3.1.1"
broccoli-babel-transpiler "^7.7.0"
broccoli-debug "^0.6.4"
broccoli-funnel "^2.0.1"
broccoli-source "^1.1.0"
clone "^2.1.2"
ember-cli-babel-plugin-helpers "^1.1.0"
ember-cli-version-checker "^4.1.0"
ensure-posix-path "^1.0.2"
fixturify-project "^1.10.0"
rimraf "^3.0.1"
semver "^5.5.0"
ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.0, ember-cli-babel@^6.9.2: ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.0, ember-cli-babel@^6.9.2:
version "6.18.0" version "6.18.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957"
@ -5549,7 +5920,7 @@ ember-collection@^1.0.0-alpha.9:
ember-cli-htmlbars "^3.0.1" ember-cli-htmlbars "^3.0.1"
layout-bin-packer "^1.4.0" layout-bin-packer "^1.4.0"
ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0: ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0, ember-compatibility-helpers@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.1.tgz#87c92c4303f990ff455c28ca39fb3ee11441aa16" resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.1.tgz#87c92c4303f990ff455c28ca39fb3ee11441aa16"
integrity sha512-6wzYvnhg1ihQUT5yGqnLtleq3Nv5KNv79WhrEuNU9SwR4uIxCO+KpyC7r3d5VI0EM7/Nmv9Nd0yTkzmTMdVG1A== integrity sha512-6wzYvnhg1ihQUT5yGqnLtleq3Nv5KNv79WhrEuNU9SwR4uIxCO+KpyC7r3d5VI0EM7/Nmv9Nd0yTkzmTMdVG1A==
@ -5594,13 +5965,27 @@ ember-concurrency@^1.2.1:
ember-compatibility-helpers "^1.2.0" ember-compatibility-helpers "^1.2.0"
ember-maybe-import-regenerator "^0.1.6" ember-maybe-import-regenerator "^0.1.6"
ember-copy@^1.0.0: ember-copy@1.0.0, ember-copy@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/ember-copy/-/ember-copy-1.0.0.tgz#426554ba6cf65920f31d24d0a3ca2cb1be16e4aa" resolved "https://registry.yarnpkg.com/ember-copy/-/ember-copy-1.0.0.tgz#426554ba6cf65920f31d24d0a3ca2cb1be16e4aa"
integrity sha512-aiZNAvOmdemHdvZNn0b5b/0d9g3JFpcOsrDgfhYEbfd7SzE0b69YiaVK2y3wjqfjuuiA54vOllGN4pjSzECNSw== integrity sha512-aiZNAvOmdemHdvZNn0b5b/0d9g3JFpcOsrDgfhYEbfd7SzE0b69YiaVK2y3wjqfjuuiA54vOllGN4pjSzECNSw==
dependencies: dependencies:
ember-cli-babel "^6.6.0" ember-cli-babel "^6.6.0"
ember-data-model-fragments@5.0.0-beta.0:
version "5.0.0-beta.0"
resolved "https://registry.yarnpkg.com/ember-data-model-fragments/-/ember-data-model-fragments-5.0.0-beta.0.tgz#da90799970317ca852f96b2ea1548ca70094a5bb"
integrity sha512-vjApz3ZWSiLyUUU2IRi/ArKVBJe+iW+BvKkiQ6an/e7ln4Jt06P9xXm1Fu3hfqkQOQlfn7QkUnlzm4XxRtlMfg==
dependencies:
broccoli-file-creator "^2.1.1"
broccoli-merge-trees "^3.0.0"
calculate-cache-key-for-tree "^1.1.0"
ember-cli-babel "7"
ember-compatibility-helpers "^1.2.1"
ember-copy "1.0.0"
git-repo-info "^2.0.0"
npm-git-info "^1.0.3"
ember-data@~3.16.0: ember-data@~3.16.0:
version "3.16.8" version "3.16.8"
resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.16.8.tgz#2d25a2cd37f4952ea92df464a5b10c70cd0b20e1" resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.16.8.tgz#2d25a2cd37f4952ea92df464a5b10c70cd0b20e1"
@ -5824,11 +6209,16 @@ ember-resolver@^8.0.0:
ember-cli-version-checker "^5.0.2" ember-cli-version-checker "^5.0.2"
resolve "^1.15.1" resolve "^1.15.1"
ember-rfc176-data@^0.3.12, ember-rfc176-data@^0.3.13: ember-rfc176-data@^0.3.12:
version "0.3.13" version "0.3.13"
resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.13.tgz#ed1712a26e65fec703655f35410414aa1982cf3b" resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.13.tgz#ed1712a26e65fec703655f35410414aa1982cf3b"
integrity sha512-m9JbwQlT6PjY7x/T8HslnXP7Sz9bx/pz3FrNfNi2NesJnbNISly0Lix6NV1fhfo46572cpq4jrM+/6yYlMefTQ== integrity sha512-m9JbwQlT6PjY7x/T8HslnXP7Sz9bx/pz3FrNfNi2NesJnbNISly0Lix6NV1fhfo46572cpq4jrM+/6yYlMefTQ==
ember-rfc176-data@^0.3.13, ember-rfc176-data@^0.3.15:
version "0.3.15"
resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.15.tgz#af3f1da5a0339b6feda380edc2f7190e0f416c2d"
integrity sha512-GPKa7zRDBblRy0orxTXt5yrpp/Pf5CkuRFSIR8qMFDww0CqCKjCRwdZnWYzCM4kAEfZnXRIDDefe1tBaFw7v7w==
ember-router-generator@^2.0.0: ember-router-generator@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-2.0.0.tgz#d04abfed4ba8b42d166477bbce47fccc672dbde0" resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-2.0.0.tgz#d04abfed4ba8b42d166477bbce47fccc672dbde0"
@ -7175,7 +7565,7 @@ git-repo-info@^1.4.1:
resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.4.1.tgz#2a072823254aaf62fcf0766007d7b6651bd41943" resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.4.1.tgz#2a072823254aaf62fcf0766007d7b6651bd41943"
integrity sha1-KgcoIyVKr2L88HZgB9e2ZRvUGUM= integrity sha1-KgcoIyVKr2L88HZgB9e2ZRvUGUM=
git-repo-info@^2.1.1: git-repo-info@^2.0.0, git-repo-info@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.1.tgz#220ffed8cbae74ef8a80e3052f2ccb5179aed058" resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.1.tgz#220ffed8cbae74ef8a80e3052f2ccb5179aed058"
integrity sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg== integrity sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==
@ -8851,11 +9241,16 @@ lodash.uniqby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302"
integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=
lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.5.1, lodash@~4.17.10: lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.5.1, lodash@~4.17.10:
version "4.17.19" version "4.17.19"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.4:
version "4.17.20"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
log-symbols@^2.2.0: log-symbols@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"