diff --git a/addons/api/.editorconfig b/addons/api/.editorconfig index c35a00240..41302d1b0 100644 --- a/addons/api/.editorconfig +++ b/addons/api/.editorconfig @@ -12,8 +12,5 @@ insert_final_newline = true indent_style = space indent_size = 2 -[*.hbs] -insert_final_newline = false - [*.{diff,md}] trim_trailing_whitespace = false diff --git a/addons/api/.eslintrc.js b/addons/api/.eslintrc.js index 49fb14100..114c6817f 100644 --- a/addons/api/.eslintrc.js +++ b/addons/api/.eslintrc.js @@ -56,5 +56,10 @@ module.exports = { plugins: ['node'], extends: ['plugin:node/recommended'], }, + { + // Test files: + files: ['tests/**/*-test.{js,ts}'], + extends: ['plugin:qunit/recommended'], + }, ], }; diff --git a/addons/api/mirage/config.js b/addons/api/mirage/config.js index b1481adf9..213f71d33 100644 --- a/addons/api/mirage/config.js +++ b/addons/api/mirage/config.js @@ -1,4 +1,3 @@ -import Ember from 'ember'; import config from '../config/environment'; import { authHandler, deauthHandler } from './route-handlers/auth'; import { pickRandomStatusString } from './factories/session'; @@ -6,6 +5,8 @@ import { Response } from 'miragejs'; import initializeMockIPC from './scenarios/ipc'; import makeBooleanFilter from './helpers/bexpr-filter'; +const isTesting = config.environment === 'test'; + export default function () { initializeMockIPC(this); @@ -417,7 +418,7 @@ export default function () { // update alternate sessions to auth user. // But only if not in testing mode. // In tests, we need deterministic statuses. - if (!Ember.testing) { + if (!isTesting) { sessions.all().models.forEach((session) => { session.update({ status: pickRandomStatusString(), @@ -446,7 +447,7 @@ export default function () { ); this.get('/sessions/:id', function ({ sessions }, { params: { id } }) { const session = sessions.find(id); - if (!Ember.testing) { + if (!isTesting) { session.update({ status: pickRandomStatusString(), }); diff --git a/addons/api/mirage/scenarios/ipc.js b/addons/api/mirage/scenarios/ipc.js index 6e44988e4..0c01a656e 100644 --- a/addons/api/mirage/scenarios/ipc.js +++ b/addons/api/mirage/scenarios/ipc.js @@ -1,7 +1,8 @@ -import Ember from 'ember'; import config from 'ember-get-config'; import { datatype } from 'faker'; +const isTesting = config.environment === 'test'; + export default function initializeMockIPC(server) { /** * We strive to make this application runnable in a regular web browser, since @@ -149,7 +150,7 @@ export default function initializeMockIPC(server) { * * Initializes mock IPC only in a non-Electron non-testing context. */ - if (!config.isElectron && !Ember.testing) { + if (!config.isElectron && !isTesting) { const mockIPC = new MockIPC(); window.addEventListener('message', async function (event) { if (event.origin !== window.location.origin) return; diff --git a/addons/api/package.json b/addons/api/package.json index 1012dd943..2fcc5ae78 100644 --- a/addons/api/package.json +++ b/addons/api/package.json @@ -43,12 +43,11 @@ "broccoli-asset-rev": "^3.0.0", "doctoc": "^2.0.1", "ember-auto-import": "^1.12.0", - "ember-cli": "~3.28.0", + "ember-cli": "~3.28.3", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-inject-live-reload": "^2.1.0", "ember-cli-sri": "^2.1.1", "ember-cli-terser": "^4.0.2", - "ember-cli-update": "^0.54.6", "ember-copy": "^2.0.1", "ember-disable-prototype-extensions": "^1.1.3", "ember-export-application-global": "^2.0.1", @@ -58,7 +57,7 @@ "ember-page-title": "^6.2.2", "ember-qunit": "^5.1.4", "ember-resolver": "^8.0.3", - "ember-source": "~3.24.0", + "ember-source": "~3.28.4", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^3.7.0", "ember-try": "^1.4.0", @@ -67,6 +66,7 @@ "eslint-plugin-ember": "^10.5.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-qunit": "^6.2.0", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", "prettier": "^2.4.0", @@ -74,7 +74,7 @@ "qunit-dom": "^2.0.0" }, "engines": { - "node": ">=10 <=15" + "node": ">=12 <=17" }, "ember": { "edition": "octane" diff --git a/addons/api/tests/unit/models/base-test.js b/addons/api/tests/unit/models/base-test.js index 228f47782..8e320cfdf 100644 --- a/addons/api/tests/unit/models/base-test.js +++ b/addons/api/tests/unit/models/base-test.js @@ -47,7 +47,7 @@ module('Unit | Model | base', function (hooks) { assert.notEqual(model.scopeID, scope.id); model.scopeModel = scope; assert.equal(model.scopeID, scope.id); - assert.equal(model.scope.isOrg, true); + assert.true(model.scope.isOrg); }); test('it has a displayName attribute', function (assert) { @@ -78,18 +78,18 @@ module('Unit | Model | base', function (hooks) { }, }); const model = store.peekRecord('user', '1'); - assert.equal(model.canSave, false); - assert.equal(model.cannotSave, true); + assert.false(model.canSave); + assert.true(model.cannotSave); // Should be able to save if dirty model.name = 'User'; - assert.equal(model.hasDirtyAttributes, true); - assert.equal(model.canSave, true); - assert.equal(model.cannotSave, false); + assert.true(model.hasDirtyAttributes); + assert.true(model.canSave); + assert.false(model.cannotSave); // Should not be able to save while currently saving model.transitionTo('updated.inFlight'); - assert.equal(model.isSaving, true); - assert.equal(model.canSave, false); - assert.equal(model.cannotSave, true); + assert.true(model.isSaving); + assert.false(model.canSave); + assert.true(model.cannotSave); model.transitionTo('loaded'); }); diff --git a/addons/api/tests/unit/services/storage-test.js b/addons/api/tests/unit/services/storage-test.js index 61702c765..5b955dc21 100644 --- a/addons/api/tests/unit/services/storage-test.js +++ b/addons/api/tests/unit/services/storage-test.js @@ -30,7 +30,7 @@ module('Unit | Service | storage', function (hooks) { assert.equal(service.getItem('foo'), 'bar'); }); - test("it's in-memory storage is implicitly refreshed for every test case", function (assert) { + test("it's in-memory storage is implicitly refreshed for every test case, and thus values from previous runs are not present", function (assert) { assert.expect(1); const service = this.owner.lookup('service:storage'); assert.notOk(service.getItem('foo')); diff --git a/addons/auth/.editorconfig b/addons/auth/.editorconfig index c35a00240..41302d1b0 100644 --- a/addons/auth/.editorconfig +++ b/addons/auth/.editorconfig @@ -12,8 +12,5 @@ insert_final_newline = true indent_style = space indent_size = 2 -[*.hbs] -insert_final_newline = false - [*.{diff,md}] trim_trailing_whitespace = false diff --git a/addons/auth/.eslintrc.js b/addons/auth/.eslintrc.js index 49fb14100..114c6817f 100644 --- a/addons/auth/.eslintrc.js +++ b/addons/auth/.eslintrc.js @@ -56,5 +56,10 @@ module.exports = { plugins: ['node'], extends: ['plugin:node/recommended'], }, + { + // Test files: + files: ['tests/**/*-test.{js,ts}'], + extends: ['plugin:qunit/recommended'], + }, ], }; diff --git a/addons/auth/package.json b/addons/auth/package.json index d47105134..bc19d30ec 100644 --- a/addons/auth/package.json +++ b/addons/auth/package.json @@ -36,12 +36,11 @@ "core": "*", "doctoc": "^2.0.1", "ember-auto-import": "^1.12.0", - "ember-cli": "~3.28.0", + "ember-cli": "~3.28.3", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-inject-live-reload": "^2.1.0", "ember-cli-sri": "^2.1.1", "ember-cli-terser": "^4.0.2", - "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", @@ -50,7 +49,7 @@ "ember-page-title": "^6.2.2", "ember-qunit": "^5.1.4", "ember-resolver": "^8.0.3", - "ember-source": "~3.24.0", + "ember-source": "~3.28.4", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^3.7.0", "ember-try": "^1.4.0", @@ -59,6 +58,7 @@ "eslint-plugin-ember": "^10.5.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-qunit": "^6.2.0", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", "prettier": "^2.4.0", @@ -66,7 +66,7 @@ "qunit-dom": "^2.0.0" }, "engines": { - "node": ">=10 <=15" + "node": ">=12 <=17" }, "ember": { "edition": "octane" diff --git a/addons/core/.editorconfig b/addons/core/.editorconfig index c35a00240..41302d1b0 100644 --- a/addons/core/.editorconfig +++ b/addons/core/.editorconfig @@ -12,8 +12,5 @@ insert_final_newline = true indent_style = space indent_size = 2 -[*.hbs] -insert_final_newline = false - [*.{diff,md}] trim_trailing_whitespace = false diff --git a/addons/core/.eslintrc.js b/addons/core/.eslintrc.js index 49fb14100..114c6817f 100644 --- a/addons/core/.eslintrc.js +++ b/addons/core/.eslintrc.js @@ -56,5 +56,10 @@ module.exports = { plugins: ['node'], extends: ['plugin:node/recommended'], }, + { + // Test files: + files: ['tests/**/*-test.{js,ts}'], + extends: ['plugin:qunit/recommended'], + }, ], }; diff --git a/addons/core/package.json b/addons/core/package.json index 199973f38..c12f03dcd 100644 --- a/addons/core/package.json +++ b/addons/core/package.json @@ -50,7 +50,7 @@ "broccoli-asset-rev": "^3.0.0", "doctoc": "^2.0.1", "ember-auto-import": "^1.12.0", - "ember-cli": "~3.28.0", + "ember-cli": "~3.28.3", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-inject-live-reload": "^2.1.0", "ember-cli-sri": "^2.1.1", @@ -63,7 +63,7 @@ "ember-page-title": "^6.2.2", "ember-qunit": "^5.1.4", "ember-resolver": "^8.0.3", - "ember-source": "~3.24.0", + "ember-source": "~3.28.4", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^3.7.0", "ember-try": "^1.4.0", @@ -72,6 +72,7 @@ "eslint-plugin-ember": "^10.5.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-qunit": "^6.2.0", "faker": "^5.5.3", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", @@ -80,7 +81,7 @@ "qunit-dom": "^2.0.0" }, "engines": { - "node": ">=10 <=15" + "node": ">=12 <=17" }, "ember": { "edition": "octane" diff --git a/addons/rose/.editorconfig b/addons/rose/.editorconfig index c35a00240..41302d1b0 100644 --- a/addons/rose/.editorconfig +++ b/addons/rose/.editorconfig @@ -12,8 +12,5 @@ insert_final_newline = true indent_style = space indent_size = 2 -[*.hbs] -insert_final_newline = false - [*.{diff,md}] trim_trailing_whitespace = false diff --git a/addons/rose/.eslintrc.js b/addons/rose/.eslintrc.js index bdb867ae9..46de42474 100644 --- a/addons/rose/.eslintrc.js +++ b/addons/rose/.eslintrc.js @@ -58,5 +58,10 @@ module.exports = { plugins: ['node'], extends: ['plugin:node/recommended'], }, + { + // Test files: + files: ['tests/**/*-test.{js,ts}'], + extends: ['plugin:qunit/recommended'], + }, ], }; diff --git a/addons/rose/addon/components/rose/dropdown/link/index.hbs b/addons/rose/addon/components/rose/dropdown/link/index.hbs index f4c2623f8..a7593fe8d 100644 --- a/addons/rose/addon/components/rose/dropdown/link/index.hbs +++ b/addons/rose/addon/components/rose/dropdown/link/index.hbs @@ -1,20 +1,46 @@ +{{! + Ember's LinkTo component won't accept nullish @query or @model, so we have to + overcompensate by duplicating it four times, one for every combination. + This is really unpleasant. +}} {{#if @model}} - - {{yield}} - + {{#if @query}} + + {{yield}} + + {{else}} + + {{yield}} + + {{/if}} {{else}} - - {{yield}} - + {{#if @query}} + + {{yield}} + + {{else}} + + {{yield}} + + {{/if}} {{/if}} diff --git a/addons/rose/package.json b/addons/rose/package.json index 7cb043175..8d9f8b7d8 100644 --- a/addons/rose/package.json +++ b/addons/rose/package.json @@ -58,13 +58,12 @@ "broccoli-asset-rev": "^3.0.0", "doctoc": "^2.0.1", "ember-auto-import": "^1.12.0", - "ember-cli": "~3.28.0", + "ember-cli": "~3.28.3", "ember-cli-dependency-checker": "^3.2.0", "ember-cli-inject-live-reload": "^2.1.0", "ember-cli-sass": "^10.0.1", "ember-cli-sri": "^2.1.1", "ember-cli-terser": "^4.0.2", - "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", @@ -74,7 +73,7 @@ "ember-page-title": "^6.2.2", "ember-qunit": "^5.1.4", "ember-resolver": "^8.0.3", - "ember-source": "~3.24.0", + "ember-source": "~3.28.4", "ember-source-channel-url": "^3.0.0", "ember-template-lint": "^3.7.0", "ember-try": "^1.4.0", @@ -83,6 +82,7 @@ "eslint-plugin-ember": "^10.5.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-qunit": "^6.2.0", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", "prettier": "^2.4.0", @@ -94,7 +94,7 @@ "sass-lint": "^1.13.1" }, "engines": { - "node": ">=10 <=15" + "node": ">=12 <=17" }, "ember": { "edition": "octane" diff --git a/addons/rose/tests/integration/components/rose/badge-test.js b/addons/rose/tests/integration/components/rose/badge-test.js index 56810d21b..f006308ee 100644 --- a/addons/rose/tests/integration/components/rose/badge-test.js +++ b/addons/rose/tests/integration/components/rose/badge-test.js @@ -22,7 +22,8 @@ module('Integration | Component | rose/badge', function (hooks) { }); test('it styles content using @style', async function (assert) { - let styles = [ + assert.expect(14); + const styles = [ 'outline', 'dark', 'informational', diff --git a/addons/rose/tests/integration/components/rose/button-test.js b/addons/rose/tests/integration/components/rose/button-test.js index 90cc10589..e5a685be5 100644 --- a/addons/rose/tests/integration/components/rose/button-test.js +++ b/addons/rose/tests/integration/components/rose/button-test.js @@ -23,7 +23,7 @@ module('Integration | Component | rose/button', function (hooks) { test('it is disabled when @disabled={{true}}', async function (assert) { await render(hbs``); - assert.equal(find('button').disabled, true); + assert.true(find('button').disabled); }); test('it adds a style class', async function (assert) { diff --git a/addons/rose/tests/integration/components/rose/dropdown/button-test.js b/addons/rose/tests/integration/components/rose/dropdown/button-test.js index b0bd48eb5..92129e5a7 100644 --- a/addons/rose/tests/integration/components/rose/dropdown/button-test.js +++ b/addons/rose/tests/integration/components/rose/dropdown/button-test.js @@ -23,7 +23,7 @@ module('Integration | Component | rose/dropdown/button', function (hooks) { test('it is disabled when @disabled={{true}}', async function (assert) { await render(hbs``); - assert.equal(find('button').disabled, true); + assert.true(find('button').disabled); }); test('it adds a style class', async function (assert) { diff --git a/addons/rose/tests/integration/components/rose/form/checkbox-test.js b/addons/rose/tests/integration/components/rose/form/checkbox-test.js index 594704918..cd131f0b1 100644 --- a/addons/rose/tests/integration/components/rose/form/checkbox-test.js +++ b/addons/rose/tests/integration/components/rose/form/checkbox-test.js @@ -60,17 +60,17 @@ module('Integration | Component | rose/form/checkbox', function (hooks) { test('it is not checked by default', async function (assert) { await render(hbs``); - assert.equal(find('input').checked, false); + assert.false(find('input').checked); }); test('it is not disabled by default', async function (assert) { await render(hbs``); - assert.equal(find('input').disabled, false); + assert.false(find('input').disabled); }); test('it is checked when @checked={{true}}', async function (assert) { await render(hbs``); - assert.equal(find('input').checked, true); + assert.true(find('input').checked); }); test('it marks error when @error={{true}}', async function (assert) { @@ -80,6 +80,6 @@ module('Integration | Component | rose/form/checkbox', function (hooks) { test('it is disabled when @disabled={{true}}', async function (assert) { await render(hbs``); - assert.equal(find('input').disabled, true); + assert.true(find('input').disabled); }); }); diff --git a/addons/rose/tests/integration/components/rose/form/radio/group-test.js b/addons/rose/tests/integration/components/rose/form/radio/group-test.js index dfd2e4bce..4354004e7 100644 --- a/addons/rose/tests/integration/components/rose/form/radio/group-test.js +++ b/addons/rose/tests/integration/components/rose/form/radio/group-test.js @@ -43,13 +43,13 @@ module('Integration | Component | rose/form/radio/group', function (hooks) { `); - assert.equal(findAll('[type="radio"]')[0].checked, false); - assert.equal(findAll('[type="radio"]')[1].checked, true); + assert.false(findAll('[type="radio"]')[0].checked); + assert.true(findAll('[type="radio"]')[1].checked); await click(findAll('[type="radio"]')[0]); - assert.equal(findAll('[type="radio"]')[0].checked, true); - assert.equal(findAll('[type="radio"]')[1].checked, false); + assert.true(findAll('[type="radio"]')[0].checked); + assert.false(findAll('[type="radio"]')[1].checked); }); test('it reflects active radiofield value in @selectedValue and triggers a @changed function', async function (assert) { @@ -100,19 +100,19 @@ module('Integration | Component | rose/form/radio/group', function (hooks) { `); - assert.equal(findAll('[type="radio"]')[0].checked, false); - assert.equal(findAll('[type="radio"]')[1].checked, false); + assert.false(findAll('[type="radio"]')[0].checked); + assert.false(findAll('[type="radio"]')[1].checked); this.set('selectedValue', 'flamingo'); - assert.equal(findAll('[type="radio"]')[0].checked, false); - assert.equal(findAll('[type="radio"]')[1].checked, true); + assert.false(findAll('[type="radio"]')[0].checked); + assert.true(findAll('[type="radio"]')[1].checked); this.set('selectedValue', 'pegion'); - assert.equal(findAll('[type="radio"]')[0].checked, true); - assert.equal(findAll('[type="radio"]')[1].checked, false); + assert.true(findAll('[type="radio"]')[0].checked); + assert.false(findAll('[type="radio"]')[1].checked); this.set('selectedValue', 'dog'); - assert.equal(findAll('[type="radio"]')[0].checked, false); - assert.equal(findAll('[type="radio"]')[1].checked, false); + assert.false(findAll('[type="radio"]')[0].checked); + assert.false(findAll('[type="radio"]')[1].checked); }); }); diff --git a/addons/rose/tests/integration/components/rose/form/radio/radio-test.js b/addons/rose/tests/integration/components/rose/form/radio/radio-test.js index 56c8caebc..af0be8d54 100644 --- a/addons/rose/tests/integration/components/rose/form/radio/radio-test.js +++ b/addons/rose/tests/integration/components/rose/form/radio/radio-test.js @@ -28,25 +28,25 @@ module('Integration | Component | rose/form/radio/radio', function (hooks) { await render( hbs`` ); - assert.equal(await find('input').checked, true); + assert.true(await find('input').checked); }); test('it is not checked when @value and @selectedValue values are different', async function (assert) { await render(hbs``); - assert.equal(await find('input').checked, false); + assert.false(await find('input').checked); await render(hbs``); - assert.equal(await find('input').checked, false); + assert.false(await find('input').checked); await render( hbs`` ); - assert.equal(await find('input').checked, false); + assert.false(await find('input').checked); }); test('it is not disabled by default', async function (assert) { await render(hbs``); - assert.equal(await find('input').disabled, false); + assert.false(await find('input').disabled); }); test('it is not in error state by default', async function (assert) { @@ -56,7 +56,7 @@ module('Integration | Component | rose/form/radio/radio', function (hooks) { test('it is disabled when @disabled={{true}}', async function (assert) { await render(hbs``); - assert.equal(await find('input').disabled, true); + assert.true(await find('input').disabled); }); test('it is in error state when @error={{true}}', async function (assert) { diff --git a/addons/rose/tests/integration/modifiers/on-click-outside-test.js b/addons/rose/tests/integration/modifiers/on-click-outside-test.js index 7318ef423..294134263 100644 --- a/addons/rose/tests/integration/modifiers/on-click-outside-test.js +++ b/addons/rose/tests/integration/modifiers/on-click-outside-test.js @@ -7,6 +7,7 @@ module('Integration | Modifier | on-click-outside', function (hooks) { setupRenderingTest(hooks); test('it fires event when an outside element is clicked', async function (assert) { + assert.expect(2); this.set('clickedOutside', (element, event) => { assert.ok(element); assert.equal(event.target.id, 'outside'); diff --git a/package.json b/package.json index cef044455..275cf5d0a 100755 --- a/package.json +++ b/package.json @@ -89,6 +89,6 @@ } }, "engines": { - "node": ">=10 <=15" + "node": ">=12 <=17" } } diff --git a/ui/admin/.editorconfig b/ui/admin/.editorconfig index c35a00240..41302d1b0 100644 --- a/ui/admin/.editorconfig +++ b/ui/admin/.editorconfig @@ -12,8 +12,5 @@ insert_final_newline = true indent_style = space indent_size = 2 -[*.hbs] -insert_final_newline = false - [*.{diff,md}] trim_trailing_whitespace = false diff --git a/ui/admin/.eslintrc.js b/ui/admin/.eslintrc.js index 5062441ff..c926d2400 100644 --- a/ui/admin/.eslintrc.js +++ b/ui/admin/.eslintrc.js @@ -55,5 +55,10 @@ module.exports = { 'node/no-unpublished-require': 'off', }, }, + { + // Test files: + files: ['tests/**/*-test.{js,ts}'], + extends: ['plugin:qunit/recommended'], + }, ], }; diff --git a/ui/admin/package.json b/ui/admin/package.json index 215991910..8351cc0e5 100644 --- a/ui/admin/package.json +++ b/ui/admin/package.json @@ -51,7 +51,7 @@ "ember-a11y-testing": "^4.2.0", "ember-auto-import": "^1.12.0", "ember-breadcrumbs": "^0.2.3", - "ember-cli": "~3.28.0", + "ember-cli": "~3.28.3", "ember-cli-app-version": "^5.0.0", "ember-cli-babel": "^7.26.6", "ember-cli-code-coverage": "^1.0.3", @@ -63,7 +63,6 @@ "ember-cli-sri": "^2.1.1", "ember-cli-template-lint": "^2.0.2", "ember-cli-terser": "^4.0.2", - "ember-cli-update": "^0.54.6", "ember-concurrency": "^1.3.0", "ember-exam": "^6.1.0", "ember-export-application-global": "^2.0.1", @@ -75,7 +74,7 @@ "ember-page-title": "^6.2.2", "ember-qunit": "^5.1.4", "ember-resolver": "^8.0.3", - "ember-source": "~3.24.0", + "ember-source": "~3.28.4", "ember-template-lint": "^3.7.0", "ember-template-lint-plugin-prettier": "^2.0.0", "eslint": "^7.32.0", @@ -83,6 +82,7 @@ "eslint-plugin-ember": "^10.5.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-qunit": "^6.2.0", "faker": "^5.5.3", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", @@ -95,7 +95,7 @@ "sinon": "^11.1.2" }, "engines": { - "node": ">=10 <=15" + "node": ">=12 <=17" }, "ember": { "edition": "octane" diff --git a/ui/admin/tests/acceptance/accounts/create-test.js b/ui/admin/tests/acceptance/accounts/create-test.js index e68e69695..e852a5b64 100644 --- a/ui/admin/tests/acceptance/accounts/create-test.js +++ b/ui/admin/tests/acceptance/accounts/create-test.js @@ -150,12 +150,12 @@ module('Acceptance | accounts | create', function (hooks) { await fillIn('[name="name"]', 'new account'); await click('form [type="submit"]'); await a11yAudit(); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'The request was invalid.', 'Displays primary error message.' ); - assert.ok( + assert.equal( find('.rose-form-error-message').textContent.trim(), 'Name is required.', 'Displays field-level errors.' diff --git a/ui/admin/tests/acceptance/accounts/delete-test.js b/ui/admin/tests/acceptance/accounts/delete-test.js index 8b78b1834..da71a395a 100644 --- a/ui/admin/tests/acceptance/accounts/delete-test.js +++ b/ui/admin/tests/acceptance/accounts/delete-test.js @@ -93,8 +93,8 @@ module('Acceptance | accounts | delete', function (hooks) { await visit(urls.account); await click('.rose-layout-page-actions .rose-dropdown-button-danger'); await a11yAudit(); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'Oops.', 'Displays primary error message.' ); diff --git a/ui/admin/tests/acceptance/accounts/set-password-test.js b/ui/admin/tests/acceptance/accounts/set-password-test.js index 89f9ce3e7..67939ab83 100644 --- a/ui/admin/tests/acceptance/accounts/set-password-test.js +++ b/ui/admin/tests/acceptance/accounts/set-password-test.js @@ -100,13 +100,13 @@ module('Acceptance | accounts | set password', function (hooks) { // NOTE: since set password is a tabbed route with easy navigation away // from the form, and the form does not directly operate on a model instance, // a "cancel" flow doesn't make much sense. Disabling for now. - // test('can cancel setting new password', async function (assert) { - // assert.expect(1); - // await visit(urls.setPassword); - // await fillIn('[name="password"]', 'update password'); - // await click('form button:not([type="submit"])'); - // assert.notOk(find('[name="password"]').textContent.trim()); - // }); + test.skip('can cancel setting new password', async function (assert) { + assert.expect(1); + await visit(urls.setPassword); + await fillIn('[name="password"]', 'update password'); + await click('form button:not([type="submit"])'); + assert.notOk(find('[name="password"]').textContent.trim()); + }); test('errors are displayed when setting password fails', async function (assert) { assert.expect(1); diff --git a/ui/admin/tests/acceptance/accounts/update-test.js b/ui/admin/tests/acceptance/accounts/update-test.js index 163b7ac9e..139beeccf 100644 --- a/ui/admin/tests/acceptance/accounts/update-test.js +++ b/ui/admin/tests/acceptance/accounts/update-test.js @@ -103,8 +103,8 @@ module('Acceptance | accounts | update', function (hooks) { await fillIn('[name="name"]', 'save account'); await click('form [type="submit"]'); await a11yAudit(); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'Oops.', 'Displays primary error message.' ); @@ -136,12 +136,12 @@ module('Acceptance | accounts | update', function (hooks) { await fillIn('[name="name"]', 'existing account'); await click('form [type="submit"]'); await a11yAudit(); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'The request was invalid.', 'Displays primary error message.' ); - assert.ok( + assert.equal( find('.rose-form-error-message').textContent.trim(), 'Name is required.', 'Displays field-level errors.' diff --git a/ui/admin/tests/acceptance/auth-methods/delete-test.js b/ui/admin/tests/acceptance/auth-methods/delete-test.js index f80721f37..d2f32c18e 100644 --- a/ui/admin/tests/acceptance/auth-methods/delete-test.js +++ b/ui/admin/tests/acceptance/auth-methods/delete-test.js @@ -72,8 +72,8 @@ module('Acceptance | auth methods | delete', function (hooks) { await visit(urls.authMethod); await click('.rose-layout-page-actions .rose-dropdown-button-danger'); await a11yAudit(); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'Oops.', 'Displays primary error message.' ); diff --git a/ui/admin/tests/acceptance/auth-methods/oidc-test.js b/ui/admin/tests/acceptance/auth-methods/oidc-test.js index 3bc1f226b..ab37b1d62 100644 --- a/ui/admin/tests/acceptance/auth-methods/oidc-test.js +++ b/ui/admin/tests/acceptance/auth-methods/oidc-test.js @@ -102,38 +102,38 @@ module('Acceptance | auth methods | oidc', function (hooks) { }); // FIXME: How to mock just one request routed to /auth-methods and let everything else passthrough? - // test('errors are displayed when state update fails', async function (assert) { - // assert.expect(2); - // this.server.post('/auth-methods/:idMethod', (_, request) => { - // // Only respond to state update with error - // if (request.params.idMethod.match(/(change-state)/i)) { - // return new Response( - // 400, - // {}, - // { - // status: 400, - // code: 'error', - // message: 'Sorry!', - // } - // ); - // } - // return request; - // }); - // const newState = 'inactive'; - // await visit(urls.authMethod); - // await click('.rose-layout-page-actions .rose-dropdown-trigger'); - // await click(`.rose-dropdown[open] input[value="${newState}"]`); - // // debugger; - // const authMethod = this.server.db.authMethods.find(instances.authMethod.id); - // assert.notEqual( - // newState, - // authMethod.attributes.state, - // 'Auth method state is not be updated.' - // ); - // assert.ok( - // find('[role="alert"]').textContent.trim(), - // 'Sorry!', - // 'Displays error message.' - // ); - // }); + test.skip('errors are displayed when state update fails', async function (assert) { + assert.expect(2); + this.server.post('/auth-methods/:idMethod', (_, request) => { + // Only respond to state update with error + if (request.params.idMethod.match(/(change-state)/i)) { + return new Response( + 400, + {}, + { + status: 400, + code: 'error', + message: 'Sorry!', + } + ); + } + return request; + }); + const newState = 'inactive'; + await visit(urls.authMethod); + await click('.rose-layout-page-actions .rose-dropdown-trigger'); + await click(`.rose-dropdown[open] input[value="${newState}"]`); + // debugger; + const authMethod = this.server.db.authMethods.find(instances.authMethod.id); + assert.notEqual( + newState, + authMethod.attributes.state, + 'Auth method state is not be updated.' + ); + assert.ok( + find('.rose-notification-body').textContent.trim(), + 'Sorry!', + 'Displays error message.' + ); + }); }); diff --git a/ui/admin/tests/acceptance/auth-methods/update-test.js b/ui/admin/tests/acceptance/auth-methods/update-test.js index 8060e4382..859b0ae57 100644 --- a/ui/admin/tests/acceptance/auth-methods/update-test.js +++ b/ui/admin/tests/acceptance/auth-methods/update-test.js @@ -102,50 +102,12 @@ module('Acceptance | auth methods | update', function (hooks) { await fillIn('[name="name"]', 'existing auth method'); await click('form [type="submit"]'); await a11yAudit(); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'The request was invalid.', 'Displays primary error message.' ); - assert.ok( - find('.rose-form-error-message').textContent.trim(), - 'Name is required.', - 'Displays field-level errors.' - ); - }); - - test('saving an existing auth method with invalid fields displays error messages', async function (assert) { - assert.expect(2); - this.server.patch('/auth-methods/:id', () => { - return new Response( - 400, - {}, - { - status: 400, - code: 'invalid_argument', - message: 'The request was invalid.', - details: { - request_fields: [ - { - name: 'name', - description: 'Name is required.', - }, - ], - }, - } - ); - }); - await visit(urls.authMethod); - await click('form [type="button"]', 'Activate edit mode'); - await fillIn('[name="name"]', 'existing auth method'); - await click('form [type="submit"]'); - await a11yAudit(); - assert.ok( - find('[role="alert"]').textContent.trim(), - 'The request was invalid.', - 'Displays primary error message.' - ); - assert.ok( + assert.equal( find('.rose-form-error-message').textContent.trim(), 'Name is required.', 'Displays field-level errors.' diff --git a/ui/admin/tests/acceptance/authentication-test.js b/ui/admin/tests/acceptance/authentication-test.js index f42540f4f..3c1cedd48 100644 --- a/ui/admin/tests/acceptance/authentication-test.js +++ b/ui/admin/tests/acceptance/authentication-test.js @@ -5,7 +5,7 @@ import { fillIn, click, find, - //findAll, + findAll, getRootElement, //setupOnerror, } from '@ember/test-helpers'; @@ -300,23 +300,23 @@ module('Acceptance | authentication', function (hooks) { // This test is disabled because it is no longer relevant. On deauth, // the page is reloaded. If the user was viewing a route requiring // authentication, they will be redirected accordingly. - // test('deauthentication redirects to first global authenticate method', async function (assert) { - // assert.expect(3); - // await visit(authMethodAuthenticateURL); - // await fillIn('[name="identification"]', 'test'); - // await fillIn('[name="password"]', 'test'); - // await click('[type="submit"]'); - // assert.ok(currentSession().isAuthenticated); - // // Open header utilities dropdown - // await click('.rose-header-utilities .rose-dropdown summary'); - // // Find and click on last element in dropdown - should be deauthenticate button - // const menu = findAll( - // '.rose-header-utilities .rose-dropdown .rose-dropdown-content button' - // ); - // await click(menu[menu.length - 1]); - // assert.notOk(currentSession().isAuthenticated); - // assert.equal(currentURL(), authMethodGlobalAuthenticateURL); - // }); + test.skip('deauthentication redirects to first global authenticate method', async function (assert) { + assert.expect(3); + await visit(authMethodAuthenticateURL); + await fillIn('[name="identification"]', 'test'); + await fillIn('[name="password"]', 'test'); + await click('[type="submit"]'); + assert.ok(currentSession().isAuthenticated); + // Open header utilities dropdown + await click('.rose-header-utilities .rose-dropdown summary'); + // Find and click on last element in dropdown - should be deauthenticate button + const menu = findAll( + '.rose-header-utilities .rose-dropdown .rose-dropdown-content button' + ); + await click(menu[menu.length - 1]); + assert.notOk(currentSession().isAuthenticated); + assert.equal(currentURL(), authMethodGlobalAuthenticateURL); + }); test('401 responses result in deauthentication', async function (assert) { assert.expect(2); diff --git a/ui/admin/tests/acceptance/groups/create-test.js b/ui/admin/tests/acceptance/groups/create-test.js index 815e4a760..d3cc5fffb 100644 --- a/ui/admin/tests/acceptance/groups/create-test.js +++ b/ui/admin/tests/acceptance/groups/create-test.js @@ -109,12 +109,12 @@ module('Acceptance | groups | create', function (hooks) { await visit(urls.newGroup); await fillIn('[name="name"]', 'group name'); await click('[type="submit"]'); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'The request was invalid.', 'Displays primary error message.' ); - assert.ok( + assert.equal( find('.rose-form-error-message').textContent.trim(), 'Name is required.', 'Displays field-level errors.' diff --git a/ui/admin/tests/acceptance/groups/delete-test.js b/ui/admin/tests/acceptance/groups/delete-test.js index c1dec7fdb..58f7498b1 100644 --- a/ui/admin/tests/acceptance/groups/delete-test.js +++ b/ui/admin/tests/acceptance/groups/delete-test.js @@ -76,8 +76,8 @@ module('Acceptance | groups | delete', function (hooks) { }); await visit(urls.group); await click('.rose-layout-page-actions .rose-dropdown-button-danger'); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'Oops.', 'Displays primary error message.' ); diff --git a/ui/admin/tests/acceptance/groups/update-test.js b/ui/admin/tests/acceptance/groups/update-test.js index 6d39cefbe..696a88e48 100644 --- a/ui/admin/tests/acceptance/groups/update-test.js +++ b/ui/admin/tests/acceptance/groups/update-test.js @@ -95,12 +95,12 @@ module('Acceptance | groups | update', function (hooks) { await click('form [type="button"]', 'Activate edit mode'); await fillIn('[name="name"]', 'random string'); await click('[type="submit"]'); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'The request was invalid.', 'Displays primary error message.' ); - assert.ok( + assert.equal( find('.rose-form-error-message').textContent.trim(), 'Name is required.', 'Displays field-level errors.' diff --git a/ui/admin/tests/acceptance/roles/delete-test.js b/ui/admin/tests/acceptance/roles/delete-test.js index a965ff63a..ba0363e1d 100644 --- a/ui/admin/tests/acceptance/roles/delete-test.js +++ b/ui/admin/tests/acceptance/roles/delete-test.js @@ -88,8 +88,8 @@ module('Acceptance | roles | delete', function (hooks) { }); await visit(urls.role); await click('.rose-layout-page-actions .rose-dropdown-button-danger'); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'Oops.', 'Displays primary error message.' ); diff --git a/ui/admin/tests/acceptance/roles/update-test.js b/ui/admin/tests/acceptance/roles/update-test.js index 21737c705..aca161a54 100644 --- a/ui/admin/tests/acceptance/roles/update-test.js +++ b/ui/admin/tests/acceptance/roles/update-test.js @@ -107,12 +107,12 @@ module('Acceptance | roles | update', function (hooks) { await click('form [type="button"]', 'Activate edit mode'); await fillIn('[name="name"]', 'random string'); await click('[type="submit"]'); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'The request was invalid.', 'Displays primary error message.' ); - assert.ok( + assert.equal( find('.rose-form-error-message').textContent.trim(), 'Name is required.', 'Displays field-level errors.' diff --git a/ui/admin/tests/acceptance/users/create-test.js b/ui/admin/tests/acceptance/users/create-test.js index b69a1f3df..12261e9f5 100644 --- a/ui/admin/tests/acceptance/users/create-test.js +++ b/ui/admin/tests/acceptance/users/create-test.js @@ -97,12 +97,12 @@ module('Acceptance | users | create', function (hooks) { await visit(newUserURL); await fillIn('[name="name"]', 'User name'); await click('[type="submit"]'); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'The request was invalid.', 'Displays primary error message.' ); - assert.ok( + assert.equal( find('.rose-form-error-message').textContent.trim(), 'Name is required.', 'Displays field-level errors.' diff --git a/ui/admin/tests/acceptance/users/delete-test.js b/ui/admin/tests/acceptance/users/delete-test.js index 14b5371fc..2146278f6 100644 --- a/ui/admin/tests/acceptance/users/delete-test.js +++ b/ui/admin/tests/acceptance/users/delete-test.js @@ -77,8 +77,8 @@ module('Acceptance | users | delete', function (hooks) { }); await visit(userURL); await click('.rose-layout-page-actions .rose-dropdown-button-danger'); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'Oops.', 'Displays primary error message.' ); diff --git a/ui/admin/tests/acceptance/users/update-test.js b/ui/admin/tests/acceptance/users/update-test.js index 931a58641..f7f448156 100644 --- a/ui/admin/tests/acceptance/users/update-test.js +++ b/ui/admin/tests/acceptance/users/update-test.js @@ -96,12 +96,12 @@ module('Acceptance | users | update', function (hooks) { await click('form [type="button"]', 'Activate edit mode'); await fillIn('[name="name"]', 'User name'); await click('[type="submit"]'); - assert.ok( - find('[role="alert"]').textContent.trim(), + assert.equal( + find('.rose-notification-body').textContent.trim(), 'The request was invalid.', 'Displays primary error message.' ); - assert.ok( + assert.equal( find('.rose-form-error-message').textContent.trim(), 'Name is required.', 'Displays field-level errors.' diff --git a/ui/desktop/.editorconfig b/ui/desktop/.editorconfig index c35a00240..41302d1b0 100644 --- a/ui/desktop/.editorconfig +++ b/ui/desktop/.editorconfig @@ -12,8 +12,5 @@ insert_final_newline = true indent_style = space indent_size = 2 -[*.hbs] -insert_final_newline = false - [*.{diff,md}] trim_trailing_whitespace = false diff --git a/ui/desktop/.eslintrc.js b/ui/desktop/.eslintrc.js index 6d20176b1..44c31c752 100644 --- a/ui/desktop/.eslintrc.js +++ b/ui/desktop/.eslintrc.js @@ -56,5 +56,10 @@ module.exports = { 'node/no-unpublished-require': 'off', }, }, + { + // Test files: + files: ['tests/**/*-test.{js,ts}'], + extends: ['plugin:qunit/recommended'], + }, ], }; diff --git a/ui/desktop/package.json b/ui/desktop/package.json index 590e92035..bc9420931 100755 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -72,7 +72,7 @@ "ember-a11y-testing": "^4.2.0", "ember-auto-import": "^1.12.0", "ember-autofocus-modifier": "^2.0.0", - "ember-cli": "~3.28.0", + "ember-cli": "~3.28.3", "ember-cli-app-version": "^5.0.0", "ember-cli-babel": "^7.26.6", "ember-cli-code-coverage": "^1.0.3", @@ -95,7 +95,7 @@ "ember-page-title": "^6.2.2", "ember-qunit": "^5.1.4", "ember-resolver": "^8.0.3", - "ember-source": "~3.24.0", + "ember-source": "~3.28.4", "ember-template-lint": "^3.7.0", "ember-template-lint-plugin-prettier": "^2.0.0", "eslint": "^7.32.0", @@ -103,6 +103,7 @@ "eslint-plugin-ember": "^10.5.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-qunit": "^6.2.0", "faker": "^5.5.3", "loader.js": "^4.7.0", "npm-run-all": "^4.1.5", @@ -117,7 +118,7 @@ "stylelint-config-sass-guidelines": "^8.0.0" }, "engines": { - "node": ">=10 <=15" + "node": ">=12 <=17" }, "ember": { "edition": "octane" diff --git a/ui/desktop/tests/integration/components/dialog-detail-test.js b/ui/desktop/tests/integration/components/dialog-detail-test.js index e3e483325..18156fb76 100644 --- a/ui/desktop/tests/integration/components/dialog-detail-test.js +++ b/ui/desktop/tests/integration/components/dialog-detail-test.js @@ -13,7 +13,7 @@ module('Integration | Component | dialog-detail', function (hooks) { test('it renders with content', async function (assert) { await render(hbs` - +

Test

diff --git a/ui/desktop/tests/unit/services/ipc-test.js b/ui/desktop/tests/unit/services/ipc-test.js index d193074c5..2e3ab6ae3 100644 --- a/ui/desktop/tests/unit/services/ipc-test.js +++ b/ui/desktop/tests/unit/services/ipc-test.js @@ -73,7 +73,7 @@ module('Unit | Service | ipc', function (hooks) { }); }); - test('IPCRequests reject if receiving an Error instance, where the rejection value is the parsed JSON Error message', async (assert) => { + test('IPCRequests reject if receiving an Error instance, where the rejection value is the parsed JSON Error message', async function (assert) { assert.expect(1); const stringifiedPayload = JSON.stringify({ foo: 'bar', diff --git a/yarn.lock b/yarn.lock index cabf52ea1..9e8fd65eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2613,6 +2613,13 @@ resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.44.0.tgz#03d127097dc9cb23052cdb7fcae59d0a9dca53e1" integrity sha512-i01plR0EgFVz69GDrEuFgq1NheIjZcyTy3c7q+w7d096ddPVeVcRzU3LKaqCfovvLJ+6lJx40j45ecycASUUyw== +"@glimmer/vm-babel-plugins@0.80.3": + version "0.80.3" + resolved "https://registry.yarnpkg.com/@glimmer/vm-babel-plugins/-/vm-babel-plugins-0.80.3.tgz#434b62172318cac43830d3ac29818cf2c5f111c1" + integrity sha512-9ej6xlm5MzHBJ5am2l0dbbn8Z0wJoYoMpM8FcrGMlUP6SPMLWxvxpMsApgQo8u6dvZRCjR3/bw3fdf7GOy0AFw== + dependencies: + babel-plugin-debug-macros "^0.3.4" + "@glimmer/vm@^0.42.2": version "0.42.2" resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.42.2.tgz#492a4f05eac587c3a37371b3c62593f20bef553d" @@ -6354,28 +6361,6 @@ body@^5.1.0: raw-body "~1.1.0" safe-json-parse "~1.0.1" -boilerplate-update@0.37.4: - version "0.37.4" - resolved "https://registry.yarnpkg.com/boilerplate-update/-/boilerplate-update-0.37.4.tgz#51993eccd468fab69457dff799c29b632faf942e" - integrity sha512-BMUFsxjugQAsRXHT3QPWckpiB+0jp7YU7U7cGSDbL7IATMfJJDCE7/LGppaIzN97/3iLemkbCeRpmjZWRHYdMA== - dependencies: - cpr "^3.0.1" - debug "^4.1.1" - execa "^3.0.0" - git-diff-apply "0.22.7" - https-proxy-agent "^3.0.0" - inquirer "^7.0.0" - merge-package.json "^3.1.8" - npm-package-arg "^7.0.0" - npx "^10.2.0" - open "^7.0.0" - p-reduce "^2.0.0" - pacote "10.2.1" - rimraf "^3.0.0" - semver "^6.0.0" - tmp "0.1.0" - which "^2.0.1" - boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -7316,30 +7301,6 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" - integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== - dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" - fs-minipass "^2.0.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" - promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" - unique-filename "^1.1.1" - cacache@^15.0.5: version "15.2.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" @@ -7719,7 +7680,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.3, chownr@^1.1.4: +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -7927,15 +7888,6 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -7945,15 +7897,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -8431,16 +8374,6 @@ cp-file@^7.0.0: nested-error-stacks "^2.0.0" p-event "^4.1.0" -cpr@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cpr/-/cpr-3.0.1.tgz#b9a55038b7cd81a35c17b9761895bd8496aef1e5" - integrity sha1-uaVQOLfNgaNcF7l2GJW9hJau8eU= - dependencies: - graceful-fs "^4.1.5" - minimist "^1.2.0" - mkdirp "~0.5.1" - rimraf "^2.5.4" - cpy@^8.1.1: version "8.1.2" resolved "https://registry.yarnpkg.com/cpy/-/cpy-8.1.2.tgz#e339ea54797ad23f8e3919a5cffd37bfc3f25935" @@ -9925,23 +9858,6 @@ ember-cli-typescript@^4.0.0, ember-cli-typescript@^4.1.0, ember-cli-typescript@^ stagehand "^1.0.0" walk-sync "^2.2.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" - integrity sha512-0YWkfACDrITm9sl3UNrP8BMYXbRt+iPbAUUv/tY3JWveat8j3aHBR1SI4MqESt3ELkLeLbftTQfU42Tx4Bl/Kg== - dependencies: - boilerplate-update "0.37.4" - debug "^4.1.1" - execa "^3.4.0" - fs-extra "^8.0.0" - inquirer "^7.0.0" - npm-package-arg "^7.0.0" - resolve "^1.10.0" - semver "^6.0.0" - tmp "0.1.0" - update-notifier "^4.0.0" - yargs "^15.1.0" - ember-cli-version-checker@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-1.3.1.tgz#0bc2d134c830142da64bf9627a0eded10b61ae72" @@ -9983,10 +9899,10 @@ ember-cli-version-checker@^5.0.1, ember-cli-version-checker@^5.1.1, ember-cli-ve semver "^7.3.4" silent-error "^1.1.1" -ember-cli@~3.28.0: - version "3.28.0" - resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.28.0.tgz#0a0374c9a1d08386ddf56e8098a38b71dd4453bc" - integrity sha512-CrMs5edFQ2ingO2xfT33T4nUEl8SlvBQ7q+XO9L/GFTvFU07slHxYSvGur0cwgQfOiLnkSTnIaVF1oqBnEmfPQ== +ember-cli@~3.28.3: + version "3.28.3" + resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.28.3.tgz#3384c3fb018b58111e30efed15a2f6a9b66b84c3" + integrity sha512-DddAQAddbyaOU4NAjTt8g+FoCCK/F00kbj9pcHO1lfAUpIUS9JPBoWxxZ3qO08mUNXi50pdQSPVVRWzN7mNz2g== dependencies: "@babel/core" "^7.13.8" "@babel/plugin-transform-modules-amd" "^7.12.1" @@ -10528,19 +10444,21 @@ ember-source-channel-url@^3.0.0: dependencies: node-fetch "^2.6.0" -ember-source@~3.24.0: - version "3.24.5" - resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.24.5.tgz#7e1da13286f7d1ac63b3d3a547aaeb40bc18a696" - integrity sha512-j39L7C+q9o9qkwrwNtRN1AVGzE8TlxHm0c6xMzFZFaWMyQt3E7ov72fz3oIn17h8H7zZ1i7dl471Rbqx1GZsLw== +ember-source@~3.28.4: + version "3.28.4" + resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.28.4.tgz#b6ac2b1e369ef533d05164c65078b4ceafdb6390" + integrity sha512-s7kVy0E08erAHUTI/8SZZvXt3an/xb2g5K+m4Rybvo8Tr/noMk3lIdtyQkSvmgMZ/BbvoW8spS630sO0/JN4Eg== dependencies: "@babel/helper-module-imports" "^7.8.3" "@babel/plugin-transform-block-scoping" "^7.8.3" "@babel/plugin-transform-object-assign" "^7.8.3" "@ember/edition-utils" "^1.2.0" - babel-plugin-debug-macros "^0.3.3" + "@glimmer/vm-babel-plugins" "0.80.3" + babel-plugin-debug-macros "^0.3.4" babel-plugin-filter-imports "^4.0.0" broccoli-concat "^4.2.4" broccoli-debug "^0.6.4" + broccoli-file-creator "^2.1.1" broccoli-funnel "^2.0.2" broccoli-merge-trees "^4.2.0" chalk "^4.0.0" @@ -10553,9 +10471,9 @@ ember-source@~3.24.0: ember-cli-version-checker "^5.1.1" ember-router-generator "^2.0.0" inflection "^1.12.0" - jquery "^3.5.0" + jquery "^3.5.1" resolve "^1.17.0" - semver "^6.1.1" + semver "^7.3.4" silent-error "^1.1.1" ember-template-lint-plugin-prettier@^2.0.0: @@ -11086,6 +11004,14 @@ eslint-plugin-prettier@^4.0.0: dependencies: prettier-linter-helpers "^1.0.0" +eslint-plugin-qunit@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-qunit/-/eslint-plugin-qunit-6.2.0.tgz#f4efda29da99523e560848d9592c39c0590c308d" + integrity sha512-KvPmkIC2MHpfRxs/r8WUeeGkG6y+3qwSi2AZIBtjcM/YG6Z3k0GxW5Hbu3l7X0TDhljVCeBb9Q5puUkHzl83Mw== + dependencies: + eslint-utils "^3.0.0" + requireindex "^1.2.0" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -11364,7 +11290,7 @@ execa@^2.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^3.0.0, execa@^3.4.0: +execa@^3.0.0: version "3.4.0" resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== @@ -11992,7 +11918,7 @@ fixturify-project@^2.1.1: tmp "^0.0.33" type-fest "^0.11.0" -fixturify@^1.0.0, fixturify@^1.2.0: +fixturify@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/fixturify/-/fixturify-1.3.0.tgz#163c468093c7c4d90b70cde39fd6325f6528b25d" integrity sha512-tL0svlOy56pIMMUQ4bU1xRe6NZbFSa/ABTWMxW2mH38lFGc9TrNAKWcMBQ7eIjo3wqSS8f2ICabFaatFyFmrVQ== @@ -12568,18 +12494,6 @@ git-cz@^4.3.1: resolved "https://registry.yarnpkg.com/git-cz/-/git-cz-4.7.6.tgz#1250c486f01724e801a630b848fd8786f7e67e90" integrity sha512-WtQEXqetJSi9LKPI77bMdSQWvLGjE93egVbR0zjXd1KFKrFvo/YE/UuGNcMeBDiwzxfQBhjyV7Hn0YUZ8Q0BcQ== -git-diff-apply@0.22.7: - version "0.22.7" - resolved "https://registry.yarnpkg.com/git-diff-apply/-/git-diff-apply-0.22.7.tgz#25989575c025f45f066579233894ba8a4afb7e28" - integrity sha512-tYExAfjrgh/ImXuOmHYnL4dC5spf3e4+mJSYUoaQTZkys3krEX303yFxhVxMTzljsWScgrWj0iGL3Lb0yROhtQ== - dependencies: - debug "^4.0.0" - fixturify "^1.0.0" - fs-extra "^8.0.0" - tmp "0.1.0" - uuid "^3.1.0" - yargs "^15.0.0" - git-fetch-pack@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/git-fetch-pack/-/git-fetch-pack-0.1.1.tgz#7703a32cf0db80f060d2766a34ac00d02cebcdf5" @@ -12736,13 +12650,6 @@ global-dirs@^0.1.0, global-dirs@^0.1.1: dependencies: ini "^1.3.4" -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - global-dirs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" @@ -12999,7 +12906,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -13353,7 +13260,7 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.9, hosted-git-info@^3.0.2, hosted-git-info@^3.0.8, hosted-git-info@^4.0.1: +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.9, hosted-git-info@^3.0.8, hosted-git-info@^4.0.1: version "3.0.8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== @@ -13550,14 +13457,6 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - https-proxy-agent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" @@ -13742,11 +13641,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - ini@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" @@ -13825,7 +13719,7 @@ inquirer@^0.12.0: strip-ansi "^3.0.0" through "^2.3.6" -inquirer@^7.0.0, inquirer@^7.3.3: +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== @@ -13900,11 +13794,6 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -14180,14 +14069,6 @@ is-installed-globally@^0.1.0: global-dirs "^0.1.0" is-path-inside "^1.0.0" -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -14242,11 +14123,6 @@ is-npm@^1.0.0: resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - is-npm@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" @@ -14293,7 +14169,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-path-inside@^3.0.1, is-path-inside@^3.0.2: +is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -14704,7 +14580,7 @@ jpeg-js@^0.4.2: resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b" integrity sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q== -jquery@^3.5.0: +jquery@^3.5.1: version "3.6.0" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== @@ -15086,7 +14962,7 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" -latest-version@^5.0.0, latest-version@^5.1.0: +latest-version@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== @@ -15116,13 +14992,6 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - leek@0.0.24: version "0.0.24" resolved "https://registry.yarnpkg.com/leek/-/leek-0.0.24.tgz#e400e57f0e60d8ef2bd4d068dc428a54345dbcda" @@ -15273,20 +15142,6 @@ libnpmteam@^1.0.2: get-stream "^4.0.0" npm-registry-fetch "^4.0.0" -libnpx@10.2.2: - version "10.2.2" - resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.2.tgz#5a4171b9b92dd031463ef66a4af9f5cbd6b09572" - integrity sha512-ujaYToga1SAX5r7FU5ShMFi88CWpY75meNZtr6RtEyv4l2ZK3+Wgvxq2IqlwWBiDZOqhumdeiocPS1aKrCMe3A== - dependencies: - dotenv "^5.0.1" - npm-package-arg "^6.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.0" - update-notifier "^2.3.0" - which "^1.3.0" - y18n "^4.0.0" - yargs "^11.0.0" - libnpx@^10.2.4: version "10.2.4" resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.4.tgz#ef0e3258e29aef2ec7ee3276115e20e67f67d4ee" @@ -16329,14 +16184,6 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge-package.json@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/merge-package.json/-/merge-package.json-3.1.8.tgz#2da5ee453c3745565b2fea3bf31dc6ef81e712d7" - integrity sha512-3/xqeMFcGqMpX79qNs3SDAsNNZ1Q31nqeH0ma4ilB++4SqDnkzmHcbDNEVy67RWIy+pdAdw6XnY31dircVG5lQ== - dependencies: - rfc6902-ordered "^4.0.5" - three-way-merger "0.6.3" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -16529,17 +16376,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.4.tgz#63f5af868a38746ca7b33b03393ddf8c291244fe" - integrity sha512-TielGogIzbUEtd1LsjZFs47RWuHHfhl6TiCx1InVxApBAmQ8bL0dL5ilkLGcRvuyW/A9nE+Lvn855Ewz8S0PnQ== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" @@ -16588,7 +16424,7 @@ minipass@^2.2.0, minipass@^2.3.5: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0, minipass@^3.0.1, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== @@ -17166,16 +17002,6 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-package-arg@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-7.0.0.tgz#52cdf08b491c0c59df687c4c925a89102ef794a5" - integrity sha512-xXxr8y5U0kl8dVkz2oK7yZjPBvqM2fwaO5l3Yg13p03v8+E3qQcD0JNhHzjL1vyGgxcKkD0cco+NLR72iuPk3g== - dependencies: - hosted-git-info "^3.0.2" - osenv "^0.1.5" - semver "^5.6.0" - validate-npm-package-name "^3.0.0" - npm-package-arg@^8.0.0, npm-package-arg@^8.1.1: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" @@ -17185,7 +17011,7 @@ npm-package-arg@^8.0.0, npm-package-arg@^8.1.1: semver "^7.3.4" 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: +npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== @@ -17203,15 +17029,6 @@ npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: npm-package-arg "^6.0.0" semver "^5.4.1" -npm-pick-manifest@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-4.0.0.tgz#5e1b392a2a6310378b9bab32332597030ca073ce" - integrity sha512-SsYReLe/16UgSL6GKX6GO4o3RVBthVy1uuHq6kZ9mkPeQXpOHbrLZoV13i8fr3LQtET+pLPSfD13e4RIYfkX5Q== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^7.0.0" - semver "^5.4.1" - npm-profile@^4.0.2, npm-profile@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" @@ -17221,7 +17038,7 @@ npm-profile@^4.0.2, npm-profile@^4.0.4: figgy-pudding "^3.4.1" npm-registry-fetch "^4.0.0" -npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7, npm-registry-fetch@^5.0.1, npm-registry-fetch@~8.1.1: +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7, npm-registry-fetch@~8.1.1: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-8.1.5.tgz#33270c6722030c2d158a970d1327dcd9a149b5c5" integrity sha512-yZPNoJK9clx1jhSXU54kU6Aj1SV2p7mXUs1W/6OjQvek3wb1RrjDCrt4iY1+VX9eBQvvSGEpzNmYkRUaTL8rqg== @@ -17276,7 +17093,7 @@ npm-user-validate@^1.0.1: resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== -npm@5.1.0, npm@~6.14.6: +npm@~6.14.6: version "6.14.15" resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.15.tgz#97dd51af5b5d6225b611b40c5cb4d31da1d467fe" integrity sha512-dkcQc4n+DiJAMYG2haNAMyJbmuvevjXz+WC9dCUzodw8EovwTIc6CATSsTEplCY6c0jG4OshxFGFJsrnKJguWA== @@ -17407,14 +17224,6 @@ npmlog@^4.0.0, npmlog@^4.0.2, npmlog@^4.1.2, npmlog@~4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -npx@^10.2.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/npx/-/npx-10.2.2.tgz#de4be1b76e6bcbf750486925b34a07eed1db01b4" - integrity sha512-eImmySusyeWphzs5iNh791XbZnZG0FSNvM4KSah34pdQQIDsdTDhIwg1sjN3AIVcjGLpbQ/YcfqHPshKZQK1fA== - dependencies: - libnpx "10.2.2" - npm "5.1.0" - nth-check@^1.0.2, nth-check@^2.0.0, nth-check@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -17593,7 +17402,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^7.0.0, open@^7.0.2, open@^7.0.3, open@^7.2.1: +open@^7.0.2, open@^7.0.3, open@^7.2.1: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== @@ -17685,15 +17494,6 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -17853,11 +17653,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-reduce@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - p-timeout@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" @@ -17902,31 +17697,6 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" -pacote@10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-10.2.1.tgz#4107f72eeaaacb47eb68952ed31c050bab9d3f94" - integrity sha512-sPHVOF7uKY8yDivKYimb5l3D8BvNNjR+9FmzkThOTtftkddGY/C6uENVkgc3HQtOpCX8R2qztkSAOI369bgLEA== - dependencies: - cacache "^13.0.1" - chownr "^1.1.3" - fs-minipass "^2.0.0" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.1" - minipass-fetch "^1.2.1" - npm-package-arg "^7.0.0" - npm-packlist "^1.4.6" - npm-pick-manifest "^4.0.0" - npm-registry-fetch "^5.0.1" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - read-package-json-fast "^1.0.3" - semver "^6.3.0" - ssri "^7.1.0" - tar "^5.0.5" - which "^2.0.1" - pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: version "9.5.12" resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" @@ -18858,7 +18628,7 @@ punycode@^1.2.4, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -pupa@^2.0.1, pupa@^2.1.1: +pupa@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== @@ -19280,14 +19050,6 @@ read-installed@~4.0.3: optionalDependencies: graceful-fs "^4.1.2" -read-package-json-fast@^1.0.3: - version "1.2.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-1.2.2.tgz#fba77b0b0d66b1ab344e214cb0876577e749c423" - integrity sha512-39DbPJjkltEzfXJXB6D8/Ir3GFOU2YbSKa2HaB/Y3nKrc/zY+0XrALpID6/13ezWyzqvOHrBbR4t4cjQuTdBVQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" @@ -20081,19 +19843,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfc6902-ordered@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/rfc6902-ordered/-/rfc6902-ordered-4.0.5.tgz#054a23984401ad276aa668def89e010038e4dd95" - integrity sha512-OsdXZ7FP8DPXd+p+qRxAYi2yFsgAzTp4+ZuvhJri6lLyZYsm3zvGGq5qrmN/jmmv06IV/KVDT062owHUc2Ec+A== - dependencies: - debug "^4.0.0" - rfc6902 "^3.0.1" - -rfc6902@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/rfc6902/-/rfc6902-3.1.1.tgz#24fc3b2568496100ac507c2e27e61ec5a1c134dd" - integrity sha512-aHiEm2S4mQSyyIaK7NVotfmVkgOOn1K9iuuSCIKJ8eIAte/8o06Vp06Z2NcLrmMahDmA+2F6oHx33P4NOQ1JnQ== - rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.1, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.2, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -21003,14 +20752,6 @@ ssri@^6.0.0, ssri@^6.0.1, ssri@^6.0.2: dependencies: figgy-pudding "^3.5.1" -ssri@^7.0.0, ssri@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f" - integrity sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw== - dependencies: - figgy-pudding "^3.5.1" - minipass "^3.1.1" - ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -21613,7 +21354,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4, tar@^4.4.10, tar@^4.4.12, tar@^4.4.19, tar@^5.0.5, tar@^6.0.2, tar@^6.0.5, tar@^6.1.0, tar@^6.1.9: +tar@^4, tar@^4.4.10, tar@^4.4.12, tar@^4.4.19, tar@^6.0.2, tar@^6.0.5, tar@^6.1.0, tar@^6.1.9: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -21773,13 +21514,6 @@ text-table@0.2.0, text-table@^0.2.0, text-table@~0.2.0: resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.6.0.tgz#d7e4ab13fe54e32e08873be40d51b74229b00fc4" integrity sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ== -three-way-merger@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/three-way-merger/-/three-way-merger-0.6.3.tgz#ad4d9cd889f0c81ab2e820301a4663ee5def0334" - integrity sha512-sjXsAqIiluhRBvbXfri1dBI5NSqfl/fe8R3QypAR15qeMRrsBodrGeROBtve2BQnxB9Ub6Fs0e/H1OZdaELD7A== - dependencies: - semver "^6.0.0" - throttle-debounce@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" @@ -21893,7 +21627,7 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@0.1.0, tmp@^0.1.0: +tmp@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== @@ -22540,25 +22274,6 @@ update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" -update-notifier@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - update-notifier@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" @@ -22747,7 +22462,7 @@ uuid-browser@^3.1.0: resolved "https://registry.yarnpkg.com/uuid-browser/-/uuid-browser-3.1.0.tgz#0f05a40aef74f9e5951e20efbf44b11871e56410" integrity sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA= -uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -23232,15 +22947,6 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -23396,7 +23102,7 @@ yaml@^1.10.0, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@20.2.4, yargs-parser@^15.0.1, yargs-parser@^18.1.2, yargs-parser@^20.0.0, yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^7.0.0, yargs-parser@^9.0.2, yargs-parser@~20.2.7: +yargs-parser@20.2.4, yargs-parser@^15.0.1, yargs-parser@^20.0.0, yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^7.0.0, yargs-parser@~20.2.7: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== @@ -23424,24 +23130,6 @@ yargs@16.2.0, yargs@^16.0.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" - integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - yargs@^14.2.3: version "14.2.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" @@ -23459,23 +23147,6 @@ yargs@^14.2.3: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.0.0, yargs@^15.1.0: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"