diff --git a/.github/workflows/ui-release-trigger.yml b/.github/workflows/ui-release-trigger.yml index 62c2d3616..10683ba54 100644 --- a/.github/workflows/ui-release-trigger.yml +++ b/.github/workflows/ui-release-trigger.yml @@ -9,14 +9,11 @@ jobs: trigger-circleci-release: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@master + - uses: actions/checkout@v2 - name: Trigger Release job - env: - TAG: ${{ github.event.release.tag_name }} - TEST_REF: ${{ github.ref }} run: | - echo "($TAG), ($TEST_REF)" + echo "Triggering release with a TAG ${GITHUB_REF#refs/tags/}" + curl -u ${{ secrets.CIRCLE_TOKEN }}: -X POST --header "Content-Type: application/json" \ - -d '{ "branch": "main", "parameters": {"TAG": "'${TAG}'" }}' \ + -d '{ "branch": "main", "parameters": {"TAG": "'${GITHUB_REF#refs/tags/}'" }}' \ https://circleci.com/api/v2/project/github/hashicorp/boundary-ui-releases/pipeline diff --git a/addons/api/.eslintignore b/addons/api/.eslintignore index 72df37307..922165552 100644 --- a/addons/api/.eslintignore +++ b/addons/api/.eslintignore @@ -13,6 +13,7 @@ # misc /coverage/ !.* +.eslintcache # ember-try /.node_modules.ember-try/ diff --git a/addons/api/.eslintrc.js b/addons/api/.eslintrc.js index 928585995..49fb14100 100644 --- a/addons/api/.eslintrc.js +++ b/addons/api/.eslintrc.js @@ -7,48 +7,54 @@ module.exports = { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { - legacyDecorators: true - } + legacyDecorators: true, + }, }, - plugins: [ - 'ember' - ], + plugins: ['ember'], extends: [ 'eslint:recommended', - 'plugin:ember/recommended' + 'plugin:ember/recommended', + 'plugin:prettier/recommended', ], env: { - browser: true + browser: true, + }, + rules: { + 'ember/no-get': 'off', + 'ember/no-get-with-default': 'off', + 'ember/no-computed-properties-in-native-classes': 'off', + 'ember/no-assignment-of-untracked-properties-used-in-tracking-contexts': + 'off', }, - rules: {}, overrides: [ // node files { files: [ '.eslintrc.js', + '.prettierrc.js', '.template-lintrc.js', 'ember-cli-build.js', 'index.js', 'testem.js', 'blueprints/*/index.js', 'config/**/*.js', - 'tests/dummy/config/**/*.js' + 'tests/dummy/config/**/*.js', ], excludedFiles: [ 'addon/**', 'addon-test-support/**', 'app/**', - 'tests/dummy/app/**' + 'tests/dummy/app/**', ], parserOptions: { - sourceType: 'script' + sourceType: 'script', }, env: { browser: false, - node: true + node: true, }, plugins: ['node'], - extends: ['plugin:node/recommended'] - } - ] + extends: ['plugin:node/recommended'], + }, + ], }; diff --git a/addons/api/.npmignore b/addons/api/.npmignore index bd09adff9..88818f2c8 100644 --- a/addons/api/.npmignore +++ b/addons/api/.npmignore @@ -10,6 +10,7 @@ /.editorconfig /.ember-cli /.env* +/.eslintcache /.eslintignore /.eslintrc.js /.git/ diff --git a/addons/core/.gitignore b/addons/api/.prettierignore similarity index 50% rename from addons/core/.gitignore rename to addons/api/.prettierignore index c40a1b2ab..922165552 100644 --- a/addons/core/.gitignore +++ b/addons/api/.prettierignore @@ -1,4 +1,6 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. +# unconventional js +/blueprints/*/files/ +/vendor/ # compiled output /dist/ @@ -9,15 +11,9 @@ /node_modules/ # misc -/.env* -/.pnp* -/.sass-cache -/connect.lock /coverage/ -/libpeerconnection.log -/npm-debug.log* -/testem.log -/yarn-error.log +!.* +.eslintcache # ember-try /.node_modules.ember-try/ diff --git a/addons/api/.prettierrc.js b/addons/api/.prettierrc.js new file mode 100644 index 000000000..534e6d35a --- /dev/null +++ b/addons/api/.prettierrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + singleQuote: true, +}; diff --git a/addons/api/.template-lintrc.js b/addons/api/.template-lintrc.js index f38737001..3b0b9af95 100644 --- a/addons/api/.template-lintrc.js +++ b/addons/api/.template-lintrc.js @@ -1,5 +1,5 @@ 'use strict'; module.exports = { - extends: 'octane' + extends: 'octane', }; diff --git a/addons/api/addon/generated/models/role.js b/addons/api/addon/generated/models/role.js index 3632696a4..87bfa46f8 100644 --- a/addons/api/addon/generated/models/role.js +++ b/addons/api/addon/generated/models/role.js @@ -18,7 +18,8 @@ export default class GeneratedRoleModel extends BaseModel { description; @attr('string', { - description: 'The scope to which this role applies. Defaults to the role\'s scope.', + description: + "The scope to which this role applies. Defaults to the role's scope.", }) grant_scope_id; diff --git a/addons/api/addon/generated/models/session.js b/addons/api/addon/generated/models/session.js index a33426e4c..977fff71d 100644 --- a/addons/api/addon/generated/models/session.js +++ b/addons/api/addon/generated/models/session.js @@ -2,7 +2,6 @@ import BaseModel from '../../models/base'; import { attr } from '@ember-data/model'; export default class GeneratedSessionModel extends BaseModel { - // =attributes @attr('string') user_id; @@ -32,5 +31,4 @@ export default class GeneratedSessionModel extends BaseModel { description: 'Current version number of this resource.', }) version; - } diff --git a/addons/api/addon/generated/models/target.js b/addons/api/addon/generated/models/target.js index 55c83d18c..4bf84649f 100644 --- a/addons/api/addon/generated/models/target.js +++ b/addons/api/addon/generated/models/target.js @@ -24,13 +24,13 @@ export default class GeneratedTargetModel extends BaseModel { @attr('number', { description: '', - defaultValue: 28800 + defaultValue: 28800, }) session_max_seconds; @attr('number', { description: '', - defaultValue: 1 + defaultValue: 1, }) session_connection_limit; diff --git a/addons/api/addon/models/account.js b/addons/api/addon/models/account.js index a4e1359f3..90ad55c42 100644 --- a/addons/api/addon/models/account.js +++ b/addons/api/addon/models/account.js @@ -4,7 +4,6 @@ import { computed } from '@ember/object'; import { equal } from '@ember/object/computed'; export default class AccountModel extends GeneratedAccountModel { - // =attributes /** diff --git a/addons/api/addon/models/base.js b/addons/api/addon/models/base.js index 60ed2faea..70da1b8a6 100644 --- a/addons/api/addon/models/base.js +++ b/addons/api/addon/models/base.js @@ -25,7 +25,6 @@ import { computed } from '@ember/object'; * 2) Or as an ID: `record.scopeID`. */ export default class BaseModel extends Model { - // =relationships /** diff --git a/addons/api/addon/models/host-set.js b/addons/api/addon/models/host-set.js index 3c56d2879..66dd96d52 100644 --- a/addons/api/addon/models/host-set.js +++ b/addons/api/addon/models/host-set.js @@ -2,7 +2,6 @@ import GeneratedHostSetModel from '../generated/models/host-set'; import { fragmentArray } from 'ember-data-model-fragments/attributes'; export default class HostSetModel extends GeneratedHostSetModel { - // =attributes /** diff --git a/addons/api/addon/models/host.js b/addons/api/addon/models/host.js index a2e855084..7748e023b 100644 --- a/addons/api/addon/models/host.js +++ b/addons/api/addon/models/host.js @@ -2,11 +2,9 @@ import GeneratedHostModel from '../generated/models/host'; import { fragment } from 'ember-data-model-fragments/attributes'; export default class HostModel extends GeneratedHostModel { - /** * Attributes of this resource, if any, represented as a JSON fragment. * @type {FragmentHostAttributesModel} */ @fragment('fragment-host-attributes', { defaultValue: {} }) attributes; - } diff --git a/addons/api/addon/models/role.js b/addons/api/addon/models/role.js index be29c1c24..60edd5ac9 100644 --- a/addons/api/addon/models/role.js +++ b/addons/api/addon/models/role.js @@ -35,7 +35,7 @@ export default class RoleModel extends GeneratedRoleModel { return this.save({ adapterOptions: { method: 'set-grants', - grantStrings + grantStrings, }, }); } diff --git a/addons/api/addon/models/session.js b/addons/api/addon/models/session.js index dd27cd9c6..15fd0b4dd 100644 --- a/addons/api/addon/models/session.js +++ b/addons/api/addon/models/session.js @@ -4,7 +4,6 @@ import { equal } from '@ember/object/computed'; import { attr } from '@ember-data/model'; export default class SessionModel extends GeneratedSessionModel { - // =attributes @attr('string', { readOnly: true }) proxy_address; @@ -61,5 +60,4 @@ export default class SessionModel extends GeneratedSessionModel { }, }); } - } diff --git a/addons/api/addon/models/target.js b/addons/api/addon/models/target.js index 6c5e1cfe8..a00c3b182 100644 --- a/addons/api/addon/models/target.js +++ b/addons/api/addon/models/target.js @@ -41,8 +41,9 @@ export default class TargetModel extends GeneratedTargetModel { * @type {SessionModel[]} */ get sessions() { - return this.store.peekAll('session') - .filter(s => s && (s.target_id === this.id)); + return this.store + .peekAll('session') + .filter((s) => s && s.target_id === this.id); } /** @@ -58,8 +59,9 @@ export default class TargetModel extends GeneratedTargetModel { * @type {boolean} */ get isActive() { - const pendingOrActiveSessions = - this.sessions.filter(s => s.isActive || s.isPending); + const pendingOrActiveSessions = this.sessions.filter( + (s) => s.isActive || s.isPending + ); return Boolean(pendingOrActiveSessions.length); } diff --git a/addons/api/addon/models/user.js b/addons/api/addon/models/user.js index 567ebd81c..49fe64520 100644 --- a/addons/api/addon/models/user.js +++ b/addons/api/addon/models/user.js @@ -3,7 +3,6 @@ import { attr } from '@ember-data/model'; import { A } from '@ember/array'; export default class UserModel extends GeneratedUserModel { - // =attributes /** @@ -74,5 +73,4 @@ export default class UserModel extends GeneratedUserModel { removeAccount(accountID, options) { return this.removeAccounts([accountID], options); } - } diff --git a/addons/api/addon/serializers/account.js b/addons/api/addon/serializers/account.js index 5f5291dcd..dfbb7e580 100644 --- a/addons/api/addon/serializers/account.js +++ b/addons/api/addon/serializers/account.js @@ -1,7 +1,6 @@ import ApplicationSerializer from './application'; export default class AccountSerializer extends ApplicationSerializer { - // =properties /** diff --git a/addons/api/addon/serializers/application.js b/addons/api/addon/serializers/application.js index e4531c7fe..08b59eebc 100644 --- a/addons/api/addon/serializers/application.js +++ b/addons/api/addon/serializers/application.js @@ -7,7 +7,6 @@ import { copy } from 'ember-copy'; * Manages serialization/normalization of data to/from the API. */ export default class ApplicationSerializer extends RESTSerializer { - // =properties /** @@ -82,7 +81,7 @@ export default class ApplicationSerializer extends RESTSerializer { // Delete `scope` field delete serialized.scope; // And serialize `scope_id` - if(this.serializeScopeID) { + if (this.serializeScopeID) { const scope_id = snapshot?.attr('scope')?.attr('scope_id'); if (scope_id) serialized.scope_id = scope_id; } diff --git a/addons/api/addon/serializers/host-set.js b/addons/api/addon/serializers/host-set.js index ee38bd5eb..5bdb2d028 100644 --- a/addons/api/addon/serializers/host-set.js +++ b/addons/api/addon/serializers/host-set.js @@ -1,7 +1,6 @@ import ApplicationSerializer from './application'; export default class HostSetSerializer extends ApplicationSerializer { - // =properties /** diff --git a/addons/api/addon/serializers/host.js b/addons/api/addon/serializers/host.js index fad6f2ca7..0b25ce63b 100644 --- a/addons/api/addon/serializers/host.js +++ b/addons/api/addon/serializers/host.js @@ -1,12 +1,10 @@ import ApplicationSerializer from './application'; export default class HostSerializer extends ApplicationSerializer { - // =properties /** * @type {boolean} */ serializeScopeID = false; - } diff --git a/addons/api/addon/serializers/role.js b/addons/api/addon/serializers/role.js index 59271fe44..a1801ff63 100644 --- a/addons/api/addon/serializers/role.js +++ b/addons/api/addon/serializers/role.js @@ -17,8 +17,8 @@ export default class RoleSerializer extends ApplicationSerializer { serialize(snapshot) { const grantStrings = get(snapshot, 'adapterOptions.grantStrings'); let serialized = super.serialize(...arguments); - if (grantStrings) serialized = - this.serializeWithGrantStrings(snapshot, grantStrings); + if (grantStrings) + serialized = this.serializeWithGrantStrings(snapshot, grantStrings); const principalIDs = snapshot?.adapterOptions?.principalIDs; if (principalIDs) serialized = this.serializewithPrincipals(snapshot, principalIDs); @@ -34,7 +34,7 @@ export default class RoleSerializer extends ApplicationSerializer { serializeWithGrantStrings(snapshot, grantStrings) { return { version: snapshot.attr('version'), - grant_strings: grantStrings + grant_strings: grantStrings, }; } diff --git a/addons/api/addon/serializers/user.js b/addons/api/addon/serializers/user.js index 9c4a47194..c5c3b223c 100644 --- a/addons/api/addon/serializers/user.js +++ b/addons/api/addon/serializers/user.js @@ -13,8 +13,8 @@ export default class UserSerializer extends ApplicationSerializer { serialize(snapshot) { let serialized = super.serialize(...arguments); const accountIDs = snapshot?.adapterOptions?.accountIDs; - if (accountIDs) serialized = - this.serializewithAccounts(snapshot, accountIDs); + if (accountIDs) + serialized = this.serializewithAccounts(snapshot, accountIDs); return serialized; } diff --git a/addons/api/config/ember-try.js b/addons/api/config/ember-try.js index 2022058df..aa7ca9f14 100644 --- a/addons/api/config/ember-try.js +++ b/addons/api/config/ember-try.js @@ -25,9 +25,9 @@ module.exports = async function () { name: 'ember-lts-3.20', npm: { devDependencies: { - 'ember-source': '~3.20.5' - } - } + 'ember-source': '~3.20.5', + }, + }, }, { name: 'ember-release', @@ -62,9 +62,9 @@ module.exports = async function () { }, npm: { devDependencies: { - '@ember/jquery': '^1.1.0' - } - } + '@ember/jquery': '^1.1.0', + }, + }, }, { name: 'ember-classic', diff --git a/addons/api/mirage/config.js b/addons/api/mirage/config.js index 8f6503319..ad976e8e7 100644 --- a/addons/api/mirage/config.js +++ b/addons/api/mirage/config.js @@ -5,8 +5,7 @@ import { pickRandomStatusString } from './factories/session'; import { Response } from 'miragejs'; import initializeMockIPC from './scenarios/ipc'; -export default function() { - +export default function () { initializeMockIPC(this); // make this `http://localhost:8080`, for example, if your API is on a different server @@ -23,17 +22,20 @@ export default function() { // Scope resources - this.get('/scopes', ({ scopes }, { queryParams: { scope_id, recursive } }) => { - // Default parent scope is global - if (!scope_id) scope_id = 'global'; - if (recursive && scope_id === 'global') { - return scopes.all(); - } else { - return scopes.where(scope => { - return scope.scope ? scope.scope.id === scope_id : false - }); + this.get( + '/scopes', + ({ scopes }, { queryParams: { scope_id, recursive } }) => { + // Default parent scope is global + if (!scope_id) scope_id = 'global'; + if (recursive && scope_id === 'global') { + return scopes.all(); + } else { + return scopes.where((scope) => { + return scope.scope ? scope.scope.id === scope_id : false; + }); + } } - }); + ); this.post('/scopes', function ({ scopes }) { // Parent scope comes through the payload via `scope_id`, but this needs // to be expanded to a scope object `scope: {id:..., type:...}` before @@ -49,41 +51,50 @@ export default function() { // Auth & IAM resources - this.get('/auth-methods', ({ authMethods }, { queryParams: { scope_id: scopeId } }) => { - return authMethods.where({ scopeId }); - }); + this.get( + '/auth-methods', + ({ authMethods }, { queryParams: { scope_id: scopeId } }) => { + return authMethods.where({ scopeId }); + } + ); this.post('/auth-methods'); this.get('/auth-methods/:id'); this.patch('/auth-methods/:id'); this.del('/auth-methods/:id'); // Auth Method Accounts - this.get('/accounts', ({ accounts }, { queryParams: { auth_method_id: authMethodId } }) => { - return accounts.where({ authMethodId }); - }); + this.get( + '/accounts', + ({ accounts }, { queryParams: { auth_method_id: authMethodId } }) => { + return accounts.where({ authMethodId }); + } + ); this.post('/accounts'); this.get('/accounts/:id'); this.patch('/accounts/:id'); this.del('/accounts/:id'); - this.post('/accounts/:idMethod', function ({ accounts }, { params: { idMethod } }) { - const attrs = this.normalizedRequestAttrs(); - const id = idMethod.split(':')[0]; - const method = idMethod.split(':')[1]; - const account = accounts.find(id); - const updatedAttrs = { - version: attrs.version, - attributes: account.attributes - }; - // Set new password - if (method === 'set-password') { - updatedAttrs.attributes.password = attrs.password; + this.post( + '/accounts/:idMethod', + function ({ accounts }, { params: { idMethod } }) { + const attrs = this.normalizedRequestAttrs(); + const id = idMethod.split(':')[0]; + const method = idMethod.split(':')[1]; + const account = accounts.find(id); + const updatedAttrs = { + version: attrs.version, + attributes: account.attributes, + }; + // Set new password + if (method === 'set-password') { + updatedAttrs.attributes.password = attrs.password; + } + // Set new password + if (method === 'change-password') { + updatedAttrs.attributes.password = attrs.new_password; + } + return account.update(updatedAttrs); } - // Set new password - if (method === 'change-password') { - updatedAttrs.attributes.password = attrs.new_password; - } - return account.update(updatedAttrs); - }); + ); // Authenticate/deauthenticate routes this.post('/auth-methods/:id_method', authHandler); @@ -104,11 +115,11 @@ export default function() { const user = users.find(id); const updatedAttrs = { version: attrs.version, - accountIds: user.accountIds + accountIds: user.accountIds, }; // If adding accounts, push them into the array if (method === 'add-accounts') { - attrs.accountIds.forEach(id => { + attrs.accountIds.forEach((id) => { if (!updatedAttrs.accountIds.includes(id)) { updatedAttrs.accountIds.push(id); } @@ -116,7 +127,7 @@ export default function() { } // If deleting accounts, filter them out of the array if (method === 'remove-accounts') { - updatedAttrs.accountIds = updatedAttrs.accountIds.filter(id => { + updatedAttrs.accountIds = updatedAttrs.accountIds.filter((id) => { return !attrs.accountIds.includes(id); }); } @@ -131,31 +142,34 @@ export default function() { this.get('/groups/:id'); this.patch('/groups/:id'); this.del('/groups/:id'); - this.post('/groups/:idMethod', function ({ groups }, { params: { idMethod } }) { - const attrs = this.normalizedRequestAttrs(); - const id = idMethod.split(':')[0]; - const method = idMethod.split(':')[1]; - const group = groups.find(id); - const updatedAttrs = { - version: attrs.version, - memberIds: group.memberIds - }; - // If adding members, push them into the array - if (method === 'add-members') { - attrs.memberIds.forEach(id => { - if (!updatedAttrs.memberIds.includes(id)) { - updatedAttrs.memberIds.push(id); - } - }); + this.post( + '/groups/:idMethod', + function ({ groups }, { params: { idMethod } }) { + const attrs = this.normalizedRequestAttrs(); + const id = idMethod.split(':')[0]; + const method = idMethod.split(':')[1]; + const group = groups.find(id); + const updatedAttrs = { + version: attrs.version, + memberIds: group.memberIds, + }; + // If adding members, push them into the array + if (method === 'add-members') { + attrs.memberIds.forEach((id) => { + if (!updatedAttrs.memberIds.includes(id)) { + updatedAttrs.memberIds.push(id); + } + }); + } + // If deleting members, filter them out of the array + if (method === 'remove-members') { + updatedAttrs.memberIds = updatedAttrs.memberIds.filter((id) => { + return !attrs.memberIds.includes(id); + }); + } + return group.update(updatedAttrs); } - // If deleting members, filter them out of the array - if (method === 'remove-members') { - updatedAttrs.memberIds = updatedAttrs.memberIds.filter(id => { - return !attrs.memberIds.includes(id); - }); - } - return group.update(updatedAttrs); - }); + ); // IAM: Roles this.get('/roles', ({ roles }, { queryParams: { scope_id: scopeId } }) => { @@ -165,66 +179,72 @@ export default function() { this.get('/roles/:id'); this.patch('/roles/:id'); this.del('/roles/:id'); - this.post('/roles/:idMethod', function ({ roles, users, groups }, { params: { idMethod } }) { - const attrs = this.normalizedRequestAttrs(); - const id = idMethod.split(':')[0]; - const method = idMethod.split(':')[1]; - const role = roles.find(id); - let updatedAttrs = {}; + this.post( + '/roles/:idMethod', + function ({ roles, users, groups }, { params: { idMethod } }) { + const attrs = this.normalizedRequestAttrs(); + const id = idMethod.split(':')[0]; + const method = idMethod.split(':')[1]; + const role = roles.find(id); + let updatedAttrs = {}; - // Principals is a combined list of users and groups, but in Mirage we've - // internally modelled them as separate lists. Therefore we must check - // the type by looking up the user or group first, then determine which - // list to add the principal to. - if (method === 'add-principals') { - updatedAttrs = { - version: attrs.version, - userIds: role.userIds, - groupIds: role.groupIds - }; - attrs.principalIds.forEach(id => { - const isUser = users.find(id); - const isGroup = groups.find(id); - if (isUser && !updatedAttrs.userIds.includes(id)) { - updatedAttrs.userIds.push(id); - } - if (isGroup && !updatedAttrs.groupIds.includes(id)) { - updatedAttrs.groupIds.push(id); - } - }); - } - // If deleting principals, filter them out of both users and groups, - // and in this case don't care about the type - if (method === 'remove-principals') { - updatedAttrs = { - version: attrs.version, - userIds: role.userIds, - groupIds: role.groupIds - }; - updatedAttrs.userIds = updatedAttrs.userIds.filter(id => { - return !attrs.principalIds.includes(id); - }); - updatedAttrs.groupIds = updatedAttrs.groupIds.filter(id => { - return !attrs.principalIds.includes(id); - }); - } + // Principals is a combined list of users and groups, but in Mirage we've + // internally modelled them as separate lists. Therefore we must check + // the type by looking up the user or group first, then determine which + // list to add the principal to. + if (method === 'add-principals') { + updatedAttrs = { + version: attrs.version, + userIds: role.userIds, + groupIds: role.groupIds, + }; + attrs.principalIds.forEach((id) => { + const isUser = users.find(id); + const isGroup = groups.find(id); + if (isUser && !updatedAttrs.userIds.includes(id)) { + updatedAttrs.userIds.push(id); + } + if (isGroup && !updatedAttrs.groupIds.includes(id)) { + updatedAttrs.groupIds.push(id); + } + }); + } + // If deleting principals, filter them out of both users and groups, + // and in this case don't care about the type + if (method === 'remove-principals') { + updatedAttrs = { + version: attrs.version, + userIds: role.userIds, + groupIds: role.groupIds, + }; + updatedAttrs.userIds = updatedAttrs.userIds.filter((id) => { + return !attrs.principalIds.includes(id); + }); + updatedAttrs.groupIds = updatedAttrs.groupIds.filter((id) => { + return !attrs.principalIds.includes(id); + }); + } - if (method === 'set-grants') { - updatedAttrs = { - version: attrs.version, - grantStrings: attrs.grantStrings - }; - } + if (method === 'set-grants') { + updatedAttrs = { + version: attrs.version, + grantStrings: attrs.grantStrings, + }; + } - return role.update(updatedAttrs); - }); + return role.update(updatedAttrs); + } + ); // Other resources // host-catalog - this.get('/host-catalogs', ({ hostCatalogs }, { queryParams: { scope_id: scopeId } }) => { - return hostCatalogs.where({ scopeId }); - }); + this.get( + '/host-catalogs', + ({ hostCatalogs }, { queryParams: { scope_id: scopeId } }) => { + return hostCatalogs.where({ scopeId }); + } + ); this.post('/host-catalogs'); this.get('/host-catalogs/:id'); this.patch('/host-catalogs/:id'); @@ -232,9 +252,12 @@ export default function() { // host - this.get('/hosts', function ({ hosts }, { queryParams: { host_catalog_id: hostCatalogId } }) { - return hosts.where({ hostCatalogId }); - }); + this.get( + '/hosts', + function ({ hosts }, { queryParams: { host_catalog_id: hostCatalogId } }) { + return hosts.where({ hostCatalogId }); + } + ); this.post('/hosts', function ({ hostCatalogs, hosts }) { const attrs = this.normalizedRequestAttrs(); const hostCatalog = hostCatalogs.find(attrs.hostCatalogId); @@ -247,9 +270,15 @@ export default function() { // host-set - this.get('/host-sets', function ({ hostSets }, { queryParams: { host_catalog_id: hostCatalogId } }) { - return hostSets.where({ hostCatalogId }); - }); + this.get( + '/host-sets', + function ( + { hostSets }, + { queryParams: { host_catalog_id: hostCatalogId } } + ) { + return hostSets.where({ hostCatalogId }); + } + ); this.post('/host-sets', function ({ hostCatalogs, hostSets }) { const attrs = this.normalizedRequestAttrs(); const hostCatalog = hostCatalogs.find(attrs.hostCatalogId); @@ -259,49 +288,57 @@ export default function() { this.get('/host-sets/:id'); this.patch('/host-sets/:id'); this.del('/host-sets/:id'); - this.post('/host-sets/:idMethod', function ({ hostSets }, { params: { idMethod } }) { - const attrs = this.normalizedRequestAttrs(); - const id = idMethod.split(':')[0]; - const method = idMethod.split(':')[1]; - const hostSet = hostSets.find(id); - const updatedAttrs = { - version: attrs.version, - hostIds: hostSet.hostIds - } + this.post( + '/host-sets/:idMethod', + function ({ hostSets }, { params: { idMethod } }) { + const attrs = this.normalizedRequestAttrs(); + const id = idMethod.split(':')[0]; + const method = idMethod.split(':')[1]; + const hostSet = hostSets.find(id); + const updatedAttrs = { + version: attrs.version, + hostIds: hostSet.hostIds, + }; - // If adding hosts, push them into the array - if(method === 'add-hosts') { - attrs.hostIds.forEach(id => { - if(!updatedAttrs.hostIds.includes(id)) { - updatedAttrs.hostIds.push(id); - } - }) - } + // If adding hosts, push them into the array + if (method === 'add-hosts') { + attrs.hostIds.forEach((id) => { + if (!updatedAttrs.hostIds.includes(id)) { + updatedAttrs.hostIds.push(id); + } + }); + } - // If deleting hosts, filter them out of the array - if (method === 'remove-hosts') { - updatedAttrs.hostIds = updatedAttrs.hostIds.filter(id => { - return !attrs.hostIds.includes(id); - }); - } + // If deleting hosts, filter them out of the array + if (method === 'remove-hosts') { + updatedAttrs.hostIds = updatedAttrs.hostIds.filter((id) => { + return !attrs.hostIds.includes(id); + }); + } - return hostSet.update(updatedAttrs); - }); + return hostSet.update(updatedAttrs); + } + ); // target - this.get('/targets', function ({ targets }, { queryParams: { scope_id, recursive } }) { - if (recursive && scope_id === 'global') { - return targets.all(); - } else if (recursive) { - return targets.where(target => { - const targetModel = targets.find(target.id); - return (target.scopeId === scope_id) - || (targetModel?.scope?.scope?.id === scope_id) - }); + this.get( + '/targets', + function ({ targets }, { queryParams: { scope_id, recursive } }) { + if (recursive && scope_id === 'global') { + return targets.all(); + } else if (recursive) { + return targets.where((target) => { + const targetModel = targets.find(target.id); + return ( + target.scopeId === scope_id || + targetModel?.scope?.scope?.id === scope_id + ); + }); + } + return targets.where((target) => target.scopeId === scope_id); } - return targets.where(target => target.scopeId === scope_id); - }); + ); this.post('/targets', function ({ targets }) { const attrs = this.normalizedRequestAttrs(); return targets.create(attrs); @@ -309,83 +346,93 @@ export default function() { this.get('/targets/:id'); this.patch('/targets/:id'); this.del('/targets/:id'); - this.post('/targets/:idMethod', function ({ targets }, { params: { idMethod } }) { - const attrs = this.normalizedRequestAttrs(); - const id = idMethod.split(':')[0]; - const method = idMethod.split(':')[1]; - const target = targets.find(id); - const updatedAttrs = { - version: attrs.version, - hostSetIds: target.hostSetIds - }; - // If adding host sets, push them into the array - if (method === 'add-host-sets') { - attrs.hostSetIds.forEach(id => { - if (!updatedAttrs.hostSetIds.includes(id)) { - updatedAttrs.hostSetIds.push(id); - } - }); + this.post( + '/targets/:idMethod', + function ({ targets }, { params: { idMethod } }) { + const attrs = this.normalizedRequestAttrs(); + const id = idMethod.split(':')[0]; + const method = idMethod.split(':')[1]; + const target = targets.find(id); + const updatedAttrs = { + version: attrs.version, + hostSetIds: target.hostSetIds, + }; + // If adding host sets, push them into the array + if (method === 'add-host-sets') { + attrs.hostSetIds.forEach((id) => { + if (!updatedAttrs.hostSetIds.includes(id)) { + updatedAttrs.hostSetIds.push(id); + } + }); + } + // If deleting host sets, filter them out of the array + if (method === 'remove-host-sets') { + updatedAttrs.hostSetIds = updatedAttrs.hostSetIds.filter((id) => { + return !attrs.hostSetIds.includes(id); + }); + } + return target.update(updatedAttrs); } - // If deleting host sets, filter them out of the array - if (method === 'remove-host-sets') { - updatedAttrs.hostSetIds = updatedAttrs.hostSetIds.filter(id => { - return !attrs.hostSetIds.includes(id); - }); - } - return target.update(updatedAttrs); - }); + ); // session - this.get('/sessions', function ({ sessions }, { queryParams: { scope_id, recursive } }) { - // To simulate changes to `session.status` that may occur in the backend, - // we quietly randomize the value of the field on GET. - // To populate sessions for logged in user, - // update alternate sessions to auth user. - // But only if not in testing mode. - // In tests, we need deterministic statuses. - if (!Ember.testing) { - sessions.all() - .models - .forEach(session => { + this.get( + '/sessions', + function ({ sessions }, { queryParams: { scope_id, recursive } }) { + // To simulate changes to `session.status` that may occur in the backend, + // we quietly randomize the value of the field on GET. + // To populate sessions for logged in user, + // update alternate sessions to auth user. + // But only if not in testing mode. + // In tests, we need deterministic statuses. + if (!Ember.testing) { + sessions.all().models.forEach((session) => { session.update({ - status: pickRandomStatusString() - }); - if(session.id.split('-').pop() % 2) session.update({ - userId: 'authenticateduser' + status: pickRandomStatusString(), }); + if (session.id.split('-').pop() % 2) + session.update({ + userId: 'authenticateduser', + }); }); + } + if (recursive && scope_id === 'global') { + return sessions.all(); + } else if (recursive) { + return sessions.where((session) => { + const sessionModel = sessions.find(session.id); + return ( + session.scopeId === scope_id || + sessionModel?.scope?.scope?.id === scope_id + ); + }); + } + return sessions.where((session) => session.scopeId === scope_id); } - if (recursive && scope_id === 'global') { - return sessions.all(); - } else if (recursive) { - return sessions.where(session => { - const sessionModel = sessions.find(session.id); - return (session.scopeId === scope_id) - || (sessionModel?.scope?.scope?.id === scope_id) - }); - } - return sessions.where(session => session.scopeId === scope_id); - }); + ); this.get('/sessions/:id', function ({ sessions }, { params: { id } }) { const session = sessions.find(id); return session.update({ - status: pickRandomStatusString() + status: pickRandomStatusString(), }); }); - this.post('/sessions/:idMethod', function ({ sessions }, { params: { idMethod } }) { - const attrs = this.normalizedRequestAttrs(); - const id = idMethod.split(':')[0]; - const method = idMethod.split(':')[1]; - const session = sessions.find(id); - const updatedAttrs = { - version: attrs.version - }; - if (method === 'cancel') { - updatedAttrs.status = 'canceling'; + this.post( + '/sessions/:idMethod', + function ({ sessions }, { params: { idMethod } }) { + const attrs = this.normalizedRequestAttrs(); + const id = idMethod.split(':')[0]; + const method = idMethod.split(':')[1]; + const session = sessions.find(id); + const updatedAttrs = { + version: attrs.version, + }; + if (method === 'cancel') { + updatedAttrs.status = 'canceling'; + } + return session.update(updatedAttrs); } - return session.update(updatedAttrs); - }); + ); // auth-tokens diff --git a/addons/api/mirage/factories/auth-method.js b/addons/api/mirage/factories/auth-method.js index ec2c62064..ed8ca6947 100644 --- a/addons/api/mirage/factories/auth-method.js +++ b/addons/api/mirage/factories/auth-method.js @@ -18,11 +18,10 @@ export default factory.extend({ withAccountsAndUsers: trait({ afterCreate(authMethod, server) { const { scope } = authMethod; - server.createList('user', 5, { scope }).map(user => { + server.createList('user', 5, { scope }).map((user) => { const { id } = server.create('account', { scope, authMethod }); user.update({ accountIds: [id] }); }); - } - }) - + }, + }), }); diff --git a/addons/api/mirage/factories/group.js b/addons/api/mirage/factories/group.js index 9531de4f8..79b28cc2e 100644 --- a/addons/api/mirage/factories/group.js +++ b/addons/api/mirage/factories/group.js @@ -13,6 +13,6 @@ export default factory.extend({ const scope = group.scope; const members = server.createList('user', 2, { scope }); group.update({ members }); - } - }) + }, + }), }); diff --git a/addons/api/mirage/factories/host-catalog.js b/addons/api/mirage/factories/host-catalog.js index 1eaed0433..ffb849668 100644 --- a/addons/api/mirage/factories/host-catalog.js +++ b/addons/api/mirage/factories/host-catalog.js @@ -2,13 +2,11 @@ import factory from '../generated/factories/host-catalog'; import { trait } from 'ember-cli-mirage'; export default factory.extend({ - withChildren: trait({ afterCreate(hostCatalog, server) { const { scope } = hostCatalog; const hosts = server.createList('host', 10, { scope, hostCatalog }); server.createList('host-set', 3, { scope, hostCatalog, hosts }); - } - }) - + }, + }), }); diff --git a/addons/api/mirage/factories/host-set.js b/addons/api/mirage/factories/host-set.js index ad9ae1fa1..a3c053fda 100644 --- a/addons/api/mirage/factories/host-set.js +++ b/addons/api/mirage/factories/host-set.js @@ -1,5 +1,5 @@ import factory from '../generated/factories/host-set'; export default factory.extend({ - id: (i) => `host-set-id-${i}` + id: (i) => `host-set-id-${i}`, }); diff --git a/addons/api/mirage/factories/host.js b/addons/api/mirage/factories/host.js index f322cb4d4..c797e8a64 100644 --- a/addons/api/mirage/factories/host.js +++ b/addons/api/mirage/factories/host.js @@ -1,5 +1,5 @@ import factory from '../generated/factories/host'; export default factory.extend({ - id: (i) => `host-id-${i}` + id: (i) => `host-id-${i}`, }); diff --git a/addons/api/mirage/factories/role.js b/addons/api/mirage/factories/role.js index aa4356af7..103a3725b 100644 --- a/addons/api/mirage/factories/role.js +++ b/addons/api/mirage/factories/role.js @@ -2,11 +2,10 @@ import factory from '../generated/factories/role'; import { trait } from 'ember-cli-mirage'; export default factory.extend({ - // eslint-disable-next-line ember/avoid-leaking-state-in-ember-objects grant_strings: () => [ 'id=*;action=*', - 'id=*;type=host-catalog;actions=create,read' + 'id=*;type=host-catalog;actions=create,read', ], /** @@ -18,15 +17,16 @@ export default factory.extend({ const users = server.createList('user', 2, { scope }); const groups = server.createList('group', 2, { scope }); role.update({ users, groups }); - } + }, }), /** * Set the grant scope ID to match the scope ID. */ afterCreate(role) { - const { scope: { id } } = role; + const { + scope: { id }, + } = role; role.update({ grant_scope_id: id }); - } - + }, }); diff --git a/addons/api/mirage/factories/scope.js b/addons/api/mirage/factories/scope.js index a14dbc719..fe41f3866 100644 --- a/addons/api/mirage/factories/scope.js +++ b/addons/api/mirage/factories/scope.js @@ -2,7 +2,6 @@ import factory from '../generated/factories/scope'; import { trait } from 'ember-cli-mirage'; export default factory.extend({ - type: 'global', /** @@ -18,18 +17,22 @@ export default factory.extend({ withChildren: trait({ afterCreate(record, server) { if (record.type === 'global') { - server.createList('scope', 1, { - type: 'org', - scope: { id: record.id, type: record.type } - }, 'withChildren'); + server.createList( + 'scope', + 1, + { + type: 'org', + scope: { id: record.id, type: record.type }, + }, + 'withChildren' + ); } if (record.type === 'org') { server.createList('scope', 3, { type: 'project', - scope: { id: record.id, type: record.type } + scope: { id: record.id, type: record.type }, }); } - } - }) - + }, + }), }); diff --git a/addons/api/mirage/factories/session.js b/addons/api/mirage/factories/session.js index f30301c5c..a581fa9e4 100644 --- a/addons/api/mirage/factories/session.js +++ b/addons/api/mirage/factories/session.js @@ -2,17 +2,11 @@ import factory from '../generated/factories/session'; import { trait } from 'ember-cli-mirage'; import { random } from 'faker'; -const statusStrings = [ - 'pending', - 'active', - 'canceling', - 'terminated' -]; +const statusStrings = ['pending', 'active', 'canceling', 'terminated']; export const pickRandomStatusString = () => random.arrayElement(statusStrings); export default factory.extend({ - id: (i) => `session-id-${i}`, status: pickRandomStatusString, @@ -26,7 +20,8 @@ export default factory.extend({ const scopeId = record.scopeId; if (record.scope.type === 'project') { const orgScopeId = record.scope?.scope.id; - const user = server.schema.users.where({ scopeId: orgScopeId }).models[0]; + const user = server.schema.users.where({ scopeId: orgScopeId }) + .models[0]; if (user) record.update({ user }); } const target = server.schema.targets.where({ scopeId }).models[0]; @@ -39,7 +34,6 @@ export default factory.extend({ if (host) record.update({ host }); } } - } - }) - + }, + }), }); diff --git a/addons/api/mirage/factories/target.js b/addons/api/mirage/factories/target.js index 4f34cc459..2c00b6639 100644 --- a/addons/api/mirage/factories/target.js +++ b/addons/api/mirage/factories/target.js @@ -6,7 +6,6 @@ const randomBoolean = (chance = 0.5) => Math.random() < chance; const hostSetChance = 0.3; export default factory.extend({ - /** * -1 means "unlimited" and we want to generate these on occassion. */ @@ -19,8 +18,8 @@ export default factory.extend({ if (target.type === 'tcp') { target.update({ attributes: { - default_port: random.number() - } + default_port: random.number(), + }, }); } }, @@ -37,10 +36,9 @@ export default factory.extend({ // expect at this level of abstraction, but appears to be a serialized // representation of the model instance. It's very confusing since // the result set of `where` _is a collection of model instances_. - .where(hostSet => hostSet.scopeId === target.scope.id).models - .filter(() => randomBoolean(hostSetChance)); - target.update({hostSets: randomlySelectedHostSets}); - } - }) - + .where((hostSet) => hostSet.scopeId === target.scope.id) + .models.filter(() => randomBoolean(hostSetChance)); + target.update({ hostSets: randomlySelectedHostSets }); + }, + }), }); diff --git a/addons/api/mirage/factories/user.js b/addons/api/mirage/factories/user.js index 42bccd33d..39c5abf96 100644 --- a/addons/api/mirage/factories/user.js +++ b/addons/api/mirage/factories/user.js @@ -1,5 +1,5 @@ import factory from '../generated/factories/user'; export default factory.extend({ - id: (i) => `user-${i}` + id: (i) => `user-${i}`, }); diff --git a/addons/api/mirage/generated/factories/account.js b/addons/api/mirage/generated/factories/account.js index a66184e1f..c659af6a2 100644 --- a/addons/api/mirage/generated/factories/account.js +++ b/addons/api/mirage/generated/factories/account.js @@ -5,7 +5,6 @@ import { random, date } from 'faker'; * GeneratedAccountFactory */ export default Factory.extend({ - type: 'password', name: () => random.words(), description: () => random.words(), @@ -13,5 +12,4 @@ export default Factory.extend({ updated_time: () => date.recent(), version: () => random.number(), attributes: () => ({ login_name: random.words() }), - }); diff --git a/addons/api/mirage/generated/factories/auth-method.js b/addons/api/mirage/generated/factories/auth-method.js index d76245946..26af0cc7f 100644 --- a/addons/api/mirage/generated/factories/auth-method.js +++ b/addons/api/mirage/generated/factories/auth-method.js @@ -5,12 +5,10 @@ import { random, date } from 'faker'; * GeneratedAuthMethodModelFactory */ export default Factory.extend({ - type: 'password', name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), disabled: () => random.boolean(), - }); diff --git a/addons/api/mirage/generated/factories/group.js b/addons/api/mirage/generated/factories/group.js index 7c78ee7ec..1f0a07f7b 100644 --- a/addons/api/mirage/generated/factories/group.js +++ b/addons/api/mirage/generated/factories/group.js @@ -6,11 +6,9 @@ import { random, date } from 'faker'; * Group contains all fields related to a Group resource */ export default Factory.extend({ - name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), disabled: () => random.boolean(), - }); diff --git a/addons/api/mirage/generated/factories/host-catalog.js b/addons/api/mirage/generated/factories/host-catalog.js index daf2d356f..83cfe556e 100644 --- a/addons/api/mirage/generated/factories/host-catalog.js +++ b/addons/api/mirage/generated/factories/host-catalog.js @@ -5,12 +5,10 @@ import { random, date } from 'faker'; * GeneratedHostCatalogModelFactory */ export default Factory.extend({ - type: 'static', name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), disabled: () => random.boolean(), - }); diff --git a/addons/api/mirage/generated/factories/host-set.js b/addons/api/mirage/generated/factories/host-set.js index 95636bda0..9f69c7318 100644 --- a/addons/api/mirage/generated/factories/host-set.js +++ b/addons/api/mirage/generated/factories/host-set.js @@ -5,7 +5,6 @@ import { random, date } from 'faker'; * GeneratedHostSetModelFactory */ export default Factory.extend({ - type: 'static', name: () => random.words(), description: () => random.words(), @@ -13,5 +12,4 @@ export default Factory.extend({ updated_time: () => date.recent(), version: () => random.number(), size: () => random.number(), - }); diff --git a/addons/api/mirage/generated/factories/host.js b/addons/api/mirage/generated/factories/host.js index e6fccf602..adfb886be 100644 --- a/addons/api/mirage/generated/factories/host.js +++ b/addons/api/mirage/generated/factories/host.js @@ -5,13 +5,13 @@ import { random, date, internet } from 'faker'; * GeneratedHostModelFactory */ export default Factory.extend({ - type: 'static', name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), version: () => random.number(), - attributes: () => { return { address: internet.ipv6() } }, - + attributes: () => { + return { address: internet.ipv6() }; + }, }); diff --git a/addons/api/mirage/generated/factories/org.js b/addons/api/mirage/generated/factories/org.js index 81ee23629..cc1d6200b 100644 --- a/addons/api/mirage/generated/factories/org.js +++ b/addons/api/mirage/generated/factories/org.js @@ -6,10 +6,8 @@ import { random, date } from 'faker'; * */ export default Factory.extend({ - name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), - }); diff --git a/addons/api/mirage/generated/factories/project.js b/addons/api/mirage/generated/factories/project.js index 69054217d..3f2cca936 100644 --- a/addons/api/mirage/generated/factories/project.js +++ b/addons/api/mirage/generated/factories/project.js @@ -6,11 +6,9 @@ import { random, date } from 'faker'; * Project contains all fields related to a Project resource */ export default Factory.extend({ - name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), disabled: () => random.boolean(), - }); diff --git a/addons/api/mirage/generated/factories/role.js b/addons/api/mirage/generated/factories/role.js index 13e83aad3..fec661f1a 100644 --- a/addons/api/mirage/generated/factories/role.js +++ b/addons/api/mirage/generated/factories/role.js @@ -6,12 +6,10 @@ import { random, date } from 'faker'; * Role contains all field related to a Role resource */ export default Factory.extend({ - name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), disabled: () => random.boolean(), version: () => random.number(), - }); diff --git a/addons/api/mirage/generated/factories/scope.js b/addons/api/mirage/generated/factories/scope.js index cc574d3cd..b5c5ca10f 100644 --- a/addons/api/mirage/generated/factories/scope.js +++ b/addons/api/mirage/generated/factories/scope.js @@ -5,11 +5,9 @@ import { random, date } from 'faker'; * GeneratedScopeModelFactory */ export default Factory.extend({ - name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), disabled: () => random.boolean(), - }); diff --git a/addons/api/mirage/generated/factories/session.js b/addons/api/mirage/generated/factories/session.js index 25aca3759..638580868 100644 --- a/addons/api/mirage/generated/factories/session.js +++ b/addons/api/mirage/generated/factories/session.js @@ -5,10 +5,8 @@ import { random, date } from 'faker'; * GeneratedSessionModelFactory */ export default Factory.extend({ - type: 'tcp', created_time: () => date.recent(), updated_time: () => date.recent(), version: () => random.number(), - }); diff --git a/addons/api/mirage/generated/factories/target.js b/addons/api/mirage/generated/factories/target.js index 5ce21adeb..82eb8769c 100644 --- a/addons/api/mirage/generated/factories/target.js +++ b/addons/api/mirage/generated/factories/target.js @@ -5,7 +5,6 @@ import { random, date } from 'faker'; * GeneratedTargetModelFactory */ export default Factory.extend({ - type: 'tcp', name: () => random.words(), session_max_seconds: () => random.number(), @@ -15,5 +14,4 @@ export default Factory.extend({ updated_time: () => date.recent(), disabled: () => random.boolean(), version: () => random.number(), - }); diff --git a/addons/api/mirage/generated/factories/user.js b/addons/api/mirage/generated/factories/user.js index 3934bc7e9..bdf283e45 100644 --- a/addons/api/mirage/generated/factories/user.js +++ b/addons/api/mirage/generated/factories/user.js @@ -6,11 +6,9 @@ import { random, date } from 'faker'; * User contains all fields related to a User resource */ export default Factory.extend({ - name: () => random.words(), description: () => random.words(), created_time: () => date.recent(), updated_time: () => date.recent(), disabled: () => random.boolean(), - }); diff --git a/addons/api/mirage/models/account.js b/addons/api/mirage/models/account.js index e6d3e303c..8f39ad219 100644 --- a/addons/api/mirage/models/account.js +++ b/addons/api/mirage/models/account.js @@ -1,8 +1,6 @@ import { Model, belongsTo } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), - authMethod: belongsTo() - + authMethod: belongsTo(), }); diff --git a/addons/api/mirage/models/auth-method.js b/addons/api/mirage/models/auth-method.js index 08b1f5ad3..7faa2b5a2 100644 --- a/addons/api/mirage/models/auth-method.js +++ b/addons/api/mirage/models/auth-method.js @@ -1,7 +1,5 @@ import { Model, belongsTo } from 'ember-cli-mirage'; export default Model.extend({ - - scope: belongsTo() - + scope: belongsTo(), }); diff --git a/addons/api/mirage/models/group.js b/addons/api/mirage/models/group.js index 3d73f3d73..67446a6d6 100644 --- a/addons/api/mirage/models/group.js +++ b/addons/api/mirage/models/group.js @@ -1,8 +1,6 @@ import { Model, belongsTo, hasMany } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), - members: hasMany('user') - + members: hasMany('user'), }); diff --git a/addons/api/mirage/models/host-catalog.js b/addons/api/mirage/models/host-catalog.js index 8c2757e71..0f03cb6ef 100644 --- a/addons/api/mirage/models/host-catalog.js +++ b/addons/api/mirage/models/host-catalog.js @@ -1,8 +1,6 @@ import { Model, belongsTo, hasMany } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), - hostSets: hasMany() - + hostSets: hasMany(), }); diff --git a/addons/api/mirage/models/host-set.js b/addons/api/mirage/models/host-set.js index 5a579e119..645c144ff 100644 --- a/addons/api/mirage/models/host-set.js +++ b/addons/api/mirage/models/host-set.js @@ -1,10 +1,8 @@ import { Model, belongsTo, hasMany } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), target: belongsTo(), hostCatalog: belongsTo(), - hosts: hasMany() - + hosts: hasMany(), }); diff --git a/addons/api/mirage/models/host.js b/addons/api/mirage/models/host.js index b9a941a4f..88d9026e8 100644 --- a/addons/api/mirage/models/host.js +++ b/addons/api/mirage/models/host.js @@ -1,8 +1,6 @@ import { Model, belongsTo } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), - hostCatalog: belongsTo() - + hostCatalog: belongsTo(), }); diff --git a/addons/api/mirage/models/role.js b/addons/api/mirage/models/role.js index 744d1025a..c256df5fc 100644 --- a/addons/api/mirage/models/role.js +++ b/addons/api/mirage/models/role.js @@ -1,9 +1,7 @@ import { Model, belongsTo, hasMany } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), users: hasMany(), - groups: hasMany() - + groups: hasMany(), }); diff --git a/addons/api/mirage/models/session.js b/addons/api/mirage/models/session.js index 91a4da594..eb036d6b8 100644 --- a/addons/api/mirage/models/session.js +++ b/addons/api/mirage/models/session.js @@ -1,11 +1,9 @@ import { Model, belongsTo } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), user: belongsTo(), target: belongsTo(), host: belongsTo(), hostSet: belongsTo(), - }); diff --git a/addons/api/mirage/models/target.js b/addons/api/mirage/models/target.js index 8c2757e71..0f03cb6ef 100644 --- a/addons/api/mirage/models/target.js +++ b/addons/api/mirage/models/target.js @@ -1,8 +1,6 @@ import { Model, belongsTo, hasMany } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), - hostSets: hasMany() - + hostSets: hasMany(), }); diff --git a/addons/api/mirage/models/user.js b/addons/api/mirage/models/user.js index 45cf14952..d3eb79bed 100644 --- a/addons/api/mirage/models/user.js +++ b/addons/api/mirage/models/user.js @@ -1,8 +1,6 @@ import { Model, belongsTo, hasMany } from 'ember-cli-mirage'; export default Model.extend({ - scope: belongsTo(), - accounts: hasMany('account') - + accounts: hasMany('account'), }); diff --git a/addons/api/mirage/scenarios/default.js b/addons/api/mirage/scenarios/default.js index 5f1765a22..fe5297ea2 100644 --- a/addons/api/mirage/scenarios/default.js +++ b/addons/api/mirage/scenarios/default.js @@ -1,23 +1,37 @@ -export default function(server) { - +export default function (server) { // Scope resources // creates a global scope const globalScope = server.create('scope', { id: 'global', type: 'global', - name: 'Global' + name: 'Global', }); - const orgScope = server.createList('scope', 3, { - type: 'org', - scope: { id: globalScope.id, type: globalScope.type } - }, 'withChildren')[0]; + const orgScope = server.createList( + 'scope', + 3, + { + type: 'org', + scope: { id: globalScope.id, type: globalScope.type }, + }, + 'withChildren' + )[0]; server.create('user', { id: 'authenticateduser' }); // Auth - server.createList('auth-method', 2, { scope: globalScope }, 'withAccountsAndUsers'); - server.createList('auth-method', 3, { scope: orgScope }, 'withAccountsAndUsers'); + server.createList( + 'auth-method', + 1, + { scope: globalScope }, + 'withAccountsAndUsers' + ); + server.createList( + 'auth-method', + 3, + { scope: orgScope }, + 'withAccountsAndUsers' + ); // Groups and Users server.createList('group', 1, { scope: globalScope }, 'withMembers'); @@ -27,7 +41,7 @@ export default function(server) { server.createList('role', 5, { scope: orgScope }, 'withPrincipals'); // Other resources - server.schema.scopes.where({type: 'project'}).models.forEach(scope => { + server.schema.scopes.where({ type: 'project' }).models.forEach((scope) => { server.createList('host-catalog', 2, { scope }, 'withChildren'); server.createList('target', 2, { scope }, 'withRandomHostSets'); server.createList('session', 4, { scope }, 'withAssociations'); diff --git a/addons/api/mirage/scenarios/ipc.js b/addons/api/mirage/scenarios/ipc.js index f8b7e524a..bf6d1947c 100644 --- a/addons/api/mirage/scenarios/ipc.js +++ b/addons/api/mirage/scenarios/ipc.js @@ -2,7 +2,7 @@ import Ember from 'ember'; import config from 'ember-get-config'; import { random } from 'faker'; -export default function initializeMockIPC (server) { +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 @@ -51,13 +51,13 @@ export default function initializeMockIPC (server) { target, userId: 'authenticateduser', type, - created_time: new Date().toISOString() + created_time: new Date().toISOString(), }); return { address: window.location.hostname, port: random.number(), protocol: type, - session_id: newSession.id + session_id: newSession.id, }; } } @@ -80,5 +80,4 @@ export default function initializeMockIPC (server) { } }); } - } diff --git a/addons/api/mirage/serializers/account.js b/addons/api/mirage/serializers/account.js index 85d38851b..3ceb16738 100644 --- a/addons/api/mirage/serializers/account.js +++ b/addons/api/mirage/serializers/account.js @@ -4,9 +4,12 @@ export default ApplicationSerializer.extend({ modelName: 'account', _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); json.auth_method_id = model.authMethodId; delete json.attributes?.password; return json; - } + }, }); diff --git a/addons/api/mirage/serializers/application.js b/addons/api/mirage/serializers/application.js index 7bfbc7cd7..453e11e21 100644 --- a/addons/api/mirage/serializers/application.js +++ b/addons/api/mirage/serializers/application.js @@ -6,7 +6,6 @@ import { isArray } from '@ember/array'; * Manages serialization/normalization of data into and out of the mock API. */ export default RestSerializer.extend({ - // =attributes /** @@ -45,7 +44,7 @@ export default RestSerializer.extend({ serialize() { let json = RestSerializer.prototype.serialize.apply(this, arguments); // If array, root it under a standard `items` key - if (isArray(json)) json = {items: json}; + if (isArray(json)) json = { items: json }; return json; }, @@ -59,7 +58,7 @@ export default RestSerializer.extend({ if (model.scope) { json.scope = { id: model.scope.id, - type: model.scope.type + type: model.scope.type, }; } return json; @@ -79,6 +78,5 @@ export default RestSerializer.extend({ } const value = RestSerializer.prototype.normalize.apply(this, [newJSON]); return value; - } - + }, }); diff --git a/addons/api/mirage/serializers/auth-method.js b/addons/api/mirage/serializers/auth-method.js index cabe9ee7b..4bc89ef3b 100644 --- a/addons/api/mirage/serializers/auth-method.js +++ b/addons/api/mirage/serializers/auth-method.js @@ -1,5 +1,5 @@ import ApplicationSerializer from './application'; export default ApplicationSerializer.extend({ - modelName: 'auth-method' + modelName: 'auth-method', }); diff --git a/addons/api/mirage/serializers/group.js b/addons/api/mirage/serializers/group.js index 1ea1605f7..3e879dfdb 100644 --- a/addons/api/mirage/serializers/group.js +++ b/addons/api/mirage/serializers/group.js @@ -11,9 +11,11 @@ export default ApplicationSerializer.extend({ }, _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); if (model.memberIds.length) json.member_ids = model.memberIds; return json; - } - + }, }); diff --git a/addons/api/mirage/serializers/host-set.js b/addons/api/mirage/serializers/host-set.js index 7acf251b3..77cd5aa40 100644 --- a/addons/api/mirage/serializers/host-set.js +++ b/addons/api/mirage/serializers/host-set.js @@ -11,12 +11,14 @@ export default ApplicationSerializer.extend({ }, _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); json.host_catalog_id = model.hostCatalogId; if (model.hostIds?.length) { json.host_ids = model.hostIds; } return json; - } - + }, }); diff --git a/addons/api/mirage/serializers/host.js b/addons/api/mirage/serializers/host.js index ccd3994ca..829b4476b 100644 --- a/addons/api/mirage/serializers/host.js +++ b/addons/api/mirage/serializers/host.js @@ -1,5 +1,5 @@ import ApplicationSerializer from './application'; export default ApplicationSerializer.extend({ - modelName: 'host' + modelName: 'host', }); diff --git a/addons/api/mirage/serializers/role.js b/addons/api/mirage/serializers/role.js index 73dec3023..db04fe328 100644 --- a/addons/api/mirage/serializers/role.js +++ b/addons/api/mirage/serializers/role.js @@ -4,23 +4,26 @@ export default ApplicationSerializer.extend({ modelName: 'role', _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); - const serializedUsers = model.users.models.map(user => ({ + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); + const serializedUsers = model.users.models.map((user) => ({ scope_id: model.scope.id, id: user.id, - type: 'user' + type: 'user', })); - const serializedGroups = model.groups.models.map(group => ({ + const serializedGroups = model.groups.models.map((group) => ({ scope_id: model.scope.id, id: group.id, - type: 'group' + type: 'group', })); - json.principals = [ ...serializedUsers, ...serializedGroups ]; + json.principals = [...serializedUsers, ...serializedGroups]; if (!json.principals.length) delete json.principals; // default grant scope if (!json.grant_scope_id) json.grant_scope_id = json.scope.id; return json; - } + }, }); diff --git a/addons/api/mirage/serializers/scope.js b/addons/api/mirage/serializers/scope.js index bfb33f398..b6989ad9e 100644 --- a/addons/api/mirage/serializers/scope.js +++ b/addons/api/mirage/serializers/scope.js @@ -1,5 +1,5 @@ import ApplicationSerializer from './application'; export default ApplicationSerializer.extend({ - modelName: 'scope' + modelName: 'scope', }); diff --git a/addons/api/mirage/serializers/session.js b/addons/api/mirage/serializers/session.js index 3e14a23e6..347e713c2 100644 --- a/addons/api/mirage/serializers/session.js +++ b/addons/api/mirage/serializers/session.js @@ -11,12 +11,14 @@ export default ApplicationSerializer.extend({ }, _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); json.user_id = model.userId; json.target_id = model.targetId; json.host_set_id = model.hostSetId; json.host_id = model.hostId; return json; - } - + }, }); diff --git a/addons/api/mirage/serializers/target.js b/addons/api/mirage/serializers/target.js index 2d2a0d974..006388773 100644 --- a/addons/api/mirage/serializers/target.js +++ b/addons/api/mirage/serializers/target.js @@ -11,16 +11,18 @@ export default ApplicationSerializer.extend({ }, _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); const { hostSets } = this.schema; if (model.hostSetIds?.length) { - json.host_sets = model.hostSetIds.map(host_set_id => { + json.host_sets = model.hostSetIds.map((host_set_id) => { const hostSet = hostSets.find(host_set_id); const host_catalog_id = hostSet?.hostCatalog?.id; return { id: host_set_id, host_catalog_id }; }); } return json; - } - + }, }); diff --git a/addons/api/mirage/serializers/user.js b/addons/api/mirage/serializers/user.js index 0ef9298f5..fe4c8084f 100644 --- a/addons/api/mirage/serializers/user.js +++ b/addons/api/mirage/serializers/user.js @@ -11,8 +11,11 @@ export default ApplicationSerializer.extend({ }, _hashForModel(model) { - const json = ApplicationSerializer.prototype._hashForModel.apply(this, arguments); + const json = ApplicationSerializer.prototype._hashForModel.apply( + this, + arguments + ); if (model.accountIds.length) json.account_ids = model.accountIds; return json; - } + }, }); diff --git a/addons/api/package.json b/addons/api/package.json index ed6925b35..00f8962a4 100644 --- a/addons/api/package.json +++ b/addons/api/package.json @@ -10,56 +10,65 @@ "scripts": { "build:development": "ember build", "build": "ember build --environment=production", - "lint": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*", + "lint": "npm-run-all --aggregate-output --continue-on-error --parallel 'lint:!(fix)'", + "lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix", + "lint:hbs": "ember-template-lint .", + "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint .", + "lint:js:fix": "eslint . --fix", "format": "npm run format:js", - "format:js": "prettier --write '{addon,app,config,stories,tests}/**/*.js' *.js", + "format:js": "prettier --write '{addon,app,config,stories,tests,mirage}/**/*.js' *.js", "start": "ember serve", "test": "ember test", "test:ember-compatibility": "ember try:each", "doc:toc": "doctoc README.md" }, "dependencies": { - "ember-cli-babel": "^7.21.0", - "ember-cli-htmlbars": "^5.2.0", + "ember-cli-babel": "^7.23.0", + "ember-cli-htmlbars": "^5.3.1", + "ember-cli-mirage": "^1.1.8", "ember-data": "^3.20.0", "ember-data-model-fragments": "5.0.0-beta.0", - "ember-fetch": "^8.0.1", - "ember-cli-mirage": "^1.1.8" + "ember-fetch": "^8.0.1" }, "devDependencies": { - "@ember/optional-features": "^1.3.0", - "@glimmer/component": "^1.0.1", - "@glimmer/tracking": "^1.0.0", + "@ember/optional-features": "^2.0.0", + "@ember/test-helpers": "^2.1.4", + "@glimmer/component": "^1.0.3", + "@glimmer/tracking": "^1.0.3", "babel-eslint": "^10.1.0", "broccoli-asset-rev": "^3.0.0", "doctoc": "^1.4.0", - "ember-auto-import": "^1.6.0", - "ember-cli": "~3.20.2", + "ember-auto-import": "^1.10.1", + "ember-cli": "~3.24.0", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-inject-live-reload": "^2.0.2", "ember-cli-sri": "^2.1.1", - "ember-cli-uglify": "^3.0.0", + "ember-cli-terser": "^4.0.1", "ember-cli-update": "^0.54.6", "ember-copy": "^1.0.0", "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.1", + "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^0.1.6", - "ember-qunit": "^4.6.0", - "ember-resolver": "^8.0.0", - "ember-source": "~3.20.2", - "ember-source-channel-url": "^2.0.1", - "ember-template-lint": "^2.9.1", + "ember-page-title": "^6.0.3", + "ember-qunit": "^5.1.1", + "ember-resolver": "^8.0.2", + "ember-source": "~3.24.0", + "ember-source-channel-url": "^3.0.0", + "ember-template-lint": "^2.15.0", "ember-try": "^1.4.0", - "eslint": "^7.5.0", - "eslint-plugin-ember": "^8.9.1", + "eslint": "^7.17.0", + "eslint-config-prettier": "^7.1.0", + "eslint-plugin-ember": "^10.1.1", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", - "prettier": "^2.0.5", - "qunit-dom": "^1.2.0" + "prettier": "^2.2.1", + "qunit": "^2.13.0", + "qunit-dom": "^1.6.0" }, "engines": { "node": "10.* || >= 12" diff --git a/addons/api/tests/dummy/app/templates/application.hbs b/addons/api/tests/dummy/app/templates/application.hbs index f8bc38e7b..001b0153a 100644 --- a/addons/api/tests/dummy/app/templates/application.hbs +++ b/addons/api/tests/dummy/app/templates/application.hbs @@ -1,3 +1,5 @@ +{{page-title "Dummy"}} +

Welcome to Ember

{{outlet}} diff --git a/addons/api/tests/dummy/config/ember-cli-update.json b/addons/api/tests/dummy/config/ember-cli-update.json index 3c0c55fdb..ed4d5fc2d 100644 --- a/addons/api/tests/dummy/config/ember-cli-update.json +++ b/addons/api/tests/dummy/config/ember-cli-update.json @@ -3,7 +3,7 @@ "packages": [ { "name": "ember-cli", - "version": "3.20.2", + "version": "3.24.0", "blueprints": [ { "name": "addon", diff --git a/addons/api/tests/index.html b/addons/api/tests/index.html index 5209b8523..3eb848dbd 100644 --- a/addons/api/tests/index.html +++ b/addons/api/tests/index.html @@ -21,6 +21,13 @@ {{content-for "body"}} {{content-for "test-body"}} +
+
+
+
+
+
+ diff --git a/addons/api/tests/test-helper.js b/addons/api/tests/test-helper.js index 4eae06f81..4efd6e58a 100644 --- a/addons/api/tests/test-helper.js +++ b/addons/api/tests/test-helper.js @@ -1,8 +1,12 @@ import Application from 'dummy/app'; import config from 'dummy/config/environment'; +import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; setApplication(Application.create(config.APP)); +setup(QUnit.assert); + start(); diff --git a/addons/api/tests/unit/mixins/adapter-build-url-test.js b/addons/api/tests/unit/mixins/adapter-build-url-test.js index 49d49029a..796b6bed6 100644 --- a/addons/api/tests/unit/mixins/adapter-build-url-test.js +++ b/addons/api/tests/unit/mixins/adapter-build-url-test.js @@ -9,7 +9,7 @@ module('Unit | Mixin | build-url', function (hooks) { test('it does not interfere with basic URLs', function (assert) { assert.expect(1); - /* eslint-disable-next-line ember/no-new-mixins */ + /* eslint-disable-next-line ember/no-new-mixins, ember/no-classic-classes */ const Adapter = RESTAdapter.extend(AdapterBuildURLMixin); this.owner.register('adapter:adapter', Adapter); const adapter = this.owner.lookup('adapter:adapter'); @@ -19,7 +19,7 @@ module('Unit | Mixin | build-url', function (hooks) { test('it does not interfere with namespaced URLs', function (assert) { assert.expect(1); - /* eslint-disable-next-line ember/no-new-mixins */ + /* eslint-disable-next-line ember/no-new-mixins, ember/no-classic-classes */ const Adapter = RESTAdapter.extend(AdapterBuildURLMixin, { namespace: 'api/v1', }); @@ -31,7 +31,7 @@ module('Unit | Mixin | build-url', function (hooks) { test('it can prepend a prefix', function (assert) { assert.expect(1); - /* eslint-disable-next-line ember/no-new-mixins */ + /* eslint-disable-next-line ember/no-new-mixins, ember/no-classic-classes */ const Adapter = RESTAdapter.extend(AdapterBuildURLMixin, { urlPrefix() { return '/foo/bars'; @@ -45,7 +45,7 @@ module('Unit | Mixin | build-url', function (hooks) { test('it can append a suffix', function (assert) { assert.expect(1); - /* eslint-disable-next-line ember/no-new-mixins */ + /* eslint-disable-next-line ember/no-new-mixins, ember/no-classic-classes */ const Adapter = RESTAdapter.extend(AdapterBuildURLMixin, { urlSuffix() { return ':method'; diff --git a/addons/api/tests/unit/models/account-test.js b/addons/api/tests/unit/models/account-test.js index f937b3c26..33021e295 100644 --- a/addons/api/tests/unit/models/account-test.js +++ b/addons/api/tests/unit/models/account-test.js @@ -21,5 +21,4 @@ module('Unit | Model | account', function (hooks) { model.attributes.login_name = 'username'; assert.equal(model.username, 'username'); }); - }); diff --git a/addons/api/tests/unit/models/auth-token-test.js b/addons/api/tests/unit/models/auth-token-test.js index 1f0826b86..bf9809ee0 100644 --- a/addons/api/tests/unit/models/auth-token-test.js +++ b/addons/api/tests/unit/models/auth-token-test.js @@ -1,11 +1,11 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Model | auth token', function(hooks) { +module('Unit | Model | auth token', function (hooks) { setupTest(hooks); // Replace this with your real tests. - test('it exists', function(assert) { + test('it exists', function (assert) { let store = this.owner.lookup('service:store'); let model = store.createRecord('auth-token', {}); assert.ok(model); diff --git a/addons/api/tests/unit/models/host-set-test.js b/addons/api/tests/unit/models/host-set-test.js index c7228a81f..d3738fe5b 100644 --- a/addons/api/tests/unit/models/host-set-test.js +++ b/addons/api/tests/unit/models/host-set-test.js @@ -24,10 +24,7 @@ module('Unit | Model | host set', function (hooks) { attributes: { name: 'Host Set', description: 'Description', - host_ids: [ - {value: '1'}, - {value: '3'}, - ], + host_ids: [{ value: '1' }, { value: '3' }], version: 1, scope: { scope_id: 'o_1', @@ -58,10 +55,7 @@ module('Unit | Model | host set', function (hooks) { attributes: { name: 'Host Set', description: 'Description', - host_ids: [ - {value: '1'}, - {value: '3'}, - ], + host_ids: [{ value: '1' }, { value: '3' }], version: 1, scope: { scope_id: 'o_1', @@ -92,10 +86,7 @@ module('Unit | Model | host set', function (hooks) { attributes: { name: 'Host Set', description: 'Description', - host_ids: [ - {value: '1'}, - {value: '3'}, - ], + host_ids: [{ value: '1' }, { value: '3' }], version: 1, scope: { scope_id: 'o_1', @@ -126,10 +117,7 @@ module('Unit | Model | host set', function (hooks) { attributes: { name: 'Host Set', description: 'Description', - host_ids: [ - {value: '1'}, - {value: '3'}, - ], + host_ids: [{ value: '1' }, { value: '3' }], version: 1, scope: { scope_id: 'o_1', diff --git a/addons/api/tests/unit/models/session-test.js b/addons/api/tests/unit/models/session-test.js index 54c8b44cc..43cf7caf4 100644 --- a/addons/api/tests/unit/models/session-test.js +++ b/addons/api/tests/unit/models/session-test.js @@ -1,28 +1,28 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Model | session', function(hooks) { +module('Unit | Model | session', function (hooks) { setupTest(hooks); - test('it exists', function(assert) { + test('it exists', function (assert) { let store = this.owner.lookup('service:store'); let model = store.createRecord('session', {}); assert.ok(model); assert.notOk(model.isCancelable); }); - test('it allows cancellation of an active session', function(assert) { + test('it allows cancellation of an active session', function (assert) { let store = this.owner.lookup('service:store'); let model = store.createRecord('session', { - status: 'active' + status: 'active', }); assert.ok(model.isCancelable); }); - test('it allows cancellation of a pending session', function(assert) { + test('it allows cancellation of a pending session', function (assert) { let store = this.owner.lookup('service:store'); let model = store.createRecord('session', { - status: 'pending' + status: 'pending', }); assert.ok(model.isCancelable); }); @@ -31,7 +31,7 @@ module('Unit | Model | session', function(hooks) { assert.expect(2); let store = this.owner.lookup('service:store'); let model = store.createRecord('session', { - status: 'pending' + status: 'pending', }); assert.notOk(model.isActive); model.status = 'active'; @@ -42,7 +42,7 @@ module('Unit | Model | session', function(hooks) { assert.expect(2); let store = this.owner.lookup('service:store'); let model = store.createRecord('session', { - status: 'active' + status: 'active', }); assert.notOk(model.isPending); model.status = 'pending'; @@ -55,7 +55,7 @@ module('Unit | Model | session', function(hooks) { assert.equal(model.proxy, null); model.setProperties({ proxy_address: 'localhost', - proxy_port: '12345' + proxy_port: '12345', }); assert.equal(model.proxy, 'localhost:12345'); }); diff --git a/addons/api/tests/unit/models/target-test.js b/addons/api/tests/unit/models/target-test.js index bacab9b42..18be834bd 100644 --- a/addons/api/tests/unit/models/target-test.js +++ b/addons/api/tests/unit/models/target-test.js @@ -186,33 +186,37 @@ module('Unit | Model | target', function (hooks) { store.push({ data: { id: '123abc', - type: 'target' - } + type: 'target', + }, }); const target = store.peekRecord('target', '123abc'); - assert.equal( target.sessions.length, 0); + assert.equal(target.sessions.length, 0); store.push({ data: { id: '1', type: 'session', - attributes: { target_id: '123abc' } - } + attributes: { target_id: '123abc' }, + }, }); store.push({ data: { id: '2', type: 'session', - attributes: { target_id: '123abc' } - } + attributes: { target_id: '123abc' }, + }, }); store.push({ data: { id: '3', type: 'session', - attributes: { target_id: '456xyz' } - } + attributes: { target_id: '456xyz' }, + }, }); - assert.equal(store.peekAll('session').length, 3, 'There are 3 sessions loaded in the store'); + assert.equal( + store.peekAll('session').length, + 3, + 'There are 3 sessions loaded in the store' + ); assert.equal( target.sessions.length, 2, diff --git a/addons/api/tests/unit/serializers/application-test.js b/addons/api/tests/unit/serializers/application-test.js index 014d80377..a7040e876 100644 --- a/addons/api/tests/unit/serializers/application-test.js +++ b/addons/api/tests/unit/serializers/application-test.js @@ -66,7 +66,7 @@ module('Unit | Serializer | application', function (hooks) { const serializedRecord = serializer.serialize(snapshot); assert.deepEqual(serializedRecord, { name: 'User', - description: 'Description' + description: 'Description', }); }); @@ -172,7 +172,7 @@ module('Unit | Serializer | application', function (hooks) { attributes: { name: 'User 1', account_ids: [], - scope: { scope_id: 'o_123' } + scope: { scope_id: 'o_123' }, }, relationships: {}, }, diff --git a/addons/api/tests/unit/serializers/host-test.js b/addons/api/tests/unit/serializers/host-test.js index c31a5ce4e..86c17fdd0 100644 --- a/addons/api/tests/unit/serializers/host-test.js +++ b/addons/api/tests/unit/serializers/host-test.js @@ -1,18 +1,18 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Serializer | host', function(hooks) { +module('Unit | Serializer | host', function (hooks) { setupTest(hooks); // Replace this with your real tests. - test('it exists', function(assert) { + test('it exists', function (assert) { let store = this.owner.lookup('service:store'); let serializer = store.serializerFor('host'); assert.ok(serializer); }); - test('it serializes records', function(assert) { + test('it serializes records', function (assert) { let store = this.owner.lookup('service:store'); let record = store.createRecord('host', {}); diff --git a/addons/api/tests/unit/serializers/role-test.js b/addons/api/tests/unit/serializers/role-test.js index f0d14b17a..16336d035 100644 --- a/addons/api/tests/unit/serializers/role-test.js +++ b/addons/api/tests/unit/serializers/role-test.js @@ -21,7 +21,7 @@ module('Unit | Serializer | role', function (hooks) { name: 'User', description: 'Description', version: 1, - grant_scope_id: null + grant_scope_id: null, }); }); diff --git a/addons/api/tests/unit/serializers/session-test.js b/addons/api/tests/unit/serializers/session-test.js index fde7c215f..a5ae53586 100644 --- a/addons/api/tests/unit/serializers/session-test.js +++ b/addons/api/tests/unit/serializers/session-test.js @@ -1,11 +1,11 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Serializer | session', function(hooks) { +module('Unit | Serializer | session', function (hooks) { setupTest(hooks); // Replace this with your real tests. - test('it exists', function(assert) { + test('it exists', function (assert) { let store = this.owner.lookup('service:store'); let serializer = store.serializerFor('session'); diff --git a/addons/api/tests/unit/serializers/target-test.js b/addons/api/tests/unit/serializers/target-test.js index d8e4a58fb..255faa9ac 100644 --- a/addons/api/tests/unit/serializers/target-test.js +++ b/addons/api/tests/unit/serializers/target-test.js @@ -20,7 +20,7 @@ module('Unit | Serializer | target', function (hooks) { type: 'org', }, version: 1, - type: 'tcp' + type: 'tcp', }); const snapshot = record._createSnapshot(); snapshot.adapterOptions = {}; diff --git a/addons/api/tests/unit/serializers/user-test.js b/addons/api/tests/unit/serializers/user-test.js index c0d2bd061..4ca1800d6 100644 --- a/addons/api/tests/unit/serializers/user-test.js +++ b/addons/api/tests/unit/serializers/user-test.js @@ -55,11 +55,7 @@ module('Unit | Serializer | user', function (hooks) { name: 'user 1', scope: { id: 'o_123' }, }; - const normalized = serializer.normalizeSingleResponse( - store, - user, - payload - ); + const normalized = serializer.normalizeSingleResponse(store, user, payload); assert.deepEqual(normalized, { included: [], data: { diff --git a/addons/auth/.eslintignore b/addons/auth/.eslintignore index 72df37307..922165552 100644 --- a/addons/auth/.eslintignore +++ b/addons/auth/.eslintignore @@ -13,6 +13,7 @@ # misc /coverage/ !.* +.eslintcache # ember-try /.node_modules.ember-try/ diff --git a/addons/auth/.eslintrc.js b/addons/auth/.eslintrc.js index 928585995..49fb14100 100644 --- a/addons/auth/.eslintrc.js +++ b/addons/auth/.eslintrc.js @@ -7,48 +7,54 @@ module.exports = { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { - legacyDecorators: true - } + legacyDecorators: true, + }, }, - plugins: [ - 'ember' - ], + plugins: ['ember'], extends: [ 'eslint:recommended', - 'plugin:ember/recommended' + 'plugin:ember/recommended', + 'plugin:prettier/recommended', ], env: { - browser: true + browser: true, + }, + rules: { + 'ember/no-get': 'off', + 'ember/no-get-with-default': 'off', + 'ember/no-computed-properties-in-native-classes': 'off', + 'ember/no-assignment-of-untracked-properties-used-in-tracking-contexts': + 'off', }, - rules: {}, overrides: [ // node files { files: [ '.eslintrc.js', + '.prettierrc.js', '.template-lintrc.js', 'ember-cli-build.js', 'index.js', 'testem.js', 'blueprints/*/index.js', 'config/**/*.js', - 'tests/dummy/config/**/*.js' + 'tests/dummy/config/**/*.js', ], excludedFiles: [ 'addon/**', 'addon-test-support/**', 'app/**', - 'tests/dummy/app/**' + 'tests/dummy/app/**', ], parserOptions: { - sourceType: 'script' + sourceType: 'script', }, env: { browser: false, - node: true + node: true, }, plugins: ['node'], - extends: ['plugin:node/recommended'] - } - ] + extends: ['plugin:node/recommended'], + }, + ], }; diff --git a/addons/auth/.npmignore b/addons/auth/.npmignore index bd09adff9..88818f2c8 100644 --- a/addons/auth/.npmignore +++ b/addons/auth/.npmignore @@ -10,6 +10,7 @@ /.editorconfig /.ember-cli /.env* +/.eslintcache /.eslintignore /.eslintrc.js /.git/ diff --git a/addons/auth/.prettierignore b/addons/auth/.prettierignore new file mode 100644 index 000000000..922165552 --- /dev/null +++ b/addons/auth/.prettierignore @@ -0,0 +1,21 @@ +# unconventional js +/blueprints/*/files/ +/vendor/ + +# compiled output +/dist/ +/tmp/ + +# dependencies +/bower_components/ +/node_modules/ + +# misc +/coverage/ +!.* +.eslintcache + +# ember-try +/.node_modules.ember-try/ +/bower.json.ember-try +/package.json.ember-try diff --git a/addons/auth/.prettierrc.js b/addons/auth/.prettierrc.js new file mode 100644 index 000000000..534e6d35a --- /dev/null +++ b/addons/auth/.prettierrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + singleQuote: true, +}; diff --git a/addons/auth/.template-lintrc.js b/addons/auth/.template-lintrc.js index f38737001..3b0b9af95 100644 --- a/addons/auth/.template-lintrc.js +++ b/addons/auth/.template-lintrc.js @@ -1,5 +1,5 @@ 'use strict'; module.exports = { - extends: 'octane' + extends: 'octane', }; diff --git a/addons/auth/addon/authenticators/base.js b/addons/auth/addon/authenticators/base.js index d0b394d32..641142222 100644 --- a/addons/auth/addon/authenticators/base.js +++ b/addons/auth/addon/authenticators/base.js @@ -15,7 +15,7 @@ export default class BaseAuthenticator extends SimpleAuthBaseAuthenticator { * @param {string} scopeID * @return {string} */ - buildDeauthEndpointURL(/* { scope: { id: scopeID } } */) { } + buildDeauthEndpointURL(/* { scope: { id: scopeID } } */) {} /** * Generates an auth token validation URL used to check tokens on restoration. @@ -23,7 +23,7 @@ export default class BaseAuthenticator extends SimpleAuthBaseAuthenticator { * @param {string} tokenID * @return {string} */ - buildTokenValidationEndpointURL(/* tokenID */) { } + buildTokenValidationEndpointURL(/* tokenID */) {} // =methods @@ -34,7 +34,7 @@ export default class BaseAuthenticator extends SimpleAuthBaseAuthenticator { const tokenValidationURL = this.buildTokenValidationEndpointURL(tokenID); const response = await fetch(tokenValidationURL, { method: 'get', - headers: { 'Authorization': `Bearer ${token}` } + headers: { Authorization: `Bearer ${token}` }, }); // 401 and 404 responses mean the token is invalid, whereas other types of // error responses do not tell us about the validity of the token. @@ -51,8 +51,9 @@ export default class BaseAuthenticator extends SimpleAuthBaseAuthenticator { */ async restore(data) { if (!data) return reject(); - return this.validateToken(data.token, data.id) - .then(() => this.normalizeData(data)); + return this.validateToken(data.token, data.id).then(() => + this.normalizeData(data) + ); } /** @@ -65,8 +66,8 @@ export default class BaseAuthenticator extends SimpleAuthBaseAuthenticator { */ normalizeData(data, username) { // Add booleans indicated the scope type - data.isGlobal = (data?.scope?.type === 'global'); - data.isOrg = (data?.scope?.type === 'org'); + data.isGlobal = data?.scope?.type === 'global'; + data.isOrg = data?.scope?.type === 'org'; if (username) data.username = username; return data; } diff --git a/addons/auth/addon/authenticators/password.js b/addons/auth/addon/authenticators/password.js index 6f70946e8..e130a23ee 100644 --- a/addons/auth/addon/authenticators/password.js +++ b/addons/auth/addon/authenticators/password.js @@ -34,7 +34,6 @@ import fetch from 'fetch'; * */ export default class PasswordAuthenticator extends BaseAuthenticator { - // =unimplemented methods /** @@ -48,7 +47,7 @@ export default class PasswordAuthenticator extends BaseAuthenticator { buildAuthEndpointURL(/* { scope: { id: scopeID }, authMethod: { id: authMethodID }, - } */) { } + } */) {} // =methods diff --git a/addons/auth/addon/session-stores/cookie.js b/addons/auth/addon/session-stores/cookie.js index ea0501ad5..a9e0b5120 100644 --- a/addons/auth/addon/session-stores/cookie.js +++ b/addons/auth/addon/session-stores/cookie.js @@ -75,6 +75,9 @@ export default class CookieSessionStore extends BaseSessionStore { * present. If either one is missing, we want to cleanup to be sure they * are both absent. */ + // The base class is a classic Ember class, but the linter doesn't know that. + // That's why this rule is disabled here. + /* eslint-disable-next-line ember/classic-decorator-hooks */ init() { if (!this.sessionExists) this.clear(); } diff --git a/addons/auth/config/ember-try.js b/addons/auth/config/ember-try.js index 9190baee5..f14ac7f50 100644 --- a/addons/auth/config/ember-try.js +++ b/addons/auth/config/ember-try.js @@ -6,14 +6,6 @@ module.exports = async function () { return { useYarn: true, scenarios: [ - { - name: 'ember-lts-3.12', - npm: { - devDependencies: { - 'ember-source': '~3.12.0', - }, - }, - }, { name: 'ember-lts-3.16', npm: { @@ -26,9 +18,9 @@ module.exports = async function () { name: 'ember-lts-3.20', npm: { devDependencies: { - 'ember-source': '~3.20.5' - } - } + 'ember-source': '~3.20.5', + }, + }, }, { name: 'ember-release', @@ -63,9 +55,9 @@ module.exports = async function () { }, npm: { devDependencies: { - '@ember/jquery': '^1.1.0' - } - } + '@ember/jquery': '^1.1.0', + }, + }, }, { name: 'ember-classic', diff --git a/addons/auth/package.json b/addons/auth/package.json index 702815140..a1bdbc248 100644 --- a/addons/auth/package.json +++ b/addons/auth/package.json @@ -8,53 +8,61 @@ "ember-addon" ], "scripts": { - "lint": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*", + "lint": "npm-run-all --aggregate-output --continue-on-error --parallel 'lint:!(fix)'", + "lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix", + "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint .", "format": "npm run format:js", "format:js": "prettier --write '{addon,app,config,stories,tests}/**/*.js' *.js", + "lint:js:fix": "eslint . --fix", "start": "ember serve", "test": "ember test", "test:ember-compatibility": "ember try:each", "doc:toc": "doctoc README.md" }, "dependencies": { - "ember-cli-babel": "^7.21.0", - "ember-cli-htmlbars": "^5.2.0", + "ember-cli-babel": "^7.23.0", + "ember-cli-htmlbars": "^5.3.1", "ember-simple-auth": "^3.0.1" }, "devDependencies": { - "core": "*", - "@ember/optional-features": "^1.3.0", - "@glimmer/component": "^1.0.1", - "@glimmer/tracking": "^1.0.0", + "@ember/optional-features": "^2.0.0", + "@ember/test-helpers": "^2.1.4", + "@glimmer/component": "^1.0.3", + "@glimmer/tracking": "^1.0.3", "babel-eslint": "^10.1.0", "broccoli-asset-rev": "^3.0.0", + "core": "*", "doctoc": "^1.4.0", - "ember-auto-import": "^1.6.0", - "ember-cli": "~3.20.2", + "ember-auto-import": "^1.10.1", + "ember-cli": "~3.24.0", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-inject-live-reload": "^2.0.2", "ember-cli-sri": "^2.1.1", - "ember-cli-uglify": "^3.0.0", + "ember-cli-terser": "^4.0.1", "ember-cli-update": "^0.54.6", "ember-cookies": "^0.5.2", "ember-disable-prototype-extensions": "^1.1.3", "ember-export-application-global": "^2.0.1", - "ember-load-initializers": "^2.1.1", + "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^0.1.6", - "ember-qunit": "^4.6.0", - "ember-resolver": "^8.0.0", - "ember-source": "~3.20.2", - "ember-source-channel-url": "^2.0.1", - "ember-template-lint": "^2.9.1", + "ember-page-title": "^6.0.3", + "ember-qunit": "^5.1.1", + "ember-resolver": "^8.0.2", + "ember-source": "~3.24.0", + "ember-source-channel-url": "^3.0.0", + "ember-template-lint": "^2.15.0", "ember-try": "^1.4.0", - "eslint": "^7.5.0", - "eslint-plugin-ember": "^8.9.1", + "eslint": "^7.17.0", + "eslint-config-prettier": "^7.1.0", + "eslint-plugin-ember": "^10.1.1", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", - "prettier": "^2.0.5", - "qunit-dom": "^1.2.0" + "prettier": "^2.2.1", + "qunit": "^2.13.0", + "qunit-dom": "^1.6.0" }, "engines": { "node": "10.* || >= 12" diff --git a/addons/auth/tests/dummy/app/templates/application.hbs b/addons/auth/tests/dummy/app/templates/application.hbs index 5230580f8..1001d149e 100644 --- a/addons/auth/tests/dummy/app/templates/application.hbs +++ b/addons/auth/tests/dummy/app/templates/application.hbs @@ -1,3 +1,5 @@ +{{page-title "Dummy"}} +

Welcome to Ember

{{outlet}} \ No newline at end of file diff --git a/addons/auth/tests/dummy/config/ember-cli-update.json b/addons/auth/tests/dummy/config/ember-cli-update.json index 3c0c55fdb..ed4d5fc2d 100644 --- a/addons/auth/tests/dummy/config/ember-cli-update.json +++ b/addons/auth/tests/dummy/config/ember-cli-update.json @@ -3,7 +3,7 @@ "packages": [ { "name": "ember-cli", - "version": "3.20.2", + "version": "3.24.0", "blueprints": [ { "name": "addon", diff --git a/addons/auth/tests/index.html b/addons/auth/tests/index.html index 5209b8523..3eb848dbd 100644 --- a/addons/auth/tests/index.html +++ b/addons/auth/tests/index.html @@ -21,6 +21,13 @@ {{content-for "body"}} {{content-for "test-body"}} +
+
+
+
+
+
+ diff --git a/addons/auth/tests/test-helper.js b/addons/auth/tests/test-helper.js index 4eae06f81..4efd6e58a 100644 --- a/addons/auth/tests/test-helper.js +++ b/addons/auth/tests/test-helper.js @@ -1,8 +1,12 @@ import Application from 'dummy/app'; import config from 'dummy/config/environment'; +import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; setApplication(Application.create(config.APP)); +setup(QUnit.assert); + start(); diff --git a/addons/auth/tests/unit/authenticators/base-test.js b/addons/auth/tests/unit/authenticators/base-test.js index 7cb7a3e4b..726e76162 100644 --- a/addons/auth/tests/unit/authenticators/base-test.js +++ b/addons/auth/tests/unit/authenticators/base-test.js @@ -34,10 +34,13 @@ module('Unit | Authenticator | base', function (hooks) { assert.expect(1); const mockData = { id: 'token_123' }; const authenticator = this.owner.lookup('authenticator:base'); - this.server.get(authenticator.buildTokenValidationEndpointURL(mockData.id), () => { - assert.ok(true, 'token validation was requested'); - return new Response(200); - }); + this.server.get( + authenticator.buildTokenValidationEndpointURL(mockData.id), + () => { + assert.ok(true, 'token validation was requested'); + return new Response(200); + } + ); await authenticator.restore(mockData); }); @@ -45,10 +48,13 @@ module('Unit | Authenticator | base', function (hooks) { assert.expect(2); const mockData = { id: 'token_123' }; const authenticator = this.owner.lookup('authenticator:base'); - this.server.get(authenticator.buildTokenValidationEndpointURL(mockData.id), () => { - assert.ok(true, 'token validation was requested'); - return new Response(401); - }); + this.server.get( + authenticator.buildTokenValidationEndpointURL(mockData.id), + () => { + assert.ok(true, 'token validation was requested'); + return new Response(401); + } + ); try { await authenticator.restore(mockData); } catch (e) { @@ -60,10 +66,13 @@ module('Unit | Authenticator | base', function (hooks) { assert.expect(2); const mockData = { id: 'token_123' }; const authenticator = this.owner.lookup('authenticator:base'); - this.server.get(authenticator.buildTokenValidationEndpointURL(mockData.id), () => { - assert.ok(true, 'token validation was requested'); - return new Response(404); - }); + this.server.get( + authenticator.buildTokenValidationEndpointURL(mockData.id), + () => { + assert.ok(true, 'token validation was requested'); + return new Response(404); + } + ); try { await authenticator.restore(mockData); } catch (e) { diff --git a/addons/core/.eslintignore b/addons/core/.eslintignore index 72df37307..922165552 100644 --- a/addons/core/.eslintignore +++ b/addons/core/.eslintignore @@ -13,6 +13,7 @@ # misc /coverage/ !.* +.eslintcache # ember-try /.node_modules.ember-try/ diff --git a/addons/core/.eslintrc.js b/addons/core/.eslintrc.js index 928585995..49fb14100 100644 --- a/addons/core/.eslintrc.js +++ b/addons/core/.eslintrc.js @@ -7,48 +7,54 @@ module.exports = { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { - legacyDecorators: true - } + legacyDecorators: true, + }, }, - plugins: [ - 'ember' - ], + plugins: ['ember'], extends: [ 'eslint:recommended', - 'plugin:ember/recommended' + 'plugin:ember/recommended', + 'plugin:prettier/recommended', ], env: { - browser: true + browser: true, + }, + rules: { + 'ember/no-get': 'off', + 'ember/no-get-with-default': 'off', + 'ember/no-computed-properties-in-native-classes': 'off', + 'ember/no-assignment-of-untracked-properties-used-in-tracking-contexts': + 'off', }, - rules: {}, overrides: [ // node files { files: [ '.eslintrc.js', + '.prettierrc.js', '.template-lintrc.js', 'ember-cli-build.js', 'index.js', 'testem.js', 'blueprints/*/index.js', 'config/**/*.js', - 'tests/dummy/config/**/*.js' + 'tests/dummy/config/**/*.js', ], excludedFiles: [ 'addon/**', 'addon-test-support/**', 'app/**', - 'tests/dummy/app/**' + 'tests/dummy/app/**', ], parserOptions: { - sourceType: 'script' + sourceType: 'script', }, env: { browser: false, - node: true + node: true, }, plugins: ['node'], - extends: ['plugin:node/recommended'] - } - ] + extends: ['plugin:node/recommended'], + }, + ], }; diff --git a/addons/core/.npmignore b/addons/core/.npmignore index bd09adff9..88818f2c8 100644 --- a/addons/core/.npmignore +++ b/addons/core/.npmignore @@ -10,6 +10,7 @@ /.editorconfig /.ember-cli /.env* +/.eslintcache /.eslintignore /.eslintrc.js /.git/ diff --git a/addons/core/.prettierignore b/addons/core/.prettierignore new file mode 100644 index 000000000..922165552 --- /dev/null +++ b/addons/core/.prettierignore @@ -0,0 +1,21 @@ +# unconventional js +/blueprints/*/files/ +/vendor/ + +# compiled output +/dist/ +/tmp/ + +# dependencies +/bower_components/ +/node_modules/ + +# misc +/coverage/ +!.* +.eslintcache + +# ember-try +/.node_modules.ember-try/ +/bower.json.ember-try +/package.json.ember-try diff --git a/addons/core/.prettierrc.js b/addons/core/.prettierrc.js new file mode 100644 index 000000000..534e6d35a --- /dev/null +++ b/addons/core/.prettierrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + singleQuote: true, +}; diff --git a/addons/core/.template-lintrc.js b/addons/core/.template-lintrc.js index f38737001..3b0b9af95 100644 --- a/addons/core/.template-lintrc.js +++ b/addons/core/.template-lintrc.js @@ -1,5 +1,5 @@ 'use strict'; module.exports = { - extends: 'octane' + extends: 'octane', }; diff --git a/addons/core/README.md b/addons/core/README.md index 3b913d4d3..ad29fbe9e 100644 --- a/addons/core/README.md +++ b/addons/core/README.md @@ -112,7 +112,7 @@ async myAction() { This addon exposes a service to hold all active scopes (org and project where available). -To make use of the service, import it and initialize it using service injection. +To make use of the service, import it and initialize it using service injection. ```js import { inject as service } from '@ember/service'; diff --git a/addons/core/addon/decorators/notify.js b/addons/core/addon/decorators/notify.js index 1ce13d91e..21c5b7f47 100644 --- a/addons/core/addon/decorators/notify.js +++ b/addons/core/addon/decorators/notify.js @@ -51,14 +51,14 @@ export function notifyError(notification, options = { catch: false }) { const owner = getOwner(this); const notifyService = owner.lookup('service:notify'); const intlService = owner.lookup('service:intl'); - + try { return await method.apply(this, arguments); } catch (error) { - - const candidateKey = (typeof notification === 'function') - ? notification.apply(this, [error]) - : notification; + const candidateKey = + typeof notification === 'function' + ? notification.apply(this, [error]) + : notification; const text = intlService.exists(candidateKey) ? intlService.t(candidateKey) diff --git a/addons/core/app/components/error/message.js b/addons/core/app/components/error/message.js index 055e64811..4cea9812f 100644 --- a/addons/core/app/components/error/message.js +++ b/addons/core/app/components/error/message.js @@ -1 +1 @@ -export { default } from 'core/components/error/message'; \ No newline at end of file +export { default } from 'core/components/error/message'; diff --git a/addons/core/app/components/form/authenticate.js b/addons/core/app/components/form/authenticate.js index f471115c1..85004b271 100644 --- a/addons/core/app/components/form/authenticate.js +++ b/addons/core/app/components/form/authenticate.js @@ -1 +1 @@ -export { default } from 'core/components/form/authenticate'; \ No newline at end of file +export { default } from 'core/components/form/authenticate'; diff --git a/addons/core/app/components/form/authenticate/password.js b/addons/core/app/components/form/authenticate/password.js index ec54f0464..f8be6bacb 100644 --- a/addons/core/app/components/form/authenticate/password.js +++ b/addons/core/app/components/form/authenticate/password.js @@ -1 +1 @@ -export { default } from 'core/components/form/authenticate/password'; \ No newline at end of file +export { default } from 'core/components/form/authenticate/password'; diff --git a/addons/core/app/components/pending-confirmations.js b/addons/core/app/components/pending-confirmations.js index 7e60dd82a..6652a5c5e 100644 --- a/addons/core/app/components/pending-confirmations.js +++ b/addons/core/app/components/pending-confirmations.js @@ -1 +1 @@ -export { default } from 'core/components/pending-confirmations'; \ No newline at end of file +export { default } from 'core/components/pending-confirmations'; diff --git a/addons/core/app/helpers/format-date-iso-human.js b/addons/core/app/helpers/format-date-iso-human.js index b4586dc3d..947f5e926 100644 --- a/addons/core/app/helpers/format-date-iso-human.js +++ b/addons/core/app/helpers/format-date-iso-human.js @@ -1 +1,4 @@ -export { default, formatDateIsoHuman } from 'core/helpers/format-date-iso-human'; +export { + default, + formatDateIsoHuman, +} from 'core/helpers/format-date-iso-human'; diff --git a/addons/core/config/ember-try.js b/addons/core/config/ember-try.js index bbdb66252..f14ac7f50 100644 --- a/addons/core/config/ember-try.js +++ b/addons/core/config/ember-try.js @@ -1,84 +1,76 @@ -"use strict"; +'use strict'; -const getChannelURL = require("ember-source-channel-url"); +const getChannelURL = require('ember-source-channel-url'); module.exports = async function () { return { useYarn: true, scenarios: [ { - name: "ember-lts-3.12", + name: 'ember-lts-3.16', npm: { devDependencies: { - "ember-source": "~3.12.0", + 'ember-source': '~3.16.0', }, }, }, { - name: "ember-lts-3.16", + name: 'ember-lts-3.20', npm: { devDependencies: { - "ember-source": "~3.16.0", + 'ember-source': '~3.20.5', }, }, }, { - name: "ember-lts-3.20", + name: 'ember-release', npm: { devDependencies: { - "ember-source": "~3.20.5", + 'ember-source': await getChannelURL('release'), }, }, }, { - name: "ember-release", + name: 'ember-beta', npm: { devDependencies: { - "ember-source": await getChannelURL("release"), + 'ember-source': await getChannelURL('beta'), }, }, }, { - name: "ember-beta", + name: 'ember-canary', npm: { devDependencies: { - "ember-source": await getChannelURL("beta"), + 'ember-source': await getChannelURL('canary'), }, }, }, { - name: "ember-canary", - npm: { - devDependencies: { - "ember-source": await getChannelURL("canary"), - }, - }, - }, - { - name: "ember-default-with-jquery", + name: 'ember-default-with-jquery', env: { EMBER_OPTIONAL_FEATURES: JSON.stringify({ - "jquery-integration": true, + 'jquery-integration': true, }), }, npm: { devDependencies: { - "@ember/jquery": "^1.1.0", + '@ember/jquery': '^1.1.0', }, }, }, { - name: "ember-classic", + name: 'ember-classic', env: { EMBER_OPTIONAL_FEATURES: JSON.stringify({ - "application-template-wrapper": true, - "default-async-observers": false, - "template-only-glimmer-components": false, + 'application-template-wrapper': true, + 'default-async-observers': false, + 'template-only-glimmer-components': false, }), }, npm: { ember: { - edition: "classic", + edition: 'classic', }, }, }, diff --git a/addons/core/config/environment.js b/addons/core/config/environment.js index b7238585e..331ab30df 100644 --- a/addons/core/config/environment.js +++ b/addons/core/config/environment.js @@ -1,4 +1,4 @@ -"use strict"; +'use strict'; module.exports = function (/* environment, appConfig */) { return {}; diff --git a/addons/core/ember-cli-build.js b/addons/core/ember-cli-build.js index b6a8f26a0..ba0649dc9 100644 --- a/addons/core/ember-cli-build.js +++ b/addons/core/ember-cli-build.js @@ -1,6 +1,6 @@ -"use strict"; +'use strict'; -const EmberAddon = require("ember-cli/lib/broccoli/ember-addon"); +const EmberAddon = require('ember-cli/lib/broccoli/ember-addon'); module.exports = function (defaults) { let app = new EmberAddon(defaults, { diff --git a/addons/core/index.js b/addons/core/index.js index 245249bda..fa6be2662 100644 --- a/addons/core/index.js +++ b/addons/core/index.js @@ -1,4 +1,4 @@ -"use strict"; +'use strict'; module.exports = { - name: require("./package").name, + name: require('./package').name, }; diff --git a/addons/core/package.json b/addons/core/package.json index d5e613ea4..63edf135d 100644 --- a/addons/core/package.json +++ b/addons/core/package.json @@ -15,10 +15,13 @@ "scripts": { "build:development": "ember build", "build": "ember build --environment=production", - "lint": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*", + "lint": "npm-run-all --aggregate-output --continue-on-error --parallel 'lint:!(fix)'", + "lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix", + "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint .", "format": "npm run format:js", "format:js": "prettier --write '{addon,app,config,stories,tests}/**/*.js' *.js", + "lint:js:fix": "eslint . --fix", "start": "ember serve", "test": "ember test", "test:ember-compatibility": "ember try:each", @@ -27,8 +30,8 @@ "dependencies": { "api": "*", "auth": "*", - "ember-cli-babel": "^7.21.0", - "ember-cli-htmlbars": "^5.2.0", + "ember-cli-babel": "^7.23.0", + "ember-cli-htmlbars": "^5.3.1", "ember-get-config": "^0.3.0", "ember-intl": "^5.5.0", "ember-loading": "^0.4.0", @@ -37,38 +40,43 @@ "rose": "*" }, "devDependencies": { - "@ember/optional-features": "^1.3.0", - "@glimmer/component": "^1.0.1", - "@glimmer/tracking": "^1.0.0", + "@ember/optional-features": "^2.0.0", + "@ember/test-helpers": "^2.1.4", + "@glimmer/component": "^1.0.3", + "@glimmer/tracking": "^1.0.3", "babel-eslint": "^10.1.0", "broccoli-asset-rev": "^3.0.0", "doctoc": "^1.4.0", - "ember-auto-import": "^1.6.0", - "ember-cli": "~3.20.2", + "ember-auto-import": "^1.10.1", + "ember-cli": "~3.24.0", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-inject-live-reload": "^2.0.2", "ember-cli-sri": "^2.1.1", - "ember-cli-uglify": "^3.0.0", + "ember-cli-terser": "^4.0.1", "ember-disable-prototype-extensions": "^1.1.3", "ember-export-application-global": "^2.0.1", "ember-inline-svg": "^1.0.0", "ember-intl": "^5.5.0", - "ember-load-initializers": "^2.1.1", + "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^0.1.6", - "ember-qunit": "^4.6.0", - "ember-resolver": "^8.0.0", - "ember-source": "~3.20.2", - "ember-source-channel-url": "^2.0.1", - "ember-template-lint": "^2.9.1", + "ember-page-title": "^6.0.3", + "ember-qunit": "^5.1.1", + "ember-resolver": "^8.0.2", + "ember-source": "~3.24.0", + "ember-source-channel-url": "^3.0.0", + "ember-template-lint": "^2.15.0", "ember-try": "^1.4.0", - "eslint": "^7.5.0", - "eslint-plugin-ember": "^8.9.1", + "eslint": "^7.17.0", + "eslint-config-prettier": "^7.1.0", + "eslint-plugin-ember": "^10.1.1", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", "faker": "^5.1.0", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", - "prettier": "^2.1.2", - "qunit-dom": "^1.2.0" + "prettier": "^2.2.1", + "qunit": "^2.13.0", + "qunit-dom": "^1.6.0" }, "engines": { "node": "10.* || >= 12" diff --git a/addons/core/testem.js b/addons/core/testem.js index e3e8564ff..ed2f37124 100644 --- a/addons/core/testem.js +++ b/addons/core/testem.js @@ -1,22 +1,22 @@ -"use strict"; +'use strict'; module.exports = { - test_page: "tests/index.html?hidepassed", + test_page: 'tests/index.html?hidepassed', disable_watching: true, - launch_in_ci: ["Chrome"], - launch_in_dev: ["Chrome"], + launch_in_ci: ['Chrome'], + launch_in_dev: ['Chrome'], browser_start_timeout: 120, browser_args: { Chrome: { ci: [ // --no-sandbox is needed when running Chrome inside a container - process.env.CI ? "--no-sandbox" : null, - "--headless", - "--disable-dev-shm-usage", - "--disable-software-rasterizer", - "--mute-audio", - "--remote-debugging-port=0", - "--window-size=1440,900", + process.env.CI ? '--no-sandbox' : null, + '--headless', + '--disable-dev-shm-usage', + '--disable-software-rasterizer', + '--mute-audio', + '--remote-debugging-port=0', + '--window-size=1440,900', ].filter(Boolean), }, }, diff --git a/addons/core/tests/dummy/app/app.js b/addons/core/tests/dummy/app/app.js index 2ae212dbd..523bad60c 100644 --- a/addons/core/tests/dummy/app/app.js +++ b/addons/core/tests/dummy/app/app.js @@ -1,7 +1,7 @@ -import Application from "@ember/application"; -import Resolver from "ember-resolver"; -import loadInitializers from "ember-load-initializers"; -import config from "dummy/config/environment"; +import Application from '@ember/application'; +import Resolver from 'ember-resolver'; +import loadInitializers from 'ember-load-initializers'; +import config from 'dummy/config/environment'; export default class App extends Application { modulePrefix = config.modulePrefix; diff --git a/addons/core/tests/dummy/app/formats.js b/addons/core/tests/dummy/app/formats.js index 4a4add42f..f5d1f1502 100644 --- a/addons/core/tests/dummy/app/formats.js +++ b/addons/core/tests/dummy/app/formats.js @@ -1,29 +1,29 @@ export default { time: { hhmmss: { - hour: "numeric", - minute: "numeric", - second: "numeric", + hour: 'numeric', + minute: 'numeric', + second: 'numeric', }, }, date: { hhmmss: { - hour: "numeric", - minute: "numeric", - second: "numeric", + hour: 'numeric', + minute: 'numeric', + second: 'numeric', }, }, number: { - compact: { notation: "compact" }, + compact: { notation: 'compact' }, EUR: { - style: "currency", - currency: "EUR", + style: 'currency', + currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2, }, USD: { - style: "currency", - currency: "USD", + style: 'currency', + currency: 'USD', minimumFractionDigits: 2, maximumFractionDigits: 2, }, diff --git a/addons/core/tests/dummy/app/router.js b/addons/core/tests/dummy/app/router.js index 018b4b1ca..64e543ab2 100644 --- a/addons/core/tests/dummy/app/router.js +++ b/addons/core/tests/dummy/app/router.js @@ -1,5 +1,5 @@ -import EmberRouter from "@ember/routing/router"; -import config from "dummy/config/environment"; +import EmberRouter from '@ember/routing/router'; +import config from 'dummy/config/environment'; export default class Router extends EmberRouter { location = config.locationType; diff --git a/addons/core/tests/dummy/config/ember-cli-update.json b/addons/core/tests/dummy/config/ember-cli-update.json index 7d2c3ace4..279e6dab9 100644 --- a/addons/core/tests/dummy/config/ember-cli-update.json +++ b/addons/core/tests/dummy/config/ember-cli-update.json @@ -3,7 +3,7 @@ "packages": [ { "name": "ember-cli", - "version": "3.20.2", + "version": "3.24.0", "blueprints": [ { "name": "addon", diff --git a/addons/core/tests/dummy/config/ember-intl.js b/addons/core/tests/dummy/config/ember-intl.js index a5a3a93d5..70719ccdc 100644 --- a/addons/core/tests/dummy/config/ember-intl.js +++ b/addons/core/tests/dummy/config/ember-intl.js @@ -25,7 +25,7 @@ module.exports = function (/* environment */) { * @type {String} * @default "'translations'" */ - inputPath: "../../translations", + inputPath: '../../translations', /** * Prevents the translations from being bundled with the application code. diff --git a/addons/core/tests/dummy/config/environment.js b/addons/core/tests/dummy/config/environment.js index 2a5061f98..dca0b66ac 100644 --- a/addons/core/tests/dummy/config/environment.js +++ b/addons/core/tests/dummy/config/environment.js @@ -1,11 +1,11 @@ -"use strict"; +'use strict'; module.exports = function (environment) { let ENV = { - modulePrefix: "dummy", + modulePrefix: 'dummy', environment, - rootURL: "/", - locationType: "auto", + rootURL: '/', + locationType: 'auto', EmberENV: { FEATURES: { // Here you can enable experimental features on an ember canary build @@ -29,7 +29,7 @@ module.exports = function (environment) { baseURL: 'https://boundaryproject.io/help/admin-ui', topics: { account: '/accounts', - } + }, }, api: { @@ -38,13 +38,13 @@ module.exports = function (environment) { }, 'ember-cli-mirage': { - directory: '../api/mirage' + directory: '../api/mirage', }, - enableConfirmService: false + enableConfirmService: false, }; - if (environment === "development") { + if (environment === 'development') { // ENV.APP.LOG_RESOLVER = true; // ENV.APP.LOG_ACTIVE_GENERATION = true; // ENV.APP.LOG_TRANSITIONS = true; @@ -52,19 +52,19 @@ module.exports = function (environment) { // ENV.APP.LOG_VIEW_LOOKUPS = true; } - if (environment === "test") { + if (environment === 'test') { // Testem prefers this... - ENV.locationType = "none"; + ENV.locationType = 'none'; // keep test console output quieter ENV.APP.LOG_ACTIVE_GENERATION = false; ENV.APP.LOG_VIEW_LOOKUPS = false; - ENV.APP.rootElement = "#ember-testing"; + ENV.APP.rootElement = '#ember-testing'; ENV.APP.autoboot = false; } - if (environment === "production") { + if (environment === 'production') { // here you can enable a production-specific feature } diff --git a/addons/core/tests/dummy/config/targets.js b/addons/core/tests/dummy/config/targets.js index 9a022efa9..4b33327e8 100644 --- a/addons/core/tests/dummy/config/targets.js +++ b/addons/core/tests/dummy/config/targets.js @@ -1,16 +1,16 @@ -"use strict"; +'use strict'; const browsers = [ - "last 1 Chrome versions", - "last 1 Firefox versions", - "last 1 Safari versions", + 'last 1 Chrome versions', + 'last 1 Firefox versions', + 'last 1 Safari versions', ]; const isCI = Boolean(process.env.CI); -const isProduction = process.env.EMBER_ENV === "production"; +const isProduction = process.env.EMBER_ENV === 'production'; if (isCI || isProduction) { - browsers.push("ie 11"); + browsers.push('ie 11'); } module.exports = { diff --git a/addons/core/tests/index.html b/addons/core/tests/index.html index 5209b8523..3eb848dbd 100644 --- a/addons/core/tests/index.html +++ b/addons/core/tests/index.html @@ -21,6 +21,13 @@ {{content-for "body"}} {{content-for "test-body"}} +
+
+
+
+
+
+ diff --git a/addons/core/tests/integration/components/error/message-test.js b/addons/core/tests/integration/components/error/message-test.js index 47651bd89..a28f3c618 100644 --- a/addons/core/tests/integration/components/error/message-test.js +++ b/addons/core/tests/integration/components/error/message-test.js @@ -60,7 +60,7 @@ module('Integration | Component | error/message', function (hooks) { ); assert.equal( find('.rose-message-description').textContent.trim(), - 'We\'re not sure what happened. Please contact your administrator or try again later.' + "We're not sure what happened. Please contact your administrator or try again later." ); }); }); diff --git a/addons/core/tests/integration/helpers/company-copyright-test.js b/addons/core/tests/integration/helpers/company-copyright-test.js index 3025f34a1..2965f90e0 100644 --- a/addons/core/tests/integration/helpers/company-copyright-test.js +++ b/addons/core/tests/integration/helpers/company-copyright-test.js @@ -10,6 +10,9 @@ module('Integration | Helper | company-copyright', function (hooks) { assert.expect(1); const currentYear = new Date().getFullYear(); await render(hbs`{{company-copyright}}`); - assert.equal(this.element.textContent.trim(), `© ${currentYear} Company Name`); + assert.equal( + this.element.textContent.trim(), + `© ${currentYear} Company Name` + ); }); }); diff --git a/addons/core/tests/test-helper.js b/addons/core/tests/test-helper.js index d71607e7e..4efd6e58a 100644 --- a/addons/core/tests/test-helper.js +++ b/addons/core/tests/test-helper.js @@ -1,8 +1,12 @@ -import Application from "dummy/app"; -import config from "dummy/config/environment"; -import { setApplication } from "@ember/test-helpers"; -import { start } from "ember-qunit"; +import Application from 'dummy/app'; +import config from 'dummy/config/environment'; +import * as QUnit from 'qunit'; +import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; +import { start } from 'ember-qunit'; setApplication(Application.create(config.APP)); +setup(QUnit.assert); + start(); diff --git a/addons/rose/.eslintignore b/addons/rose/.eslintignore index 702dec378..0e64ff566 100644 --- a/addons/rose/.eslintignore +++ b/addons/rose/.eslintignore @@ -15,6 +15,7 @@ main.js /coverage/ !.* +.eslintcache # ember-try /.node_modules.ember-try/ diff --git a/addons/rose/.eslintrc.js b/addons/rose/.eslintrc.js index 50aa56a4f..bdb867ae9 100644 --- a/addons/rose/.eslintrc.js +++ b/addons/rose/.eslintrc.js @@ -7,51 +7,56 @@ module.exports = { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { - legacyDecorators: true - } + legacyDecorators: true, + }, }, - plugins: [ - 'ember' - ], + plugins: ['ember'], extends: [ 'eslint:recommended', - 'plugin:ember/recommended' + 'plugin:ember/recommended', + 'plugin:prettier/recommended', ], env: { - browser: true + browser: true, }, rules: { 'ember/no-jquery': 'error', - 'ember/no-new-mixins': 0 + 'ember/no-new-mixins': 0, + 'ember/no-get': 'off', + 'ember/no-get-with-default': 'off', + 'ember/no-computed-properties-in-native-classes': 'off', + 'ember/no-assignment-of-untracked-properties-used-in-tracking-contexts': + 'off', }, overrides: [ // node files { files: [ '.eslintrc.js', + '.prettierrc.js', '.template-lintrc.js', 'ember-cli-build.js', 'index.js', 'testem.js', 'blueprints/*/index.js', 'config/**/*.js', - 'tests/dummy/config/**/*.js' + 'tests/dummy/config/**/*.js', ], excludedFiles: [ 'addon/**', 'addon-test-support/**', 'app/**', - 'tests/dummy/app/**' + 'tests/dummy/app/**', ], parserOptions: { - sourceType: 'script' + sourceType: 'script', }, env: { browser: false, - node: true + node: true, }, plugins: ['node'], - extends: ['plugin:node/recommended'] - } - ] + extends: ['plugin:node/recommended'], + }, + ], }; diff --git a/addons/rose/.npmignore b/addons/rose/.npmignore index bd09adff9..88818f2c8 100644 --- a/addons/rose/.npmignore +++ b/addons/rose/.npmignore @@ -10,6 +10,7 @@ /.editorconfig /.ember-cli /.env* +/.eslintcache /.eslintignore /.eslintrc.js /.git/ diff --git a/addons/rose/.prettierignore b/addons/rose/.prettierignore new file mode 100644 index 000000000..922165552 --- /dev/null +++ b/addons/rose/.prettierignore @@ -0,0 +1,21 @@ +# unconventional js +/blueprints/*/files/ +/vendor/ + +# compiled output +/dist/ +/tmp/ + +# dependencies +/bower_components/ +/node_modules/ + +# misc +/coverage/ +!.* +.eslintcache + +# ember-try +/.node_modules.ember-try/ +/bower.json.ember-try +/package.json.ember-try diff --git a/addons/rose/.prettierrc.js b/addons/rose/.prettierrc.js new file mode 100644 index 000000000..534e6d35a --- /dev/null +++ b/addons/rose/.prettierrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + singleQuote: true, +}; diff --git a/addons/rose/.template-lintrc.js b/addons/rose/.template-lintrc.js index f38737001..3b0b9af95 100644 --- a/addons/rose/.template-lintrc.js +++ b/addons/rose/.template-lintrc.js @@ -1,5 +1,5 @@ 'use strict'; module.exports = { - extends: 'octane' + extends: 'octane', }; diff --git a/addons/core/.travis.yml b/addons/rose/.travis.yml similarity index 77% rename from addons/core/.travis.yml rename to addons/rose/.travis.yml index 1211e146c..156fd25fa 100644 --- a/addons/core/.travis.yml +++ b/addons/rose/.travis.yml @@ -11,7 +11,8 @@ addons: chrome: stable cache: - yarn: true + directories: + - $HOME/.npm env: global: @@ -34,19 +35,18 @@ jobs: - stage: "Tests" name: "Tests" script: - - yarn lint - - yarn test:ember + - npm run lint + - npm run test:ember - stage: "Additional Tests" name: "Floating Dependencies" install: - - yarn install --no-lockfile --non-interactive + - npm install --no-package-lock script: - - yarn test:ember + - npm run test:ember # we recommend new addons test the current and previous LTS # as well as latest stable release (bonus points to beta/canary) - - env: EMBER_TRY_SCENARIO=ember-lts-3.12 - env: EMBER_TRY_SCENARIO=ember-lts-3.16 - env: EMBER_TRY_SCENARIO=ember-lts-3.20 - env: EMBER_TRY_SCENARIO=ember-release @@ -55,12 +55,5 @@ jobs: - env: EMBER_TRY_SCENARIO=ember-default-with-jquery - env: EMBER_TRY_SCENARIO=ember-classic -before_install: - - curl -o- -L https://yarnpkg.com/install.sh | bash - - export PATH=$HOME/.yarn/bin:$PATH - -install: - - yarn install --non-interactive - script: - node_modules/.bin/ember try:one $EMBER_TRY_SCENARIO diff --git a/addons/rose/addon/components/rose/dialog/index.js b/addons/rose/addon/components/rose/dialog/index.js index e152fcaf0..eaba66c8a 100644 --- a/addons/rose/addon/components/rose/dialog/index.js +++ b/addons/rose/addon/components/rose/dialog/index.js @@ -3,7 +3,6 @@ import { generateComponentID } from '../../../utilities/component-auto-id'; import { action } from '@ember/object'; export default class RoseDialogComponent extends Component { - // =attributes /** @@ -23,5 +22,4 @@ export default class RoseDialogComponent extends Component { dismiss(fn) { fn(); } - } diff --git a/addons/rose/addon/components/rose/dropdown/index.js b/addons/rose/addon/components/rose/dropdown/index.js index 916c50c3f..cac1a9963 100644 --- a/addons/rose/addon/components/rose/dropdown/index.js +++ b/addons/rose/addon/components/rose/dropdown/index.js @@ -2,7 +2,6 @@ import Component from '@glimmer/component'; import { computed, action } from '@ember/object'; export default class RoseDropdownComponent extends Component { - // =attributes /** diff --git a/addons/rose/addon/components/rose/dropdown/section/index.js b/addons/rose/addon/components/rose/dropdown/section/index.js index eb2727185..84b354d6c 100644 --- a/addons/rose/addon/components/rose/dropdown/section/index.js +++ b/addons/rose/addon/components/rose/dropdown/section/index.js @@ -3,12 +3,10 @@ import { generateComponentID } from '../../../../utilities/component-auto-id'; import { action } from '@ember/object'; export default class RoseDialogComponent extends Component { - // =attributes /** * @type {string} */ id = generateComponentID(); - } diff --git a/addons/rose/addon/components/rose/footer/copyright/index.js b/addons/rose/addon/components/rose/footer/copyright/index.js index a9068f750..49e6594d0 100644 --- a/addons/rose/addon/components/rose/footer/copyright/index.js +++ b/addons/rose/addon/components/rose/footer/copyright/index.js @@ -1,8 +1,6 @@ import Component from '@glimmer/component'; export default class RoseFooterCopyrightComponent extends Component { - // =attributes currentYear = new Date().getFullYear(); - } diff --git a/addons/rose/addon/components/rose/form/actions/index.js b/addons/rose/addon/components/rose/form/actions/index.js index f8d5bb76e..89e038e72 100644 --- a/addons/rose/addon/components/rose/form/actions/index.js +++ b/addons/rose/addon/components/rose/form/actions/index.js @@ -14,7 +14,6 @@ import { computed } from '@ember/object'; * @cancel=(fn @cancel) /> */ export default class RoseFormActionsComponent extends Component { - /** * @type {boolean} */ diff --git a/addons/rose/addon/components/rose/form/checkbox/index.js b/addons/rose/addon/components/rose/form/checkbox/index.js index b13f24e4f..e557dcd4a 100644 --- a/addons/rose/addon/components/rose/form/checkbox/index.js +++ b/addons/rose/addon/components/rose/form/checkbox/index.js @@ -2,9 +2,7 @@ import Component from '@glimmer/component'; import { generateComponentID } from '../../../../utilities/component-auto-id'; export default class RoseFormCheckboxComponent extends Component { - // =attributes id = generateComponentID(); - } diff --git a/addons/rose/addon/components/rose/form/index.js b/addons/rose/addon/components/rose/form/index.js index 2a9f102e3..a7102918f 100644 --- a/addons/rose/addon/components/rose/form/index.js +++ b/addons/rose/addon/components/rose/form/index.js @@ -3,7 +3,6 @@ import { tracked } from '@glimmer/tracking'; import { computed, action } from '@ember/object'; export default class RoseFormComponent extends Component { - // =attributes /** @@ -57,9 +56,7 @@ export default class RoseFormComponent extends Component { // Since submit is allowed to fail in this context and we don't want // unhandled rejection warnings, we have a no-op catch. if (submitResult?.then) { - submitResult - .then(() => this.isEditable = false) - .catch(() => {}); + submitResult.then(() => (this.isEditable = false)).catch(() => {}); } return false; } @@ -89,5 +86,4 @@ export default class RoseFormComponent extends Component { disableEdit() { this.isEditable = false; } - } diff --git a/addons/rose/addon/components/rose/form/input/index.js b/addons/rose/addon/components/rose/form/input/index.js index 4fbc071f4..de4e226b2 100644 --- a/addons/rose/addon/components/rose/form/input/index.js +++ b/addons/rose/addon/components/rose/form/input/index.js @@ -2,9 +2,7 @@ import Component from '@glimmer/component'; import { generateComponentID } from '../../../../utilities/component-auto-id'; export default class RoseFormInputComponent extends Component { - // =attributes id = generateComponentID(); - } diff --git a/addons/rose/addon/components/rose/form/radio/radio/index.js b/addons/rose/addon/components/rose/form/radio/radio/index.js index ac2c2a6ec..0487f6fe1 100644 --- a/addons/rose/addon/components/rose/form/radio/radio/index.js +++ b/addons/rose/addon/components/rose/form/radio/radio/index.js @@ -2,9 +2,7 @@ import Component from '@glimmer/component'; import { generateComponentID } from '../../../../../utilities/component-auto-id'; export default class RoseFormRadioRadioComponent extends Component { - // =attributes id = generateComponentID(); - } diff --git a/addons/rose/addon/components/rose/form/select/index.js b/addons/rose/addon/components/rose/form/select/index.js index 9690ea00f..fddc7dd2b 100644 --- a/addons/rose/addon/components/rose/form/select/index.js +++ b/addons/rose/addon/components/rose/form/select/index.js @@ -2,9 +2,7 @@ import Component from '@glimmer/component'; import { generateComponentID } from '../../../../utilities/component-auto-id'; export default class RoseFormSelectComponent extends Component { - // =attributes id = generateComponentID(); - } diff --git a/addons/rose/addon/components/rose/form/textarea/index.js b/addons/rose/addon/components/rose/form/textarea/index.js index bbe402965..ff8ed90d1 100644 --- a/addons/rose/addon/components/rose/form/textarea/index.js +++ b/addons/rose/addon/components/rose/form/textarea/index.js @@ -2,9 +2,7 @@ import Component from '@glimmer/component'; import { generateComponentID } from '../../../../utilities/component-auto-id'; export default class RoseFormTextareaComponent extends Component { - // =attributes id = generateComponentID(); - } diff --git a/addons/rose/addon/components/rose/list/key-value/item/index.js b/addons/rose/addon/components/rose/list/key-value/item/index.js index a166c7897..145cf4258 100644 --- a/addons/rose/addon/components/rose/list/key-value/item/index.js +++ b/addons/rose/addon/components/rose/list/key-value/item/index.js @@ -2,9 +2,7 @@ import Component from '@glimmer/component'; import { generateComponentID } from '../../../../../utilities/component-auto-id'; export default class RoseListKeyValueItemComponent extends Component { - // =attributes id = generateComponentID(); - } diff --git a/addons/rose/addon/components/rose/nav/sidebar/index.js b/addons/rose/addon/components/rose/nav/sidebar/index.js index 1d3b63115..18ec05ae9 100644 --- a/addons/rose/addon/components/rose/nav/sidebar/index.js +++ b/addons/rose/addon/components/rose/nav/sidebar/index.js @@ -2,9 +2,7 @@ import Component from '@glimmer/component'; import { generateComponentID } from '../../../../utilities/component-auto-id'; export default class RoseNavSidebarComponent extends Component { - // =attributes id = generateComponentID(); - } diff --git a/addons/rose/addon/components/rose/notification/index.js b/addons/rose/addon/components/rose/notification/index.js index c27d54f9b..881d11355 100644 --- a/addons/rose/addon/components/rose/notification/index.js +++ b/addons/rose/addon/components/rose/notification/index.js @@ -2,7 +2,6 @@ import Component from '@glimmer/component'; import { computed } from '@ember/object'; export default class RoseNotificationComponent extends Component { - /** * Returns an icon name based on the notification style. * @type {string} @@ -25,5 +24,4 @@ export default class RoseNotificationComponent extends Component { return icon; } - } diff --git a/addons/rose/addon/styles/rose/components/_dialog.scss b/addons/rose/addon/styles/rose/components/_dialog.scss index 1ff395f63..677af2bfc 100644 --- a/addons/rose/addon/styles/rose/components/_dialog.scss +++ b/addons/rose/addon/styles/rose/components/_dialog.scss @@ -140,7 +140,7 @@ $xxxxs: sizing.rems(xxxxs); // 1 } // overlay .rose-dialog-modal-overlay { - content: " "; + content: ' '; background-color: var(--black); width: 100vw; height: 100vh; diff --git a/addons/rose/addon/styles/rose/components/card/_link.scss b/addons/rose/addon/styles/rose/components/card/_link.scss index 8c102c151..c4530d3e8 100644 --- a/addons/rose/addon/styles/rose/components/card/_link.scss +++ b/addons/rose/addon/styles/rose/components/card/_link.scss @@ -6,12 +6,11 @@ $xxxs: sizing.rems(xxxs); // 2 .rose-card-link { - --background-color-light: transparent; --background-color-dark: var(--ui-gray-subtler-6); --background-color: var(--background-color-light); - + .ember-application.rose-theme-light & { --background-color: var(--background-color-light); } @@ -124,7 +123,7 @@ $xxxs: sizing.rems(xxxs); // 2 margin: 0; &::before { - content: "ID"; + content: 'ID'; color: var(--stark); padding-right: sizing.rems(xs); } diff --git a/addons/rose/addon/styles/rose/components/dropdown/_section.scss b/addons/rose/addon/styles/rose/components/dropdown/_section.scss index f23bbc0c1..32cbe6150 100644 --- a/addons/rose/addon/styles/rose/components/dropdown/_section.scss +++ b/addons/rose/addon/styles/rose/components/dropdown/_section.scss @@ -9,6 +9,6 @@ margin: 0; $line-height: 36 / 14; line-height: $line-height; - color: var(--ui-gray) + color: var(--ui-gray); } } diff --git a/addons/rose/addon/styles/rose/components/header/_index.scss b/addons/rose/addon/styles/rose/components/header/_index.scss index 1bc82b5e3..d9c969c60 100644 --- a/addons/rose/addon/styles/rose/components/header/_index.scss +++ b/addons/rose/addon/styles/rose/components/header/_index.scss @@ -9,7 +9,6 @@ @import 'dropdown'; .rose-header { - --box-shadow-light: none; --box-shadow-dark: inset 0 -#{sizing.rems(xxxxs)} 0 var(--ui-border-subtler-1); diff --git a/addons/rose/addon/styles/rose/components/table/_table.scss b/addons/rose/addon/styles/rose/components/table/_table.scss index 956ab5faa..0c581393e 100644 --- a/addons/rose/addon/styles/rose/components/table/_table.scss +++ b/addons/rose/addon/styles/rose/components/table/_table.scss @@ -35,7 +35,7 @@ } } - [class*="rose-button"] { + [class*='rose-button'] { margin-bottom: 0; } } diff --git a/addons/rose/addon/styles/rose/variables/_sizing.scss b/addons/rose/addon/styles/rose/variables/_sizing.scss index 81b9c94e9..6879d2da9 100644 --- a/addons/rose/addon/styles/rose/variables/_sizing.scss +++ b/addons/rose/addon/styles/rose/variables/_sizing.scss @@ -7,23 +7,23 @@ $size-coefficients: ( xxl: 3, // 48 - xl: 2.25, + xl: 2.25, // 36 - l: 1.5, + l: 1.5, // 24 - m: 1, + m: 1, // 16 - base - s: 0.75, + s: 0.75, // 12 - xs: 0.5, + xs: 0.5, // 8 - off-xs: 0.3125, + off-xs: 0.3125, // 5 - xxs: 0.25, + xxs: 0.25, // 4 - xxxs: 0.125, + xxxs: 0.125, // 2 - xxxxs: 0.0625, + xxxxs: 0.0625, // 1 ); diff --git a/addons/rose/addon/styles/rose/variables/_typography.scss b/addons/rose/addon/styles/rose/variables/_typography.scss index 067c74496..1bd4c5415 100644 --- a/addons/rose/addon/styles/rose/variables/_typography.scss +++ b/addons/rose/addon/styles/rose/variables/_typography.scss @@ -26,21 +26,21 @@ $base-font-size: 16; $font-sizes: ( xl: sizing.size(m) * 1.75, // 28 - l: sizing.size(m) * 1.25, + l: sizing.size(m) * 1.25, // 20 - m: sizing.size(m), + m: sizing.size(m), // 16 - s: sizing.size(m) * 0.875, + s: sizing.size(m) * 0.875, // 14 - xs: sizing.size(m) * 0.75, + xs: sizing.size(m) * 0.75, // 12 - h1: sizing.size(m) * 1.75, + h1: sizing.size(m) * 1.75, // 28 - h2: sizing.size(m) * 1.25, + h2: sizing.size(m) * 1.25, // 20 - h3: sizing.size(m), + h3: sizing.size(m), // 16 - button: sizing.size(m) * 0.8125, + button: sizing.size(m) * 0.8125, // 13 ); diff --git a/addons/rose/app/components/rose/dialog.js b/addons/rose/app/components/rose/dialog.js index 6d1f33374..e457a1ea4 100644 --- a/addons/rose/app/components/rose/dialog.js +++ b/addons/rose/app/components/rose/dialog.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/dialog'; \ No newline at end of file +export { default } from 'rose/components/rose/dialog'; diff --git a/addons/rose/app/components/rose/dialog/body.js b/addons/rose/app/components/rose/dialog/body.js index 53ba1e1f2..6022217f2 100644 --- a/addons/rose/app/components/rose/dialog/body.js +++ b/addons/rose/app/components/rose/dialog/body.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/dialog/body'; \ No newline at end of file +export { default } from 'rose/components/rose/dialog/body'; diff --git a/addons/rose/app/components/rose/dropdown/section.js b/addons/rose/app/components/rose/dropdown/section.js index 5b4572475..296cc4544 100644 --- a/addons/rose/app/components/rose/dropdown/section.js +++ b/addons/rose/app/components/rose/dropdown/section.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/dropdown/section'; \ No newline at end of file +export { default } from 'rose/components/rose/dropdown/section'; diff --git a/addons/rose/app/components/rose/footer.js b/addons/rose/app/components/rose/footer.js index ccac33104..0e28e5c81 100644 --- a/addons/rose/app/components/rose/footer.js +++ b/addons/rose/app/components/rose/footer.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/footer'; \ No newline at end of file +export { default } from 'rose/components/rose/footer'; diff --git a/addons/rose/app/components/rose/footer/brand.js b/addons/rose/app/components/rose/footer/brand.js index 995d715ba..0f7f60629 100644 --- a/addons/rose/app/components/rose/footer/brand.js +++ b/addons/rose/app/components/rose/footer/brand.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/footer/brand'; \ No newline at end of file +export { default } from 'rose/components/rose/footer/brand'; diff --git a/addons/rose/app/components/rose/footer/copyright.js b/addons/rose/app/components/rose/footer/copyright.js index d46304fc7..a6153621d 100644 --- a/addons/rose/app/components/rose/footer/copyright.js +++ b/addons/rose/app/components/rose/footer/copyright.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/footer/copyright'; \ No newline at end of file +export { default } from 'rose/components/rose/footer/copyright'; diff --git a/addons/rose/app/components/rose/footer/nav.js b/addons/rose/app/components/rose/footer/nav.js index 3ca032af2..81282d6ea 100644 --- a/addons/rose/app/components/rose/footer/nav.js +++ b/addons/rose/app/components/rose/footer/nav.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/footer/nav'; \ No newline at end of file +export { default } from 'rose/components/rose/footer/nav'; diff --git a/addons/rose/app/components/rose/footer/nav/link.js b/addons/rose/app/components/rose/footer/nav/link.js index e38b27530..8b14eb2c0 100644 --- a/addons/rose/app/components/rose/footer/nav/link.js +++ b/addons/rose/app/components/rose/footer/nav/link.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/footer/nav/link'; \ No newline at end of file +export { default } from 'rose/components/rose/footer/nav/link'; diff --git a/addons/rose/app/components/rose/footer/product.js b/addons/rose/app/components/rose/footer/product.js index 7193b5690..ea676f3cf 100644 --- a/addons/rose/app/components/rose/footer/product.js +++ b/addons/rose/app/components/rose/footer/product.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/footer/product'; \ No newline at end of file +export { default } from 'rose/components/rose/footer/product'; diff --git a/addons/rose/app/components/rose/form/actions/edit-toggle.js b/addons/rose/app/components/rose/form/actions/edit-toggle.js index e0790458d..033503049 100644 --- a/addons/rose/app/components/rose/form/actions/edit-toggle.js +++ b/addons/rose/app/components/rose/form/actions/edit-toggle.js @@ -1 +1 @@ -export { default } from 'rose/components/rose/form/actions/edit-toggle'; \ No newline at end of file +export { default } from 'rose/components/rose/form/actions/edit-toggle'; diff --git a/addons/rose/config/ember-try.js b/addons/rose/config/ember-try.js index 9190baee5..f14ac7f50 100644 --- a/addons/rose/config/ember-try.js +++ b/addons/rose/config/ember-try.js @@ -6,14 +6,6 @@ module.exports = async function () { return { useYarn: true, scenarios: [ - { - name: 'ember-lts-3.12', - npm: { - devDependencies: { - 'ember-source': '~3.12.0', - }, - }, - }, { name: 'ember-lts-3.16', npm: { @@ -26,9 +18,9 @@ module.exports = async function () { name: 'ember-lts-3.20', npm: { devDependencies: { - 'ember-source': '~3.20.5' - } - } + 'ember-source': '~3.20.5', + }, + }, }, { name: 'ember-release', @@ -63,9 +55,9 @@ module.exports = async function () { }, npm: { devDependencies: { - '@ember/jquery': '^1.1.0' - } - } + '@ember/jquery': '^1.1.0', + }, + }, }, { name: 'ember-classic', diff --git a/addons/rose/package.json b/addons/rose/package.json index 331b9d557..3a4666505 100644 --- a/addons/rose/package.json +++ b/addons/rose/package.json @@ -10,13 +10,16 @@ "scripts": { "build:development": "ember build", "build": "ember build --environment=production", - "lint": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*", + "lint": "npm-run-all --aggregate-output --continue-on-error --parallel 'lint:!(fix)'", + "lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix", "lint:hbs": "ember-template-lint .", + "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint .", "lint:sass": "sass-lint -v -q", "format": "npm run format:js && npm run format:sass", "format:js": "prettier --write '{addon,app,config,stories,tests}/**/*.js' *.js", "format:sass": "prettier --write addon/**/*.scss", + "lint:js:fix": "eslint . --fix", "start": "ember serve", "test": "ember test", "test:ember-compatibility": "ember try:each", @@ -27,17 +30,18 @@ }, "dependencies": { "babel-loader": "^8.1.0", - "ember-cli-babel": "^7.21.0", - "ember-cli-htmlbars": "^5.2.0", + "ember-cli-babel": "^7.23.0", + "ember-cli-htmlbars": "^5.3.1", + "ember-focus-trap": "^0.4.0", "ember-radio-button": "^2.0.1", "ember-uuid": "^2.1.0", - "emberx-select": "github:adopted-ember-addons/emberx-select#bc5f774", - "ember-focus-trap": "^0.4.0" + "emberx-select": "github:adopted-ember-addons/emberx-select#bc5f774" }, "devDependencies": { - "@ember/optional-features": "^1.3.0", - "@glimmer/component": "^1.0.1", - "@glimmer/tracking": "^1.0.0", + "@ember/optional-features": "^2.0.0", + "@ember/test-helpers": "^2.1.4", + "@glimmer/component": "^1.0.3", + "@glimmer/tracking": "^1.0.3", "@hashicorp/structure-icons": "^1.8.1", "@storybook/addon-actions": "^6.0.26", "@storybook/addon-docs": "^6.0.26", @@ -47,33 +51,37 @@ "babel-eslint": "^10.1.0", "broccoli-asset-rev": "^3.0.0", "doctoc": "^1.4.0", - "ember-auto-import": "^1.6.0", - "ember-cli": "~3.20.2", + "ember-auto-import": "^1.10.1", + "ember-cli": "~3.24.0", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-inject-live-reload": "^2.0.2", "ember-cli-sass": "^10.0.1", "ember-cli-sri": "^2.1.1", - "ember-cli-uglify": "^3.0.0", + "ember-cli-terser": "^4.0.1", "ember-cli-update": "^0.54.6", "ember-disable-prototype-extensions": "^1.1.3", "ember-export-application-global": "^2.0.1", "ember-inline-svg": "^1.0.0", - "ember-load-initializers": "^2.1.1", + "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^0.1.6", "ember-modifier": "^1.0.3", - "ember-qunit": "^4.6.0", - "ember-resolver": "^8.0.0", - "ember-source": "~3.20.2", - "ember-source-channel-url": "^2.0.1", - "ember-template-lint": "^2.9.1", + "ember-page-title": "^6.0.3", + "ember-qunit": "^5.1.1", + "ember-resolver": "^8.0.2", + "ember-source": "~3.24.0", + "ember-source-channel-url": "^3.0.0", + "ember-template-lint": "^2.15.0", "ember-try": "^1.4.0", - "eslint": "^7.5.0", - "eslint-plugin-ember": "^8.9.1", + "eslint": "^7.17.0", + "eslint-config-prettier": "^7.1.0", + "eslint-plugin-ember": "^10.1.1", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", - "prettier": "^2.0.5", - "qunit-dom": "^1.2.0", + "prettier": "^2.2.1", + "qunit": "^2.13.0", + "qunit-dom": "^1.6.0", "sass": "^1.26.5", "sass-lint": "^1.13.1" }, diff --git a/addons/rose/tests/dummy/config/ember-cli-update.json b/addons/rose/tests/dummy/config/ember-cli-update.json index 3c0c55fdb..ed4d5fc2d 100644 --- a/addons/rose/tests/dummy/config/ember-cli-update.json +++ b/addons/rose/tests/dummy/config/ember-cli-update.json @@ -3,7 +3,7 @@ "packages": [ { "name": "ember-cli", - "version": "3.20.2", + "version": "3.24.0", "blueprints": [ { "name": "addon", diff --git a/addons/rose/tests/index.html b/addons/rose/tests/index.html index 5209b8523..3eb848dbd 100644 --- a/addons/rose/tests/index.html +++ b/addons/rose/tests/index.html @@ -21,6 +21,13 @@ {{content-for "body"}} {{content-for "test-body"}} +
+
+
+
+
+
+ diff --git a/addons/rose/tests/integration/components/rose/card/link-test.js b/addons/rose/tests/integration/components/rose/card/link-test.js index 288679791..af9003ef3 100644 --- a/addons/rose/tests/integration/components/rose/card/link-test.js +++ b/addons/rose/tests/integration/components/rose/card/link-test.js @@ -41,7 +41,9 @@ module('Integration | Component | rose/card/link', function (hooks) { }); test('it renders with @icon', async function (assert) { - await render(hbs``); + await render( + hbs`` + ); assert.ok(find('.rose-icon')); }); diff --git a/addons/rose/tests/integration/components/rose/dialog-test.js b/addons/rose/tests/integration/components/rose/dialog-test.js index a3fe4c8d6..2207378f2 100644 --- a/addons/rose/tests/integration/components/rose/dialog-test.js +++ b/addons/rose/tests/integration/components/rose/dialog-test.js @@ -3,7 +3,7 @@ import { setupRenderingTest } from 'ember-qunit'; import { render, find, click } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -module('Integration | Component | rose/dialog', function(hooks) { +module('Integration | Component | rose/dialog', function (hooks) { setupRenderingTest(hooks); test('it renders and handles dismiss actions', async function (assert) { @@ -24,5 +24,4 @@ module('Integration | Component | rose/dialog', function(hooks) { assert.ok(find('.rose-dialog-footer')); await click('button'); }); - }); diff --git a/addons/rose/tests/integration/components/rose/dialog/body-test.js b/addons/rose/tests/integration/components/rose/dialog/body-test.js index 28376e933..252f745a3 100644 --- a/addons/rose/tests/integration/components/rose/dialog/body-test.js +++ b/addons/rose/tests/integration/components/rose/dialog/body-test.js @@ -3,10 +3,10 @@ import { setupRenderingTest } from 'ember-qunit'; import { render } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -module('Integration | Component | rose/dialog/body', function(hooks) { +module('Integration | Component | rose/dialog/body', function (hooks) { setupRenderingTest(hooks); - test('it renders', async function(assert) { + test('it renders', async function (assert) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.set('myAction', function(val) { ... }); diff --git a/addons/rose/tests/integration/components/rose/dropdown/section-test.js b/addons/rose/tests/integration/components/rose/dropdown/section-test.js index 1719ccd6a..201ba9c82 100644 --- a/addons/rose/tests/integration/components/rose/dropdown/section-test.js +++ b/addons/rose/tests/integration/components/rose/dropdown/section-test.js @@ -3,10 +3,10 @@ import { setupRenderingTest } from 'ember-qunit'; import { render, find } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -module('Integration | Component | rose/dropdown/section', function(hooks) { +module('Integration | Component | rose/dropdown/section', function (hooks) { setupRenderingTest(hooks); - test('it renders', async function(assert) { + test('it renders', async function (assert) { await render(hbs` template block text @@ -16,12 +16,15 @@ module('Integration | Component | rose/dropdown/section', function(hooks) { assert.equal(this.element.textContent.trim(), 'template block text'); }); - test('it renders with optional @title', async function(assert) { + test('it renders with optional @title', async function (assert) { await render(hbs` template block text `); - assert.equal(find('.rose-dropdown-section-title').textContent.trim(), 'Section Title'); + assert.equal( + find('.rose-dropdown-section-title').textContent.trim(), + 'Section Title' + ); }); }); diff --git a/addons/rose/tests/integration/components/rose/footer-test.js b/addons/rose/tests/integration/components/rose/footer-test.js index 4a43f0d4f..6da5ef4c8 100644 --- a/addons/rose/tests/integration/components/rose/footer-test.js +++ b/addons/rose/tests/integration/components/rose/footer-test.js @@ -3,9 +3,9 @@ import { setupRenderingTest } from 'ember-qunit'; import { render, find } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -module('Integration | Component | rose/footer', function(hooks) { +module('Integration | Component | rose/footer', function (hooks) { setupRenderingTest(hooks); - + test('it renders', async function (assert) { assert.expect(4); await render(hbs``); @@ -38,5 +38,4 @@ module('Integration | Component | rose/footer', function(hooks) { `); assert.ok(find('.rose-footer-text')); }); - }); diff --git a/addons/rose/tests/integration/components/rose/footer/nav-test.js b/addons/rose/tests/integration/components/rose/footer/nav-test.js index 782602f44..4c60c2de2 100644 --- a/addons/rose/tests/integration/components/rose/footer/nav-test.js +++ b/addons/rose/tests/integration/components/rose/footer/nav-test.js @@ -3,7 +3,7 @@ import { setupRenderingTest } from 'ember-qunit'; import { render, find, findAll } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -module('Integration | Component | rose/footer/nav', function(hooks) { +module('Integration | Component | rose/footer/nav', function (hooks) { setupRenderingTest(hooks); test('it renders', async function (assert) { @@ -20,5 +20,4 @@ module('Integration | Component | rose/footer/nav', function(hooks) { `); assert.equal(findAll('a').length, 2); }); - }); diff --git a/addons/rose/tests/integration/components/rose/footer/nav/link-test.js b/addons/rose/tests/integration/components/rose/footer/nav/link-test.js index d5405db01..caa744487 100644 --- a/addons/rose/tests/integration/components/rose/footer/nav/link-test.js +++ b/addons/rose/tests/integration/components/rose/footer/nav/link-test.js @@ -3,7 +3,7 @@ import { setupRenderingTest } from 'ember-qunit'; import { render, find } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -module('Integration | Component | rose/footer/nav/link', function(hooks) { +module('Integration | Component | rose/footer/nav/link', function (hooks) { setupRenderingTest(hooks); test('it renders with @href', async function (assert) { diff --git a/addons/rose/tests/integration/components/rose/footer/text-test.js b/addons/rose/tests/integration/components/rose/footer/text-test.js index d3cbfacff..fea89e0cd 100644 --- a/addons/rose/tests/integration/components/rose/footer/text-test.js +++ b/addons/rose/tests/integration/components/rose/footer/text-test.js @@ -3,7 +3,7 @@ import { setupRenderingTest } from 'ember-qunit'; import { render, find } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -module('Integration | Component | rose/footer/text', function(hooks) { +module('Integration | Component | rose/footer/text', function (hooks) { setupRenderingTest(hooks); test('it renders', async function (assert) { diff --git a/addons/rose/tests/integration/components/rose/form-test.js b/addons/rose/tests/integration/components/rose/form-test.js index a8103ca56..eae79f40e 100644 --- a/addons/rose/tests/integration/components/rose/form-test.js +++ b/addons/rose/tests/integration/components/rose/form-test.js @@ -69,7 +69,10 @@ module('Integration | Component | rose/form', function (hooks) { test('it supports an editability toggle when @showEditToggle is true', async function (assert) { assert.expect(12); this.cancel = () => { - assert.ok(true, 'cancel function may still be passed even for @showEditToggle'); + assert.ok( + true, + 'cancel function may still be passed even for @showEditToggle' + ); }; this.submit = () => {}; await render(hbs` @@ -96,7 +99,10 @@ module('Integration | Component | rose/form', function (hooks) { assert.equal(findAll('input[disabled]').length, 0); assert.equal(findAll('button').length, 2); assert.equal(find('[type="submit"]').textContent.trim(), 'Save'); - assert.equal(find('button:not([type="submit"])').textContent.trim(), 'Cancel'); + assert.equal( + find('button:not([type="submit"])').textContent.trim(), + 'Cancel' + ); // After canceling, fields are disabled again and the edit mode button is displayed await click('button:not([type="submit"])'); assert.equal(findAll('input[disabled]').length, 1); @@ -131,13 +137,19 @@ module('Integration | Component | rose/form', function (hooks) { assert.equal(findAll('input[disabled]').length, 0); assert.equal(findAll('button').length, 2); assert.equal(find('[type="submit"]').textContent.trim(), 'Save'); - assert.equal(find('button:not([type="submit"])').textContent.trim(), 'Cancel'); + assert.equal( + find('button:not([type="submit"])').textContent.trim(), + 'Cancel' + ); // After saving with failure, fields are enabled and save/cancel buttons are displayed this.submit = () => reject(); assert.equal(findAll('input[disabled]').length, 0); assert.equal(findAll('button').length, 2); assert.equal(find('[type="submit"]').textContent.trim(), 'Save'); - assert.equal(find('button:not([type="submit"])').textContent.trim(), 'Cancel'); + assert.equal( + find('button:not([type="submit"])').textContent.trim(), + 'Cancel' + ); // After saving with success, fields are disabled again and the edit mode button is displayed this.submit = () => resolve(); await click('button[type="submit"]'); diff --git a/addons/rose/tests/integration/components/rose/form/actions-test.js b/addons/rose/tests/integration/components/rose/form/actions-test.js index 0463d1247..21ea002b4 100644 --- a/addons/rose/tests/integration/components/rose/form/actions-test.js +++ b/addons/rose/tests/integration/components/rose/form/actions-test.js @@ -17,7 +17,9 @@ module('Integration | Component | rose/form/actions', function (hooks) { test('it can disable the buttons', async function (assert) { assert.expect(2); this.cancel = () => {}; - await render(hbs`{{rose/form/actions cancel=this.cancel submitDisabled=true cancelDisabled=true}}`); + await render( + hbs`{{rose/form/actions cancel=this.cancel submitDisabled=true cancelDisabled=true}}` + ); assert.ok(find('[type="submit"]:disabled')); assert.ok(find('button:not([type="submit"]):disabled')); }); diff --git a/addons/rose/tests/integration/components/rose/form/actions/edit-toggle-test.js b/addons/rose/tests/integration/components/rose/form/actions/edit-toggle-test.js index 436a14b03..fd31aa5a7 100644 --- a/addons/rose/tests/integration/components/rose/form/actions/edit-toggle-test.js +++ b/addons/rose/tests/integration/components/rose/form/actions/edit-toggle-test.js @@ -3,20 +3,27 @@ import { setupRenderingTest } from 'ember-qunit'; import { render, find, click } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -module('Integration | Component | rose/form/actions/edit-toggle', function (hooks) { - setupRenderingTest(hooks); +module( + 'Integration | Component | rose/form/actions/edit-toggle', + function (hooks) { + setupRenderingTest(hooks); - test('it renders a regular button', async function (assert) { - assert.expect(1); - this.enableEdit = () => {}; - await render(hbs`{{rose/form/actions/edit-toggle enableEdit=this.enableEdit}}`); - assert.ok(find('button')); - }); + test('it renders a regular button', async function (assert) { + assert.expect(1); + this.enableEdit = () => {}; + await render( + hbs`{{rose/form/actions/edit-toggle enableEdit=this.enableEdit}}` + ); + assert.ok(find('button')); + }); - test('it executes a function on button click', async function (assert) { - assert.expect(1); - this.enableEdit = () => assert.ok(true, 'edit was clicked'); - await render(hbs`{{rose/form/actions/edit-toggle enableEdit=this.enableEdit}}`); - await click('button'); - }); -}); + test('it executes a function on button click', async function (assert) { + assert.expect(1); + this.enableEdit = () => assert.ok(true, 'edit was clicked'); + await render( + hbs`{{rose/form/actions/edit-toggle enableEdit=this.enableEdit}}` + ); + await click('button'); + }); + } +); diff --git a/addons/rose/tests/test-helper.js b/addons/rose/tests/test-helper.js index 4eae06f81..4efd6e58a 100644 --- a/addons/rose/tests/test-helper.js +++ b/addons/rose/tests/test-helper.js @@ -1,8 +1,12 @@ import Application from 'dummy/app'; import config from 'dummy/config/environment'; +import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; setApplication(Application.create(config.APP)); +setup(QUnit.assert); + start(); diff --git a/package.json b/package.json index 28f76d867..7e89f60bc 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "compliance:audit": "bash ./scripts/yarn-audit.sh", "precommit": "yarn compliance:licenses && yarn compliance:audit && yarn lint && yarn test", "commit": "git-cz", - "compliance:licenses": "license-checker --onlyAllow 'Apache*;Apache License, Version 2.0;Apache-2.0;Apache 2.0;Artistic-2.0;BSD;BSD-3-Clause;CC-BY-3.0;CC-BY-4.0;CC0-1.0;ISC;MIT;MPL-2.0;Public Domain;Unicode-TOU;Unlicense;WTFPL' --excludePackages 'boundary-ui;admin@0.0.0;desktop@0.0.0;base64-js@0.0.2;cycle@1.0.3'", + "compliance:licenses": "license-checker --onlyAllow 'Apache*;Apache License, Version 2.0;Apache-2.0;Apache 2.0;Artistic-2.0;BSD;BSD-3-Clause;CC-BY-3.0;CC-BY-4.0;CC0-1.0;ISC;MIT;MPL-2.0;Public Domain;Python-2.0;Unicode-TOU;Unlicense;WTFPL' --excludePackages 'boundary-ui;admin@0.0.0;desktop@0.0.0;base64-js@0.0.2;cycle@1.0.3'", "doc:toc": "doctoc README.md" }, "devDependencies": { @@ -55,7 +55,8 @@ "caniuse-lite": "^1.0.30001157", "immer": "^8.0.1", "node-notifier": "^8.0.1", - "highlight.js": "^10.4.1" + "highlight.js": "^10.4.1", + "hoek": "~4.2.0" }, "config": { "commitizen": { diff --git a/ui/admin/.eslintignore b/ui/admin/.eslintignore index 72df37307..922165552 100644 --- a/ui/admin/.eslintignore +++ b/ui/admin/.eslintignore @@ -13,6 +13,7 @@ # misc /coverage/ !.* +.eslintcache # ember-try /.node_modules.ember-try/ diff --git a/ui/admin/.eslintrc.js b/ui/admin/.eslintrc.js index 26d707835..5062441ff 100644 --- a/ui/admin/.eslintrc.js +++ b/ui/admin/.eslintrc.js @@ -7,47 +7,53 @@ module.exports = { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { - legacyDecorators: true - } + legacyDecorators: true, + }, }, - plugins: [ - 'ember' - ], + plugins: ['ember'], extends: [ 'eslint:recommended', - 'plugin:ember/recommended' + 'plugin:ember/recommended', + 'plugin:prettier/recommended', ], env: { - browser: true + browser: true, + }, + rules: { + 'ember/no-get': 'off', + 'ember/no-get-with-default': 'off', + 'ember/no-computed-properties-in-native-classes': 'off', + 'ember/no-assignment-of-untracked-properties-used-in-tracking-contexts': + 'off', }, - rules: {}, overrides: [ // node files { files: [ '.eslintrc.js', + '.prettierrc.js', '.template-lintrc.js', 'ember-cli-build.js', 'testem.js', 'blueprints/*/index.js', 'config/**/*.js', 'lib/*/index.js', - 'server/**/*.js' + 'server/**/*.js', ], parserOptions: { - sourceType: 'script' + sourceType: 'script', }, env: { browser: false, - node: true + node: true, }, plugins: ['node'], extends: ['plugin:node/recommended'], rules: { // this can be removed once the following is fixed // https://github.com/mysticatea/eslint-plugin-node/issues/77 - 'node/no-unpublished-require': 'off' - } - } - ] + 'node/no-unpublished-require': 'off', + }, + }, + ], }; diff --git a/ui/admin/.prettierignore b/ui/admin/.prettierignore new file mode 100644 index 000000000..922165552 --- /dev/null +++ b/ui/admin/.prettierignore @@ -0,0 +1,21 @@ +# unconventional js +/blueprints/*/files/ +/vendor/ + +# compiled output +/dist/ +/tmp/ + +# dependencies +/bower_components/ +/node_modules/ + +# misc +/coverage/ +!.* +.eslintcache + +# ember-try +/.node_modules.ember-try/ +/bower.json.ember-try +/package.json.ember-try diff --git a/ui/admin/.prettierrc.js b/ui/admin/.prettierrc.js new file mode 100644 index 000000000..534e6d35a --- /dev/null +++ b/ui/admin/.prettierrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + singleQuote: true, +}; diff --git a/ui/admin/.template-lintrc.js b/ui/admin/.template-lintrc.js index b887df9af..be0764215 100644 --- a/ui/admin/.template-lintrc.js +++ b/ui/admin/.template-lintrc.js @@ -4,7 +4,17 @@ module.exports = { extends: 'octane', rules: { 'no-bare-strings': true, - 'no-curly-component-invocation': { allow: ['app-name', 'company-name', 'company-copyright'] }, - 'no-implicit-this': { allow: ['app-name', 'company-name', 'company-copyright', 'doc-url', 'is-loading'] } - } + 'no-curly-component-invocation': { + allow: ['app-name', 'company-name', 'company-copyright'], + }, + 'no-implicit-this': { + allow: [ + 'app-name', + 'company-name', + 'company-copyright', + 'doc-url', + 'is-loading', + ], + }, + }, }; diff --git a/ui/admin/app/components/copyable/index.hbs b/ui/admin/app/components/copyable/index.hbs index 618f3315b..ac3474940 100644 --- a/ui/admin/app/components/copyable/index.hbs +++ b/ui/admin/app/components/copyable/index.hbs @@ -2,7 +2,7 @@ id={{this.id}} class="copyable" {{did-insert this.register}} - {{will-destroy this.destroy}} + {{will-destroy this.tearDown}} > {{#if this.copied}} diff --git a/ui/admin/app/components/copyable/index.js b/ui/admin/app/components/copyable/index.js index 17652e911..09da77365 100644 --- a/ui/admin/app/components/copyable/index.js +++ b/ui/admin/app/components/copyable/index.js @@ -36,6 +36,7 @@ export default class CopyableComponent extends Component { this.copied = true; yield timeout(1000); this.copied = false; + /* eslint-disable-next-line prettier/prettier */ }).drop() confirmCopyTimer; /** @@ -53,7 +54,7 @@ export default class CopyableComponent extends Component { */ @action register() { - this.destroy(); + this.tearDown(); /* istanbul ignore next */ this.clipboard = new ClipboardJS(`#${this.copyableButtonId}`, { text: () => this.args.text, @@ -69,7 +70,7 @@ export default class CopyableComponent extends Component { * Destroy ClipboardJS library instance and cancel icon timer. */ @action - destroy() { + tearDown() { this.clipboard?.destroy(); this.clipboard = null; this.confirmCopyTimer.cancelAll(); diff --git a/ui/admin/app/routes/scopes/scope.js b/ui/admin/app/routes/scopes/scope.js index 52799df7c..196164793 100644 --- a/ui/admin/app/routes/scopes/scope.js +++ b/ui/admin/app/routes/scopes/scope.js @@ -70,6 +70,7 @@ export default class ScopesScopeRoute extends Route { // Update the controller (if exists), since setupController is only // called once the first time the route is activated. It is not called // again on route refreshes. + /* eslint-disable-next-line ember/no-controller-access-in-routes */ if (this.controller) this.setControllerProperties(this.scopes); } @@ -87,6 +88,7 @@ export default class ScopesScopeRoute extends Route { * @param {array} scopes */ setControllerProperties(scopes) { + /* eslint-disable-next-line ember/no-controller-access-in-routes */ this.controller.setProperties({ scopes }); } diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js index 72d2c0609..66b8b2236 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/auth-method/accounts/account/set-password.js @@ -2,10 +2,7 @@ import Route from '@ember/routing/route'; import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import loading from 'ember-loading/decorator'; -import { - notifySuccess, - notifyError, -} from 'core/decorators/notify'; +import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeAuthMethodsAuthMethodAccountsAccountSettingsRoute extends Route { // =services diff --git a/ui/admin/app/routes/scopes/scope/auth-methods/new.js b/ui/admin/app/routes/scopes/scope/auth-methods/new.js index 04ab0aacf..dee0dc759 100644 --- a/ui/admin/app/routes/scopes/scope/auth-methods/new.js +++ b/ui/admin/app/routes/scopes/scope/auth-methods/new.js @@ -5,8 +5,8 @@ export default class ScopesScopeAuthMethodsNewRoute extends Route { queryParams = { type: { - refreshModel: true - } + refreshModel: true, + }, }; // =methods diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js index b92c16814..5232404f1 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/add-hosts.js @@ -3,10 +3,7 @@ import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { hash } from 'rsvp'; import loading from 'ember-loading/decorator'; -import { - notifySuccess, - notifyError, -} from 'core/decorators/notify'; +import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetAddHostsRoute extends Route { // =services diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host.js index 977fc45f4..dfb871e6a 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/create-and-add-host.js @@ -2,10 +2,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import loading from 'ember-loading/decorator'; -import { - notifySuccess, - notifyError, -} from 'core/decorators/notify'; +import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetCreateAndAddHostRoute extends Route { // =services diff --git a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts.js b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts.js index 5c3fbae73..b3f1a1c23 100644 --- a/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts.js +++ b/ui/admin/app/routes/scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts.js @@ -4,10 +4,7 @@ import { action } from '@ember/object'; import { inject as service } from '@ember/service'; import loading from 'ember-loading/decorator'; import { confirm } from 'core/decorators/confirm'; -import { - notifySuccess, - notifyError, -} from 'core/decorators/notify'; +import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetHostsRoute extends Route { // =services diff --git a/ui/admin/app/routes/scopes/scope/roles/role/index.js b/ui/admin/app/routes/scopes/scope/roles/role/index.js index 24dd3c658..1f9589be7 100644 --- a/ui/admin/app/routes/scopes/scope/roles/role/index.js +++ b/ui/admin/app/routes/scopes/scope/roles/role/index.js @@ -19,7 +19,7 @@ export default class ScopesScopeRolesRoleIndexRoute extends Route { subScopes, }, ]; - this.set('grantScopes', grantScopes); + this.grantScopes = grantScopes; } /** diff --git a/ui/admin/app/routes/scopes/scope/sessions.js b/ui/admin/app/routes/scopes/scope/sessions.js index 2bcb606c1..2df7c8b4b 100644 --- a/ui/admin/app/routes/scopes/scope/sessions.js +++ b/ui/admin/app/routes/scopes/scope/sessions.js @@ -34,6 +34,7 @@ export default class ScopesScopeSessionsRoute extends Route { yield timeout(POLL_TIMEOUT_SECONDS * 1000); yield this.refresh(); } + /* eslint-disable-next-line prettier/prettier */ }).drop() poller; // =methods diff --git a/ui/admin/config/ember-cli-update.json b/ui/admin/config/ember-cli-update.json index 4c2450a37..c408f46f0 100644 --- a/ui/admin/config/ember-cli-update.json +++ b/ui/admin/config/ember-cli-update.json @@ -3,7 +3,7 @@ "packages": [ { "name": "ember-cli", - "version": "3.20.2", + "version": "3.24.0", "blueprints": [ { "name": "app", diff --git a/ui/admin/config/environment.js b/ui/admin/config/environment.js index 00c5d66aa..cf0662636 100644 --- a/ui/admin/config/environment.js +++ b/ui/admin/config/environment.js @@ -82,8 +82,8 @@ module.exports = function (environment) { }, 'ember-cli-mirage': { - directory: '../../addons/api/mirage' - } + directory: '../../addons/api/mirage', + }, }; // Unsafe policy is necessary in development and test environments, but should diff --git a/ui/admin/ember-cli-build.js b/ui/admin/ember-cli-build.js index e99e80679..68a02a237 100644 --- a/ui/admin/ember-cli-build.js +++ b/ui/admin/ember-cli-build.js @@ -5,7 +5,7 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); module.exports = function (defaults) { let app = new EmberApp(defaults, { 'ember-cli-babel': { - includeExternalHelpers: true + includeExternalHelpers: true, }, babel: { sourceMaps: 'inline', @@ -22,10 +22,8 @@ module.exports = function (defaults) { importCss: false, }, svg: { - paths: [ - '../../addons/core/public' - ] - } + paths: ['../../addons/core/public'], + }, }); // Only import when in development or test mode diff --git a/ui/admin/package.json b/ui/admin/package.json index 9df05a650..ad2580897 100644 --- a/ui/admin/package.json +++ b/ui/admin/package.json @@ -13,13 +13,16 @@ "doc:toc": "doctoc README.md", "build:development": "ember build", "build": "ember build --environment=production", - "lint": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*", + "lint": "npm-run-all --aggregate-output --continue-on-error --parallel 'lint:!(fix)'", + "lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix", "lint:hbs": "ember-template-lint .", + "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint .", "lint:sass": "sass-lint -v -q", "format": "npm-run-all format:*", "format:js": "prettier --write '{app,config,stories,tests}/**/*.js' *.js", "format:sass": "prettier --write app/**/*.scss", + "lint:js:fix": "eslint . --fix", "start": "ember serve", "clean:coverage": "rm -rf coverage_*", "pretest": "yarn clean:coverage", @@ -29,10 +32,11 @@ }, "devDependencies": { "@babel/core": "^7.9.6", - "@ember/optional-features": "^1.3.0", + "@ember/optional-features": "^2.0.0", "@ember/render-modifiers": "^1.0.2", - "@glimmer/component": "^1.0.1", - "@glimmer/tracking": "^1.0.0", + "@ember/test-helpers": "^2.1.4", + "@glimmer/component": "^1.0.3", + "@glimmer/tracking": "^1.0.3", "babel-eslint": "^10.1.0", "babel-loader": "^8.1.0", "broccoli-asset-rev": "^3.0.0", @@ -40,41 +44,45 @@ "core": "*", "doctoc": "^1.4.0", "ember-a11y-testing": "^3.0.0", - "ember-auto-import": "^1.6.0", + "ember-auto-import": "^1.10.1", "ember-breadcrumbs": "^0.2.3", - "ember-cli": "~3.20.2", - "ember-cli-app-version": "^3.2.0", - "ember-cli-babel": "^7.21.0", + "ember-cli": "~3.24.0", + "ember-cli-app-version": "^4.0.0", + "ember-cli-babel": "^7.23.0", "ember-cli-code-coverage": "^1.0.2", "ember-cli-content-security-policy": "^1.1.1", "ember-cli-dependency-checker": "^3.2.0", - "ember-cli-htmlbars": "^5.2.0", + "ember-cli-htmlbars": "^5.3.1", "ember-cli-inject-live-reload": "^2.0.2", "ember-cli-sass": "^10.0.1", "ember-cli-sri": "^2.1.1", "ember-cli-template-lint": "^2.0.2", - "ember-cli-uglify": "^3.0.0", + "ember-cli-terser": "^4.0.1", "ember-cli-update": "^0.54.6", "ember-concurrency": "^1.3.0", "ember-exam": "^6.0.1", "ember-export-application-global": "^2.0.1", "ember-inline-svg": "^1.0.0", - "ember-load-initializers": "^2.1.1", + "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^0.1.6", "ember-modifier": "^2.1.1", "ember-notify": "^6.0.0", - "ember-qunit": "^4.6.0", - "ember-resolver": "^8.0.0", - "ember-source": "~3.20.2", - "ember-template-lint": "^2.14.0", - "eslint": "^7.5.0", - "eslint-plugin-ember": "^8.9.1", + "ember-page-title": "^6.0.3", + "ember-qunit": "^5.1.1", + "ember-resolver": "^8.0.2", + "ember-source": "~3.24.0", + "ember-template-lint": "^2.15.0", + "eslint": "^7.17.0", + "eslint-config-prettier": "^7.1.0", + "eslint-plugin-ember": "^10.1.1", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", "faker": "^5.1.0", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", - "prettier": "^2.1.2", - "qunit-dom": "^1.2.0", + "prettier": "^2.2.1", + "qunit": "^2.13.0", + "qunit-dom": "^1.6.0", "rose": "*", "sass": "^1.29.0", "sass-lint": "^1.13.1", diff --git a/ui/admin/tests/acceptance/accounts-test.js b/ui/admin/tests/acceptance/accounts-test.js index c12cc02a0..5b16765f8 100644 --- a/ui/admin/tests/acceptance/accounts-test.js +++ b/ui/admin/tests/acceptance/accounts-test.js @@ -79,8 +79,8 @@ module('Acceptance | accounts', function (hooks) { test('can update an account and save changes', async function (assert) { assert.expect(1); await visit(urls.account); + await click('form [type="button"]', 'Activate edit mode'); await fillIn('[name="name"]', 'update name'); - await click('form [type="button"]'); await click('form [type="submit"]:not(:disabled)'); assert.equal(this.server.db.accounts[0].name, 'update name'); }); @@ -175,8 +175,8 @@ module('Acceptance | accounts', function (hooks) { ); }); await visit(urls.account); + await click('form [type="button"]', 'Activate edit mode'); await fillIn('[name="name"]', 'save account'); - await click('form [type="button"]'); await click('form [type="submit"]'); await a11yAudit(); assert.ok( diff --git a/ui/admin/tests/acceptance/auth-methods-test.js b/ui/admin/tests/acceptance/auth-methods-test.js index bdc509df2..67e73d624 100644 --- a/ui/admin/tests/acceptance/auth-methods-test.js +++ b/ui/admin/tests/acceptance/auth-methods-test.js @@ -161,8 +161,8 @@ module('Acceptance | auth methods', function (hooks) { ); }); await visit(urls.authMethod); + await click('form [type="button"]', 'Activate edit mode'); await fillIn('[name="name"]', 'save auth method'); - await click('form [type="button"]'); await click('form [type="submit"]'); await a11yAudit(); assert.ok( diff --git a/ui/admin/tests/index.html b/ui/admin/tests/index.html index 97040205c..5591db965 100644 --- a/ui/admin/tests/index.html +++ b/ui/admin/tests/index.html @@ -21,6 +21,13 @@ {{content-for "body"}} {{content-for "test-body"}} +
+
+
+
+
+
+ diff --git a/ui/admin/tests/test-helper.js b/ui/admin/tests/test-helper.js index bc88900fc..f4950f34d 100644 --- a/ui/admin/tests/test-helper.js +++ b/ui/admin/tests/test-helper.js @@ -1,9 +1,13 @@ -import Application from '../app'; -import config from '../config/environment'; +import Application from 'admin/app'; +import config from 'admin/config/environment'; +import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; //import { start } from 'ember-qunit'; import start from 'ember-exam/test-support/start'; setApplication(Application.create(config.APP)); +setup(QUnit.assert); + start(); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method-test.js b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method-test.js index f9fe31d0b..f1396eba0 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/auth-methods/auth-method-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/auth-methods/auth-method', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/auth-methods/auth-method', + function (hooks) { + setupTest(hooks); - // Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/auth-methods/auth-method' - ); - assert.ok(controller); - }); -}); + // Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/auth-methods/auth-method' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js index baffc2dda..263e690aa 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/add-members-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/groups/group/add-members', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/groups/group/add-members', + function (hooks) { + setupTest(hooks); - // Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/groups/group/add-members' - ); - assert.ok(controller); - }); -}); + // Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/groups/group/add-members' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js index 46dbddf58..0d8b1c81a 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/groups/group/members-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/groups/group/members', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/groups/group/members', + function (hooks) { + setupTest(hooks); - // TODO: Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/groups/group/members' - ); - assert.ok(controller); - }); -}); + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/groups/group/members' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog-test.js b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog-test.js index fa1b421b7..9782d1c12 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/host-catalogs/host-catalog-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/host-catalogs/host-catalog', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/host-catalogs/host-catalog', + function (hooks) { + setupTest(hooks); - // TODO: Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/host-catalogs/host-catalog' - ); - assert.ok(controller); - }); -}); + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/host-catalogs/host-catalog' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/add-principals-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/add-principals-test.js index ed13dde40..7eb851443 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/add-principals-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/add-principals-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/roles/role/add-principals', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/roles/role/add-principals', + function (hooks) { + setupTest(hooks); - // Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/roles/role/add-principals' - ); - assert.ok(controller); - }); -}); + // Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/roles/role/add-principals' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/principals-test.js b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/principals-test.js index 14de1a906..d8ad32897 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/roles/role/principals-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/roles/role/principals-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/roles/role/principals', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/roles/role/principals', + function (hooks) { + setupTest(hooks); - // TODO: Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/roles/role/principals' - ); - assert.ok(controller); - }); -}); + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/roles/role/principals' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/host-sets-test.js b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/host-sets-test.js index 1cc1b3aa1..46ca085a6 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/targets/target/host-sets-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/targets/target/host-sets-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/targets/target/host-sets', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/targets/target/host-sets', + function (hooks) { + setupTest(hooks); - // TODO: Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/targets/target/host-sets' - ); - assert.ok(controller); - }); -}); + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/targets/target/host-sets' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/users/user/accounts-test.js b/ui/admin/tests/unit/controllers/scopes/scope/users/user/accounts-test.js index f11f78bce..214b1a0a5 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/users/user/accounts-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/users/user/accounts-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/users/user/accounts', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/users/user/accounts', + function (hooks) { + setupTest(hooks); - // TODO: Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/users/user/accounts' - ); - assert.ok(controller); - }); -}); + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/users/user/accounts' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/controllers/scopes/scope/users/user/add-accounts-test.js b/ui/admin/tests/unit/controllers/scopes/scope/users/user/add-accounts-test.js index 451f97d18..7971e808f 100644 --- a/ui/admin/tests/unit/controllers/scopes/scope/users/user/add-accounts-test.js +++ b/ui/admin/tests/unit/controllers/scopes/scope/users/user/add-accounts-test.js @@ -1,16 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/users/user/add-accounts', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/users/user/add-accounts', + function (hooks) { + setupTest(hooks); - // Replace this with your real tests. - test('it exists', function (assert) { - let controller = this.owner.lookup( - 'controller:scopes/scope/users/user/add-accounts' - ); - assert.ok(controller); - }); -}); + // Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/users/user/add-accounts' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/admin/tests/unit/routes/scopes/scope/auth-methods/auth-method-test.js b/ui/admin/tests/unit/routes/scopes/scope/auth-methods/auth-method-test.js index 147a0a52b..01be4e6b1 100644 --- a/ui/admin/tests/unit/routes/scopes/scope/auth-methods/auth-method-test.js +++ b/ui/admin/tests/unit/routes/scopes/scope/auth-methods/auth-method-test.js @@ -1,15 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/auth-methods/auth-method', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/auth-methods/auth-method', + function (hooks) { + setupTest(hooks); - test('it exists', function (assert) { - let route = this.owner.lookup( - 'route:scopes/scope/auth-methods/auth-method' - ); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/auth-methods/auth-method' + ); + assert.ok(route); + }); + } +); diff --git a/ui/admin/tests/unit/routes/scopes/scope/auth-methods/auth-method/index-test.js b/ui/admin/tests/unit/routes/scopes/scope/auth-methods/auth-method/index-test.js index 1f9e281c9..84b88453f 100644 --- a/ui/admin/tests/unit/routes/scopes/scope/auth-methods/auth-method/index-test.js +++ b/ui/admin/tests/unit/routes/scopes/scope/auth-methods/auth-method/index-test.js @@ -1,15 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/auth-methods/auth-method/index', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/auth-methods/auth-method/index', + function (hooks) { + setupTest(hooks); - test('it exists', function (assert) { - let route = this.owner.lookup( - 'route:scopes/scope/auth-methods/auth-method/index' - ); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/auth-methods/auth-method/index' + ); + assert.ok(route); + }); + } +); diff --git a/ui/admin/tests/unit/routes/scopes/scope/groups/group/add-members-test.js b/ui/admin/tests/unit/routes/scopes/scope/groups/group/add-members-test.js index 03d00b579..065b23e40 100644 --- a/ui/admin/tests/unit/routes/scopes/scope/groups/group/add-members-test.js +++ b/ui/admin/tests/unit/routes/scopes/scope/groups/group/add-members-test.js @@ -1,15 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/groups/group/add-members', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/groups/group/add-members', + function (hooks) { + setupTest(hooks); - test('it exists', function (assert) { - let route = this.owner.lookup( - 'route:scopes/scope/groups/group/add-members' - ); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/groups/group/add-members' + ); + assert.ok(route); + }); + } +); diff --git a/ui/admin/tests/unit/routes/scopes/scope/host-catalogs/host-catalog-test.js b/ui/admin/tests/unit/routes/scopes/scope/host-catalogs/host-catalog-test.js index 7fc517187..8766e1ba1 100644 --- a/ui/admin/tests/unit/routes/scopes/scope/host-catalogs/host-catalog-test.js +++ b/ui/admin/tests/unit/routes/scopes/scope/host-catalogs/host-catalog-test.js @@ -1,15 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/host-catalogs/host-catalog', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/host-catalogs/host-catalog', + function (hooks) { + setupTest(hooks); - test('it exists', function (assert) { - let route = this.owner.lookup( - 'route:scopes/scope/host-catalogs/host-catalog' - ); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/host-catalogs/host-catalog' + ); + assert.ok(route); + }); + } +); diff --git a/ui/admin/tests/unit/routes/scopes/scope/roles/role/add-principals-test.js b/ui/admin/tests/unit/routes/scopes/scope/roles/role/add-principals-test.js index d70535062..d8ac4fac7 100644 --- a/ui/admin/tests/unit/routes/scopes/scope/roles/role/add-principals-test.js +++ b/ui/admin/tests/unit/routes/scopes/scope/roles/role/add-principals-test.js @@ -1,15 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/roles/role/add-principals', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/roles/role/add-principals', + function (hooks) { + setupTest(hooks); - test('it exists', function (assert) { - let route = this.owner.lookup( - 'route:scopes/scope/roles/role/add-principals' - ); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/roles/role/add-principals' + ); + assert.ok(route); + }); + } +); diff --git a/ui/admin/tests/unit/routes/scopes/scope/targets/target/add-host-sets-test.js b/ui/admin/tests/unit/routes/scopes/scope/targets/target/add-host-sets-test.js index cc7f6a011..e2a87487e 100644 --- a/ui/admin/tests/unit/routes/scopes/scope/targets/target/add-host-sets-test.js +++ b/ui/admin/tests/unit/routes/scopes/scope/targets/target/add-host-sets-test.js @@ -1,15 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/targets/target/add-host-sets', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/targets/target/add-host-sets', + function (hooks) { + setupTest(hooks); - test('it exists', function (assert) { - let route = this.owner.lookup( - 'route:scopes/scope/targets/target/add-host-sets' - ); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/targets/target/add-host-sets' + ); + assert.ok(route); + }); + } +); diff --git a/ui/admin/tests/unit/routes/scopes/scope/targets/target/host-sets-test.js b/ui/admin/tests/unit/routes/scopes/scope/targets/target/host-sets-test.js index 77d9430d2..214bf28b3 100644 --- a/ui/admin/tests/unit/routes/scopes/scope/targets/target/host-sets-test.js +++ b/ui/admin/tests/unit/routes/scopes/scope/targets/target/host-sets-test.js @@ -1,15 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/targets/target/host-sets', function ( - hooks -) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/targets/target/host-sets', + function (hooks) { + setupTest(hooks); - test('it exists', function (assert) { - let route = this.owner.lookup( - 'route:scopes/scope/targets/target/host-sets' - ); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/targets/target/host-sets' + ); + assert.ok(route); + }); + } +); diff --git a/ui/desktop/.eslintignore b/ui/desktop/.eslintignore index b22d5a994..c1a086935 100644 --- a/ui/desktop/.eslintignore +++ b/ui/desktop/.eslintignore @@ -13,6 +13,7 @@ # misc /coverage/ !.* +.eslintcache # ember-try /.node_modules.ember-try/ diff --git a/ui/desktop/.eslintrc.js b/ui/desktop/.eslintrc.js index 3f6869249..6d20176b1 100644 --- a/ui/desktop/.eslintrc.js +++ b/ui/desktop/.eslintrc.js @@ -7,25 +7,31 @@ module.exports = { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { - legacyDecorators: true - } + legacyDecorators: true, + }, }, - plugins: [ - 'ember' - ], + plugins: ['ember'], extends: [ 'eslint:recommended', - 'plugin:ember/recommended' + 'plugin:ember/recommended', + 'plugin:prettier/recommended', ], env: { - browser: true + browser: true, + }, + rules: { + 'ember/no-get': 'off', + 'ember/no-get-with-default': 'off', + 'ember/no-computed-properties-in-native-classes': 'off', + 'ember/no-assignment-of-untracked-properties-used-in-tracking-contexts': + 'off', }, - rules: {}, overrides: [ // node files { files: [ '.eslintrc.js', + '.prettierrc.js', '.template-lintrc.js', 'ember-cli-build.js', 'testem.js', @@ -33,22 +39,22 @@ module.exports = { 'blueprints/*/index.js', 'config/**/*.js', 'lib/*/index.js', - 'server/**/*.js' + 'server/**/*.js', ], parserOptions: { - sourceType: 'script' + sourceType: 'script', }, env: { browser: false, - node: true + node: true, }, plugins: ['node'], extends: ['plugin:node/recommended'], rules: { // this can be removed once the following is fixed // https://github.com/mysticatea/eslint-plugin-node/issues/77 - 'node/no-unpublished-require': 'off' - } - } - ] + 'node/no-unpublished-require': 'off', + }, + }, + ], }; diff --git a/ui/desktop/.gitignore b/ui/desktop/.gitignore index c40a1b2ab..7e0f7ddce 100644 --- a/ui/desktop/.gitignore +++ b/ui/desktop/.gitignore @@ -12,6 +12,7 @@ /.env* /.pnp* /.sass-cache +/.eslintcache /connect.lock /coverage/ /libpeerconnection.log diff --git a/ui/desktop/.prettierignore b/ui/desktop/.prettierignore new file mode 100644 index 000000000..922165552 --- /dev/null +++ b/ui/desktop/.prettierignore @@ -0,0 +1,21 @@ +# unconventional js +/blueprints/*/files/ +/vendor/ + +# compiled output +/dist/ +/tmp/ + +# dependencies +/bower_components/ +/node_modules/ + +# misc +/coverage/ +!.* +.eslintcache + +# ember-try +/.node_modules.ember-try/ +/bower.json.ember-try +/package.json.ember-try diff --git a/ui/desktop/.prettierrc.js b/ui/desktop/.prettierrc.js new file mode 100644 index 000000000..534e6d35a --- /dev/null +++ b/ui/desktop/.prettierrc.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + singleQuote: true, +}; diff --git a/ui/desktop/.template-lintrc.js b/ui/desktop/.template-lintrc.js index 68511a97a..c95107553 100644 --- a/ui/desktop/.template-lintrc.js +++ b/ui/desktop/.template-lintrc.js @@ -5,6 +5,6 @@ module.exports = { rules: { 'no-bare-strings': true, 'no-curly-component-invocation': { allow: ['app-name'] }, - 'no-implicit-this': { allow: ['app-name', 'is-loading'] } - } + 'no-implicit-this': { allow: ['app-name', 'is-loading'] }, + }, }; diff --git a/ui/desktop/.travis.yml b/ui/desktop/.travis.yml new file mode 100644 index 000000000..aa771282f --- /dev/null +++ b/ui/desktop/.travis.yml @@ -0,0 +1,28 @@ +--- +language: node_js +node_js: + - "10" + +dist: xenial + +addons: + chrome: stable + +cache: + yarn: true + +env: + global: + # See https://git.io/vdao3 for details. + - JOBS=1 + +branches: + only: + - master + +before_install: + - curl -o- -L https://yarnpkg.com/install.sh | bash + - export PATH=$HOME/.yarn/bin:$PATH + +script: + - yarn test diff --git a/ui/desktop/CHANGELOG.md b/ui/desktop/CHANGELOG.md index e34a1edd7..e2e21e111 100644 --- a/ui/desktop/CHANGELOG.md +++ b/ui/desktop/CHANGELOG.md @@ -7,6 +7,7 @@ Canonical reference for changes, improvements, and bugfixes for Boundary Desktop ### New & Improved +- Changes to targets (like adding, removing) are rapidly reflected in Boundary Desktop. ([PR](https://github.com/hashicorp/boundary-ui/pull/487)) - Scrolling now occurs within columns individually so that sidebar and header remain visible when scrolling the application body. ([PR](https://github.com/hashicorp/boundary-ui/pull/482)) ### Changes/Deprecations diff --git a/ui/desktop/app/components/copyable/index.hbs b/ui/desktop/app/components/copyable/index.hbs index 618f3315b..ac3474940 100644 --- a/ui/desktop/app/components/copyable/index.hbs +++ b/ui/desktop/app/components/copyable/index.hbs @@ -2,7 +2,7 @@ id={{this.id}} class="copyable" {{did-insert this.register}} - {{will-destroy this.destroy}} + {{will-destroy this.tearDown}} > {{#if this.copied}} diff --git a/ui/desktop/app/components/copyable/index.js b/ui/desktop/app/components/copyable/index.js index 3de4687ff..a30ff3aca 100644 --- a/ui/desktop/app/components/copyable/index.js +++ b/ui/desktop/app/components/copyable/index.js @@ -37,6 +37,7 @@ export default class CopyableComponent extends Component { this.copied = true; yield timeout(1000); this.copied = false; + /* eslint-disable-next-line prettier/prettier */ }).drop() confirmCopyTimer; /** @@ -66,7 +67,7 @@ export default class CopyableComponent extends Component { */ @action register() { - this.destroy(); + this.tearDown(); /* istanbul ignore next */ this.clipboard = new ClipboardJS(`#${this.copyableButtonId}`, { text: () => this.args.text, @@ -89,7 +90,7 @@ export default class CopyableComponent extends Component { * Destroy ClipboardJS library instance and cancel icon timer. */ @action - destroy() { + tearDown() { this.clipboard?.destroy(); this.clipboard = null; this.confirmCopyTimer.cancelAll(); diff --git a/ui/desktop/app/controllers/scopes/scope/authenticate.js b/ui/desktop/app/controllers/scopes/scope/authenticate.js index 93bb9beda..46ce98c66 100644 --- a/ui/desktop/app/controllers/scopes/scope/authenticate.js +++ b/ui/desktop/app/controllers/scopes/scope/authenticate.js @@ -2,7 +2,6 @@ import Controller from '@ember/controller'; import { inject as service } from '@ember/service'; export default class ScopesScopeAuthenticateController extends Controller { - // =services @service origin; diff --git a/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js b/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js index 0cfb61dbf..439dc78c7 100644 --- a/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js +++ b/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js @@ -1,12 +1,6 @@ import Controller from '@ember/controller'; -import { inject as service } from '@ember/service'; export default class ScopesScopeProjectsSessionsIndexController extends Controller { - - // =sessions - - @service session; - // =attributes /** @@ -15,13 +9,11 @@ export default class ScopesScopeProjectsSessionsIndexController extends Controll * @type {SessionModel[]} */ get sorted() { - const userId = this.session.data.authenticated.user_id; const sessions = this.model; const sortedSessions = sessions - // filter sessions by current user - .filter(session => session.user_id === userId) // sort by created time - .sortBy('session.created_time').reverse(); + .sortBy('session.created_time') + .reverse(); return [ // then move active sessions to the top ...sortedSessions.filter((session) => session.isCancelable), @@ -29,5 +21,4 @@ export default class ScopesScopeProjectsSessionsIndexController extends Controll ...sortedSessions.filter((session) => !session.isCancelable), ]; } - } diff --git a/ui/desktop/app/controllers/scopes/scope/projects/targets/target/sessions.js b/ui/desktop/app/controllers/scopes/scope/projects/targets/target/sessions.js index 9b10b7e0d..f9ea74a2c 100644 --- a/ui/desktop/app/controllers/scopes/scope/projects/targets/target/sessions.js +++ b/ui/desktop/app/controllers/scopes/scope/projects/targets/target/sessions.js @@ -24,11 +24,9 @@ export default class ScopesScopeProjectsTargetsTargetSessionsController extends get cancelableUserSessions() { const sessions = this.sessions; const userId = this.session.data.authenticated.user_id; - const filteredSessions = - sessions.filter(session => - session.isCancelable && - session.user_id === userId - ); + const filteredSessions = sessions.filter( + (session) => session.isCancelable && session.user_id === userId + ); // Sort sessions const sortedSessions = A(filteredSessions).sortBy('created_time').reverse(); diff --git a/ui/desktop/app/initializers/origin.js b/ui/desktop/app/initializers/origin.js index 0a3abfc39..fea7a43c3 100644 --- a/ui/desktop/app/initializers/origin.js +++ b/ui/desktop/app/initializers/origin.js @@ -1,7 +1,6 @@ import { getOwner } from '@ember/application'; export function initialize(registry) { - // Lookup the application route const ApplicationRoute = registry.resolveRegistration ? registry.resolveRegistration('route:application') @@ -13,7 +12,7 @@ export function initialize(registry) { const originalBeforeModel = this.beforeModel; // Override the beforeModel hook and initialize the origin - this.beforeModel = async function() { + this.beforeModel = async function () { const origin = getOwner(this).lookup('service:origin'); return origin.updateOrigin().then( () => originalBeforeModel.apply(this, arguments), @@ -26,5 +25,5 @@ export function initialize(registry) { export default { after: 'ember-simple-auth', - initialize + initialize, }; diff --git a/ui/desktop/app/router.js b/ui/desktop/app/router.js index 0af5b7e46..041868e34 100644 --- a/ui/desktop/app/router.js +++ b/ui/desktop/app/router.js @@ -14,12 +14,12 @@ Router.map(function () { }); this.route('projects', function () { this.route('targets', function () { - this.route('target', { path: ':target_id' }, function() { + this.route('target', { path: ':target_id' }, function () { this.route('hosts'); this.route('sessions'); }); }); - this.route('sessions', function() {}); + this.route('sessions', function () {}); }); }); }); diff --git a/ui/desktop/app/routes/scopes/scope/authenticate/method.js b/ui/desktop/app/routes/scopes/scope/authenticate/method.js index f1547b90b..33b7fd324 100644 --- a/ui/desktop/app/routes/scopes/scope/authenticate/method.js +++ b/ui/desktop/app/routes/scopes/scope/authenticate/method.js @@ -37,12 +37,10 @@ export default class ScopesScopeAuthenticateMethodRoute extends Route { const authMethod = this.modelFor('scopes.scope.authenticate.method'); const authenticatorName = `authenticator:${authMethod.type}`; const requestCookies = false; - await this.session.authenticate( - authenticatorName, - creds, - requestCookies, - { scope, authMethod } - ); + await this.session.authenticate(authenticatorName, creds, requestCookies, { + scope, + authMethod, + }); this.replaceWith('index'); } } diff --git a/ui/desktop/app/routes/scopes/scope/projects.js b/ui/desktop/app/routes/scopes/scope/projects.js index e579d7efb..1f4387f70 100644 --- a/ui/desktop/app/routes/scopes/scope/projects.js +++ b/ui/desktop/app/routes/scopes/scope/projects.js @@ -38,5 +38,4 @@ export default class ScopesScopeProjectsRoute extends Route { .query('scope', { recursive: true, scope_id: 'global' }) .filter(({ isProject }) => isProject); } - } diff --git a/ui/desktop/app/routes/scopes/scope/projects/sessions.js b/ui/desktop/app/routes/scopes/scope/projects/sessions.js index 149aedb7f..272cf0672 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/sessions.js +++ b/ui/desktop/app/routes/scopes/scope/projects/sessions.js @@ -30,6 +30,7 @@ export default class ScopesScopeProjectsSessionsRoute extends Route { yield timeout(POLL_TIMEOUT_SECONDS * 1000); yield this.refresh(); } + /* eslint-disable-next-line prettier/prettier */ }).drop() poller; // =methods @@ -48,8 +49,13 @@ export default class ScopesScopeProjectsSessionsRoute extends Route { */ async model() { const { id: scope_id } = this.modelFor('scopes.scope'); + const { user_id } = this.session.data.authenticated; await this.store.query('target', { recursive: true, scope_id }); - return await this.store.query('session', { recursive: true, scope_id }); + return await this.store.query('session', { + filter: `"/item/user_id" == "${user_id}"`, + recursive: true, + scope_id + }); } /** diff --git a/ui/desktop/app/routes/scopes/scope/projects/sessions/index.js b/ui/desktop/app/routes/scopes/scope/projects/sessions/index.js index 85b153379..704c762f5 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/sessions/index.js +++ b/ui/desktop/app/routes/scopes/scope/projects/sessions/index.js @@ -1,4 +1,3 @@ import Route from '@ember/routing/route'; -export default class ScopesScopeProjectsSessionsIndexRoute extends Route { -} +export default class ScopesScopeProjectsSessionsIndexRoute extends Route {} diff --git a/ui/desktop/app/routes/scopes/scope/projects/targets.js b/ui/desktop/app/routes/scopes/scope/projects/targets.js index 867011648..dca07f657 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/targets.js +++ b/ui/desktop/app/routes/scopes/scope/projects/targets.js @@ -32,8 +32,9 @@ export default class ScopesScopeProjectsTargetsRoute extends Route { @task(function * () { while(true) { yield timeout(POLL_TIMEOUT_SECONDS * 1000); - yield this.refreshSessions(); + yield this.refresh(); } + /* eslint-disable-next-line prettier/prettier */ }).drop() poller; // =methods @@ -51,18 +52,17 @@ export default class ScopesScopeProjectsTargetsRoute extends Route { */ async model() { const { id: scope_id } = this.modelFor('scopes.scope'); - await this.refreshSessions(); - return this.store.query('target', { recursive: true, scope_id }); - } - - /** - * Loads all sessions for all scopes in order to prime the store. - * Targets peek into the store to determine if they are active. - * TODO: query only for sessions associated with the current user. - */ - async refreshSessions() { - const { id: scope_id } = this.modelFor('scopes.scope'); - await this.store.query('session', { recursive: true, scope_id }); + const { user_id } = this.session.data.authenticated; + await this.store.query('session', { + filter: `"/item/user_id" == "${user_id}"`, + recursive: true, + scope_id + }); + return this.store.query('target', { + filter: '"authorize-session" in "/item/authorized_actions"', + recursive: true, + scope_id + }); } /** @@ -88,7 +88,7 @@ export default class ScopesScopeProjectsTargetsRoute extends Route { */ @action async connect(model, host) { - // TODO: Connect: Refactor into an addon + // TODO: Connect: move this logic into the target model try { // Check for CLI const cliExists = await this.ipc.invoke('cliExists'); diff --git a/ui/desktop/app/routes/scopes/scope/projects/targets/target.js b/ui/desktop/app/routes/scopes/scope/projects/targets/target.js index 3cf2343fe..0a540c12c 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/targets/target.js +++ b/ui/desktop/app/routes/scopes/scope/projects/targets/target.js @@ -1,7 +1,6 @@ import Route from '@ember/routing/route'; export default class ScopesScopeProjectsTargetsTargetRoute extends Route { - // =methods /** diff --git a/ui/desktop/app/routes/scopes/scope/projects/targets/target/hosts.js b/ui/desktop/app/routes/scopes/scope/projects/targets/target/hosts.js index ef2f5a8ab..f43e8bab4 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/targets/target/hosts.js +++ b/ui/desktop/app/routes/scopes/scope/projects/targets/target/hosts.js @@ -27,11 +27,9 @@ export default class ScopesScopeProjectsTargetsTargetHostsRoute extends Route { ); // Extract host ids from all host sets - const hostIds = hostSets.map(({host_ids}) => - host_ids.content.map((hostId) => - hostId.value - ) - ) + const hostIds = hostSets.map(({ host_ids }) => + host_ids.content.map((hostId) => hostId.value) + ); // Load unique hosts const uniqueHostIds = new Set(hostIds.flat()); @@ -42,7 +40,7 @@ export default class ScopesScopeProjectsTargetsTargetHostsRoute extends Route { [...uniqueHostIds].map((hostId) => this.store.findRecord('host', hostId) ) - ) - }) + ), + }); } } diff --git a/ui/desktop/app/routes/scopes/scope/projects/targets/target/index.js b/ui/desktop/app/routes/scopes/scope/projects/targets/target/index.js index 0f92ba860..82513fa81 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/targets/target/index.js +++ b/ui/desktop/app/routes/scopes/scope/projects/targets/target/index.js @@ -9,5 +9,4 @@ export default class ScopesScopeProjectsTargetsTargetIndexRoute extends Route { afterModel() { this.transitionTo('scopes.scope.projects.targets.target.sessions'); } - } diff --git a/ui/desktop/app/routes/scopes/scope/projects/targets/target/sessions.js b/ui/desktop/app/routes/scopes/scope/projects/targets/target/sessions.js index 9306118c7..4f0281e2f 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/targets/target/sessions.js +++ b/ui/desktop/app/routes/scopes/scope/projects/targets/target/sessions.js @@ -3,7 +3,6 @@ import { action } from '@ember/object'; import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeProjectsTargetsTargetSessionsRoute extends Route { - // =actions /** @@ -16,5 +15,4 @@ export default class ScopesScopeProjectsTargetsTargetSessionsRoute extends Route async cancelSession(session) { await session.cancelSession(); } - } diff --git a/ui/desktop/app/services/origin.js b/ui/desktop/app/services/origin.js index e72a738f0..a5c1f3a0e 100644 --- a/ui/desktop/app/services/origin.js +++ b/ui/desktop/app/services/origin.js @@ -4,7 +4,6 @@ import { inject as service } from '@ember/service'; import { notifyError } from 'core/decorators/notify'; export default class OriginService extends Service { - // =services @service ipc; @@ -59,11 +58,14 @@ export default class OriginService extends Service { */ async setOrigin(origin) { const originalHost = this.adapter.host; - assert(`setOrigin expects a string, you passed ${origin}`, typeof origin === 'string'); + assert( + `setOrigin expects a string, you passed ${origin}`, + typeof origin === 'string' + ); try { this.adapter.host = origin; this.rendererOrigin = origin; - if (origin !== await this.mainOrigin) { + if (origin !== (await this.mainOrigin)) { await this.ipc.invoke('setOrigin', origin); } } catch (e) { @@ -81,5 +83,4 @@ export default class OriginService extends Service { this.rendererOrigin = null; await this.ipc.invoke('resetOrigin'); } - } diff --git a/ui/desktop/app/templates/application.hbs b/ui/desktop/app/templates/application.hbs index 3bca4c490..b3750e04b 100644 --- a/ui/desktop/app/templates/application.hbs +++ b/ui/desktop/app/templates/application.hbs @@ -44,7 +44,7 @@ - + {{/if}} diff --git a/ui/desktop/config/ember-cli-update.json b/ui/desktop/config/ember-cli-update.json index 7742d41a6..6a97c18fb 100644 --- a/ui/desktop/config/ember-cli-update.json +++ b/ui/desktop/config/ember-cli-update.json @@ -3,7 +3,7 @@ "packages": [ { "name": "ember-cli", - "version": "3.20.2", + "version": "3.24.0", "blueprints": [ { "name": "app", diff --git a/ui/desktop/config/environment.js b/ui/desktop/config/environment.js index cb8bcd5cd..8e854404a 100644 --- a/ui/desktop/config/environment.js +++ b/ui/desktop/config/environment.js @@ -31,7 +31,7 @@ module.exports = function (environment) { 'ember-cli-mirage': { //enabled: ENABLE_MIRAGE, - directory: '../../addons/api/mirage' + directory: '../../addons/api/mirage', }, api: { @@ -49,9 +49,9 @@ module.exports = function (environment) { baseURL: 'https://boundaryproject.io/help/desktop', topics: { targets: '/targets', - sessions: '/sessions' - } - } + sessions: '/sessions', + }, + }, }; if (process.env.ENABLE_MIRAGE) { @@ -89,7 +89,7 @@ module.exports = function (environment) { // Use in-memory storage ENV.storage = { - memory: true + memory: true, }; } diff --git a/ui/desktop/electron-app/config/cli.js b/ui/desktop/electron-app/config/cli.js index b3a24e434..1badbfbcc 100644 --- a/ui/desktop/electron-app/config/cli.js +++ b/ui/desktop/electron-app/config/cli.js @@ -4,7 +4,7 @@ const https = require('https'); const decompress = require('decompress'); const os = require('os'); -const artifactVersion = '0.1.6'; +const artifactVersion = '0.1.8'; const artifactDestination = path.resolve(__dirname, '..', 'cli'); const downloadArtifact = version => { diff --git a/ui/desktop/electron-app/config/forge.config.js b/ui/desktop/electron-app/config/forge.config.js index 092522ce1..4151023de 100644 --- a/ui/desktop/electron-app/config/forge.config.js +++ b/ui/desktop/electron-app/config/forge.config.js @@ -3,15 +3,20 @@ const { version } = require('../src/boundary-cli.js'); const formattedCLIVersion = version().formatted; -const appVersion = process.env.VERSION - ? `Version: ${process.env.VERSION}\n` +const appVersion = process.env.RELEASE_VERSION + ? `Version: ${process.env.RELEASE_VERSION}\n` : ''; -const appCommit = process.env.COMMIT - ? `Commit: ${process.env.COMMIT}\n` +const appCommit = process.env.RELEASE_COMMIT + ? `Commit: ${process.env.RELEASE_COMMIT}\n` : ''; const formattedAppVersion = `${appVersion}${appCommit}`; +// Output version strings for debugging +console.log('\n\nVersion Env Vars:'); +console.log('RELEASE_VERSION ', process.env.RELEASE_VERSION); +console.log('RELEASE_COMMIT ', process.env.RELEASE_COMMIT); + module.exports = { hooks: { prePackage: () => { diff --git a/ui/desktop/electron-app/config/macos/entitlements.plist b/ui/desktop/electron-app/config/macos/entitlements.plist index 8f574f5fb..55f37a696 100644 --- a/ui/desktop/electron-app/config/macos/entitlements.plist +++ b/ui/desktop/electron-app/config/macos/entitlements.plist @@ -6,7 +6,5 @@ com.apple.security.cs.allow-unsigned-executable-memory - com.apple.security.cs.debugger - diff --git a/ui/desktop/electron-app/src/boundary-cli.js b/ui/desktop/electron-app/src/boundary-cli.js index 2227687ed..453a959df 100644 --- a/ui/desktop/electron-app/src/boundary-cli.js +++ b/ui/desktop/electron-app/src/boundary-cli.js @@ -20,12 +20,13 @@ const escapeAndValidateBase62 = (str) => { module.exports = { // Check boundary cli existence exists: () => Boolean(cliPath()), + // Initiate connection and return output connect: (target_id, token, host_id) => { const addr = origin.origin; const sanitized = { target_id: escapeAndValidateBase62(target_id), - token: escapeAndValidateBase62(token) + token: escapeAndValidateBase62(token), }; if (host_id) sanitized.host_id = escapeAndValidateBase62(host_id); const command = [ @@ -34,15 +35,15 @@ module.exports = { `-token=${sanitized.token}`, `-addr=${addr}`, '-format=json', - '--output-json-errors' ]; - if (host_id) command.push(`-host-id=${sanitized.host_id}`) + if (host_id) command.push(`-host-id=${sanitized.host_id}`); return spawnAsyncJSONPromise(command); }, + // Returns JSON-formatted version information from the CLI version: () => { - const command = [ '-v' ]; + const command = ['-v']; const rawOutput = spawnSync(command); let gitRevision = /Git Revision:\s*(?.*)\n/.exec(rawOutput); let versionNumber = /Version Number:\s*(?.*)\n/.exec(rawOutput); @@ -53,5 +54,5 @@ module.exports = { : `CLI Commit: ${gitRevision}`; return { gitRevision, versionNumber, formatted }; return rawOutput; - } -} + }, +}; diff --git a/ui/desktop/electron-app/src/content-security-policy.js b/ui/desktop/electron-app/src/content-security-policy.js index 41bd1e148..6f5156bb6 100644 --- a/ui/desktop/electron-app/src/content-security-policy.js +++ b/ui/desktop/electron-app/src/content-security-policy.js @@ -20,8 +20,8 @@ const enableDevCSP = () => { csp['style-src'].push("'unsafe-inline'"); csp['script-src'].push("'unsafe-eval'"); csp['script-src'].push("'unsafe-inline'"); - csp['script-src'].push("http://localhost:7020"); - csp['connect-src'].push("ws://localhost:7020"); + csp['script-src'].push('http://localhost:7020'); + csp['connect-src'].push('ws://localhost:7020'); }; const generateCSPHeader = () => { @@ -33,14 +33,13 @@ const generateCSPHeader = () => { policy['connect-src'].push(origin.origin); } - return Object - .keys(policy) - .map(key => `${key} ${policy[key].join(' ')};`) + return Object.keys(policy) + .map((key) => `${key} ${policy[key].join(' ')};`) .join(' '); -} +}; if (isDev) enableDevCSP(); module.exports = { - generateCSPHeader: generateCSPHeader + generateCSPHeader: generateCSPHeader, }; diff --git a/ui/desktop/electron-app/src/index.js b/ui/desktop/electron-app/src/index.js index 3a9e42607..bbe22a1d8 100644 --- a/ui/desktop/electron-app/src/index.js +++ b/ui/desktop/electron-app/src/index.js @@ -4,7 +4,14 @@ const { default: installExtension, EMBER_INSPECTOR, } = require('electron-devtools-installer'); -const { session, app, protocol, BrowserWindow, ipcMain, Menu } = require('electron'); +const { + session, + app, + protocol, + BrowserWindow, + ipcMain, + Menu, +} = require('electron'); require('./handlers.js'); const origin = require('./origin.js'); @@ -63,7 +70,8 @@ app.on('ready', async () => { // Disallow all permissions requests originating outside of serve://boundary, // per Electronegativity PERMISSION_REQUEST_HANDLER_GLOBAL_CHECK ses.setPermissionRequestHandler((webContents, permission, callback) => { - if (webContents.getURL().startsWith('serve://boundary')) return callback(false); + if (webContents.getURL().startsWith('serve://boundary')) + return callback(false); return callback(true); }); @@ -72,8 +80,8 @@ app.on('ready', async () => { callback({ responseHeaders: { ...details.responseHeaders, - 'Content-Security-Policy': [generateCSPHeader()] - } + 'Content-Security-Policy': [generateCSPHeader()], + }, }); }); @@ -91,7 +99,7 @@ app.on('ready', async () => { } // Configure menu in prod env - if(!isDev) { + if (!isDev) { const menuTemplate = Menu.buildFromTemplate(menu.generateMenuTemplate()); Menu.setApplicationMenu(menuTemplate); } @@ -109,7 +117,7 @@ app.on('ready', async () => { enableRemoteModule: false, allowRunningInsecureContent: false, preload: preloadPath, - disableBlinkFeatures: 'Auxclick' + disableBlinkFeatures: 'Auxclick', }, }); diff --git a/ui/desktop/electron-app/src/ipc-handler.js b/ui/desktop/electron-app/src/ipc-handler.js index 84122de1d..82cf76e19 100644 --- a/ui/desktop/electron-app/src/ipc-handler.js +++ b/ui/desktop/electron-app/src/ipc-handler.js @@ -1,10 +1,9 @@ const { ipcMain } = require('electron'); const isDev = require('electron-is-dev'); -const log = (method, request='', response='', type='log') => { - const requestString = typeof request === 'object' - ? JSON.stringify(request) - : request; +const log = (method, request = '', response = '', type = 'log') => { + const requestString = + typeof request === 'object' ? JSON.stringify(request) : request; // only log in dev mode if (isDev) { console[type]( @@ -15,7 +14,7 @@ const log = (method, request='', response='', type='log') => { } }; -module.exports = function handle (command, handler) { +module.exports = function handle(command, handler) { ipcMain.handle(command, async function (event, request) { const requestPayload = request; let result; @@ -26,7 +25,7 @@ module.exports = function handle (command, handler) { // If e is an Error instance, we need to extract the message and wrap // it in a POJO before stringifying it. If not an Error, e is assumed to // be already a POJO. - const errorMessage = (e instanceof Error) ? { message: e.message } : e; + const errorMessage = e instanceof Error ? { message: e.message } : e; result = new Error(JSON.stringify(errorMessage)); log(command, requestPayload, e, 'error'); } diff --git a/ui/desktop/electron-app/src/menu.js b/ui/desktop/electron-app/src/menu.js index 1047bb8a6..4a863826f 100644 --- a/ui/desktop/electron-app/src/menu.js +++ b/ui/desktop/electron-app/src/menu.js @@ -1,4 +1,4 @@ -const { shell } = require('electron') +const { shell } = require('electron'); const generateMenuTemplate = () => { return [ @@ -14,15 +14,13 @@ const generateMenuTemplate = () => { { role: 'hideothers' }, { role: 'unhide' }, { type: 'separator' }, - { role: 'quit' } - ] + { role: 'quit' }, + ], }, // { role: 'fileMenu' } { label: 'File', - submenu: [ - { role: 'close' } - ] + submenu: [{ role: 'close' }], }, // { role: 'editMenu' } { @@ -40,12 +38,9 @@ const generateMenuTemplate = () => { { type: 'separator' }, { label: 'Speech', - submenu: [ - { role: 'startSpeaking' }, - { role: 'stopSpeaking' } - ] - } - ] + submenu: [{ role: 'startSpeaking' }, { role: 'stopSpeaking' }], + }, + ], }, // { role: 'viewMenu' } { @@ -57,8 +52,8 @@ const generateMenuTemplate = () => { { role: 'zoomIn' }, { role: 'zoomOut' }, { type: 'separator' }, - { role: 'togglefullscreen' } - ] + { role: 'togglefullscreen' }, + ], }, // { role: 'windowMenu' } { @@ -69,21 +64,21 @@ const generateMenuTemplate = () => { { type: 'separator' }, { role: 'front' }, { type: 'separator' }, - { role: 'window' } - ] + { role: 'window' }, + ], }, { role: 'help', submenu: [ { label: 'Documentation', - click: () => shell.openExternal('https://www.boundaryproject.io') - } - ] - } - ] -} + click: () => shell.openExternal('https://www.boundaryproject.io'), + }, + ], + }, + ]; +}; module.exports = { - generateMenuTemplate: generateMenuTemplate + generateMenuTemplate: generateMenuTemplate, }; diff --git a/ui/desktop/electron-app/src/origin.js b/ui/desktop/electron-app/src/origin.js index cdb640cd2..5cc150c32 100644 --- a/ui/desktop/electron-app/src/origin.js +++ b/ui/desktop/electron-app/src/origin.js @@ -1,27 +1,27 @@ -const { net } = require('electron') +const { net } = require('electron'); const requestTimeoutSeconds = 10; // Simple promise wrapper around Electron's net.request feature. // https://www.electronjs.org/docs/api/client-request -const netRequestPromise = url => new Promise((resolve, reject) => { - try { - const request = net.request(url); - // We don't worry about canceling the request timeout timer once a - // request ends because: request.abort() has no effect after a request - // ends and the promise will already have been completed, so a rejection - // has no effect either. - const requestTimeout = - setTimeout(() => { +const netRequestPromise = (url) => + new Promise((resolve, reject) => { + try { + const request = net.request(url); + // We don't worry about canceling the request timeout timer once a + // request ends because: request.abort() has no effect after a request + // ends and the promise will already have been completed, so a rejection + // has no effect either. + const requestTimeout = setTimeout(() => { request.abort(); reject(new Error('Request timeout')); }, requestTimeoutSeconds * 1000); - request.on('error', reject); - request.on('response', resolve); - request.end(); - } catch (e) { - reject(e); - } -}); + request.on('error', reject); + request.on('response', resolve); + request.end(); + } catch (e) { + reject(e); + } + }); // Provides a singleton class instance to enable a consistent view of // runtime settings across the application. @@ -30,7 +30,6 @@ const netRequestPromise = url => new Promise((resolve, reject) => { // set up at runtime. For example, the Boundary origin is a runtime setting. class RuntimeSettings { - // Internal private origin is exposed via getter/setter below. #origin = undefined; @@ -38,7 +37,9 @@ class RuntimeSettings { * The user-specified Boundary origin, which should be allowed by CSP. * @type {?string} */ - get origin() { return this.#origin; } + get origin() { + return this.#origin; + } set origin(origin) { if (this.#origin !== origin) { this.#origin = origin; @@ -79,7 +80,7 @@ class RuntimeSettings { } triggerOriginChanged() { - this.#originWatchers.forEach(fn => fn(this.#origin)); + this.#originWatchers.forEach((fn) => fn(this.#origin)); } } diff --git a/ui/desktop/electron-app/src/spawn-promise.js b/ui/desktop/electron-app/src/spawn-promise.js index ba08e2685..d73390f02 100644 --- a/ui/desktop/electron-app/src/spawn-promise.js +++ b/ui/desktop/electron-app/src/spawn-promise.js @@ -5,13 +5,13 @@ const boundaryPath = path.resolve(__dirname, '..', 'cli', 'boundary'); // Convert to json const jsonify = (data) => { - if(typeof data !== 'string') data = JSON.stringify(data); + if (typeof data !== 'string') data = JSON.stringify(data); try { return JSON.parse(data); } catch (e) { // Ignore parse errors } -} +}; // You can throw exceptions, or allow them to occur, and this is supported. // Exceptions thrown in this way will be returned to the UI as an @@ -28,7 +28,6 @@ const jsonify = (data) => { // helpful message for users, so it's recommended to craft nice // POJO representation and throw it or promise->reject it. module.exports = { - /** * Spawns an asynchronous child process that is expected to output JSON * data on either stdout or stderr. The process is allowed to continue @@ -52,8 +51,10 @@ module.exports = { childProcess.stderr.on('data', (data) => { errorStream += data.toString(); const jsonData = jsonify(errorStream); - const error = jsonData ? jsonData.error : undefined; - if (jsonData) reject(new Error(error)); + if (jsonData) { + const error = jsonData.api_error || jsonData.error; + reject(new Error(error)); + } }); }); }, @@ -65,6 +66,5 @@ module.exports = { const childProcess = spawnSync(boundaryPath, command); const rawOutput = childProcess.output.toString(); return rawOutput; - } - + }, }; diff --git a/ui/desktop/ember-cli-build.js b/ui/desktop/ember-cli-build.js index 7cd77f5c0..2bec26235 100644 --- a/ui/desktop/ember-cli-build.js +++ b/ui/desktop/ember-cli-build.js @@ -5,7 +5,7 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app'); module.exports = function (defaults) { let app = new EmberApp(defaults, { 'ember-cli-babel': { - includeExternalHelpers: true + includeExternalHelpers: true, }, babel: { sourceMaps: 'inline', diff --git a/ui/desktop/package.json b/ui/desktop/package.json index e63f6435a..21aa5f5e1 100644 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -15,20 +15,23 @@ "build:development": "ember build", "prebuild:desktop": "cp -r dist/ electron-app/ember-dist/", "build:desktop": "cd electron-app && yarn make", - "lint": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*", + "lint": "npm-run-all --aggregate-output --continue-on-error --parallel 'lint:!(fix)'", + "lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix", "lint:hbs": "ember-template-lint .", + "lint:hbs:fix": "ember-template-lint . --fix", "lint:js": "eslint .", "lint:sass": "stylelint '**/*.scss'", "lint:electron": "electronegativity -r -i ./electron-app", "format": "npm-run-all format:*", "format:js": "prettier --write '{app,config,stories,tests,electron-app/src}/**/*.js' *.js", "format:sass": "prettier --write app/**/*.scss", + "lint:js:fix": "eslint . --fix", "start": "ember serve", "prestart:desktop": "cd electron-app && yarn build:cli", "start:desktop": "ember electron", "clean:coverage": "rm -rf coverage_*", "pretest": "yarn clean:coverage", - "test": "npm-run-all test:*", + "test": "npm-run-all lint test:*", "test:ember": "COVERAGE=true ember exam --random", "postinstall": "cd electron-app && yarn install", "posttest": "ember coverage-merge && yarn clean:coverage" @@ -36,50 +39,55 @@ "devDependencies": { "@doyensec/electronegativity": "^1.7.0", "@ember/jquery": "^1.1.0", - "@ember/optional-features": "^1.3.0", + "@ember/optional-features": "^2.0.0", "@ember/render-modifiers": "^1.0.2", - "@glimmer/component": "^1.0.1", - "@glimmer/tracking": "^1.0.0", + "@ember/test-helpers": "^2.1.4", + "@glimmer/component": "^1.0.3", + "@glimmer/tracking": "^1.0.3", "babel-eslint": "^10.1.0", "babel-loader": "^8.1.0", "broccoli-asset-rev": "^3.0.0", "clipboard": "^2.0.6", "core": "*", "doctoc": "^1.4.0", - "ember-auto-import": "^1.6.0", + "ember-auto-import": "^1.10.1", "ember-autofocus-modifier": "^1.1.0", - "ember-cli": "~3.20.2", - "ember-cli-app-version": "^3.2.0", - "ember-cli-babel": "^7.21.0", + "ember-cli": "~3.24.0", + "ember-cli-app-version": "^4.0.0", + "ember-cli-babel": "^7.23.0", "ember-cli-code-coverage": "^1.0.2", "ember-cli-dependency-checker": "^3.2.0", - "ember-cli-htmlbars": "^5.2.0", + "ember-cli-htmlbars": "^5.3.1", "ember-cli-inject-live-reload": "^2.0.2", "ember-cli-sass": "^10.0.1", "ember-cli-sri": "^2.1.1", "ember-cli-template-lint": "^2.0.2", - "ember-cli-uglify": "^3.0.0", + "ember-cli-terser": "^4.0.1", "ember-concurrency": "^1.3.0", "ember-electron": "https://github.com/adopted-ember-addons/ember-electron#v3.0.0-beta.4", "ember-exam": "^6.0.1", "ember-export-application-global": "^2.0.1", "ember-inline-svg": "^1.0.0", - "ember-load-initializers": "^2.1.1", + "ember-load-initializers": "^2.1.2", "ember-maybe-import-regenerator": "^0.1.6", "ember-modifier": "^2.1.1", "ember-notify": "^6.0.0", - "ember-qunit": "^4.6.0", - "ember-resolver": "^8.0.0", - "ember-source": "~3.20.2", - "ember-template-lint": "^2.14.0", - "eslint": "^7.5.0", - "eslint-plugin-ember": "^8.9.1", + "ember-page-title": "^6.0.3", + "ember-qunit": "^5.1.1", + "ember-resolver": "^8.0.2", + "ember-source": "~3.24.0", + "ember-template-lint": "^2.15.0", + "eslint": "^7.17.0", + "eslint-config-prettier": "^7.1.0", + "eslint-plugin-ember": "^10.1.1", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", "faker": "^5.1.0", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", - "prettier": "^2.1.2", - "qunit-dom": "^1.2.0", + "prettier": "^2.2.1", + "qunit": "^2.13.0", + "qunit-dom": "^1.6.0", "rose": "*", "sass": "^1.29.0", "sinon": "^9.2.1", diff --git a/ui/desktop/tests/acceptance/authentication-test.js b/ui/desktop/tests/acceptance/authentication-test.js index d0f0e3fa6..a436b4b54 100644 --- a/ui/desktop/tests/acceptance/authentication-test.js +++ b/ui/desktop/tests/acceptance/authentication-test.js @@ -166,7 +166,7 @@ module('Acceptance | authentication', function (hooks) { authenticateSession({ scope: { id: instances.scopes.global.id, - type: instances.scopes.global.type + type: instances.scopes.global.type, }, }); later(async () => { diff --git a/ui/desktop/tests/index.html b/ui/desktop/tests/index.html index d6b5581a4..8653a5598 100644 --- a/ui/desktop/tests/index.html +++ b/ui/desktop/tests/index.html @@ -21,6 +21,13 @@ {{content-for "body"}} {{content-for "test-body"}} +
+
+
+
+
+
+ diff --git a/ui/desktop/tests/integration/components/branded-card-test.js b/ui/desktop/tests/integration/components/branded-card-test.js index 35e7cdaf5..019103ec5 100644 --- a/ui/desktop/tests/integration/components/branded-card-test.js +++ b/ui/desktop/tests/integration/components/branded-card-test.js @@ -3,10 +3,10 @@ import { setupRenderingTest } from 'ember-qunit'; import { render } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; -module('Integration | Component | branded-card', function(hooks) { +module('Integration | Component | branded-card', function (hooks) { setupRenderingTest(hooks); - test('it renders', async function(assert) { + test('it renders', async function (assert) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.set('myAction', function(val) { ... }); diff --git a/ui/desktop/tests/test-helper.js b/ui/desktop/tests/test-helper.js index 0382a848d..e2d6cc5a0 100644 --- a/ui/desktop/tests/test-helper.js +++ b/ui/desktop/tests/test-helper.js @@ -1,8 +1,12 @@ -import Application from '../app'; -import config from '../config/environment'; +import Application from 'desktop/app'; +import config from 'desktop/config/environment'; +import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; setApplication(Application.create(config.APP)); +setup(QUnit.assert); + start(); diff --git a/ui/desktop/tests/unit/controllers/scopes/scope/projects/sessions/index-test.js b/ui/desktop/tests/unit/controllers/scopes/scope/projects/sessions/index-test.js index 1a9f45f78..d34ff4736 100644 --- a/ui/desktop/tests/unit/controllers/scopes/scope/projects/sessions/index-test.js +++ b/ui/desktop/tests/unit/controllers/scopes/scope/projects/sessions/index-test.js @@ -1,12 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/projects/sessions/index', function(hooks) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/projects/sessions/index', + function (hooks) { + setupTest(hooks); - // TODO: Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:scopes/scope/projects/sessions/index'); - assert.ok(controller); - }); -}); + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/projects/sessions/index' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/desktop/tests/unit/controllers/scopes/scope/projects/targets/target/sessions-test.js b/ui/desktop/tests/unit/controllers/scopes/scope/projects/targets/target/sessions-test.js index f869024f9..456cd78ae 100644 --- a/ui/desktop/tests/unit/controllers/scopes/scope/projects/targets/target/sessions-test.js +++ b/ui/desktop/tests/unit/controllers/scopes/scope/projects/targets/target/sessions-test.js @@ -1,12 +1,17 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Controller | scopes/scope/projects/targets/target/sessions', function(hooks) { - setupTest(hooks); +module( + 'Unit | Controller | scopes/scope/projects/targets/target/sessions', + function (hooks) { + setupTest(hooks); - // TODO: Replace this with your real tests. - test('it exists', function(assert) { - let controller = this.owner.lookup('controller:scopes/scope/projects/targets/target/sessions'); - assert.ok(controller); - }); -}); + // TODO: Replace this with your real tests. + test('it exists', function (assert) { + let controller = this.owner.lookup( + 'controller:scopes/scope/projects/targets/target/sessions' + ); + assert.ok(controller); + }); + } +); diff --git a/ui/desktop/tests/unit/routes/scopes/scope/projects/sessions-test.js b/ui/desktop/tests/unit/routes/scopes/scope/projects/sessions-test.js index 358be9959..51481a29d 100644 --- a/ui/desktop/tests/unit/routes/scopes/scope/projects/sessions-test.js +++ b/ui/desktop/tests/unit/routes/scopes/scope/projects/sessions-test.js @@ -1,10 +1,10 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/projects/sessions', function(hooks) { +module('Unit | Route | scopes/scope/projects/sessions', function (hooks) { setupTest(hooks); - test('it exists', function(assert) { + test('it exists', function (assert) { let route = this.owner.lookup('route:scopes/scope/projects/sessions'); assert.ok(route); }); diff --git a/ui/desktop/tests/unit/routes/scopes/scope/projects/sessions/index-test.js b/ui/desktop/tests/unit/routes/scopes/scope/projects/sessions/index-test.js index 5c63b65eb..72c1e5966 100644 --- a/ui/desktop/tests/unit/routes/scopes/scope/projects/sessions/index-test.js +++ b/ui/desktop/tests/unit/routes/scopes/scope/projects/sessions/index-test.js @@ -1,10 +1,10 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/projects/sessions/index', function(hooks) { +module('Unit | Route | scopes/scope/projects/sessions/index', function (hooks) { setupTest(hooks); - test('it exists', function(assert) { + test('it exists', function (assert) { let route = this.owner.lookup('route:scopes/scope/projects/sessions/index'); assert.ok(route); }); diff --git a/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target-test.js b/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target-test.js index 7794f4aa7..0a3e5d110 100644 --- a/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target-test.js +++ b/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target-test.js @@ -1,10 +1,10 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/projects/targets/target', function(hooks) { +module('Unit | Route | scopes/scope/projects/targets/target', function (hooks) { setupTest(hooks); - test('it exists', function(assert) { + test('it exists', function (assert) { let route = this.owner.lookup('route:scopes/scope/projects/targets/target'); assert.ok(route); }); diff --git a/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/hosts-test.js b/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/hosts-test.js index e28f35db7..906e8dd65 100644 --- a/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/hosts-test.js +++ b/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/hosts-test.js @@ -1,11 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/projects/targets/target/hosts', function(hooks) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/projects/targets/target/hosts', + function (hooks) { + setupTest(hooks); - test('it exists', function(assert) { - let route = this.owner.lookup('route:scopes/scope/projects/targets/target/hosts'); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/projects/targets/target/hosts' + ); + assert.ok(route); + }); + } +); diff --git a/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/index-test.js b/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/index-test.js index d097986e4..a59d6163c 100644 --- a/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/index-test.js +++ b/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/index-test.js @@ -1,11 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/projects/targets/target/index', function(hooks) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/projects/targets/target/index', + function (hooks) { + setupTest(hooks); - test('it exists', function(assert) { - let route = this.owner.lookup('route:scopes/scope/projects/targets/target/index'); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/projects/targets/target/index' + ); + assert.ok(route); + }); + } +); diff --git a/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/sessions-test.js b/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/sessions-test.js index 2208beec8..705c38be0 100644 --- a/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/sessions-test.js +++ b/ui/desktop/tests/unit/routes/scopes/scope/projects/targets/target/sessions-test.js @@ -1,11 +1,16 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Route | scopes/scope/projects/targets/target/sessions', function(hooks) { - setupTest(hooks); +module( + 'Unit | Route | scopes/scope/projects/targets/target/sessions', + function (hooks) { + setupTest(hooks); - test('it exists', function(assert) { - let route = this.owner.lookup('route:scopes/scope/projects/targets/target/sessions'); - assert.ok(route); - }); -}); + test('it exists', function (assert) { + let route = this.owner.lookup( + 'route:scopes/scope/projects/targets/target/sessions' + ); + assert.ok(route); + }); + } +); diff --git a/ui/desktop/tests/unit/services/ipc-test.js b/ui/desktop/tests/unit/services/ipc-test.js index f9c262130..a892ccccc 100644 --- a/ui/desktop/tests/unit/services/ipc-test.js +++ b/ui/desktop/tests/unit/services/ipc-test.js @@ -58,13 +58,13 @@ module('Unit | Service | ipc', function (hooks) { assert.expect(1); const stringifiedPayload = JSON.stringify({ foo: 'bar', - test: 42 + test: 42, }); const myWindow = { postMessage(request, origin, [port]) { // Post back an error on the response port port.postMessage(new Error(stringifiedPayload)); - } + }, }; try { await new IPCRequest('hello', 'world', myWindow); diff --git a/ui/desktop/tests/unit/services/origin-test.js b/ui/desktop/tests/unit/services/origin-test.js index c133a53a5..1355719a2 100644 --- a/ui/desktop/tests/unit/services/origin-test.js +++ b/ui/desktop/tests/unit/services/origin-test.js @@ -1,11 +1,11 @@ import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -module('Unit | Service | origin', function(hooks) { +module('Unit | Service | origin', function (hooks) { setupTest(hooks); // TODO: Replace this with your real tests. - test('it exists', function(assert) { + test('it exists', function (assert) { let service = this.owner.lookup('service:origin'); assert.ok(service); }); diff --git a/yarn-audit-known-issues b/yarn-audit-known-issues index 83c0b67f1..74ce49273 100644 --- a/yarn-audit-known-issues +++ b/yarn-audit-known-issues @@ -1,21 +1,14 @@ -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} -{"type":"auditAdvisory","data":{"resolution":{"id":566,"path":"rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","dev":false,"bundled":false,"optional":false},"advisory":{"findings":[{"version":"2.16.3","paths":["api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>boom>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>hoek","api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>api>ember-cli-mirage>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>ember-intl>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>emberx-select>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","core>rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek","rose>ember-focus-trap>ember-auto-import>@embroider/core>jsdom>request>hawk>sntp>hoek"]}],"id":566,"created":"2018-04-20T21:25:58.421Z","updated":"2019-06-19T20:16:59.758Z","deleted":null,"title":"Prototype Pollution","found_by":{"name":"HoLyVieR"},"reported_by":{"name":"HoLyVieR"},"module_name":"hoek","cves":["CVE-2018-3728"],"vulnerable_versions":"<= 4.2.0 || >= 5.0.0 < 5.0.3","patched_versions":"> 4.2.0 < 5.0.0 || >= 5.0.3","overview":"Versions of `hoek` prior to 4.2.1 and 5.0.3 are vulnerable to prototype pollution.\n\nThe `merge` function, and the `applyToDefaults` and `applyToDefaultsWithShallow` functions which leverage `merge` behind the scenes, are vulnerable to a prototype pollution attack when provided an _unvalidated_ payload created from a JSON string containing the `__proto__` property.\n\nThis can be demonstrated like so:\n\n```javascript\nvar Hoek = require('hoek');\nvar malicious_payload = '{\"__proto__\":{\"oops\":\"It works !\"}}';\n\nvar a = {};\nconsole.log(\"Before : \" + a.oops);\nHoek.merge({}, JSON.parse(malicious_payload));\nconsole.log(\"After : \" + a.oops);\n```\n\nThis type of attack can be used to overwrite existing properties causing a potential denial of service.","recommendation":"Update to version 4.2.1, 5.0.3 or later.","references":"- [HackerOne Report](https://hackerone.com/reports/310439)","access":"public","severity":"moderate","cwe":"CWE-471","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/566"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} +{"type":"auditAdvisory","data":{"resolution":{"id":1648,"path":"rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","dev":false,"optional":false,"bundled":false},"advisory":{"findings":[{"version":"6.5.3","paths":["api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>browserify-sign>elliptic","api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>api>ember-cli-mirage>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>ember-intl>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>ember-focus-trap>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","core>rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic","rose>emberx-select>ember-auto-import>webpack>node-libs-browser>crypto-browserify>create-ecdh>elliptic"]}],"id":1648,"created":"2021-03-08T16:08:52.414Z","updated":"2021-03-08T16:08:52.414Z","deleted":null,"title":"Use of a Broken or Risky Cryptographic Algorithm","found_by":{"link":"","name":"Anonymous","email":""},"reported_by":{"link":"","name":"Anonymous","email":""},"module_name":"elliptic","cves":["CVE-2020-28498"],"vulnerable_versions":"<6.5.4","patched_versions":">=6.5.4","overview":"`elliptic` before version 6.5.4 is vulnerable to Cryptographic Issues via the secp256k1 implementation in `elliptic/ec/key.js`. There is no check to confirm that the public key point passed into the derive function actually exists on the secp256k1 curve. This results in the potential for the private key used in this implementation to be revealed after a number of ECDH operations are performed.","recommendation":"Upgrade to version 6.5.4 or later","references":"- [Snyk Advisory](https://snyk.io/vuln/SNYK-JS-ELLIPTIC-1064899)\n- [GitHub Advisory](https://github.com/advisories/GHSA-r9p9-mrjm-926w)\n- [CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-28498)","access":"public","severity":"moderate","cwe":"CWE-327","metadata":{"module_type":"","exploitability":5,"affected_components":""},"url":"https://npmjs.com/advisories/1648"}}} diff --git a/yarn.lock b/yarn.lock index 6a5062c2b..472e735d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@babel/code-frame@7.12.11", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.5.5": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -9,18 +16,23 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.5.5": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== +"@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: - "@babel/highlight" "^7.10.4" + "@babel/highlight" "^7.12.13" "@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== +"@babel/compat-data@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" + integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -64,6 +76,28 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.12.9": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.8.tgz#c191d9c5871788a591d69ea1dc03e5843a3680fb" + integrity sha512-oYapIySGw1zGhEFRd6lzWNLWFX2s5dA/jm+Pw/+59ZdXtjyIuwlXbrId22Md0rgZVop+aVoqow2riXhBLNyuQg== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-compilation-targets" "^7.13.8" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helpers" "^7.13.0" + "@babel/parser" "^7.13.4" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^6.3.0" + source-map "^0.5.0" + "@babel/generator@^7.12.1", "@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.12.5": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" @@ -73,6 +107,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.13.0": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + dependencies: + "@babel/types" "^7.13.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" @@ -98,6 +141,16 @@ browserslist "^4.14.5" semver "^5.5.0" +"@babel/helper-compilation-targets@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.8.tgz#02bdb22783439afb11b2f009814bdd88384bd468" + integrity sha512-pBljUGC1y3xKLn1nrx2eAhurLMA8OqBtBP/JwG4U8skN7kf8/aqwwxpV1N6T0e7r6+7uNitIa/fUxPFagSXp3A== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.5.5", "@babel/helper-create-class-features-plugin@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" @@ -142,6 +195,15 @@ "@babel/template" "^7.12.7" "@babel/types" "^7.12.11" +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + "@babel/helper-get-function-arity@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" @@ -149,6 +211,13 @@ dependencies: "@babel/types" "^7.12.10" +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" @@ -163,6 +232,13 @@ dependencies: "@babel/types" "^7.12.7" +"@babel/helper-member-expression-to-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" + integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== + dependencies: + "@babel/types" "^7.13.0" + "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.8.3": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" @@ -170,6 +246,13 @@ dependencies: "@babel/types" "^7.12.5" +"@babel/helper-module-imports@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" + integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-module-transforms@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" @@ -185,6 +268,21 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" + integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + lodash "^4.17.19" + "@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" @@ -192,6 +290,13 @@ dependencies: "@babel/types" "^7.12.10" +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-plugin-utils@7.10.4", "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" @@ -216,6 +321,16 @@ "@babel/traverse" "^7.12.10" "@babel/types" "^7.12.11" +"@babel/helper-replace-supers@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" + integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/helper-simple-access@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" @@ -223,6 +338,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-simple-access@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" + integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -237,6 +359,13 @@ dependencies: "@babel/types" "^7.12.11" +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" @@ -247,6 +376,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + "@babel/helper-wrap-function@^7.10.4": version "7.12.3" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" @@ -266,6 +400,15 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" +"@babel/helpers@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.0.tgz#7647ae57377b4f0408bf4f8a7af01c42e41badc0" + integrity sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -275,11 +418,25 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.12.13": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.8.tgz#10b2dac78526424dfc1f47650d0e415dfd9dc481" + integrity sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.1.2", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.3", "@babel/parser@^7.12.7", "@babel/parser@^7.4.5", "@babel/parser@^7.7.0": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== +"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99" + integrity sha512-nEUfRiARCcaVo3ny3ZQjURjHQZUo/JkEw7rLlSZy/psWGnvwXFtPcr6jb7Yb41DVW5LTe6KRq9LGleRNsg1Frw== + "@babel/plugin-proposal-async-generator-functions@^7.12.1": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" @@ -626,7 +783,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.10.1", "@babel/plugin-transform-modules-amd@^7.10.4", "@babel/plugin-transform-modules-amd@^7.10.5", "@babel/plugin-transform-modules-amd@^7.12.1": +"@babel/plugin-transform-modules-amd@^7.10.1", "@babel/plugin-transform-modules-amd@^7.10.5", "@babel/plugin-transform-modules-amd@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== @@ -987,6 +1144,15 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + "@babel/traverse@^7.1.6", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" @@ -1002,6 +1168,21 @@ globals "^11.1.0" lodash "^4.17.19" +"@babel/traverse@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" + integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.0" + "@babel/types" "^7.13.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/types@^7.1.6", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" @@ -1011,6 +1192,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.12.13", "@babel/types@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" + integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz#860ce718b0b73f4009e153541faff2cb6b85d047" @@ -1455,18 +1645,17 @@ jquery "^3.4.1" resolve "^1.11.1" -"@ember/optional-features@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@ember/optional-features/-/optional-features-1.3.0.tgz#d7da860417b85a56cec88419f30da5ee1dde2756" - integrity sha512-Lrfojy4xKwTX+J4EAylmxZY2TO6bQtP4Lg5C8/z2priVqiT0X5fVB1+4WQCJbRBetctO1lMDnqjmhWCVKB8bmQ== +"@ember/optional-features@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@ember/optional-features/-/optional-features-2.0.0.tgz#c809abd5a27d5b0ef3c6de3941334ab6153313f0" + integrity sha512-4gkvuGRYfpAh1nwAz306cmMeC1mG7wxZnbsBZ09mMaMX/W7IyKOKc/38JwrDPUFUalmNEM7q7JEPcmew2M3Dog== dependencies: - chalk "^3.0.0" - ember-cli-version-checker "^3.1.3" + chalk "^4.1.0" + ember-cli-version-checker "^5.1.1" glob "^7.1.6" - inquirer "^7.0.1" - mkdirp "^0.5.1" + inquirer "^7.3.3" + mkdirp "^1.0.4" silent-error "^1.1.1" - util.promisify "^1.0.0" "@ember/ordered-set@^4.0.0": version "4.0.0" @@ -1491,7 +1680,7 @@ dependencies: ember-cli-babel "^7.4.0" -"@ember/test-helpers@^1.7.0", "@ember/test-helpers@^1.7.1": +"@ember/test-helpers@^1.7.0": version "1.7.2" resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-1.7.2.tgz#5b128dc5f6524c3850abf52668e6bd4fda401194" integrity sha512-FEJBpbFNIaWAsCSnataiNwYFvmcpoymL/B7fXLruuJ/46BnJjzLaRPtpUIZ91w4GNTK6knxbHWXW76aVb3Aezg== @@ -1503,6 +1692,29 @@ ember-cli-htmlbars-inline-precompile "^2.1.0" ember-test-waiters "^1.1.1" +"@ember/test-helpers@^2.1.4": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-2.2.3.tgz#237c2de48a9e85492374b91e825cb142675858cc" + integrity sha512-qpLz0wwHrY49JzmS2qznpEjrfZUhrWemgSXu48xgJAZnjXBa52libZgl7mzwnHmmo4YtUBgQtJSRPUp/coYFNA== + dependencies: + "@ember/test-waiters" "^2.4.0" + broccoli-debug "^0.6.5" + broccoli-funnel "^3.0.3" + ember-cli-babel "^7.23.1" + ember-cli-htmlbars "^5.2.0" + ember-destroyable-polyfill "^2.0.3" + +"@ember/test-waiters@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@ember/test-waiters/-/test-waiters-2.4.1.tgz#e46bd7f1d28ff9a779c89acbbd2cc2df81235ca1" + integrity sha512-tad4/nKcQHrBZ50kPlZy9xkTpmPpQUaAKegb7lHBfxC+5GcHSGbc6wYM2I8bT9Vf96diWZgNT0a5jbpLSQwRRA== + dependencies: + calculate-cache-key-for-tree "^2.0.0" + ember-cli-babel "^7.21.0" + ember-cli-typescript "^3.1.4" + ember-cli-version-checker "^5.1.2" + semver "^7.3.2" + "@embroider/core@0.29.0": version "0.29.0" resolved "https://registry.yarnpkg.com/@embroider/core/-/core-0.29.0.tgz#51421fbb2bcee607dc6e162400e3502a121230d2" @@ -1709,10 +1921,10 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@eslint/eslintrc@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" - integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -1721,7 +1933,6 @@ ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" - lodash "^4.17.20" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -1732,10 +1943,10 @@ dependencies: tslib "^2.0.1" -"@glimmer/component@^1.0.1": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@glimmer/component/-/component-1.0.3.tgz#38c26fc4855fd7ad0e0816d18d80d32c578e5140" - integrity sha512-GD3gcN+Pr2flmxkt2lm5K86jwX+KRD9QQpNH+wiEQGjBXOzd46+XD5npH1sRByqLYml9rW4klflcrEfNb7dnQw== +"@glimmer/component@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@glimmer/component/-/component-1.0.4.tgz#1c85a5181615a6647f6acfaaed68e28ad7e9626e" + integrity sha512-sS4N8wtcKfYdUJ6O3m8nbTut6NjErdz94Ap8VB1ekcg4WSD+7sI7Nmv6kt2rdPoe363nUdjUbRBzHNWhLzraBw== dependencies: "@glimmer/di" "^0.1.9" "@glimmer/env" "^0.1.7" @@ -1854,10 +2065,10 @@ "@handlebars/parser" "^1.1.0" simple-html-tokenizer "^0.5.10" -"@glimmer/tracking@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@glimmer/tracking/-/tracking-1.0.3.tgz#8b9b42aff6c206edeaaea178a95acc1eff62e61e" - integrity sha512-21WR13vPdzt1IQ6JmPPAu4szjV9yKdmLHV3nD0MLDj6/EoYv1c2PqpFBBlp++6xW8OnyDa++cQ8OFoQDP+MRpA== +"@glimmer/tracking@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@glimmer/tracking/-/tracking-1.0.4.tgz#f1bc1412fe5e2236d0f8d502994a8f88af1bbb21" + integrity sha512-F+oT8I55ba2puSGIzInmVrv/8QA2PcK1VD+GWgFMhF6WC97D+uZX7BFg+a3s/2N4FVBq5KHE+QxZzgazM151Yw== dependencies: "@glimmer/env" "^0.1.7" "@glimmer/validator" "^0.44.0" @@ -3643,6 +3854,11 @@ argparse@^1.0.7, argparse@~1.0.2: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -4240,6 +4456,13 @@ babel-plugin-ember-modules-api-polyfill@^3.2.1: dependencies: ember-rfc176-data "^0.3.16" +babel-plugin-ember-modules-api-polyfill@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-3.4.0.tgz#3f5e0457e135f8a29b3a8b6910806bb5b524649e" + integrity sha512-nVu/LqbZBAup1zLij6xGvQwVLWVk4XYu2fl4vIOUR3S6ukdonMLhKAb0d4QXSzH30Pd7OczVTlPffWbiwahdJw== + dependencies: + ember-rfc176-data "^0.3.16" + babel-plugin-emotion@^10.0.20, babel-plugin-emotion@^10.0.27: version "10.0.33" resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03" @@ -4286,6 +4509,13 @@ babel-plugin-htmlbars-inline-precompile@^4.2.0: resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-4.2.1.tgz#9a367f8d7ecb9fb2c2e886edfe285caf7cb9766d" integrity sha512-MCJXk+1R0YjlF/F52eDbhJTpsnqRVYsPYVP9d0jEu7E46AcRPEWDL5tfSweiQWHLKG017BIedATb91KcIoT3zA== +babel-plugin-htmlbars-inline-precompile@^4.4.1: + version "4.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-4.4.4.tgz#e62bc7f037a3efd7a0c0de88796aaf88e2a2506b" + integrity sha512-H2EqG91B1Vfzc5caPmMm2G6BioWR3c/0qOvai5NxjAHwhf/BK4N/nQUbUTRA1qeakO8afqOpkNonb2BMEgmmlw== + dependencies: + babel-plugin-ember-modules-api-polyfill "^3.4.0" + babel-plugin-istanbul@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" @@ -5218,7 +5448,7 @@ broccoli-babel-transpiler@^6.5.0: rsvp "^4.8.2" workerpool "^2.3.0" -broccoli-babel-transpiler@^7.5.0, broccoli-babel-transpiler@^7.6.0, broccoli-babel-transpiler@^7.8.0: +broccoli-babel-transpiler@^7.5.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" integrity sha512-dv30Td5uL7dO3NzQUqQKQs+Iq7JGKnCNtvc6GBO76uVPqGnRlsQZcYqdBVr33JrctR+ZrpTUf7TjsFKeDRFA8Q== @@ -5757,27 +5987,26 @@ broccoli-templater@^2.0.1: rimraf "^2.6.2" walk-sync "^0.3.3" -broccoli-uglify-sourcemap@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/broccoli-uglify-sourcemap/-/broccoli-uglify-sourcemap-3.2.0.tgz#d96f1d41f6c18e9a5d49af1a5ab9489cdcac1c6c" - integrity sha512-kkkn8v7kXdWwnZNekq+3ILuTAGkZoaoEMUYCKoER5/uokuoyTjtdYLHaE7UxHkuPEuLfjvJYv21sCCePZ74/2g== +broccoli-terser-sourcemap@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/broccoli-terser-sourcemap/-/broccoli-terser-sourcemap-4.1.0.tgz#5f37441b64a3b6bfb0c67e9af232259c9576f115" + integrity sha512-zkNnjsAbP+M5rG2aMM1EE4BmXPUSxFKmtLUkUs2D1DLTOJQoF1xlOjGWjjKYCFy5tw8t4+tgGJ+HVa2ucJZ8sw== dependencies: async-promise-queue "^1.0.5" - broccoli-plugin "^1.2.1" + broccoli-plugin "^4.0.3" debug "^4.1.0" lodash.defaultsdeep "^4.6.1" - matcher-collection "^2.0.0" - mkdirp "^0.5.0" + matcher-collection "^2.0.1" source-map-url "^0.4.0" - symlink-or-copy "^1.0.1" - terser "^4.3.9" - walk-sync "^1.1.3" - workerpool "^5.0.1" + symlink-or-copy "^1.3.1" + terser "^5.3.0" + walk-sync "^2.2.0" + workerpool "^6.0.0" -broccoli@^3.4.2: - version "3.5.0" - resolved "https://registry.yarnpkg.com/broccoli/-/broccoli-3.5.0.tgz#bdf96dc32980d1ad9f7ef5e68aaaa19e8d47b602" - integrity sha512-qGYirIs6W5NGzDPMTRtoOnveP3UQJKWFjAWdRRZJjCoAJYN872sXuO48cnNfnc/c1nd9fCR8et4knlTPgI+9yQ== +broccoli@^3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/broccoli/-/broccoli-3.5.1.tgz#371bc63cabe700bae3a2b80cac3e978f94664418" + integrity sha512-2Rvl40E6JgALX1JQN5PjCgP1apFAP24vVol+coX5TpVVy0Lsqzl3Mabbe3fVQcu3lMRfPJ6DyBKqBlo52XPSRg== dependencies: "@types/chai" "^4.2.9" "@types/chai-as-promised" "^7.1.2" @@ -6188,7 +6417,7 @@ callsites@^2.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -callsites@^3.0.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -6537,7 +6766,7 @@ clean-css@^4.2.3: dependencies: source-map "~0.6.0" -clean-stack@^2.0.0: +clean-stack@^2.0.0, clean-stack@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== @@ -6866,7 +7095,7 @@ commitizen@^4.0.3: strip-bom "4.0.0" strip-json-comments "3.0.1" -common-tags@^1.4.0, common-tags@^1.8.0: +common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -6993,7 +7222,7 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -console-ui@^3.0.4, console-ui@^3.1.1: +console-ui@^3.0.4, console-ui@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/console-ui/-/console-ui-3.1.2.tgz#51aef616ff02013c85ccee6a6d77ef7a94202e7a" integrity sha512-+5j3R4wZJcEYZeXk30whc4ZU/+fWW9JMTNntVuMYpjZJ9n26Cxr0tUBXco1NRjVZRpRVvZ4DDKKKIHNYeUG9Dw== @@ -7370,6 +7599,14 @@ css-tree@1.0.0-alpha.29: mdn-data "~1.1.0" source-map "^0.5.3" +css-tree@^1.0.0-alpha.39: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" + integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + css-url-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" @@ -8163,7 +8400,7 @@ ember-assign-polyfill@^2.6.0: ember-cli-babel "^7.20.5" ember-cli-version-checker "^2.0.0" -ember-auto-import@^1.2.15, ember-auto-import@^1.2.19, ember-auto-import@^1.5.3, ember-auto-import@^1.6.0: +ember-auto-import@^1.10.1, ember-auto-import@^1.2.15, ember-auto-import@^1.2.19, ember-auto-import@^1.5.3: version "1.10.1" resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.10.1.tgz#6c93a875e494aa0a58b759867d3f20adfd514ae3" integrity sha512-7bOWzPELlVwdWDOkB+phDIjg8BNW+/2RiLLQ+Xa/eIvCLT4ABYhHV5wqW5gs5BnXTDVLfE4ddKZdllnGuPGGDQ== @@ -8224,20 +8461,20 @@ ember-cli-addon-docs-yuidoc@^0.2.3: lodash "^4.17.5" yuidocjs "^0.10.2" -ember-cli-app-version@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ember-cli-app-version/-/ember-cli-app-version-3.2.0.tgz#7b9ad0e1b63ae0518648356ee24c703e922bc26e" - integrity sha512-fHWOJElSw8JL03FNCHrT0RdWhGpWEQ4VQ10unEwwhVZ+OANNcOLz8O2dA3D5iuB4bb0fMLwjEwYZGM62+TBs1Q== +ember-cli-app-version@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-app-version/-/ember-cli-app-version-4.0.0.tgz#033057ec5fe4d3ecdf5ac5380d442e2dc9f7526a" + integrity sha512-YRH1r4vjA9ZIgTVJ38zWxhtt4SCzIHb0ppEsO/z+JV0ZTQlS3+2dT5RhJWz7O3dyw5FWnlIng+gPRoQEz1umHA== dependencies: - ember-cli-babel "^6.12.0" - git-repo-version "^1.0.2" + ember-cli-babel "^7.22.1" + git-repo-info "^2.1.1" ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0, ember-cli-babel-plugin-helpers@^1.1.1: version "1.1.1" 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@7, 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.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, 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.4.0, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3: +ember-cli-babel@7, 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.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.4.0, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3: version "7.23.1" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.23.1.tgz#d1517228ede08a5d4b045c78a7429728e956b30b" integrity sha512-qYggmt3hRs6QJ6cRkww3ahMpyP8IEV2KFrIRO/Z6hu9MkE/8Y28Xd5NjQl6fPV3oLoG0vwuHzhNe3Jr7Wec8zw== @@ -8301,7 +8538,7 @@ ember-cli-babel@7.21.0: rimraf "^3.0.1" semver "^5.5.0" -ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.2: +ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.2: version "6.18.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA== @@ -8432,6 +8669,27 @@ ember-cli-htmlbars@^5.2.0: strip-bom "^4.0.0" walk-sync "^2.2.0" +ember-cli-htmlbars@^5.3.1: + version "5.6.3" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-5.6.3.tgz#4916d1ea2b6d69ea5e7252c0c59e56d7031ee310" + integrity sha512-pn2pW49KmsrjlG4PEMmd3ZrsbS2WHKn+1NLLCWUjxmc5g4/lHxHicB8IN5z95ANmgqDHAwp+rw1XTyWy9r0xyQ== + dependencies: + "@ember/edition-utils" "^1.2.0" + babel-plugin-htmlbars-inline-precompile "^4.4.1" + broccoli-debug "^0.6.5" + broccoli-persistent-filter "^3.1.2" + broccoli-plugin "^4.0.3" + common-tags "^1.8.0" + ember-cli-babel-plugin-helpers "^1.1.1" + fs-tree-diff "^2.0.1" + hash-for-dep "^1.5.1" + heimdalljs-logger "^0.1.10" + json-stable-stringify "^1.0.1" + semver "^7.3.4" + silent-error "^1.1.1" + strip-bom "^4.0.0" + walk-sync "^2.2.0" + ember-cli-inject-live-reload@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.0.2.tgz#95edb543b386239d35959e5ea9579f5382976ac7" @@ -8526,6 +8784,13 @@ ember-cli-template-lint@^2.0.2: strip-ansi "^6.0.0" walk-sync "^2.0.2" +ember-cli-terser@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/ember-cli-terser/-/ember-cli-terser-4.0.1.tgz#0da0b8f2b09989e8c992b207553ddec1bbb65915" + integrity sha512-vvp0uVl8reYeW9EZjSXRPR3Bq7y4u9CYlUdI7j/WzMPDj3/gUHU4Z7CHYOCrftrClQvFfqO2eXmHwDA6F7SLug== + dependencies: + broccoli-terser-sourcemap "^4.1.0" + ember-cli-test-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ember-cli-test-info/-/ember-cli-test-info-1.0.0.tgz#ed4e960f249e97523cf891e4aed2072ce84577b4" @@ -8533,12 +8798,12 @@ ember-cli-test-info@^1.0.0: dependencies: ember-cli-string-utils "^1.0.0" -ember-cli-test-loader@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ember-cli-test-loader/-/ember-cli-test-loader-2.2.0.tgz#3fb8d5d1357e4460d3f0a092f5375e71b6f7c243" - integrity sha512-mlSXX9SciIRwGkFTX6XGyJYp4ry6oCFZRxh5jJ7VH8UXLTNx2ZACtDTwaWtNhYrWXgKyiDUvmD8enD56aePWRA== +ember-cli-test-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-test-loader/-/ember-cli-test-loader-3.0.0.tgz#1c036fc48de36155355fcda3266af63f977826f1" + integrity sha512-wfFRBrfO9gaKScYcdQxTfklx9yp1lWK6zv1rZRpkas9z2SHyJojF7NOQRWQgSB3ypm7vfpiF8VsFFVVr7VBzAQ== dependencies: - ember-cli-babel "^6.8.1" + ember-cli-babel "^7.13.2" ember-cli-typescript@3.0.0: version "3.0.0" @@ -8575,7 +8840,7 @@ ember-cli-typescript@^2.0.0-rc.2, ember-cli-typescript@^2.0.2: stagehand "^1.0.0" walk-sync "^1.0.0" -ember-cli-typescript@^3.1.3: +ember-cli-typescript@^3.1.3, ember-cli-typescript@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-3.1.4.tgz#21d6ccd670d1f2e34c9cce68c6e32c442f46806b" integrity sha512-HJ73kL45OGRmIkPhBNFt31I1SGUvdZND+LCH21+qpq3pPlFpJG8GORyXpP+2ze8PbnITNLzwe5AwUrpyuRswdQ== @@ -8611,14 +8876,6 @@ ember-cli-typescript@^4.0.0: stagehand "^1.0.0" walk-sync "^2.2.0" -ember-cli-uglify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-3.0.0.tgz#8819665b2cc5fe70e3ba9fe7a94645209bc42fd6" - integrity sha512-n3QxdBfAgBdb2Cnso82Kt/nxm3ppIjnYWM8uhOEhF1aYxNXfM7AJrc+yiqTCDUR61Db8aCpHfAMvChz3kyme7g== - dependencies: - broccoli-uglify-sourcemap "^3.1.0" - lodash.defaultsdeep "^4.6.0" - ember-cli-update@^0.54.6: version "0.54.6" resolved "https://registry.yarnpkg.com/ember-cli-update/-/ember-cli-update-0.54.6.tgz#e9f405b4737558e53874025731568ae7c005a48c" @@ -8677,7 +8934,7 @@ ember-cli-version-checker@^4.1.0: semver "^6.3.0" silent-error "^1.1.1" -ember-cli-version-checker@^5.0.1, ember-cli-version-checker@^5.1.1: +ember-cli-version-checker@^5.0.1, ember-cli-version-checker@^5.1.1, ember-cli-version-checker@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-5.1.2.tgz#649c7b6404902e3b3d69c396e054cea964911ab0" integrity sha512-rk7GY+FmLn/2e22HsZs0Ycrz8HQ1W3Fv+2TFOuEFW9optnDXDgkntPBIl6gact/LHsfBM5RKbM3dHsIIeLgl0Q== @@ -8686,20 +8943,20 @@ ember-cli-version-checker@^5.0.1, ember-cli-version-checker@^5.1.1: semver "^7.3.4" silent-error "^1.1.1" -ember-cli@~3.20.2: - version "3.20.2" - resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.20.2.tgz#4a5411afc32a91eb81e4fa1e6f4bc950e838c132" - integrity sha512-8ggRX+NXD9VkQt/9/GSMLcnswWNYTgE7Aw1uelexHdxGA1TqcjOjQ07ljVmgRwYVieknhDzhK3M0u3Xoa3x0HA== +ember-cli@~3.24.0: + version "3.24.0" + resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.24.0.tgz#dbda4938e74fdafe4da1c42b49356f9d14c10697" + integrity sha512-dLurYpluRcE+XjCHy/JzUBcW4dBKhjmXH3zUjyof89gFjj+8EFjB0b2tqyS6buKqBasinVaX8lZZVIXYCdFtNA== dependencies: - "@babel/core" "^7.10.2" - "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/core" "^7.12.9" + "@babel/plugin-transform-modules-amd" "^7.12.1" amd-name-resolver "^1.3.1" babel-plugin-module-resolver "^4.0.0" bower-config "^1.4.3" bower-endpoint-parser "0.2.2" - broccoli "^3.4.2" + broccoli "^3.5.0" broccoli-amd-funnel "^2.0.1" - broccoli-babel-transpiler "^7.6.0" + broccoli-babel-transpiler "^7.8.0" broccoli-builder "^0.18.14" broccoli-concat "^4.2.4" broccoli-config-loader "^1.0.1" @@ -8714,12 +8971,12 @@ ember-cli@~3.20.2: broccoli-stew "^3.0.0" calculate-cache-key-for-tree "^2.0.0" capture-exit "^2.0.0" - chalk "^4.0.0" + chalk "^4.1.0" ci-info "^2.0.0" clean-base-url "^1.0.0" compression "^1.7.4" configstore "^5.0.1" - console-ui "^3.1.1" + console-ui "^3.1.2" core-object "^3.1.5" dag-map "^2.0.2" diff "^4.0.2" @@ -8728,57 +8985,59 @@ ember-cli@~3.20.2: ember-cli-normalize-entity-name "^1.0.0" ember-cli-preprocess-registry "^3.3.0" ember-cli-string-utils "^1.1.0" - ember-source-channel-url "^2.0.1" + ember-source-channel-url "^3.0.0" ensure-posix-path "^1.1.1" - execa "^1.0.0" + execa "^4.1.0" exit "^0.1.2" express "^4.17.1" filesize "^6.1.0" - find-up "^4.1.0" - find-yarn-workspace-root "^1.2.1" + find-up "^5.0.0" + find-yarn-workspace-root "^2.0.0" fixturify-project "^2.1.0" - fs-extra "^9.0.0" + fs-extra "^9.0.1" fs-tree-diff "^2.0.1" get-caller-file "^2.0.5" git-repo-info "^2.1.1" glob "^7.1.6" heimdalljs "^0.2.6" - heimdalljs-fs-monitor "^0.2.3" + heimdalljs-fs-monitor "^1.1.0" heimdalljs-graph "^1.0.0" heimdalljs-logger "^0.1.10" http-proxy "^1.18.1" inflection "^1.12.0" is-git-url "^1.0.0" + is-language-code "^2.0.0" isbinaryfile "^4.0.6" - js-yaml "^3.13.1" + js-yaml "^3.14.0" json-stable-stringify "^1.0.1" leek "0.0.24" lodash.template "^4.5.0" - markdown-it "^11.0.0" + markdown-it "^12.0.2" markdown-it-terminal "0.2.1" minimatch "^3.0.4" morgan "^1.10.0" nopt "^3.0.6" - npm-package-arg "^8.0.1" + npm-package-arg "^8.1.0" p-defer "^3.0.0" - portfinder "^1.0.26" + portfinder "^1.0.28" promise-map-series "^0.3.0" - promise.hash.helper "^1.0.6" + promise.hash.helper "^1.0.7" quick-temp "^0.1.8" - resolve "^1.17.0" - resolve-package-path "^2.0.0" + resolve "^1.19.0" + resolve-package-path "^3.1.0" sane "^4.1.0" semver "^7.3.2" silent-error "^1.1.1" - sort-package-json "^1.44.0" + sort-package-json "^1.48.0" symlink-or-copy "^1.3.1" - temp "0.9.1" - testem "^3.1.0" - tiny-lr "^1.1.1" + temp "0.9.4" + testem "^3.2.0" + tiny-lr "^2.0.0" tree-sync "^2.1.0" - uuid "^8.1.0" + uuid "^8.3.1" walk-sync "^2.2.0" watch-detector "^1.0.0" + workerpool "^6.0.3" yam "^1.0.0" ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.1.2, ember-compatibility-helpers@^1.2.0, ember-compatibility-helpers@^1.2.1: @@ -8868,7 +9127,7 @@ ember-decorators-polyfill@^1.1.5: ember-cli-version-checker "^3.1.3" ember-compatibility-helpers "^1.2.0" -ember-destroyable-polyfill@^2.0.2: +ember-destroyable-polyfill@^2.0.2, ember-destroyable-polyfill@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/ember-destroyable-polyfill/-/ember-destroyable-polyfill-2.0.3.tgz#1673ed66609a82268ef270a7d917ebd3647f11e1" integrity sha512-TovtNqCumzyAiW0/OisSkkVK93xnVF4NRU6+FN0ubpfwEOpRrmM2RqDwXI6YAChCgSHON1cz0DfQStpA1Gjuuw== @@ -9035,7 +9294,7 @@ ember-intl@^5.5.0: mkdirp "^1.0.4" silent-error "^1.1.1" -ember-load-initializers@^2.1.1: +ember-load-initializers@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-2.1.2.tgz#8a47a656c1f64f9b10cecdb4e22a9d52ad9c7efa" integrity sha512-CYR+U/wRxLbrfYN3dh+0Tb6mFaxJKfdyz+wNql6cqTrA0BBi9k6J3AaKXj273TqvEpyyXegQFFkZEiuZdYtgJw== @@ -9112,18 +9371,20 @@ ember-page-title@^6.0.3: dependencies: ember-cli-babel "^7.22.1" -ember-qunit@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-4.6.0.tgz#ad79fd3ff00073a8779400cc5a4b44829517590f" - integrity sha512-i5VOGn0RP8XH+5qkYDOZshbqAvO6lHgF65D0gz8vRx4DszCIvJMJO+bbftBTfYMxp6rqG85etAA6pfNxE0DqsQ== +ember-qunit@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-5.1.3.tgz#73de924c6c698eaed4adaaab257793741f2d666f" + integrity sha512-vz56bX/ciBZPNXl1l3jDNo9O0YBdVXtt3kqXpmEurNAlggmhdAJyAFTVZaWLtZYIfLuSdlHEMPwOzYmjqhd7fQ== dependencies: - "@ember/test-helpers" "^1.7.1" - broccoli-funnel "^2.0.2" + broccoli-funnel "^3.0.3" broccoli-merge-trees "^3.0.2" - common-tags "^1.4.0" - ember-cli-babel "^7.12.0" - ember-cli-test-loader "^2.2.0" - qunit "^2.9.3" + common-tags "^1.8.0" + ember-auto-import "^1.10.1" + ember-cli-babel "^7.23.1" + ember-cli-test-loader "^3.0.0" + resolve-package-path "^3.1.0" + silent-error "^1.1.1" + validate-peer-dependencies "^1.1.0" ember-radio-button@^2.0.1: version "2.0.1" @@ -9133,7 +9394,7 @@ ember-radio-button@^2.0.1: ember-cli-babel "^6.9.2" ember-cli-htmlbars "^1.1.1" -ember-resolver@^8.0.0: +ember-resolver@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/ember-resolver/-/ember-resolver-8.0.2.tgz#8a45a744aaf5391eb52b4cb393b3b06d2db1975c" integrity sha512-BmCoPT8nf5uv0g2QkhMsrG1Gmu6MtXd6igfhCVzCTMTwZ97SxhJKqoMY62EP/av5HVSWBC/Sa1uGU5cQvX1Aog== @@ -9188,17 +9449,17 @@ ember-source-channel-url@^1.0.1: dependencies: got "^8.0.1" -ember-source-channel-url@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-2.0.1.tgz#18b88f8a00b7746e7a456b3551abb3aea18729cc" - integrity sha512-YlLUHW9gNvxEaohIj5exykoTZb4xj9ZRTcR4J3svv9S8rjAHJUnHmqC5Fd9onCs+NGxHo7KwR/fDwsfadbDu5Q== +ember-source-channel-url@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-3.0.0.tgz#bcd5be72c63fa0b8c390b3121783b462063e2a1b" + integrity sha512-vF/8BraOc66ZxIDo3VuNP7iiDrnXEINclJgSJmqwAAEpg84Zb1DHPI22XTXSDA+E8fW5btPUxu65c3ZXi8AQFA== dependencies: - got "^8.0.1" + node-fetch "^2.6.0" -ember-source@~3.20.2: - version "3.20.6" - resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.20.6.tgz#c2aa4cee386436214b4b3ed84a71becfe815fa12" - integrity sha512-THimwJmimckNdumSg0M5URQTRlXAArEhe2ricCIuYesMwyX9HwZSUMS+IbXALzktGZU8qfEqyWNXxpmQ8ThJLA== +ember-source@~3.24.0: + version "3.24.2" + resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.24.2.tgz#64c593057020eb867935cf0735e758e96bb5f4cd" + integrity sha512-naFddoVtCI01nDbmPC4u2+8CpnjQdKlgftkE35Io9Ud6PZTsTB1uib9jf5+v8h+ie+cNbRSfikKrB1odcGm0Og== dependencies: "@babel/helper-module-imports" "^7.8.3" "@babel/plugin-transform-block-scoping" "^7.8.3" @@ -9211,7 +9472,7 @@ ember-source@~3.20.2: broccoli-funnel "^2.0.2" broccoli-merge-trees "^4.2.0" chalk "^4.0.0" - ember-cli-babel "^7.19.0" + ember-cli-babel "^7.23.0" ember-cli-get-component-path-option "^1.0.0" ember-cli-is-package-missing "^1.0.0" ember-cli-normalize-entity-name "^1.0.0" @@ -9225,7 +9486,7 @@ ember-source@~3.20.2: semver "^6.1.1" silent-error "^1.1.1" -ember-template-lint@^2.0.1, ember-template-lint@^2.14.0, ember-template-lint@^2.9.1: +ember-template-lint@^2.0.1: version "2.18.0" resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-2.18.0.tgz#cba7665c2ff3c34734285768d7bf41cdd08ffb3f" integrity sha512-4J1Dk2ZaMo/nqtP4QJF+25yYnKNOewE8xopSRNGjgQpNwaUFZmZCtzJtoSJF6+SRLcMDljnewXRezugok4ljug== @@ -9241,6 +9502,23 @@ ember-template-lint@^2.0.1, ember-template-lint@^2.14.0, ember-template-lint@^2. v8-compile-cache "^2.2.0" yargs "^16.2.0" +ember-template-lint@^2.15.0: + version "2.21.0" + resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-2.21.0.tgz#7e120abf309a8810eeed26c52377943faf15a95b" + integrity sha512-19QbEqJQdMfcRS7PsQsubflRowEtnkbD0tpYR4q/xq4lodmhU7hhOFvlTQgbxD/jwW5Ur+tkOwH4KFy9JwOyXA== + dependencies: + chalk "^4.0.0" + ember-template-recast "^5.0.1" + find-up "^5.0.0" + fuse.js "^6.4.6" + get-stdin "^8.0.0" + globby "^11.0.2" + is-glob "^4.0.1" + micromatch "^4.0.2" + resolve "^1.20.0" + v8-compile-cache "^2.2.0" + yargs "^16.2.0" + ember-template-recast@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ember-template-recast/-/ember-template-recast-5.0.1.tgz#c5d9e7208bf629ee368a3792328f245f3c651003" @@ -9448,11 +9726,6 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@~2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== - entities@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" @@ -9710,13 +9983,20 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-plugin-ember@^8.9.1: - version "8.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-8.14.0.tgz#fc4c5119b5a1c87604a7bf920ca397783b96b7be" - integrity sha512-PQhR58omMAZzcJOB8GLWzL6l/vjRZ2Uo1eohxOmgPUyeBkHfZAMlvK+OSeneMLIr4azLQ4GISkklwv6lxb8qnw== +eslint-config-prettier@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" + integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== + +eslint-plugin-ember@^10.1.1: + version "10.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-10.2.0.tgz#449c3ce8e5421c61ab47e0cb6954e2f6f1cfbdc8" + integrity sha512-W5cPJa+bBcKJ5kmmu7o8r1hbbT45ZCy8eE5EyRjqJ02B7Jlg74mX+Hdz4RYNSvV1+G7YAOwEZLUkIdJ+44ySGA== dependencies: "@ember-data/rfc395-data" "^0.0.4" + css-tree "^1.0.0-alpha.39" ember-rfc176-data "^0.3.15" + eslint-utils "^2.1.0" lodash.kebabcase "^4.1.1" snake-case "^3.0.3" @@ -9740,6 +10020,13 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" +eslint-plugin-prettier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -9862,13 +10149,13 @@ eslint@^6.5.1: text-table "^0.2.0" v8-compile-cache "^2.0.3" -eslint@^7.5.0: - version "7.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.19.0.tgz#6719621b196b5fad72e43387981314e5d0dc3f41" - integrity sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg== +eslint@^7.17.0: + version "7.21.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83" + integrity sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg== dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.3.0" + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -9879,9 +10166,9 @@ eslint@^7.5.0: eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" espree "^7.3.1" - esquery "^1.2.0" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^6.0.0" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" globals "^12.1.0" @@ -9946,13 +10233,20 @@ esprima@~3.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" integrity sha1-U88kes2ncxPlUcOqLnM0LT+099k= -esquery@^1.0.1, esquery@^1.2.0: +esquery@^1.0.1: version "1.3.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: estraverse "^5.1.0" +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -10083,7 +10377,7 @@ execa@^3.0.0, execa@^3.4.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^4.0.0, execa@^4.0.3: +execa@^4.0.0, execa@^4.0.3, execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -10226,6 +10520,11 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-stack@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" + integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ== + extract-zip@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -10267,6 +10566,11 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^2.0.2, fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -10360,10 +10664,10 @@ fault@^1.0.0, fault@^1.0.1: dependencies: format "^0.2.0" -faye-websocket@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= +faye-websocket@^0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" @@ -10430,6 +10734,13 @@ file-entry-cache@^6.0.0: dependencies: flat-cache "^3.0.4" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + file-loader@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -10610,7 +10921,7 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-yarn-workspace-root@^1.1.0, find-yarn-workspace-root@^1.2.1: +find-yarn-workspace-root@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== @@ -10618,6 +10929,13 @@ find-yarn-workspace-root@^1.1.0, find-yarn-workspace-root@^1.2.1: fs-extra "^4.0.3" micromatch "^3.1.4" +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" @@ -10760,13 +11078,6 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.2.tgz#dd73c8effc12728ba5cf4259d760ea5fb83e3147" integrity sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -11082,6 +11393,11 @@ fuse.js@^3.6.1: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== +fuse.js@^6.4.6: + version "6.4.6" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79" + integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw== + galactus@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9" @@ -11124,7 +11440,7 @@ genfun@^5.0.0: resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== -gensync@^1.0.0-beta.1: +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -11276,23 +11592,11 @@ git-read-pkt-line@0.0.8: bops "0.0.3" through "~2.2.7" -git-repo-info@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.4.1.tgz#2a072823254aaf62fcf0766007d7b6651bd41943" - integrity sha1-KgcoIyVKr2L88HZgB9e2ZRvUGUM= - git-repo-info@^2.0.0, git-repo-info@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.1.tgz#220ffed8cbae74ef8a80e3052f2ccb5179aed058" integrity sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg== -git-repo-version@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/git-repo-version/-/git-repo-version-1.0.2.tgz#2c8e9bee5d970cafc0dd58480f9dc56d9afe8e4f" - integrity sha512-OPtwtHx9E8/rTMcWT+BU6GNj6Kq/O40bHJZaZAGy+pN2RXGmeKcfr0ix4M+SQuFY8vl5L/wfPSGOAtvUT/e3Qg== - dependencies: - git-repo-info "^1.4.1" - git-transport-protocol@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/git-transport-protocol/-/git-transport-protocol-0.1.0.tgz#99f4dd6389b9161eded74a9e617d6ba5ed0a6c2c" @@ -11953,11 +12257,14 @@ he@1.2.0, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -heimdalljs-fs-monitor@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/heimdalljs-fs-monitor/-/heimdalljs-fs-monitor-0.2.3.tgz#1aedd4b1c61d86c51f6141fb75c5a3350dc41b15" - integrity sha512-fYAvqSP0CxeOjLrt61B4wux/jqZzdZnS2xfb2oc14NP6BTZ8gtgtR2op6gKFakOR8lm8GN9Xhz1K4A1ZvJ4RQw== +heimdalljs-fs-monitor@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/heimdalljs-fs-monitor/-/heimdalljs-fs-monitor-1.1.0.tgz#0ad5aa1dac0a30d5940a74edeea3d515e70225e4" + integrity sha512-OH1LgPeqRo5kOzN5XhU/I4lUbqDqj0jx4+6vn33RTKcZTFmp/63KWbVrDDlk9iDlQ5j6FxmOeuoWJ2cjLjvNcQ== dependencies: + callsites "^3.1.0" + clean-stack "^2.2.0" + extract-stack "^2.0.0" heimdalljs "^0.2.3" heimdalljs-logger "^0.1.7" @@ -12002,21 +12309,11 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= - -hoek@4.x.x: +hoek@2.x.x, hoek@4.x.x, hoek@6.x.x, hoek@~4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== -hoek@6.x.x: - version "6.1.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c" - integrity sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ== - hoist-non-react-statics@^3.3.0: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -12546,7 +12843,7 @@ inquirer@^0.12.0: strip-ansi "^3.0.0" through "^2.3.6" -inquirer@^7.0.0, inquirer@^7.0.1: +inquirer@^7.0.0, inquirer@^7.3.3: version "7.3.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== @@ -12709,7 +13006,7 @@ is-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2: +is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== @@ -12735,7 +13032,7 @@ is-cidr@^3.0.0: dependencies: cidr-regex "^2.0.10" -is-core-module@^2.1.0: +is-core-module@^2.1.0, is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== @@ -12908,6 +13205,11 @@ is-lambda@^1.0.1: resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= +is-language-code@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-language-code/-/is-language-code-2.0.0.tgz#6f4d59c551d73b98c45cf9f1d3ce65cee060e65b" + integrity sha512-6xKmRRcP2YdmMBZMVS3uiJRPQgcMYolkD6hFw2Y4KjqyIyaJlCGxUt56tuu0iIV8q9r8kMEo0Gjd/GFwKrgjbw== + is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -13925,10 +14227,10 @@ linkify-it@~1.2.0: dependencies: uc.micro "^1.0.1" -livereload-js@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" - integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== +livereload-js@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-3.3.1.tgz#61f887468086762e61fb2987412cf9d1dda99202" + integrity sha512-CBu1gTEfzVhlOK1WASKAAJ9Qx1fHECTq0SUB67sfxwQssopTyvzqTlgl+c0h9pZ6V+Fzd2rc510ppuNusg9teQ== load-json-file@^1.0.0: version "1.1.0" @@ -14183,7 +14485,7 @@ lodash.defaults@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= -lodash.defaultsdeep@^4.6.0, lodash.defaultsdeep@^4.6.1: +lodash.defaultsdeep@^4.6.1: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== @@ -14610,13 +14912,13 @@ markdown-it-terminal@0.2.1: lodash.merge "^4.6.2" markdown-it "^8.3.1" -markdown-it@^11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-11.0.1.tgz#b54f15ec2a2193efa66dda1eb4173baea08993d6" - integrity sha512-aU1TzmBKcWNNYvH9pjq6u92BML+Hz3h5S/QpfTFwiQF852pLT+9qHsrhM9JYipkOXZxGn+sGH8oyJE9FD9WezQ== +markdown-it@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.0.4.tgz#eec8247d296327eac3ba9746bdeec9cfcc751e33" + integrity sha512-34RwOXZT8kyuOJy25oJNJoulO8L0bTHYWXcdZBYZqFnjIy3NgjeoM3FmPXIOFQ26/lSHYMr8oc62B6adxXcb3Q== dependencies: - argparse "^1.0.7" - entities "~2.0.0" + argparse "^2.0.1" + entities "~2.1.0" linkify-it "^3.0.1" mdurl "^1.0.1" uc.micro "^1.0.5" @@ -14767,6 +15069,11 @@ mdast-util-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + mdn-data@~1.1.0: version "1.1.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" @@ -15737,7 +16044,7 @@ npm-package-arg@^7.0.0: semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: +npm-package-arg@^8.0.0: version "8.1.0" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.0.tgz#b5f6319418c3246a1c38e1a8fbaa06231bc5308f" integrity sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig== @@ -15746,6 +16053,15 @@ npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: semver "^7.0.0" validate-npm-package-name "^3.0.0" +npm-package-arg@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.6, npm-packlist@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" @@ -16099,7 +16415,7 @@ object.entries@^1.1.0: es-abstract "^1.18.0-next.1" has "^1.0.3" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.1: +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== @@ -16904,7 +17220,7 @@ polished@^3.4.4: dependencies: "@babel/runtime" "^7.9.2" -portfinder@^1.0.25, portfinder@^1.0.26: +portfinder@^1.0.25, portfinder@^1.0.28: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== @@ -17087,7 +17403,14 @@ pretender@^3.4.3: fake-xml-http-request "^2.1.1" route-recognizer "^0.3.3" -prettier@^2.0.5, prettier@^2.1.2: +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== @@ -17229,7 +17552,7 @@ promise.allsettled@^1.0.0: get-intrinsic "^1.0.2" iterate-value "^1.0.2" -promise.hash.helper@^1.0.6: +promise.hash.helper@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/promise.hash.helper/-/promise.hash.helper-1.0.7.tgz#2f39d8495df40dcdfbc1d5be9e9e56efeae7f180" integrity sha512-0qhWYyCV9TYDMSooYw1fShIb7R6hsWYja7JLqbeb1MvHqDTvP/uy/R1RsyVqDi6GCiHOI4G5p2Hpr3IA+/l/+Q== @@ -17428,7 +17751,7 @@ quick-temp@^0.1.2, quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8: rimraf "^2.5.4" underscore.string "~3.3.4" -qunit-dom@^1.2.0: +qunit-dom@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/qunit-dom/-/qunit-dom-1.6.0.tgz#a4bea6a46329d221e4a317d712cb40709107b977" integrity sha512-YwSqcLjQcRI0fUFpaSWwU10KIJPFW5Qh+d3cT5DOgx81dypRuUSiPkKFmBY/CDs/R1KdHRadthkcXg2rqAon8Q== @@ -17438,7 +17761,7 @@ qunit-dom@^1.2.0: ember-cli-babel "^7.23.0" ember-cli-version-checker "^5.1.1" -qunit@^2.9.3: +qunit@^2.13.0: version "2.14.0" resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.14.0.tgz#6f913903e71ebe24ef4a4dada2b796fb52285051" integrity sha512-CYfenbgdpmhl2Ql2rDrrj0felY4h8k6lYhtWwGBCLL4qQC33YOj0psV8MWo85L1i0SIOmEDRXkFopWnGCLmf7g== @@ -18485,6 +18808,14 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12 is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + responselike@1.0.2, responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -19252,10 +19583,10 @@ sort-object-keys@^1.1.3: resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== -sort-package-json@^1.44.0: - version "1.48.1" - resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.48.1.tgz#58629823da53a3ccccc049cb7e7300bc23072b33" - integrity sha512-YvDm1iBzhphfXtctTS0XIBlIW/2N1DZNHx3YMcZnptpZhchqH4zazUOuEWmjfNXndwamITMt9hFPliqwx1SHvQ== +sort-package-json@^1.48.0: + version "1.49.0" + resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.49.0.tgz#82845ab598501bb35875f326e4768a5ab5f15335" + integrity sha512-3YuqFGThwc9X0TZLYohOUJJ/P6uJIVcTeuJOc6ZWw4f1fHpTHIfVysKer4qXtrZ2zvwwU2aEcb555Bo+2fwIgQ== dependencies: detect-indent "^6.0.0" detect-newline "3.1.0" @@ -19300,7 +19631,7 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.13, source-map-support@^0.5.16, source-map-support@~0.5.12: +source-map-support@^0.5.13, source-map-support@^0.5.16, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -19335,7 +19666,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -20149,11 +20480,12 @@ temp-dir@^2.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== -temp@0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.1.tgz#2d666114fafa26966cd4065996d7ceedd4dd4697" - integrity sha512-WMuOgiua1xb5R56lE0eH6ivpVmg/lq2OHm4+LtT/xtEtPQ+sz6N3bBM6WZ5FvO1lO4IKIOb43qnhoc4qxP5OeA== +temp@0.9.4: + version "0.9.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" + integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== dependencies: + mkdirp "^0.5.1" rimraf "~2.6.2" term-size@^1.2.0: @@ -20198,7 +20530,7 @@ terser-webpack-plugin@^3.0.0: terser "^4.8.0" webpack-sources "^1.4.3" -terser@^4.1.2, terser@^4.3.9, terser@^4.6.3, terser@^4.8.0: +terser@^4.1.2, terser@^4.6.3, terser@^4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -20207,6 +20539,15 @@ terser@^4.1.2, terser@^4.3.9, terser@^4.6.3, terser@^4.8.0: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.0.tgz#138cdf21c5e3100b1b3ddfddf720962f88badcd2" + integrity sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -20216,7 +20557,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -testem@^3.1.0: +testem@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/testem/-/testem-3.2.0.tgz#9924481f6a3b23e350fa77bb251c64d801c4c9a7" integrity sha512-FkFzNRCIzCxjbNSTxIQSC2tWn1Q2MTR/GTxusSw6uZA4byEQ7wc86TKutNnoCyZ5XIaD9wo4q+dmlK0GUEqFVA== @@ -20350,15 +20691,15 @@ tiny-glob@0.2.8: globalyzer "0.1.0" globrex "^0.1.2" -tiny-lr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" - integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== +tiny-lr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-2.0.0.tgz#863659d7ce1ed201a117d8197d7f8b9a27bdc085" + integrity sha512-f6nh0VMRvhGx4KCeK1lQ/jaL0Zdb5WdR+Jk8q9OSUQnaSDxAEGH1fgqLZ+cMl5EW3F2MGnCsalBO1IsnnogW1Q== dependencies: body "^5.1.0" debug "^3.1.0" - faye-websocket "~0.10.0" - livereload-js "^2.3.0" + faye-websocket "^0.11.3" + livereload-js "^3.3.1" object-assign "^4.1.0" qs "^6.4.0" @@ -21158,17 +21499,6 @@ util.promisify@1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util.promisify@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" - util.promisify@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" @@ -21215,7 +21545,7 @@ uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.0.0, uuid@^8.1.0, uuid@^8.3.0: +uuid@^8.0.0, uuid@^8.3.0, uuid@^8.3.1: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -21240,6 +21570,14 @@ validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: dependencies: builtins "^1.0.3" +validate-peer-dependencies@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/validate-peer-dependencies/-/validate-peer-dependencies-1.1.0.tgz#8240a115df121ea35b0bb082255b38b5c591d7e1" + integrity sha512-eHHxI3fNMqu8bzWPRWWgV72kBJkWwRCeEua7yC7UI6dsqC55orhxKAC3uyQfCjjToOyAZ8mpNrbQH+NMoYBn1w== + dependencies: + resolve-package-path "^3.1.0" + semver "^7.3.2" + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -21646,12 +21984,7 @@ workerpool@^3.1.1: object-assign "4.1.1" rsvp "^4.8.4" -workerpool@^5.0.1: - version "5.0.4" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-5.0.4.tgz#4f67cb70ff7550a27ab94de25b0b843cd92059a2" - integrity sha512-Sywova24Ow2NQ24JPB68bI89EdqMDjUXo4OpofK/QMD7C2ZVMloYBgQ5J3PChcBJHj2vspsmGx1/3nBKXtUkXQ== - -workerpool@^6.0.3: +workerpool@^6.0.0, workerpool@^6.0.3: version "6.1.0" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==