diff --git a/addons/api/addon/adapters/application.js b/addons/api/addon/adapters/application.js index 12112ed67..04a9ebe6f 100644 --- a/addons/api/addon/adapters/application.js +++ b/addons/api/addon/adapters/application.js @@ -2,7 +2,7 @@ import RESTAdapter from '@ember-data/adapter/rest'; import { serializeIntoHash } from '@ember-data/adapter/-private'; /* eslint-disable-next-line ember/no-mixins */ import AdapterBuildURLMixin from '../mixins/adapter-build-url'; -import config from 'ember-get-config'; +import { getOwner } from '@ember/application'; import { get } from '@ember/object'; import { InvalidError } from '@ember-data/adapter/error'; import { dasherize } from '@ember/string'; @@ -44,19 +44,36 @@ export default class ApplicationAdapter extends RESTAdapter.extend( ) { // =attributes + #host; + #namespace; + /** * Sets host to the `api.host` string in the application's config, * if set. * @type {string} */ - host = get(config, 'api.host'); + get host() { + const config = getOwner(this).resolveRegistration('config:environment'); + return this.#host || get(config, 'api.host'); + } + set host(value) { + // Setting this value is useful for testing purposes. + this.#host = value; + } /** * Sets namespace to the `api.namespace` string in the application's config, * if set. * @type {string} */ - namespace = get(config, 'api.namespace'); + get namespace() { + const config = getOwner(this).resolveRegistration('config:environment'); + return this.#namespace || get(config, 'api.namespace'); + } + set namespace(value) { + // Setting this value is useful for testing purposes. + this.#namespace = value; + } // =methods diff --git a/addons/api/addon/generated/models/managed-group.js b/addons/api/addon/generated/models/managed-group.js new file mode 100644 index 000000000..d6502eee6 --- /dev/null +++ b/addons/api/addon/generated/models/managed-group.js @@ -0,0 +1,47 @@ +import BaseModel from '../../models/base'; +import { attr } from '@ember-data/model'; + +/** + * A managed group is a resource that represents a collection of accounts. + */ +export default class GeneratedManagedGroupModel extends BaseModel { + // =attributes + + @attr('string', { + description: 'Optional name for identification purposes.', + }) + name; + + @attr('string', { + description: 'Optional user-set description for identification purposes.', + }) + description; + + @attr('date', { + description: 'The time this resource was created', + readOnly: true, + }) + created_time; + + @attr('date', { + description: 'The time this resource was last updated.', + readOnly: true, + }) + updated_time; + + @attr('number', { + description: 'Current version number of this resource.', + }) + version; + + @attr('string', { + description: 'The type of this ManagedGroup.', + }) + type; + + @attr('string', { + description: + 'The ID of the Auth Method that is associated with this ManagedGroup', + }) + auth_method_id; +} diff --git a/addons/api/addon/models/fragment-managed-group-attributes.js b/addons/api/addon/models/fragment-managed-group-attributes.js new file mode 100644 index 000000000..a4d0583ff --- /dev/null +++ b/addons/api/addon/models/fragment-managed-group-attributes.js @@ -0,0 +1,12 @@ +import Fragment from 'ember-data-model-fragments/fragment'; +import { attr } from '@ember-data/model'; + +export default class FragmentManagedGroupAttributesModel extends Fragment { + // =attributes (OIDC) + + @attr('string', { + description: + 'The boolean expression filter to use to determine membership.', + }) + filter; +} diff --git a/addons/api/addon/models/managed-group.js b/addons/api/addon/models/managed-group.js new file mode 100644 index 000000000..426807de2 --- /dev/null +++ b/addons/api/addon/models/managed-group.js @@ -0,0 +1,21 @@ +import GeneratedManagedGroupModel from '../generated/models/managed-group'; +import { attr } from '@ember-data/model'; +import { fragment } from 'ember-data-model-fragments/attributes'; +import { A } from '@ember/array'; + +export default class ManagedGroupModel extends GeneratedManagedGroupModel { + // =attributes + /** + * Members is read-only under normal circumstances. But members can + * be persisted via calls to `addMembers()` or `removeMembers()`. + */ + @attr({ + readOnly: true, + defaultValue: () => A(), + emptyArrayIfMissing: true, + }) + member_ids; + + @fragment('fragment-managed-group-attributes', { defaultValue: {} }) + attributes; +} diff --git a/addons/api/addon/serializers/fragment-managed-group-attributes.js b/addons/api/addon/serializers/fragment-managed-group-attributes.js new file mode 100644 index 000000000..230358a20 --- /dev/null +++ b/addons/api/addon/serializers/fragment-managed-group-attributes.js @@ -0,0 +1,27 @@ +import JSONSerializer from '@ember-data/serializer/json'; + +export default class FragmentManagedGroupAttributesSerializer extends JSONSerializer { + /** + * If an attribute is annotated as readOnly in the model, don't serialize it. + * Otherwise delegate to default attribute serializer. + * @override + * @method serializeAttribute + * @param {Snapshot} snapshot + * @param {Object} json + * @param {String} key + * @param {Object} attribute + */ + serializeAttribute(snapshot, json, key, attribute) { + const { type, options } = attribute; + let value = super.serializeAttribute(...arguments); + // Convert empty string to null. + if (type === 'string' && json[key] === '') json[key] = null; + // Do not serialize read-only attributes. + if (options.readOnly) delete json[key]; + // Version is sent only if it has a non-nullish value + if (key === 'version') { + if (json[key] === null || json[key] === undefined) delete json[key]; + } + return value; + } +} diff --git a/addons/api/addon/serializers/managed-group.js b/addons/api/addon/serializers/managed-group.js new file mode 100644 index 000000000..cb03236af --- /dev/null +++ b/addons/api/addon/serializers/managed-group.js @@ -0,0 +1,3 @@ +import ApplicationSerializer from './application'; + +export default class ManagedGroupSerializer extends ApplicationSerializer {} diff --git a/addons/api/app/models/fragment-managed-group-attributes.js b/addons/api/app/models/fragment-managed-group-attributes.js new file mode 100644 index 000000000..5d7d865ef --- /dev/null +++ b/addons/api/app/models/fragment-managed-group-attributes.js @@ -0,0 +1 @@ +export { default } from 'api/models/fragment-managed-group-attributes'; diff --git a/addons/api/app/models/managed-group.js b/addons/api/app/models/managed-group.js new file mode 100644 index 000000000..87894c989 --- /dev/null +++ b/addons/api/app/models/managed-group.js @@ -0,0 +1 @@ +export { default } from 'api/models/managed-group'; diff --git a/addons/api/app/serializers/fragment-managed-group-attributes.js b/addons/api/app/serializers/fragment-managed-group-attributes.js new file mode 100644 index 000000000..1038afc31 --- /dev/null +++ b/addons/api/app/serializers/fragment-managed-group-attributes.js @@ -0,0 +1 @@ +export { default } from 'api/serializers/fragment-managed-group-attributes'; diff --git a/addons/api/mirage/config.js b/addons/api/mirage/config.js index 213f71d33..89e2a82b5 100644 --- a/addons/api/mirage/config.js +++ b/addons/api/mirage/config.js @@ -8,7 +8,7 @@ import makeBooleanFilter from './helpers/bexpr-filter'; const isTesting = config.environment === 'test'; export default function () { - initializeMockIPC(this); + initializeMockIPC(this, config); // make this `http://localhost:8080`, for example, if your API is on a different server // this.urlPrefix = ''; @@ -514,6 +514,14 @@ export default function () { this.del('/credential-libraries/:id'); this.patch('/credential-libraries/:id'); + // managed-groups + this.get( + '/managed-groups', + ({ managedGroups }, { queryParams: { auth_method_id: authMethodId } }) => { + return managedGroups.where({ authMethodId }); + } + ); + /* Uncomment the following line and the Response import above * Then change the response code to simulate error responses. * this.get('/scopes', () => new Response(505)); diff --git a/addons/api/mirage/factories/auth-method.js b/addons/api/mirage/factories/auth-method.js index 2ce4b4053..051ea096f 100644 --- a/addons/api/mirage/factories/auth-method.js +++ b/addons/api/mirage/factories/auth-method.js @@ -23,15 +23,18 @@ export default factory.extend({ type: (i) => types[i % types.length], /** - * Adds accounts (with associated users) to auth method. + * Adds accounts (with associated users) to auth method and managed groups. */ - withAccountsAndUsers: trait({ + withAccountsAndUsersAndManagedGroups: trait({ afterCreate(authMethod, server) { const { scope, type } = authMethod; + server.createList('user', 5, { scope }).map((user) => { const { id } = server.create('account', { scope, type, authMethod }); user.update({ accountIds: [id] }); }); + + server.createList('managed-group', 2, { scope, authMethod }); }, }), }); diff --git a/addons/api/mirage/factories/managed-group.js b/addons/api/mirage/factories/managed-group.js new file mode 100644 index 000000000..c65e62334 --- /dev/null +++ b/addons/api/mirage/factories/managed-group.js @@ -0,0 +1,14 @@ +import factory from '../generated/factories/managed-group'; +import permissions from '../helpers/permissions'; + +export default factory.extend({ + id: (i) => `managed-groups-id-${i}`, + + authorized_actions: () => + permissions.authorizedActionsFor('managed-group') || [ + 'no-op', + 'read', + 'update', + 'delete', + ], +}); diff --git a/addons/api/mirage/generated/factories/managed-group.js b/addons/api/mirage/generated/factories/managed-group.js new file mode 100644 index 000000000..17bb7d6c6 --- /dev/null +++ b/addons/api/mirage/generated/factories/managed-group.js @@ -0,0 +1,25 @@ +import { Factory } from 'ember-cli-mirage'; +import { random, date, datatype } from 'faker'; + +/** + * GeneratedManagedGroupFactory + * A managed group is a resource that represents a collection of accounts. + */ +export default Factory.extend({ + name: () => random.words(), + description: () => random.words(), + created_time: () => date.recent(), + updated_time: () => date.recent(), + version: () => datatype.number(), + type: 'oidc', + attributes: function () { + switch (this.type) { + case 'oidc': + return { + filter: random.words(), + }; + default: + return; + } + }, +}); diff --git a/addons/api/mirage/models/managed-group.js b/addons/api/mirage/models/managed-group.js new file mode 100644 index 000000000..8f39ad219 --- /dev/null +++ b/addons/api/mirage/models/managed-group.js @@ -0,0 +1,6 @@ +import { Model, belongsTo } from 'ember-cli-mirage'; + +export default Model.extend({ + scope: belongsTo(), + authMethod: belongsTo(), +}); diff --git a/addons/api/mirage/scenarios/default.js b/addons/api/mirage/scenarios/default.js index d0ad354c6..9291f8a3e 100644 --- a/addons/api/mirage/scenarios/default.js +++ b/addons/api/mirage/scenarios/default.js @@ -24,13 +24,13 @@ export default function (server) { 'auth-method', 1, { scope: globalScope }, - 'withAccountsAndUsers' + 'withAccountsAndUsersAndManagedGroups' ); const orgAuthMethods = server.createList( 'auth-method', 3, { scope: orgScope }, - 'withAccountsAndUsers' + 'withAccountsAndUsersAndManagedGroups' ); // Assign primary auth methods per scope // TODO make this generic diff --git a/addons/api/mirage/scenarios/ipc.js b/addons/api/mirage/scenarios/ipc.js index 0c01a656e..dd39c931e 100644 --- a/addons/api/mirage/scenarios/ipc.js +++ b/addons/api/mirage/scenarios/ipc.js @@ -1,9 +1,8 @@ -import config from 'ember-get-config'; import { datatype } from 'faker'; -const isTesting = config.environment === 'test'; +export default function initializeMockIPC(server, config) { + const isTesting = config.environment === 'test'; -export default function initializeMockIPC(server) { /** * We strive to make this application runnable in a regular web browser, since * it is a convenient environment for development and testing. But only an diff --git a/addons/api/mirage/serializers/managed-groups.js b/addons/api/mirage/serializers/managed-groups.js new file mode 100644 index 000000000..602e6938e --- /dev/null +++ b/addons/api/mirage/serializers/managed-groups.js @@ -0,0 +1,14 @@ +import ApplicationSerializer from './application'; + +export default ApplicationSerializer.extend({ + modelName: 'managed-group', + + _hashForModel(model) { + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); + json.auth_method_id = model.authMethodId; + return json; + }, +}); diff --git a/addons/api/package.json b/addons/api/package.json index 2fcc5ae78..2556cfe95 100644 --- a/addons/api/package.json +++ b/addons/api/package.json @@ -51,7 +51,6 @@ "ember-copy": "^2.0.1", "ember-disable-prototype-extensions": "^1.1.3", "ember-export-application-global": "^2.0.1", - "ember-get-config": "^0.3.0", "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^1.0.0", "ember-page-title": "^6.2.2", diff --git a/addons/api/tests/dummy/config/targets.js b/addons/api/tests/dummy/config/targets.js index 4b33327e8..1e48e0599 100644 --- a/addons/api/tests/dummy/config/targets.js +++ b/addons/api/tests/dummy/config/targets.js @@ -6,13 +6,6 @@ const browsers = [ 'last 1 Safari versions', ]; -const isCI = Boolean(process.env.CI); -const isProduction = process.env.EMBER_ENV === 'production'; - -if (isCI || isProduction) { - browsers.push('ie 11'); -} - module.exports = { browsers, }; diff --git a/addons/api/tests/unit/adapters/application-test.js b/addons/api/tests/unit/adapters/application-test.js index a2d8d9b0e..f06e308c0 100644 --- a/addons/api/tests/unit/adapters/application-test.js +++ b/addons/api/tests/unit/adapters/application-test.js @@ -1,6 +1,5 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import config from 'ember-get-config'; import RESTAdapter from '@ember-data/adapter/rest'; import { InvalidError } from '@ember-data/adapter/error'; import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; @@ -10,6 +9,12 @@ module('Unit | Adapter | application', function (hooks) { setupTest(hooks); setupMirage(hooks); + let config; + + hooks.beforeEach(function () { + config = this.owner.resolveRegistration('config:environment'); + }); + test('its namespace is equal to the configured namespace', function (assert) { assert.expect(2); const adapter = this.owner.lookup('adapter:application'); diff --git a/addons/api/tests/unit/models/fragment-managed-group-attributes-test.js b/addons/api/tests/unit/models/fragment-managed-group-attributes-test.js new file mode 100644 index 000000000..e33479dec --- /dev/null +++ b/addons/api/tests/unit/models/fragment-managed-group-attributes-test.js @@ -0,0 +1,13 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Model | fragment managed group attributes', function (hooks) { + setupTest(hooks); + + // Replace this with your real tests. + test('it exists', function (assert) { + let store = this.owner.lookup('service:store'); + let model = store.createRecord('fragment-managed-group-attributes', {}); + assert.ok(model); + }); +}); diff --git a/addons/api/tests/unit/models/managed-group-test.js b/addons/api/tests/unit/models/managed-group-test.js new file mode 100644 index 000000000..6df99cc9f --- /dev/null +++ b/addons/api/tests/unit/models/managed-group-test.js @@ -0,0 +1,12 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Model | managed group', function (hooks) { + setupTest(hooks); + + test('it exists', function (assert) { + let store = this.owner.lookup('service:store'); + let model = store.createRecord('managed-group', {}); + assert.ok(model); + }); +}); diff --git a/addons/api/tests/unit/serializers/fragment-managed-group-attributes-test.js b/addons/api/tests/unit/serializers/fragment-managed-group-attributes-test.js new file mode 100644 index 000000000..69af8a3a1 --- /dev/null +++ b/addons/api/tests/unit/serializers/fragment-managed-group-attributes-test.js @@ -0,0 +1,21 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module( + 'Unit | Serializer | fragment managed groups attributes', + function (hooks) { + setupTest(hooks); + + test('it serializes empty string to null', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const record = store.createRecord('fragment-managed-group-attributes', { + filter: '', + }); + const serializedRecord = record.serialize(); + assert.deepEqual(serializedRecord, { + filter: null, + }); + }); + } +); diff --git a/addons/api/tests/unit/serializers/managed-group-test.js b/addons/api/tests/unit/serializers/managed-group-test.js new file mode 100644 index 000000000..029a92dd4 --- /dev/null +++ b/addons/api/tests/unit/serializers/managed-group-test.js @@ -0,0 +1,161 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Serializer | Managed group', function (hooks) { + setupTest(hooks); + + test('it serializes correctly on create with no filter provided', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('managed-group'); + const record = store.createRecord('managed-group', { + name: 'Group', + description: 'Description', + member_ids: ['1', '2'], + version: 1, + auth_method_id: '1234', + }); + const snapshot = record._createSnapshot(); + snapshot.adapterOptions = {}; + const serializedRecord = serializer.serialize(snapshot); + assert.deepEqual(serializedRecord, { + name: 'Group', + description: 'Description', + version: 1, + auth_method_id: '1234', + type: null, + attributes: { + filter: null, + }, + }); + }); + + test('it serializes correctly on create when filter provided', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('managed-group'); + const record = store.createRecord('managed-group', { + name: 'Group', + description: 'Description', + member_ids: ['1', '2'], + version: 1, + auth_method_id: '1234', + type: 'oidc', + attributes: { + filter: 'key=value', + }, + }); + const snapshot = record._createSnapshot(); + snapshot.adapterOptions = {}; + const serializedRecord = serializer.serialize(snapshot); + assert.deepEqual(serializedRecord, { + name: 'Group', + description: 'Description', + version: 1, + auth_method_id: '1234', + type: 'oidc', + attributes: { + filter: 'key=value', + }, + }); + }); + + test('it does not serialize version when it has null or undefined value', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('managed-group'); + store.push({ + data: { + id: '1', + type: 'managed-group', + attributes: { + name: 'Group Test', + description: 'Description for the test', + member_ids: ['1', '2'], + version: undefined, + auth_method_id: '1234', + type: 'oidc', + attributes: { + filter: 'key=value', + }, + }, + }, + }); + const record = store.peekRecord('managed-group', '1'); + const snapshot = record._createSnapshot(); + const serializedRecord = serializer.serialize(snapshot); + assert.deepEqual(serializedRecord, { + name: 'Group Test', + description: 'Description for the test', + auth_method_id: '1234', + type: 'oidc', + attributes: { + filter: 'key=value', + }, + }); + }); + + test('it does not serialize readOnly attributes', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('managed-group'); + const record = store.createRecord('managed-group', { + name: 'Group', + description: 'Description', + version: 1, + auth_method_id: '1234', + member_ids: ['1', '2'], + created_time: Date.now(), + updated_time: Date.now(), + }); + const snapshot = record._createSnapshot(); + snapshot.adapterOptions = {}; + const serializedRecord = serializer.serialize(snapshot); + assert.deepEqual(serializedRecord, { + name: 'Group', + description: 'Description', + version: 1, + auth_method_id: '1234', + type: null, + attributes: { + filter: null, + }, + }); + }); + + test('it serializes correctly on update', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('managed-group'); + store.push({ + data: { + id: '1', + type: 'managed-group', + attributes: { + name: 'Group Test', + description: 'Description for the test', + member_ids: ['1', '2'], + version: 1, + auth_method_id: '1234', + type: 'oidc', + attributes: { + filter: 'key=value', + }, + }, + }, + }); + const record = store.peekRecord('managed-group', '1'); + const snapshot = record._createSnapshot(); + const serializedRecord = serializer.serialize(snapshot); + assert.deepEqual(serializedRecord, { + name: 'Group Test', + description: 'Description for the test', + version: 1, + auth_method_id: '1234', + type: 'oidc', + attributes: { + filter: 'key=value', + }, + }); + }); +}); diff --git a/addons/auth/tests/dummy/config/targets.js b/addons/auth/tests/dummy/config/targets.js index 4b33327e8..1e48e0599 100644 --- a/addons/auth/tests/dummy/config/targets.js +++ b/addons/auth/tests/dummy/config/targets.js @@ -6,13 +6,6 @@ const browsers = [ 'last 1 Safari versions', ]; -const isCI = Boolean(process.env.CI); -const isProduction = process.env.EMBER_ENV === 'production'; - -if (isCI || isProduction) { - browsers.push('ie 11'); -} - module.exports = { browsers, }; diff --git a/addons/core/addon/helpers/app-name.js b/addons/core/addon/helpers/app-name.js index a45e86cc6..69c73c730 100644 --- a/addons/core/addon/helpers/app-name.js +++ b/addons/core/addon/helpers/app-name.js @@ -1,6 +1,9 @@ -import { helper } from '@ember/component/helper'; -import config from 'ember-get-config'; +import Helper from '@ember/component/helper'; +import { getOwner } from '@ember/application'; -export default helper(function appName() { - return config.appName; -}); +export default class extends Helper { + compute() { + const config = getOwner(this).resolveRegistration('config:environment'); + return config.appName; + } +} diff --git a/addons/core/addon/helpers/company-copyright.js b/addons/core/addon/helpers/company-copyright.js index 26154cf22..cccf95d46 100644 --- a/addons/core/addon/helpers/company-copyright.js +++ b/addons/core/addon/helpers/company-copyright.js @@ -1,7 +1,10 @@ -import { helper } from '@ember/component/helper'; -import config from 'ember-get-config'; +import Helper from '@ember/component/helper'; +import { getOwner } from '@ember/application'; -export default helper(function companyCopyright() { - const currentYear = new Date().getFullYear(); - return `© ${currentYear} ${config.companyName}`; -}); +export default class extends Helper { + compute() { + const config = getOwner(this).resolveRegistration('config:environment'); + const currentYear = new Date().getFullYear(); + return `© ${currentYear} ${config.companyName}`; + } +} diff --git a/addons/core/addon/helpers/company-name.js b/addons/core/addon/helpers/company-name.js index 8fda6bc78..4aa13af1e 100644 --- a/addons/core/addon/helpers/company-name.js +++ b/addons/core/addon/helpers/company-name.js @@ -1,6 +1,9 @@ -import { helper } from '@ember/component/helper'; -import config from 'ember-get-config'; +import Helper from '@ember/component/helper'; +import { getOwner } from '@ember/application'; -export default helper(function companyName() { - return config.companyName; -}); +export default class extends Helper { + compute() { + const config = getOwner(this).resolveRegistration('config:environment'); + return config.companyName; + } +} diff --git a/addons/core/addon/helpers/doc-url.js b/addons/core/addon/helpers/doc-url.js index 563b67a44..b09c96165 100644 --- a/addons/core/addon/helpers/doc-url.js +++ b/addons/core/addon/helpers/doc-url.js @@ -1,20 +1,23 @@ -import { helper } from '@ember/component/helper'; +import Helper from '@ember/component/helper'; +import { getOwner } from '@ember/application'; import { assert } from '@ember/debug'; -import config from 'ember-get-config'; -export default helper(function docUrl(params /*, hash*/) { - const baseURL = config.documentation.baseURL; - const docKey = params[0] || ''; - const configuredPath = config.documentation.topics[docKey]; - if (docKey) { - assert( - ` - Documentation for "${docKey}" could not be found. Please ensure that - this key exists under "documentation" in your app config. - `, - configuredPath - ); +export default class extends Helper { + compute(params) { + const config = getOwner(this).resolveRegistration('config:environment'); + const baseURL = config.documentation.baseURL; + const docKey = params[0] || ''; + const configuredPath = config.documentation.topics[docKey]; + if (docKey) { + assert( + ` + Documentation for "${docKey}" could not be found. Please ensure that + this key exists under "documentation" in your app config. + `, + configuredPath + ); + } + const path = configuredPath || ''; + return `${baseURL}${path}`; } - const path = configuredPath || ''; - return `${baseURL}${path}`; -}); +} diff --git a/addons/core/addon/initializers/deprecations.js b/addons/core/addon/initializers/deprecations.js index c955b7e4b..3baf1a60b 100644 --- a/addons/core/addon/initializers/deprecations.js +++ b/addons/core/addon/initializers/deprecations.js @@ -1,9 +1,8 @@ import { registerDeprecationHandler } from '@ember/debug'; -import config from 'ember-get-config'; -const isTesting = config.environment === 'test'; - -export function initialize(/* application */) { +export function initialize(application) { + const config = application.resolveRegistration('config:environment'); + const isTesting = config.environment === 'test'; if (isTesting) { // Disable all deprecations for now in tests. registerDeprecationHandler((/*message, options, next*/) => { diff --git a/addons/core/addon/services/confirm.js b/addons/core/addon/services/confirm.js index e63a76fdf..9d2413da9 100644 --- a/addons/core/addon/services/confirm.js +++ b/addons/core/addon/services/confirm.js @@ -3,7 +3,7 @@ import { filterBy } from '@ember/object/computed'; import { A } from '@ember/array'; import { tracked } from '@glimmer/tracking'; import { defer, resolve } from 'rsvp'; -import config from 'ember-get-config'; +import { getOwner } from '@ember/application'; /** * A simple service that emits Confirmation instances and @@ -17,13 +17,21 @@ import config from 'ember-get-config'; export default class ConfirmationsService extends Service { // =attributes + #enabled; + /** * When the confirm service is disabled, it always returns resolving promises. * By default the service is enabled but it is useful to disable it for test * purposes. * @type {boolean} */ - enabled = config.enableConfirmService ?? true; + get enabled() { + const config = getOwner(this).resolveRegistration('config:environment'); + return this.#enabled ?? config.enableConfirmService ?? true; + } + set enabled(value) { + this.#enabled = value; + } /** * @type {Array} diff --git a/addons/core/package.json b/addons/core/package.json index c12f03dcd..b51acc24b 100644 --- a/addons/core/package.json +++ b/addons/core/package.json @@ -34,7 +34,6 @@ "ember-cli-babel": "^7.26.6", "ember-cli-htmlbars": "^5.7.1", "ember-feature-flags": "^6.0.0", - "ember-get-config": "^0.3.0", "ember-intl": "^5.7.0", "ember-loading": "^0.4.0", "ember-route-action-helper": "^2.0.8", diff --git a/addons/core/tests/dummy/config/targets.js b/addons/core/tests/dummy/config/targets.js index 4b33327e8..1e48e0599 100644 --- a/addons/core/tests/dummy/config/targets.js +++ b/addons/core/tests/dummy/config/targets.js @@ -6,13 +6,6 @@ const browsers = [ 'last 1 Safari versions', ]; -const isCI = Boolean(process.env.CI); -const isProduction = process.env.EMBER_ENV === 'production'; - -if (isCI || isProduction) { - browsers.push('ie 11'); -} - module.exports = { browsers, }; diff --git a/addons/core/tests/integration/helpers/doc-url-test.js b/addons/core/tests/integration/helpers/doc-url-test.js index 26d017095..6267c73e6 100644 --- a/addons/core/tests/integration/helpers/doc-url-test.js +++ b/addons/core/tests/integration/helpers/doc-url-test.js @@ -2,13 +2,13 @@ import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { render } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -import config from 'ember-get-config'; module('Integration | Helper | doc-url', function (hooks) { setupRenderingTest(hooks); test('it renders a URL generated from the documentation config', async function (assert) { assert.expect(3); + const config = this.owner.resolveRegistration('config:environment'); const baseURL = config.documentation.baseURL; const path = config.documentation.topics.account; await render(hbs`{{doc-url 'account'}}`); @@ -19,7 +19,8 @@ module('Integration | Helper | doc-url', function (hooks) { test('it throws an error if the specified documentation path cannot be found', async function (assert) { assert.expect(2); - const helper = this.owner.lookup('helper:doc-url'); + const Helper = this.owner.lookup('helper:doc-url'); + const helper = new Helper(this.owner); assert.ok(helper.compute(['account']), 'Specified document exists.'); assert.throws(() => { helper.compute(['no.such.doc']); diff --git a/addons/rose/.storybook/main.js b/addons/rose/.storybook/main.js index 587e98d49..07577d6cc 100644 --- a/addons/rose/.storybook/main.js +++ b/addons/rose/.storybook/main.js @@ -9,6 +9,7 @@ module.exports = { '@storybook/addon-knobs', '@storybook/addon-actions', '@storybook/addon-docs', + '@storybook/addon-a11y', ], emberOptions: { polyfills: [namedBlockPolyfill], diff --git a/addons/rose/addon/components/rose/link-button/index.hbs b/addons/rose/addon/components/rose/link-button/index.hbs index 20ea6c6a5..b7311e3eb 100644 --- a/addons/rose/addon/components/rose/link-button/index.hbs +++ b/addons/rose/addon/components/rose/link-button/index.hbs @@ -1,26 +1,31 @@ - - {{#if @iconLeft}} - - {{/if}} + + + {{#if @iconLeft}} + + {{/if}} - - {{yield}} + + {{yield}} + + + {{#if @iconOnly}} + + {{/if}} + + {{#if @iconRight}} + + {{/if}} - - {{#if @iconOnly}} - - {{/if}} - - {{#if @iconRight}} - - {{/if}} - + diff --git a/addons/rose/addon/components/rose/link-button/index.js b/addons/rose/addon/components/rose/link-button/index.js deleted file mode 100644 index 97f6601ba..000000000 --- a/addons/rose/addon/components/rose/link-button/index.js +++ /dev/null @@ -1,26 +0,0 @@ -import LinkComponent from '@ember/routing/link-component'; -import layout from './index'; -import { computed } from '@ember/object'; - -/** - * An achor element based on `rose-button` component styles - * An empty model cannot be passed in to `link-to` component when a route - * is defined. Thus, `link-to` component is used to generate this component. - * - * @example - * Save - * Disabled - */ -export default LinkComponent.extend({ - layout, - classNames: ['rose-link-button'], - classNameBindings: [ - 'linkButtonStyle', - 'iconOnly:has-icon-only', - 'iconLeft:has-icon-left', - 'iconRight:has-icon-right', - ], - linkButtonStyle: computed(function () { - return this.style ? `rose-button-${this.style}` : ''; - }), -}); diff --git a/addons/rose/package.json b/addons/rose/package.json index 834dc18eb..27dd6680e 100644 --- a/addons/rose/package.json +++ b/addons/rose/package.json @@ -38,13 +38,13 @@ "emberx-select": "github:adopted-ember-addons/emberx-select#bc5f774" }, "devDependencies": { - "ember-get-config": "^0.3.0", "@babel/core": "^7.15.5", "@ember/optional-features": "^2.0.0", "@ember/test-helpers": "^2.4.2", "@glimmer/component": "^1.0.4", "@glimmer/tracking": "^1.0.4", "@hashicorp/flight-icons": "^1.0.0", + "@storybook/addon-a11y": "^6.3.12", "@storybook/addon-actions": "^6.3.10", "@storybook/addon-docs": "^6.3.8", "@storybook/addon-knobs": "^6.3.1", diff --git a/addons/rose/tests/dummy/app/initializers/deprecations.js b/addons/rose/tests/dummy/app/initializers/deprecations.js index c955b7e4b..3baf1a60b 100644 --- a/addons/rose/tests/dummy/app/initializers/deprecations.js +++ b/addons/rose/tests/dummy/app/initializers/deprecations.js @@ -1,9 +1,8 @@ import { registerDeprecationHandler } from '@ember/debug'; -import config from 'ember-get-config'; -const isTesting = config.environment === 'test'; - -export function initialize(/* application */) { +export function initialize(application) { + const config = application.resolveRegistration('config:environment'); + const isTesting = config.environment === 'test'; if (isTesting) { // Disable all deprecations for now in tests. registerDeprecationHandler((/*message, options, next*/) => { diff --git a/addons/rose/tests/dummy/app/styles/app.scss b/addons/rose/tests/dummy/app/styles/app.scss index 41dd470b1..7a52e6029 100644 --- a/addons/rose/tests/dummy/app/styles/app.scss +++ b/addons/rose/tests/dummy/app/styles/app.scss @@ -12,6 +12,7 @@ border-radius: 4px; margin: 0 0.5rem 0.5rem 0 !important; box-shadow: 0px 3px 6px rgba(var(--stark-components), var(--opacity-3)); + list-style-type: none; code { display: block !important; diff --git a/addons/rose/tests/dummy/app/templates/index.hbs b/addons/rose/tests/dummy/app/templates/index.hbs index 812e1ef45..3ead31307 100644 --- a/addons/rose/tests/dummy/app/templates/index.hbs +++ b/addons/rose/tests/dummy/app/templates/index.hbs @@ -1,3 +1,7 @@ + + Content + +

Checkbox Group

{{#if @model}} + {{#if (feature-flag 'filter')}} + + +
+ +
+
+
+ {{/if}} diff --git a/ui/admin/config/environment.js b/ui/admin/config/environment.js index b515fc76a..771068764 100644 --- a/ui/admin/config/environment.js +++ b/ui/admin/config/environment.js @@ -132,6 +132,7 @@ module.exports = function (environment) { // Enable features in development ENV.featureFlags['capabilities'] = true; + ENV.featureFlags['filter'] = true; } if (environment === 'test') { @@ -157,6 +158,7 @@ module.exports = function (environment) { // Enable tests for development features ENV.featureFlags['capabilities'] = true; + ENV.featureFlags['filter'] = true; } if (environment === 'production') { diff --git a/ui/admin/config/targets.js b/ui/admin/config/targets.js index 4b33327e8..1e48e0599 100644 --- a/ui/admin/config/targets.js +++ b/ui/admin/config/targets.js @@ -6,13 +6,6 @@ const browsers = [ 'last 1 Safari versions', ]; -const isCI = Boolean(process.env.CI); -const isProduction = process.env.EMBER_ENV === 'production'; - -if (isCI || isProduction) { - browsers.push('ie 11'); -} - module.exports = { browsers, }; diff --git a/ui/admin/tests/acceptance/accounts/create-test.js b/ui/admin/tests/acceptance/accounts/create-test.js index e852a5b64..e019df150 100644 --- a/ui/admin/tests/acceptance/accounts/create-test.js +++ b/ui/admin/tests/acceptance/accounts/create-test.js @@ -94,25 +94,25 @@ module('Acceptance | accounts | create', function (hooks) { test('Users can navigate to new account route with proper authorization', async function (assert) { assert.expect(2); - await visit(urls.authMethod); + await visit(urls.accounts); assert.ok( instances.authMethod.authorized_collection_actions.accounts.includes( 'create' ) ); - assert.ok(find(`[href="${urls.accounts}"]`)); + assert.ok(find(`[href="${urls.newAccount}"]`)); }); test('Users cannot navigate to new account route without proper authorization', async function (assert) { assert.expect(2); instances.authMethod.authorized_collection_actions.accounts = []; - await visit(urls.authMethod); + await visit(urls.accounts); assert.notOk( instances.authMethod.authorized_collection_actions.accounts.includes( 'create' ) ); - assert.notOk(find(`[href="${urls.accounts}"]`)); + assert.notOk(find(`[href="${urls.newAccount}"]`)); }); test('can cancel a new account creation', async function (assert) { diff --git a/ui/admin/tests/acceptance/auth-methods/create-test.js b/ui/admin/tests/acceptance/auth-methods/create-test.js index 684984999..62ee0638e 100644 --- a/ui/admin/tests/acceptance/auth-methods/create-test.js +++ b/ui/admin/tests/acceptance/auth-methods/create-test.js @@ -75,25 +75,25 @@ module('Acceptance | auth-methods | create ', function (hooks) { 'create', 'list', ]; - await visit(urls.orgScope); + await visit(urls.authMethods); assert.ok( instances.orgScope.authorized_collection_actions['auth-methods'].includes( 'create' ) ); - assert.ok(find(`[href="${urls.authMethods}"]`)); + assert.ok(find(`[href="${urls.newAuthMethod}"]`)); }); test('Users cannot navigate to new auth-methods route without proper authorization', async function (assert) { assert.expect(2); instances.orgScope.authorized_collection_actions['auth-methods'] = []; - await visit(urls.orgScope); + await visit(urls.authMethods); assert.notOk( instances.orgScope.authorized_collection_actions['auth-methods'].includes( 'create' ) ); - assert.notOk(find(`[href="${urls.authMethods}"]`)); + assert.notOk(find(`[href="${urls.newAuthMethod}"]`)); }); test('can cancel new auth method creation', async function (assert) { diff --git a/ui/admin/tests/acceptance/credential-library/create-test.js b/ui/admin/tests/acceptance/credential-library/create-test.js index 58d663f2f..47cc0f8a8 100644 --- a/ui/admin/tests/acceptance/credential-library/create-test.js +++ b/ui/admin/tests/acceptance/credential-library/create-test.js @@ -29,7 +29,6 @@ module('Acceptance | credential-libraries | create', function (hooks) { credentialLibrary: null, credentialLibraries: null, newCredentialLibrary: null, - unknownCredentialLibrary: null, }; hooks.beforeEach(function () { @@ -59,7 +58,6 @@ module('Acceptance | credential-libraries | create', function (hooks) { urls.credentialLibraries = `${urls.credentialStore}/credential-libraries`; urls.credentialLibrary = `${urls.credentialLibraries}/${instances.credentialLibrary.id}`; urls.newCredentialLibrary = `${urls.credentialLibraries}/new`; - urls.unknownCredentialLibrary = `${urls.credentialLibraries}/foo`; // Generate resource counter getCredentialLibraryCount = () => this.server.schema.credentialLibraries.all().models.length; @@ -76,14 +74,6 @@ module('Acceptance | credential-libraries | create', function (hooks) { assert.equal(currentURL(), urls.credentialLibrary); }); - test('visiting an unknown credential library displays 404 message', async function (assert) { - assert.expect(1); - await visit(urls.unknownCredentialLibrary); - await a11yAudit(); - console.debug(find('.rose-message-subtitle')); - assert.ok(find('.rose-message-subtitle').textContent.trim(), 'Error 404'); - }); - test('can create a credential library', async function (assert) { assert.expect(1); const count = getCredentialLibraryCount(); @@ -98,13 +88,13 @@ module('Acceptance | credential-libraries | create', function (hooks) { instances.credentialStore.authorized_collection_actions[ 'credential-libraries' ] = []; - await visit(urls.credentialStore); + await visit(urls.credentialLibraries); assert.notOk( instances.credentialStore.authorized_collection_actions[ 'credential-libraries' ].includes('create') ); - assert.notOk(find(`[href="${urls.credentialLibraries}"]`)); + assert.notOk(find(`[href="${urls.newCredentialLibrary}"]`)); }); test('can cancel create a new credential library', async function (assert) { diff --git a/ui/admin/tests/acceptance/credential-library/read-test.js b/ui/admin/tests/acceptance/credential-library/read-test.js index 6e94637da..012662d72 100644 --- a/ui/admin/tests/acceptance/credential-library/read-test.js +++ b/ui/admin/tests/acceptance/credential-library/read-test.js @@ -77,4 +77,12 @@ module('Acceptance | credential-libraries | read', function (hooks) { await visit(urls.credentialLibraries); assert.notOk(find('main tbody .rose-table-header-cell a')); }); + + test('visiting an unknown credential library displays 404 message', async function (assert) { + assert.expect(1); + await visit(urls.unknownCredentialLibrary); + await a11yAudit(); + console.debug(find('.rose-message-subtitle')); + assert.ok(find('.rose-message-subtitle').textContent.trim(), 'Error 404'); + }); }); diff --git a/ui/admin/tests/acceptance/credential-store/create-test.js b/ui/admin/tests/acceptance/credential-store/create-test.js index e651a641b..647baacd2 100644 --- a/ui/admin/tests/acceptance/credential-store/create-test.js +++ b/ui/admin/tests/acceptance/credential-store/create-test.js @@ -24,7 +24,6 @@ module('Acceptance | credential-stores | create', function (hooks) { projectScope: null, credentialStores: null, credentialStore: null, - unknownCredentialStore: null, newCredentialStore: null, }; @@ -47,7 +46,6 @@ module('Acceptance | credential-stores | create', function (hooks) { urls.projectScope = `/scopes/${instances.scopes.project.id}`; urls.credentialStores = `${urls.projectScope}/credential-stores`; urls.credentialStore = `${urls.credentialStores}/${instances.credentialStore.id}`; - urls.unknownCredentialStore = `${urls.credentialStores}/foo`; urls.newCredentialStore = `${urls.credentialStores}/new`; // Generate resource counter getCredentialStoresCount = () => { @@ -80,13 +78,13 @@ module('Acceptance | credential-stores | create', function (hooks) { instances.scopes.project.authorized_collection_actions[ 'credential-stores' ] = []; - await visit(urls.projectScope); + await visit(urls.credentialStores); assert.notOk( instances.scopes.project.authorized_collection_actions[ 'credential-stores' ].includes('create') ); - assert.notOk(find(`[href="${urls.credentialStores}"]`)); + assert.notOk(find(`[href="${urls.newCredentialStore}"]`)); }); test('saving a new credential store with invalid fields displays error messages', async function (assert) { diff --git a/ui/admin/tests/acceptance/groups/create-test.js b/ui/admin/tests/acceptance/groups/create-test.js index d3cc5fffb..740760d45 100644 --- a/ui/admin/tests/acceptance/groups/create-test.js +++ b/ui/admin/tests/acceptance/groups/create-test.js @@ -13,7 +13,6 @@ import { module('Acceptance | groups | create', function (hooks) { setupApplicationTest(hooks); setupMirage(hooks); - let orgURL; const instances = { scopes: { @@ -45,7 +44,6 @@ module('Acceptance | groups | create', function (hooks) { urls.groups = `/scopes/${instances.orgScope.id}/groups`; urls.group = `${urls.groups}/${instances.group.id}`; urls.newGroup = `${urls.groups}/new`; - orgURL = `/scopes/${instances.orgScope.id}`; }); test('can create new group', async function (assert) { @@ -59,21 +57,21 @@ module('Acceptance | groups | create', function (hooks) { test('can navigate to new groups route with proper authorization', async function (assert) { assert.expect(2); - await visit(orgURL); + await visit(urls.groups); assert.ok( instances.orgScope.authorized_collection_actions.groups.includes('create') ); - assert.ok(find(`[href="${urls.groups}"]`)); + assert.ok(find(`[href="${urls.newGroup}"]`)); }); test('cannot navigate to new groups route without proper authorization', async function (assert) { assert.expect(2); instances.orgScope.authorized_collection_actions.groups = []; - await visit(orgURL); + await visit(urls.groups); assert.notOk( instances.orgScope.authorized_collection_actions.groups.includes('create') ); - assert.notOk(find(`[href="${urls.groups}"]`)); + assert.notOk(find(`[href="${urls.newGroup}"]`)); }); test('can cancel new group creation', async function (assert) { assert.expect(2); diff --git a/ui/admin/tests/acceptance/host-catalogs/create-test.js b/ui/admin/tests/acceptance/host-catalogs/create-test.js index e95ecbde0..b47b3b4ea 100644 --- a/ui/admin/tests/acceptance/host-catalogs/create-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/create-test.js @@ -92,26 +92,26 @@ module('Acceptance | host-catalogs | create', function (hooks) { test('Users can navigate to new host catalogs route with proper authorization', async function (assert) { assert.expect(2); - await visit(urls.projectScope); + await visit(urls.hostCatalogs); assert.ok( instances.scopes.project.authorized_collection_actions[ 'host-catalogs' ].includes('create') ); - assert.ok(find(`[href="${urls.hostCatalogs}"]`)); + assert.ok(find(`[href="${urls.newHostCatalog}"]`)); }); test('Users cannot navigate to new host catalogs route without proper authorization', async function (assert) { assert.expect(2); instances.scopes.project.authorized_collection_actions['host-catalogs'] = []; - await visit(urls.projectScope); + await visit(urls.hostCatalogs); assert.notOk( instances.scopes.project.authorized_collection_actions[ 'host-catalogs' ].includes('create') ); - assert.notOk(find(`[href="${urls.hostCatalogs}"]`)); + assert.notOk(find(`[href="${urls.newHostCatalog}"]`)); }); test('saving a new host catalog with invalid fields displays error messages', async function (assert) { diff --git a/ui/admin/tests/acceptance/host-catalogs/host-sets/create-test.js b/ui/admin/tests/acceptance/host-catalogs/host-sets/create-test.js index a7ede23ed..0c37a98ab 100644 --- a/ui/admin/tests/acceptance/host-catalogs/host-sets/create-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/host-sets/create-test.js @@ -94,13 +94,13 @@ module('Acceptance | host-catalogs | host sets | create', function (hooks) { test('Users cannot navigate to new host sets route without proper authorization', async function (assert) { assert.expect(2); instances.hostCatalog.authorized_collection_actions['host-sets'] = []; - await visit(urls.hostCatalog); + await visit(urls.hostSets); assert.notOk( instances.hostCatalog.authorized_collection_actions['host-sets'].includes( 'create' ) ); - assert.notOk(find(`[href="${urls.hostSets}"]`)); + assert.notOk(find(`[href="${urls.newHostSet}"]`)); }); test('can cancel create new host', async function (assert) { diff --git a/ui/admin/tests/acceptance/host-catalogs/hosts/create-test.js b/ui/admin/tests/acceptance/host-catalogs/hosts/create-test.js index 1b50b301b..75a436274 100644 --- a/ui/admin/tests/acceptance/host-catalogs/hosts/create-test.js +++ b/ui/admin/tests/acceptance/host-catalogs/hosts/create-test.js @@ -90,27 +90,27 @@ module('Acceptance | host-catalogs | hosts | create', function (hooks) { ); assert.notOk(find(`.rose-layout-page-actions [href="${urls.newHost}"]`)); }); - test('Users can navigate to new host catalogs route with proper authorization', async function (assert) { + test('Users can navigate to new host route with proper authorization', async function (assert) { assert.expect(2); - await visit(urls.hostCatalog); + await visit(urls.hosts); assert.ok( instances.hostCatalog.authorized_collection_actions.hosts.includes( 'create' ) ); - assert.ok(find(`[href="${urls.hosts}"]`)); + assert.ok(find(`[href="${urls.newHost}"]`)); }); - test('Users cannot navigate to new host catalogs route without proper authorization', async function (assert) { + test('Users cannot navigate to new host route without proper authorization', async function (assert) { assert.expect(2); instances.hostCatalog.authorized_collection_actions.hosts = []; - await visit(urls.hostCatalog); + await visit(urls.hosts); assert.notOk( instances.hostCatalog.authorized_collection_actions.hosts.includes( 'create' ) ); - assert.notOk(find(`[href="${urls.hosts}"]`)); + assert.notOk(find(`[href="${urls.newHost}"]`)); }); test('can cancel create new host', async function (assert) { diff --git a/ui/admin/tests/acceptance/roles/create-test.js b/ui/admin/tests/acceptance/roles/create-test.js index a0564f67d..15ff5e750 100644 --- a/ui/admin/tests/acceptance/roles/create-test.js +++ b/ui/admin/tests/acceptance/roles/create-test.js @@ -73,21 +73,21 @@ module('Acceptance | roles | create', function (hooks) { test('Users can navigate to new roles route with proper authorization', async function (assert) { assert.expect(2); - await visit(urls.orgScope); + await visit(urls.roles); assert.ok( instances.orgScope.authorized_collection_actions.roles.includes('create') ); - assert.ok(find(`[href="${urls.roles}"]`)); + assert.ok(find(`[href="${urls.newRole}"]`)); }); test('Users cannot navigate to new roles route without proper authorization', async function (assert) { assert.expect(2); instances.orgScope.authorized_collection_actions.roles = []; - await visit(urls.orgScope); + await visit(urls.roles); assert.notOk( instances.orgScope.authorized_collection_actions.roles.includes('create') ); - assert.notOk(find(`[href="${urls.roles}"]`)); + assert.notOk(find(`[href="${urls.newRole}"]`)); }); test('can cancel new role creation', async function (assert) { diff --git a/ui/admin/tests/acceptance/roles/list-test.js b/ui/admin/tests/acceptance/roles/list-test.js index ff170aeb7..525dab3f6 100644 --- a/ui/admin/tests/acceptance/roles/list-test.js +++ b/ui/admin/tests/acceptance/roles/list-test.js @@ -18,7 +18,6 @@ module('Acceptance | roles | list', function (hooks) { global: null, org: null, }, - orgScope: null, }; const urls = { @@ -26,50 +25,46 @@ module('Acceptance | roles | list', function (hooks) { org: null, }, roles: null, - orgScope: null, }; hooks.beforeEach(function () { - instances.orgScope = this.server.create( - 'scope', - { - type: 'org', - scope: { id: 'global', type: 'global' }, - }, - 'withChildren' - ); - instances.role = this.server.create('role', { - scope: instances.orgScope, + instances.scopes.global = this.server.create('scope', { id: 'global' }); + instances.scopes.org = this.server.create('scope', { + type: 'org', + scope: { id: 'global', type: 'global' }, }); - urls.orgScope = `/scopes/${instances.orgScope.id}`; + instances.role = this.server.create('role', { + scope: instances.scopes.org, + }); + urls.scopes.org = `/scopes/${instances.scopes.org.id}`; - urls.roles = `/scopes/${instances.orgScope.id}/roles`; + urls.roles = `/scopes/${instances.scopes.org.id}/roles`; authenticateSession({}); }); test('Users can navigate to roles with proper authorization', async function (assert) { assert.expect(2); - await visit(urls.orgScope); + await visit(urls.scopes.org); assert.ok( - instances.orgScope.authorized_collection_actions.roles.includes('list') + instances.scopes.org.authorized_collection_actions.roles.includes('list') ); assert.ok(find(`[href="${urls.roles}"]`)); }); test('Users cannot navigate to index without either list or create actions', async function (assert) { assert.expect(2); - instances.orgScope.authorized_collection_actions.roles = []; - await visit(urls.orgScope); + instances.scopes.org.authorized_collection_actions.roles = []; + await visit(urls.scopes.org); assert.notOk( - instances.orgScope.authorized_collection_actions.roles.includes('list') + instances.scopes.org.authorized_collection_actions.roles.includes('list') ); assert.notOk(find(`[href="${urls.roles}"]`)); }); test('Users can navigate to index with only create action', async function (assert) { assert.expect(1); - instances.orgScope.authorized_collection_actions.roles = ['create']; - await visit(urls.orgScope); + instances.scopes.org.authorized_collection_actions.roles = ['create']; + await visit(urls.scopes.org); assert.ok(find(`[href="${urls.roles}"]`)); }); }); diff --git a/ui/admin/tests/acceptance/targets/create-test.js b/ui/admin/tests/acceptance/targets/create-test.js index 16215cb7a..fd69af27e 100644 --- a/ui/admin/tests/acceptance/targets/create-test.js +++ b/ui/admin/tests/acceptance/targets/create-test.js @@ -69,25 +69,25 @@ module('Acceptance | targets | create', function (hooks) { test('can navigate to new targets route with proper authorization', async function (assert) { assert.expect(2); - await visit(urls.projectScope); + await visit(urls.targets); assert.ok( instances.scopes.project.authorized_collection_actions.targets.includes( 'create' ) ); - assert.ok(find(`[href="${urls.targets}"]`)); + assert.ok(find(`[href="${urls.newTarget}"]`)); }); test('cannot navigate to new targets route without proper authorization', async function (assert) { assert.expect(2); instances.scopes.project.authorized_collection_actions.targets = []; - await visit(urls.projectScope); + await visit(urls.targets); assert.notOk( instances.scopes.project.authorized_collection_actions.targets.includes( 'create' ) ); - assert.notOk(find(`[href="${urls.targets}"]`)); + assert.notOk(find(`[href="${urls.newTarget}"]`)); }); test('can cancel create new targets', async function (assert) { diff --git a/ui/admin/tests/acceptance/users/accounts-test.js b/ui/admin/tests/acceptance/users/accounts-test.js index fe556f84a..afae1e609 100644 --- a/ui/admin/tests/acceptance/users/accounts-test.js +++ b/ui/admin/tests/acceptance/users/accounts-test.js @@ -43,7 +43,7 @@ module('Acceptance | users | accounts', function (hooks) { { scope: instances.scopes.org, }, - 'withAccountsAndUsers' + 'withAccountsAndUsersAndManagedGroups' ); instances.user = this.server.schema.users.all().models[0]; accountsCount = instances.user.accountIds.length; diff --git a/ui/admin/tests/acceptance/users/create-test.js b/ui/admin/tests/acceptance/users/create-test.js index 12261e9f5..c20ab05bf 100644 --- a/ui/admin/tests/acceptance/users/create-test.js +++ b/ui/admin/tests/acceptance/users/create-test.js @@ -15,7 +15,6 @@ module('Acceptance | users | create', function (hooks) { setupMirage(hooks); let orgScope; - let orgURL; let usersURL; let newUserURL; @@ -30,7 +29,6 @@ module('Acceptance | users | create', function (hooks) { 'withChildren' ); - orgURL = `/scopes/${orgScope.id}`; usersURL = `/scopes/${orgScope.id}/users`; newUserURL = `${usersURL}/new`; @@ -48,19 +46,19 @@ module('Acceptance | users | create', function (hooks) { test('Users can navigate to new users route with proper authorization', async function (assert) { assert.expect(2); - await visit(orgURL); + await visit(usersURL); assert.ok(orgScope.authorized_collection_actions.users.includes('create')); - assert.ok(find(`[href="${orgURL}/users"]`)); + assert.ok(find(`[href="${newUserURL}"]`)); }); test('Users cannot navigate to new users route without proper authorization', async function (assert) { assert.expect(2); orgScope.authorized_collection_actions.users = []; - await visit(orgURL); + await visit(usersURL); assert.notOk( orgScope.authorized_collection_actions.users.includes('create') ); - assert.notOk(find(`[href="${orgURL}/users"]`)); + assert.notOk(find(`[href="${newUserURL}"]`)); }); test('can cancel creation of a new user', async function (assert) { diff --git a/ui/desktop/config/environment.js b/ui/desktop/config/environment.js index 9c9f67b6e..f794097d2 100644 --- a/ui/desktop/config/environment.js +++ b/ui/desktop/config/environment.js @@ -81,6 +81,7 @@ module.exports = function (environment) { // Enable features in development ENV.featureFlags['capabilities'] = true; + ENV.featureFlags['filter'] = true; } if (environment === 'test') { @@ -106,6 +107,7 @@ module.exports = function (environment) { // Enable tests for development features ENV.featureFlags['capabilities'] = true; + ENV.featureFlags['filter'] = true; } if (environment === 'production') { diff --git a/ui/desktop/config/targets.js b/ui/desktop/config/targets.js index 4b33327e8..1e48e0599 100644 --- a/ui/desktop/config/targets.js +++ b/ui/desktop/config/targets.js @@ -6,13 +6,6 @@ const browsers = [ 'last 1 Safari versions', ]; -const isCI = Boolean(process.env.CI); -const isProduction = process.env.EMBER_ENV === 'production'; - -if (isCI || isProduction) { - browsers.push('ie 11'); -} - module.exports = { browsers, }; diff --git a/yarn.lock b/yarn.lock index 931bbdb30..3d3cb02ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2953,6 +2953,28 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== +"@storybook/addon-a11y@^6.3.12": + version "6.3.12" + resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-6.3.12.tgz#2f930fc84fc275a4ed43a716fc09cc12caf4e110" + integrity sha512-q1NdRHFJV6sLEEJw0hatCc5ZIthELqM/AWdrEWDyhcJNyiq7Tq4nKqQBMTQSYwHiUAmxVgw7i4oa1vM2M51/3g== + dependencies: + "@storybook/addons" "6.3.12" + "@storybook/api" "6.3.12" + "@storybook/channels" "6.3.12" + "@storybook/client-api" "6.3.12" + "@storybook/client-logger" "6.3.12" + "@storybook/components" "6.3.12" + "@storybook/core-events" "6.3.12" + "@storybook/theming" "6.3.12" + axe-core "^4.2.0" + core-js "^3.8.2" + global "^4.4.0" + lodash "^4.17.20" + react-sizeme "^3.0.1" + regenerator-runtime "^0.13.7" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + "@storybook/addon-actions@^6.3.10": version "6.3.10" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.3.10.tgz#e0013e541a0a732a801c2cebd55a592361066a36" @@ -3058,6 +3080,21 @@ global "^4.4.0" regenerator-runtime "^0.13.7" +"@storybook/addons@6.3.12": + version "6.3.12" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.3.12.tgz#8773dcc113c5086dfff722388b7b65580e43b65b" + integrity sha512-UgoMyr7Qr0FS3ezt8u6hMEcHgyynQS9ucr5mAwZky3wpXRPFyUTmMto9r4BBUdqyUvTUj/LRKIcmLBfj+/l0Fg== + dependencies: + "@storybook/api" "6.3.12" + "@storybook/channels" "6.3.12" + "@storybook/client-logger" "6.3.12" + "@storybook/core-events" "6.3.12" + "@storybook/router" "6.3.12" + "@storybook/theming" "6.3.12" + core-js "^3.8.2" + global "^4.4.0" + regenerator-runtime "^0.13.7" + "@storybook/addons@6.3.8": version "6.3.8" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.3.8.tgz#c4a839ae9b86fb4a1183466db6eb16201c1a0553" @@ -3114,6 +3151,32 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" +"@storybook/api@6.3.12", "@storybook/api@^6.3.12": + version "6.3.12" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.3.12.tgz#2845c20464d5348d676d09665e8ab527825ed7b5" + integrity sha512-LScRXUeCWEW/OP+jiooNMQICVdusv7azTmULxtm72fhkXFRiQs2CdRNTiqNg46JLLC9z95f1W+pGK66X6HiiQA== + dependencies: + "@reach/router" "^1.3.4" + "@storybook/channels" "6.3.12" + "@storybook/client-logger" "6.3.12" + "@storybook/core-events" "6.3.12" + "@storybook/csf" "0.0.1" + "@storybook/router" "6.3.12" + "@storybook/semver" "^7.3.2" + "@storybook/theming" "6.3.12" + "@types/reach__router" "^1.3.7" + core-js "^3.8.2" + fast-deep-equal "^3.1.3" + global "^4.4.0" + lodash "^4.17.20" + memoizerific "^1.11.3" + qs "^6.10.0" + regenerator-runtime "^0.13.7" + store2 "^2.12.0" + telejson "^5.3.2" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + "@storybook/api@6.3.8": version "6.3.8" resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.3.8.tgz#251bcf6cc3a4e0b908bea7fb0aa9e48d6c48d720" @@ -3166,32 +3229,6 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/api@^6.3.12": - version "6.3.12" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.3.12.tgz#2845c20464d5348d676d09665e8ab527825ed7b5" - integrity sha512-LScRXUeCWEW/OP+jiooNMQICVdusv7azTmULxtm72fhkXFRiQs2CdRNTiqNg46JLLC9z95f1W+pGK66X6HiiQA== - dependencies: - "@reach/router" "^1.3.4" - "@storybook/channels" "6.3.12" - "@storybook/client-logger" "6.3.12" - "@storybook/core-events" "6.3.12" - "@storybook/csf" "0.0.1" - "@storybook/router" "6.3.12" - "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.3.12" - "@types/reach__router" "^1.3.7" - core-js "^3.8.2" - fast-deep-equal "^3.1.3" - global "^4.4.0" - lodash "^4.17.20" - memoizerific "^1.11.3" - qs "^6.10.0" - regenerator-runtime "^0.13.7" - store2 "^2.12.0" - telejson "^5.3.2" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - "@storybook/builder-webpack4@6.3.8": version "6.3.8" resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.3.8.tgz#9ffe866fbd50a94b3cf3ecde1fe4d5f29dd337e8" @@ -3281,6 +3318,19 @@ qs "^6.10.0" telejson "^5.3.2" +"@storybook/channel-postmessage@6.3.12": + version "6.3.12" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.3.12.tgz#3ff9412ac0f445e3b8b44dd414e783a5a47ff7c1" + integrity sha512-Ou/2Ga3JRTZ/4sSv7ikMgUgLTeZMsXXWLXuscz4oaYhmOqAU9CrJw0G1NitwBgK/+qC83lEFSLujHkWcoQDOKg== + dependencies: + "@storybook/channels" "6.3.12" + "@storybook/client-logger" "6.3.12" + "@storybook/core-events" "6.3.12" + core-js "^3.8.2" + global "^4.4.0" + qs "^6.10.0" + telejson "^5.3.2" + "@storybook/channel-postmessage@6.3.8": version "6.3.8" resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.3.8.tgz#43a91760e3464017b8f753b5b383a15a8e56f884" @@ -3386,6 +3436,30 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" +"@storybook/client-api@6.3.12": + version "6.3.12" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.3.12.tgz#a0c6d72a871d1cb02b4b98675472839061e39b5b" + integrity sha512-xnW+lKKK2T774z+rOr9Wopt1aYTStfb86PSs9p3Fpnc2Btcftln+C3NtiHZl8Ccqft8Mz/chLGgewRui6tNI8g== + dependencies: + "@storybook/addons" "6.3.12" + "@storybook/channel-postmessage" "6.3.12" + "@storybook/channels" "6.3.12" + "@storybook/client-logger" "6.3.12" + "@storybook/core-events" "6.3.12" + "@storybook/csf" "0.0.1" + "@types/qs" "^6.9.5" + "@types/webpack-env" "^1.16.0" + core-js "^3.8.2" + global "^4.4.0" + lodash "^4.17.20" + memoizerific "^1.11.3" + qs "^6.10.0" + regenerator-runtime "^0.13.7" + stable "^0.1.8" + store2 "^2.12.0" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + "@storybook/client-api@6.3.8": version "6.3.8" resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.3.8.tgz#60e608a5c2afbe6d63a4a063e616bedde8466584" @@ -3491,15 +3565,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/components@6.3.8": - version "6.3.8" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.3.8.tgz#cb84b0245d8784d41e7e6be25a0d5774363e5b87" - integrity sha512-zIvCk7MAL9z17EI58h7WE/TgFTm0njGwFkQrbXOgGkkKYoFt/yrrs8HqylcqBqfTivJNiXJNnmmx0ooJ83PIwA== +"@storybook/components@6.3.12", "@storybook/components@^6.3.12": + version "6.3.12" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.3.12.tgz#0c7967c60354c84afa20dfab4753105e49b1927d" + integrity sha512-kdQt8toUjynYAxDLrJzuG7YSNL6as1wJoyzNUaCfG06YPhvIAlKo7le9tS2mThVFN5e9nbKrW3N1V1sp6ypZXQ== dependencies: "@popperjs/core" "^2.6.0" - "@storybook/client-logger" "6.3.8" + "@storybook/client-logger" "6.3.12" "@storybook/csf" "0.0.1" - "@storybook/theming" "6.3.8" + "@storybook/theming" "6.3.12" "@types/color-convert" "^2.0.0" "@types/overlayscrollbars" "^1.12.0" "@types/react-syntax-highlighter" "11.0.5" @@ -3521,15 +3595,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/components@^6.3.12": - version "6.3.12" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.3.12.tgz#0c7967c60354c84afa20dfab4753105e49b1927d" - integrity sha512-kdQt8toUjynYAxDLrJzuG7YSNL6as1wJoyzNUaCfG06YPhvIAlKo7le9tS2mThVFN5e9nbKrW3N1V1sp6ypZXQ== +"@storybook/components@6.3.8": + version "6.3.8" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.3.8.tgz#cb84b0245d8784d41e7e6be25a0d5774363e5b87" + integrity sha512-zIvCk7MAL9z17EI58h7WE/TgFTm0njGwFkQrbXOgGkkKYoFt/yrrs8HqylcqBqfTivJNiXJNnmmx0ooJ83PIwA== dependencies: "@popperjs/core" "^2.6.0" - "@storybook/client-logger" "6.3.12" + "@storybook/client-logger" "6.3.8" "@storybook/csf" "0.0.1" - "@storybook/theming" "6.3.12" + "@storybook/theming" "6.3.8" "@types/color-convert" "^2.0.0" "@types/overlayscrollbars" "^1.12.0" "@types/react-syntax-highlighter" "11.0.5" @@ -5094,13 +5168,6 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -amd-name-resolver@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz#fc41b3848824b557313897d71f8d5a0184fbe679" - integrity sha512-hlSTWGS1t6/xq5YCed7YALg7tKZL3rkl7UwEZ/eCIkn8JxmM6fU6Qs/1hwtjQqfuYxlffuUcgYEm0f5xP4YKaA== - dependencies: - ensure-posix-path "^1.0.1" - amd-name-resolver@^1.2.0, amd-name-resolver@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/amd-name-resolver/-/amd-name-resolver-1.3.1.tgz#ffe71c683c6e7191fc4ae1bb3aaed15abea135d9" @@ -5574,6 +5641,11 @@ axe-core@^4.1.4: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.2.tgz#fcf8777b82c62cfc69c7e9f32c0d2226287680e7" integrity sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg== +axe-core@^4.2.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.4.tgz#4f54afff45415b5dec220dec19505beb79c5fb2f" + integrity sha512-4Hk6iSA/H90rtiPoCpSkeJxNWCPBf7szwVvaUqrPdxo0j2Y04suHK9jPKXaE3WI7OET6wBSwsWw7FDc1DBq7iQ== + babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -5639,111 +5711,6 @@ babel-generator@^6.26.0: source-map "^0.5.7" trim-right "^1.0.1" -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -5777,14 +5744,7 @@ babel-plugin-apply-mdx-type-prop@1.6.22: "@babel/helper-plugin-utils" "7.10.4" "@mdx-js/util" "1.6.22" -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-debug-macros@^0.2.0, babel-plugin-debug-macros@^0.2.0-beta.6: +babel-plugin-debug-macros@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.2.0.tgz#0120ac20ce06ccc57bf493b667cf24b85c28da7a" integrity sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA== @@ -5812,13 +5772,6 @@ babel-plugin-ember-data-packages-polyfill@^0.1.2: dependencies: "@ember-data/rfc395-data" "^0.0.4" -babel-plugin-ember-modules-api-polyfill@^2.6.0: - version "2.13.4" - resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.13.4.tgz#cf62bc9bfd808c48d810d5194f4329e9453bd603" - integrity sha512-uxQPkEQAzCYdwhZk16O9m1R4xtCRNy4oEUTBrccOPfzlIahRZJic/JeP/ZEL0BC6Mfq6r55eOg6gMF/zdFoCvA== - dependencies: - ember-rfc176-data "^0.3.13" - babel-plugin-ember-modules-api-polyfill@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-3.5.0.tgz#27b6087fac75661f779f32e60f94b14d0e9f6965" @@ -5964,299 +5917,16 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= - babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= - babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= - -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-env@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" - integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^3.2.6" - invariant "^2.2.2" - semver "^5.3.0" - babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" @@ -6270,7 +5940,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -6289,7 +5959,7 @@ babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -6304,7 +5974,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= @@ -6661,22 +6331,6 @@ broccoli-asset-rewrite@^2.0.0: dependencies: broccoli-filter "^1.2.3" -broccoli-babel-transpiler@^6.5.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.5.1.tgz#a4afc8d3b59b441518eb9a07bd44149476e30738" - integrity sha512-w6GcnkxvHcNCte5FcLGEG1hUdQvlfvSN/6PtGWU/otg69Ugk8rUk51h41R0Ugoc+TNxyeFG1opRt2RlA87XzNw== - dependencies: - babel-core "^6.26.0" - broccoli-funnel "^2.0.1" - broccoli-merge-trees "^2.0.0" - broccoli-persistent-filter "^1.4.3" - clone "^2.0.0" - hash-for-dep "^1.2.3" - heimdalljs-logger "^0.1.7" - json-stable-stringify "^1.0.0" - rsvp "^4.8.2" - workerpool "^2.3.0" - broccoli-babel-transpiler@^7.8.0: version "7.8.0" resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.8.0.tgz#7e0f01fce5739f49bbadeee7f1e625ca51cad66e" @@ -6943,14 +6597,6 @@ broccoli-merge-trees@^1.0.0: rimraf "^2.4.3" symlink-or-copy "^1.0.0" -broccoli-merge-trees@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz#14d4b7fc1a90318c12b16f843e6ba2693808100c" - integrity sha512-WjaexJ+I8BxP5V5RNn6um/qDRSmKoiBC/QkRi79FT9ClHfldxRyCDs9mcV7mmoaPlsshmmPaUz5jdtcKA6DClQ== - dependencies: - broccoli-plugin "^1.3.0" - merge-trees "^1.0.1" - "broccoli-merge-trees@^2.0.0 || ^3.0.0", broccoli-merge-trees@^3.0.0, broccoli-merge-trees@^3.0.1, broccoli-merge-trees@^3.0.2, broccoli-merge-trees@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-3.0.2.tgz#f33b451994225522b5c9bcf27d59decfd8ba537d" @@ -7170,11 +6816,6 @@ broccoli-slow-trees@^3.0.1, broccoli-slow-trees@^3.1.0: dependencies: heimdalljs "^0.2.1" -broccoli-source@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-1.1.0.tgz#54f0e82c8b73f46580cbbc4f578f0b32fca8f809" - integrity sha1-VPDoLItz9GWAy7xPV48LMvyo+Ak= - broccoli-source@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-2.1.2.tgz#e9ae834f143b607e9ec114ade66731500c38b90b" @@ -7351,7 +6992,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.14.2, browserslist@^3.2.6, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.5, browserslist@^4.16.6, browserslist@^4.16.7, browserslist@^4.17.3: +browserslist@4.14.2, browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.5, browserslist@^4.16.6, browserslist@^4.16.7, browserslist@^4.17.3: version "4.17.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.4.tgz#72e2508af2a403aec0a49847ef31bd823c57ead4" integrity sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ== @@ -8100,7 +7741,7 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.0.0, clone@^2.1.2: +clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= @@ -9511,9 +9152,9 @@ electron-rebuild@^2.0.3: yargs "^16.0.0" electron-to-chromium@^1.3.867: - version "1.3.883" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.883.tgz#cc409921469b3aa6ab6efd65cc2a4375128bb703" - integrity sha512-goyjNx4wB9j911PBteb+AXNbErug7rJVkmDXWdw5SCVn2JlARBwsqucPkvp1h5mXWxHUbBRK3bwXTrqSxSiAIQ== + version "1.3.884" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.884.tgz#0cd8c3a80271fd84a81f284c60fb3c9ecb33c166" + integrity sha512-kOaCAa+biA98PwH5BpCkeUeTL6mCeg8p3Q3OhqzPyqhu/5QUnWAN2wr/3IK8xMQxIV76kfoQpP+Bn/wij/jXrg== element-resize-detector@^1.2.2: version "1.2.3" @@ -9683,26 +9324,7 @@ ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0, em resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz#5016b80cdef37036c4282eef2d863e1d73576879" integrity sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw== -ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.16.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.2: - version "6.18.0" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" - integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA== - dependencies: - amd-name-resolver "1.2.0" - babel-plugin-debug-macros "^0.2.0-beta.6" - babel-plugin-ember-modules-api-polyfill "^2.6.0" - babel-plugin-transform-es2015-modules-amd "^6.24.0" - babel-polyfill "^6.26.0" - babel-preset-env "^1.7.0" - broccoli-babel-transpiler "^6.5.0" - broccoli-debug "^0.6.4" - broccoli-funnel "^2.0.0" - broccoli-source "^1.1.0" - clone "^2.0.0" - ember-cli-version-checker "^2.1.2" - semver "^5.5.0" - -ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.26.3, ember-cli-babel@^7.26.4, ember-cli-babel@^7.26.5, ember-cli-babel@^7.26.6, ember-cli-babel@^7.4.0, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3: +ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.16.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.2, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.26.3, ember-cli-babel@^7.26.4, ember-cli-babel@^7.26.5, ember-cli-babel@^7.26.6, ember-cli-babel@^7.4.0, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3: version "7.26.6" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.26.6.tgz#322fbbd3baad9dd99e3276ff05bc6faef5e54b39" integrity sha512-040svtfj2RC35j/WMwdWJFusZaXmNoytLAMyBDGLMSlRvznudTxZjGlPV6UupmtTBApy58cEF8Fq4a+COWoEmQ== @@ -10362,7 +9984,7 @@ ember-focus-trap@^0.7.0: ember-modifier-manager-polyfill "^1.2.0" focus-trap "^6.4.0" -"ember-get-config@^0.2.4 || ^0.3.0", ember-get-config@^0.3.0: +"ember-get-config@^0.2.4 || ^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/ember-get-config/-/ember-get-config-0.3.0.tgz#a73a1a87b48d9dde4c66a0e52ed5260b8a48cfbd" integrity sha512-0e2pKzwW5lBZ4oJnvu9qHOht4sP1MWz/m3hyz8kpSoMdrlZVf62LDKZ6qfKgy8drcv5YhCMYE6QV7MhnqlrzEQ== @@ -10570,7 +10192,7 @@ ember-resolver@^8.0.3: ember-cli-version-checker "^5.1.2" resolve "^1.20.0" -ember-rfc176-data@^0.3.13, ember-rfc176-data@^0.3.15, ember-rfc176-data@^0.3.17: +ember-rfc176-data@^0.3.15, ember-rfc176-data@^0.3.17: version "0.3.17" resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.17.tgz#d4fc6c33abd6ef7b3440c107a28e04417b49860a" integrity sha512-EVzTTKqxv9FZbEh6Ktw56YyWRAA0MijKvl7H8C06wVF+8f/cRRz3dXxa4nkwjzyVwx4rzKGuIGq77hxJAQhWWw== @@ -13272,7 +12894,7 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -hash-for-dep@^1.0.2, hash-for-dep@^1.2.3, hash-for-dep@^1.4.7, hash-for-dep@^1.5.0, hash-for-dep@^1.5.1: +hash-for-dep@^1.0.2, hash-for-dep@^1.4.7, hash-for-dep@^1.5.0, hash-for-dep@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.5.1.tgz#497754b39bee2f1c4ade4521bfd2af0a7c1196e3" integrity sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw== @@ -16397,18 +16019,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge-trees@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-trees/-/merge-trees-1.0.1.tgz#ccbe674569787f9def17fd46e6525f5700bbd23e" - integrity sha1-zL5nRWl4f53vF/1G5lJfVwC70j4= - dependencies: - can-symlink "^1.0.0" - fs-tree-diff "^0.5.4" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - rimraf "^2.4.3" - symlink-or-copy "^1.0.0" - merge-trees@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-trees/-/merge-trees-2.0.0.tgz#a560d796e566c5d9b2c40472a2967cca48d85161" @@ -18609,7 +18219,7 @@ prismjs@^1.21.0, prismjs@^1.25.0, prismjs@~1.24.0: resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.25.0.tgz#6f822df1bdad965734b310b315a23315cf999756" integrity sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg== -private@^0.1.6, private@^0.1.8: +private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -19520,16 +19130,11 @@ regenerate-unicode-properties@^8.2.0: dependencies: regenerate "^1.4.0" -regenerate@^1.2.1, regenerate@^1.4.0: +regenerate@^1.4.0: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= - regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -19545,15 +19150,6 @@ regenerator-runtime@^0.9.5: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" integrity sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck= -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" @@ -19582,15 +19178,6 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - regexpu-core@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" @@ -19632,23 +19219,11 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - regjsgen@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - dependencies: - jsesc "~0.5.0" - regjsparser@^0.6.4: version "0.6.9" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" @@ -20142,7 +19717,7 @@ rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0 resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== -rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.4, rsvp@^4.8.5: +rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.4, rsvp@^4.8.5: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== @@ -23208,13 +22783,6 @@ workerpool@6.1.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== -workerpool@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-2.3.4.tgz#661335ded59a08c01ca009e30cc96929a7b4b0aa" - integrity sha512-c2EWrgB9IKHi1jbf4LG9sxKgHYOY+Ej5li6siEGtFecCXWG7eQOqATPEJ0rg1KFETXROEkErc1t5XiNrLG666Q== - dependencies: - object-assign "4.1.1" - workerpool@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-3.1.2.tgz#b34e79243647decb174b7481ab5b351dc565c426"